UNPKG

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
"use strict"; 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