mindoodb 0.0.2 → 0.0.4
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-server.md +1001 -0
- package/README.md +89 -28
- package/dist/__mocks__/expo-standard-web-crypto.d.ts +10 -0
- package/dist/__mocks__/expo-standard-web-crypto.d.ts.map +1 -0
- package/dist/__mocks__/expo-standard-web-crypto.js +22 -0
- package/dist/__mocks__/expo-standard-web-crypto.js.map +1 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts +8 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.d.ts.map +1 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js +16 -0
- package/dist/appendonlystores/BasicOnDiskContentAddressedStoreFactory.js.map +1 -0
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts +1 -1
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.d.ts.map +1 -1
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js +2 -2
- package/dist/appendonlystores/InMemoryContentAddressedStoreFactory.js.map +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts +30 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js +152 -5
- package/dist/appendonlystores/network/ClientNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.d.ts +17 -2
- package/dist/appendonlystores/network/HttpTransport.d.ts.map +1 -1
- package/dist/appendonlystores/network/HttpTransport.js +129 -0
- package/dist/appendonlystores/network/HttpTransport.js.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts +22 -2
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.d.ts.map +1 -1
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js +110 -0
- package/dist/appendonlystores/network/ServerNetworkContentAddressedStore.js.map +1 -1
- package/dist/appendonlystores/network/index.d.ts +1 -1
- package/dist/appendonlystores/network/index.d.ts.map +1 -1
- package/dist/appendonlystores/network/index.js.map +1 -1
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts +65 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.d.ts.map +1 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js +741 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStore.js.map +1 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.d.ts +25 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.d.ts.map +1 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.js +41 -0
- package/dist/browser/appendonlystores/IndexedDBContentAddressedStoreFactory.js.map +1 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts +21 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.d.ts.map +1 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.js +106 -0
- package/dist/browser/cache/IndexedDBLocalCacheStore.js.map +1 -0
- package/dist/browser/index.d.ts +8 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +21 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/core/BaseMindooDB.d.ts +115 -13
- package/dist/core/BaseMindooDB.d.ts.map +1 -1
- package/dist/core/BaseMindooDB.js +1232 -269
- package/dist/core/BaseMindooDB.js.map +1 -1
- package/dist/core/BaseMindooTenant.d.ts +69 -6
- package/dist/core/BaseMindooTenant.d.ts.map +1 -1
- package/dist/core/BaseMindooTenant.js +302 -109
- package/dist/core/BaseMindooTenant.js.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.d.ts +13 -10
- package/dist/core/BaseMindooTenantDirectory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantDirectory.js +144 -27
- package/dist/core/BaseMindooTenantDirectory.js.map +1 -1
- package/dist/core/BaseMindooTenantFactory.d.ts +27 -29
- package/dist/core/BaseMindooTenantFactory.d.ts.map +1 -1
- package/dist/core/BaseMindooTenantFactory.js +185 -112
- package/dist/core/BaseMindooTenantFactory.js.map +1 -1
- package/dist/core/MindooDBServerAdmin.d.ts +238 -0
- package/dist/core/MindooDBServerAdmin.d.ts.map +1 -0
- package/dist/core/MindooDBServerAdmin.js +345 -0
- package/dist/core/MindooDBServerAdmin.js.map +1 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +68 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js +659 -0
- package/dist/core/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -0
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts +45 -3
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.d.ts.map +1 -1
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js +184 -23
- package/dist/core/appendonlystores/InMemoryContentAddressedStore.js.map +1 -1
- package/dist/core/appendonlystores/MaterializationPlanner.d.ts +49 -0
- package/dist/core/appendonlystores/MaterializationPlanner.d.ts.map +1 -0
- package/dist/core/appendonlystores/MaterializationPlanner.js +325 -0
- package/dist/core/appendonlystores/MaterializationPlanner.js.map +1 -0
- package/dist/core/appendonlystores/bloom.d.ts +85 -0
- package/dist/core/appendonlystores/bloom.d.ts.map +1 -0
- package/dist/core/appendonlystores/bloom.js +228 -0
- package/dist/core/appendonlystores/bloom.js.map +1 -0
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts +37 -2
- package/dist/core/appendonlystores/network/NetworkTransport.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.d.ts +12 -0
- package/dist/core/appendonlystores/network/types.d.ts.map +1 -1
- package/dist/core/appendonlystores/network/types.js.map +1 -1
- package/dist/core/appendonlystores/types.d.ts +206 -0
- package/dist/core/appendonlystores/types.d.ts.map +1 -1
- package/dist/core/automerge-adapter.d.ts +15 -0
- package/dist/core/automerge-adapter.d.ts.map +1 -0
- package/dist/core/automerge-adapter.js +73 -0
- package/dist/core/automerge-adapter.js.map +1 -0
- package/dist/core/cache/CacheManager.d.ts +75 -0
- package/dist/core/cache/CacheManager.d.ts.map +1 -0
- package/dist/core/cache/CacheManager.js +101 -0
- package/dist/core/cache/CacheManager.js.map +1 -0
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts +41 -0
- package/dist/core/cache/EncryptedLocalCacheStore.d.ts.map +1 -0
- package/dist/core/cache/EncryptedLocalCacheStore.js +120 -0
- package/dist/core/cache/EncryptedLocalCacheStore.js.map +1 -0
- package/dist/core/cache/LocalCacheStore.d.ts +50 -0
- package/dist/core/cache/LocalCacheStore.d.ts.map +1 -0
- package/dist/core/cache/LocalCacheStore.js +39 -0
- package/dist/core/cache/LocalCacheStore.js.map +1 -0
- package/dist/core/crypto/pbkdf2Iterations.d.ts +12 -0
- package/dist/core/crypto/pbkdf2Iterations.d.ts.map +1 -0
- package/dist/core/crypto/pbkdf2Iterations.js +55 -0
- package/dist/core/crypto/pbkdf2Iterations.js.map +1 -0
- package/dist/core/crypto/privateKeyEncryption.d.ts +5 -0
- package/dist/core/crypto/privateKeyEncryption.d.ts.map +1 -0
- package/dist/core/crypto/privateKeyEncryption.js +87 -0
- package/dist/core/crypto/privateKeyEncryption.js.map +1 -0
- package/dist/core/index.d.ts +18 -6
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +42 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts +4 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js +39 -11
- package/dist/core/indexing/virtualviews/MindooDBVirtualViewDataProvider.js.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts +1 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js +3 -0
- package/dist/core/indexing/virtualviews/ViewEntrySortKeyComparator.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.d.ts +43 -0
- package/dist/core/indexing/virtualviews/VirtualView.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualView.js +173 -0
- package/dist/core/indexing/virtualviews/VirtualView.js.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts +7 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.d.ts.map +1 -1
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js +28 -0
- package/dist/core/indexing/virtualviews/VirtualViewEntryData.js.map +1 -1
- package/dist/core/keys/KeyBag.d.ts +56 -12
- package/dist/core/keys/KeyBag.d.ts.map +1 -1
- package/dist/core/keys/KeyBag.js +156 -70
- package/dist/core/keys/KeyBag.js.map +1 -1
- package/dist/core/keys/KeyContext.d.ts +4 -0
- package/dist/core/keys/KeyContext.d.ts.map +1 -0
- package/dist/core/keys/KeyContext.js +17 -0
- package/dist/core/keys/KeyContext.js.map +1 -0
- package/dist/core/types.d.ts +512 -60
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +9 -1
- package/dist/core/types.js.map +1 -1
- package/dist/core/uri/MindooURI.d.ts +58 -0
- package/dist/core/uri/MindooURI.d.ts.map +1 -0
- package/dist/core/uri/MindooURI.js +169 -0
- package/dist/core/uri/MindooURI.js.map +1 -0
- package/dist/core/userid/index.d.ts +0 -10
- package/dist/core/userid/index.d.ts.map +1 -1
- package/dist/core/utils/idGeneration.d.ts.map +1 -1
- package/dist/core/utils/idGeneration.js +37 -3
- package/dist/core/utils/idGeneration.js.map +1 -1
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts +544 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.d.ts.map +1 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js +1358 -0
- package/dist/node/appendonlystores/BasicOnDiskContentAddressedStore.js.map +1 -0
- package/dist/node/attachments/writeAttachmentToFile.d.ts +15 -0
- package/dist/node/attachments/writeAttachmentToFile.d.ts.map +1 -0
- package/dist/node/attachments/writeAttachmentToFile.js +73 -0
- package/dist/node/attachments/writeAttachmentToFile.js.map +1 -0
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts +17 -0
- package/dist/node/cache/FileSystemLocalCacheStore.d.ts.map +1 -0
- package/dist/node/cache/FileSystemLocalCacheStore.js +128 -0
- package/dist/node/cache/FileSystemLocalCacheStore.js.map +1 -0
- package/dist/node/cli/change-identity-password.d.ts +7 -0
- package/dist/node/cli/change-identity-password.d.ts.map +1 -0
- package/dist/node/cli/change-identity-password.js +67 -0
- package/dist/node/cli/change-identity-password.js.map +1 -0
- package/dist/node/cli/cli-utils.d.ts +16 -0
- package/dist/node/cli/cli-utils.d.ts.map +1 -0
- package/dist/node/cli/cli-utils.js +113 -0
- package/dist/node/cli/cli-utils.js.map +1 -0
- package/dist/node/cli/identity-export-public.d.ts +4 -0
- package/dist/node/cli/identity-export-public.d.ts.map +1 -0
- package/dist/node/cli/identity-export-public.js +55 -0
- package/dist/node/cli/identity-export-public.js.map +1 -0
- package/dist/node/cli/identity-info.d.ts +4 -0
- package/dist/node/cli/identity-info.d.ts.map +1 -0
- package/dist/node/cli/identity-info.js +57 -0
- package/dist/node/cli/identity-info.js.map +1 -0
- package/dist/node/index.d.ts +2 -0
- package/dist/node/index.d.ts.map +1 -1
- package/dist/node/index.js +8 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/server/CapabilityMatcher.d.ts +45 -0
- package/dist/node/server/CapabilityMatcher.d.ts.map +1 -0
- package/dist/node/server/CapabilityMatcher.js +117 -0
- package/dist/node/server/CapabilityMatcher.js.map +1 -0
- package/dist/node/server/MindooDBServer.d.ts +87 -0
- package/dist/node/server/MindooDBServer.d.ts.map +1 -0
- package/dist/node/server/MindooDBServer.js +1040 -0
- package/dist/node/server/MindooDBServer.js.map +1 -0
- package/dist/node/server/ServerSync.d.ts +41 -0
- package/dist/node/server/ServerSync.d.ts.map +1 -0
- package/dist/node/server/ServerSync.js +187 -0
- package/dist/node/server/ServerSync.js.map +1 -0
- package/dist/node/server/StoreFactory.d.ts +45 -0
- package/dist/node/server/StoreFactory.d.ts.map +1 -0
- package/dist/node/server/StoreFactory.js +89 -0
- package/dist/node/server/StoreFactory.js.map +1 -0
- package/dist/node/server/SystemAdminAuth.d.ts +65 -0
- package/dist/node/server/SystemAdminAuth.d.ts.map +1 -0
- package/dist/node/server/SystemAdminAuth.js +200 -0
- package/dist/node/server/SystemAdminAuth.js.map +1 -0
- package/dist/node/server/SystemIpAllowlist.d.ts +21 -0
- package/dist/node/server/SystemIpAllowlist.d.ts.map +1 -0
- package/dist/node/server/SystemIpAllowlist.js +210 -0
- package/dist/node/server/SystemIpAllowlist.js.map +1 -0
- package/dist/node/server/TenantManager.d.ts +85 -0
- package/dist/node/server/TenantManager.d.ts.map +1 -0
- package/dist/node/server/TenantManager.js +493 -0
- package/dist/node/server/TenantManager.js.map +1 -0
- package/dist/node/server/add-to-network.d.ts +20 -0
- package/dist/node/server/add-to-network.d.ts.map +1 -0
- package/dist/node/server/add-to-network.js +275 -0
- package/dist/node/server/add-to-network.js.map +1 -0
- package/dist/node/server/config.d.ts +51 -0
- package/dist/node/server/config.d.ts.map +1 -0
- package/dist/node/server/config.js +218 -0
- package/dist/node/server/config.js.map +1 -0
- package/dist/node/server/resolveServerPassword.d.ts +7 -0
- package/dist/node/server/resolveServerPassword.d.ts.map +1 -0
- package/dist/node/server/resolveServerPassword.js +25 -0
- package/dist/node/server/resolveServerPassword.js.map +1 -0
- package/dist/node/server/server.d.ts +22 -0
- package/dist/node/server/server.d.ts.map +1 -0
- package/dist/node/server/server.js +225 -0
- package/dist/node/server/server.js.map +1 -0
- package/dist/node/server/serverinit.d.ts +21 -0
- package/dist/node/server/serverinit.d.ts.map +1 -0
- package/dist/node/server/serverinit.js +317 -0
- package/dist/node/server/serverinit.js.map +1 -0
- package/dist/node/server/types.d.ts +162 -0
- package/dist/node/server/types.d.ts.map +1 -0
- package/dist/node/server/types.js +24 -0
- package/dist/node/server/types.js.map +1 -0
- package/dist/node/server/validation.d.ts +47 -0
- package/dist/node/server/validation.d.ts.map +1 -0
- package/dist/node/server/validation.js +114 -0
- package/dist/node/server/validation.js.map +1 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts +48 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.d.ts.map +1 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.js +113 -0
- package/dist/reactnative/cache/MMKVLocalCacheStore.js.map +1 -0
- package/dist/reactnative/crypto/AESAdapter.d.ts +18 -0
- package/dist/reactnative/crypto/AESAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/AESAdapter.js +112 -0
- package/dist/reactnative/crypto/AESAdapter.js.map +1 -0
- package/dist/reactnative/crypto/Ed25519Adapter.d.ts +34 -0
- package/dist/reactnative/crypto/Ed25519Adapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/Ed25519Adapter.js +386 -0
- package/dist/reactnative/crypto/Ed25519Adapter.js.map +1 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.d.ts +23 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.js +51 -0
- package/dist/reactnative/crypto/ExpoGoCryptoAdapter.js.map +1 -0
- package/dist/reactnative/crypto/HMACAdapter.d.ts +13 -0
- package/dist/reactnative/crypto/HMACAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/HMACAdapter.js +50 -0
- package/dist/reactnative/crypto/HMACAdapter.js.map +1 -0
- package/dist/reactnative/crypto/KeyFormatConverter.d.ts +21 -0
- package/dist/reactnative/crypto/KeyFormatConverter.d.ts.map +1 -0
- package/dist/reactnative/crypto/KeyFormatConverter.js +72 -0
- package/dist/reactnative/crypto/KeyFormatConverter.js.map +1 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.d.ts +19 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.js +67 -0
- package/dist/reactnative/crypto/PBKDF2Adapter.js.map +1 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.d.ts +37 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.js +72 -0
- package/dist/reactnative/crypto/QuickCryptoAdapter.js.map +1 -0
- package/dist/reactnative/crypto/RSAAdapter.d.ts +38 -0
- package/dist/reactnative/crypto/RSAAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/RSAAdapter.js +184 -0
- package/dist/reactnative/crypto/RSAAdapter.js.map +1 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.d.ts +33 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.js +61 -0
- package/dist/reactnative/crypto/ReactNativeCryptoAdapter.js.map +1 -0
- package/dist/reactnative/crypto/SHA256Adapter.d.ts +9 -0
- package/dist/reactnative/crypto/SHA256Adapter.d.ts.map +1 -0
- package/dist/reactnative/crypto/SHA256Adapter.js +29 -0
- package/dist/reactnative/crypto/SHA256Adapter.js.map +1 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.d.ts +63 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.d.ts.map +1 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.js +350 -0
- package/dist/reactnative/crypto/SubtleCryptoPolyfill.js.map +1 -0
- package/dist/reactnative/index.d.ts +9 -0
- package/dist/reactnative/index.d.ts.map +1 -0
- package/dist/reactnative/index.js +41 -0
- package/dist/reactnative/index.js.map +1 -0
- package/package.json +63 -7
- package/patches/PATCHES.md +111 -0
- package/patches/react-native+0.76.9.patch +34 -0
- package/patches/react-native-quick-crypto+1.0.7.patch +42 -0
- package/scripts/cli.js +21 -0
- package/scripts/setup-react-native.js +228 -0
- package/templates/reactnative/App.js +252 -0
- package/templates/reactnative/app.json +29 -0
- package/templates/reactnative/babel.config.js +6 -0
- package/templates/reactnative/index.js +26 -0
- package/templates/reactnative/metro.config.snippet.js +39 -0
- package/templates/reactnative/mindoodb-polyfills.js +116 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HMACAdapter.d.ts","sourceRoot":"","sources":["../../../src/reactnative/crypto/HMACAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,wBAAsB,QAAQ,CAAC,GAAG,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBrG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,GAAG,EAAE,WAAW,EAChB,SAAS,EAAE,WAAW,GAAG,UAAU,EACnC,IAAI,EAAE,WAAW,GAAG,UAAU,GAC7B,OAAO,CAAC,OAAO,CAAC,CAelB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* HMAC-SHA256 Adapter
|
|
4
|
+
* Implements HMAC-SHA256 signing and verification using node-forge
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.hmacSign = hmacSign;
|
|
11
|
+
exports.hmacVerify = hmacVerify;
|
|
12
|
+
const node_forge_1 = __importDefault(require("node-forge"));
|
|
13
|
+
/**
|
|
14
|
+
* Sign data with HMAC-SHA256
|
|
15
|
+
*/
|
|
16
|
+
async function hmacSign(key, data) {
|
|
17
|
+
const keyBytes = new Uint8Array(key);
|
|
18
|
+
const dataBytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
19
|
+
const hmac = node_forge_1.default.hmac.create();
|
|
20
|
+
const keyBuf = node_forge_1.default.util.createBuffer(keyBytes.buffer);
|
|
21
|
+
const dataBuf = node_forge_1.default.util.createBuffer(dataBytes.buffer);
|
|
22
|
+
hmac.start("sha256", keyBuf.getBytes());
|
|
23
|
+
hmac.update(dataBuf.getBytes());
|
|
24
|
+
const signature = hmac.digest();
|
|
25
|
+
// Convert signature to Uint8Array
|
|
26
|
+
const sigHex = signature.toHex();
|
|
27
|
+
const sigBytes = new Uint8Array(sigHex.length / 2);
|
|
28
|
+
for (let i = 0; i < sigBytes.length; i++) {
|
|
29
|
+
sigBytes[i] = parseInt(sigHex.substr(i * 2, 2), 16);
|
|
30
|
+
}
|
|
31
|
+
return sigBytes.buffer;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Verify HMAC-SHA256 signature
|
|
35
|
+
*/
|
|
36
|
+
async function hmacVerify(key, signature, data) {
|
|
37
|
+
const expectedSignature = await hmacSign(key, data);
|
|
38
|
+
const sigBytes = signature instanceof Uint8Array ? signature : new Uint8Array(signature);
|
|
39
|
+
const expectedBytes = new Uint8Array(expectedSignature);
|
|
40
|
+
if (sigBytes.length !== expectedBytes.length) {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
// Constant-time comparison
|
|
44
|
+
let result = 0;
|
|
45
|
+
for (let i = 0; i < sigBytes.length; i++) {
|
|
46
|
+
result |= sigBytes[i] ^ expectedBytes[i];
|
|
47
|
+
}
|
|
48
|
+
return result === 0;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=HMACAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HMACAdapter.js","sourceRoot":"","sources":["../../../src/reactnative/crypto/HMACAdapter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAOH,4BAmBC;AAKD,gCAmBC;AAhDD,4DAA+B;AAE/B;;GAEG;AACI,KAAK,UAAU,QAAQ,CAAC,GAAgB,EAAE,IAA8B;IAC7E,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,YAAY,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAE3E,MAAM,IAAI,GAAG,oBAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;IACjC,MAAM,MAAM,GAAG,oBAAK,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAqB,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,oBAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAqB,CAAC,CAAC;IACzE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;IAEhC,kCAAkC;IAClC,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,QAAQ,CAAC,MAAM,CAAC;AACzB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,UAAU,CAC9B,GAAgB,EAChB,SAAmC,EACnC,IAA8B;IAE9B,MAAM,iBAAiB,GAAG,MAAM,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IACpD,MAAM,QAAQ,GAAG,SAAS,YAAY,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IACzF,MAAM,aAAa,GAAG,IAAI,UAAU,CAAC,iBAAiB,CAAC,CAAC;IAExD,IAAI,QAAQ,CAAC,MAAM,KAAK,aAAa,CAAC,MAAM,EAAE,CAAC;QAC7C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,2BAA2B;IAC3B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,KAAK,CAAC,CAAC;AACtB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Key Format Converter
|
|
3
|
+
* Handles conversions between PEM format and raw key material for Ed25519 and RSA keys
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Convert PEM string to ArrayBuffer (base64 decoded)
|
|
7
|
+
*/
|
|
8
|
+
export declare function pemToArrayBuffer(pem: string): ArrayBuffer;
|
|
9
|
+
/**
|
|
10
|
+
* Convert ArrayBuffer to PEM string
|
|
11
|
+
*/
|
|
12
|
+
export declare function arrayBufferToPEM(buffer: ArrayBuffer, type: "PUBLIC KEY" | "PRIVATE KEY"): string;
|
|
13
|
+
/**
|
|
14
|
+
* Convert Uint8Array to base64 string
|
|
15
|
+
*/
|
|
16
|
+
export declare function uint8ArrayToBase64(bytes: Uint8Array): string;
|
|
17
|
+
/**
|
|
18
|
+
* Convert base64 string to Uint8Array
|
|
19
|
+
*/
|
|
20
|
+
export declare function base64ToUint8Array(base64: string): Uint8Array;
|
|
21
|
+
//# sourceMappingURL=KeyFormatConverter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyFormatConverter.d.ts","sourceRoot":"","sources":["../../../src/reactnative/crypto/KeyFormatConverter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAczD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,YAAY,GAAG,aAAa,GAAG,MAAM,CAsBhG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAM5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAO7D"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Key Format Converter
|
|
4
|
+
* Handles conversions between PEM format and raw key material for Ed25519 and RSA keys
|
|
5
|
+
*/
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.pemToArrayBuffer = pemToArrayBuffer;
|
|
8
|
+
exports.arrayBufferToPEM = arrayBufferToPEM;
|
|
9
|
+
exports.uint8ArrayToBase64 = uint8ArrayToBase64;
|
|
10
|
+
exports.base64ToUint8Array = base64ToUint8Array;
|
|
11
|
+
/**
|
|
12
|
+
* Convert PEM string to ArrayBuffer (base64 decoded)
|
|
13
|
+
*/
|
|
14
|
+
function pemToArrayBuffer(pem) {
|
|
15
|
+
// Remove PEM headers and whitespace
|
|
16
|
+
const pemContents = pem
|
|
17
|
+
.replace(/-----BEGIN [A-Z ]+-----/g, "")
|
|
18
|
+
.replace(/-----END [A-Z ]+-----/g, "")
|
|
19
|
+
.replace(/\s/g, "");
|
|
20
|
+
// Decode base64
|
|
21
|
+
const binary = atob(pemContents);
|
|
22
|
+
const bytes = new Uint8Array(binary.length);
|
|
23
|
+
for (let i = 0; i < binary.length; i++) {
|
|
24
|
+
bytes[i] = binary.charCodeAt(i);
|
|
25
|
+
}
|
|
26
|
+
return bytes.buffer;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Convert ArrayBuffer to PEM string
|
|
30
|
+
*/
|
|
31
|
+
function arrayBufferToPEM(buffer, type) {
|
|
32
|
+
const bytes = new Uint8Array(buffer);
|
|
33
|
+
let binary = "";
|
|
34
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
35
|
+
binary += String.fromCharCode(bytes[i]);
|
|
36
|
+
}
|
|
37
|
+
const base64 = btoa(binary);
|
|
38
|
+
const header = type === "PUBLIC KEY"
|
|
39
|
+
? "-----BEGIN PUBLIC KEY-----"
|
|
40
|
+
: "-----BEGIN PRIVATE KEY-----";
|
|
41
|
+
const footer = type === "PUBLIC KEY"
|
|
42
|
+
? "-----END PUBLIC KEY-----"
|
|
43
|
+
: "-----END PRIVATE KEY-----";
|
|
44
|
+
// Format with line breaks (64 chars per line)
|
|
45
|
+
const lines = [];
|
|
46
|
+
for (let i = 0; i < base64.length; i += 64) {
|
|
47
|
+
lines.push(base64.slice(i, i + 64));
|
|
48
|
+
}
|
|
49
|
+
return `${header}\n${lines.join("\n")}\n${footer}`;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Convert Uint8Array to base64 string
|
|
53
|
+
*/
|
|
54
|
+
function uint8ArrayToBase64(bytes) {
|
|
55
|
+
let binary = "";
|
|
56
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
57
|
+
binary += String.fromCharCode(bytes[i]);
|
|
58
|
+
}
|
|
59
|
+
return btoa(binary);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Convert base64 string to Uint8Array
|
|
63
|
+
*/
|
|
64
|
+
function base64ToUint8Array(base64) {
|
|
65
|
+
const binary = atob(base64);
|
|
66
|
+
const bytes = new Uint8Array(binary.length);
|
|
67
|
+
for (let i = 0; i < binary.length; i++) {
|
|
68
|
+
bytes[i] = binary.charCodeAt(i);
|
|
69
|
+
}
|
|
70
|
+
return bytes;
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=KeyFormatConverter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"KeyFormatConverter.js","sourceRoot":"","sources":["../../../src/reactnative/crypto/KeyFormatConverter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PBKDF2 Key Derivation Adapter
|
|
3
|
+
* Implements PBKDF2 key derivation using node-forge
|
|
4
|
+
*/
|
|
5
|
+
export interface PBKDF2Params {
|
|
6
|
+
name: "PBKDF2";
|
|
7
|
+
salt: BufferSource;
|
|
8
|
+
iterations: number;
|
|
9
|
+
hash: "SHA-256";
|
|
10
|
+
}
|
|
11
|
+
export interface DeriveKeyParams {
|
|
12
|
+
name: "AES-GCM";
|
|
13
|
+
length: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Derive a key using PBKDF2
|
|
17
|
+
*/
|
|
18
|
+
export declare function pbkdf2DeriveKey(params: PBKDF2Params, baseKey: ArrayBuffer, derivedKeyParams: DeriveKeyParams): Promise<CryptoKey>;
|
|
19
|
+
//# sourceMappingURL=PBKDF2Adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PBKDF2Adapter.d.ts","sourceRoot":"","sources":["../../../src/reactnative/crypto/PBKDF2Adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,YAAY,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE,WAAW,EACpB,gBAAgB,EAAE,eAAe,GAChC,OAAO,CAAC,SAAS,CAAC,CA2DpB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* PBKDF2 Key Derivation Adapter
|
|
4
|
+
* Implements PBKDF2 key derivation using node-forge
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.pbkdf2DeriveKey = pbkdf2DeriveKey;
|
|
11
|
+
const node_forge_1 = __importDefault(require("node-forge"));
|
|
12
|
+
/**
|
|
13
|
+
* Derive a key using PBKDF2
|
|
14
|
+
*/
|
|
15
|
+
async function pbkdf2DeriveKey(params, baseKey, derivedKeyParams) {
|
|
16
|
+
// Ensure salt is a proper ArrayBuffer
|
|
17
|
+
let saltBytes;
|
|
18
|
+
if (params.salt instanceof Uint8Array) {
|
|
19
|
+
saltBytes = params.salt;
|
|
20
|
+
}
|
|
21
|
+
else if (params.salt instanceof ArrayBuffer) {
|
|
22
|
+
saltBytes = new Uint8Array(params.salt);
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
// ArrayBufferView - copy to ensure we have ArrayBuffer
|
|
26
|
+
const view = params.salt;
|
|
27
|
+
const copy = new Uint8Array(view.byteLength);
|
|
28
|
+
copy.set(new Uint8Array(view.buffer, view.byteOffset, view.byteLength));
|
|
29
|
+
saltBytes = copy;
|
|
30
|
+
}
|
|
31
|
+
// Ensure baseKey is a proper ArrayBuffer
|
|
32
|
+
let baseKeyBuffer;
|
|
33
|
+
if (baseKey instanceof ArrayBuffer) {
|
|
34
|
+
baseKeyBuffer = baseKey;
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const view = new Uint8Array(baseKey);
|
|
38
|
+
const copy = new Uint8Array(view.length);
|
|
39
|
+
copy.set(view);
|
|
40
|
+
baseKeyBuffer = copy.buffer;
|
|
41
|
+
}
|
|
42
|
+
// Derive key using PBKDF2
|
|
43
|
+
// node-forge pbkdf2 expects password as string and salt as string
|
|
44
|
+
// Convert buffers to binary strings using getBytes()
|
|
45
|
+
const baseKeyBuf = node_forge_1.default.util.createBuffer(baseKeyBuffer);
|
|
46
|
+
const baseKeyStr = baseKeyBuf.getBytes();
|
|
47
|
+
const saltBuf = node_forge_1.default.util.createBuffer(saltBytes.buffer);
|
|
48
|
+
const saltStr = saltBuf.getBytes();
|
|
49
|
+
const keyLength = derivedKeyParams.length / 8; // Convert bits to bytes
|
|
50
|
+
const derivedKey = node_forge_1.default.pkcs5.pbkdf2(baseKeyStr, saltStr, params.iterations, keyLength, node_forge_1.default.md.sha256.create());
|
|
51
|
+
// Convert string to Uint8Array
|
|
52
|
+
// derivedKey is a binary string, convert to bytes
|
|
53
|
+
const keyMaterial = new Uint8Array(keyLength);
|
|
54
|
+
for (let i = 0; i < keyLength && i < derivedKey.length; i++) {
|
|
55
|
+
keyMaterial[i] = derivedKey.charCodeAt(i) & 0xff;
|
|
56
|
+
}
|
|
57
|
+
// Return a CryptoKey-like object that can be used for encryption/decryption
|
|
58
|
+
return {
|
|
59
|
+
type: "secret",
|
|
60
|
+
extractable: false,
|
|
61
|
+
algorithm: derivedKeyParams,
|
|
62
|
+
usages: ["encrypt", "decrypt"],
|
|
63
|
+
// Store raw key material for use in encryption/decryption
|
|
64
|
+
_rawKey: keyMaterial.buffer,
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=PBKDF2Adapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PBKDF2Adapter.js","sourceRoot":"","sources":["../../../src/reactnative/crypto/PBKDF2Adapter.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;AAmBH,0CA+DC;AAhFD,4DAA+B;AAc/B;;GAEG;AACI,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,OAAoB,EACpB,gBAAiC;IAEjC,sCAAsC;IACtC,IAAI,SAAqB,CAAC;IAC1B,IAAI,MAAM,CAAC,IAAI,YAAY,UAAU,EAAE,CAAC;QACtC,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC;IAC1B,CAAC;SAAM,IAAI,MAAM,CAAC,IAAI,YAAY,WAAW,EAAE,CAAC;QAC9C,SAAS,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;SAAM,CAAC;QACN,uDAAuD;QACvD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAuB,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QACxE,SAAS,GAAG,IAAI,CAAC;IACnB,CAAC;IAED,yCAAyC;IACzC,IAAI,aAA0B,CAAC;IAC/B,IAAI,OAAO,YAAY,WAAW,EAAE,CAAC;QACnC,aAAa,GAAG,OAAO,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACf,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED,0BAA0B;IAC1B,kEAAkE;IAClE,qDAAqD;IACrD,MAAM,UAAU,GAAG,oBAAK,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;IAC1D,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IACzC,MAAM,OAAO,GAAG,oBAAK,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAqB,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAEnC,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,wBAAwB;IACvE,MAAM,UAAU,GAAG,oBAAK,CAAC,KAAK,CAAC,MAAM,CACnC,UAAU,EACV,OAAO,EACP,MAAM,CAAC,UAAU,EACjB,SAAS,EACT,oBAAK,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CACzB,CAAC;IAEF,+BAA+B;IAC/B,kDAAkD;IAClD,MAAM,WAAW,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,CAAC;IAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5D,WAAW,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACnD,CAAC;IAED,4EAA4E;IAC5E,OAAO;QACL,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,KAAK;QAClB,SAAS,EAAE,gBAAgB;QAC3B,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC;QAC9B,0DAA0D;QAC1D,OAAO,EAAE,WAAW,CAAC,MAAM;KACrB,CAAC;AACX,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quick Crypto Adapter
|
|
3
|
+
* Wrapper for react-native-quick-crypto native module
|
|
4
|
+
* Provides high-performance crypto operations for React Native native builds
|
|
5
|
+
*/
|
|
6
|
+
import type { CryptoAdapter } from "../../core/crypto/CryptoAdapter";
|
|
7
|
+
/**
|
|
8
|
+
* Interface for the react-native-quick-crypto module
|
|
9
|
+
*/
|
|
10
|
+
interface QuickCryptoModule {
|
|
11
|
+
subtle: SubtleCrypto;
|
|
12
|
+
getRandomValues?: (array: Uint8Array) => Uint8Array;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Quick Crypto Adapter
|
|
16
|
+
* Uses react-native-quick-crypto for native crypto operations
|
|
17
|
+
* This provides significantly better performance than the JS-only ExpoGoCryptoAdapter
|
|
18
|
+
*/
|
|
19
|
+
export declare class QuickCryptoAdapter implements CryptoAdapter {
|
|
20
|
+
private quickCrypto;
|
|
21
|
+
constructor(quickCrypto: QuickCryptoModule);
|
|
22
|
+
/**
|
|
23
|
+
* Get the SubtleCrypto interface from react-native-quick-crypto
|
|
24
|
+
*/
|
|
25
|
+
getSubtle(): SubtleCrypto;
|
|
26
|
+
/**
|
|
27
|
+
* Get random values using react-native-quick-crypto
|
|
28
|
+
*/
|
|
29
|
+
getRandomValues(array: Uint8Array): Uint8Array;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Check if react-native-quick-crypto is available
|
|
33
|
+
* @returns true if the module is available and functional
|
|
34
|
+
*/
|
|
35
|
+
export declare function isQuickCryptoAvailable(): boolean;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=QuickCryptoAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickCryptoAdapter.d.ts","sourceRoot":"","sources":["../../../src/reactnative/crypto/QuickCryptoAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAErE;;GAEG;AACH,UAAU,iBAAiB;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,UAAU,CAAC;CACrD;AAED;;;;GAIG;AACH,qBAAa,kBAAmB,YAAW,aAAa;IACtD,OAAO,CAAC,WAAW,CAAoB;gBAE3B,WAAW,EAAE,iBAAiB;IAU1C;;OAEG;IACH,SAAS,IAAI,YAAY;IAIzB;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,UAAU,GAAG,UAAU;CAS/C;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CA0BhD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Quick Crypto Adapter
|
|
4
|
+
* Wrapper for react-native-quick-crypto native module
|
|
5
|
+
* Provides high-performance crypto operations for React Native native builds
|
|
6
|
+
*/
|
|
7
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
+
exports.QuickCryptoAdapter = void 0;
|
|
9
|
+
exports.isQuickCryptoAvailable = isQuickCryptoAvailable;
|
|
10
|
+
/**
|
|
11
|
+
* Quick Crypto Adapter
|
|
12
|
+
* Uses react-native-quick-crypto for native crypto operations
|
|
13
|
+
* This provides significantly better performance than the JS-only ExpoGoCryptoAdapter
|
|
14
|
+
*/
|
|
15
|
+
class QuickCryptoAdapter {
|
|
16
|
+
constructor(quickCrypto) {
|
|
17
|
+
if (!quickCrypto || !quickCrypto.subtle) {
|
|
18
|
+
throw new Error("react-native-quick-crypto subtle API is not available. " +
|
|
19
|
+
"Make sure you have a development build with react-native-quick-crypto installed.");
|
|
20
|
+
}
|
|
21
|
+
this.quickCrypto = quickCrypto;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get the SubtleCrypto interface from react-native-quick-crypto
|
|
25
|
+
*/
|
|
26
|
+
getSubtle() {
|
|
27
|
+
return this.quickCrypto.subtle;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Get random values using react-native-quick-crypto
|
|
31
|
+
*/
|
|
32
|
+
getRandomValues(array) {
|
|
33
|
+
if (this.quickCrypto.getRandomValues) {
|
|
34
|
+
return this.quickCrypto.getRandomValues(array);
|
|
35
|
+
}
|
|
36
|
+
if (typeof global !== "undefined" && global.crypto?.getRandomValues) {
|
|
37
|
+
return global.crypto.getRandomValues(array);
|
|
38
|
+
}
|
|
39
|
+
throw new Error("react-native-quick-crypto getRandomValues is not available");
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.QuickCryptoAdapter = QuickCryptoAdapter;
|
|
43
|
+
/**
|
|
44
|
+
* Check if react-native-quick-crypto is available
|
|
45
|
+
* @returns true if the module is available and functional
|
|
46
|
+
*/
|
|
47
|
+
function isQuickCryptoAvailable() {
|
|
48
|
+
try {
|
|
49
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
50
|
+
const quickCrypto = require("react-native-quick-crypto");
|
|
51
|
+
if (!quickCrypto || !quickCrypto.subtle || typeof quickCrypto.subtle.generateKey !== "function") {
|
|
52
|
+
return false;
|
|
53
|
+
}
|
|
54
|
+
const hasRandomValues = typeof quickCrypto.getRandomValues === "function" ||
|
|
55
|
+
(typeof global !== "undefined" && typeof global.crypto?.getRandomValues === "function");
|
|
56
|
+
if (!hasRandomValues) {
|
|
57
|
+
return false;
|
|
58
|
+
}
|
|
59
|
+
// Ensure the native Hash implementation is actually available.
|
|
60
|
+
// In Expo Go or a misbuilt dev client, these can throw "Not implemented".
|
|
61
|
+
if (typeof quickCrypto.createHash === "function") {
|
|
62
|
+
const hash = quickCrypto.createHash("sha256");
|
|
63
|
+
hash.update("mindoodb-quick-crypto-test");
|
|
64
|
+
hash.digest();
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=QuickCryptoAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuickCryptoAdapter.js","sourceRoot":"","sources":["../../../src/reactnative/crypto/QuickCryptoAdapter.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAuDH,wDA0BC;AArED;;;;GAIG;AACH,MAAa,kBAAkB;IAG7B,YAAY,WAA8B;QACxC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,yDAAyD;gBACzD,kFAAkF,CACnF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,eAAe,CAAC,KAAiB;QAC/B,IAAI,IAAI,CAAC,WAAW,CAAC,eAAe,EAAE,CAAC;YACrC,OAAO,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QACD,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC;YACpE,OAAO,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;QAC9C,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;IAChF,CAAC;CACF;AAhCD,gDAgCC;AAED;;;GAGG;AACH,SAAgB,sBAAsB;IACpC,IAAI,CAAC;QACH,8DAA8D;QAC9D,MAAM,WAAW,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC;QACzD,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,OAAO,WAAW,CAAC,MAAM,CAAC,WAAW,KAAK,UAAU,EAAE,CAAC;YAChG,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,eAAe,GACnB,OAAO,WAAW,CAAC,eAAe,KAAK,UAAU;YACjD,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,MAAM,CAAC,MAAM,EAAE,eAAe,KAAK,UAAU,CAAC,CAAC;QAC1F,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,+DAA+D;QAC/D,0EAA0E;QAC1E,IAAI,OAAO,WAAW,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;YACjD,MAAM,IAAI,GAAG,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAC9C,IAAI,CAAC,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* RSA-OAEP Adapter
|
|
3
|
+
* Implements RSA-OAEP encryption/decryption using node-forge
|
|
4
|
+
*/
|
|
5
|
+
export interface RSAOAEPParams {
|
|
6
|
+
name: "RSA-OAEP";
|
|
7
|
+
label?: BufferSource;
|
|
8
|
+
}
|
|
9
|
+
export interface RSAKeyGenParams {
|
|
10
|
+
name: "RSA-OAEP";
|
|
11
|
+
modulusLength: number;
|
|
12
|
+
publicExponent: Uint8Array;
|
|
13
|
+
hash: "SHA-256";
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Generate RSA-OAEP key pair
|
|
17
|
+
*/
|
|
18
|
+
export declare function rsaGenerateKey(algorithm: RSAKeyGenParams, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKeyPair>;
|
|
19
|
+
/**
|
|
20
|
+
* Import RSA key from SPKI (public) or PKCS8 (private) format
|
|
21
|
+
*/
|
|
22
|
+
export declare function rsaImportKey(format: "spki" | "pkcs8", keyData: ArrayBuffer, algorithm: {
|
|
23
|
+
name: "RSA-OAEP";
|
|
24
|
+
hash: "SHA-256";
|
|
25
|
+
}, extractable: boolean, keyUsages: KeyUsage[]): Promise<CryptoKey>;
|
|
26
|
+
/**
|
|
27
|
+
* Export RSA key to SPKI (public) or PKCS8 (private) format
|
|
28
|
+
*/
|
|
29
|
+
export declare function rsaExportKey(format: "spki" | "pkcs8", key: CryptoKey): Promise<ArrayBuffer>;
|
|
30
|
+
/**
|
|
31
|
+
* Encrypt data with RSA-OAEP
|
|
32
|
+
*/
|
|
33
|
+
export declare function rsaEncrypt(algorithm: RSAOAEPParams, key: CryptoKey, data: ArrayBuffer | Uint8Array): Promise<ArrayBuffer>;
|
|
34
|
+
/**
|
|
35
|
+
* Decrypt data with RSA-OAEP
|
|
36
|
+
*/
|
|
37
|
+
export declare function rsaDecrypt(algorithm: RSAOAEPParams, key: CryptoKey, data: ArrayBuffer | Uint8Array): Promise<ArrayBuffer>;
|
|
38
|
+
//# sourceMappingURL=RSAAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RSAAdapter.d.ts","sourceRoot":"","sources":["../../../src/reactnative/crypto/RSAAdapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,UAAU,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,UAAU,CAAC;IAC3B,IAAI,EAAE,SAAS,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,aAAa,CAAC,CA8CxB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,GAAG,OAAO,EACxB,OAAO,EAAE,WAAW,EACpB,SAAS,EAAE;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,SAAS,CAAA;CAAE,EAChD,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,SAAS,CAAC,CAmDpB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,WAAW,CAAC,CAcjG;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,WAAW,GAAG,UAAU,GAC7B,OAAO,CAAC,WAAW,CAAC,CAyBtB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,aAAa,EACxB,GAAG,EAAE,SAAS,EACd,IAAI,EAAE,WAAW,GAAG,UAAU,GAC7B,OAAO,CAAC,WAAW,CAAC,CAyBtB"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* RSA-OAEP Adapter
|
|
4
|
+
* Implements RSA-OAEP encryption/decryption using node-forge
|
|
5
|
+
*/
|
|
6
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.rsaGenerateKey = rsaGenerateKey;
|
|
11
|
+
exports.rsaImportKey = rsaImportKey;
|
|
12
|
+
exports.rsaExportKey = rsaExportKey;
|
|
13
|
+
exports.rsaEncrypt = rsaEncrypt;
|
|
14
|
+
exports.rsaDecrypt = rsaDecrypt;
|
|
15
|
+
const node_forge_1 = __importDefault(require("node-forge"));
|
|
16
|
+
const KeyFormatConverter_1 = require("./KeyFormatConverter");
|
|
17
|
+
/**
|
|
18
|
+
* Generate RSA-OAEP key pair
|
|
19
|
+
*/
|
|
20
|
+
async function rsaGenerateKey(algorithm, extractable, keyUsages) {
|
|
21
|
+
// Convert public exponent from Uint8Array to bigint
|
|
22
|
+
// Usually [1, 0, 1] = 65537
|
|
23
|
+
let exponent = 0n;
|
|
24
|
+
for (let i = 0; i < algorithm.publicExponent.length; i++) {
|
|
25
|
+
exponent = (exponent << 8n) | BigInt(algorithm.publicExponent[i]);
|
|
26
|
+
}
|
|
27
|
+
// Generate RSA key pair using node-forge
|
|
28
|
+
const keyPair = node_forge_1.default.pki.rsa.generateKeyPair({
|
|
29
|
+
bits: algorithm.modulusLength,
|
|
30
|
+
e: Number(exponent), // Usually 65537
|
|
31
|
+
});
|
|
32
|
+
// Convert to PEM format for storage
|
|
33
|
+
const publicKeyPem = node_forge_1.default.pki.publicKeyToPem(keyPair.publicKey);
|
|
34
|
+
const privateKeyPem = node_forge_1.default.pki.privateKeyToPem(keyPair.privateKey);
|
|
35
|
+
return {
|
|
36
|
+
publicKey: {
|
|
37
|
+
type: "public",
|
|
38
|
+
extractable,
|
|
39
|
+
algorithm: {
|
|
40
|
+
name: "RSA-OAEP",
|
|
41
|
+
modulusLength: algorithm.modulusLength,
|
|
42
|
+
publicExponent: algorithm.publicExponent,
|
|
43
|
+
hash: algorithm.hash,
|
|
44
|
+
},
|
|
45
|
+
usages: keyUsages.filter((u) => u === "encrypt"),
|
|
46
|
+
_forgePublicKey: keyPair.publicKey,
|
|
47
|
+
_pemPublicKey: publicKeyPem,
|
|
48
|
+
},
|
|
49
|
+
privateKey: {
|
|
50
|
+
type: "private",
|
|
51
|
+
extractable,
|
|
52
|
+
algorithm: {
|
|
53
|
+
name: "RSA-OAEP",
|
|
54
|
+
modulusLength: algorithm.modulusLength,
|
|
55
|
+
publicExponent: algorithm.publicExponent,
|
|
56
|
+
hash: algorithm.hash,
|
|
57
|
+
},
|
|
58
|
+
usages: keyUsages.filter((u) => u === "decrypt"),
|
|
59
|
+
_forgePrivateKey: keyPair.privateKey,
|
|
60
|
+
_pemPrivateKey: privateKeyPem,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Import RSA key from SPKI (public) or PKCS8 (private) format
|
|
66
|
+
*/
|
|
67
|
+
async function rsaImportKey(format, keyData, algorithm, extractable, keyUsages) {
|
|
68
|
+
const keyBytes = new Uint8Array(keyData);
|
|
69
|
+
// Convert to PEM format for node-forge
|
|
70
|
+
const pem = (0, KeyFormatConverter_1.arrayBufferToPEM)(keyBytes.buffer, format === "spki" ? "PUBLIC KEY" : "PRIVATE KEY");
|
|
71
|
+
try {
|
|
72
|
+
if (format === "spki") {
|
|
73
|
+
const publicKey = node_forge_1.default.pki.publicKeyFromPem(pem);
|
|
74
|
+
const publicKeyPem = node_forge_1.default.pki.publicKeyToPem(publicKey);
|
|
75
|
+
// Extract modulus length from key
|
|
76
|
+
const modulusLength = publicKey.n.bitLength();
|
|
77
|
+
return {
|
|
78
|
+
type: "public",
|
|
79
|
+
extractable,
|
|
80
|
+
algorithm: {
|
|
81
|
+
name: "RSA-OAEP",
|
|
82
|
+
modulusLength,
|
|
83
|
+
publicExponent: new Uint8Array([1, 0, 1]), // Usually 65537
|
|
84
|
+
hash: algorithm.hash,
|
|
85
|
+
},
|
|
86
|
+
usages: keyUsages.filter((u) => u === "encrypt"),
|
|
87
|
+
_forgePublicKey: publicKey,
|
|
88
|
+
_pemPublicKey: publicKeyPem,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const privateKey = node_forge_1.default.pki.privateKeyFromPem(pem);
|
|
93
|
+
const privateKeyPem = node_forge_1.default.pki.privateKeyToPem(privateKey);
|
|
94
|
+
// Extract modulus length from key
|
|
95
|
+
const modulusLength = privateKey.n.bitLength();
|
|
96
|
+
return {
|
|
97
|
+
type: "private",
|
|
98
|
+
extractable,
|
|
99
|
+
algorithm: {
|
|
100
|
+
name: "RSA-OAEP",
|
|
101
|
+
modulusLength,
|
|
102
|
+
publicExponent: new Uint8Array([1, 0, 1]), // Usually 65537
|
|
103
|
+
hash: algorithm.hash,
|
|
104
|
+
},
|
|
105
|
+
usages: keyUsages.filter((u) => u === "decrypt"),
|
|
106
|
+
_forgePrivateKey: privateKey,
|
|
107
|
+
_pemPrivateKey: privateKeyPem,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
throw new Error(`Failed to import RSA key: ${error}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Export RSA key to SPKI (public) or PKCS8 (private) format
|
|
117
|
+
*/
|
|
118
|
+
async function rsaExportKey(format, key) {
|
|
119
|
+
if (format === "spki") {
|
|
120
|
+
const pem = key._pemPublicKey;
|
|
121
|
+
if (!pem) {
|
|
122
|
+
throw new Error("Key does not contain public key material");
|
|
123
|
+
}
|
|
124
|
+
return (0, KeyFormatConverter_1.pemToArrayBuffer)(pem);
|
|
125
|
+
}
|
|
126
|
+
else {
|
|
127
|
+
const pem = key._pemPrivateKey;
|
|
128
|
+
if (!pem) {
|
|
129
|
+
throw new Error("Key does not contain private key material");
|
|
130
|
+
}
|
|
131
|
+
return (0, KeyFormatConverter_1.pemToArrayBuffer)(pem);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Encrypt data with RSA-OAEP
|
|
136
|
+
*/
|
|
137
|
+
async function rsaEncrypt(algorithm, key, data) {
|
|
138
|
+
const publicKey = key._forgePublicKey;
|
|
139
|
+
if (!publicKey) {
|
|
140
|
+
throw new Error("Key does not contain public key material");
|
|
141
|
+
}
|
|
142
|
+
const dataBytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
143
|
+
// RSA-OAEP encryption with SHA-256
|
|
144
|
+
// node-forge encrypt returns a binary string, convert to ArrayBuffer
|
|
145
|
+
const dataBuf = node_forge_1.default.util.createBuffer(dataBytes.buffer);
|
|
146
|
+
const encrypted = publicKey.encrypt(dataBuf.getBytes(), "RSA-OAEP", {
|
|
147
|
+
md: node_forge_1.default.md.sha256.create(),
|
|
148
|
+
mgf1: {
|
|
149
|
+
md: node_forge_1.default.md.sha256.create(),
|
|
150
|
+
},
|
|
151
|
+
});
|
|
152
|
+
// Convert binary string to ArrayBuffer
|
|
153
|
+
const encryptedBytes = new Uint8Array(encrypted.length);
|
|
154
|
+
for (let i = 0; i < encrypted.length; i++) {
|
|
155
|
+
encryptedBytes[i] = encrypted.charCodeAt(i) & 0xff;
|
|
156
|
+
}
|
|
157
|
+
return encryptedBytes.buffer;
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Decrypt data with RSA-OAEP
|
|
161
|
+
*/
|
|
162
|
+
async function rsaDecrypt(algorithm, key, data) {
|
|
163
|
+
const privateKey = key._forgePrivateKey;
|
|
164
|
+
if (!privateKey) {
|
|
165
|
+
throw new Error("Key does not contain private key material");
|
|
166
|
+
}
|
|
167
|
+
const dataBytes = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
168
|
+
// RSA-OAEP decryption with SHA-256
|
|
169
|
+
// node-forge decrypt expects a binary string
|
|
170
|
+
const encryptedStr = node_forge_1.default.util.createBuffer(dataBytes.buffer).getBytes();
|
|
171
|
+
const decrypted = privateKey.decrypt(encryptedStr, "RSA-OAEP", {
|
|
172
|
+
md: node_forge_1.default.md.sha256.create(),
|
|
173
|
+
mgf1: {
|
|
174
|
+
md: node_forge_1.default.md.sha256.create(),
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
// Convert binary string to ArrayBuffer
|
|
178
|
+
const decryptedBytes = new Uint8Array(decrypted.length);
|
|
179
|
+
for (let i = 0; i < decrypted.length; i++) {
|
|
180
|
+
decryptedBytes[i] = decrypted.charCodeAt(i) & 0xff;
|
|
181
|
+
}
|
|
182
|
+
return decryptedBytes.buffer;
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=RSAAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RSAAdapter.js","sourceRoot":"","sources":["../../../src/reactnative/crypto/RSAAdapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* React Native Crypto Adapter
|
|
3
|
+
* Auto-detects and uses the best available crypto implementation:
|
|
4
|
+
* 1. react-native-quick-crypto (native, fast) - for dev builds and production
|
|
5
|
+
* 2. ExpoGoCryptoAdapter (JS-only, slower) - fallback for Expo Go
|
|
6
|
+
*/
|
|
7
|
+
import type { CryptoAdapter } from "../../core/crypto/CryptoAdapter";
|
|
8
|
+
/**
|
|
9
|
+
* React Native Crypto Adapter
|
|
10
|
+
* Automatically selects the best available crypto implementation
|
|
11
|
+
*/
|
|
12
|
+
export declare class ReactNativeCryptoAdapter implements CryptoAdapter {
|
|
13
|
+
private adapter;
|
|
14
|
+
/**
|
|
15
|
+
* Indicates whether the adapter is using native crypto (react-native-quick-crypto)
|
|
16
|
+
* or the slower JavaScript-only fallback (ExpoGoCryptoAdapter)
|
|
17
|
+
*/
|
|
18
|
+
readonly isUsingNativeCrypto: boolean;
|
|
19
|
+
constructor();
|
|
20
|
+
/**
|
|
21
|
+
* Get the SubtleCrypto interface
|
|
22
|
+
*/
|
|
23
|
+
getSubtle(): SubtleCrypto;
|
|
24
|
+
/**
|
|
25
|
+
* Get random values
|
|
26
|
+
*/
|
|
27
|
+
getRandomValues(array: Uint8Array): Uint8Array;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Factory function to create the ReactNativeCryptoAdapter
|
|
31
|
+
*/
|
|
32
|
+
export declare function createCryptoAdapter(): CryptoAdapter;
|
|
33
|
+
//# sourceMappingURL=ReactNativeCryptoAdapter.d.ts.map
|