react-native-quick-crypto 0.6.1 → 0.7.0-rc.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 (196) hide show
  1. package/README.md +70 -18
  2. package/android/CMakeLists.txt +58 -61
  3. package/android/build.gradle +105 -53
  4. package/android/gradle/wrapper/gradle-wrapper.properties +1 -1
  5. package/android/gradle.properties +5 -5
  6. package/android/src/main/{AndroidManifest.xml → AndroidManifestNew.xml} +1 -2
  7. package/cpp/Cipher/MGLCipherHostObject.cpp +31 -5
  8. package/cpp/Cipher/MGLGenerateKeyPairInstaller.cpp +21 -31
  9. package/cpp/Cipher/MGLGenerateKeyPairSyncInstaller.cpp +4 -17
  10. package/cpp/Cipher/MGLPublicCipher.h +1 -1
  11. package/cpp/Cipher/MGLPublicCipherInstaller.h +6 -6
  12. package/cpp/Cipher/MGLRsa.cpp +224 -11
  13. package/cpp/Cipher/MGLRsa.h +13 -3
  14. package/cpp/Hash/MGLHashHostObject.cpp +1 -1
  15. package/cpp/Hash/MGLHashInstaller.cpp +2 -4
  16. package/cpp/JSIUtils/MGLJSIMacros.h +10 -0
  17. package/cpp/JSIUtils/MGLThreadAwareHostObject.h +1 -1
  18. package/cpp/MGLKeys.cpp +415 -471
  19. package/cpp/MGLKeys.h +70 -2
  20. package/cpp/MGLQuickCryptoHostObject.cpp +9 -0
  21. package/cpp/Random/MGLRandomHostObject.cpp +9 -2
  22. package/cpp/Sig/MGLSignHostObjects.cpp +1 -1
  23. package/cpp/Utils/MGLUtils.cpp +104 -32
  24. package/cpp/Utils/MGLUtils.h +172 -143
  25. package/cpp/Utils/node.h +13 -0
  26. package/cpp/webcrypto/MGLWebCrypto.cpp +63 -0
  27. package/cpp/webcrypto/MGLWebCrypto.h +34 -0
  28. package/cpp/webcrypto/crypto_ec.cpp +334 -0
  29. package/cpp/webcrypto/crypto_ec.h +65 -0
  30. package/ios/QuickCrypto.xcodeproj/project.pbxproj +4 -4
  31. package/lib/commonjs/@types/crypto-browserify.d.js.map +1 -1
  32. package/lib/commonjs/Cipher.js +53 -194
  33. package/lib/commonjs/Cipher.js.map +1 -1
  34. package/lib/commonjs/Hash.js +29 -29
  35. package/lib/commonjs/Hash.js.map +1 -1
  36. package/lib/commonjs/Hashnames.js +75 -0
  37. package/lib/commonjs/Hashnames.js.map +1 -0
  38. package/lib/commonjs/Hmac.js +6 -29
  39. package/lib/commonjs/Hmac.js.map +1 -1
  40. package/lib/commonjs/NativeQuickCrypto/Cipher.js +3 -5
  41. package/lib/commonjs/NativeQuickCrypto/Cipher.js.map +1 -1
  42. package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js +11 -20
  43. package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js.map +1 -1
  44. package/lib/commonjs/NativeQuickCrypto/hash.js.map +1 -1
  45. package/lib/commonjs/NativeQuickCrypto/hmac.js.map +1 -1
  46. package/lib/commonjs/NativeQuickCrypto/pbkdf2.js.map +1 -1
  47. package/lib/commonjs/NativeQuickCrypto/random.js.map +1 -1
  48. package/lib/commonjs/NativeQuickCrypto/sig.js.map +1 -1
  49. package/lib/commonjs/NativeQuickCrypto/webcrypto.js +6 -0
  50. package/lib/commonjs/NativeQuickCrypto/webcrypto.js.map +1 -0
  51. package/lib/commonjs/QuickCrypto.js +5 -14
  52. package/lib/commonjs/QuickCrypto.js.map +1 -1
  53. package/lib/commonjs/Utils.js +360 -48
  54. package/lib/commonjs/Utils.js.map +1 -1
  55. package/lib/commonjs/aes.js +324 -0
  56. package/lib/commonjs/aes.js.map +1 -0
  57. package/lib/commonjs/constants.js +1 -2
  58. package/lib/commonjs/constants.js.map +1 -1
  59. package/lib/commonjs/ec.js +288 -0
  60. package/lib/commonjs/ec.js.map +1 -0
  61. package/lib/commonjs/index.js +6 -10
  62. package/lib/commonjs/index.js.map +1 -1
  63. package/lib/commonjs/keys.js +280 -48
  64. package/lib/commonjs/keys.js.map +1 -1
  65. package/lib/commonjs/pbkdf2.js +44 -18
  66. package/lib/commonjs/pbkdf2.js.map +1 -1
  67. package/lib/commonjs/random.js +49 -68
  68. package/lib/commonjs/random.js.map +1 -1
  69. package/lib/commonjs/rsa.js +329 -0
  70. package/lib/commonjs/rsa.js.map +1 -0
  71. package/lib/commonjs/sig.js +13 -54
  72. package/lib/commonjs/sig.js.map +1 -1
  73. package/lib/commonjs/subtle.js +271 -0
  74. package/lib/commonjs/subtle.js.map +1 -0
  75. package/lib/module/@types/crypto-browserify.d.js.map +1 -1
  76. package/lib/module/Cipher.js +53 -188
  77. package/lib/module/Cipher.js.map +1 -1
  78. package/lib/module/Hash.js +27 -21
  79. package/lib/module/Hash.js.map +1 -1
  80. package/lib/module/Hashnames.js +71 -0
  81. package/lib/module/Hashnames.js.map +1 -0
  82. package/lib/module/Hmac.js +4 -21
  83. package/lib/module/Hmac.js.map +1 -1
  84. package/lib/module/NativeQuickCrypto/Cipher.js +3 -4
  85. package/lib/module/NativeQuickCrypto/Cipher.js.map +1 -1
  86. package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js +11 -17
  87. package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js.map +1 -1
  88. package/lib/module/NativeQuickCrypto/hash.js.map +1 -1
  89. package/lib/module/NativeQuickCrypto/hmac.js.map +1 -1
  90. package/lib/module/NativeQuickCrypto/pbkdf2.js.map +1 -1
  91. package/lib/module/NativeQuickCrypto/random.js.map +1 -1
  92. package/lib/module/NativeQuickCrypto/sig.js.map +1 -1
  93. package/lib/module/NativeQuickCrypto/webcrypto.js +2 -0
  94. package/lib/module/NativeQuickCrypto/webcrypto.js.map +1 -0
  95. package/lib/module/QuickCrypto.js +2 -0
  96. package/lib/module/QuickCrypto.js.map +1 -1
  97. package/lib/module/Utils.js +319 -33
  98. package/lib/module/Utils.js.map +1 -1
  99. package/lib/module/aes.js +317 -0
  100. package/lib/module/aes.js.map +1 -0
  101. package/lib/module/constants.js.map +1 -1
  102. package/lib/module/ec.js +282 -0
  103. package/lib/module/ec.js.map +1 -0
  104. package/lib/module/index.js +7 -4
  105. package/lib/module/index.js.map +1 -1
  106. package/lib/module/keys.js +279 -43
  107. package/lib/module/keys.js.map +1 -1
  108. package/lib/module/pbkdf2.js +44 -13
  109. package/lib/module/pbkdf2.js.map +1 -1
  110. package/lib/module/random.js +46 -54
  111. package/lib/module/random.js.map +1 -1
  112. package/lib/module/rsa.js +323 -0
  113. package/lib/module/rsa.js.map +1 -0
  114. package/lib/module/sig.js +13 -46
  115. package/lib/module/sig.js.map +1 -1
  116. package/lib/module/subtle.js +265 -0
  117. package/lib/module/subtle.js.map +1 -0
  118. package/lib/typescript/src/Cipher.d.ts +72 -0
  119. package/lib/typescript/src/Cipher.d.ts.map +1 -0
  120. package/lib/typescript/{Hash.d.ts → src/Hash.d.ts} +8 -7
  121. package/lib/typescript/src/Hash.d.ts.map +1 -0
  122. package/lib/typescript/src/Hashnames.d.ts +11 -0
  123. package/lib/typescript/src/Hashnames.d.ts.map +1 -0
  124. package/lib/typescript/{Hmac.d.ts → src/Hmac.d.ts} +3 -3
  125. package/lib/typescript/src/Hmac.d.ts.map +1 -0
  126. package/lib/typescript/src/NativeQuickCrypto/Cipher.d.ts +34 -0
  127. package/lib/typescript/src/NativeQuickCrypto/Cipher.d.ts.map +1 -0
  128. package/lib/typescript/{NativeQuickCrypto → src/NativeQuickCrypto}/NativeQuickCrypto.d.ts +3 -0
  129. package/lib/typescript/src/NativeQuickCrypto/NativeQuickCrypto.d.ts.map +1 -0
  130. package/lib/typescript/src/NativeQuickCrypto/hash.d.ts +7 -0
  131. package/lib/typescript/src/NativeQuickCrypto/hash.d.ts.map +1 -0
  132. package/lib/typescript/src/NativeQuickCrypto/hmac.d.ts +6 -0
  133. package/lib/typescript/src/NativeQuickCrypto/hmac.d.ts.map +1 -0
  134. package/lib/typescript/{NativeQuickCrypto → src/NativeQuickCrypto}/pbkdf2.d.ts +2 -1
  135. package/lib/typescript/src/NativeQuickCrypto/pbkdf2.d.ts.map +1 -0
  136. package/lib/typescript/{NativeQuickCrypto → src/NativeQuickCrypto}/random.d.ts +2 -1
  137. package/lib/typescript/src/NativeQuickCrypto/random.d.ts.map +1 -0
  138. package/lib/typescript/{NativeQuickCrypto → src/NativeQuickCrypto}/sig.d.ts +5 -4
  139. package/lib/typescript/src/NativeQuickCrypto/sig.d.ts.map +1 -0
  140. package/lib/typescript/src/NativeQuickCrypto/webcrypto.d.ts +27 -0
  141. package/lib/typescript/src/NativeQuickCrypto/webcrypto.d.ts.map +1 -0
  142. package/lib/typescript/{QuickCrypto.d.ts → src/QuickCrypto.d.ts} +16 -8
  143. package/lib/typescript/src/QuickCrypto.d.ts.map +1 -0
  144. package/lib/typescript/src/Utils.d.ts +44 -0
  145. package/lib/typescript/src/Utils.d.ts.map +1 -0
  146. package/lib/typescript/src/aes.d.ts +5 -0
  147. package/lib/typescript/src/aes.d.ts.map +1 -0
  148. package/lib/typescript/{constants.d.ts → src/constants.d.ts} +1 -0
  149. package/lib/typescript/src/constants.d.ts.map +1 -0
  150. package/lib/typescript/src/ec.d.ts +5 -0
  151. package/lib/typescript/src/ec.d.ts.map +1 -0
  152. package/lib/typescript/{index.d.ts → src/index.d.ts} +33 -27
  153. package/lib/typescript/src/index.d.ts.map +1 -0
  154. package/lib/typescript/src/keys.d.ts +154 -0
  155. package/lib/typescript/src/keys.d.ts.map +1 -0
  156. package/lib/typescript/src/pbkdf2.d.ts +12 -0
  157. package/lib/typescript/src/pbkdf2.d.ts.map +1 -0
  158. package/lib/typescript/{random.d.ts → src/random.d.ts} +7 -6
  159. package/lib/typescript/src/random.d.ts.map +1 -0
  160. package/lib/typescript/src/rsa.d.ts +4 -0
  161. package/lib/typescript/src/rsa.d.ts.map +1 -0
  162. package/lib/typescript/{sig.d.ts → src/sig.d.ts} +3 -3
  163. package/lib/typescript/src/sig.d.ts.map +1 -0
  164. package/lib/typescript/src/subtle.d.ts +11 -0
  165. package/lib/typescript/src/subtle.d.ts.map +1 -0
  166. package/package.json +35 -30
  167. package/react-native-quick-crypto.podspec +4 -3
  168. package/src/Cipher.ts +103 -100
  169. package/src/Hash.ts +42 -6
  170. package/src/Hashnames.ts +91 -0
  171. package/src/Hmac.ts +3 -3
  172. package/src/NativeQuickCrypto/Cipher.ts +1 -0
  173. package/src/NativeQuickCrypto/NativeQuickCrypto.ts +2 -0
  174. package/src/NativeQuickCrypto/webcrypto.ts +46 -0
  175. package/src/QuickCrypto.ts +2 -0
  176. package/src/Utils.ts +409 -5
  177. package/src/aes.ts +365 -0
  178. package/src/ec.ts +351 -0
  179. package/src/keys.ts +428 -54
  180. package/src/pbkdf2.ts +84 -11
  181. package/src/random.ts +37 -24
  182. package/src/rsa.ts +396 -0
  183. package/src/sig.ts +3 -2
  184. package/src/subtle.ts +358 -0
  185. package/lib/commonjs/@types/stream-browserify.d.js +0 -2
  186. package/lib/commonjs/@types/stream-browserify.d.js.map +0 -1
  187. package/lib/module/@types/stream-browserify.d.js +0 -2
  188. package/lib/module/@types/stream-browserify.d.js.map +0 -1
  189. package/lib/typescript/Cipher.d.ts +0 -87
  190. package/lib/typescript/NativeQuickCrypto/Cipher.d.ts +0 -32
  191. package/lib/typescript/NativeQuickCrypto/hash.d.ts +0 -6
  192. package/lib/typescript/NativeQuickCrypto/hmac.d.ts +0 -5
  193. package/lib/typescript/Utils.d.ts +0 -23
  194. package/lib/typescript/keys.d.ts +0 -60
  195. package/lib/typescript/pbkdf2.d.ts +0 -9
  196. package/src/@types/stream-browserify.d.ts +0 -4
@@ -0,0 +1,317 @@
1
+ import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
2
+ import { lazyDOMException, hasAnyNotIn, validateKeyOps } from './Utils';
3
+ import { CryptoKey, createSecretKey, SecretKeyObject } from './keys';
4
+
5
+ // const {
6
+ // ArrayBufferIsView,
7
+ // ArrayBufferPrototypeSlice,
8
+ // ArrayFrom,
9
+ // ArrayPrototypeIncludes,
10
+ // ArrayPrototypePush,
11
+ // MathFloor,
12
+ // SafeSet,
13
+ // TypedArrayPrototypeSlice,
14
+ // } = primordials;
15
+
16
+ // const {
17
+ // AESCipherJob,
18
+ // KeyObjectHandle,
19
+ // kCryptoJobAsync,
20
+ // kKeyVariantAES_CTR_128,
21
+ // kKeyVariantAES_CBC_128,
22
+ // kKeyVariantAES_GCM_128,
23
+ // kKeyVariantAES_KW_128,
24
+ // kKeyVariantAES_CTR_192,
25
+ // kKeyVariantAES_CBC_192,
26
+ // kKeyVariantAES_GCM_192,
27
+ // kKeyVariantAES_KW_192,
28
+ // kKeyVariantAES_CTR_256,
29
+ // kKeyVariantAES_CBC_256,
30
+ // kKeyVariantAES_GCM_256,
31
+ // kKeyVariantAES_KW_256,
32
+ // kWebCryptoCipherDecrypt,
33
+ // kWebCryptoCipherEncrypt,
34
+ // } = internalBinding('crypto');
35
+
36
+ // const {
37
+ // hasAnyNotIn,
38
+ // jobPromise,
39
+ // validateByteLength,
40
+ // validateKeyOps,
41
+ // validateMaxBufferLength,
42
+ // kAesKeyLengths,
43
+ // kHandle,
44
+ // kKeyObject,
45
+ // } = require('internal/crypto/util');
46
+
47
+ // const {
48
+ // lazyDOMException,
49
+ // promisify,
50
+ // } = require('internal/util');
51
+
52
+ // const { PromiseReject } = primordials;
53
+
54
+ // const {
55
+ // InternalCryptoKey,
56
+ // SecretKeyObject,
57
+ // createSecretKey,
58
+ // } = require('internal/crypto/keys');
59
+
60
+ // const {
61
+ // generateKey: _generateKey,
62
+ // } = require('internal/crypto/keygen');
63
+
64
+ // const kMaxCounterLength = 128;
65
+ // const kTagLengths = [32, 64, 96, 104, 112, 120, 128];
66
+ // const generateKey = promisify(_generateKey);
67
+
68
+ export const getAlgorithmName = (name, length) => {
69
+ if (length === undefined) throw lazyDOMException(`Invalid algorithm length: ${length}`, 'SyntaxError');
70
+ switch (name) {
71
+ case 'AES-CBC':
72
+ return `A${length}CBC`;
73
+ case 'AES-CTR':
74
+ return `A${length}CTR`;
75
+ case 'AES-GCM':
76
+ return `A${length}GCM`;
77
+ case 'AES-KW':
78
+ return `A${length}KW`;
79
+ default:
80
+ throw lazyDOMException(`invalid algorithm name: ${name}`, 'SyntaxError');
81
+ }
82
+ };
83
+ function validateKeyLength(length) {
84
+ if (length !== 128 && length !== 192 && length !== 256) throw lazyDOMException(`Invalid key length: ${length}`, 'DataError');
85
+ }
86
+
87
+ // function getVariant(name, length) {
88
+ // switch (name) {
89
+ // case 'AES-CBC':
90
+ // switch (length) {
91
+ // case 128: return kKeyVariantAES_CBC_128;
92
+ // case 192: return kKeyVariantAES_CBC_192;
93
+ // case 256: return kKeyVariantAES_CBC_256;
94
+ // }
95
+ // break;
96
+ // case 'AES-CTR':
97
+ // switch (length) {
98
+ // case 128: return kKeyVariantAES_CTR_128;
99
+ // case 192: return kKeyVariantAES_CTR_192;
100
+ // case 256: return kKeyVariantAES_CTR_256;
101
+ // }
102
+ // break;
103
+ // case 'AES-GCM':
104
+ // switch (length) {
105
+ // case 128: return kKeyVariantAES_GCM_128;
106
+ // case 192: return kKeyVariantAES_GCM_192;
107
+ // case 256: return kKeyVariantAES_GCM_256;
108
+ // }
109
+ // break;
110
+ // case 'AES-KW':
111
+ // switch (length) {
112
+ // case 128: return kKeyVariantAES_KW_128;
113
+ // case 192: return kKeyVariantAES_KW_192;
114
+ // case 256: return kKeyVariantAES_KW_256;
115
+ // }
116
+ // break;
117
+ // }
118
+ // }
119
+
120
+ // function asyncAesCtrCipher(mode, key, data, { counter, length }) {
121
+ // validateByteLength(counter, 'algorithm.counter', 16);
122
+ // // The length must specify an integer between 1 and 128. While
123
+ // // there is no default, this should typically be 64.
124
+ // if (length === 0 || length > kMaxCounterLength) {
125
+ // throw lazyDOMException(
126
+ // 'AES-CTR algorithm.length must be between 1 and 128',
127
+ // 'OperationError');
128
+ // }
129
+
130
+ // return jobPromise(() => new AESCipherJob(
131
+ // kCryptoJobAsync,
132
+ // mode,
133
+ // key[kKeyObject][kHandle],
134
+ // data,
135
+ // getVariant('AES-CTR', key.algorithm.length),
136
+ // counter,
137
+ // length));
138
+ // }
139
+
140
+ // function asyncAesCbcCipher(mode, key, data, { iv }) {
141
+ // validateByteLength(iv, 'algorithm.iv', 16);
142
+ // return jobPromise(() => new AESCipherJob(
143
+ // kCryptoJobAsync,
144
+ // mode,
145
+ // key[kKeyObject][kHandle],
146
+ // data,
147
+ // getVariant('AES-CBC', key.algorithm.length),
148
+ // iv));
149
+ // }
150
+
151
+ // function asyncAesKwCipher(mode, key, data) {
152
+ // return jobPromise(() => new AESCipherJob(
153
+ // kCryptoJobAsync,
154
+ // mode,
155
+ // key[kKeyObject][kHandle],
156
+ // data,
157
+ // getVariant('AES-KW', key.algorithm.length)));
158
+ // }
159
+
160
+ // function asyncAesGcmCipher(
161
+ // mode,
162
+ // key,
163
+ // data,
164
+ // { iv, additionalData, tagLength = 128 }) {
165
+ // if (!ArrayPrototypeIncludes(kTagLengths, tagLength)) {
166
+ // return PromiseReject(lazyDOMException(
167
+ // `${tagLength} is not a valid AES-GCM tag length`,
168
+ // 'OperationError'));
169
+ // }
170
+
171
+ // validateMaxBufferLength(iv, 'algorithm.iv');
172
+
173
+ // if (additionalData !== undefined) {
174
+ // validateMaxBufferLength(additionalData, 'algorithm.additionalData');
175
+ // }
176
+
177
+ // const tagByteLength = MathFloor(tagLength / 8);
178
+ // let tag;
179
+ // switch (mode) {
180
+ // case kWebCryptoCipherDecrypt: {
181
+ // const slice = ArrayBufferIsView(data) ?
182
+ // TypedArrayPrototypeSlice : ArrayBufferPrototypeSlice;
183
+ // tag = slice(data, -tagByteLength);
184
+
185
+ // // Refs: https://www.w3.org/TR/WebCryptoAPI/#aes-gcm-operations
186
+ // //
187
+ // // > If *plaintext* has a length less than *tagLength* bits, then `throw`
188
+ // // > an `OperationError`.
189
+ // if (tagByteLength > tag.byteLength) {
190
+ // return PromiseReject(lazyDOMException(
191
+ // 'The provided data is too small.',
192
+ // 'OperationError'));
193
+ // }
194
+
195
+ // data = slice(data, 0, -tagByteLength);
196
+ // break;
197
+ // }
198
+ // case kWebCryptoCipherEncrypt:
199
+ // tag = tagByteLength;
200
+ // break;
201
+ // }
202
+
203
+ // return jobPromise(() => new AESCipherJob(
204
+ // kCryptoJobAsync,
205
+ // mode,
206
+ // key[kKeyObject][kHandle],
207
+ // data,
208
+ // getVariant('AES-GCM', key.algorithm.length),
209
+ // iv,
210
+ // tag,
211
+ // additionalData));
212
+ // }
213
+
214
+ // export const aesCipher = (mode, key, data, algorithm) => {
215
+ // switch (algorithm.name) {
216
+ // case 'AES-CTR': return asyncAesCtrCipher(mode, key, data, algorithm);
217
+ // case 'AES-CBC': return asyncAesCbcCipher(mode, key, data, algorithm);
218
+ // case 'AES-GCM': return asyncAesGcmCipher(mode, key, data, algorithm);
219
+ // case 'AES-KW': return asyncAesKwCipher(mode, key, data);
220
+ // }
221
+ // };
222
+
223
+ // export const aesGenerateKey = async (algorithm, extractable, keyUsages) => {
224
+ // const { name, length } = algorithm;
225
+ // if (!ArrayPrototypeIncludes(kAesKeyLengths, length)) {
226
+ // throw lazyDOMException(
227
+ // 'AES key length must be 128, 192, or 256 bits',
228
+ // 'OperationError');
229
+ // }
230
+
231
+ // const checkUsages = ['wrapKey', 'unwrapKey'];
232
+ // if (name !== 'AES-KW')
233
+ // ArrayPrototypePush(checkUsages, 'encrypt', 'decrypt');
234
+
235
+ // const usagesSet = new SafeSet(keyUsages);
236
+ // if (hasAnyNotIn(usagesSet, checkUsages)) {
237
+ // throw lazyDOMException(
238
+ // 'Unsupported key usage for an AES key',
239
+ // 'SyntaxError');
240
+ // }
241
+
242
+ // const key = await generateKey('aes', { length }).catch((err) => {
243
+ // throw lazyDOMException(
244
+ // 'The operation failed for an operation-specific reason' +
245
+ // `[${err.message}]`,
246
+ // { name: 'OperationError', cause: err });
247
+ // });
248
+
249
+ // return new InternalCryptoKey(
250
+ // key,
251
+ // { name, length },
252
+ // ArrayFrom(usagesSet),
253
+ // extractable);
254
+ // };
255
+
256
+ export const aesImportKey = async (algorithm, format, keyData, extractable, keyUsages) => {
257
+ const {
258
+ name
259
+ } = algorithm;
260
+ const checkUsages = ['wrapKey', 'unwrapKey'];
261
+ if (name !== 'AES-KW') {
262
+ checkUsages.push('encrypt', 'decrypt');
263
+ }
264
+
265
+ // const usagesSet = new SafeSet(keyUsages);
266
+ if (hasAnyNotIn(keyUsages, checkUsages)) {
267
+ throw lazyDOMException('Unsupported key usage for an AES key', 'SyntaxError');
268
+ }
269
+ let keyObject;
270
+ let length;
271
+ switch (format) {
272
+ case 'raw':
273
+ {
274
+ const data = keyData;
275
+ validateKeyLength(data.byteLength * 8);
276
+ keyObject = createSecretKey(keyData);
277
+ break;
278
+ }
279
+ case 'jwk':
280
+ {
281
+ const data = keyData;
282
+ if (!data.kty) throw lazyDOMException('Invalid keyData', 'DataError');
283
+ if (data.kty !== 'oct') throw lazyDOMException('Invalid JWK "kty" Parameter', 'DataError');
284
+ if (keyUsages.length > 0 && data.use !== undefined && data.use !== 'enc') {
285
+ throw lazyDOMException('Invalid JWK "use" Parameter', 'DataError');
286
+ }
287
+ validateKeyOps(data.key_ops, keyUsages);
288
+ if (data.ext !== undefined && data.ext === false && extractable === true) {
289
+ throw lazyDOMException('JWK "ext" Parameter and extractable mismatch', 'DataError');
290
+ }
291
+ const handle = NativeQuickCrypto.webcrypto.createKeyObjectHandle();
292
+ handle.initJwk(data);
293
+ ({
294
+ length
295
+ } = handle.keyDetail());
296
+ validateKeyLength(length);
297
+ if (data.alg !== undefined) {
298
+ if (data.alg !== getAlgorithmName(algorithm.name, length)) throw lazyDOMException('JWK "alg" does not match the requested algorithm', 'DataError');
299
+ }
300
+ keyObject = new SecretKeyObject(handle);
301
+ break;
302
+ }
303
+ default:
304
+ throw lazyDOMException(`Unable to import AES key with format ${format}`, 'NotSupportedError');
305
+ }
306
+ if (length === undefined) {
307
+ ({
308
+ length
309
+ } = keyObject.handle.keyDetail());
310
+ validateKeyLength(length);
311
+ }
312
+ return new CryptoKey(keyObject, {
313
+ name,
314
+ length
315
+ }, keyUsages, extractable);
316
+ };
317
+ //# sourceMappingURL=aes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeQuickCrypto","lazyDOMException","hasAnyNotIn","validateKeyOps","CryptoKey","createSecretKey","SecretKeyObject","getAlgorithmName","name","length","undefined","validateKeyLength","aesImportKey","algorithm","format","keyData","extractable","keyUsages","checkUsages","push","keyObject","data","byteLength","kty","use","key_ops","ext","handle","webcrypto","createKeyObjectHandle","initJwk","keyDetail","alg"],"sourceRoot":"../../src","sources":["aes.ts"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,uCAAuC;AACzE,SACEC,gBAAgB,EAEhBC,WAAW,EACXC,cAAc,QACT,SAAS;AAChB,SAIEC,SAAS,EACTC,eAAe,EACfC,eAAe,QAEV,QAAQ;;AAEf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;;AAEA,OAAO,MAAMC,gBAAgB,GAAGA,CAACC,IAAY,EAAEC,MAAe,KAAK;EACjE,IAAIA,MAAM,KAAKC,SAAS,EACtB,MAAMT,gBAAgB,CACnB,6BAA4BQ,MAAO,EAAC,EACrC,aACF,CAAC;EACH,QAAQD,IAAI;IACV,KAAK,SAAS;MACZ,OAAQ,IAAGC,MAAO,KAAI;IACxB,KAAK,SAAS;MACZ,OAAQ,IAAGA,MAAO,KAAI;IACxB,KAAK,SAAS;MACZ,OAAQ,IAAGA,MAAO,KAAI;IACxB,KAAK,QAAQ;MACX,OAAQ,IAAGA,MAAO,IAAG;IACvB;MACE,MAAMR,gBAAgB,CAAE,2BAA0BO,IAAK,EAAC,EAAE,aAAa,CAAC;EAC5E;AACF,CAAC;AAED,SAASG,iBAAiBA,CAACF,MAAe,EAAE;EAC1C,IAAIA,MAAM,KAAK,GAAG,IAAIA,MAAM,KAAK,GAAG,IAAIA,MAAM,KAAK,GAAG,EACpD,MAAMR,gBAAgB,CAAE,uBAAsBQ,MAAO,EAAC,EAAE,WAAW,CAAC;AACxE;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA,OAAO,MAAMG,YAAY,GAAG,MAAAA,CAC1BC,SAA0B,EAC1BC,MAAoB,EACpBC,OAAyB,EACzBC,WAAoB,EACpBC,SAAqB,KACE;EACvB,MAAM;IAAET;EAAK,CAAC,GAAGK,SAAS;EAC1B,MAAMK,WAAW,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC;EAC5C,IAAIV,IAAI,KAAK,QAAQ,EAAE;IACrBU,WAAW,CAACC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC;EACxC;;EAEA;EACA,IAAIjB,WAAW,CAACe,SAAS,EAAEC,WAAW,CAAC,EAAE;IACvC,MAAMjB,gBAAgB,CACpB,sCAAsC,EACtC,aACF,CAAC;EACH;EAEA,IAAImB,SAA0B;EAC9B,IAAIX,MAA0B;EAE9B,QAAQK,MAAM;IACZ,KAAK,KAAK;MAAE;QACV,MAAMO,IAAI,GAAGN,OAAqB;QAClCJ,iBAAiB,CAACU,IAAI,CAACC,UAAU,GAAG,CAAC,CAAC;QACtCF,SAAS,GAAGf,eAAe,CAACU,OAAO,CAAC;QACpC;MACF;IACA,KAAK,KAAK;MAAE;QACV,MAAMM,IAAI,GAAGN,OAAc;QAE3B,IAAI,CAACM,IAAI,CAACE,GAAG,EAAE,MAAMtB,gBAAgB,CAAC,iBAAiB,EAAE,WAAW,CAAC;QAErE,IAAIoB,IAAI,CAACE,GAAG,KAAK,KAAK,EACpB,MAAMtB,gBAAgB,CAAC,6BAA6B,EAAE,WAAW,CAAC;QAEpE,IACEgB,SAAS,CAACR,MAAM,GAAG,CAAC,IACpBY,IAAI,CAACG,GAAG,KAAKd,SAAS,IACtBW,IAAI,CAACG,GAAG,KAAK,KAAK,EAClB;UACA,MAAMvB,gBAAgB,CAAC,6BAA6B,EAAE,WAAW,CAAC;QACpE;QAEAE,cAAc,CAACkB,IAAI,CAACI,OAAO,EAAER,SAAS,CAAC;QAEvC,IACEI,IAAI,CAACK,GAAG,KAAKhB,SAAS,IACtBW,IAAI,CAACK,GAAG,KAAK,KAAK,IAClBV,WAAW,KAAK,IAAI,EACpB;UACA,MAAMf,gBAAgB,CACpB,8CAA8C,EAC9C,WACF,CAAC;QACH;QAEA,MAAM0B,MAAM,GAAG3B,iBAAiB,CAAC4B,SAAS,CAACC,qBAAqB,CAAC,CAAC;QAClEF,MAAM,CAACG,OAAO,CAACT,IAAI,CAAC;QAEpB,CAAC;UAAEZ;QAAO,CAAC,GAAGkB,MAAM,CAACI,SAAS,CAAC,CAAC;QAChCpB,iBAAiB,CAACF,MAAM,CAAC;QAEzB,IAAIY,IAAI,CAACW,GAAG,KAAKtB,SAAS,EAAE;UAC1B,IAAIW,IAAI,CAACW,GAAG,KAAKzB,gBAAgB,CAACM,SAAS,CAACL,IAAI,EAAEC,MAAM,CAAC,EACvD,MAAMR,gBAAgB,CACpB,kDAAkD,EAClD,WACF,CAAC;QACL;QAEAmB,SAAS,GAAG,IAAId,eAAe,CAACqB,MAAM,CAAC;QACvC;MACF;IACA;MACE,MAAM1B,gBAAgB,CACnB,wCAAuCa,MAAO,EAAC,EAChD,mBACF,CAAC;EACL;EAEA,IAAIL,MAAM,KAAKC,SAAS,EAAE;IACxB,CAAC;MAAED;IAAO,CAAC,GAAGW,SAAS,CAACO,MAAM,CAACI,SAAS,CAAC,CAAC;IAC1CpB,iBAAiB,CAACF,MAAM,CAAC;EAC3B;EAEA,OAAO,IAAIL,SAAS,CAACgB,SAAS,EAAE;IAAEZ,IAAI;IAAEC;EAAO,CAAC,EAAEQ,SAAS,EAAED,WAAW,CAAC;AAC3E,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"sources":["constants.ts"],"names":["constants","OPENSSL_VERSION_NUMBER","SSL_OP_ALL","SSL_OP_ALLOW_NO_DHE_KEX","SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION","SSL_OP_CIPHER_SERVER_PREFERENCE","SSL_OP_CISCO_ANYCONNECT","SSL_OP_COOKIE_EXCHANGE","SSL_OP_CRYPTOPRO_TLSEXT_BUG","SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS","SSL_OP_EPHEMERAL_RSA","SSL_OP_LEGACY_SERVER_CONNECT","SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER","SSL_OP_MICROSOFT_SESS_ID_BUG","SSL_OP_MSIE_SSLV2_RSA_PADDING","SSL_OP_NETSCAPE_CA_DN_BUG","SSL_OP_NETSCAPE_CHALLENGE_BUG","SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG","SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG","SSL_OP_NO_COMPRESSION","SSL_OP_NO_ENCRYPT_THEN_MAC","SSL_OP_NO_QUERY_MTU","SSL_OP_NO_RENEGOTIATION","SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION","SSL_OP_NO_SSLv2","SSL_OP_NO_SSLv3","SSL_OP_NO_TICKET","SSL_OP_NO_TLSv1","SSL_OP_NO_TLSv1_1","SSL_OP_NO_TLSv1_2","SSL_OP_NO_TLSv1_3","SSL_OP_PKCS1_CHECK_1","SSL_OP_PKCS1_CHECK_2","SSL_OP_PRIORITIZE_CHACHA","SSL_OP_SINGLE_DH_USE","SSL_OP_SINGLE_ECDH_USE","SSL_OP_SSLEAY_080_CLIENT_DH_BUG","SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG","SSL_OP_TLS_BLOCK_PADDING_BUG","SSL_OP_TLS_D5_BUG","SSL_OP_TLS_ROLLBACK_BUG","ENGINE_METHOD_RSA","ENGINE_METHOD_DSA","ENGINE_METHOD_DH","ENGINE_METHOD_RAND","ENGINE_METHOD_EC","ENGINE_METHOD_CIPHERS","ENGINE_METHOD_DIGESTS","ENGINE_METHOD_PKEY_METHS","ENGINE_METHOD_PKEY_ASN1_METHS","ENGINE_METHOD_ALL","ENGINE_METHOD_NONE","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","ALPN_ENABLED","RSA_PKCS1_PADDING","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","RSA_PSS_SALTLEN_DIGEST","RSA_PSS_SALTLEN_MAX_SIGN","RSA_PSS_SALTLEN_AUTO","defaultCoreCipherList","TLS1_VERSION","TLS1_1_VERSION","TLS1_2_VERSION","TLS1_3_VERSION","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID"],"mappings":"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","sourcesContent":["// Taken by printing node.crypto.constants\n// Node declares them as enums on v8 directly\n// Whenever the API gets updated (or some dependency like OpenSSL) I guess we will have to revisit these\nexport const constants = {\n OPENSSL_VERSION_NUMBER: 269488367,\n SSL_OP_ALL: 2147485780,\n SSL_OP_ALLOW_NO_DHE_KEX: 1024,\n SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: 262144,\n SSL_OP_CIPHER_SERVER_PREFERENCE: 4194304,\n SSL_OP_CISCO_ANYCONNECT: 32768,\n SSL_OP_COOKIE_EXCHANGE: 8192,\n SSL_OP_CRYPTOPRO_TLSEXT_BUG: 2147483648,\n SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: 2048,\n SSL_OP_EPHEMERAL_RSA: 0,\n SSL_OP_LEGACY_SERVER_CONNECT: 4,\n SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: 0,\n SSL_OP_MICROSOFT_SESS_ID_BUG: 0,\n SSL_OP_MSIE_SSLV2_RSA_PADDING: 0,\n SSL_OP_NETSCAPE_CA_DN_BUG: 0,\n SSL_OP_NETSCAPE_CHALLENGE_BUG: 0,\n SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: 0,\n SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: 0,\n SSL_OP_NO_COMPRESSION: 131072,\n SSL_OP_NO_ENCRYPT_THEN_MAC: 524288,\n SSL_OP_NO_QUERY_MTU: 4096,\n SSL_OP_NO_RENEGOTIATION: 1073741824,\n SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: 65536,\n SSL_OP_NO_SSLv2: 0,\n SSL_OP_NO_SSLv3: 33554432,\n SSL_OP_NO_TICKET: 16384,\n SSL_OP_NO_TLSv1: 67108864,\n SSL_OP_NO_TLSv1_1: 268435456,\n SSL_OP_NO_TLSv1_2: 134217728,\n SSL_OP_NO_TLSv1_3: 536870912,\n SSL_OP_PKCS1_CHECK_1: 0,\n SSL_OP_PKCS1_CHECK_2: 0,\n SSL_OP_PRIORITIZE_CHACHA: 2097152,\n SSL_OP_SINGLE_DH_USE: 0,\n SSL_OP_SINGLE_ECDH_USE: 0,\n SSL_OP_SSLEAY_080_CLIENT_DH_BUG: 0,\n SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: 0,\n SSL_OP_TLS_BLOCK_PADDING_BUG: 0,\n SSL_OP_TLS_D5_BUG: 0,\n SSL_OP_TLS_ROLLBACK_BUG: 8388608,\n ENGINE_METHOD_RSA: 1,\n ENGINE_METHOD_DSA: 2,\n ENGINE_METHOD_DH: 4,\n ENGINE_METHOD_RAND: 8,\n ENGINE_METHOD_EC: 2048,\n ENGINE_METHOD_CIPHERS: 64,\n ENGINE_METHOD_DIGESTS: 128,\n ENGINE_METHOD_PKEY_METHS: 512,\n ENGINE_METHOD_PKEY_ASN1_METHS: 1024,\n ENGINE_METHOD_ALL: 65535,\n ENGINE_METHOD_NONE: 0,\n DH_CHECK_P_NOT_SAFE_PRIME: 2,\n DH_CHECK_P_NOT_PRIME: 1,\n DH_UNABLE_TO_CHECK_GENERATOR: 4,\n DH_NOT_SUITABLE_GENERATOR: 8,\n ALPN_ENABLED: 1,\n RSA_PKCS1_PADDING: 1,\n RSA_SSLV23_PADDING: 2,\n RSA_NO_PADDING: 3,\n RSA_PKCS1_OAEP_PADDING: 4,\n RSA_X931_PADDING: 5,\n RSA_PKCS1_PSS_PADDING: 6,\n RSA_PSS_SALTLEN_DIGEST: -1,\n RSA_PSS_SALTLEN_MAX_SIGN: -2,\n RSA_PSS_SALTLEN_AUTO: -2,\n defaultCoreCipherList:\n 'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA256:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!SRP:!CAMELLIA',\n TLS1_VERSION: 769,\n TLS1_1_VERSION: 770,\n TLS1_2_VERSION: 771,\n TLS1_3_VERSION: 772,\n POINT_CONVERSION_COMPRESSED: 2,\n POINT_CONVERSION_UNCOMPRESSED: 4,\n POINT_CONVERSION_HYBRID: 6,\n};\n"]}
1
+ {"version":3,"names":["constants","OPENSSL_VERSION_NUMBER","SSL_OP_ALL","SSL_OP_ALLOW_NO_DHE_KEX","SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION","SSL_OP_CIPHER_SERVER_PREFERENCE","SSL_OP_CISCO_ANYCONNECT","SSL_OP_COOKIE_EXCHANGE","SSL_OP_CRYPTOPRO_TLSEXT_BUG","SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS","SSL_OP_EPHEMERAL_RSA","SSL_OP_LEGACY_SERVER_CONNECT","SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER","SSL_OP_MICROSOFT_SESS_ID_BUG","SSL_OP_MSIE_SSLV2_RSA_PADDING","SSL_OP_NETSCAPE_CA_DN_BUG","SSL_OP_NETSCAPE_CHALLENGE_BUG","SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG","SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG","SSL_OP_NO_COMPRESSION","SSL_OP_NO_ENCRYPT_THEN_MAC","SSL_OP_NO_QUERY_MTU","SSL_OP_NO_RENEGOTIATION","SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION","SSL_OP_NO_SSLv2","SSL_OP_NO_SSLv3","SSL_OP_NO_TICKET","SSL_OP_NO_TLSv1","SSL_OP_NO_TLSv1_1","SSL_OP_NO_TLSv1_2","SSL_OP_NO_TLSv1_3","SSL_OP_PKCS1_CHECK_1","SSL_OP_PKCS1_CHECK_2","SSL_OP_PRIORITIZE_CHACHA","SSL_OP_SINGLE_DH_USE","SSL_OP_SINGLE_ECDH_USE","SSL_OP_SSLEAY_080_CLIENT_DH_BUG","SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG","SSL_OP_TLS_BLOCK_PADDING_BUG","SSL_OP_TLS_D5_BUG","SSL_OP_TLS_ROLLBACK_BUG","ENGINE_METHOD_RSA","ENGINE_METHOD_DSA","ENGINE_METHOD_DH","ENGINE_METHOD_RAND","ENGINE_METHOD_EC","ENGINE_METHOD_CIPHERS","ENGINE_METHOD_DIGESTS","ENGINE_METHOD_PKEY_METHS","ENGINE_METHOD_PKEY_ASN1_METHS","ENGINE_METHOD_ALL","ENGINE_METHOD_NONE","DH_CHECK_P_NOT_SAFE_PRIME","DH_CHECK_P_NOT_PRIME","DH_UNABLE_TO_CHECK_GENERATOR","DH_NOT_SUITABLE_GENERATOR","ALPN_ENABLED","RSA_PKCS1_PADDING","RSA_SSLV23_PADDING","RSA_NO_PADDING","RSA_PKCS1_OAEP_PADDING","RSA_X931_PADDING","RSA_PKCS1_PSS_PADDING","RSA_PSS_SALTLEN_DIGEST","RSA_PSS_SALTLEN_MAX_SIGN","RSA_PSS_SALTLEN_AUTO","defaultCoreCipherList","TLS1_VERSION","TLS1_1_VERSION","TLS1_2_VERSION","TLS1_3_VERSION","POINT_CONVERSION_COMPRESSED","POINT_CONVERSION_UNCOMPRESSED","POINT_CONVERSION_HYBRID"],"sourceRoot":"../../src","sources":["constants.ts"],"mappings":"AAAA;AACA;AACA;AACA,OAAO,MAAMA,SAAS,GAAG;EACvBC,sBAAsB,EAAE,SAAS;EACjCC,UAAU,EAAE,UAAU;EACtBC,uBAAuB,EAAE,IAAI;EAC7BC,wCAAwC,EAAE,MAAM;EAChDC,+BAA+B,EAAE,OAAO;EACxCC,uBAAuB,EAAE,KAAK;EAC9BC,sBAAsB,EAAE,IAAI;EAC5BC,2BAA2B,EAAE,UAAU;EACvCC,kCAAkC,EAAE,IAAI;EACxCC,oBAAoB,EAAE,CAAC;EACvBC,4BAA4B,EAAE,CAAC;EAC/BC,iCAAiC,EAAE,CAAC;EACpCC,4BAA4B,EAAE,CAAC;EAC/BC,6BAA6B,EAAE,CAAC;EAChCC,yBAAyB,EAAE,CAAC;EAC5BC,6BAA6B,EAAE,CAAC;EAChCC,sCAAsC,EAAE,CAAC;EACzCC,uCAAuC,EAAE,CAAC;EAC1CC,qBAAqB,EAAE,MAAM;EAC7BC,0BAA0B,EAAE,MAAM;EAClCC,mBAAmB,EAAE,IAAI;EACzBC,uBAAuB,EAAE,UAAU;EACnCC,6CAA6C,EAAE,KAAK;EACpDC,eAAe,EAAE,CAAC;EAClBC,eAAe,EAAE,QAAQ;EACzBC,gBAAgB,EAAE,KAAK;EACvBC,eAAe,EAAE,QAAQ;EACzBC,iBAAiB,EAAE,SAAS;EAC5BC,iBAAiB,EAAE,SAAS;EAC5BC,iBAAiB,EAAE,SAAS;EAC5BC,oBAAoB,EAAE,CAAC;EACvBC,oBAAoB,EAAE,CAAC;EACvBC,wBAAwB,EAAE,OAAO;EACjCC,oBAAoB,EAAE,CAAC;EACvBC,sBAAsB,EAAE,CAAC;EACzBC,+BAA+B,EAAE,CAAC;EAClCC,kCAAkC,EAAE,CAAC;EACrCC,4BAA4B,EAAE,CAAC;EAC/BC,iBAAiB,EAAE,CAAC;EACpBC,uBAAuB,EAAE,OAAO;EAChCC,iBAAiB,EAAE,CAAC;EACpBC,iBAAiB,EAAE,CAAC;EACpBC,gBAAgB,EAAE,CAAC;EACnBC,kBAAkB,EAAE,CAAC;EACrBC,gBAAgB,EAAE,IAAI;EACtBC,qBAAqB,EAAE,EAAE;EACzBC,qBAAqB,EAAE,GAAG;EAC1BC,wBAAwB,EAAE,GAAG;EAC7BC,6BAA6B,EAAE,IAAI;EACnCC,iBAAiB,EAAE,KAAK;EACxBC,kBAAkB,EAAE,CAAC;EACrBC,yBAAyB,EAAE,CAAC;EAC5BC,oBAAoB,EAAE,CAAC;EACvBC,4BAA4B,EAAE,CAAC;EAC/BC,yBAAyB,EAAE,CAAC;EAC5BC,YAAY,EAAE,CAAC;EACfC,iBAAiB,EAAE,CAAC;EACpBC,kBAAkB,EAAE,CAAC;EACrBC,cAAc,EAAE,CAAC;EACjBC,sBAAsB,EAAE,CAAC;EACzBC,gBAAgB,EAAE,CAAC;EACnBC,qBAAqB,EAAE,CAAC;EACxBC,sBAAsB,EAAE,CAAC,CAAC;EAC1BC,wBAAwB,EAAE,CAAC,CAAC;EAC5BC,oBAAoB,EAAE,CAAC,CAAC;EACxBC,qBAAqB,EACnB,kaAAka;EACpaC,YAAY,EAAE,GAAG;EACjBC,cAAc,EAAE,GAAG;EACnBC,cAAc,EAAE,GAAG;EACnBC,cAAc,EAAE,GAAG;EACnBC,2BAA2B,EAAE,CAAC;EAC9BC,6BAA6B,EAAE,CAAC;EAChCC,uBAAuB,EAAE;AAC3B,CAAC"}
@@ -0,0 +1,282 @@
1
+ import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
2
+ import { bufferLikeToArrayBuffer, binaryLikeToArrayBuffer, lazyDOMException, validateKeyOps, hasAnyNotIn, ab2str } from './Utils';
3
+ import { kNamedCurveAliases, PublicKeyObject, CryptoKey, PrivateKeyObject, KeyType } from './keys';
4
+
5
+ // const {
6
+ // ArrayPrototypeIncludes,
7
+ // ObjectKeys,
8
+ // SafeSet,
9
+ // } = primordials;
10
+
11
+ // const {
12
+ // ECKeyExportJob,
13
+ // KeyObjectHandle,
14
+ // SignJob,
15
+ // kCryptoJobAsync,
16
+ // kKeyTypePrivate,
17
+ // kSignJobModeSign,
18
+ // kSignJobModeVerify,
19
+ // kSigEncP1363,
20
+ // } = internalBinding('crypto');
21
+
22
+ // const {
23
+ // getUsagesUnion,
24
+ // hasAnyNotIn,
25
+ // jobPromise,
26
+ // normalizeHashName,
27
+ // validateKeyOps,
28
+ // kHandle,
29
+ // kKeyObject,
30
+ // kNamedCurveAliases,
31
+ // } = require('internal/crypto/util');
32
+
33
+ // const {
34
+ // lazyDOMException,
35
+ // promisify,
36
+ // } = require('internal/util');
37
+
38
+ // const {
39
+ // generateKeyPair: _generateKeyPair,
40
+ // } = require('internal/crypto/keygen');
41
+
42
+ // const {
43
+ // InternalCryptoKey,
44
+ // PrivateKeyObject,
45
+ // PublicKeyObject,
46
+ // createPrivateKey,
47
+ // createPublicKey,
48
+ // } = require('internal/crypto/keys');
49
+
50
+ // const generateKeyPair = promisify(_generateKeyPair);
51
+
52
+ function verifyAcceptableEcKeyUse(name, isPublic, usages) {
53
+ let checkSet;
54
+ switch (name) {
55
+ case 'ECDH':
56
+ checkSet = isPublic ? [] : ['deriveKey', 'deriveBits'];
57
+ break;
58
+ case 'ECDSA':
59
+ checkSet = isPublic ? ['verify'] : ['sign'];
60
+ break;
61
+ default:
62
+ throw lazyDOMException('The algorithm is not supported', 'NotSupportedError');
63
+ }
64
+ if (hasAnyNotIn(usages, checkSet)) {
65
+ throw lazyDOMException(`Unsupported key usage for a ${name} key`, 'SyntaxError');
66
+ }
67
+ }
68
+ function createECPublicKeyRaw(namedCurve, keyData) {
69
+ if (!namedCurve) {
70
+ throw new Error('Invalid namedCurve');
71
+ }
72
+ const handle = NativeQuickCrypto.webcrypto.createKeyObjectHandle();
73
+ if (!handle.initECRaw(kNamedCurveAliases[namedCurve], keyData)) {
74
+ console.log('keyData', ab2str(keyData));
75
+ throw new Error('Invalid keyData 1');
76
+ }
77
+ return new PublicKeyObject(handle);
78
+ }
79
+
80
+ // async function ecGenerateKey(algorithm, extractable, keyUsages) {
81
+ // const { name, namedCurve } = algorithm;
82
+
83
+ // if (!ArrayPrototypeIncludes(ObjectKeys(kNamedCurveAliases), namedCurve)) {
84
+ // throw lazyDOMException(
85
+ // 'Unrecognized namedCurve',
86
+ // 'NotSupportedError');
87
+ // }
88
+
89
+ // const usageSet = new SafeSet(keyUsages);
90
+ // switch (name) {
91
+ // case 'ECDSA':
92
+ // if (hasAnyNotIn(usageSet, ['sign', 'verify'])) {
93
+ // throw lazyDOMException(
94
+ // 'Unsupported key usage for an ECDSA key',
95
+ // 'SyntaxError');
96
+ // }
97
+ // break;
98
+ // case 'ECDH':
99
+ // if (hasAnyNotIn(usageSet, ['deriveKey', 'deriveBits'])) {
100
+ // throw lazyDOMException(
101
+ // 'Unsupported key usage for an ECDH key',
102
+ // 'SyntaxError');
103
+ // }
104
+ // // Fall through
105
+ // }
106
+
107
+ // const keypair = await generateKeyPair('ec', { namedCurve }).catch((err) => {
108
+ // throw lazyDOMException(
109
+ // 'The operation failed for an operation-specific reason',
110
+ // { name: 'OperationError', cause: err });
111
+ // });
112
+
113
+ // let publicUsages;
114
+ // let privateUsages;
115
+ // switch (name) {
116
+ // case 'ECDSA':
117
+ // publicUsages = getUsagesUnion(usageSet, 'verify');
118
+ // privateUsages = getUsagesUnion(usageSet, 'sign');
119
+ // break;
120
+ // case 'ECDH':
121
+ // publicUsages = [];
122
+ // privateUsages = getUsagesUnion(usageSet, 'deriveKey', 'deriveBits');
123
+ // break;
124
+ // }
125
+
126
+ // const keyAlgorithm = { name, namedCurve };
127
+
128
+ // const publicKey =
129
+ // new InternalCryptoKey(
130
+ // keypair.publicKey,
131
+ // keyAlgorithm,
132
+ // publicUsages,
133
+ // true);
134
+
135
+ // const privateKey =
136
+ // new InternalCryptoKey(
137
+ // keypair.privateKey,
138
+ // keyAlgorithm,
139
+ // privateUsages,
140
+ // extractable);
141
+
142
+ // return { __proto__: null, publicKey, privateKey };
143
+ // }
144
+
145
+ export function ecExportKey(key, format) {
146
+ return NativeQuickCrypto.webcrypto.ecExportKey(format, key.keyObject.handle);
147
+ }
148
+ export function ecImportKey(format, keyData, algorithm, extractable, keyUsages) {
149
+ const {
150
+ name,
151
+ namedCurve
152
+ } = algorithm;
153
+
154
+ // if (!ArrayPrototypeIncludes(ObjectKeys(kNamedCurveAliases), namedCurve)) {
155
+ // throw lazyDOMException('Unrecognized namedCurve', 'NotSupportedError');
156
+ // }
157
+
158
+ let keyObject;
159
+ // const usagesSet = new SafeSet(keyUsages);
160
+ switch (format) {
161
+ // case 'spki': {
162
+ // // verifyAcceptableEcKeyUse(name, true, usagesSet);
163
+ // try {
164
+ // keyObject = createPublicKey({
165
+ // key: keyData,
166
+ // format: 'der',
167
+ // type: 'spki',
168
+ // });
169
+ // } catch (err) {
170
+ // throw new Error(`Invalid keyData 2: ${err}`);
171
+ // }
172
+ // break;
173
+ // }
174
+ // case 'pkcs8': {
175
+ // // verifyAcceptableEcKeyUse(name, false, usagesSet);
176
+ // try {
177
+ // keyObject = createPrivateKey({
178
+ // key: keyData,
179
+ // format: 'der',
180
+ // type: 'pkcs8',
181
+ // });
182
+ // } catch (err) {
183
+ // throw new Error(`Invalid keyData 3 ${err}`);
184
+ // }
185
+ // break;
186
+ // }
187
+ case 'jwk':
188
+ {
189
+ const data = keyData;
190
+ if (!data.kty) throw lazyDOMException('Invalid keyData 4', 'DataError');
191
+ if (data.kty !== 'EC') throw lazyDOMException('Invalid JWK "kty" Parameter', 'DataError');
192
+ if (data.crv !== namedCurve) throw lazyDOMException('JWK "crv" does not match the requested algorithm', 'DataError');
193
+ verifyAcceptableEcKeyUse(name, data.d === undefined, keyUsages);
194
+ if (keyUsages.length > 0 && data.use !== undefined) {
195
+ const checkUse = name === 'ECDH' ? 'enc' : 'sig';
196
+ if (data.use !== checkUse) throw lazyDOMException('Invalid JWK "use" Parameter', 'DataError');
197
+ }
198
+ validateKeyOps(data.key_ops, keyUsages);
199
+ if (data.ext !== undefined && data.ext === false && extractable === true) {
200
+ throw lazyDOMException('JWK "ext" Parameter and extractable mismatch', 'DataError');
201
+ }
202
+ if (algorithm.name === 'ECDSA' && data.alg !== undefined) {
203
+ let algNamedCurve;
204
+ switch (data.alg) {
205
+ case 'ES256':
206
+ algNamedCurve = 'P-256';
207
+ break;
208
+ case 'ES384':
209
+ algNamedCurve = 'P-384';
210
+ break;
211
+ case 'ES512':
212
+ algNamedCurve = 'P-521';
213
+ break;
214
+ }
215
+ if (algNamedCurve !== namedCurve) throw lazyDOMException('JWK "alg" does not match the requested algorithm', 'DataError');
216
+ }
217
+ const handle = NativeQuickCrypto.webcrypto.createKeyObjectHandle();
218
+ const type = handle.initJwk(data, namedCurve);
219
+ if (type === undefined) throw lazyDOMException('Invalid JWK', 'DataError');
220
+ keyObject = type === KeyType.Private ? new PrivateKeyObject(handle) : new PublicKeyObject(handle);
221
+ break;
222
+ }
223
+ case 'raw':
224
+ {
225
+ const data = keyData;
226
+ verifyAcceptableEcKeyUse(name, true, keyUsages);
227
+ let buffer = typeof data === 'string' ? binaryLikeToArrayBuffer(data) : bufferLikeToArrayBuffer(data);
228
+ keyObject = createECPublicKeyRaw(namedCurve, buffer);
229
+ break;
230
+ }
231
+ default:
232
+ {
233
+ throw new Error(`Unknown EC import format: ${format}`);
234
+ }
235
+ }
236
+ switch (algorithm.name) {
237
+ case 'ECDSA':
238
+ // Fall through
239
+ case 'ECDH':
240
+ // if (keyObject.asymmetricKeyType !== 'ec')
241
+ // throw new Error('Invalid key type');
242
+ break;
243
+ }
244
+
245
+ // if (!keyObject[kHandle].checkEcKeyData()) {
246
+ // throw new Error('Invalid keyData 5');
247
+ // }
248
+
249
+ // const { namedCurve: checkNamedCurve } = keyObject[kHandle].keyDetail({});
250
+ // if (kNamedCurveAliases[namedCurve] !== checkNamedCurve)
251
+ // throw new Error('Named curve mismatch');
252
+
253
+ return new CryptoKey(keyObject, {
254
+ name,
255
+ namedCurve
256
+ }, keyUsages, extractable);
257
+ }
258
+
259
+ // function ecdsaSignVerify(key, data, { name, hash }, signature) {
260
+ // const mode = signature === undefined ? kSignJobModeSign : kSignJobModeVerify;
261
+ // const type = mode === kSignJobModeSign ? 'private' : 'public';
262
+
263
+ // if (key.type !== type)
264
+ // throw lazyDOMException(`Key must be a ${type} key`, 'InvalidAccessError');
265
+
266
+ // const hashname = normalizeHashName(hash.name);
267
+
268
+ // return jobPromise(() => new SignJob(
269
+ // kCryptoJobAsync,
270
+ // mode,
271
+ // key[kKeyObject][kHandle],
272
+ // undefined,
273
+ // undefined,
274
+ // undefined,
275
+ // data,
276
+ // hashname,
277
+ // undefined, // Salt length, not used with ECDSA
278
+ // undefined, // PSS Padding, not used with ECDSA
279
+ // kSigEncP1363,
280
+ // signature));
281
+ // }
282
+ //# sourceMappingURL=ec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["NativeQuickCrypto","bufferLikeToArrayBuffer","binaryLikeToArrayBuffer","lazyDOMException","validateKeyOps","hasAnyNotIn","ab2str","kNamedCurveAliases","PublicKeyObject","CryptoKey","PrivateKeyObject","KeyType","verifyAcceptableEcKeyUse","name","isPublic","usages","checkSet","createECPublicKeyRaw","namedCurve","keyData","Error","handle","webcrypto","createKeyObjectHandle","initECRaw","console","log","ecExportKey","key","format","keyObject","ecImportKey","algorithm","extractable","keyUsages","data","kty","crv","d","undefined","length","use","checkUse","key_ops","ext","alg","algNamedCurve","type","initJwk","Private","buffer"],"sourceRoot":"../../src","sources":["ec.ts"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,uCAAuC;AACzE,SACEC,uBAAuB,EAGvBC,uBAAuB,EACvBC,gBAAgB,EAChBC,cAAc,EACdC,WAAW,EACXC,MAAM,QACD,SAAS;AAChB,SAIEC,kBAAkB,EAElBC,eAAe,EAEfC,SAAS,EAGTC,gBAAgB,EAChBC,OAAO,QACF,QAAQ;;AAEf;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA,SAASC,wBAAwBA,CAC/BC,IAAkB,EAClBC,QAAiB,EACjBC,MAAkB,EACZ;EACN,IAAIC,QAAQ;EACZ,QAAQH,IAAI;IACV,KAAK,MAAM;MACTG,QAAQ,GAAGF,QAAQ,GAAG,EAAE,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC;MACtD;IACF,KAAK,OAAO;MACVE,QAAQ,GAAGF,QAAQ,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC;MAC3C;IACF;MACE,MAAMX,gBAAgB,CACpB,gCAAgC,EAChC,mBACF,CAAC;EACL;EACA,IAAIE,WAAW,CAACU,MAAM,EAAEC,QAAQ,CAAC,EAAE;IACjC,MAAMb,gBAAgB,CACnB,+BAA8BU,IAAK,MAAK,EACzC,aACF,CAAC;EACH;AACF;AAEA,SAASI,oBAAoBA,CAC3BC,UAAkC,EAClCC,OAAoB,EACH;EACjB,IAAI,CAACD,UAAU,EAAE;IACf,MAAM,IAAIE,KAAK,CAAC,oBAAoB,CAAC;EACvC;EACA,MAAMC,MAAM,GAAGrB,iBAAiB,CAACsB,SAAS,CAACC,qBAAqB,CAAC,CAAC;EAClE,IAAI,CAACF,MAAM,CAACG,SAAS,CAACjB,kBAAkB,CAACW,UAAU,CAAC,EAAEC,OAAO,CAAC,EAAE;IAC9DM,OAAO,CAACC,GAAG,CAAC,SAAS,EAAEpB,MAAM,CAACa,OAAO,CAAC,CAAC;IACvC,MAAM,IAAIC,KAAK,CAAC,mBAAmB,CAAC;EACtC;EAEA,OAAO,IAAIZ,eAAe,CAACa,MAAM,CAAC;AACpC;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA,OAAO,SAASM,WAAWA,CACzBC,GAAc,EACdC,MAA2B,EACd;EACb,OAAO7B,iBAAiB,CAACsB,SAAS,CAACK,WAAW,CAACE,MAAM,EAAED,GAAG,CAACE,SAAS,CAACT,MAAM,CAAC;AAC9E;AAEA,OAAO,SAASU,WAAWA,CACzBF,MAAoB,EACpBV,OAAsC,EACtCa,SAA0B,EAC1BC,WAAoB,EACpBC,SAAqB,EACV;EACX,MAAM;IAAErB,IAAI;IAAEK;EAAW,CAAC,GAAGc,SAAS;;EAEtC;EACA;EACA;;EAEA,IAAIF,SAAS;EACb;EACA,QAAQD,MAAM;IACZ;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,KAAK,KAAK;MAAE;QACV,MAAMM,IAAI,GAAGhB,OAAc;QAE3B,IAAI,CAACgB,IAAI,CAACC,GAAG,EAAE,MAAMjC,gBAAgB,CAAC,mBAAmB,EAAE,WAAW,CAAC;QACvE,IAAIgC,IAAI,CAACC,GAAG,KAAK,IAAI,EACnB,MAAMjC,gBAAgB,CAAC,6BAA6B,EAAE,WAAW,CAAC;QACpE,IAAIgC,IAAI,CAACE,GAAG,KAAKnB,UAAU,EACzB,MAAMf,gBAAgB,CACpB,kDAAkD,EAClD,WACF,CAAC;QAEHS,wBAAwB,CAACC,IAAI,EAAEsB,IAAI,CAACG,CAAC,KAAKC,SAAS,EAAEL,SAAS,CAAC;QAE/D,IAAIA,SAAS,CAACM,MAAM,GAAG,CAAC,IAAIL,IAAI,CAACM,GAAG,KAAKF,SAAS,EAAE;UAClD,MAAMG,QAAQ,GAAG7B,IAAI,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK;UAChD,IAAIsB,IAAI,CAACM,GAAG,KAAKC,QAAQ,EACvB,MAAMvC,gBAAgB,CAAC,6BAA6B,EAAE,WAAW,CAAC;QACtE;QAEAC,cAAc,CAAC+B,IAAI,CAACQ,OAAO,EAAET,SAAS,CAAC;QAEvC,IACEC,IAAI,CAACS,GAAG,KAAKL,SAAS,IACtBJ,IAAI,CAACS,GAAG,KAAK,KAAK,IAClBX,WAAW,KAAK,IAAI,EACpB;UACA,MAAM9B,gBAAgB,CACpB,8CAA8C,EAC9C,WACF,CAAC;QACH;QAEA,IAAI6B,SAAS,CAACnB,IAAI,KAAK,OAAO,IAAIsB,IAAI,CAACU,GAAG,KAAKN,SAAS,EAAE;UACxD,IAAIO,aAAa;UACjB,QAAQX,IAAI,CAACU,GAAG;YACd,KAAK,OAAO;cACVC,aAAa,GAAG,OAAO;cACvB;YACF,KAAK,OAAO;cACVA,aAAa,GAAG,OAAO;cACvB;YACF,KAAK,OAAO;cACVA,aAAa,GAAG,OAAO;cACvB;UACJ;UACA,IAAIA,aAAa,KAAK5B,UAAU,EAC9B,MAAMf,gBAAgB,CACpB,kDAAkD,EAClD,WACF,CAAC;QACL;QAEA,MAAMkB,MAAM,GAAGrB,iBAAiB,CAACsB,SAAS,CAACC,qBAAqB,CAAC,CAAC;QAClE,MAAMwB,IAAI,GAAG1B,MAAM,CAAC2B,OAAO,CAACb,IAAI,EAAEjB,UAAU,CAAC;QAC7C,IAAI6B,IAAI,KAAKR,SAAS,EACpB,MAAMpC,gBAAgB,CAAC,aAAa,EAAE,WAAW,CAAC;QACpD2B,SAAS,GACPiB,IAAI,KAAKpC,OAAO,CAACsC,OAAO,GACpB,IAAIvC,gBAAgB,CAACW,MAAM,CAAC,GAC5B,IAAIb,eAAe,CAACa,MAAM,CAAC;QACjC;MACF;IACA,KAAK,KAAK;MAAE;QACV,MAAMc,IAAI,GAAGhB,OAAkC;QAC/CP,wBAAwB,CAACC,IAAI,EAAE,IAAI,EAAEqB,SAAS,CAAC;QAC/C,IAAIgB,MAAM,GACR,OAAOf,IAAI,KAAK,QAAQ,GACpBjC,uBAAuB,CAACiC,IAAI,CAAC,GAC7BlC,uBAAuB,CAACkC,IAAI,CAAC;QACnCL,SAAS,GAAGb,oBAAoB,CAACC,UAAU,EAAEgC,MAAM,CAAC;QACpD;MACF;IACA;MAAS;QACP,MAAM,IAAI9B,KAAK,CAAE,6BAA4BS,MAAO,EAAC,CAAC;MACxD;EACF;EAEA,QAAQG,SAAS,CAACnB,IAAI;IACpB,KAAK,OAAO;IACZ;IACA,KAAK,MAAM;MACT;MACA;MACA;EACJ;;EAEA;EACA;EACA;;EAEA;EACA;EACA;;EAEA,OAAO,IAAIJ,SAAS,CAACqB,SAAS,EAAE;IAAEjB,IAAI;IAAEK;EAAW,CAAC,EAAEgB,SAAS,EAAED,WAAW,CAAC;AAC/E;;AAEA;AACA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA"}