@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.
Files changed (164) hide show
  1. package/README.md +71 -40
  2. package/android/build.gradle +46 -10
  3. package/android/build.gradle_opensource +121 -0
  4. package/android/libs/core-reactnative-compatible-2025.0305.1.aar +0 -0
  5. package/android/src/main/AndroidManifest.xml +5 -2
  6. package/android/src/main/java/ch/procivis/one/core/Deserialize.kt +10 -6
  7. package/android/src/main/java/ch/procivis/one/core/DeserializeSpecific.kt +13 -5
  8. package/android/src/main/java/ch/procivis/one/core/ProcivisOneCoreModule.kt +251 -79
  9. package/android/src/main/java/ch/procivis/one/core/ProcivisOneCorePackage.kt +3 -4
  10. package/android/src/main/java/ch/procivis/one/core/SerializeSpecific.kt +13 -1
  11. package/android/src/main/java/ch/procivis/one/core/Util.kt +42 -10
  12. package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadRunner.kt +123 -0
  13. package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadViewManager.kt +23 -0
  14. package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadViewManager.kt_opensource +20 -0
  15. package/android/src/main/java/ch/procivis/one/core/ubiqu/PinPadWrapper.kt +396 -0
  16. package/android/src/main/java/ch/procivis/one/core/ubiqu/RegistrationManager.kt +59 -0
  17. package/android/src/main/java/ch/procivis/one/core/ubiqu/TokenManager.kt +48 -0
  18. package/android/src/main/java/ch/procivis/one/core/ubiqu/UbiquKeyStorage.kt +256 -0
  19. package/android/src/main/java/ch/procivis/one/core/ubiqu/UbiquKeyStorage.kt_opensource +51 -0
  20. package/android/src/main/java/ch/procivis/one/core/ubiqu/Util.kt +74 -0
  21. package/android/src/main/java/ch/procivis/one/core/ubiqu/dataformats/CreateIdentityRequest.kt +9 -0
  22. package/android/src/main/java/ch/procivis/one/core/ubiqu/dataformats/CreateIdentityResponse.kt +9 -0
  23. package/android/src/main/java/ch/procivis/one/core/ubiqu/dataformats/RegisterRSEResponse.kt +10 -0
  24. package/core-sdk.json +6 -6
  25. package/dist/index.d.ts +10 -8
  26. package/dist/index.js +31 -25
  27. package/dist/src/cache.d.ts +8 -0
  28. package/dist/src/cache.js +9 -0
  29. package/dist/src/config.d.ts +39 -6
  30. package/dist/src/config.js +19 -0
  31. package/dist/src/core.d.ts +24 -8
  32. package/dist/src/core.js +68 -0
  33. package/dist/src/credential.d.ts +15 -1
  34. package/dist/src/credential.js +5 -0
  35. package/dist/src/credentialSchema.d.ts +5 -2
  36. package/dist/src/credentialSchema.js +2 -0
  37. package/dist/src/did.d.ts +9 -5
  38. package/dist/src/error.d.ts +10 -17
  39. package/dist/src/error.js +5 -14
  40. package/dist/src/history.d.ts +19 -5
  41. package/dist/src/history.js +10 -2
  42. package/dist/src/key.d.ts +3 -0
  43. package/dist/src/organisation.d.ts +8 -0
  44. package/dist/src/organisation.js +1 -0
  45. package/dist/src/proof.d.ts +29 -2
  46. package/dist/src/proof.js +13 -0
  47. package/dist/src/proofSchema.d.ts +2 -0
  48. package/dist/src/trust.d.ts +85 -19
  49. package/dist/src/trust.js +28 -7
  50. package/dist/src/ubiqu.d.ts +49 -0
  51. package/dist/src/ubiqu.js +69 -0
  52. package/ios/Deserialize.swift +203 -24
  53. package/ios/EventEmitter.swift +79 -0
  54. package/ios/ProcivisOneCoreModule.m +74 -6
  55. package/ios/ProcivisOneCoreModule.swift +312 -88
  56. package/ios/ProcivisRNOneCore.xcodeproj/project.pbxproj +28 -26
  57. package/ios/RSEKeyStorage.swift +587 -0
  58. package/ios/RSEKeyStorage.swift_opensource +49 -0
  59. package/ios/RSEPinPad.swift +74 -0
  60. package/ios/RSEPinPad.swift_opensource +21 -0
  61. package/ios/RSEPinPadManager.m +19 -0
  62. package/ios/Serialize.swift +105 -28
  63. package/ios/UBQKit.xcframework/Info.plist +44 -0
  64. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Assets.car +0 -0
  65. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFCompatibilityMacros.h +37 -0
  66. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFHTTPSessionManager.h +304 -0
  67. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFNetworkReachabilityManager.h +216 -0
  68. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFNetworking.h +41 -0
  69. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFPlainTextRequestSerializer.h +16 -0
  70. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFSecurityPolicy.h +156 -0
  71. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFURLRequestSerialization.h +479 -0
  72. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFURLResponseSerialization.h +310 -0
  73. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/AFURLSessionManager.h +501 -0
  74. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/CardRequestProtocol.h +72 -0
  75. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/Constants.h +222 -0
  76. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/DeviceBindProtocol.h +38 -0
  77. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/DomainSecurityModule.h +43 -0
  78. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/ErrorDomains.h +68 -0
  79. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/FreeAssetProtocol.h +40 -0
  80. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/GDataXMLNode.h +214 -0
  81. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSDictionary+Utilities.h +23 -0
  82. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSFileManager+Utilities.h +20 -0
  83. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSString+Utilities.h +23 -0
  84. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/NSURL+Utilities.h +12 -0
  85. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/ProtocolBase.h +38 -0
  86. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/ResetPinProtocol.h +45 -0
  87. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/Settings.h +120 -0
  88. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequest.h +58 -0
  89. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestBaseProcessor.h +37 -0
  90. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestBindProcessor.h +34 -0
  91. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestNullProcessor.h +28 -0
  92. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestResetPinProcessor.h +35 -0
  93. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestUnlockProcessor.h +31 -0
  94. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQCardRequestUseProcessor.h +34 -0
  95. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQKit-Swift.h +761 -0
  96. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQKit.h +56 -0
  97. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Headers/UBQPacket.h +38 -0
  98. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Info.plist +0 -0
  99. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.abi.json +89006 -0
  100. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.private.swiftinterface +1099 -0
  101. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  102. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios.swiftinterface +1099 -0
  103. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/Modules/module.modulemap +11 -0
  104. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/UBQKit +0 -0
  105. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/_CodeSignature/CodeResources +597 -0
  106. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/certs +0 -0
  107. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/checksums +0 -0
  108. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/pinning_pub +0 -0
  109. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/static +0 -0
  110. package/ios/UBQKit.xcframework/ios-arm64/UBQKit.framework/stream +0 -0
  111. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Assets.car +0 -0
  112. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFCompatibilityMacros.h +37 -0
  113. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFHTTPSessionManager.h +304 -0
  114. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFNetworkReachabilityManager.h +216 -0
  115. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFNetworking.h +41 -0
  116. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFPlainTextRequestSerializer.h +16 -0
  117. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFSecurityPolicy.h +156 -0
  118. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFURLRequestSerialization.h +479 -0
  119. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFURLResponseSerialization.h +310 -0
  120. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/AFURLSessionManager.h +501 -0
  121. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/CardRequestProtocol.h +72 -0
  122. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/Constants.h +222 -0
  123. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/DeviceBindProtocol.h +38 -0
  124. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/DomainSecurityModule.h +43 -0
  125. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/ErrorDomains.h +68 -0
  126. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/FreeAssetProtocol.h +40 -0
  127. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/GDataXMLNode.h +214 -0
  128. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSDictionary+Utilities.h +23 -0
  129. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSFileManager+Utilities.h +20 -0
  130. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSString+Utilities.h +23 -0
  131. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/NSURL+Utilities.h +12 -0
  132. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/ProtocolBase.h +38 -0
  133. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/ResetPinProtocol.h +45 -0
  134. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/Settings.h +120 -0
  135. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequest.h +58 -0
  136. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestBaseProcessor.h +37 -0
  137. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestBindProcessor.h +34 -0
  138. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestNullProcessor.h +28 -0
  139. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestResetPinProcessor.h +35 -0
  140. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestUnlockProcessor.h +31 -0
  141. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQCardRequestUseProcessor.h +34 -0
  142. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQKit-Swift.h +1522 -0
  143. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQKit.h +56 -0
  144. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Headers/UBQPacket.h +38 -0
  145. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Info.plist +0 -0
  146. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.abi.json +89006 -0
  147. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +1099 -0
  148. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  149. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/arm64-apple-ios-simulator.swiftinterface +1099 -0
  150. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.abi.json +89006 -0
  151. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +1099 -0
  152. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  153. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/UBQKit.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +1099 -0
  154. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/Modules/module.modulemap +11 -0
  155. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/UBQKit +0 -0
  156. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/_CodeSignature/CodeResources +652 -0
  157. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/certs +0 -0
  158. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/checksums +0 -0
  159. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/pinning_pub +0 -0
  160. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/static +0 -0
  161. package/ios/UBQKit.xcframework/ios-arm64_x86_64-simulator/UBQKit.framework/stream +0 -0
  162. package/ios/Util.swift +21 -24
  163. package/package.json +4 -3
  164. package/react-native-one-core.podspec +4 -5
package/README.md CHANGED
@@ -1,5 +1,8 @@
1
- ![Procivis One](https://assets.procivis-one.com/static/logo/logo_dark_Procivis_One.png#gh-light-mode-only)
2
- ![Procivis One](https://assets.procivis-one.com/static/logo/logo_light_Procivis_One.png#gh-dark-mode-only)
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 data models
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
- - [Verifiable Credentials][vcdm] (VCs)
143
- - JSON-LD
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
- - [OID4VP][vp]; ID-2
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
- - [ISO/IEC 18013-5][iso]
157
- - QR-code engagement and offline device retrieval over BLE
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
- ![Procivis AG](https://assets.procivis-one.com/static/logo/logo_light_mode_Procivis.svg#gh-light-mode-only)
179
- ![Procivis AG](https://assets.procivis-one.com/static/logo/logo_dark_mode_Procivis.svg#gh-dark-mode-only)
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
- [iso]: https://www.iso.org/standard/69084.html
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
- [sdkref]: https://docs.procivis.ch/sdk/overview
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/intro
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
- [vp]: https://openid.net/specs/openid-4-verifiable-presentations-1_0-ID2.html
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
@@ -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', 21)
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.8.0')}")
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.8.0')}")
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
- if (!file.exists()) {
75
- new URL(url).withInputStream { downloadStream ->
76
- file.withOutputStream { fileOut ->
77
- fileOut << downloadStream
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.delete()
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
+ }
@@ -1,2 +1,5 @@
1
- <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="ch.procivis.one.core">
2
- </manifest>
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) || (type.isMarkedNullable && data.isNull(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
- private fun <T> enumList(entries: ReadableArray, fn: (String) -> T): List<T> {
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
  }