react-native-quick-crypto 0.7.3 → 1.0.0-beta.2

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 (309) hide show
  1. package/QuickCrypto.podspec +34 -0
  2. package/README.md +13 -46
  3. package/android/CMakeLists.txt +32 -64
  4. package/android/build.gradle +52 -125
  5. package/android/gradle.properties +4 -4
  6. package/android/src/main/cpp/cpp-adapter.cpp +9 -54
  7. package/android/src/main/java/com/margelo/nitro/quickcrypto/QuickCryptoPackage.java +38 -0
  8. package/cpp/random/HybridRandom.cpp +34 -0
  9. package/cpp/random/HybridRandom.hpp +44 -0
  10. package/cpp/utils/Utils.hpp +9 -0
  11. package/ios/QuickCryptoOnLoad.mm +19 -0
  12. package/lib/commonjs/index.js +39 -39
  13. package/lib/commonjs/index.js.map +1 -1
  14. package/lib/commonjs/random.js +26 -12
  15. package/lib/commonjs/random.js.map +1 -1
  16. package/lib/commonjs/{NativeQuickCrypto/rsa.js → specs/random.nitro.js} +1 -1
  17. package/lib/commonjs/{NativeQuickCrypto/aes.js.map → specs/random.nitro.js.map} +1 -1
  18. package/lib/commonjs/utils/conversion.js +22 -0
  19. package/lib/commonjs/utils/conversion.js.map +1 -0
  20. package/lib/commonjs/utils/index.js +12 -0
  21. package/lib/commonjs/utils/index.js.map +1 -0
  22. package/lib/commonjs/utils/types.js +2 -0
  23. package/lib/{module/NativeQuickCrypto/aes.js.map → commonjs/utils/types.js.map} +1 -1
  24. package/lib/module/index.js +38 -38
  25. package/lib/module/index.js.map +1 -1
  26. package/lib/module/random.js +26 -12
  27. package/lib/module/random.js.map +1 -1
  28. package/lib/module/specs/random.nitro.js +4 -0
  29. package/lib/module/{NativeQuickCrypto/rsa.js.map → specs/random.nitro.js.map} +1 -1
  30. package/lib/module/utils/conversion.js +16 -0
  31. package/lib/module/utils/conversion.js.map +1 -0
  32. package/lib/module/utils/index.js +8 -0
  33. package/lib/module/utils/index.js.map +1 -0
  34. package/lib/module/utils/types.js +2 -0
  35. package/lib/{commonjs/NativeQuickCrypto/rsa.js.map → module/utils/types.js.map} +1 -1
  36. package/lib/tsconfig.tsbuildinfo +1 -0
  37. package/lib/typescript/index.d.ts +10 -141
  38. package/lib/typescript/index.d.ts.map +1 -1
  39. package/lib/typescript/random.d.ts +4 -5
  40. package/lib/typescript/random.d.ts.map +1 -1
  41. package/lib/typescript/specs/random.nitro.d.ts +9 -0
  42. package/lib/typescript/specs/random.nitro.d.ts.map +1 -0
  43. package/lib/typescript/utils/conversion.d.ts +4 -0
  44. package/lib/typescript/utils/conversion.d.ts.map +1 -0
  45. package/lib/typescript/utils/index.d.ts +6 -0
  46. package/lib/typescript/utils/index.d.ts.map +1 -0
  47. package/lib/typescript/utils/types.d.ts +5 -0
  48. package/lib/typescript/utils/types.d.ts.map +1 -0
  49. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +45 -0
  50. package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +26 -0
  51. package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +57 -0
  52. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +9 -0
  53. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +25 -0
  54. package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +29 -0
  55. package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +23 -0
  56. package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +62 -0
  57. package/package.json +50 -106
  58. package/src/index.ts +38 -48
  59. package/src/random.ts +51 -48
  60. package/src/specs/random.nitro.ts +14 -0
  61. package/src/utils/conversion.ts +16 -0
  62. package/src/utils/index.ts +6 -0
  63. package/src/utils/types.ts +15 -0
  64. package/LICENSE +0 -27
  65. package/android/src/main/java/com/margelo/quickcrypto/QuickCryptoModule.java +0 -70
  66. package/android/src/main/java/com/margelo/quickcrypto/QuickCryptoPackage.java +0 -25
  67. package/cpp/Cipher/MGLCipherHostObject.cpp +0 -663
  68. package/cpp/Cipher/MGLCipherHostObject.h +0 -90
  69. package/cpp/Cipher/MGLCreateCipherInstaller.cpp +0 -75
  70. package/cpp/Cipher/MGLCreateCipherInstaller.h +0 -22
  71. package/cpp/Cipher/MGLCreateDecipherInstaller.cpp +0 -77
  72. package/cpp/Cipher/MGLCreateDecipherInstaller.h +0 -17
  73. package/cpp/Cipher/MGLGenerateKeyPairInstaller.cpp +0 -134
  74. package/cpp/Cipher/MGLGenerateKeyPairInstaller.h +0 -35
  75. package/cpp/Cipher/MGLGenerateKeyPairSyncInstaller.cpp +0 -63
  76. package/cpp/Cipher/MGLGenerateKeyPairSyncInstaller.h +0 -37
  77. package/cpp/Cipher/MGLPublicCipher.h +0 -124
  78. package/cpp/Cipher/MGLPublicCipherInstaller.h +0 -107
  79. package/cpp/Cipher/MGLRsa.cpp +0 -573
  80. package/cpp/Cipher/MGLRsa.h +0 -109
  81. package/cpp/HMAC/MGLHmacHostObject.cpp +0 -95
  82. package/cpp/HMAC/MGLHmacHostObject.h +0 -39
  83. package/cpp/HMAC/MGLHmacInstaller.cpp +0 -43
  84. package/cpp/HMAC/MGLHmacInstaller.h +0 -20
  85. package/cpp/Hash/MGLHashHostObject.cpp +0 -147
  86. package/cpp/Hash/MGLHashHostObject.h +0 -53
  87. package/cpp/Hash/MGLHashInstaller.cpp +0 -44
  88. package/cpp/Hash/MGLHashInstaller.h +0 -20
  89. package/cpp/JSIUtils/MGLJSIMacros.h +0 -110
  90. package/cpp/JSIUtils/MGLJSIUtils.h +0 -41
  91. package/cpp/JSIUtils/MGLSmartHostObject.cpp +0 -43
  92. package/cpp/JSIUtils/MGLSmartHostObject.h +0 -46
  93. package/cpp/JSIUtils/MGLThreadAwareHostObject.cpp +0 -24
  94. package/cpp/JSIUtils/MGLThreadAwareHostObject.h +0 -43
  95. package/cpp/JSIUtils/MGLTypedArray.cpp +0 -325
  96. package/cpp/JSIUtils/MGLTypedArray.h +0 -160
  97. package/cpp/MGLKeys.cpp +0 -1426
  98. package/cpp/MGLKeys.h +0 -203
  99. package/cpp/MGLQuickCryptoHostObject.cpp +0 -127
  100. package/cpp/MGLQuickCryptoHostObject.h +0 -30
  101. package/cpp/Random/MGLRandomHostObject.cpp +0 -96
  102. package/cpp/Random/MGLRandomHostObject.h +0 -27
  103. package/cpp/Sig/MGLSignHostObjects.cpp +0 -757
  104. package/cpp/Sig/MGLSignHostObjects.h +0 -128
  105. package/cpp/Sig/MGLSignInstaller.cpp +0 -24
  106. package/cpp/Sig/MGLSignInstaller.h +0 -29
  107. package/cpp/Sig/MGLVerifyInstaller.cpp +0 -24
  108. package/cpp/Sig/MGLVerifyInstaller.h +0 -22
  109. package/cpp/Utils/MGLDispatchQueue.cpp +0 -75
  110. package/cpp/Utils/MGLDispatchQueue.h +0 -55
  111. package/cpp/Utils/MGLUtils.cpp +0 -295
  112. package/cpp/Utils/MGLUtils.h +0 -358
  113. package/cpp/Utils/base64.h +0 -320
  114. package/cpp/Utils/logs.h +0 -38
  115. package/cpp/Utils/node.h +0 -13
  116. package/cpp/fastpbkdf2/MGLPbkdf2HostObject.cpp +0 -164
  117. package/cpp/fastpbkdf2/MGLPbkdf2HostObject.h +0 -29
  118. package/cpp/fastpbkdf2/fastpbkdf2.c +0 -352
  119. package/cpp/fastpbkdf2/fastpbkdf2.h +0 -68
  120. package/cpp/webcrypto/MGLWebCrypto.cpp +0 -125
  121. package/cpp/webcrypto/MGLWebCrypto.h +0 -32
  122. package/cpp/webcrypto/crypto_aes.cpp +0 -516
  123. package/cpp/webcrypto/crypto_aes.h +0 -79
  124. package/cpp/webcrypto/crypto_ec.cpp +0 -424
  125. package/cpp/webcrypto/crypto_ec.h +0 -78
  126. package/cpp/webcrypto/crypto_keygen.cpp +0 -86
  127. package/cpp/webcrypto/crypto_keygen.h +0 -38
  128. package/ios/QuickCrypto.xcodeproj/project.pbxproj +0 -274
  129. package/ios/QuickCryptoModule.h +0 -5
  130. package/ios/QuickCryptoModule.mm +0 -42
  131. package/lib/commonjs/Cipher.js +0 -502
  132. package/lib/commonjs/Cipher.js.map +0 -1
  133. package/lib/commonjs/Hash.js +0 -99
  134. package/lib/commonjs/Hash.js.map +0 -1
  135. package/lib/commonjs/Hashnames.js +0 -87
  136. package/lib/commonjs/Hashnames.js.map +0 -1
  137. package/lib/commonjs/Hmac.js +0 -79
  138. package/lib/commonjs/Hmac.js.map +0 -1
  139. package/lib/commonjs/NativeQuickCrypto/Cipher.js +0 -30
  140. package/lib/commonjs/NativeQuickCrypto/Cipher.js.map +0 -1
  141. package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js +0 -52
  142. package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js.map +0 -1
  143. package/lib/commonjs/NativeQuickCrypto/aes.js +0 -6
  144. package/lib/commonjs/NativeQuickCrypto/hash.js +0 -2
  145. package/lib/commonjs/NativeQuickCrypto/hash.js.map +0 -1
  146. package/lib/commonjs/NativeQuickCrypto/hmac.js +0 -2
  147. package/lib/commonjs/NativeQuickCrypto/hmac.js.map +0 -1
  148. package/lib/commonjs/NativeQuickCrypto/keygen.js +0 -6
  149. package/lib/commonjs/NativeQuickCrypto/keygen.js.map +0 -1
  150. package/lib/commonjs/NativeQuickCrypto/pbkdf2.js +0 -2
  151. package/lib/commonjs/NativeQuickCrypto/pbkdf2.js.map +0 -1
  152. package/lib/commonjs/NativeQuickCrypto/random.js +0 -2
  153. package/lib/commonjs/NativeQuickCrypto/random.js.map +0 -1
  154. package/lib/commonjs/NativeQuickCrypto/sig.js +0 -19
  155. package/lib/commonjs/NativeQuickCrypto/sig.js.map +0 -1
  156. package/lib/commonjs/NativeQuickCrypto/webcrypto.js +0 -6
  157. package/lib/commonjs/NativeQuickCrypto/webcrypto.js.map +0 -1
  158. package/lib/commonjs/Utils.js +0 -608
  159. package/lib/commonjs/Utils.js.map +0 -1
  160. package/lib/commonjs/aes.js +0 -281
  161. package/lib/commonjs/aes.js.map +0 -1
  162. package/lib/commonjs/constants.js +0 -85
  163. package/lib/commonjs/constants.js.map +0 -1
  164. package/lib/commonjs/ec.js +0 -276
  165. package/lib/commonjs/ec.js.map +0 -1
  166. package/lib/commonjs/keygen.js +0 -56
  167. package/lib/commonjs/keygen.js.map +0 -1
  168. package/lib/commonjs/keys.js +0 -492
  169. package/lib/commonjs/keys.js.map +0 -1
  170. package/lib/commonjs/pbkdf2.js +0 -90
  171. package/lib/commonjs/pbkdf2.js.map +0 -1
  172. package/lib/commonjs/rsa.js +0 -248
  173. package/lib/commonjs/rsa.js.map +0 -1
  174. package/lib/commonjs/sig.js +0 -129
  175. package/lib/commonjs/sig.js.map +0 -1
  176. package/lib/commonjs/subtle.js +0 -448
  177. package/lib/commonjs/subtle.js.map +0 -1
  178. package/lib/commonjs/webcrypto.js +0 -14
  179. package/lib/commonjs/webcrypto.js.map +0 -1
  180. package/lib/module/Cipher.js +0 -491
  181. package/lib/module/Cipher.js.map +0 -1
  182. package/lib/module/Hash.js +0 -93
  183. package/lib/module/Hash.js.map +0 -1
  184. package/lib/module/Hashnames.js +0 -85
  185. package/lib/module/Hashnames.js.map +0 -1
  186. package/lib/module/Hmac.js +0 -74
  187. package/lib/module/Hmac.js.map +0 -1
  188. package/lib/module/NativeQuickCrypto/Cipher.js +0 -26
  189. package/lib/module/NativeQuickCrypto/Cipher.js.map +0 -1
  190. package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js +0 -49
  191. package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js.map +0 -1
  192. package/lib/module/NativeQuickCrypto/aes.js +0 -4
  193. package/lib/module/NativeQuickCrypto/hash.js +0 -2
  194. package/lib/module/NativeQuickCrypto/hash.js.map +0 -1
  195. package/lib/module/NativeQuickCrypto/hmac.js +0 -2
  196. package/lib/module/NativeQuickCrypto/hmac.js.map +0 -1
  197. package/lib/module/NativeQuickCrypto/keygen.js +0 -4
  198. package/lib/module/NativeQuickCrypto/keygen.js.map +0 -1
  199. package/lib/module/NativeQuickCrypto/pbkdf2.js +0 -2
  200. package/lib/module/NativeQuickCrypto/pbkdf2.js.map +0 -1
  201. package/lib/module/NativeQuickCrypto/random.js +0 -2
  202. package/lib/module/NativeQuickCrypto/random.js.map +0 -1
  203. package/lib/module/NativeQuickCrypto/rsa.js +0 -4
  204. package/lib/module/NativeQuickCrypto/sig.js +0 -17
  205. package/lib/module/NativeQuickCrypto/sig.js.map +0 -1
  206. package/lib/module/NativeQuickCrypto/webcrypto.js +0 -4
  207. package/lib/module/NativeQuickCrypto/webcrypto.js.map +0 -1
  208. package/lib/module/Utils.js +0 -539
  209. package/lib/module/Utils.js.map +0 -1
  210. package/lib/module/aes.js +0 -274
  211. package/lib/module/aes.js.map +0 -1
  212. package/lib/module/constants.js +0 -81
  213. package/lib/module/constants.js.map +0 -1
  214. package/lib/module/ec.js +0 -267
  215. package/lib/module/ec.js.map +0 -1
  216. package/lib/module/keygen.js +0 -49
  217. package/lib/module/keygen.js.map +0 -1
  218. package/lib/module/keys.js +0 -477
  219. package/lib/module/keys.js.map +0 -1
  220. package/lib/module/pbkdf2.js +0 -84
  221. package/lib/module/pbkdf2.js.map +0 -1
  222. package/lib/module/rsa.js +0 -242
  223. package/lib/module/rsa.js.map +0 -1
  224. package/lib/module/sig.js +0 -124
  225. package/lib/module/sig.js.map +0 -1
  226. package/lib/module/subtle.js +0 -443
  227. package/lib/module/subtle.js.map +0 -1
  228. package/lib/module/webcrypto.js +0 -10
  229. package/lib/module/webcrypto.js.map +0 -1
  230. package/lib/typescript/Cipher.d.ts +0 -81
  231. package/lib/typescript/Cipher.d.ts.map +0 -1
  232. package/lib/typescript/Hash.d.ts +0 -44
  233. package/lib/typescript/Hash.d.ts.map +0 -1
  234. package/lib/typescript/Hashnames.d.ts +0 -11
  235. package/lib/typescript/Hashnames.d.ts.map +0 -1
  236. package/lib/typescript/Hmac.d.ts +0 -37
  237. package/lib/typescript/Hmac.d.ts.map +0 -1
  238. package/lib/typescript/NativeQuickCrypto/Cipher.d.ts +0 -44
  239. package/lib/typescript/NativeQuickCrypto/Cipher.d.ts.map +0 -1
  240. package/lib/typescript/NativeQuickCrypto/NativeQuickCrypto.d.ts +0 -33
  241. package/lib/typescript/NativeQuickCrypto/NativeQuickCrypto.d.ts.map +0 -1
  242. package/lib/typescript/NativeQuickCrypto/aes.d.ts +0 -5
  243. package/lib/typescript/NativeQuickCrypto/aes.d.ts.map +0 -1
  244. package/lib/typescript/NativeQuickCrypto/hash.d.ts +0 -7
  245. package/lib/typescript/NativeQuickCrypto/hash.d.ts.map +0 -1
  246. package/lib/typescript/NativeQuickCrypto/hmac.d.ts +0 -6
  247. package/lib/typescript/NativeQuickCrypto/hmac.d.ts.map +0 -1
  248. package/lib/typescript/NativeQuickCrypto/keygen.d.ts +0 -4
  249. package/lib/typescript/NativeQuickCrypto/keygen.d.ts.map +0 -1
  250. package/lib/typescript/NativeQuickCrypto/pbkdf2.d.ts +0 -5
  251. package/lib/typescript/NativeQuickCrypto/pbkdf2.d.ts.map +0 -1
  252. package/lib/typescript/NativeQuickCrypto/random.d.ts +0 -5
  253. package/lib/typescript/NativeQuickCrypto/random.d.ts.map +0 -1
  254. package/lib/typescript/NativeQuickCrypto/rsa.d.ts +0 -5
  255. package/lib/typescript/NativeQuickCrypto/rsa.d.ts.map +0 -1
  256. package/lib/typescript/NativeQuickCrypto/sig.d.ts +0 -23
  257. package/lib/typescript/NativeQuickCrypto/sig.d.ts.map +0 -1
  258. package/lib/typescript/NativeQuickCrypto/webcrypto.d.ts +0 -39
  259. package/lib/typescript/NativeQuickCrypto/webcrypto.d.ts.map +0 -1
  260. package/lib/typescript/Utils.d.ts +0 -48
  261. package/lib/typescript/Utils.d.ts.map +0 -1
  262. package/lib/typescript/aes.d.ts +0 -22
  263. package/lib/typescript/aes.d.ts.map +0 -1
  264. package/lib/typescript/constants.d.ts +0 -76
  265. package/lib/typescript/constants.d.ts.map +0 -1
  266. package/lib/typescript/ec.d.ts +0 -7
  267. package/lib/typescript/ec.d.ts.map +0 -1
  268. package/lib/typescript/keygen.d.ts +0 -6
  269. package/lib/typescript/keygen.d.ts.map +0 -1
  270. package/lib/typescript/keys.d.ts +0 -206
  271. package/lib/typescript/keys.d.ts.map +0 -1
  272. package/lib/typescript/pbkdf2.d.ts +0 -12
  273. package/lib/typescript/pbkdf2.d.ts.map +0 -1
  274. package/lib/typescript/rsa.d.ts +0 -12
  275. package/lib/typescript/rsa.d.ts.map +0 -1
  276. package/lib/typescript/sig.d.ts +0 -21
  277. package/lib/typescript/sig.d.ts.map +0 -1
  278. package/lib/typescript/subtle.d.ts +0 -15
  279. package/lib/typescript/subtle.d.ts.map +0 -1
  280. package/lib/typescript/webcrypto.d.ts +0 -9
  281. package/lib/typescript/webcrypto.d.ts.map +0 -1
  282. package/react-native-quick-crypto.podspec +0 -40
  283. package/src/Cipher.ts +0 -832
  284. package/src/Hash.ts +0 -132
  285. package/src/Hashnames.ts +0 -93
  286. package/src/Hmac.ts +0 -106
  287. package/src/NativeQuickCrypto/Cipher.ts +0 -102
  288. package/src/NativeQuickCrypto/NativeQuickCrypto.ts +0 -102
  289. package/src/NativeQuickCrypto/aes.ts +0 -14
  290. package/src/NativeQuickCrypto/hash.ts +0 -10
  291. package/src/NativeQuickCrypto/hmac.ts +0 -9
  292. package/src/NativeQuickCrypto/keygen.ts +0 -7
  293. package/src/NativeQuickCrypto/pbkdf2.ts +0 -16
  294. package/src/NativeQuickCrypto/random.ts +0 -12
  295. package/src/NativeQuickCrypto/rsa.ts +0 -12
  296. package/src/NativeQuickCrypto/sig.ts +0 -44
  297. package/src/NativeQuickCrypto/webcrypto.ts +0 -72
  298. package/src/Utils.ts +0 -777
  299. package/src/aes.ts +0 -402
  300. package/src/constants.ts +0 -79
  301. package/src/ec.ts +0 -375
  302. package/src/keygen.ts +0 -80
  303. package/src/keys.ts +0 -787
  304. package/src/pbkdf2.ts +0 -169
  305. package/src/rsa.ts +0 -370
  306. package/src/sig.ts +0 -164
  307. package/src/subtle.ts +0 -639
  308. package/src/webcrypto.ts +0 -8
  309. /package/android/src/main/{AndroidManifestNew.xml → AndroidManifest.xml} +0 -0
package/src/Cipher.ts DELETED
@@ -1,832 +0,0 @@
1
- import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
2
- import Stream from 'readable-stream';
3
- import {
4
- type BinaryLike,
5
- binaryLikeToArrayBuffer,
6
- type CipherEncoding,
7
- type Encoding,
8
- getDefaultEncoding,
9
- kEmptyObject,
10
- validateFunction,
11
- validateObject,
12
- validateString,
13
- validateUint32,
14
- validateInt32,
15
- type BinaryLikeNode,
16
- } from './Utils';
17
- import { type InternalCipher, KeyVariant } from './NativeQuickCrypto/Cipher';
18
- import type {
19
- CipherCCMOptions,
20
- CipherCCMTypes,
21
- CipherGCMTypes,
22
- CipherGCMOptions,
23
- CipherOCBOptions,
24
- CipherOCBTypes,
25
- DecipherGCM,
26
- DecipherOCB,
27
- DecipherCCM,
28
- CipherCCM,
29
- CipherOCB,
30
- CipherGCM,
31
- } from 'crypto'; // @types/node
32
- import { StringDecoder } from 'string_decoder';
33
- import { Buffer } from '@craftzdog/react-native-buffer';
34
- import { Buffer as SBuffer } from 'safe-buffer';
35
- import { constants } from './constants';
36
- import {
37
- CryptoKey,
38
- parsePrivateKeyEncoding,
39
- parsePublicKeyEncoding,
40
- preparePrivateKey,
41
- preparePublicOrPrivateKey,
42
- type CryptoKeyPair,
43
- type KeyPairType,
44
- type NamedCurve,
45
- } from './keys';
46
- import type { KeyObjectHandle } from './NativeQuickCrypto/webcrypto';
47
-
48
- export enum ECCurve {
49
- OPENSSL_EC_EXPLICIT_CURVE,
50
- OPENSSL_EC_NAMED_CURVE,
51
- }
52
-
53
- // make sure that nextTick is there
54
- global.process.nextTick = setImmediate;
55
-
56
- const createInternalCipher = NativeQuickCrypto.createCipher;
57
- const createInternalDecipher = NativeQuickCrypto.createDecipher;
58
- const _publicEncrypt = NativeQuickCrypto.publicEncrypt;
59
- const _publicDecrypt = NativeQuickCrypto.publicDecrypt;
60
- const _privateDecrypt = NativeQuickCrypto.privateDecrypt;
61
-
62
- function getUIntOption(options: Record<string, any>, key: string) {
63
- let value;
64
- if (options && (value = options[key]) != null) {
65
- // >>> Turns any type into a positive integer (also sets the sign bit to 0)
66
- // eslint-disable-next-line no-bitwise
67
- if (value >>> 0 !== value) throw new Error(`options.${key}: ${value}`);
68
- return value;
69
- }
70
- return -1;
71
- }
72
-
73
- function normalizeEncoding(enc: string) {
74
- if (!enc) return 'utf8';
75
- var retried;
76
- while (true) {
77
- switch (enc) {
78
- case 'utf8':
79
- case 'utf-8':
80
- return 'utf8';
81
- case 'ucs2':
82
- case 'ucs-2':
83
- case 'utf16le':
84
- case 'utf-16le':
85
- return 'utf16le';
86
- case 'latin1':
87
- case 'binary':
88
- return 'latin1';
89
- case 'base64':
90
- case 'ascii':
91
- case 'hex':
92
- return enc;
93
- default:
94
- if (retried) return; // undefined
95
- enc = ('' + enc).toLowerCase();
96
- retried = true;
97
- }
98
- }
99
- }
100
-
101
- function validateEncoding(data: string, encoding: string) {
102
- const normalizedEncoding = normalizeEncoding(encoding);
103
- const length = data.length;
104
-
105
- if (normalizedEncoding === 'hex' && length % 2 !== 0) {
106
- throw new Error(`Encoding ${encoding} not valid for data length ${length}`);
107
- }
108
- }
109
-
110
- function getDecoder(decoder?: StringDecoder, encoding?: BufferEncoding) {
111
- return decoder ?? new StringDecoder(encoding);
112
- }
113
-
114
- class CipherCommon extends Stream.Transform {
115
- private internal: InternalCipher;
116
- private decoder: StringDecoder | undefined;
117
-
118
- constructor(
119
- cipherType: string,
120
- cipherKey: BinaryLikeNode,
121
- isCipher: boolean,
122
- options: Record<string, any> = {},
123
- iv?: BinaryLike | null
124
- ) {
125
- super(options);
126
- const cipherKeyBuffer = binaryLikeToArrayBuffer(cipherKey);
127
- // defaults to 16 bytes
128
- const authTagLength =
129
- getUIntOption(options, 'authTagLength') !== -1
130
- ? getUIntOption(options, 'authTagLength')
131
- : 16;
132
- const args = {
133
- cipher_type: cipherType,
134
- cipher_key: cipherKeyBuffer,
135
- iv,
136
- ...options,
137
- auth_tag_len: authTagLength,
138
- };
139
- this.internal = isCipher
140
- ? createInternalCipher(args)
141
- : createInternalDecipher(args);
142
- }
143
-
144
- update(
145
- data: BinaryLike,
146
- inputEncoding?: CipherEncoding,
147
- outputEncoding?: CipherEncoding
148
- ): ArrayBuffer | string {
149
- const defaultEncoding = getDefaultEncoding();
150
- inputEncoding = inputEncoding ?? defaultEncoding;
151
- outputEncoding = outputEncoding ?? defaultEncoding;
152
-
153
- if (typeof data === 'string') {
154
- validateEncoding(data, inputEncoding);
155
- } else if (!ArrayBuffer.isView(data)) {
156
- throw new Error('Invalid data argument');
157
- }
158
-
159
- if (typeof data === 'string') {
160
- // On node this is handled on the native side
161
- // on our case we need to correctly send the arraybuffer to the jsi side
162
- inputEncoding = inputEncoding === 'buffer' ? 'utf8' : inputEncoding;
163
- data = binaryLikeToArrayBuffer(data, inputEncoding);
164
- } else {
165
- data = binaryLikeToArrayBuffer(data as any, inputEncoding);
166
- }
167
-
168
- const ret = this.internal.update(data);
169
-
170
- if (outputEncoding && outputEncoding !== 'buffer') {
171
- this.decoder = getDecoder(this.decoder, outputEncoding);
172
-
173
- return this.decoder!.write(SBuffer.from(ret) as any);
174
- }
175
-
176
- return ret;
177
- }
178
-
179
- final(): ArrayBuffer;
180
- final(outputEncoding: BufferEncoding | 'buffer'): string;
181
- final(outputEncoding?: BufferEncoding | 'buffer'): ArrayBuffer | string {
182
- const ret = this.internal.final();
183
-
184
- if (outputEncoding && outputEncoding !== 'buffer') {
185
- this.decoder = getDecoder(this.decoder, outputEncoding);
186
-
187
- return this.decoder!.end(SBuffer.from(ret) as any);
188
- }
189
-
190
- return ret;
191
- }
192
-
193
- _transform(chunk: BinaryLike, encoding: Encoding, callback: () => void) {
194
- this.push(this.update(chunk, encoding));
195
- callback();
196
- }
197
-
198
- _flush(callback: () => void) {
199
- this.push(this.final());
200
- callback();
201
- }
202
-
203
- public setAutoPadding(autoPadding?: boolean): this {
204
- this.internal.setAutoPadding(!!autoPadding);
205
- return this;
206
- }
207
-
208
- public setAAD(
209
- buffer: Buffer,
210
- options?: {
211
- plaintextLength: number;
212
- }
213
- ): this {
214
- this.internal.setAAD({
215
- data: buffer.buffer,
216
- plaintextLength: options?.plaintextLength,
217
- });
218
- return this;
219
- }
220
-
221
- public getAuthTag(): ArrayBuffer {
222
- return this.internal.getAuthTag();
223
- }
224
-
225
- public setAuthTag(tag: Buffer): this {
226
- this.internal.setAuthTag(binaryLikeToArrayBuffer(tag));
227
- return this;
228
- }
229
- }
230
-
231
- class Cipher extends CipherCommon {
232
- constructor(
233
- cipherType: string,
234
- cipherKey: BinaryLikeNode,
235
- options: Record<string, any> = {},
236
- iv?: BinaryLike | null
237
- ) {
238
- if (iv != null) {
239
- iv = binaryLikeToArrayBuffer(iv);
240
- }
241
- super(cipherType, cipherKey, true, options, iv);
242
- }
243
- }
244
-
245
- class Decipher extends CipherCommon {
246
- constructor(
247
- cipherType: string,
248
- cipherKey: BinaryLikeNode,
249
- options: Record<string, any> = {},
250
- iv?: BinaryLike | null
251
- ) {
252
- if (iv != null) {
253
- iv = binaryLikeToArrayBuffer(iv);
254
- }
255
-
256
- super(cipherType, cipherKey, false, options, iv);
257
- }
258
- }
259
-
260
- export function createDecipher(
261
- algorithm: CipherCCMTypes,
262
- password: BinaryLikeNode,
263
- options: CipherCCMOptions
264
- ): DecipherCCM;
265
- export function createDecipher(
266
- algorithm: CipherGCMTypes,
267
- password: BinaryLikeNode,
268
- options?: CipherGCMOptions
269
- ): DecipherGCM;
270
- export function createDecipher(
271
- algorithm: string,
272
- password: BinaryLikeNode,
273
- options?: CipherCCMOptions | CipherGCMOptions | Stream.TransformOptions
274
- ): DecipherCCM | DecipherGCM | Decipher {
275
- return new Decipher(algorithm, password, options);
276
- }
277
-
278
- export function createDecipheriv(
279
- algorithm: CipherCCMTypes,
280
- key: BinaryLikeNode,
281
- iv: BinaryLike,
282
- options: CipherCCMOptions
283
- ): DecipherCCM;
284
- export function createDecipheriv(
285
- algorithm: CipherOCBTypes,
286
- key: BinaryLikeNode,
287
- iv: BinaryLike,
288
- options: CipherOCBOptions
289
- ): DecipherOCB;
290
- export function createDecipheriv(
291
- algorithm: CipherGCMTypes,
292
- key: BinaryLikeNode,
293
- iv: BinaryLike,
294
- options?: CipherGCMOptions
295
- ): DecipherGCM;
296
- export function createDecipheriv(
297
- algorithm: string,
298
- key: BinaryLikeNode,
299
- iv: BinaryLike | null,
300
- options?:
301
- | CipherCCMOptions
302
- | CipherOCBOptions
303
- | CipherGCMOptions
304
- | Stream.TransformOptions
305
- ): DecipherCCM | DecipherOCB | DecipherGCM | Decipher {
306
- return new Decipher(algorithm, key, options, iv);
307
- }
308
-
309
- export function createCipher(
310
- algorithm: CipherCCMTypes,
311
- password: BinaryLikeNode,
312
- options: CipherCCMOptions
313
- ): CipherCCM;
314
- export function createCipher(
315
- algorithm: CipherGCMTypes,
316
- password: BinaryLikeNode,
317
- options?: CipherGCMOptions
318
- ): CipherGCM;
319
- export function createCipher(
320
- algorithm: string,
321
- password: BinaryLikeNode,
322
- options?: CipherGCMOptions | CipherCCMOptions | Stream.TransformOptions
323
- ): CipherCCM | CipherGCM | Cipher {
324
- return new Cipher(algorithm, password, options);
325
- }
326
-
327
- export function createCipheriv(
328
- algorithm: CipherCCMTypes,
329
- key: BinaryLikeNode,
330
- iv: BinaryLike,
331
- options: CipherCCMOptions
332
- ): CipherCCM;
333
- export function createCipheriv(
334
- algorithm: CipherOCBTypes,
335
- key: BinaryLikeNode,
336
- iv: BinaryLike,
337
- options: CipherOCBOptions
338
- ): CipherOCB;
339
- export function createCipheriv(
340
- algorithm: CipherGCMTypes,
341
- key: BinaryLikeNode,
342
- iv: BinaryLike,
343
- options?: CipherGCMOptions
344
- ): CipherGCM;
345
- export function createCipheriv(
346
- algorithm: string,
347
- key: BinaryLikeNode,
348
- iv: BinaryLike | null,
349
- options?:
350
- | CipherCCMOptions
351
- | CipherOCBOptions
352
- | CipherGCMOptions
353
- | Stream.TransformOptions
354
- ): CipherCCM | CipherOCB | CipherGCM | Cipher {
355
- return new Cipher(algorithm, key, options, iv);
356
- }
357
-
358
- // RSA Functions
359
- // Follows closely the model implemented in node
360
-
361
- // TODO(osp) types...
362
- function rsaFunctionFor(
363
- method: (
364
- data: ArrayBuffer,
365
- format: number,
366
- type: any,
367
- passphrase: any,
368
- buffer: ArrayBuffer,
369
- padding: number,
370
- oaepHash: any,
371
- oaepLabel: any
372
- ) => Buffer,
373
- defaultPadding: number,
374
- keyType: 'public' | 'private'
375
- ) {
376
- return (
377
- options: {
378
- key: any;
379
- encoding?: string;
380
- format?: any;
381
- padding?: any;
382
- oaepHash?: any;
383
- oaepLabel?: any;
384
- passphrase?: string;
385
- },
386
- buffer: BinaryLike
387
- ) => {
388
- const { format, type, data, passphrase } =
389
- keyType === 'private'
390
- ? preparePrivateKey(options)
391
- : preparePublicOrPrivateKey(options);
392
- const padding = options.padding || defaultPadding;
393
- const { oaepHash, encoding } = options;
394
- let { oaepLabel } = options;
395
- if (oaepHash !== undefined) validateString(oaepHash, 'key.oaepHash');
396
- if (oaepLabel !== undefined)
397
- oaepLabel = binaryLikeToArrayBuffer(oaepLabel, encoding);
398
- buffer = binaryLikeToArrayBuffer(buffer, encoding);
399
-
400
- const rawRes = method(
401
- data,
402
- format,
403
- type,
404
- passphrase,
405
- buffer,
406
- padding,
407
- oaepHash,
408
- oaepLabel
409
- );
410
-
411
- return Buffer.from(rawRes);
412
- };
413
- }
414
-
415
- export const publicEncrypt = rsaFunctionFor(
416
- _publicEncrypt,
417
- constants.RSA_PKCS1_OAEP_PADDING,
418
- 'public'
419
- );
420
- export const publicDecrypt = rsaFunctionFor(
421
- _publicDecrypt,
422
- constants.RSA_PKCS1_PADDING,
423
- 'public'
424
- );
425
- // const privateEncrypt = rsaFunctionFor(_privateEncrypt, constants.RSA_PKCS1_PADDING,
426
- // 'private');
427
- export const privateDecrypt = rsaFunctionFor(
428
- _privateDecrypt,
429
- constants.RSA_PKCS1_OAEP_PADDING,
430
- 'private'
431
- );
432
-
433
- // _ _ __ _____ _
434
- // | | | |/ / | __ \ (_)
435
- // __ _ ___ _ __ ___ _ __ __ _| |_ ___| ' / ___ _ _| |__) |_ _ _ _ __
436
- // / _` |/ _ \ '_ \ / _ \ '__/ _` | __/ _ \ < / _ \ | | | ___/ _` | | '__|
437
- // | (_| | __/ | | | __/ | | (_| | || __/ . \ __/ |_| | | | (_| | | |
438
- // \__, |\___|_| |_|\___|_| \__,_|\__\___|_|\_\___|\__, |_| \__,_|_|_|
439
- // __/ | __/ |
440
- // |___/ |___/
441
- export type GenerateKeyPairOptions = {
442
- modulusLength?: number; // Key size in bits (RSA, DSA).
443
- publicExponent?: number; // Public exponent (RSA). Default: 0x10001.
444
- hashAlgorithm?: string; // Name of the message digest (RSA-PSS).
445
- mgf1HashAlgorithm?: string; // string Name of the message digest used by MGF1 (RSA-PSS).
446
- saltLength?: number; // Minimal salt length in bytes (RSA-PSS).
447
- divisorLength?: number; // Size of q in bits (DSA).
448
- namedCurve?: string; // Name of the curve to use (EC).
449
- prime?: Buffer; // The prime parameter (DH).
450
- primeLength?: number; // Prime length in bits (DH).
451
- generator?: number; // Custom generator (DH). Default: 2.
452
- groupName?: string; // Diffie-Hellman group name (DH). See crypto.getDiffieHellman().
453
- publicKeyEncoding?: any; // See keyObject.export().
454
- privateKeyEncoding?: any; // See keyObject.export().
455
- paramEncoding?: string;
456
- hash?: any;
457
- mgf1Hash?: any;
458
- };
459
-
460
- export type KeyPairKey = Buffer | KeyObjectHandle | CryptoKey | undefined;
461
-
462
- export type GenerateKeyPairReturn = [
463
- error?: Error,
464
- privateKey?: KeyPairKey,
465
- publicKey?: KeyPairKey,
466
- ];
467
-
468
- export type GenerateKeyPairCallback = (
469
- error?: Error,
470
- publicKey?: KeyPairKey,
471
- privateKey?: KeyPairKey
472
- ) => GenerateKeyPairReturn | void;
473
-
474
- export type KeyPair = {
475
- publicKey?: KeyPairKey;
476
- privateKey?: KeyPairKey;
477
- };
478
-
479
- export type GenerateKeyPairPromiseReturn = [error?: Error, keypair?: KeyPair];
480
-
481
- function parseKeyEncoding(
482
- keyType: string,
483
- options: GenerateKeyPairOptions = kEmptyObject
484
- ) {
485
- const { publicKeyEncoding, privateKeyEncoding } = options;
486
-
487
- let publicFormat, publicType;
488
- if (publicKeyEncoding == null) {
489
- publicFormat = publicType = undefined;
490
- } else if (typeof publicKeyEncoding === 'object') {
491
- ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(
492
- publicKeyEncoding,
493
- keyType,
494
- 'publicKeyEncoding'
495
- ));
496
- } else {
497
- throw new Error(
498
- 'Invalid argument options.publicKeyEncoding',
499
- publicKeyEncoding
500
- );
501
- }
502
-
503
- let privateFormat, privateType, cipher, passphrase;
504
- if (privateKeyEncoding == null) {
505
- privateFormat = privateType = undefined;
506
- } else if (typeof privateKeyEncoding === 'object') {
507
- ({
508
- format: privateFormat,
509
- type: privateType,
510
- cipher,
511
- passphrase,
512
- } = parsePrivateKeyEncoding(
513
- privateKeyEncoding,
514
- keyType,
515
- 'privateKeyEncoding'
516
- ));
517
- } else {
518
- throw new Error(
519
- 'Invalid argument options.privateKeyEncoding',
520
- publicKeyEncoding
521
- );
522
- }
523
-
524
- return [
525
- publicFormat,
526
- publicType,
527
- privateFormat,
528
- privateType,
529
- cipher,
530
- passphrase,
531
- ];
532
- }
533
-
534
- /** On node a very complex "job" chain is created, we are going for a far simpler approach and calling
535
- * an internal function that basically executes the same byte shuffling on the native side
536
- */
537
- function internalGenerateKeyPair(
538
- isAsync: boolean,
539
- type: KeyPairType,
540
- options: GenerateKeyPairOptions | undefined,
541
- callback?: GenerateKeyPairCallback
542
- ): GenerateKeyPairReturn | void {
543
- const encoding = parseKeyEncoding(type, options);
544
-
545
- // if (options !== undefined)
546
- // validateObject(options, 'options');
547
-
548
- switch (type) {
549
- case 'rsa-pss':
550
- // fallthrough
551
- case 'rsa':
552
- validateObject<GenerateKeyPairOptions>(options, 'options');
553
- const { modulusLength } = options!;
554
- validateUint32(modulusLength as number, 'options.modulusLength');
555
- let { publicExponent } = options!;
556
- if (publicExponent == null) {
557
- publicExponent = 0x10001;
558
- } else {
559
- validateUint32(publicExponent, 'options.publicExponent');
560
- }
561
-
562
- if (type === 'rsa') {
563
- if (isAsync) {
564
- NativeQuickCrypto.generateKeyPair(
565
- KeyVariant.RSA_SSA_PKCS1_v1_5, // Used also for RSA-OAEP
566
- modulusLength as number,
567
- publicExponent,
568
- ...encoding
569
- )
570
- .then(([err, publicKey, privateKey]) => {
571
- if (publicKey instanceof Buffer) {
572
- publicKey = Buffer.from(publicKey);
573
- }
574
- if (privateKey instanceof Buffer) {
575
- privateKey = Buffer.from(privateKey);
576
- }
577
- callback!(err, publicKey, privateKey);
578
- })
579
- .catch((err) => {
580
- callback!(err, undefined, undefined);
581
- });
582
- } else {
583
- let [err, publicKey, privateKey] =
584
- NativeQuickCrypto.generateKeyPairSync(
585
- KeyVariant.RSA_SSA_PKCS1_v1_5,
586
- modulusLength as number,
587
- publicExponent,
588
- ...encoding
589
- );
590
-
591
- if (publicKey instanceof Buffer) {
592
- publicKey = Buffer.from(publicKey);
593
- }
594
- if (privateKey instanceof Buffer) {
595
- privateKey = Buffer.from(privateKey);
596
- }
597
-
598
- return [err, publicKey, privateKey];
599
- }
600
- }
601
-
602
- const { hash, mgf1Hash, hashAlgorithm, mgf1HashAlgorithm, saltLength } =
603
- options!;
604
-
605
- // // We don't have a process object on RN
606
- // // const pendingDeprecation = getOptionValue('--pending-deprecation');
607
-
608
- if (saltLength !== undefined)
609
- validateInt32(saltLength, 'options.saltLength', 0);
610
- if (hashAlgorithm !== undefined)
611
- validateString(hashAlgorithm, 'options.hashAlgorithm');
612
- if (mgf1HashAlgorithm !== undefined)
613
- validateString(mgf1HashAlgorithm, 'options.mgf1HashAlgorithm');
614
- if (hash !== undefined) {
615
- // pendingDeprecation && process.emitWarning(
616
- // '"options.hash" is deprecated, ' +
617
- // 'use "options.hashAlgorithm" instead.',
618
- // 'DeprecationWarning',
619
- // 'DEP0154');
620
- validateString(hash, 'options.hash');
621
- if (hashAlgorithm && hash !== hashAlgorithm) {
622
- throw new Error(`Invalid Argument options.hash ${hash}`);
623
- }
624
- }
625
- if (mgf1Hash !== undefined) {
626
- // pendingDeprecation && process.emitWarning(
627
- // '"options.mgf1Hash" is deprecated, ' +
628
- // 'use "options.mgf1HashAlgorithm" instead.',
629
- // 'DeprecationWarning',
630
- // 'DEP0154');
631
- validateString(mgf1Hash, 'options.mgf1Hash');
632
- if (mgf1HashAlgorithm && mgf1Hash !== mgf1HashAlgorithm) {
633
- throw new Error(`Invalid Argument options.mgf1Hash ${mgf1Hash}`);
634
- }
635
- }
636
-
637
- return NativeQuickCrypto.generateKeyPairSync(
638
- KeyVariant.RSA_PSS,
639
- modulusLength as number,
640
- publicExponent,
641
- hashAlgorithm || hash,
642
- mgf1HashAlgorithm || mgf1Hash,
643
- saltLength,
644
- ...encoding
645
- );
646
-
647
- // case 'dsa': {
648
- // validateObject(options, 'options');
649
- // const { modulusLength } = options!;
650
- // validateUint32(modulusLength, 'options.modulusLength');
651
-
652
- // let { divisorLength } = options!;
653
- // if (divisorLength == null) {
654
- // divisorLength = -1;
655
- // } else validateInt32(divisorLength, 'options.divisorLength', 0);
656
-
657
- // // return new DsaKeyPairGenJob(
658
- // // mode,
659
- // // modulusLength,
660
- // // divisorLength,
661
- // // ...encoding);
662
- // }
663
-
664
- case 'ec':
665
- validateObject<GenerateKeyPairOptions>(options, 'options');
666
- const { namedCurve } = options!;
667
- validateString(namedCurve, 'options.namedCurve');
668
- let paramEncodingFlag = ECCurve.OPENSSL_EC_NAMED_CURVE;
669
- const { paramEncoding } = options!;
670
- if (paramEncoding == null || paramEncoding === 'named')
671
- paramEncodingFlag = ECCurve.OPENSSL_EC_NAMED_CURVE;
672
- else if (paramEncoding === 'explicit')
673
- paramEncodingFlag = ECCurve.OPENSSL_EC_EXPLICIT_CURVE;
674
- else
675
- throw new Error(
676
- `Invalid Argument options.paramEncoding ${paramEncoding}`
677
- );
678
-
679
- if (isAsync) {
680
- NativeQuickCrypto.generateKeyPair(
681
- KeyVariant.EC,
682
- namedCurve as NamedCurve,
683
- paramEncodingFlag,
684
- ...encoding
685
- )
686
- .then(([err, publicKey, privateKey]) => {
687
- if (publicKey instanceof Buffer) {
688
- publicKey = Buffer.from(publicKey);
689
- }
690
- if (privateKey instanceof Buffer) {
691
- privateKey = Buffer.from(privateKey);
692
- }
693
- callback?.(err, publicKey, privateKey);
694
- })
695
- .catch((err) => {
696
- callback?.(err, undefined, undefined);
697
- });
698
- }
699
-
700
- let [err, publicKey, privateKey] = NativeQuickCrypto.generateKeyPairSync(
701
- KeyVariant.EC,
702
- namedCurve as NamedCurve,
703
- paramEncodingFlag,
704
- ...encoding
705
- );
706
- if (publicKey instanceof Buffer) {
707
- publicKey = Buffer.from(publicKey);
708
- }
709
- if (privateKey instanceof Buffer) {
710
- privateKey = Buffer.from(privateKey);
711
- }
712
- return [err, publicKey, privateKey];
713
-
714
- // case 'ed25519':
715
- // case 'ed448':
716
- // case 'x25519':
717
- // case 'x448': {
718
- // let id;
719
- // switch (type) {
720
- // case 'ed25519':
721
- // id = EVP_PKEY_ED25519;
722
- // break;
723
- // case 'ed448':
724
- // id = EVP_PKEY_ED448;
725
- // break;
726
- // case 'x25519':
727
- // id = EVP_PKEY_X25519;
728
- // break;
729
- // case 'x448':
730
- // id = EVP_PKEY_X448;
731
- // break;
732
- // }
733
- // return new NidKeyPairGenJob(mode, id, ...encoding);
734
- // }
735
- // case 'dh': {
736
- // validateObject(options, 'options');
737
- // const { group, primeLength, prime, generator } = options;
738
- // if (group != null) {
739
- // if (prime != null)
740
- // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'prime');
741
- // if (primeLength != null)
742
- // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');
743
- // if (generator != null)
744
- // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');
745
-
746
- // validateString(group, 'options.group');
747
-
748
- // return new DhKeyPairGenJob(mode, group, ...encoding);
749
- // }
750
-
751
- // if (prime != null) {
752
- // if (primeLength != null)
753
- // throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');
754
-
755
- // validateBuffer(prime, 'options.prime');
756
- // } else if (primeLength != null) {
757
- // validateInt32(primeLength, 'options.primeLength', 0);
758
- // } else {
759
- // throw new ERR_MISSING_OPTION(
760
- // 'At least one of the group, prime, or primeLength options'
761
- // );
762
- // }
763
-
764
- // if (generator != null) {
765
- // validateInt32(generator, 'options.generator', 0);
766
- // }
767
- // return new DhKeyPairGenJob(
768
- // mode,
769
- // prime != null ? prime : primeLength,
770
- // generator == null ? 2 : generator,
771
- // ...encoding
772
- // );
773
- // }
774
- default:
775
- // Fall through
776
- }
777
- const err = new Error(`
778
- Invalid Argument options: '${type}' scheme not supported for generateKey().
779
- Currently not all encryption methods are supported in quick-crypto. Check
780
- implementation_coverage.md for status.
781
- `);
782
- return [err, undefined, undefined];
783
- }
784
-
785
- export const generateKeyPair = (
786
- type: KeyPairType,
787
- options: GenerateKeyPairOptions,
788
- callback: GenerateKeyPairCallback
789
- ): void => {
790
- validateFunction(callback);
791
- internalGenerateKeyPair(true, type, options, callback);
792
- };
793
-
794
- // Promisify generateKeyPair
795
- // (attempted to use util.promisify, to no avail)
796
- export const generateKeyPairPromise = (
797
- type: KeyPairType,
798
- options: GenerateKeyPairOptions
799
- ): Promise<GenerateKeyPairPromiseReturn> => {
800
- return new Promise((resolve, reject) => {
801
- generateKeyPair(type, options, (err, publicKey, privateKey) => {
802
- if (err) {
803
- reject([err, undefined]);
804
- } else {
805
- resolve([undefined, { publicKey, privateKey }]);
806
- }
807
- });
808
- });
809
- };
810
-
811
- // generateKeyPairSync
812
- export function generateKeyPairSync(type: KeyPairType): CryptoKeyPair;
813
- export function generateKeyPairSync(
814
- type: KeyPairType,
815
- options: GenerateKeyPairOptions
816
- ): CryptoKeyPair;
817
- export function generateKeyPairSync(
818
- type: KeyPairType,
819
- options?: GenerateKeyPairOptions
820
- ): CryptoKeyPair {
821
- const [_, publicKey, privateKey] = internalGenerateKeyPair(
822
- false,
823
- type,
824
- options,
825
- undefined
826
- )!;
827
-
828
- return {
829
- publicKey,
830
- privateKey,
831
- };
832
- }