react-native-quick-crypto
Version:
A fast implementation of Node's `crypto` module written in C/C++ JSI
64 lines (63 loc) • 2.52 kB
JavaScript
;
import { NitroModules } from 'react-native-nitro-modules';
import { CryptoKey, KeyObject } from './keys/classes';
import { hasAnyNotIn, lazyDOMException, getUsagesUnion, KFormatType, KeyEncoding } from './utils';
export const SLH_DSA_VARIANTS = ['SLH-DSA-SHA2-128s', 'SLH-DSA-SHA2-128f', 'SLH-DSA-SHA2-192s', 'SLH-DSA-SHA2-192f', 'SLH-DSA-SHA2-256s', 'SLH-DSA-SHA2-256f', 'SLH-DSA-SHAKE-128s', 'SLH-DSA-SHAKE-128f', 'SLH-DSA-SHAKE-192s', 'SLH-DSA-SHAKE-192f', 'SLH-DSA-SHAKE-256s', 'SLH-DSA-SHAKE-256f'];
export class SlhDsa {
constructor(variant) {
this.variant = variant;
this.native = NitroModules.createHybridObject('SlhDsaKeyPair');
this.native.setVariant(variant);
}
async generateKeyPair() {
await this.native.generateKeyPair(KFormatType.DER, KeyEncoding.SPKI, KFormatType.DER, KeyEncoding.PKCS8);
}
generateKeyPairSync() {
this.native.generateKeyPairSync(KFormatType.DER, KeyEncoding.SPKI, KFormatType.DER, KeyEncoding.PKCS8);
}
getPublicKey() {
return this.native.getPublicKey();
}
getPrivateKey() {
return this.native.getPrivateKey();
}
async sign(message) {
return this.native.sign(message);
}
signSync(message) {
return this.native.signSync(message);
}
async verify(signature, message) {
return this.native.verify(signature, message);
}
verifySync(signature, message) {
return this.native.verifySync(signature, message);
}
}
export async function slhdsa_generateKeyPairWebCrypto(variant, extractable, keyUsages) {
if (hasAnyNotIn(keyUsages, ['sign', 'verify'])) {
throw lazyDOMException(`Unsupported key usage for ${variant}`, 'SyntaxError');
}
const publicUsages = getUsagesUnion(keyUsages, 'verify');
const privateUsages = getUsagesUnion(keyUsages, 'sign');
if (privateUsages.length === 0) {
throw lazyDOMException('Usages cannot be empty', 'SyntaxError');
}
const slhdsa = new SlhDsa(variant);
await slhdsa.generateKeyPair();
const publicKeyData = slhdsa.getPublicKey();
const privateKeyData = slhdsa.getPrivateKey();
const pub = KeyObject.createKeyObject('public', publicKeyData, KFormatType.DER, KeyEncoding.SPKI);
const publicKey = new CryptoKey(pub, {
name: variant
}, publicUsages, true);
const priv = KeyObject.createKeyObject('private', privateKeyData, KFormatType.DER, KeyEncoding.PKCS8);
const privateKey = new CryptoKey(priv, {
name: variant
}, privateUsages, extractable);
return {
publicKey,
privateKey
};
}
//# sourceMappingURL=slhdsa.js.map