Skip to content

Commit fb64bfb

Browse files
committed
[Partisia] Move sample data utilities out of production source set - #113
1 parent 8365e32 commit fb64bfb

4 files changed

Lines changed: 10 additions & 82 deletions

File tree

README.md

Lines changed: 0 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -523,69 +523,6 @@ val givenNameDisplay = givenNameClaim.issuerMetadata?.display
523523
?.find { it.locale == Locale.getDefault() }
524524
```
525525

526-
### Working with sample documents
527-
528-
The library also provides a `SampleDocumentManager` implementation that can be used to load sample
529-
documents and test the library easily. Currently, the library supports loading sample documents in
530-
MsoMdoc format.
531-
532-
The following code snippet shows how to create an instance of the `SampleDocumentManager` class and
533-
load sample documents:
534-
535-
```kotlin
536-
val sampleDocumentManager = SampleDocumentManager.Builder()
537-
.setDocumentManager(documentManager)
538-
.build()
539-
540-
val sampleMdocDocuments: ByteArray = readFileWithSampleData()
541-
542-
val createSettings = CreateDocumentSettings(
543-
secureAreaIdentifier = SoftwareSecureArea.IDENTIFIER,
544-
createKeySettings = SoftwareCreateKeySettings.Builder().build(),
545-
numberOfCredentials = 3, // Create multiple credentials for sample documents
546-
credentialPolicy = CredentialPolicy.RotateUse
547-
)
548-
val loadResult = sampleDocumentManager.loadMdocSampleDocuments(
549-
sampleData = sampleMdocDocuments,
550-
createSettings = createSettings,
551-
documentNamesMap = mapOf(
552-
"eu.europa.ec.eudi.pid.1" to "EU PID",
553-
"org.iso.18013.5.1.mDL" to "mDL"
554-
)
555-
)
556-
557-
val documentIds: List<DocumentId> = loadResult.getOrThrow()
558-
559-
// ...
560-
561-
fun readFileWithSampleData(): ByteArray = TODO("Reads the bytes from file with sample documents")
562-
```
563-
564-
Method `SampleDocumentManager.loadMdocSampleDocuments()` expects sampleData to be in CBOR format
565-
with the following structure:
566-
567-
```cddl
568-
SampleData = {
569-
"documents" : [+Document], ; Returned documents
570-
}
571-
Document = {
572-
"docType" : DocType, ; Document type returned
573-
"issuerSigned" : IssuerSigned, ; Returned data elements signed by the issuer
574-
}
575-
IssuerSigned = {
576-
"nameSpaces" : IssuerNameSpaces, ; Returned data elements
577-
}
578-
IssuerNameSpaces = { ; Returned data elements for each namespace
579-
+ NameSpace => [ + IssuerSignedItemBytes ]
580-
}
581-
IssuerSignedItem = {
582-
"digestID" : uint, ; Digest ID for issuer data authentication
583-
"random" : bstr, ; Random value for issuer data authentication
584-
"elementIdentifier" : DataElementIdentifier, ; Data element identifier
585-
"elementValue" : DataElementValue ; Data element value
586-
}
587-
```
588-
589526
### Other features
590527

591528
```kotlin

document-manager/src/main/java/eu/europa/ec/eudi/wallet/document/internal/SampleDataUtil.kt renamed to document-manager/src/test/java/eu/europa/ec/eudi/wallet/document/sample/SampleDataUtil.kt

Lines changed: 10 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
* See the License for the specific language governing permissions and
1414
* limitations under the License.
1515
*/
16-
package eu.europa.ec.eudi.wallet.document.internal
16+
package eu.europa.ec.eudi.wallet.document.sample
1717

1818
import COSE.AlgorithmID.ECDSA_256
1919
import COSE.HeaderKeys.Algorithm
2020
import COSE.OneKey
2121
import COSE.Sign1Message
2222
import com.upokecenter.cbor.CBORObject
23+
import eu.europa.ec.eudi.wallet.document.internal.getEmbeddedCBORObject
24+
import eu.europa.ec.eudi.wallet.document.internal.withTag24
2325
import org.bouncycastle.jce.provider.BouncyCastleProvider
2426
import org.bouncycastle.util.io.pem.PemReader
2527
import org.multipaz.crypto.EcPublicKey
@@ -64,28 +66,24 @@ wibtidg8cLtZ7sCW59rUvdnz5wvo3VXndZi3sj0jf8CAKZZZNTE=
6466

6567
private val bc = BouncyCastleProvider()
6668

67-
@JvmSynthetic
68-
internal val issuerPrivateKey: PrivateKey = PemReader(SAMPLE_ISSUER_PRIVATE_KEY.reader())
69+
val issuerPrivateKey: PrivateKey = PemReader(SAMPLE_ISSUER_PRIVATE_KEY.reader())
6970
.use { reader -> reader.readPemObject().content }
7071
.let { privateKeyBytes ->
7172
KeyFactory.getInstance("EC", bc)
7273
.generatePrivate(PKCS8EncodedKeySpec(privateKeyBytes))
7374
}
7475

75-
@JvmSynthetic
76-
internal val issuerCertificate: X509Certificate = PemReader(SAMPLE_ISSUER_DS.reader())
76+
val issuerCertificate: X509Certificate = PemReader(SAMPLE_ISSUER_DS.reader())
7777
.use { reader -> reader.readPemObject().content }
7878
.let { certificateBytes ->
7979
CertificateFactory.getInstance("X.509", bc)
8080
.generateCertificate(certificateBytes.inputStream())
8181
} as X509Certificate
8282

83-
@get:JvmSynthetic
84-
internal val PrivateKey.oneKey
83+
val PrivateKey.oneKey
8584
get() = OneKey(null, this)
8685

87-
@JvmSynthetic
88-
internal fun generateMso(
86+
fun generateMso(
8987
digestAlg: String,
9088
docType: String,
9189
authKey: EcPublicKey,
@@ -107,8 +105,7 @@ internal fun generateMso(
107105
}
108106
.generate()
109107

110-
@JvmSynthetic
111-
internal fun calculateDigests(
108+
fun calculateDigests(
112109
digestAlg: String,
113110
issuerSignedItems: CBORObject
114111
): Map<Long, ByteArray> {
@@ -120,16 +117,14 @@ internal fun calculateDigests(
120117
}
121118
}
122119

123-
@JvmSynthetic
124-
internal fun signMso(mso: ByteArray) = Sign1Message(false, true).apply {
120+
fun signMso(mso: ByteArray) = Sign1Message(false, true).apply {
125121
protectedAttributes.Add(Algorithm.AsCBOR(), ECDSA_256.AsCBOR())
126122
unprotectedAttributes.Add(33L, issuerCertificate.encoded)
127123
SetContent(mso.withTag24())
128124
sign(issuerPrivateKey.oneKey)
129125
}.EncodeToCBORObject()
130126

131-
@JvmSynthetic
132-
internal fun generateData(
127+
fun generateData(
133128
issuerNameSpaces: CBORObject,
134129
issuerAuth: CBORObject,
135130
): ByteArray {

document-manager/src/main/java/eu/europa/ec/eudi/wallet/document/sample/SampleDocumentManager.kt renamed to document-manager/src/test/java/eu/europa/ec/eudi/wallet/document/sample/SampleDocumentManager.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -139,4 +139,3 @@ interface SampleDocumentManager : DocumentManager {
139139
}
140140
}
141141
}
142-

document-manager/src/main/java/eu/europa/ec/eudi/wallet/document/sample/SampleDocumentManagerImpl.kt renamed to document-manager/src/test/java/eu/europa/ec/eudi/wallet/document/sample/SampleDocumentManagerImpl.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,6 @@ import eu.europa.ec.eudi.wallet.document.DocumentManager
2323
import eu.europa.ec.eudi.wallet.document.Outcome
2424
import eu.europa.ec.eudi.wallet.document.credential.IssuerProvidedCredential
2525
import eu.europa.ec.eudi.wallet.document.format.MsoMdocFormat
26-
import eu.europa.ec.eudi.wallet.document.internal.generateData
27-
import eu.europa.ec.eudi.wallet.document.internal.generateMso
28-
import eu.europa.ec.eudi.wallet.document.internal.signMso
2926
import kotlinx.coroutines.runBlocking
3027
import org.bouncycastle.jce.provider.BouncyCastleProvider
3128
import org.jetbrains.annotations.VisibleForTesting

0 commit comments

Comments
 (0)