react-native-quick-crypto 1.0.0-beta.3 → 1.0.0-beta.5

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 (121) hide show
  1. package/QuickCrypto.podspec +4 -0
  2. package/README.md +2 -0
  3. package/android/CMakeLists.txt +26 -13
  4. package/android/build.gradle +4 -0
  5. package/android/src/main/cpp/cpp-adapter.cpp +3 -10
  6. package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +15 -10
  7. package/cpp/pbkdf2/HybridPbkdf2.cpp +71 -0
  8. package/cpp/pbkdf2/HybridPbkdf2.hpp +35 -0
  9. package/cpp/random/HybridRandom.cpp +42 -18
  10. package/cpp/random/HybridRandom.hpp +13 -28
  11. package/cpp/utils/Utils.hpp +12 -1
  12. package/deps/fastpbkdf2/fastpbkdf2.c +352 -0
  13. package/deps/fastpbkdf2/fastpbkdf2.h +68 -0
  14. package/lib/commonjs/index.js +24 -5
  15. package/lib/commonjs/index.js.map +1 -1
  16. package/lib/commonjs/keys/index.js +86 -0
  17. package/lib/commonjs/keys/index.js.map +1 -0
  18. package/lib/commonjs/pbkdf2.js +89 -0
  19. package/lib/commonjs/pbkdf2.js.map +1 -0
  20. package/lib/commonjs/random.js +3 -3
  21. package/lib/commonjs/random.js.map +1 -1
  22. package/lib/commonjs/specs/keyObjectHandle.nitro.js +6 -0
  23. package/lib/commonjs/specs/keyObjectHandle.nitro.js.map +1 -0
  24. package/lib/commonjs/specs/pbkdf2.nitro.js +6 -0
  25. package/lib/commonjs/specs/pbkdf2.nitro.js.map +1 -0
  26. package/lib/commonjs/utils/conversion.js +74 -0
  27. package/lib/commonjs/utils/conversion.js.map +1 -1
  28. package/lib/commonjs/utils/errors.js +14 -0
  29. package/lib/commonjs/utils/errors.js.map +1 -0
  30. package/lib/commonjs/utils/hashnames.js +90 -0
  31. package/lib/commonjs/utils/hashnames.js.map +1 -0
  32. package/lib/commonjs/utils/index.js +43 -5
  33. package/lib/commonjs/utils/index.js.map +1 -1
  34. package/lib/commonjs/utils/types.js +27 -0
  35. package/lib/commonjs/utils/types.js.map +1 -1
  36. package/lib/module/index.js +9 -4
  37. package/lib/module/index.js.map +1 -1
  38. package/lib/module/keys/index.js +81 -0
  39. package/lib/module/keys/index.js.map +1 -0
  40. package/lib/module/pbkdf2.js +83 -0
  41. package/lib/module/pbkdf2.js.map +1 -0
  42. package/lib/module/random.js +1 -1
  43. package/lib/module/random.js.map +1 -1
  44. package/lib/module/specs/keyObjectHandle.nitro.js +4 -0
  45. package/lib/module/specs/keyObjectHandle.nitro.js.map +1 -0
  46. package/lib/module/specs/pbkdf2.nitro.js +4 -0
  47. package/lib/module/specs/pbkdf2.nitro.js.map +1 -0
  48. package/lib/module/utils/conversion.js +71 -0
  49. package/lib/module/utils/conversion.js.map +1 -1
  50. package/lib/module/utils/errors.js +10 -0
  51. package/lib/module/utils/errors.js.map +1 -0
  52. package/lib/module/utils/hashnames.js +88 -0
  53. package/lib/module/utils/hashnames.js.map +1 -0
  54. package/lib/module/utils/index.js +4 -5
  55. package/lib/module/utils/index.js.map +1 -1
  56. package/lib/module/utils/types.js +26 -0
  57. package/lib/module/utils/types.js.map +1 -1
  58. package/lib/tsconfig.tsbuildinfo +1 -1
  59. package/lib/typescript/index.d.ts +26 -9
  60. package/lib/typescript/index.d.ts.map +1 -1
  61. package/lib/typescript/keys/index.d.ts +22 -0
  62. package/lib/typescript/keys/index.d.ts.map +1 -0
  63. package/lib/typescript/pbkdf2.d.ts +12 -0
  64. package/lib/typescript/pbkdf2.d.ts.map +1 -0
  65. package/lib/typescript/random.d.ts +1 -1
  66. package/lib/typescript/random.d.ts.map +1 -1
  67. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +15 -0
  68. package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -0
  69. package/lib/typescript/specs/pbkdf2.nitro.d.ts +9 -0
  70. package/lib/typescript/specs/pbkdf2.nitro.d.ts.map +1 -0
  71. package/lib/typescript/utils/conversion.d.ts +7 -1
  72. package/lib/typescript/utils/conversion.d.ts.map +1 -1
  73. package/lib/typescript/utils/errors.d.ts +7 -0
  74. package/lib/typescript/utils/errors.d.ts.map +1 -0
  75. package/lib/typescript/utils/hashnames.d.ts +11 -0
  76. package/lib/typescript/utils/hashnames.d.ts.map +1 -0
  77. package/lib/typescript/utils/index.d.ts +4 -5
  78. package/lib/typescript/utils/index.d.ts.map +1 -1
  79. package/lib/typescript/utils/types.d.ts +101 -0
  80. package/lib/typescript/utils/types.d.ts.map +1 -1
  81. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +19 -3
  82. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -2
  83. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +50 -0
  84. package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +25 -0
  85. package/nitrogen/generated/android/QuickCryptoOnLoad.kt +1 -0
  86. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +7 -6
  87. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +10 -2
  88. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +4 -2
  89. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +12 -6
  90. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +45 -0
  91. package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +12 -0
  92. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +86 -0
  93. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +27 -0
  94. package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +93 -0
  95. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +22 -0
  96. package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +66 -0
  97. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -2
  98. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +7 -4
  99. package/nitrogen/generated/shared/c++/JWK.hpp +162 -0
  100. package/nitrogen/generated/shared/c++/JWKkty.hpp +86 -0
  101. package/nitrogen/generated/shared/c++/JWKuse.hpp +78 -0
  102. package/nitrogen/generated/shared/c++/KFormatType.hpp +65 -0
  103. package/nitrogen/generated/shared/c++/KeyDetail.hpp +93 -0
  104. package/nitrogen/generated/shared/c++/KeyEncoding.hpp +66 -0
  105. package/nitrogen/generated/shared/c++/KeyType.hpp +65 -0
  106. package/nitrogen/generated/shared/c++/KeyUsage.hpp +102 -0
  107. package/nitrogen/generated/shared/c++/NamedCurve.hpp +82 -0
  108. package/package.json +13 -12
  109. package/src/index.ts +8 -4
  110. package/src/keys/index.ts +99 -0
  111. package/src/pbkdf2.ts +154 -0
  112. package/src/random.ts +14 -14
  113. package/src/specs/keyObjectHandle.nitro.ts +32 -0
  114. package/src/specs/pbkdf2.nitro.ts +18 -0
  115. package/src/specs/random.nitro.ts +2 -2
  116. package/src/utils/conversion.ts +83 -1
  117. package/src/utils/errors.ts +15 -0
  118. package/src/utils/hashnames.ts +96 -0
  119. package/src/utils/index.ts +4 -6
  120. package/src/utils/types.ts +178 -2
  121. package/ios/QuickCryptoOnLoad.mm +0 -19
@@ -0,0 +1,11 @@
1
+ import type { HashAlgorithm } from '.';
2
+ export declare enum HashContext {
3
+ Node = 0,
4
+ WebCrypto = 1,
5
+ JwkRsa = 2,
6
+ JwkRsaPss = 3,
7
+ JwkRsaOaep = 4,
8
+ JwkHmac = 5
9
+ }
10
+ export declare function normalizeHashName(algo: string | HashAlgorithm | undefined, context?: HashContext): HashAlgorithm;
11
+ //# sourceMappingURL=hashnames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hashnames.d.ts","sourceRoot":"","sources":["../../../src/utils/hashnames.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,GAAG,CAAC;AAEvC,oBAAY,WAAW;IACrB,IAAI,IAAA;IACJ,SAAS,IAAA;IACT,MAAM,IAAA;IACN,SAAS,IAAA;IACT,UAAU,IAAA;IACV,OAAO,IAAA;CACR;AAuED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,EACxC,OAAO,GAAE,WAA8B,GACtC,aAAa,CAYf"}
@@ -1,6 +1,5 @@
1
- import { ab2str } from "./conversion";
2
- export declare const utils: {
3
- ab2str: typeof ab2str;
4
- abvToArrayBuffer: (buffer: import("./types").ArrayBufferView) => ArrayBufferLike;
5
- };
1
+ export * from './conversion';
2
+ export * from './errors';
3
+ export * from './hashnames';
4
+ export * from './types';
6
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoB,MAAM,cAAc,CAAC;AAExD,eAAO,MAAM,KAAK;;;CAGjB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC"}
@@ -1,5 +1,106 @@
1
1
  /// <reference types="node" />
2
+ import { type Buffer } from '@craftzdog/react-native-buffer';
3
+ import { type Buffer as SBuffer } from 'safe-buffer';
4
+ import { type CipherKey } from 'crypto';
2
5
  export type ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;
3
6
  export type TypedArray = Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array;
4
7
  export type RandomCallback<T> = (err: Error | null, value: T) => void;
8
+ export type BufferLike = ArrayBuffer | Buffer | SBuffer | ArrayBufferView;
9
+ export type BinaryLike = string | ArrayBuffer | Buffer | SBuffer | TypedArray | DataView;
10
+ export type BinaryLikeNode = CipherKey | BinaryLike;
11
+ export type DigestAlgorithm = 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512';
12
+ export type HashAlgorithm = DigestAlgorithm | 'SHA-224' | 'RIPEMD-160';
13
+ export type RSAKeyPairAlgorithm = 'RSASSA-PKCS1-v1_5' | 'RSA-PSS' | 'RSA-OAEP';
14
+ export type ECKeyPairAlgorithm = 'ECDSA' | 'ECDH';
15
+ export type CFRGKeyPairAlgorithm = 'Ed25519' | 'Ed448' | 'X25519' | 'X448';
16
+ export type KeyPairAlgorithm = RSAKeyPairAlgorithm | ECKeyPairAlgorithm | CFRGKeyPairAlgorithm;
17
+ export type AESAlgorithm = 'AES-CTR' | 'AES-CBC' | 'AES-GCM' | 'AES-KW';
18
+ export type SecretKeyAlgorithm = 'HMAC' | AESAlgorithm;
19
+ export type SignVerifyAlgorithm = 'RSASSA-PKCS1-v1_5' | 'RSA-PSS' | 'ECDSA' | 'HMAC' | 'Ed25519' | 'Ed448';
20
+ export type DeriveBitsAlgorithm = 'PBKDF2' | 'HKDF' | 'ECDH' | 'X25519' | 'X448';
21
+ export type EncryptDecryptAlgorithm = 'RSA-OAEP' | 'AES-CTR' | 'AES-CBC' | 'AES-GCM';
22
+ export type AnyAlgorithm = DigestAlgorithm | HashAlgorithm | KeyPairAlgorithm | SecretKeyAlgorithm | SignVerifyAlgorithm | DeriveBitsAlgorithm | EncryptDecryptAlgorithm | AESAlgorithm | 'PBKDF2' | 'HKDF' | 'unknown';
23
+ export type NamedCurve = 'P-256' | 'P-384' | 'P-521';
24
+ export type SubtleAlgorithm = {
25
+ name: AnyAlgorithm;
26
+ salt?: string;
27
+ iterations?: number;
28
+ hash?: HashAlgorithm;
29
+ namedCurve?: NamedCurve;
30
+ length?: number;
31
+ modulusLength?: number;
32
+ publicExponent?: number | Uint8Array;
33
+ };
34
+ export type KeyUsage = 'encrypt' | 'decrypt' | 'sign' | 'verify' | 'deriveKey' | 'deriveBits' | 'wrapKey' | 'unwrapKey';
35
+ export declare enum KFormatType {
36
+ kKeyFormatDER = 0,
37
+ kKeyFormatPEM = 1,
38
+ kKeyFormatJWK = 2
39
+ }
40
+ export declare enum KeyType {
41
+ Secret = 0,
42
+ Public = 1,
43
+ Private = 2
44
+ }
45
+ export declare enum KeyEncoding {
46
+ kKeyEncodingPKCS1 = 0,
47
+ kKeyEncodingPKCS8 = 1,
48
+ kKeyEncodingSPKI = 2,
49
+ kKeyEncodingSEC1 = 3
50
+ }
51
+ export type AsymmetricKeyType = 'rsa' | 'rsa-pss' | 'dsa' | 'ec';
52
+ type JWKkty = 'AES' | 'RSA' | 'EC' | 'oct';
53
+ type JWKuse = 'sig' | 'enc';
54
+ export interface JWK {
55
+ kty?: JWKkty;
56
+ use?: JWKuse;
57
+ key_ops?: KeyUsage[];
58
+ alg?: string;
59
+ crv?: string;
60
+ kid?: string;
61
+ x5u?: string;
62
+ x5c?: string[];
63
+ x5t?: string;
64
+ 'x5t#256'?: string;
65
+ n?: string;
66
+ e?: string;
67
+ d?: string;
68
+ p?: string;
69
+ q?: string;
70
+ x?: string;
71
+ y?: string;
72
+ k?: string;
73
+ dp?: string;
74
+ dq?: string;
75
+ qi?: string;
76
+ ext?: boolean;
77
+ }
78
+ export type KTypePrivate = 'pkcs1' | 'pkcs8' | 'sec1';
79
+ export type KTypePublic = 'pkcs1' | 'spki';
80
+ export type KType = KTypePrivate | KTypePublic;
81
+ export type KFormat = 'der' | 'pem' | 'jwk';
82
+ export type DSAEncoding = 'der' | 'ieee-p1363';
83
+ export type EncodingOptions = {
84
+ key?: any;
85
+ type?: KType;
86
+ encoding?: string;
87
+ dsaEncoding?: DSAEncoding;
88
+ format?: KFormat;
89
+ padding?: number;
90
+ cipher?: string;
91
+ passphrase?: BinaryLike;
92
+ saltLength?: number;
93
+ oaepHash?: string;
94
+ oaepLabel?: BinaryLike;
95
+ };
96
+ export interface KeyDetail {
97
+ length?: number;
98
+ publicExponent?: number;
99
+ modulusLength?: number;
100
+ hashAlgorithm?: string;
101
+ mgf1HashAlgorithm?: string;
102
+ saltLength?: number;
103
+ namedCurve?: string;
104
+ }
105
+ export {};
5
106
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":";AAAA,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,MAAM,CAAC;AAE/E,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,WAAW,GACX,SAAS,GACT,UAAU,GACV,UAAU,GACV,YAAY,GACZ,YAAY,CAAC;AAEf,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/types.ts"],"names":[],"mappings":";AAAA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,KAAK,MAAM,IAAI,OAAO,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,QAAQ,CAAC;AAExC,MAAM,MAAM,eAAe,GAAG,UAAU,GAAG,QAAQ,GAAG,eAAe,GAAG,MAAM,CAAC;AAE/E,MAAM,MAAM,UAAU,GAClB,UAAU,GACV,iBAAiB,GACjB,WAAW,GACX,WAAW,GACX,SAAS,GACT,UAAU,GACV,UAAU,GACV,YAAY,GACZ,YAAY,CAAC;AAEjB,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,CAAC,KAAK,IAAI,CAAC;AAEtE,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,eAAe,CAAC;AAE1E,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,WAAW,GACX,MAAM,GACN,OAAO,GACP,UAAU,GACV,QAAQ,CAAC;AAEb,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,UAAU,CAAC;AAEpD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,CAAC;AAE1E,MAAM,MAAM,aAAa,GAAG,eAAe,GAAG,SAAS,GAAG,YAAY,CAAC;AAEvE,MAAM,MAAM,mBAAmB,GAAG,mBAAmB,GAAG,SAAS,GAAG,UAAU,CAAC;AAE/E,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,MAAM,CAAC;AAElD,MAAM,MAAM,oBAAoB,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3E,MAAM,MAAM,gBAAgB,GACxB,mBAAmB,GACnB,kBAAkB,GAClB,oBAAoB,CAAC;AAEzB,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAExE,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,YAAY,CAAC;AAEvD,MAAM,MAAM,mBAAmB,GAC3B,mBAAmB,GACnB,SAAS,GACT,OAAO,GACP,MAAM,GACN,SAAS,GACT,OAAO,CAAC;AAEZ,MAAM,MAAM,mBAAmB,GAC3B,QAAQ,GACR,MAAM,GACN,MAAM,GACN,QAAQ,GACR,MAAM,CAAC;AAEX,MAAM,MAAM,uBAAuB,GAC/B,UAAU,GACV,SAAS,GACT,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,YAAY,GACpB,eAAe,GACf,aAAa,GACb,gBAAgB,GAChB,kBAAkB,GAClB,mBAAmB,GACnB,mBAAmB,GACnB,uBAAuB,GACvB,YAAY,GACZ,QAAQ,GACR,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,MAAM,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AAErD,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,YAAY,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,GAAG,UAAU,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,QAAQ,GAChB,SAAS,GACT,SAAS,GACT,MAAM,GACN,QAAQ,GACR,WAAW,GACX,YAAY,GACZ,SAAS,GACT,WAAW,CAAC;AAIhB,oBAAY,WAAW;IACrB,aAAa,IAAA;IACb,aAAa,IAAA;IACb,aAAa,IAAA;CACd;AAGD,oBAAY,OAAO;IACjB,MAAM,IAAA;IACN,MAAM,IAAA;IACN,OAAO,IAAA;CACR;AAED,oBAAY,WAAW;IACrB,iBAAiB,IAAA;IACjB,iBAAiB,IAAA;IACjB,gBAAgB,IAAA;IAChB,gBAAgB,IAAA;CACjB;AAED,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,SAAS,GAAG,KAAK,GAAG,IAAI,CAAC;AAEjE,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,CAAC;AAC3C,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5B,MAAM,WAAW,GAAG;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,QAAQ,EAAE,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,CAAC,CAAC,EAAE,MAAM,CAAC;IACX,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAC3C,MAAM,MAAM,KAAK,GAAG,YAAY,GAAG,WAAW,CAAC;AAE/C,MAAM,MAAM,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;AAE5C,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,YAAY,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAE5B,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,IAAI,CAAC,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB"}
@@ -1,8 +1,7 @@
1
1
  #
2
2
  # QuickCrypto+autolinking.cmake
3
- # Tue Aug 13 2024
4
3
  # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
5
- # https://github.com/mrousavy/react-native-nitro
4
+ # https://github.com/mrousavy/nitro
6
5
  # Copyright © 2024 Marc Rousavy @ Margelo
7
6
  #
8
7
 
@@ -18,13 +17,18 @@
18
17
  include_directories(
19
18
  "../nitrogen/generated/shared/c++"
20
19
  "../nitrogen/generated/android/c++"
20
+ "../nitrogen/generated/android/"
21
21
  )
22
22
 
23
23
  # Add all .cpp sources that were generated by Nitrogen
24
24
  target_sources(
25
25
  # CMake project name (Android C++ library name)
26
26
  QuickCrypto PRIVATE
27
+ # Autolinking Setup
28
+ ../nitrogen/generated/android/QuickCryptoOnLoad.cpp
27
29
  # Shared Nitrogen C++ sources
30
+ ../nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp
31
+ ../nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp
28
32
  ../nitrogen/generated/shared/c++/HybridRandomSpec.cpp
29
33
  # Android-specific Nitrogen C++ sources
30
34
 
@@ -40,6 +44,18 @@ target_link_libraries(
40
44
  QuickCrypto
41
45
  fbjni::fbjni # <-- Facebook C++ JNI helpers
42
46
  ReactAndroid::jsi # <-- RN: JSI
43
- ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
44
47
  react-native-nitro-modules::NitroModules # <-- NitroModules Core :)
45
48
  )
49
+
50
+ # Link react-native (different prefab between RN 0.75 and RN 0.76)
51
+ if(ReactAndroid_VERSION_MINOR GREATER_EQUAL 76)
52
+ target_link_libraries(
53
+ QuickCrypto
54
+ ReactAndroid::reactnative # <-- RN: Native Modules umbrella prefab
55
+ )
56
+ else()
57
+ target_link_libraries(
58
+ QuickCrypto
59
+ ReactAndroid::react_nativemodule_core # <-- RN: TurboModules Core
60
+ )
61
+ endif()
@@ -1,8 +1,7 @@
1
1
  ///
2
2
  /// QuickCrypto+autolinking.gradle
3
- /// Tue Aug 13 2024
4
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
5
- /// https://github.com/mrousavy/react-native-nitro
4
+ /// https://github.com/mrousavy/nitro
6
5
  /// Copyright © 2024 Marc Rousavy @ Margelo
7
6
  ///
8
7
 
@@ -0,0 +1,50 @@
1
+ ///
2
+ /// QuickCryptoOnLoad.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2024 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "QuickCryptoOnLoad.hpp"
9
+
10
+ #include <jni.h>
11
+ #include <fbjni/fbjni.h>
12
+ #include <NitroModules/HybridObjectRegistry.hpp>
13
+
14
+ #include "HybridPbkdf2.hpp"
15
+ #include "HybridRandom.hpp"
16
+
17
+ namespace margelo::nitro::crypto {
18
+
19
+ int initialize(JavaVM* vm) {
20
+ using namespace margelo::nitro;
21
+ using namespace margelo::nitro::crypto;
22
+ using namespace facebook;
23
+
24
+ return facebook::jni::initialize(vm, [] {
25
+ // Register native JNI methods
26
+
27
+
28
+ // Register Nitro Hybrid Objects
29
+ HybridObjectRegistry::registerHybridObjectConstructor(
30
+ "Pbkdf2",
31
+ []() -> std::shared_ptr<HybridObject> {
32
+ static_assert(std::is_default_constructible_v<HybridPbkdf2>,
33
+ "The HybridObject \"HybridPbkdf2\" is not default-constructible! "
34
+ "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
35
+ return std::make_shared<HybridPbkdf2>();
36
+ }
37
+ );
38
+ HybridObjectRegistry::registerHybridObjectConstructor(
39
+ "Random",
40
+ []() -> std::shared_ptr<HybridObject> {
41
+ static_assert(std::is_default_constructible_v<HybridRandom>,
42
+ "The HybridObject \"HybridRandom\" is not default-constructible! "
43
+ "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
44
+ return std::make_shared<HybridRandom>();
45
+ }
46
+ );
47
+ });
48
+ }
49
+
50
+ } // namespace margelo::nitro::crypto
@@ -0,0 +1,25 @@
1
+ ///
2
+ /// QuickCryptoOnLoad.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2024 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include <jni.h>
9
+ #include <NitroModules/NitroDefines.hpp>
10
+
11
+ namespace margelo::nitro::crypto {
12
+
13
+ /**
14
+ * Initializes the native (C++) part of QuickCrypto, and autolinks all Hybrid Objects.
15
+ * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`).
16
+ * Example:
17
+ * ```cpp (cpp-adapter.cpp)
18
+ * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
19
+ * return margelo::nitro::crypto::initialize(vm);
20
+ * }
21
+ * ```
22
+ */
23
+ int initialize(JavaVM* vm);
24
+
25
+ } // namespace margelo::nitro::crypto
@@ -1,8 +1,7 @@
1
1
  #
2
2
  # QuickCrypto+autolinking.rb
3
- # Tue Aug 13 2024
4
3
  # This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
5
- # https://github.com/mrousavy/react-native-nitro
4
+ # https://github.com/mrousavy/nitro
6
5
  # Copyright © 2024 Marc Rousavy @ Margelo
7
6
  #
8
7
 
@@ -25,15 +24,15 @@ def add_nitrogen_files(spec)
25
24
 
26
25
  spec.dependency "NitroModules"
27
26
 
28
- current_source_files = spec.attributes_hash['source_files'] || []
27
+ current_source_files = Array(spec.attributes_hash['source_files'])
29
28
  spec.source_files = current_source_files + [
30
29
  # Generated cross-platform specs
31
30
  "nitrogen/generated/shared/**/*.{h,hpp,c,cpp,swift}",
32
31
  # Generated bridges for the cross-platform specs
33
- "nitrogen/generated/ios/**/*.{h,hpp,c,cpp,swift}",
32
+ "nitrogen/generated/ios/**/*.{h,hpp,c,cpp,mm,swift}",
34
33
  ]
35
34
 
36
- current_public_header_files = spec.attributes_hash['public_header_files'] || []
35
+ current_public_header_files = Array(spec.attributes_hash['public_header_files'])
37
36
  spec.public_header_files = current_public_header_files + [
38
37
  # Generated specs
39
38
  "nitrogen/generated/shared/**/*.{h,hpp}",
@@ -41,7 +40,7 @@ def add_nitrogen_files(spec)
41
40
  "nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp"
42
41
  ]
43
42
 
44
- current_private_header_files = spec.attributes_hash['private_header_files'] || []
43
+ current_private_header_files = Array(spec.attributes_hash['private_header_files'])
45
44
  spec.private_header_files = current_private_header_files + [
46
45
  # iOS specific specs
47
46
  "nitrogen/generated/ios/c++/**/*.{h,hpp}",
@@ -53,5 +52,7 @@ def add_nitrogen_files(spec)
53
52
  "CLANG_CXX_LANGUAGE_STANDARD" => "c++20",
54
53
  # Enables C++ <-> Swift interop (by default it's only C)
55
54
  "SWIFT_OBJC_INTEROP_MODE" => "objcxx",
55
+ # Enables stricter modular headers
56
+ "DEFINES_MODULE" => "YES",
56
57
  })
57
58
  end
@@ -1,9 +1,17 @@
1
1
  ///
2
2
  /// QuickCrypto-Swift-Cxx-Bridge.cpp
3
- /// Tue Aug 13 2024
4
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
5
- /// https://github.com/mrousavy/react-native-nitro
4
+ /// https://github.com/mrousavy/nitro
6
5
  /// Copyright © 2024 Marc Rousavy @ Margelo
7
6
  ///
8
7
 
9
8
  #include "QuickCrypto-Swift-Cxx-Bridge.hpp"
9
+
10
+ // Include C++ implementation defined types
11
+
12
+
13
+ namespace margelo::nitro::crypto::bridge::swift {
14
+
15
+
16
+
17
+ } // namespace margelo::nitro::crypto::bridge::swift
@@ -1,8 +1,7 @@
1
1
  ///
2
2
  /// QuickCrypto-Swift-Cxx-Bridge.hpp
3
- /// Tue Aug 13 2024
4
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
5
- /// https://github.com/mrousavy/react-native-nitro
4
+ /// https://github.com/mrousavy/nitro
6
5
  /// Copyright © 2024 Marc Rousavy @ Margelo
7
6
  ///
8
7
 
@@ -11,6 +10,9 @@
11
10
  // Forward declarations of C++ defined types
12
11
 
13
12
 
13
+ // Forward declarations of Swift defined types
14
+
15
+
14
16
  // Include C++ defined types
15
17
 
16
18
 
@@ -1,29 +1,35 @@
1
1
  ///
2
2
  /// QuickCrypto-Swift-Cxx-Umbrella.hpp
3
- /// Tue Aug 13 2024
4
3
  /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
5
- /// https://github.com/mrousavy/react-native-nitro
4
+ /// https://github.com/mrousavy/nitro
6
5
  /// Copyright © 2024 Marc Rousavy @ Margelo
7
6
  ///
8
7
 
9
8
  #pragma once
10
9
 
11
10
  // Forward declarations of C++ defined types
12
- // Forward declaration of `ArrayBuffer` to properly resolve imports.
13
- namespace NitroModules { class ArrayBuffer; }
11
+
14
12
 
15
13
  // Include C++ defined types
16
- #include <NitroModules/ArrayBuffer.hpp>
14
+
17
15
 
18
16
  // C++ helpers for Swift
19
17
  #include "QuickCrypto-Swift-Cxx-Bridge.hpp"
20
18
 
19
+ // Common C++ types used in Swift
20
+ #include <NitroModules/ArrayBufferHolder.hpp>
21
+ #include <NitroModules/AnyMapHolder.hpp>
22
+ #include <NitroModules/HybridContext.hpp>
23
+ #include <NitroModules/PromiseHolder.hpp>
24
+
21
25
  // Forward declarations of Swift defined types
22
26
 
23
27
 
24
28
  // Include Swift defined types
25
29
  #if __has_include("QuickCrypto-Swift.h")
30
+ // This header is generated by Xcode/Swift on every app build.
31
+ // If it cannot be found, make sure the Swift module's name (= podspec name) is actually "QuickCrypto".
26
32
  #include "QuickCrypto-Swift.h"
27
33
  #else
28
- #error QuickCrypto's autogenerated Swift header cannot be found! Make sure the Swift module's name is actually "QuickCrypto", and try building the app first.
34
+ #error QuickCrypto's autogenerated Swift header cannot be found! Make sure the Swift module's name (= podspec name) is actually "QuickCrypto", and try building the app first.
29
35
  #endif
@@ -0,0 +1,45 @@
1
+ ///
2
+ /// QuickCryptoAutolinking.mm
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2024 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #import <Foundation/Foundation.h>
9
+ #import <NitroModules/HybridObjectRegistry.hpp>
10
+
11
+ #import <type_traits>
12
+
13
+ #include "HybridPbkdf2.hpp"
14
+ #include "HybridRandom.hpp"
15
+
16
+ @interface QuickCryptoAutolinking : NSObject
17
+ @end
18
+
19
+ @implementation QuickCryptoAutolinking
20
+
21
+ + (void) load {
22
+ using namespace margelo::nitro;
23
+ using namespace margelo::nitro::crypto;
24
+
25
+ HybridObjectRegistry::registerHybridObjectConstructor(
26
+ "Pbkdf2",
27
+ []() -> std::shared_ptr<HybridObject> {
28
+ static_assert(std::is_default_constructible_v<HybridPbkdf2>,
29
+ "The HybridObject \"HybridPbkdf2\" is not default-constructible! "
30
+ "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
31
+ return std::make_shared<HybridPbkdf2>();
32
+ }
33
+ );
34
+ HybridObjectRegistry::registerHybridObjectConstructor(
35
+ "Random",
36
+ []() -> std::shared_ptr<HybridObject> {
37
+ static_assert(std::is_default_constructible_v<HybridRandom>,
38
+ "The HybridObject \"HybridRandom\" is not default-constructible! "
39
+ "Create a public constructor that takes zero arguments to be able to autolink this HybridObject.");
40
+ return std::make_shared<HybridRandom>();
41
+ }
42
+ );
43
+ }
44
+
45
+ @end
@@ -0,0 +1,12 @@
1
+ ///
2
+ /// QuickCryptoAutolinking.swift
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2024 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ public final class QuickCryptoAutolinking {
9
+ public typealias bridge = margelo.nitro.crypto.bridge.swift
10
+
11
+
12
+ }
@@ -0,0 +1,86 @@
1
+ ///
2
+ /// AsymmetricKeyType.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2024 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #if __has_include(<NitroModules/NitroHash.hpp>)
11
+ #include <NitroModules/NitroHash.hpp>
12
+ #else
13
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
14
+ #endif
15
+ #if __has_include(<NitroModules/JSIConverter.hpp>)
16
+ #include <NitroModules/JSIConverter.hpp>
17
+ #else
18
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
19
+ #endif
20
+ #if __has_include(<NitroModules/NitroDefines.hpp>)
21
+ #include <NitroModules/NitroDefines.hpp>
22
+ #else
23
+ #error NitroModules cannot be found! Are you sure you installed NitroModules properly?
24
+ #endif
25
+
26
+ namespace margelo::nitro::crypto {
27
+
28
+ /**
29
+ * An enum which can be represented as a JavaScript union (AsymmetricKeyType).
30
+ */
31
+ enum class AsymmetricKeyType {
32
+ RSA SWIFT_NAME(rsa) = 0,
33
+ RSA_PSS SWIFT_NAME(rsaPss) = 1,
34
+ DSA SWIFT_NAME(dsa) = 2,
35
+ EC SWIFT_NAME(ec) = 3,
36
+ } CLOSED_ENUM;
37
+
38
+ } // namespace margelo::nitro::crypto
39
+
40
+ namespace margelo::nitro {
41
+
42
+ using namespace margelo::nitro::crypto;
43
+
44
+ // C++ AsymmetricKeyType <> JS AsymmetricKeyType (union)
45
+ template <>
46
+ struct JSIConverter<AsymmetricKeyType> {
47
+ static inline AsymmetricKeyType fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) {
48
+ std::string unionValue = JSIConverter<std::string>::fromJSI(runtime, arg);
49
+ switch (hashString(unionValue.c_str(), unionValue.size())) {
50
+ case hashString("rsa"): return AsymmetricKeyType::RSA;
51
+ case hashString("rsa-pss"): return AsymmetricKeyType::RSA_PSS;
52
+ case hashString("dsa"): return AsymmetricKeyType::DSA;
53
+ case hashString("ec"): return AsymmetricKeyType::EC;
54
+ default: [[unlikely]]
55
+ throw std::invalid_argument("Cannot convert \"" + unionValue + "\" to enum AsymmetricKeyType - invalid value!");
56
+ }
57
+ }
58
+ static inline jsi::Value toJSI(jsi::Runtime& runtime, AsymmetricKeyType arg) {
59
+ switch (arg) {
60
+ case AsymmetricKeyType::RSA: return JSIConverter<std::string>::toJSI(runtime, "rsa");
61
+ case AsymmetricKeyType::RSA_PSS: return JSIConverter<std::string>::toJSI(runtime, "rsa-pss");
62
+ case AsymmetricKeyType::DSA: return JSIConverter<std::string>::toJSI(runtime, "dsa");
63
+ case AsymmetricKeyType::EC: return JSIConverter<std::string>::toJSI(runtime, "ec");
64
+ default: [[unlikely]]
65
+ throw std::invalid_argument("Cannot convert AsymmetricKeyType to JS - invalid value: "
66
+ + std::to_string(static_cast<int>(arg)) + "!");
67
+ }
68
+ }
69
+ static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) {
70
+ if (!value.isString()) {
71
+ return false;
72
+ }
73
+ std::string unionValue = JSIConverter<std::string>::fromJSI(runtime, value);
74
+ switch (hashString(unionValue.c_str(), unionValue.size())) {
75
+ case hashString("rsa"):
76
+ case hashString("rsa-pss"):
77
+ case hashString("dsa"):
78
+ case hashString("ec"):
79
+ return true;
80
+ default:
81
+ return false;
82
+ }
83
+ }
84
+ };
85
+
86
+ } // namespace margelo::nitro
@@ -0,0 +1,27 @@
1
+ ///
2
+ /// HybridKeyObjectHandleSpec.cpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2024 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #include "HybridKeyObjectHandleSpec.hpp"
9
+
10
+ namespace margelo::nitro::crypto {
11
+
12
+ void HybridKeyObjectHandleSpec::loadHybridMethods() {
13
+ // load base methods/properties
14
+ HybridObject::loadHybridMethods();
15
+ // load custom methods/properties
16
+ registerHybrids(this, [](Prototype& prototype) {
17
+ prototype.registerHybridMethod("exportKey", &HybridKeyObjectHandleSpec::exportKey);
18
+ prototype.registerHybridMethod("exportJwk", &HybridKeyObjectHandleSpec::exportJwk);
19
+ prototype.registerHybridMethod("getAsymmetricKeyType", &HybridKeyObjectHandleSpec::getAsymmetricKeyType);
20
+ prototype.registerHybridMethod("init", &HybridKeyObjectHandleSpec::init);
21
+ prototype.registerHybridMethod("initECRaw", &HybridKeyObjectHandleSpec::initECRaw);
22
+ prototype.registerHybridMethod("initJwk", &HybridKeyObjectHandleSpec::initJwk);
23
+ prototype.registerHybridMethod("keyDetail", &HybridKeyObjectHandleSpec::keyDetail);
24
+ });
25
+ }
26
+
27
+ } // namespace margelo::nitro::crypto