@procivis/react-native-one-core 1.26999.0 → 1.41710.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +71 -40
- package/android/build.gradle +46 -10
- package/android/build.gradle_opensource +121 -0
- package/android/libs/core-reactnative-compatible-2025.0305.1.aar +0 -0
- package/android/src/main/AndroidManifest.xml +5 -2
- package/android/src/main/java/ch/procivis/one/core/Deserialize.kt +10 -6
- package/android/src/main/java/ch/procivis/one/core/DeserializeSpecific.kt +13 -5
- package/android/src/main/java/ch/procivis/one/core/ProcivisOneCoreModule.kt +251 -79
- package/android/src/main/java/ch/procivis/one/core/ProcivisOneCorePackage.kt +3 -4
- package/android/src/main/java/ch/procivis/one/core/SerializeSpecific.kt +13 -1
- package/android/src/main/java/ch/procivis/one/core/Util.kt +42 -10
- package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadRunner.kt +123 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadViewManager.kt +23 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadViewManager.kt_opensource +20 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadWrapper.kt +396 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/RegistrationManager.kt +59 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/TokenManager.kt +48 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/UbiquKeyStorage.kt +256 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/UbiquKeyStorage.kt_opensource +51 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/Util.kt +74 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/dataformats/CreateIdentityRequest.kt +9 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/dataformats/CreateIdentityResponse.kt +9 -0
- package/android/src/main/java/ch/procivis/one/core/ubiqu/dataformats/RegisterRSEResponse.kt +10 -0
- package/core-sdk.json +6 -6
- package/dist/index.d.ts +10 -8
- package/dist/index.js +31 -25
- package/dist/src/cache.d.ts +8 -0
- package/dist/src/cache.js +9 -0
- package/dist/src/config.d.ts +39 -6
- package/dist/src/config.js +19 -0
- package/dist/src/core.d.ts +24 -8
- package/dist/src/core.js +68 -0
- package/dist/src/credential.d.ts +15 -1
- package/dist/src/credential.js +5 -0
- package/dist/src/credentialSchema.d.ts +5 -2
- package/dist/src/credentialSchema.js +2 -0
- package/dist/src/did.d.ts +9 -5
- package/dist/src/error.d.ts +10 -17
- package/dist/src/error.js +5 -14
- package/dist/src/history.d.ts +19 -5
- package/dist/src/history.js +10 -2
- package/dist/src/key.d.ts +3 -0
- package/dist/src/organisation.d.ts +8 -0
- package/dist/src/organisation.js +1 -0
- package/dist/src/proof.d.ts +29 -2
- package/dist/src/proof.js +13 -0
- package/dist/src/proofSchema.d.ts +2 -0
- package/dist/src/trust.d.ts +85 -19
- package/dist/src/trust.js +28 -7
- package/dist/src/ubiqu.d.ts +49 -0
- package/dist/src/ubiqu.js +69 -0
- package/ios/Deserialize.swift +203 -24
- package/ios/EventEmitter.swift +79 -0
- package/ios/ProcivisOneCoreModule.m +74 -6
- package/ios/ProcivisOneCoreModule.swift +312 -88
- package/ios/ProcivisRNOneCore.xcodeproj/project.pbxproj +28 -26
- package/ios/RSEKeyStorage.swift +587 -0
- package/ios/RSEKeyStorage.swift_opensource +49 -0
- package/ios/RSEPinPad.swift +74 -0
- package/ios/RSEPinPad.swift_opensource +21 -0
- package/ios/RSEPinPadManager.m +19 -0
- package/ios/Serialize.swift +105 -28
- package/ios/UBQKit.xcframework/Info.plist +44 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Assets.car +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFCompatibilityMacros.h +37 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFHTTPSessionManager.h +304 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFNetworkReachabilityManager.h +216 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFNetworking.h +41 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFPlainTextRequestSerializer.h +16 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFSecurityPolicy.h +156 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFURLRequestSerialization.h +479 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFURLResponseSerialization.h +310 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFURLSessionManager.h +501 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/CardRequestProtocol.h +72 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/Constants.h +222 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/DeviceBindProtocol.h +38 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/DomainSecurityModule.h +43 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/ErrorDomains.h +68 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/FreeAssetProtocol.h +40 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/GDataXMLNode.h +214 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSDictionary+Utilities.h +23 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSFileManager+Utilities.h +20 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSString+Utilities.h +23 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSURL+Utilities.h +12 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/ProtocolBase.h +38 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/ResetPinProtocol.h +45 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/Settings.h +120 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequest.h +58 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestBaseProcessor.h +37 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestBindProcessor.h +34 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestNullProcessor.h +28 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestResetPinProcessor.h +35 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestUnlockProcessor.h +31 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestUseProcessor.h +34 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQKit-Swift.h +761 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQKit.h +56 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQPacket.h +38 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Info.plist +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.abi.json +89006 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.private.swiftinterface +1099 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.swiftinterface +1099 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/module.modulemap +11 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/UBQKit +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/_CodeSignature/CodeResources +597 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/certs +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/checksums +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/pinning_pub +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/static +0 -0
- package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/stream +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Assets.car +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFCompatibilityMacros.h +37 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFHTTPSessionManager.h +304 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFNetworkReachabilityManager.h +216 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFNetworking.h +41 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFPlainTextRequestSerializer.h +16 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFSecurityPolicy.h +156 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFURLRequestSerialization.h +479 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFURLResponseSerialization.h +310 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFURLSessionManager.h +501 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/CardRequestProtocol.h +72 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/Constants.h +222 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/DeviceBindProtocol.h +38 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/DomainSecurityModule.h +43 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/ErrorDomains.h +68 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/FreeAssetProtocol.h +40 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/GDataXMLNode.h +214 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSDictionary+Utilities.h +23 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSFileManager+Utilities.h +20 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSString+Utilities.h +23 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSURL+Utilities.h +12 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/ProtocolBase.h +38 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/ResetPinProtocol.h +45 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/Settings.h +120 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequest.h +58 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestBaseProcessor.h +37 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestBindProcessor.h +34 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestNullProcessor.h +28 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestResetPinProcessor.h +35 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestUnlockProcessor.h +31 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestUseProcessor.h +34 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQKit-Swift.h +1522 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQKit.h +56 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQPacket.h +38 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Info.plist +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.abi.json +89006 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +1099 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface +1099 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.abi.json +89006 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +1099 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +1099 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/module.modulemap +11 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/UBQKit +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/_CodeSignature/CodeResources +652 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/certs +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/checksums +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/pinning_pub +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/static +0 -0
- package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/stream +0 -0
- package/ios/Util.swift +21 -24
- package/package.json +4 -3
- package/react-native-one-core.podspec +4 -5
package/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<picture>
|
|
2
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://assets.procivis-one.com/static/logo/logo_dark_Procivis_One.png">
|
|
3
|
+
<source media="(prefers-color-scheme: light)" srcset="https://assets.procivis-one.com/static/logo/logo_light_Procivis_One.png">
|
|
4
|
+
<img alt="Shows a Procivis One black logo in light color mode and a white one in dark color mode." src="https://assets.procivis-one.com/static/logo/logo_light_Procivis_One.png">
|
|
5
|
+
</picture>
|
|
3
6
|
|
|
4
7
|
# One Core React Native SDK
|
|
5
8
|
|
|
@@ -60,27 +63,6 @@ allprojects {
|
|
|
60
63
|
}
|
|
61
64
|
```
|
|
62
65
|
|
|
63
|
-
Add following to your app `android/app/build.gradle` to remove unsupported architectures:
|
|
64
|
-
|
|
65
|
-
```
|
|
66
|
-
...
|
|
67
|
-
android {
|
|
68
|
-
defaultConfig {
|
|
69
|
-
...
|
|
70
|
-
|
|
71
|
-
ndk {
|
|
72
|
-
abiFilters "armeabi-v7a", "arm64-v8a", "x86"
|
|
73
|
-
}
|
|
74
|
-
packagingOptions {
|
|
75
|
-
exclude 'lib/mips/**'
|
|
76
|
-
exclude 'lib/mips64/**'
|
|
77
|
-
exclude 'lib/armeabi/**'
|
|
78
|
-
exclude 'lib/x86_64/**'
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
```
|
|
83
|
-
|
|
84
66
|
## Usage
|
|
85
67
|
|
|
86
68
|
```javascript
|
|
@@ -137,24 +119,48 @@ and regulations mature and harden.
|
|
|
137
119
|
|
|
138
120
|
## Supported standards
|
|
139
121
|
|
|
140
|
-
### Credential
|
|
122
|
+
### Credential models
|
|
123
|
+
|
|
124
|
+
#### W3C VC
|
|
125
|
+
|
|
126
|
+
- [W3C Verifiable Credentials Data Model 2.0][vcdm] in the following variations:
|
|
127
|
+
|
|
128
|
+
| Securing mechanism | Supported representations | Supported proof/signature types |
|
|
129
|
+
| -------------------------------------------- | ----------------------------------------- | ------------------------------------------------------------------------------ |
|
|
130
|
+
| [W3C Data Integrity Proofs][vcdi] (embedded) | [JSON-LD][jld] in Compacted Document Form | <ul><li>[W3C Data Integrity ECDSA Cryptosuites v1.0][ecd] / [ecdsa-rdfc-2019][ecd2019]</li><li>[W3C Data Integrity EdDSA Cryptosuites v1.0][edd] / [eddsa-rdfc-2022][edd2022]</li><li>[W3C Data Integrity BBS Cryptosuites v1.0][bbs] / [bbs-2023][bbs2023]</li></ul> |
|
|
131
|
+
| [W3C VC-JOSE-COSE][jose] (enveloping) | <ul><li>[SD-JWT][sdjwt]</li><li>[JWT][jw]</li></ul> | <ul><li>JOSE / ECDSA [ES256][es2]</li><li>JOSE / EdDSA [Ed25519][ed255]</li><li>JOSE / CRYSTALS-DILITHIUM 3 [CRYDI3][crydi3]* |
|
|
132
|
+
|
|
133
|
+
\* CRYSTALS-DILITHIUM is a post-quantum resistant signature scheme, selected by NIST for [Post-Quantum Cryptography Standardization][pqc].
|
|
134
|
+
Support for the recently published [FIPS-204][fips] is planned for the near future.
|
|
135
|
+
|
|
136
|
+
#### ISO mdoc
|
|
137
|
+
|
|
138
|
+
- [ISO/IEC 18013-5:2021][iso5] standard for mdoc credentials.
|
|
139
|
+
- [COSE][cose] proofs
|
|
140
|
+
- ECDSA [ES256][es2]
|
|
141
|
+
- EdDSA [Ed25519][ed255]
|
|
142
|
+
|
|
143
|
+
#### IETF SD-JWT VC
|
|
144
|
+
|
|
145
|
+
- [IETF SD-JWT-based Verifiable Credentials][sdjwtvc]:
|
|
146
|
+
|
|
147
|
+
| Standard | Supported representations | Supported proof/signature types |
|
|
148
|
+
| -------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
149
|
+
| IETF SD-JWT VC | SD-JWT | <ul><li>JOSE / ECDSA [ES256][es2]</li><li>JOSE / EdDSA [Ed25519][ed255]</li><li>JOSE / CRYSTALS-DILITHIUM 3 [CRYDI3][crydi3]\*</li></ul> |
|
|
141
150
|
|
|
142
|
-
- [
|
|
143
|
-
|
|
144
|
-
- SD-JWT
|
|
145
|
-
- JWT
|
|
146
|
-
- [ISO/IEC 18013-5:2021][iso]
|
|
147
|
-
- mdoc
|
|
151
|
+
\* CRYSTALS-DILITHIUM is a post-quantum resistant signature scheme, selected by NIST for [Post-Quantum Cryptography Standardization][pqc].
|
|
152
|
+
Support for the recently published [FIPS-204][fips] is planned for the near future.
|
|
148
153
|
|
|
149
154
|
### Exchange and transport
|
|
150
155
|
|
|
151
156
|
- OpenID for Verifiable Credentials
|
|
152
157
|
- [OID4VCI][vci]; ID-1
|
|
153
|
-
-
|
|
158
|
+
- OID4VP; [ID-2][vp20] (Draft 20) & [Draft 25][vp25]
|
|
154
159
|
- [OID4VP over BLE][ble]; optimized version of Draft 00
|
|
155
|
-
- OID4VP over MQTT; proprietary adaptation of OID4VP over BLE via MQTT channel
|
|
156
|
-
-
|
|
157
|
-
- QR
|
|
160
|
+
- OID4VP over MQTT; proprietary adaptation of "OID4VP over BLE" via MQTT channel
|
|
161
|
+
- ISO/IEC 18013
|
|
162
|
+
- [18013-5][iso5]: QR code engagement and offline device retrieval over BLE
|
|
163
|
+
- [18013-7][iso7]: Online data retrieval via OID4VP
|
|
158
164
|
|
|
159
165
|
### Key storage
|
|
160
166
|
|
|
@@ -165,6 +171,7 @@ and regulations mature and harden.
|
|
|
165
171
|
|
|
166
172
|
- [Bitstring Status List v1.0][sl]
|
|
167
173
|
- [Linked Validity Verifiable Credentials (LVVC)][lvvc]
|
|
174
|
+
- [Token Status List - Draft 03][tsl]
|
|
168
175
|
|
|
169
176
|
## Support
|
|
170
177
|
|
|
@@ -175,28 +182,52 @@ Need support or have feedback? [Contact us](https://www.procivis.ch/en/contact).
|
|
|
175
182
|
Some rights reserved. This library is published under the [Apache License
|
|
176
183
|
Version 2.0](./LICENSE).
|
|
177
184
|
|
|
178
|
-
|
|
179
|
-
|
|
185
|
+
<picture>
|
|
186
|
+
<source media="(prefers-color-scheme: dark)" srcset="https://assets.procivis-one.com/static/logo/logo_dark_mode_Procivis.svg">
|
|
187
|
+
<source media="(prefers-color-scheme: light)" srcset="https://assets.procivis-one.com/static/logo/logo_light_mode_Procivis.svg">
|
|
188
|
+
<img alt="Shows a Procivis black logo in light color mode and a white one in dark color mode." src="https://assets.procivis-one.com/static/logo/logo_dark_mode_Procivis.svg">
|
|
189
|
+
</picture>
|
|
180
190
|
|
|
181
191
|
© Procivis AG, [https://www.procivis.ch](https://www.procivis.ch).
|
|
182
192
|
|
|
183
193
|
[archi]: https://github.com/procivis#architecture
|
|
194
|
+
[bbs]: https://www.w3.org/TR/vc-di-bbs/
|
|
195
|
+
[bbs2023]: https://www.w3.org/TR/vc-di-bbs/#bbs-2023
|
|
184
196
|
[ble]: https://openid.net/specs/openid-4-verifiable-presentations-over-ble-1_0.html
|
|
185
197
|
[canivc]: https://canivc.com/implementations/procivis-one-core/
|
|
186
198
|
[comp]: https://github.com/procivis/one-react-native-components
|
|
187
199
|
[core]: https://github.com/procivis/one-core
|
|
200
|
+
[cose]: https://www.rfc-editor.org/rfc/rfc9052
|
|
201
|
+
[crydi3]: https://datatracker.ietf.org/doc/html/draft-ietf-cose-dilithium-01
|
|
188
202
|
[docs]: https://docs.procivis.ch/
|
|
203
|
+
[ecd]: https://www.w3.org/TR/vc-di-ecdsa/
|
|
204
|
+
[ecd2019]: https://www.w3.org/TR/vc-di-ecdsa/#ecdsa-rdfc-2019
|
|
205
|
+
[edd]: https://www.w3.org/TR/vc-di-eddsa/
|
|
206
|
+
[edd2022]: https://www.w3.org/TR/vc-di-eddsa/#eddsa-rdfc-2022
|
|
207
|
+
[ed255]: https://datatracker.ietf.org/doc/html/rfc8037
|
|
208
|
+
[es2]: https://datatracker.ietf.org/doc/html/rfc7518
|
|
189
209
|
[eudiwi]: https://issuer.eudiw.dev/
|
|
190
210
|
[eudiwv]: https://verifier.eudiw.dev/home
|
|
191
|
-
[
|
|
211
|
+
[fips]: https://csrc.nist.gov/pubs/fips/204/final
|
|
212
|
+
[iso5]: https://www.iso.org/standard/69084.html
|
|
213
|
+
[iso7]: https://www.iso.org/standard/82772.html
|
|
214
|
+
[jld]: https://www.w3.org/TR/json-ld11/
|
|
215
|
+
[jose]: https://w3c.github.io/vc-jose-cose/
|
|
216
|
+
[jw]: https://datatracker.ietf.org/doc/html/rfc7519
|
|
192
217
|
[key]: https://github.com/procivis#key-features
|
|
193
218
|
[lvvc]: https://eprint.iacr.org/2022/1658.pdf
|
|
194
219
|
[owf]: https://github.com/openwallet-foundation-labs/identity-credential
|
|
195
220
|
[pow]: https://github.com/procivis/one-wallet
|
|
221
|
+
[pqc]: https://csrc.nist.gov/pqc-standardization
|
|
196
222
|
[rncore]: https://github.com/procivis/react-native-one-core
|
|
197
|
-
[
|
|
223
|
+
[sdjwt]: https://www.ietf.org/archive/id/draft-ietf-oauth-selective-disclosure-jwt-12.html
|
|
224
|
+
[sdjwtvc]: https://www.ietf.org/archive/id/draft-ietf-oauth-sd-jwt-vc-05.html
|
|
225
|
+
[sdkref]: https://docs.procivis.ch/sdk
|
|
198
226
|
[sl]: https://www.w3.org/TR/vc-bitstring-status-list/
|
|
199
|
-
[trial]: https://docs.procivis.ch/trial
|
|
227
|
+
[trial]: https://docs.procivis.ch/trial
|
|
228
|
+
[tsl]: https://datatracker.ietf.org/doc/html/draft-ietf-oauth-status-list-03
|
|
229
|
+
[vcdi]: https://www.w3.org/TR/vc-data-integrity/
|
|
200
230
|
[vcdm]: https://www.w3.org/TR/vc-data-model-2.0/
|
|
201
231
|
[vci]: https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0-ID1.html
|
|
202
|
-
[
|
|
232
|
+
[vp20]: https://openid.net/specs/openid-4-verifiable-presentations-1_0-20.html
|
|
233
|
+
[vp25]: https://openid.net/specs/openid-4-verifiable-presentations-1_0-25.html
|
package/android/build.gradle
CHANGED
|
@@ -24,8 +24,18 @@ class Checksum {
|
|
|
24
24
|
}
|
|
25
25
|
}
|
|
26
26
|
|
|
27
|
+
buildscript {
|
|
28
|
+
repositories {
|
|
29
|
+
gradlePluginPortal()
|
|
30
|
+
}
|
|
31
|
+
dependencies {
|
|
32
|
+
classpath 'org.jetbrains.kotlin.plugin.serialization:org.jetbrains.kotlin.plugin.serialization.gradle.plugin:1.9.0'
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
27
36
|
apply plugin: 'com.android.library'
|
|
28
37
|
apply plugin: 'kotlin-android'
|
|
38
|
+
apply plugin: 'org.jetbrains.kotlin.plugin.serialization'
|
|
29
39
|
|
|
30
40
|
def safeExtGet(prop, fallback) {
|
|
31
41
|
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
@@ -36,7 +46,7 @@ android {
|
|
|
36
46
|
buildToolsVersion = "30.0.2"
|
|
37
47
|
|
|
38
48
|
defaultConfig {
|
|
39
|
-
minSdkVersion safeExtGet('minSdkVersion',
|
|
49
|
+
minSdkVersion safeExtGet('minSdkVersion', 26)
|
|
40
50
|
targetSdkVersion safeExtGet('targetSdkVersion', 33)
|
|
41
51
|
versionCode 1
|
|
42
52
|
versionName "1.0.0"
|
|
@@ -46,6 +56,9 @@ android {
|
|
|
46
56
|
lintOptions {
|
|
47
57
|
abortOnError false
|
|
48
58
|
}
|
|
59
|
+
buildFeatures {
|
|
60
|
+
dataBinding true
|
|
61
|
+
}
|
|
49
62
|
}
|
|
50
63
|
|
|
51
64
|
repositories {
|
|
@@ -53,13 +66,33 @@ repositories {
|
|
|
53
66
|
}
|
|
54
67
|
|
|
55
68
|
dependencies {
|
|
56
|
-
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${safeExtGet('kotlinVersion', '1.
|
|
69
|
+
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${safeExtGet('kotlinVersion', '1.9.0')}")
|
|
70
|
+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
|
|
57
71
|
implementation 'com.facebook.react:react-native:+'
|
|
58
72
|
|
|
59
73
|
releaseImplementation(name: 'onecore-release', ext: 'aar')
|
|
60
74
|
debugImplementation(name: 'onecore-debug', ext: 'aar')
|
|
61
75
|
implementation 'net.java.dev.jna:jna:5.13.0@aar'
|
|
62
|
-
implementation("org.jetbrains.kotlin:kotlin-reflect:${safeExtGet('kotlinVersion', '1.
|
|
76
|
+
implementation("org.jetbrains.kotlin:kotlin-reflect:${safeExtGet('kotlinVersion', '1.9.0')}")
|
|
77
|
+
|
|
78
|
+
implementation(name: 'core-reactnative-compatible-2025.0305.1', ext: 'aar')
|
|
79
|
+
implementation("com.google.android.material:material:1.9.0")
|
|
80
|
+
implementation("com.squareup.retrofit2:retrofit:2.11.0")
|
|
81
|
+
implementation("com.squareup.retrofit2:converter-scalars:2.11.0")
|
|
82
|
+
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.0")
|
|
83
|
+
implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0")
|
|
84
|
+
implementation("com.jakewharton.timber:timber:5.0.1")
|
|
85
|
+
implementation("org.apache.commons:commons-math3:3.6.1")
|
|
86
|
+
implementation 'androidx.appcompat:appcompat:1.6.1'
|
|
87
|
+
implementation 'androidx.biometric:biometric:1.1.0'
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
def downloadFile = { url, file ->
|
|
91
|
+
new URL(url).withInputStream { downloadStream ->
|
|
92
|
+
file.withOutputStream { fileOut ->
|
|
93
|
+
fileOut << downloadStream
|
|
94
|
+
}
|
|
95
|
+
}
|
|
63
96
|
}
|
|
64
97
|
|
|
65
98
|
def coreUrlAAR = { buildType ->
|
|
@@ -71,18 +104,21 @@ def coreUrlAAR = { buildType ->
|
|
|
71
104
|
def url = sdk.url
|
|
72
105
|
File file = new File("$projectDir/libs/${name}.aar")
|
|
73
106
|
file.parentFile.mkdirs()
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
107
|
+
|
|
108
|
+
def sha1Expected = sdk.sha1
|
|
109
|
+
if (file.exists()) {
|
|
110
|
+
if (Checksum.getChecksum(file, "SHA1") == sha1Expected) {
|
|
111
|
+
// all good
|
|
112
|
+
return
|
|
79
113
|
}
|
|
114
|
+
// The file is most likely just stale -> delete and download again
|
|
115
|
+
file.delete()
|
|
80
116
|
}
|
|
81
117
|
|
|
118
|
+
downloadFile(url, file)
|
|
82
119
|
def sha1sum = Checksum.getChecksum(file, "SHA1")
|
|
83
|
-
def sha1Expected = sdk.sha1
|
|
84
120
|
if (sha1sum != sha1Expected) {
|
|
85
|
-
file
|
|
121
|
+
// if the file hash still does not match then something is off
|
|
86
122
|
println "URL($name): $url"
|
|
87
123
|
println "sha1 expected: $sha1Expected"
|
|
88
124
|
println "sha1 actual: $sha1sum"
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import java.security.MessageDigest
|
|
2
|
+
class Checksum {
|
|
3
|
+
static getChecksum(file, type) {
|
|
4
|
+
def digest = MessageDigest.getInstance(type)
|
|
5
|
+
def inputStream = file.newInputStream()
|
|
6
|
+
def buffer = new byte[16384]
|
|
7
|
+
def len
|
|
8
|
+
|
|
9
|
+
while((len=inputStream.read(buffer)) > 0) {
|
|
10
|
+
digest.update(buffer, 0, len)
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
def result = ""
|
|
14
|
+
for(byte b : digest.digest()) {
|
|
15
|
+
result += toHex(b)
|
|
16
|
+
}
|
|
17
|
+
return result
|
|
18
|
+
}
|
|
19
|
+
private static hexChr(int b) {
|
|
20
|
+
return Integer.toHexString(b & 0xF)
|
|
21
|
+
}
|
|
22
|
+
private static toHex(int b) {
|
|
23
|
+
return hexChr((b & 0xF0) >> 4) + hexChr(b & 0x0F)
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
buildscript {
|
|
28
|
+
repositories {
|
|
29
|
+
gradlePluginPortal()
|
|
30
|
+
}
|
|
31
|
+
dependencies {
|
|
32
|
+
classpath 'org.jetbrains.kotlin.plugin.serialization:org.jetbrains.kotlin.plugin.serialization.gradle.plugin:1.9.0'
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
apply plugin: 'com.android.library'
|
|
37
|
+
apply plugin: 'kotlin-android'
|
|
38
|
+
apply plugin: 'org.jetbrains.kotlin.plugin.serialization'
|
|
39
|
+
|
|
40
|
+
def safeExtGet(prop, fallback) {
|
|
41
|
+
rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
android {
|
|
45
|
+
compileSdkVersion safeExtGet('compileSdkVersion', 33)
|
|
46
|
+
buildToolsVersion = "30.0.2"
|
|
47
|
+
|
|
48
|
+
defaultConfig {
|
|
49
|
+
minSdkVersion safeExtGet('minSdkVersion', 26)
|
|
50
|
+
targetSdkVersion safeExtGet('targetSdkVersion', 33)
|
|
51
|
+
versionCode 1
|
|
52
|
+
versionName "1.0.0"
|
|
53
|
+
|
|
54
|
+
consumerProguardFiles 'proguard-rules.pro'
|
|
55
|
+
}
|
|
56
|
+
lintOptions {
|
|
57
|
+
abortOnError false
|
|
58
|
+
}
|
|
59
|
+
buildFeatures {
|
|
60
|
+
dataBinding true
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
repositories {
|
|
65
|
+
mavenCentral()
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
dependencies {
|
|
69
|
+
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:${safeExtGet('kotlinVersion', '1.9.0')}")
|
|
70
|
+
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
|
|
71
|
+
implementation 'com.facebook.react:react-native:+'
|
|
72
|
+
|
|
73
|
+
releaseImplementation(name: 'onecore-release', ext: 'aar')
|
|
74
|
+
debugImplementation(name: 'onecore-debug', ext: 'aar')
|
|
75
|
+
implementation 'net.java.dev.jna:jna:5.13.0@aar'
|
|
76
|
+
implementation("org.jetbrains.kotlin:kotlin-reflect:${safeExtGet('kotlinVersion', '1.9.0')}")
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
def downloadFile = { url, file ->
|
|
80
|
+
new URL(url).withInputStream { downloadStream ->
|
|
81
|
+
file.withOutputStream { fileOut ->
|
|
82
|
+
fileOut << downloadStream
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
def coreUrlAAR = { buildType ->
|
|
88
|
+
def name = "onecore-${buildType}"
|
|
89
|
+
def coreSdkJsonFile = file("$projectDir/../core-sdk.json")
|
|
90
|
+
def coreSdkJson = new groovy.json.JsonSlurper().parseText(coreSdkJsonFile.text)
|
|
91
|
+
def sdk = coreSdkJson.android[buildType]
|
|
92
|
+
|
|
93
|
+
def url = sdk.url
|
|
94
|
+
File file = new File("$projectDir/libs/${name}.aar")
|
|
95
|
+
file.parentFile.mkdirs()
|
|
96
|
+
|
|
97
|
+
def sha1Expected = sdk.sha1
|
|
98
|
+
if (file.exists()) {
|
|
99
|
+
if (Checksum.getChecksum(file, "SHA1") == sha1Expected) {
|
|
100
|
+
// all good
|
|
101
|
+
return
|
|
102
|
+
}
|
|
103
|
+
// The file is most likely just stale -> delete and download again
|
|
104
|
+
file.delete()
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
downloadFile(url, file)
|
|
108
|
+
def sha1sum = Checksum.getChecksum(file, "SHA1")
|
|
109
|
+
if (sha1sum != sha1Expected) {
|
|
110
|
+
// if the file hash still does not match then something is off
|
|
111
|
+
println "URL($name): $url"
|
|
112
|
+
println "sha1 expected: $sha1Expected"
|
|
113
|
+
println "sha1 actual: $sha1sum"
|
|
114
|
+
throw new Error("AAR file SHA1 mismatch: " + name)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
afterEvaluate {
|
|
119
|
+
coreUrlAAR('debug')
|
|
120
|
+
coreUrlAAR('release')
|
|
121
|
+
}
|
|
Binary file
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
|
2
|
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
|
3
|
+
package="ch.procivis.one.core">
|
|
4
|
+
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
|
5
|
+
</manifest>
|
|
@@ -11,11 +11,11 @@ object Deserialize {
|
|
|
11
11
|
return constructObjectWithMembers(T::class, data) as T
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
-
private fun extractArrayItem(kType: KType, data: ReadableArray, index: Int): Any {
|
|
14
|
+
private fun extractArrayItem(kType: KType, data: ReadableArray, index: Int): Any? {
|
|
15
15
|
val kClass = kType.classifier as KClass<*>
|
|
16
16
|
|
|
17
17
|
if (kClass.java.isEnum) {
|
|
18
|
-
return constructEnumValue(kClass, data.getString(index))
|
|
18
|
+
return constructEnumValue(kClass, data.getString(index)!!)
|
|
19
19
|
}
|
|
20
20
|
|
|
21
21
|
return when (kClass) {
|
|
@@ -26,15 +26,15 @@ object Deserialize {
|
|
|
26
26
|
List::class -> {
|
|
27
27
|
val itemType = kType.arguments.first().type
|
|
28
28
|
val values = data.getArray(index)
|
|
29
|
-
return extractArrayItems(itemType!!, values)
|
|
29
|
+
return extractArrayItems(itemType!!, values!!)
|
|
30
30
|
}
|
|
31
31
|
|
|
32
32
|
Map::class -> {
|
|
33
33
|
val values = data.getMap(index)
|
|
34
|
-
return extractMapItems(kType, values)
|
|
34
|
+
return extractMapItems(kType, values!!)
|
|
35
35
|
}
|
|
36
36
|
|
|
37
|
-
else -> constructObjectWithMembers(kClass, data.getMap(index))
|
|
37
|
+
else -> constructObjectWithMembers(kClass, data.getMap(index)!!)
|
|
38
38
|
}
|
|
39
39
|
}
|
|
40
40
|
|
|
@@ -58,7 +58,7 @@ object Deserialize {
|
|
|
58
58
|
}
|
|
59
59
|
|
|
60
60
|
private fun extractObjectItem(type: KType, data: ReadableMap, name: String): Any? {
|
|
61
|
-
if (!data.hasKey(name)
|
|
61
|
+
if (!data.hasKey(name)) {
|
|
62
62
|
return null
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -69,6 +69,10 @@ object Deserialize {
|
|
|
69
69
|
return DeserializeSpecific.Obj.convertCustom(kClass, data, name)
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
if (type.isMarkedNullable && data.isNull(name)) {
|
|
73
|
+
return null
|
|
74
|
+
}
|
|
75
|
+
|
|
72
76
|
if (kClass.java.isEnum) {
|
|
73
77
|
return constructEnumValue(kClass, data.getString(name)!!)
|
|
74
78
|
}
|
|
@@ -6,7 +6,7 @@ import kotlin.reflect.KClass
|
|
|
6
6
|
|
|
7
7
|
object DeserializeSpecific {
|
|
8
8
|
object Obj {
|
|
9
|
-
private val CustomConversionTypes = arrayOf(CredentialSchemaTypeBindingEnum::class)
|
|
9
|
+
private val CustomConversionTypes = arrayOf(CredentialSchemaTypeBindingEnum::class, OptionalString::class)
|
|
10
10
|
|
|
11
11
|
fun isCustomConversionType(type: KClass<*>): Boolean {
|
|
12
12
|
return CustomConversionTypes.contains(type)
|
|
@@ -16,7 +16,14 @@ object DeserializeSpecific {
|
|
|
16
16
|
return when (type) {
|
|
17
17
|
CredentialSchemaTypeBindingEnum::class -> input.getString(field)
|
|
18
18
|
?.let { credentialSchemaType(it) }
|
|
19
|
-
|
|
19
|
+
OptionalString::class -> {
|
|
20
|
+
val value = input.getString(field)
|
|
21
|
+
if (value == null) {
|
|
22
|
+
OptionalString.None
|
|
23
|
+
} else {
|
|
24
|
+
OptionalString.Some(value)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
20
27
|
else -> {
|
|
21
28
|
throw IllegalArgumentException("Invalid map conversion: $input")
|
|
22
29
|
}
|
|
@@ -31,6 +38,7 @@ object DeserializeSpecific {
|
|
|
31
38
|
"PROCIVIS_ONE_SCHEMA2024" -> CredentialSchemaTypeBindingEnum.ProcivisOneSchema2024
|
|
32
39
|
"FALLBACK_SCHEMA2024" -> CredentialSchemaTypeBindingEnum.FallbackSchema2024
|
|
33
40
|
"MDOC" -> CredentialSchemaTypeBindingEnum.Mdoc
|
|
41
|
+
"SD_JWT_VC" -> CredentialSchemaTypeBindingEnum.SdJwtVc
|
|
34
42
|
else -> CredentialSchemaTypeBindingEnum.Other(credentialSchemaType)
|
|
35
43
|
}
|
|
36
44
|
}
|
|
@@ -38,7 +46,7 @@ object DeserializeSpecific {
|
|
|
38
46
|
fun ids(ids: ReadableArray): List<String> {
|
|
39
47
|
val result = mutableListOf<String>()
|
|
40
48
|
for (n in 0 until ids.size()) {
|
|
41
|
-
result.add(ids.getString(n))
|
|
49
|
+
result.add(ids.getString(n)!!)
|
|
42
50
|
}
|
|
43
51
|
return result
|
|
44
52
|
}
|
|
@@ -84,10 +92,10 @@ object DeserializeSpecific {
|
|
|
84
92
|
return fn(input)
|
|
85
93
|
}
|
|
86
94
|
|
|
87
|
-
|
|
95
|
+
fun <T> enumList(entries: ReadableArray, fn: (String) -> T): List<T> {
|
|
88
96
|
val result = mutableListOf<T>()
|
|
89
97
|
for (n in 0 until entries.size()) {
|
|
90
|
-
result.add(fn(entries.getString(n)))
|
|
98
|
+
result.add(fn(entries.getString(n)!!))
|
|
91
99
|
}
|
|
92
100
|
return result
|
|
93
101
|
}
|