react-native-quick-crypto 1.0.0 → 1.0.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 (92) hide show
  1. package/QuickCrypto.podspec +19 -52
  2. package/android/CMakeLists.txt +4 -2
  3. package/android/build.gradle +1 -1
  4. package/cpp/cipher/HybridCipher.cpp +20 -3
  5. package/cpp/cipher/HybridRsaCipher.cpp +20 -1
  6. package/cpp/ed25519/HybridEdKeyPair.cpp +8 -2
  7. package/cpp/keys/HybridKeyObjectHandle.cpp +8 -0
  8. package/cpp/keys/KeyObjectData.hpp +1 -1
  9. package/cpp/mldsa/HybridMlDsaKeyPair.cpp +264 -0
  10. package/cpp/mldsa/HybridMlDsaKeyPair.hpp +47 -0
  11. package/cpp/sign/HybridSignHandle.cpp +97 -22
  12. package/cpp/sign/HybridVerifyHandle.cpp +90 -21
  13. package/deps/ncrypto/.bazelignore +4 -0
  14. package/deps/ncrypto/.bazelrc +2 -0
  15. package/deps/ncrypto/.bazelversion +1 -0
  16. package/deps/ncrypto/.clang-format +111 -0
  17. package/deps/ncrypto/.github/workflows/bazel.yml +58 -0
  18. package/deps/ncrypto/.github/workflows/linter.yml +38 -0
  19. package/deps/ncrypto/.github/workflows/macos.yml +43 -0
  20. package/deps/ncrypto/.github/workflows/ubuntu.yml +46 -0
  21. package/deps/ncrypto/.github/workflows/visual-studio.yml +49 -0
  22. package/deps/ncrypto/.python-version +1 -0
  23. package/deps/ncrypto/BUILD.bazel +36 -0
  24. package/deps/ncrypto/CMakeLists.txt +55 -0
  25. package/deps/ncrypto/LICENSE +21 -0
  26. package/deps/ncrypto/MODULE.bazel +1 -0
  27. package/deps/ncrypto/MODULE.bazel.lock +280 -0
  28. package/deps/ncrypto/README.md +18 -0
  29. package/deps/ncrypto/WORKSPACE +15 -0
  30. package/deps/ncrypto/cmake/CPM.cmake +1225 -0
  31. package/deps/ncrypto/cmake/ncrypto-flags.cmake +16 -0
  32. package/deps/ncrypto/include/dh-primes.h +67 -0
  33. package/deps/ncrypto/{ncrypto.h → include/ncrypto.h} +361 -89
  34. package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +28 -0
  35. package/deps/ncrypto/pyproject.toml +38 -0
  36. package/deps/ncrypto/src/CMakeLists.txt +15 -0
  37. package/deps/ncrypto/src/engine.cpp +93 -0
  38. package/deps/ncrypto/{ncrypto.cc → src/ncrypto.cpp} +1168 -234
  39. package/deps/ncrypto/tests/BUILD.bazel +9 -0
  40. package/deps/ncrypto/tests/CMakeLists.txt +7 -0
  41. package/deps/ncrypto/tests/basic.cpp +86 -0
  42. package/deps/ncrypto/tools/run-clang-format.sh +42 -0
  43. package/lib/commonjs/ed.js +68 -0
  44. package/lib/commonjs/ed.js.map +1 -1
  45. package/lib/commonjs/keys/classes.js +6 -0
  46. package/lib/commonjs/keys/classes.js.map +1 -1
  47. package/lib/commonjs/mldsa.js +69 -0
  48. package/lib/commonjs/mldsa.js.map +1 -0
  49. package/lib/commonjs/specs/mlDsaKeyPair.nitro.js +6 -0
  50. package/lib/commonjs/specs/mlDsaKeyPair.nitro.js.map +1 -0
  51. package/lib/commonjs/subtle.js +483 -13
  52. package/lib/commonjs/subtle.js.map +1 -1
  53. package/lib/commonjs/utils/types.js.map +1 -1
  54. package/lib/module/ed.js +66 -0
  55. package/lib/module/ed.js.map +1 -1
  56. package/lib/module/keys/classes.js +6 -0
  57. package/lib/module/keys/classes.js.map +1 -1
  58. package/lib/module/mldsa.js +63 -0
  59. package/lib/module/mldsa.js.map +1 -0
  60. package/lib/module/specs/mlDsaKeyPair.nitro.js +4 -0
  61. package/lib/module/specs/mlDsaKeyPair.nitro.js.map +1 -0
  62. package/lib/module/subtle.js +484 -14
  63. package/lib/module/subtle.js.map +1 -1
  64. package/lib/module/utils/types.js.map +1 -1
  65. package/lib/tsconfig.tsbuildinfo +1 -1
  66. package/lib/typescript/ed.d.ts +4 -1
  67. package/lib/typescript/ed.d.ts.map +1 -1
  68. package/lib/typescript/index.d.ts +2 -0
  69. package/lib/typescript/index.d.ts.map +1 -1
  70. package/lib/typescript/keys/classes.d.ts +2 -0
  71. package/lib/typescript/keys/classes.d.ts.map +1 -1
  72. package/lib/typescript/mldsa.d.ts +18 -0
  73. package/lib/typescript/mldsa.d.ts.map +1 -0
  74. package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts +16 -0
  75. package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts.map +1 -0
  76. package/lib/typescript/subtle.d.ts +4 -1
  77. package/lib/typescript/subtle.d.ts.map +1 -1
  78. package/lib/typescript/utils/types.d.ts +14 -6
  79. package/lib/typescript/utils/types.d.ts.map +1 -1
  80. package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +1 -0
  81. package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +10 -0
  82. package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +10 -0
  83. package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +12 -0
  84. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +29 -0
  85. package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +73 -0
  86. package/package.json +7 -3
  87. package/src/ed.ts +102 -0
  88. package/src/keys/classes.ts +9 -0
  89. package/src/mldsa.ts +125 -0
  90. package/src/specs/mlDsaKeyPair.nitro.ts +29 -0
  91. package/src/subtle.ts +667 -17
  92. package/src/utils/types.ts +27 -6
package/src/mldsa.ts ADDED
@@ -0,0 +1,125 @@
1
+ import { NitroModules } from 'react-native-nitro-modules';
2
+ import type { MlDsaKeyPair } from './specs/mlDsaKeyPair.nitro';
3
+ import {
4
+ CryptoKey,
5
+ KeyObject,
6
+ PublicKeyObject,
7
+ PrivateKeyObject as PrivateKeyObjectClass,
8
+ } from './keys';
9
+ import type { CryptoKeyPair, KeyUsage, SubtleAlgorithm } from './utils';
10
+ import {
11
+ hasAnyNotIn,
12
+ lazyDOMException,
13
+ getUsagesUnion,
14
+ KFormatType,
15
+ KeyEncoding,
16
+ } from './utils';
17
+
18
+ export type MlDsaVariant = 'ML-DSA-44' | 'ML-DSA-65' | 'ML-DSA-87';
19
+
20
+ export class MlDsa {
21
+ variant: MlDsaVariant;
22
+ native: MlDsaKeyPair;
23
+
24
+ constructor(variant: MlDsaVariant) {
25
+ this.variant = variant;
26
+ this.native = NitroModules.createHybridObject<MlDsaKeyPair>('MlDsaKeyPair');
27
+ this.native.setVariant(variant);
28
+ }
29
+
30
+ async generateKeyPair(): Promise<void> {
31
+ await this.native.generateKeyPair(
32
+ KFormatType.DER,
33
+ KeyEncoding.SPKI,
34
+ KFormatType.DER,
35
+ KeyEncoding.PKCS8,
36
+ );
37
+ }
38
+
39
+ generateKeyPairSync(): void {
40
+ this.native.generateKeyPairSync(
41
+ KFormatType.DER,
42
+ KeyEncoding.SPKI,
43
+ KFormatType.DER,
44
+ KeyEncoding.PKCS8,
45
+ );
46
+ }
47
+
48
+ getPublicKey(): ArrayBuffer {
49
+ return this.native.getPublicKey();
50
+ }
51
+
52
+ getPrivateKey(): ArrayBuffer {
53
+ return this.native.getPrivateKey();
54
+ }
55
+
56
+ async sign(message: ArrayBuffer): Promise<ArrayBuffer> {
57
+ return this.native.sign(message);
58
+ }
59
+
60
+ signSync(message: ArrayBuffer): ArrayBuffer {
61
+ return this.native.signSync(message);
62
+ }
63
+
64
+ async verify(signature: ArrayBuffer, message: ArrayBuffer): Promise<boolean> {
65
+ return this.native.verify(signature, message);
66
+ }
67
+
68
+ verifySync(signature: ArrayBuffer, message: ArrayBuffer): boolean {
69
+ return this.native.verifySync(signature, message);
70
+ }
71
+ }
72
+
73
+ export async function mldsa_generateKeyPairWebCrypto(
74
+ variant: MlDsaVariant,
75
+ extractable: boolean,
76
+ keyUsages: KeyUsage[],
77
+ ): Promise<CryptoKeyPair> {
78
+ if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
79
+ throw lazyDOMException(
80
+ `Unsupported key usage for ${variant}`,
81
+ 'SyntaxError',
82
+ );
83
+ }
84
+
85
+ const publicUsages = getUsagesUnion(keyUsages, 'verify');
86
+ const privateUsages = getUsagesUnion(keyUsages, 'sign');
87
+
88
+ if (privateUsages.length === 0) {
89
+ throw lazyDOMException('Usages cannot be empty', 'SyntaxError');
90
+ }
91
+
92
+ const mldsa = new MlDsa(variant);
93
+ await mldsa.generateKeyPair();
94
+
95
+ const publicKeyData = mldsa.getPublicKey();
96
+ const privateKeyData = mldsa.getPrivateKey();
97
+
98
+ const pub = KeyObject.createKeyObject(
99
+ 'public',
100
+ publicKeyData,
101
+ KFormatType.DER,
102
+ KeyEncoding.SPKI,
103
+ ) as PublicKeyObject;
104
+ const publicKey = new CryptoKey(
105
+ pub,
106
+ { name: variant } as SubtleAlgorithm,
107
+ publicUsages,
108
+ true,
109
+ );
110
+
111
+ const priv = KeyObject.createKeyObject(
112
+ 'private',
113
+ privateKeyData,
114
+ KFormatType.DER,
115
+ KeyEncoding.PKCS8,
116
+ ) as PrivateKeyObjectClass;
117
+ const privateKey = new CryptoKey(
118
+ priv,
119
+ { name: variant } as SubtleAlgorithm,
120
+ privateUsages,
121
+ extractable,
122
+ );
123
+
124
+ return { publicKey, privateKey };
125
+ }
@@ -0,0 +1,29 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+
3
+ export interface MlDsaKeyPair
4
+ extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
5
+ generateKeyPair(
6
+ publicFormat: number,
7
+ publicType: number,
8
+ privateFormat: number,
9
+ privateType: number,
10
+ ): Promise<void>;
11
+
12
+ generateKeyPairSync(
13
+ publicFormat: number,
14
+ publicType: number,
15
+ privateFormat: number,
16
+ privateType: number,
17
+ ): void;
18
+
19
+ getPublicKey(): ArrayBuffer;
20
+ getPrivateKey(): ArrayBuffer;
21
+
22
+ sign(message: ArrayBuffer): Promise<ArrayBuffer>;
23
+ signSync(message: ArrayBuffer): ArrayBuffer;
24
+
25
+ verify(signature: ArrayBuffer, message: ArrayBuffer): Promise<boolean>;
26
+ verifySync(signature: ArrayBuffer, message: ArrayBuffer): boolean;
27
+
28
+ setVariant(variant: string): void;
29
+ }