react-native-quick-crypto 1.0.9 → 1.0.11
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 +9 -2
- package/README.md +13 -9
- package/android/CMakeLists.txt +13 -0
- package/cpp/argon2/HybridArgon2.cpp +103 -0
- package/cpp/argon2/HybridArgon2.hpp +32 -0
- package/cpp/certificate/HybridCertificate.cpp +42 -0
- package/cpp/certificate/HybridCertificate.hpp +16 -0
- package/cpp/cipher/HybridCipher.cpp +58 -0
- package/cpp/cipher/HybridCipher.hpp +4 -0
- package/cpp/cipher/HybridCipherFactory.hpp +15 -1
- package/cpp/cipher/OCBCipher.cpp +4 -4
- package/cpp/cipher/XChaCha20Poly1305Cipher.cpp +161 -0
- package/cpp/cipher/XChaCha20Poly1305Cipher.hpp +43 -0
- package/cpp/cipher/XSalsa20Poly1305Cipher.cpp +145 -0
- package/cpp/cipher/XSalsa20Poly1305Cipher.hpp +42 -0
- package/cpp/dh/HybridDhKeyPair.cpp +179 -0
- package/cpp/dh/HybridDhKeyPair.hpp +37 -0
- package/cpp/dh/HybridDiffieHellman.cpp +10 -0
- package/cpp/dh/HybridDiffieHellman.hpp +1 -0
- package/cpp/dsa/HybridDsaKeyPair.cpp +128 -0
- package/cpp/dsa/HybridDsaKeyPair.hpp +32 -0
- package/cpp/ec/HybridEcKeyPair.cpp +21 -0
- package/cpp/ec/HybridEcKeyPair.hpp +1 -0
- package/cpp/ecdh/HybridECDH.cpp +35 -0
- package/cpp/ecdh/HybridECDH.hpp +1 -0
- package/cpp/hash/HybridHash.cpp +1 -1
- package/cpp/hash/HybridHash.hpp +1 -1
- package/cpp/hmac/HybridHmac.cpp +1 -1
- package/cpp/hmac/HybridHmac.hpp +1 -1
- package/cpp/keys/HybridKeyObjectHandle.cpp +131 -1
- package/cpp/keys/HybridKeyObjectHandle.hpp +5 -1
- package/cpp/prime/HybridPrime.cpp +81 -0
- package/cpp/prime/HybridPrime.hpp +20 -0
- package/deps/ncrypto/.bazelrc +0 -1
- package/deps/ncrypto/.bazelversion +1 -1
- package/deps/ncrypto/.github/workflows/commitlint.yml +16 -0
- package/deps/ncrypto/.github/workflows/linter.yml +2 -2
- package/deps/ncrypto/.github/workflows/release-please.yml +16 -0
- package/deps/ncrypto/.github/workflows/ubuntu.yml +82 -0
- package/deps/ncrypto/.release-please-manifest.json +3 -0
- package/deps/ncrypto/BUILD.bazel +9 -1
- package/deps/ncrypto/CHANGELOG.md +37 -0
- package/deps/ncrypto/CMakeLists.txt +35 -11
- package/deps/ncrypto/MODULE.bazel +16 -1
- package/deps/ncrypto/MODULE.bazel.lock +299 -118
- package/deps/ncrypto/cmake/ncrypto-flags.cmake +1 -0
- package/deps/ncrypto/include/ncrypto/aead.h +137 -0
- package/deps/ncrypto/include/ncrypto/version.h +14 -0
- package/deps/ncrypto/include/ncrypto.h +85 -230
- package/deps/ncrypto/ncrypto.pc.in +10 -0
- package/deps/ncrypto/release-please-config.json +11 -0
- package/deps/ncrypto/src/CMakeLists.txt +31 -6
- package/deps/ncrypto/src/aead.cpp +302 -0
- package/deps/ncrypto/src/ncrypto.cpp +274 -556
- package/deps/ncrypto/tests/BUILD.bazel +2 -0
- package/deps/ncrypto/tests/basic.cpp +772 -2
- package/deps/ncrypto/tools/run-clang-format.sh +5 -5
- package/lib/commonjs/argon2.js +39 -0
- package/lib/commonjs/argon2.js.map +1 -0
- package/lib/commonjs/certificate.js +35 -0
- package/lib/commonjs/certificate.js.map +1 -0
- package/lib/commonjs/cipher.js +8 -0
- package/lib/commonjs/cipher.js.map +1 -1
- package/lib/commonjs/dhKeyPair.js +109 -0
- package/lib/commonjs/dhKeyPair.js.map +1 -0
- package/lib/commonjs/diffie-hellman.js +4 -1
- package/lib/commonjs/diffie-hellman.js.map +1 -1
- package/lib/commonjs/dsa.js +92 -0
- package/lib/commonjs/dsa.js.map +1 -0
- package/lib/commonjs/ec.js +20 -25
- package/lib/commonjs/ec.js.map +1 -1
- package/lib/commonjs/ecdh.js +37 -0
- package/lib/commonjs/ecdh.js.map +1 -1
- package/lib/commonjs/ed.js +1 -2
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/hash.js +7 -0
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/index.js +46 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/keys/classes.js +18 -12
- package/lib/commonjs/keys/classes.js.map +1 -1
- package/lib/commonjs/keys/generateKeyPair.js +11 -0
- package/lib/commonjs/keys/generateKeyPair.js.map +1 -1
- package/lib/commonjs/prime.js +84 -0
- package/lib/commonjs/prime.js.map +1 -0
- package/lib/commonjs/specs/argon2.nitro.js +6 -0
- package/lib/commonjs/specs/argon2.nitro.js.map +1 -0
- package/lib/commonjs/specs/certificate.nitro.js +6 -0
- package/lib/commonjs/specs/certificate.nitro.js.map +1 -0
- package/lib/commonjs/specs/dhKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/dhKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/dsaKeyPair.nitro.js +6 -0
- package/lib/commonjs/specs/dsaKeyPair.nitro.js.map +1 -0
- package/lib/commonjs/specs/prime.nitro.js +6 -0
- package/lib/commonjs/specs/prime.nitro.js.map +1 -0
- package/lib/commonjs/subtle.js +181 -39
- package/lib/commonjs/subtle.js.map +1 -1
- package/lib/commonjs/utils/types.js.map +1 -1
- package/lib/module/argon2.js +34 -0
- package/lib/module/argon2.js.map +1 -0
- package/lib/module/certificate.js +30 -0
- package/lib/module/certificate.js.map +1 -0
- package/lib/module/cipher.js +7 -0
- package/lib/module/cipher.js.map +1 -1
- package/lib/module/dhKeyPair.js +102 -0
- package/lib/module/dhKeyPair.js.map +1 -0
- package/lib/module/diffie-hellman.js +4 -0
- package/lib/module/diffie-hellman.js.map +1 -1
- package/lib/module/dsa.js +85 -0
- package/lib/module/dsa.js.map +1 -0
- package/lib/module/ec.js +19 -25
- package/lib/module/ec.js.map +1 -1
- package/lib/module/ecdh.js +37 -0
- package/lib/module/ecdh.js.map +1 -1
- package/lib/module/ed.js +1 -2
- package/lib/module/ed.js.map +1 -1
- package/lib/module/hash.js +6 -0
- package/lib/module/hash.js.map +1 -1
- package/lib/module/index.js +12 -0
- package/lib/module/index.js.map +1 -1
- package/lib/module/keys/classes.js +18 -12
- package/lib/module/keys/classes.js.map +1 -1
- package/lib/module/keys/generateKeyPair.js +11 -0
- package/lib/module/keys/generateKeyPair.js.map +1 -1
- package/lib/module/prime.js +77 -0
- package/lib/module/prime.js.map +1 -0
- package/lib/module/specs/argon2.nitro.js +4 -0
- package/lib/module/specs/argon2.nitro.js.map +1 -0
- package/lib/module/specs/certificate.nitro.js +4 -0
- package/lib/module/specs/certificate.nitro.js.map +1 -0
- package/lib/module/specs/dhKeyPair.nitro.js +4 -0
- package/lib/module/specs/dhKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/dsaKeyPair.nitro.js +4 -0
- package/lib/module/specs/dsaKeyPair.nitro.js.map +1 -0
- package/lib/module/specs/prime.nitro.js +4 -0
- package/lib/module/specs/prime.nitro.js.map +1 -0
- package/lib/module/subtle.js +183 -42
- 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/argon2.d.ts +16 -0
- package/lib/typescript/argon2.d.ts.map +1 -0
- package/lib/typescript/certificate.d.ts +8 -0
- package/lib/typescript/certificate.d.ts.map +1 -0
- package/lib/typescript/cipher.d.ts +12 -0
- package/lib/typescript/cipher.d.ts.map +1 -1
- package/lib/typescript/dhKeyPair.d.ts +19 -0
- package/lib/typescript/dhKeyPair.d.ts.map +1 -0
- package/lib/typescript/diffie-hellman.d.ts +2 -0
- package/lib/typescript/diffie-hellman.d.ts.map +1 -1
- package/lib/typescript/dsa.d.ts +19 -0
- package/lib/typescript/dsa.d.ts.map +1 -0
- package/lib/typescript/ec.d.ts +1 -0
- package/lib/typescript/ec.d.ts.map +1 -1
- package/lib/typescript/ecdh.d.ts +3 -0
- package/lib/typescript/ecdh.d.ts.map +1 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +2 -0
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +22 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/classes.d.ts +4 -0
- package/lib/typescript/keys/classes.d.ts.map +1 -1
- package/lib/typescript/keys/generateKeyPair.d.ts.map +1 -1
- package/lib/typescript/prime.d.ts +19 -0
- package/lib/typescript/prime.d.ts.map +1 -0
- package/lib/typescript/specs/argon2.nitro.d.ts +9 -0
- package/lib/typescript/specs/argon2.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/certificate.nitro.d.ts +10 -0
- package/lib/typescript/specs/certificate.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/cipher.nitro.d.ts +9 -0
- package/lib/typescript/specs/cipher.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/dhKeyPair.nitro.d.ts +14 -0
- package/lib/typescript/specs/dhKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/diffie-hellman.nitro.d.ts +1 -0
- package/lib/typescript/specs/diffie-hellman.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/dsaKeyPair.nitro.d.ts +13 -0
- package/lib/typescript/specs/dsaKeyPair.nitro.d.ts.map +1 -0
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts +1 -0
- package/lib/typescript/specs/ecKeyPair.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/ecdh.nitro.d.ts +1 -0
- package/lib/typescript/specs/ecdh.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts +2 -0
- package/lib/typescript/specs/keyObjectHandle.nitro.d.ts.map +1 -1
- package/lib/typescript/specs/prime.nitro.d.ts +11 -0
- package/lib/typescript/specs/prime.nitro.d.ts.map +1 -0
- package/lib/typescript/subtle.d.ts +2 -0
- package/lib/typescript/subtle.d.ts.map +1 -1
- package/lib/typescript/utils/types.d.ts +24 -7
- package/lib/typescript/utils/types.d.ts.map +1 -1
- package/nitrogen/generated/android/QuickCrypto+autolinking.cmake +13 -5
- package/nitrogen/generated/android/QuickCrypto+autolinking.gradle +1 -1
- package/nitrogen/generated/android/QuickCryptoOnLoad.cpp +104 -54
- package/nitrogen/generated/android/QuickCryptoOnLoad.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/crypto/QuickCryptoOnLoad.kt +1 -1
- package/nitrogen/generated/ios/QuickCrypto+autolinking.rb +2 -2
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.cpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Bridge.hpp +1 -1
- package/nitrogen/generated/ios/QuickCrypto-Swift-Cxx-Umbrella.hpp +1 -1
- package/nitrogen/generated/ios/QuickCryptoAutolinking.mm +104 -54
- package/nitrogen/generated/ios/QuickCryptoAutolinking.swift +5 -1
- package/nitrogen/generated/shared/c++/AsymmetricKeyType.hpp +1 -1
- package/nitrogen/generated/shared/c++/CipherArgs.hpp +34 -19
- package/nitrogen/generated/shared/c++/CipherInfo.hpp +104 -0
- package/nitrogen/generated/shared/c++/HybridArgon2Spec.cpp +22 -0
- package/nitrogen/generated/shared/c++/HybridArgon2Spec.hpp +66 -0
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridBlake3Spec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridCertificateSpec.cpp +23 -0
- package/nitrogen/generated/shared/c++/HybridCertificateSpec.hpp +64 -0
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridCipherFactorySpec.hpp +1 -1
- package/nitrogen/generated/shared/c++/HybridCipherSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridCipherSpec.hpp +5 -3
- package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.cpp +27 -0
- package/nitrogen/generated/shared/c++/HybridDhKeyPairSpec.hpp +69 -0
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridDiffieHellmanSpec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.cpp +26 -0
- package/nitrogen/generated/shared/c++/HybridDsaKeyPairSpec.hpp +68 -0
- package/nitrogen/generated/shared/c++/HybridECDHSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridECDHSpec.hpp +3 -3
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.cpp +2 -1
- package/nitrogen/generated/shared/c++/HybridEcKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridEdKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridHashSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHashSpec.hpp +2 -4
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHkdfSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridHmacSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridHmacSpec.hpp +3 -4
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.cpp +3 -1
- package/nitrogen/generated/shared/c++/HybridKeyObjectHandleSpec.hpp +8 -4
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridMlDsaKeyPairSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridPbkdf2Spec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridPrimeSpec.cpp +24 -0
- package/nitrogen/generated/shared/c++/HybridPrimeSpec.hpp +67 -0
- package/nitrogen/generated/shared/c++/HybridRandomSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRandomSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRsaCipherSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridRsaKeyPairSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridScryptSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridScryptSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridSignHandleSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +2 -3
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.cpp +1 -1
- package/nitrogen/generated/shared/c++/HybridVerifyHandleSpec.hpp +1 -3
- package/nitrogen/generated/shared/c++/JWK.hpp +84 -68
- package/nitrogen/generated/shared/c++/JWKkty.hpp +5 -1
- package/nitrogen/generated/shared/c++/JWKuse.hpp +1 -1
- package/nitrogen/generated/shared/c++/KFormatType.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyDetail.hpp +39 -23
- package/nitrogen/generated/shared/c++/KeyEncoding.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyObject.hpp +21 -5
- package/nitrogen/generated/shared/c++/KeyType.hpp +1 -1
- package/nitrogen/generated/shared/c++/KeyUsage.hpp +1 -1
- package/nitrogen/generated/shared/c++/NamedCurve.hpp +1 -1
- package/package.json +1 -1
- package/src/argon2.ts +83 -0
- package/src/certificate.ts +41 -0
- package/src/cipher.ts +24 -0
- package/src/dhKeyPair.ts +156 -0
- package/src/diffie-hellman.ts +6 -0
- package/src/dsa.ts +129 -0
- package/src/ec.ts +23 -19
- package/src/ecdh.ts +59 -0
- package/src/ed.ts +1 -2
- package/src/hash.ts +11 -0
- package/src/index.ts +12 -0
- package/src/keys/classes.ts +26 -8
- package/src/keys/generateKeyPair.ts +14 -0
- package/src/prime.ts +134 -0
- package/src/specs/argon2.nitro.ts +29 -0
- package/src/specs/certificate.nitro.ts +8 -0
- package/src/specs/cipher.nitro.ts +14 -0
- package/src/specs/dhKeyPair.nitro.ts +14 -0
- package/src/specs/diffie-hellman.nitro.ts +1 -0
- package/src/specs/dsaKeyPair.nitro.ts +13 -0
- package/src/specs/ecKeyPair.nitro.ts +2 -0
- package/src/specs/ecdh.nitro.ts +1 -0
- package/src/specs/keyObjectHandle.nitro.ts +2 -0
- package/src/specs/prime.nitro.ts +18 -0
- package/src/subtle.ts +400 -42
- package/src/utils/types.ts +39 -5
- package/deps/ncrypto/WORKSPACE +0 -15
package/src/dsa.ts
ADDED
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
2
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
3
|
+
import { KeyObject, PublicKeyObject, PrivateKeyObject } from './keys';
|
|
4
|
+
import type { DsaKeyPair } from './specs/dsaKeyPair.nitro';
|
|
5
|
+
import type { GenerateKeyPairOptions, KeyPairGenConfig } from './utils/types';
|
|
6
|
+
import { KFormatType, KeyEncoding } from './utils';
|
|
7
|
+
|
|
8
|
+
export class Dsa {
|
|
9
|
+
native: DsaKeyPair;
|
|
10
|
+
|
|
11
|
+
constructor(modulusLength: number, divisorLength?: number) {
|
|
12
|
+
this.native = NitroModules.createHybridObject<DsaKeyPair>('DsaKeyPair');
|
|
13
|
+
this.native.setModulusLength(modulusLength);
|
|
14
|
+
if (divisorLength !== undefined && divisorLength >= 0) {
|
|
15
|
+
this.native.setDivisorLength(divisorLength);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async generateKeyPair(): Promise<void> {
|
|
20
|
+
await this.native.generateKeyPair();
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
generateKeyPairSync(): void {
|
|
24
|
+
this.native.generateKeyPairSync();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function dsa_prepareKeyGenParams(
|
|
29
|
+
options: GenerateKeyPairOptions | undefined,
|
|
30
|
+
): Dsa {
|
|
31
|
+
if (!options) {
|
|
32
|
+
throw new Error('Options are required for DSA key generation');
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const { modulusLength, divisorLength } = options;
|
|
36
|
+
|
|
37
|
+
if (!modulusLength || modulusLength <= 0) {
|
|
38
|
+
throw new Error('Invalid or missing modulusLength for DSA key generation');
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return new Dsa(modulusLength, divisorLength);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
function dsa_formatKeyPairOutput(
|
|
45
|
+
dsa: Dsa,
|
|
46
|
+
encoding: KeyPairGenConfig,
|
|
47
|
+
): {
|
|
48
|
+
publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
|
|
49
|
+
privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
|
|
50
|
+
} {
|
|
51
|
+
const { publicFormat, privateFormat, cipher, passphrase } = encoding;
|
|
52
|
+
|
|
53
|
+
const publicKeyData = dsa.native.getPublicKey();
|
|
54
|
+
const privateKeyData = dsa.native.getPrivateKey();
|
|
55
|
+
|
|
56
|
+
const pub = KeyObject.createKeyObject(
|
|
57
|
+
'public',
|
|
58
|
+
publicKeyData,
|
|
59
|
+
KFormatType.DER,
|
|
60
|
+
KeyEncoding.SPKI,
|
|
61
|
+
) as PublicKeyObject;
|
|
62
|
+
|
|
63
|
+
const priv = KeyObject.createKeyObject(
|
|
64
|
+
'private',
|
|
65
|
+
privateKeyData,
|
|
66
|
+
KFormatType.DER,
|
|
67
|
+
KeyEncoding.PKCS8,
|
|
68
|
+
) as PrivateKeyObject;
|
|
69
|
+
|
|
70
|
+
let publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
|
|
71
|
+
let privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
|
|
72
|
+
|
|
73
|
+
if (publicFormat === -1) {
|
|
74
|
+
publicKey = pub;
|
|
75
|
+
} else {
|
|
76
|
+
const format =
|
|
77
|
+
publicFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;
|
|
78
|
+
const exported = pub.handle.exportKey(format, KeyEncoding.SPKI);
|
|
79
|
+
if (format === KFormatType.PEM) {
|
|
80
|
+
publicKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');
|
|
81
|
+
} else {
|
|
82
|
+
publicKey = exported;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
if (privateFormat === -1) {
|
|
87
|
+
privateKey = priv;
|
|
88
|
+
} else {
|
|
89
|
+
const format =
|
|
90
|
+
privateFormat === KFormatType.PEM ? KFormatType.PEM : KFormatType.DER;
|
|
91
|
+
const exported = priv.handle.exportKey(
|
|
92
|
+
format,
|
|
93
|
+
KeyEncoding.PKCS8,
|
|
94
|
+
cipher,
|
|
95
|
+
passphrase,
|
|
96
|
+
);
|
|
97
|
+
if (format === KFormatType.PEM) {
|
|
98
|
+
privateKey = Buffer.from(new Uint8Array(exported)).toString('utf-8');
|
|
99
|
+
} else {
|
|
100
|
+
privateKey = exported;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return { publicKey, privateKey };
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
export async function dsa_generateKeyPairNode(
|
|
108
|
+
options: GenerateKeyPairOptions | undefined,
|
|
109
|
+
encoding: KeyPairGenConfig,
|
|
110
|
+
): Promise<{
|
|
111
|
+
publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
|
|
112
|
+
privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
|
|
113
|
+
}> {
|
|
114
|
+
const dsa = dsa_prepareKeyGenParams(options);
|
|
115
|
+
await dsa.generateKeyPair();
|
|
116
|
+
return dsa_formatKeyPairOutput(dsa, encoding);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export function dsa_generateKeyPairNodeSync(
|
|
120
|
+
options: GenerateKeyPairOptions | undefined,
|
|
121
|
+
encoding: KeyPairGenConfig,
|
|
122
|
+
): {
|
|
123
|
+
publicKey: PublicKeyObject | Buffer | string | ArrayBuffer;
|
|
124
|
+
privateKey: PrivateKeyObject | Buffer | string | ArrayBuffer;
|
|
125
|
+
} {
|
|
126
|
+
const dsa = dsa_prepareKeyGenParams(options);
|
|
127
|
+
dsa.generateKeyPairSync();
|
|
128
|
+
return dsa_formatKeyPairOutput(dsa, encoding);
|
|
129
|
+
}
|
package/src/ec.ts
CHANGED
|
@@ -34,6 +34,23 @@ import {
|
|
|
34
34
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
35
35
|
import { ECDH } from './ecdh';
|
|
36
36
|
|
|
37
|
+
class EcUtils {
|
|
38
|
+
private static _native: EcKeyPair | undefined;
|
|
39
|
+
private static get native(): EcKeyPair {
|
|
40
|
+
if (!this._native) {
|
|
41
|
+
this._native = NitroModules.createHybridObject<EcKeyPair>('EcKeyPair');
|
|
42
|
+
}
|
|
43
|
+
return this._native;
|
|
44
|
+
}
|
|
45
|
+
public static getSupportedCurves(): string[] {
|
|
46
|
+
return this.native.getSupportedCurves();
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export function getCurves(): string[] {
|
|
51
|
+
return EcUtils.getSupportedCurves();
|
|
52
|
+
}
|
|
53
|
+
|
|
37
54
|
export class Ec {
|
|
38
55
|
native: EcKeyPair;
|
|
39
56
|
|
|
@@ -488,8 +505,7 @@ export function ecDeriveBits(
|
|
|
488
505
|
baseKey: CryptoKey,
|
|
489
506
|
length: number | null,
|
|
490
507
|
): ArrayBuffer {
|
|
491
|
-
const
|
|
492
|
-
const publicKey = publicParams.public;
|
|
508
|
+
const publicKey = algorithm.public;
|
|
493
509
|
|
|
494
510
|
if (!publicKey) {
|
|
495
511
|
throw new Error('Public key is required for ECDH derivation');
|
|
@@ -508,31 +524,19 @@ export function ecDeriveBits(
|
|
|
508
524
|
throw new Error('Curve name is missing');
|
|
509
525
|
}
|
|
510
526
|
|
|
511
|
-
|
|
512
|
-
|
|
527
|
+
const opensslCurve =
|
|
528
|
+
kNamedCurveAliases[namedCurve as keyof typeof kNamedCurveAliases];
|
|
529
|
+
const ecdh = new ECDH(opensslCurve);
|
|
513
530
|
|
|
514
|
-
|
|
515
|
-
const jwkPrivate = baseKey.keyObject.export({ format: 'jwk' }) as any;
|
|
531
|
+
const jwkPrivate = baseKey.keyObject.handle.exportJwk({}, false);
|
|
516
532
|
if (!jwkPrivate.d) throw new Error('Invalid private key');
|
|
517
533
|
const privateBytes = Buffer.from(jwkPrivate.d, 'base64');
|
|
518
|
-
|
|
519
534
|
ecdh.setPrivateKey(privateBytes);
|
|
520
535
|
|
|
521
|
-
|
|
522
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
523
|
-
const jwkPublic = publicKey.keyObject.export({ format: 'jwk' }) as any;
|
|
524
|
-
|
|
525
|
-
// HybridECDH `computeSecret` takes public key.
|
|
526
|
-
// My implementation `HybridECDH.cpp` `computeSecret` expects what?
|
|
527
|
-
// `derive_secret` -> `EVP_PKEY_derive_set_peer`
|
|
528
|
-
// `computeSecret` calls `EC_POINT_oct2point`. So it expects an uncompressed/compressed point (04... or 02/03...).
|
|
529
|
-
// JWK gives `x` and `y`. We can construct the uncompressed point 04 + x + y.
|
|
530
|
-
|
|
536
|
+
const jwkPublic = publicKey.keyObject.handle.exportJwk({}, false);
|
|
531
537
|
if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');
|
|
532
538
|
const x = Buffer.from(jwkPublic.x, 'base64');
|
|
533
539
|
const y = Buffer.from(jwkPublic.y, 'base64');
|
|
534
|
-
|
|
535
|
-
// Uncompressed point: 0x04 || x || y
|
|
536
540
|
const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);
|
|
537
541
|
|
|
538
542
|
const secret = ecdh.computeSecret(publicBytes);
|
package/src/ecdh.ts
CHANGED
|
@@ -2,7 +2,20 @@ import { NitroModules } from 'react-native-nitro-modules';
|
|
|
2
2
|
import type { ECDH as ECDHInterface } from './specs/ecdh.nitro';
|
|
3
3
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
4
4
|
|
|
5
|
+
const POINT_CONVERSION_COMPRESSED = 2;
|
|
6
|
+
const POINT_CONVERSION_UNCOMPRESSED = 4;
|
|
7
|
+
const POINT_CONVERSION_HYBRID = 6;
|
|
8
|
+
|
|
5
9
|
export class ECDH {
|
|
10
|
+
private static _convertKeyHybrid: ECDHInterface | undefined;
|
|
11
|
+
private static get convertKeyHybrid(): ECDHInterface {
|
|
12
|
+
if (!this._convertKeyHybrid) {
|
|
13
|
+
this._convertKeyHybrid =
|
|
14
|
+
NitroModules.createHybridObject<ECDHInterface>('ECDH');
|
|
15
|
+
}
|
|
16
|
+
return this._convertKeyHybrid;
|
|
17
|
+
}
|
|
18
|
+
|
|
6
19
|
private _hybrid: ECDHInterface;
|
|
7
20
|
|
|
8
21
|
constructor(curveName: string) {
|
|
@@ -69,6 +82,52 @@ export class ECDH {
|
|
|
69
82
|
}
|
|
70
83
|
this._hybrid.setPublicKey(keyBuf.buffer as ArrayBuffer);
|
|
71
84
|
}
|
|
85
|
+
|
|
86
|
+
static convertKey(
|
|
87
|
+
key: Buffer | string,
|
|
88
|
+
curve: string,
|
|
89
|
+
inputEncoding?: BufferEncoding,
|
|
90
|
+
outputEncoding?: BufferEncoding,
|
|
91
|
+
format?: 'uncompressed' | 'compressed' | 'hybrid',
|
|
92
|
+
): Buffer | string {
|
|
93
|
+
let keyBuf: Buffer;
|
|
94
|
+
if (Buffer.isBuffer(key)) {
|
|
95
|
+
keyBuf = key;
|
|
96
|
+
} else {
|
|
97
|
+
keyBuf = Buffer.from(key, inputEncoding);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
let formatNum: number;
|
|
101
|
+
switch (format) {
|
|
102
|
+
case 'compressed':
|
|
103
|
+
formatNum = POINT_CONVERSION_COMPRESSED;
|
|
104
|
+
break;
|
|
105
|
+
case 'hybrid':
|
|
106
|
+
formatNum = POINT_CONVERSION_HYBRID;
|
|
107
|
+
break;
|
|
108
|
+
case 'uncompressed':
|
|
109
|
+
case undefined:
|
|
110
|
+
formatNum = POINT_CONVERSION_UNCOMPRESSED;
|
|
111
|
+
break;
|
|
112
|
+
default:
|
|
113
|
+
throw new TypeError(
|
|
114
|
+
`Invalid point conversion format: ${format as string}`,
|
|
115
|
+
);
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const result = Buffer.from(
|
|
119
|
+
ECDH.convertKeyHybrid.convertKey(
|
|
120
|
+
keyBuf.buffer as ArrayBuffer,
|
|
121
|
+
curve,
|
|
122
|
+
formatNum,
|
|
123
|
+
),
|
|
124
|
+
);
|
|
125
|
+
|
|
126
|
+
if (outputEncoding) {
|
|
127
|
+
return result.toString(outputEncoding);
|
|
128
|
+
}
|
|
129
|
+
return result;
|
|
130
|
+
}
|
|
72
131
|
}
|
|
73
132
|
|
|
74
133
|
export function createECDH(curveName: string): ECDH {
|
package/src/ed.ts
CHANGED
|
@@ -427,8 +427,7 @@ export function xDeriveBits(
|
|
|
427
427
|
baseKey: CryptoKey,
|
|
428
428
|
length: number | null,
|
|
429
429
|
): ArrayBuffer {
|
|
430
|
-
const
|
|
431
|
-
const publicKey = publicParams.public;
|
|
430
|
+
const publicKey = algorithm.public;
|
|
432
431
|
|
|
433
432
|
if (!publicKey) {
|
|
434
433
|
throw new Error('Public key is required for X25519/X448 derivation');
|
package/src/hash.ts
CHANGED
|
@@ -272,8 +272,19 @@ const internalDigest = (
|
|
|
272
272
|
return arrayBuffer;
|
|
273
273
|
};
|
|
274
274
|
|
|
275
|
+
export function hash(
|
|
276
|
+
algorithm: string,
|
|
277
|
+
data: BinaryLike,
|
|
278
|
+
outputEncoding?: Encoding,
|
|
279
|
+
): string | Buffer {
|
|
280
|
+
const h = createHash(algorithm);
|
|
281
|
+
h.update(data);
|
|
282
|
+
return outputEncoding ? h.digest(outputEncoding) : h.digest();
|
|
283
|
+
}
|
|
284
|
+
|
|
275
285
|
export const hashExports = {
|
|
276
286
|
createHash,
|
|
277
287
|
getHashes,
|
|
288
|
+
hash,
|
|
278
289
|
asyncDigest,
|
|
279
290
|
};
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
3
3
|
|
|
4
4
|
// API imports
|
|
5
|
+
import * as argon2Module from './argon2';
|
|
5
6
|
import * as keys from './keys';
|
|
6
7
|
import * as blake3 from './blake3';
|
|
7
8
|
import * as cipher from './cipher';
|
|
@@ -10,10 +11,13 @@ import { hashExports as hash } from './hash';
|
|
|
10
11
|
import { hmacExports as hmac } from './hmac';
|
|
11
12
|
import * as hkdf from './hkdf';
|
|
12
13
|
import * as pbkdf2 from './pbkdf2';
|
|
14
|
+
import * as prime from './prime';
|
|
13
15
|
import * as scrypt from './scrypt';
|
|
14
16
|
import * as random from './random';
|
|
15
17
|
import * as ecdh from './ecdh';
|
|
16
18
|
import * as dh from './diffie-hellman';
|
|
19
|
+
import { Certificate } from './certificate';
|
|
20
|
+
import { getCurves } from './ec';
|
|
17
21
|
import { constants } from './constants';
|
|
18
22
|
|
|
19
23
|
// utils import
|
|
@@ -25,6 +29,7 @@ import * as subtle from './subtle';
|
|
|
25
29
|
* See `docs/implementation-coverage.md` for status.
|
|
26
30
|
*/
|
|
27
31
|
const QuickCrypto = {
|
|
32
|
+
...argon2Module,
|
|
28
33
|
...keys,
|
|
29
34
|
...blake3,
|
|
30
35
|
...cipher,
|
|
@@ -33,12 +38,15 @@ const QuickCrypto = {
|
|
|
33
38
|
...hmac,
|
|
34
39
|
...hkdf,
|
|
35
40
|
...pbkdf2,
|
|
41
|
+
...prime,
|
|
36
42
|
...scrypt,
|
|
37
43
|
...random,
|
|
38
44
|
...ecdh,
|
|
39
45
|
...dh,
|
|
40
46
|
...utils,
|
|
41
47
|
...subtle,
|
|
48
|
+
Certificate,
|
|
49
|
+
getCurves,
|
|
42
50
|
constants,
|
|
43
51
|
Buffer,
|
|
44
52
|
};
|
|
@@ -70,7 +78,9 @@ if (global.process.nextTick == null) {
|
|
|
70
78
|
|
|
71
79
|
// exports
|
|
72
80
|
export default QuickCrypto;
|
|
81
|
+
export * from './argon2';
|
|
73
82
|
export * from './blake3';
|
|
83
|
+
export { Certificate } from './certificate';
|
|
74
84
|
export * from './cipher';
|
|
75
85
|
export * from './ed';
|
|
76
86
|
export * from './keys';
|
|
@@ -78,9 +88,11 @@ export * from './hash';
|
|
|
78
88
|
export * from './hmac';
|
|
79
89
|
export * from './hkdf';
|
|
80
90
|
export * from './pbkdf2';
|
|
91
|
+
export * from './prime';
|
|
81
92
|
export * from './scrypt';
|
|
82
93
|
export * from './random';
|
|
83
94
|
export * from './ecdh';
|
|
95
|
+
export { getCurves } from './ec';
|
|
84
96
|
export * from './diffie-hellman';
|
|
85
97
|
export * from './utils';
|
|
86
98
|
export * from './subtle';
|
package/src/keys/classes.ts
CHANGED
|
@@ -89,6 +89,13 @@ export class KeyObject {
|
|
|
89
89
|
throw new Error('export() must be implemented by subclasses');
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
+
equals(otherKeyObject: KeyObject): boolean {
|
|
93
|
+
if (!(otherKeyObject instanceof KeyObject)) {
|
|
94
|
+
throw new TypeError('otherKeyObject must be a KeyObject');
|
|
95
|
+
}
|
|
96
|
+
return this.handle.keyEquals(otherKeyObject.handle);
|
|
97
|
+
}
|
|
98
|
+
|
|
92
99
|
constructor(type: string, handle: KeyObjectHandle);
|
|
93
100
|
constructor(type: string, key: ArrayBuffer);
|
|
94
101
|
constructor(type: string, handleOrKey: KeyObjectHandle | ArrayBuffer) {
|
|
@@ -119,11 +126,22 @@ export class KeyObject {
|
|
|
119
126
|
this.type = type as 'public' | 'secret' | 'private';
|
|
120
127
|
}
|
|
121
128
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
129
|
+
static from(key: CryptoKey): KeyObject {
|
|
130
|
+
if (!(key instanceof CryptoKey)) {
|
|
131
|
+
throw new TypeError(
|
|
132
|
+
`The "key" argument must be an instance of CryptoKey. Received ${typeof key}`,
|
|
133
|
+
);
|
|
134
|
+
}
|
|
135
|
+
return key.keyObject;
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
toCryptoKey(
|
|
139
|
+
algorithm: SubtleAlgorithm,
|
|
140
|
+
extractable: boolean,
|
|
141
|
+
keyUsages: KeyUsage[],
|
|
142
|
+
): CryptoKey {
|
|
143
|
+
return new CryptoKey(this, algorithm, keyUsages, extractable);
|
|
144
|
+
}
|
|
127
145
|
|
|
128
146
|
static createKeyObject(
|
|
129
147
|
type: string,
|
|
@@ -197,9 +215,9 @@ export class SecretKeyObject extends KeyObject {
|
|
|
197
215
|
super('secret', handle);
|
|
198
216
|
}
|
|
199
217
|
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
218
|
+
get symmetricKeySize(): number {
|
|
219
|
+
return this.handle.getSymmetricKeySize();
|
|
220
|
+
}
|
|
203
221
|
|
|
204
222
|
export(options: { format: 'pem' } & EncodingOptions): never;
|
|
205
223
|
export(options: { format: 'der' } & EncodingOptions): Buffer;
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
import { ed_generateKeyPair } from '../ed';
|
|
2
2
|
import { rsa_generateKeyPairNode, rsa_generateKeyPairNodeSync } from '../rsa';
|
|
3
3
|
import { ec_generateKeyPairNode, ec_generateKeyPairNodeSync } from '../ec';
|
|
4
|
+
import { dsa_generateKeyPairNode, dsa_generateKeyPairNodeSync } from '../dsa';
|
|
5
|
+
import {
|
|
6
|
+
dh_generateKeyPairNode,
|
|
7
|
+
dh_generateKeyPairNodeSync,
|
|
8
|
+
} from '../dhKeyPair';
|
|
4
9
|
import {
|
|
5
10
|
kEmptyObject,
|
|
6
11
|
validateFunction,
|
|
@@ -139,6 +144,7 @@ function internalGenerateKeyPair(
|
|
|
139
144
|
case 'rsa-pss':
|
|
140
145
|
case 'dsa':
|
|
141
146
|
case 'ec':
|
|
147
|
+
case 'dh':
|
|
142
148
|
break;
|
|
143
149
|
default: {
|
|
144
150
|
const err = new Error(`
|
|
@@ -158,6 +164,10 @@ function internalGenerateKeyPair(
|
|
|
158
164
|
result = await rsa_generateKeyPairNode(type, options, encoding);
|
|
159
165
|
} else if (type === 'ec') {
|
|
160
166
|
result = await ec_generateKeyPairNode(options, encoding);
|
|
167
|
+
} else if (type === 'dsa') {
|
|
168
|
+
result = await dsa_generateKeyPairNode(options, encoding);
|
|
169
|
+
} else if (type === 'dh') {
|
|
170
|
+
result = await dh_generateKeyPairNode(options, encoding);
|
|
161
171
|
} else {
|
|
162
172
|
throw new Error(`Unsupported key type: ${type}`);
|
|
163
173
|
}
|
|
@@ -184,6 +194,10 @@ function internalGenerateKeyPair(
|
|
|
184
194
|
result = rsa_generateKeyPairNodeSync(type, options, encoding);
|
|
185
195
|
} else if (type === 'ec') {
|
|
186
196
|
result = ec_generateKeyPairNodeSync(options, encoding);
|
|
197
|
+
} else if (type === 'dsa') {
|
|
198
|
+
result = dsa_generateKeyPairNodeSync(options, encoding);
|
|
199
|
+
} else if (type === 'dh') {
|
|
200
|
+
result = dh_generateKeyPairNodeSync(options, encoding);
|
|
187
201
|
} else {
|
|
188
202
|
throw new Error(`Unsupported key type: ${type}`);
|
|
189
203
|
}
|
package/src/prime.ts
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
2
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
3
|
+
import type { Prime as NativePrime } from './specs/prime.nitro';
|
|
4
|
+
import type { BinaryLike } from './utils';
|
|
5
|
+
import { binaryLikeToArrayBuffer } from './utils';
|
|
6
|
+
|
|
7
|
+
let native: NativePrime;
|
|
8
|
+
function getNative(): NativePrime {
|
|
9
|
+
if (native == null) {
|
|
10
|
+
native = NitroModules.createHybridObject<NativePrime>('Prime');
|
|
11
|
+
}
|
|
12
|
+
return native;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export interface GeneratePrimeOptions {
|
|
16
|
+
safe?: boolean;
|
|
17
|
+
bigint?: boolean;
|
|
18
|
+
add?: ArrayBuffer | Buffer | Uint8Array;
|
|
19
|
+
rem?: ArrayBuffer | Buffer | Uint8Array;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface CheckPrimeOptions {
|
|
23
|
+
checks?: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function toOptionalArrayBuffer(
|
|
27
|
+
value?: ArrayBuffer | Buffer | Uint8Array,
|
|
28
|
+
): ArrayBuffer | undefined {
|
|
29
|
+
if (value == null) return undefined;
|
|
30
|
+
if (value instanceof ArrayBuffer) return value;
|
|
31
|
+
return binaryLikeToArrayBuffer(value);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function bufferToBigInt(buf: Buffer): bigint {
|
|
35
|
+
let result = 0n;
|
|
36
|
+
for (let i = 0; i < buf.length; i++) {
|
|
37
|
+
result = (result << 8n) | BigInt(buf[i]!);
|
|
38
|
+
}
|
|
39
|
+
return result;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function bigIntToBuffer(value: bigint): ArrayBuffer {
|
|
43
|
+
if (value === 0n) return new Uint8Array([0]).buffer;
|
|
44
|
+
const hex = value.toString(16);
|
|
45
|
+
const paddedHex = hex.length % 2 ? '0' + hex : hex;
|
|
46
|
+
const bytes = new Uint8Array(paddedHex.length / 2);
|
|
47
|
+
for (let i = 0; i < bytes.length; i++) {
|
|
48
|
+
bytes[i] = parseInt(paddedHex.substring(i * 2, i * 2 + 2), 16);
|
|
49
|
+
}
|
|
50
|
+
return bytes.buffer;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
export function generatePrimeSync(
|
|
54
|
+
size: number,
|
|
55
|
+
options?: GeneratePrimeOptions,
|
|
56
|
+
): Buffer | bigint {
|
|
57
|
+
const safe = options?.safe ?? false;
|
|
58
|
+
const add = toOptionalArrayBuffer(options?.add);
|
|
59
|
+
const rem = toOptionalArrayBuffer(options?.rem);
|
|
60
|
+
const result = Buffer.from(
|
|
61
|
+
getNative().generatePrimeSync(size, safe, add, rem),
|
|
62
|
+
);
|
|
63
|
+
if (options?.bigint) {
|
|
64
|
+
return bufferToBigInt(result);
|
|
65
|
+
}
|
|
66
|
+
return result;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
type GeneratePrimeCallback = (
|
|
70
|
+
err: Error | null,
|
|
71
|
+
prime: Buffer | bigint,
|
|
72
|
+
) => void;
|
|
73
|
+
|
|
74
|
+
export function generatePrime(
|
|
75
|
+
size: number,
|
|
76
|
+
options: GeneratePrimeOptions | GeneratePrimeCallback,
|
|
77
|
+
callback?: GeneratePrimeCallback,
|
|
78
|
+
): void {
|
|
79
|
+
if (typeof options === 'function') {
|
|
80
|
+
callback = options;
|
|
81
|
+
options = {};
|
|
82
|
+
}
|
|
83
|
+
const safe = options?.safe ?? false;
|
|
84
|
+
const add = toOptionalArrayBuffer(options?.add);
|
|
85
|
+
const rem = toOptionalArrayBuffer(options?.rem);
|
|
86
|
+
const wantBigint = options?.bigint ?? false;
|
|
87
|
+
|
|
88
|
+
getNative()
|
|
89
|
+
.generatePrime(size, safe, add, rem)
|
|
90
|
+
.then(ab => {
|
|
91
|
+
const result = Buffer.from(ab);
|
|
92
|
+
if (wantBigint) {
|
|
93
|
+
callback?.(null, bufferToBigInt(result));
|
|
94
|
+
} else {
|
|
95
|
+
callback?.(null, result);
|
|
96
|
+
}
|
|
97
|
+
})
|
|
98
|
+
.catch((err: Error) => callback?.(err, Buffer.alloc(0)));
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
export function checkPrimeSync(
|
|
102
|
+
candidate: BinaryLike | bigint,
|
|
103
|
+
options?: CheckPrimeOptions,
|
|
104
|
+
): boolean {
|
|
105
|
+
const checks = options?.checks ?? 0;
|
|
106
|
+
const buf =
|
|
107
|
+
typeof candidate === 'bigint'
|
|
108
|
+
? bigIntToBuffer(candidate)
|
|
109
|
+
: binaryLikeToArrayBuffer(candidate);
|
|
110
|
+
return getNative().checkPrimeSync(buf, checks);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
type CheckPrimeCallback = (err: Error | null, result: boolean) => void;
|
|
114
|
+
|
|
115
|
+
export function checkPrime(
|
|
116
|
+
candidate: BinaryLike | bigint,
|
|
117
|
+
options: CheckPrimeOptions | CheckPrimeCallback,
|
|
118
|
+
callback?: CheckPrimeCallback,
|
|
119
|
+
): void {
|
|
120
|
+
if (typeof options === 'function') {
|
|
121
|
+
callback = options;
|
|
122
|
+
options = {};
|
|
123
|
+
}
|
|
124
|
+
const checks = options.checks ?? 0;
|
|
125
|
+
const buf =
|
|
126
|
+
typeof candidate === 'bigint'
|
|
127
|
+
? bigIntToBuffer(candidate)
|
|
128
|
+
: binaryLikeToArrayBuffer(candidate);
|
|
129
|
+
|
|
130
|
+
getNative()
|
|
131
|
+
.checkPrime(buf, checks)
|
|
132
|
+
.then(result => callback?.(null, result))
|
|
133
|
+
.catch((err: Error) => callback?.(err, false));
|
|
134
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
|
|
3
|
+
export interface Argon2 extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
4
|
+
hash(
|
|
5
|
+
algorithm: string,
|
|
6
|
+
message: ArrayBuffer,
|
|
7
|
+
nonce: ArrayBuffer,
|
|
8
|
+
parallelism: number,
|
|
9
|
+
tagLength: number,
|
|
10
|
+
memory: number,
|
|
11
|
+
passes: number,
|
|
12
|
+
version: number,
|
|
13
|
+
secret?: ArrayBuffer,
|
|
14
|
+
associatedData?: ArrayBuffer,
|
|
15
|
+
): Promise<ArrayBuffer>;
|
|
16
|
+
|
|
17
|
+
hashSync(
|
|
18
|
+
algorithm: string,
|
|
19
|
+
message: ArrayBuffer,
|
|
20
|
+
nonce: ArrayBuffer,
|
|
21
|
+
parallelism: number,
|
|
22
|
+
tagLength: number,
|
|
23
|
+
memory: number,
|
|
24
|
+
passes: number,
|
|
25
|
+
version: number,
|
|
26
|
+
secret?: ArrayBuffer,
|
|
27
|
+
associatedData?: ArrayBuffer,
|
|
28
|
+
): ArrayBuffer;
|
|
29
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
|
|
3
|
+
export interface Certificate
|
|
4
|
+
extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
5
|
+
verifySpkac(spkac: ArrayBuffer): boolean;
|
|
6
|
+
exportPublicKey(spkac: ArrayBuffer): ArrayBuffer;
|
|
7
|
+
exportChallenge(spkac: ArrayBuffer): ArrayBuffer;
|
|
8
|
+
}
|
|
@@ -8,6 +8,15 @@ type CipherArgs = {
|
|
|
8
8
|
authTagLen?: number;
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
+
interface CipherInfo {
|
|
12
|
+
name: string;
|
|
13
|
+
nid: number;
|
|
14
|
+
mode: string;
|
|
15
|
+
keyLength: number;
|
|
16
|
+
blockSize?: number;
|
|
17
|
+
ivLength?: number;
|
|
18
|
+
}
|
|
19
|
+
|
|
11
20
|
export interface Cipher extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
12
21
|
update(data: ArrayBuffer): ArrayBuffer;
|
|
13
22
|
final(): ArrayBuffer;
|
|
@@ -17,6 +26,11 @@ export interface Cipher extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
|
17
26
|
setAuthTag(tag: ArrayBuffer): boolean;
|
|
18
27
|
getAuthTag(): ArrayBuffer;
|
|
19
28
|
getSupportedCiphers(): string[];
|
|
29
|
+
getCipherInfo(
|
|
30
|
+
name: string,
|
|
31
|
+
keyLength?: number,
|
|
32
|
+
ivLength?: number,
|
|
33
|
+
): CipherInfo | undefined;
|
|
20
34
|
}
|
|
21
35
|
|
|
22
36
|
export interface CipherFactory
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { HybridObject } from 'react-native-nitro-modules';
|
|
2
|
+
|
|
3
|
+
export interface DhKeyPair
|
|
4
|
+
extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
5
|
+
generateKeyPair(): Promise<void>;
|
|
6
|
+
generateKeyPairSync(): void;
|
|
7
|
+
|
|
8
|
+
setPrimeLength(primeLength: number): void;
|
|
9
|
+
setPrime(prime: ArrayBuffer): void;
|
|
10
|
+
setGenerator(generator: number): void;
|
|
11
|
+
|
|
12
|
+
getPublicKey(): ArrayBuffer;
|
|
13
|
+
getPrivateKey(): ArrayBuffer;
|
|
14
|
+
}
|