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.
- package/QuickCrypto.podspec +19 -52
- package/android/CMakeLists.txt +4 -2
- package/android/build.gradle +1 -1
- package/cpp/cipher/HybridCipher.cpp +20 -3
- package/cpp/cipher/HybridRsaCipher.cpp +20 -1
- package/cpp/ed25519/HybridEdKeyPair.cpp +8 -2
- package/cpp/keys/HybridKeyObjectHandle.cpp +8 -0
- package/cpp/keys/KeyObjectData.hpp +1 -1
- package/cpp/mldsa/HybridMlDsaKeyPair.cpp +264 -0
- package/cpp/mldsa/HybridMlDsaKeyPair.hpp +47 -0
- package/cpp/sign/HybridSignHandle.cpp +97 -22
- package/cpp/sign/HybridVerifyHandle.cpp +90 -21
- package/deps/ncrypto/.bazelignore +4 -0
- package/deps/ncrypto/.bazelrc +2 -0
- package/deps/ncrypto/.bazelversion +1 -0
- package/deps/ncrypto/.clang-format +111 -0
- package/deps/ncrypto/.github/workflows/bazel.yml +58 -0
- package/deps/ncrypto/.github/workflows/linter.yml +38 -0
- package/deps/ncrypto/.github/workflows/macos.yml +43 -0
- package/deps/ncrypto/.github/workflows/ubuntu.yml +46 -0
- package/deps/ncrypto/.github/workflows/visual-studio.yml +49 -0
- package/deps/ncrypto/.python-version +1 -0
- package/deps/ncrypto/BUILD.bazel +36 -0
- package/deps/ncrypto/CMakeLists.txt +55 -0
- package/deps/ncrypto/LICENSE +21 -0
- package/deps/ncrypto/MODULE.bazel +1 -0
- package/deps/ncrypto/MODULE.bazel.lock +280 -0
- package/deps/ncrypto/README.md +18 -0
- package/deps/ncrypto/WORKSPACE +15 -0
- package/deps/ncrypto/cmake/CPM.cmake +1225 -0
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +16 -0
- package/deps/ncrypto/include/dh-primes.h +67 -0
- package/deps/ncrypto/{ncrypto.h → include/ncrypto.h} +361 -89
- package/deps/ncrypto/patches/0001-Expose-libdecrepit-so-NodeJS-can-use-it-for-ncrypto.patch +28 -0
- package/deps/ncrypto/pyproject.toml +38 -0
- package/deps/ncrypto/src/CMakeLists.txt +15 -0
- package/deps/ncrypto/src/engine.cpp +93 -0
- package/deps/ncrypto/{ncrypto.cc → src/ncrypto.cpp} +1168 -234
- package/deps/ncrypto/tests/BUILD.bazel +9 -0
- package/deps/ncrypto/tests/CMakeLists.txt +7 -0
- package/deps/ncrypto/tests/basic.cpp +86 -0
- package/deps/ncrypto/tools/run-clang-format.sh +42 -0
- package/lib/commonjs/ed.js +68 -0
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/keys/classes.js +6 -0
- package/lib/commonjs/keys/classes.js.map +1 -1
- package/lib/commonjs/mldsa.js +69 -0
- package/lib/commonjs/mldsa.js.map +1 -0
- package/lib/commonjs/specs/mlDsaKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/mlDsaKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/subtle.js +483 -13
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/module/ed.js +66 -0
- package/lib/module/ed.js.map +1 -1
- package/lib/module/keys/classes.js +6 -0
- package/lib/module/keys/classes.js.map +1 -1
- package/lib/module/mldsa.js +63 -0
- package/lib/module/mldsa.js.map +1 -0
- package/lib/module/specs/mlDsaKeyPair.nitro.js +4 -0
- package/lib/module/specs/mlDsaKeyPair.nitro.js.map +1 -0
- package/lib/module/subtle.js +484 -14
- package/lib/module/subtle.js.map +1 -1
- package/lib/module/utils/types.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/ed.d.ts +4 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +2 -0
- package/lib/typescript/keys/classes.d.ts.map +1 -1
- package/lib/typescript/mldsa.d.ts +18 -0
- package/lib/typescript/mldsa.d.ts.map +1 -0
- package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts +16 -0
- package/lib/typescript/specs/mlDsaKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/subtle.d.ts +4 -1
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +14 -6
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +1 -0
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +10 -0
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +10 -0
- package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +12 -0
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +29 -0
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +73 -0
- package/package.json +7 -3
- package/src/ed.ts +102 -0
- package/src/keys/classes.ts +9 -0
- package/src/mldsa.ts +125 -0
- package/src/specs/mlDsaKeyPair.nitro.ts +29 -0
- package/src/subtle.ts +667 -17
- 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
|
+
}
|