react-native-quick-crypto 0.3.0 → 0.4.0
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/README.md +25 -14
- package/android/CMakeLists.txt +10 -2
- package/android/gradle.properties +1 -1
- package/android/src/main/AndroidManifest.xml +1 -1
- package/android/src/main/java/com/margelo/quickcrypto/QuickCryptoModule.java +70 -0
- package/android/src/main/java/com/{reactnativequickcrypto → margelo/quickcrypto}/QuickCryptoPackage.java +11 -12
- package/cpp/Cipher/MGLCipherHostObject.cpp +4 -5
- package/cpp/Cipher/MGLCreateCipherInstaller.cpp +1 -3
- package/cpp/Cipher/MGLGenerateKeyPairInstaller.h +6 -3
- package/cpp/Cipher/MGLGenerateKeyPairSyncInstaller.h +5 -3
- package/cpp/Cipher/MGLPublicCipher.h +1 -1
- package/cpp/Cipher/MGLPublicCipherInstaller.h +1 -1
- package/cpp/Cipher/MGLRsa.h +5 -1
- package/cpp/JSIUtils/MGLJSIMacros.h +69 -6
- package/cpp/{Cipher/MGLCipherKeys.cpp → MGLKeys.cpp} +47 -49
- package/cpp/{Cipher/MGLCipherKeys.h → MGLKeys.h} +29 -30
- package/cpp/MGLQuickCryptoHostObject.cpp +12 -0
- package/cpp/Sig/MGLSignHostObjects.cpp +889 -0
- package/cpp/Sig/MGLSignHostObjects.h +88 -0
- package/cpp/Sig/MGLSignInstaller.cpp +24 -0
- package/cpp/Sig/MGLSignInstaller.h +29 -0
- package/cpp/Sig/MGLVerifyInstaller.cpp +24 -0
- package/cpp/Sig/MGLVerifyInstaller.h +22 -0
- package/cpp/Utils/MGLUtils.cpp +67 -29
- package/cpp/Utils/MGLUtils.h +17 -17
- package/lib/commonjs/@types/crypto-browserify.d.js +2 -0
- package/lib/commonjs/@types/crypto-browserify.d.js.map +1 -0
- package/lib/commonjs/@types/stream-browserify.d.js +2 -0
- package/lib/commonjs/@types/stream-browserify.d.js.map +1 -0
- package/lib/commonjs/Cipher.js +3 -2
- package/lib/commonjs/Cipher.js.map +1 -1
- package/lib/commonjs/Hash.js +2 -2
- package/lib/commonjs/Hash.js.map +1 -1
- package/lib/commonjs/Hmac.js +2 -2
- package/lib/commonjs/Hmac.js.map +1 -1
- package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js.map +1 -1
- package/lib/commonjs/NativeQuickCrypto/sig.js +2 -0
- package/lib/commonjs/NativeQuickCrypto/sig.js.map +1 -0
- package/lib/commonjs/QuickCrypto.js +4 -0
- package/lib/commonjs/QuickCrypto.js.map +1 -1
- package/lib/commonjs/index.js +16 -13
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/keys.js +1 -4
- package/lib/commonjs/keys.js.map +1 -1
- package/lib/commonjs/sig.js +170 -0
- package/lib/commonjs/sig.js.map +1 -0
- package/lib/module/@types/crypto-browserify.d.js +2 -0
- package/lib/module/@types/crypto-browserify.d.js.map +1 -0
- package/lib/module/@types/stream-browserify.d.js +2 -0
- package/lib/module/@types/stream-browserify.d.js.map +1 -0
- package/lib/module/Cipher.js +2 -1
- package/lib/module/Cipher.js.map +1 -1
- package/lib/module/Hash.js +1 -1
- package/lib/module/Hash.js.map +1 -1
- package/lib/module/Hmac.js +1 -1
- package/lib/module/Hmac.js.map +1 -1
- package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js.map +1 -1
- package/lib/module/NativeQuickCrypto/sig.js +2 -0
- package/lib/module/NativeQuickCrypto/sig.js.map +1 -0
- package/lib/module/QuickCrypto.js +3 -0
- package/lib/module/QuickCrypto.js.map +1 -1
- package/lib/module/index.js +12 -2
- package/lib/module/index.js.map +1 -1
- package/lib/module/keys.js +1 -4
- package/lib/module/keys.js.map +1 -1
- package/lib/module/sig.js +155 -0
- package/lib/module/sig.js.map +1 -0
- package/lib/typescript/Cipher.d.ts +1 -1
- package/lib/typescript/Hash.d.ts +1 -1
- package/lib/typescript/Hmac.d.ts +1 -1
- package/lib/typescript/NativeQuickCrypto/NativeQuickCrypto.d.ts +3 -0
- package/lib/typescript/NativeQuickCrypto/sig.d.ts +12 -0
- package/lib/typescript/QuickCrypto.d.ts +3 -0
- package/lib/typescript/index.d.ts +207 -3
- package/lib/typescript/sig.d.ts +35 -0
- package/package.json +5 -3
- package/src/@types/crypto-browserify.d.ts +4 -0
- package/src/@types/stream-browserify.d.ts +4 -0
- package/src/Cipher.ts +2 -1
- package/src/Hash.ts +1 -1
- package/src/Hmac.ts +1 -1
- package/src/NativeQuickCrypto/NativeQuickCrypto.ts +3 -0
- package/src/NativeQuickCrypto/sig.ts +17 -0
- package/src/QuickCrypto.ts +3 -0
- package/src/index.ts +12 -2
- package/src/keys.ts +18 -13
- package/src/sig.ts +179 -0
- package/android/src/main/java/com/reactnativequickcrypto/QuickCryptoModule.java +0 -70
package/lib/module/Cipher.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Cipher.ts"],"names":["NativeQuickCrypto","Stream","binaryLikeToArrayBuffer","getDefaultEncoding","kEmptyObject","validateFunction","validateObject","validateString","validateUint32","validateInt32","RSAKeyVariant","StringDecoder","Buffer","SBuffer","constants","parsePrivateKeyEncoding","parsePublicKeyEncoding","preparePrivateKey","preparePublicOrPrivateKey","global","process","nextTick","setImmediate","createInternalCipher","createCipher","createInternalDecipher","createDecipher","_publicEncrypt","publicEncrypt","_publicDecrypt","publicDecrypt","_privateDecrypt","privateDecrypt","getUIntOption","options","key","value","Error","normalizeEncoding","enc","retried","toLowerCase","validateEncoding","data","encoding","normalizedEncoding","length","getDecoder","decoder","CipherCommon","Transform","constructor","cipherType","cipherKey","isCipher","iv","cipherKeyBuffer","authTagLength","args","cipher_type","cipher_key","auth_tag_len","internal","update","inputEncoding","outputEncoding","defaultEncoding","ArrayBuffer","isView","ret","write","from","final","end","_transform","chunk","callback","push","_flush","setAutoPadding","autoPadding","setAAD","buffer","plaintextLength","setAuthTag","tag","Cipher","Decipher","algorithm","password","createDecipheriv","createCipheriv","rsaFunctionFor","method","defaultPadding","keyType","format","type","passphrase","padding","oaepHash","oaepLabel","undefined","rawRes","RSA_PKCS1_OAEP_PADDING","RSA_PKCS1_PADDING","parseKeyEncoding","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","privateFormat","privateType","cipher","internalGenerateKeyPair","isAsync","modulusLength","publicExponent","generateKeyPair","kKeyVariantRSA_SSA_PKCS1_v1_5","then","err","publicKey","privateKey","catch","generateKeyPairSync","hash","mgf1Hash","hashAlgorithm","mgf1HashAlgorithm","saltLength","kKeyVariantRSA_PSS","_"],"mappings":"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","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport Stream from 'stream';\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n CipherEncoding,\n Encoding,\n getDefaultEncoding,\n kEmptyObject,\n validateFunction,\n validateObject,\n validateString,\n validateUint32,\n validateInt32,\n} from './Utils';\nimport { InternalCipher, RSAKeyVariant } from './NativeQuickCrypto/Cipher';\n// TODO(osp) re-enable type specific constructors\n// They are nice to have but not absolutely necessary\n// import type {\n// CipherCCMOptions,\n// CipherCCMTypes,\n// CipherGCMTypes,\n// CipherGCMOptions,\n// // CipherKey,\n// // KeyObject,\n// // TODO(Szymon) This types seem to be missing? Where did you get this definitions from?\n// // CipherOCBTypes,\n// // CipherOCBOptions,\n// } from 'crypto'; // Node crypto typings\nimport { StringDecoder } from 'string_decoder';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { Buffer as SBuffer } from 'safe-buffer';\nimport { constants } from './constants';\nimport {\n parsePrivateKeyEncoding,\n parsePublicKeyEncoding,\n preparePrivateKey,\n preparePublicOrPrivateKey,\n} from './keys';\n\n// make sure that nextTick is there\nglobal.process.nextTick = setImmediate;\n\nconst createInternalCipher = NativeQuickCrypto.createCipher;\nconst createInternalDecipher = NativeQuickCrypto.createDecipher;\nconst _publicEncrypt = NativeQuickCrypto.publicEncrypt;\nconst _publicDecrypt = NativeQuickCrypto.publicDecrypt;\nconst _privateDecrypt = NativeQuickCrypto.privateDecrypt;\n\nfunction getUIntOption(options: Record<string, any>, key: string) {\n let value;\n if (options && (value = options[key]) != null) {\n // >>> Turns any type into a positive integer (also sets the sign bit to 0)\n // eslint-disable-next-line no-bitwise\n if (value >>> 0 !== value) throw new Error(`options.${key}: ${value}`);\n return value;\n }\n return -1;\n}\n\nfunction normalizeEncoding(enc: string) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n}\n\nfunction validateEncoding(data: string, encoding: string) {\n const normalizedEncoding = normalizeEncoding(encoding);\n const length = data.length;\n\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new Error(`Encoding ${encoding} not valid for data length ${length}`);\n }\n}\n\nfunction getDecoder(decoder?: StringDecoder, encoding?: BufferEncoding) {\n return decoder ?? new StringDecoder(encoding);\n}\n\nclass CipherCommon extends Stream.Transform {\n private internal: InternalCipher;\n private decoder: StringDecoder | undefined;\n\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n isCipher: boolean,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n super(options);\n const cipherKeyBuffer = binaryLikeToArrayBuffer(cipherKey);\n // TODO(osp) This might not be smart, check again after release\n const authTagLength = getUIntOption(options, 'authTagLength');\n const args = {\n cipher_type: cipherType,\n cipher_key: cipherKeyBuffer,\n iv,\n ...options,\n auth_tag_len: authTagLength,\n };\n this.internal = isCipher\n ? createInternalCipher(args)\n : createInternalDecipher(args);\n }\n\n update(\n data: BinaryLike,\n inputEncoding?: CipherEncoding,\n outputEncoding?: CipherEncoding\n ): ArrayBuffer | string {\n const defaultEncoding = getDefaultEncoding();\n inputEncoding = inputEncoding ?? defaultEncoding;\n outputEncoding = outputEncoding ?? defaultEncoding;\n\n if (typeof data === 'string') {\n validateEncoding(data, inputEncoding);\n } else if (!ArrayBuffer.isView(data)) {\n throw new Error('Invalid data argument');\n }\n\n if (typeof data === 'string') {\n // On node this is handled on the native side\n // on our case we need to correctly send the arraybuffer to the jsi side\n inputEncoding = inputEncoding === 'buffer' ? 'utf8' : inputEncoding;\n data = binaryLikeToArrayBuffer(data, inputEncoding);\n } else {\n data = binaryLikeToArrayBuffer(data as any, inputEncoding);\n }\n\n const ret = this.internal.update(data);\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.write(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n final(): ArrayBuffer;\n final(outputEncoding: BufferEncoding | 'buffer'): string;\n final(outputEncoding?: BufferEncoding | 'buffer'): ArrayBuffer | string {\n const ret = this.internal.final();\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.end(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n _transform(chunk: BinaryLike, encoding: Encoding, callback: () => void) {\n this.push(this.update(chunk, encoding));\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.final());\n callback();\n }\n\n public setAutoPadding(autoPadding?: boolean): this {\n this.internal.setAutoPadding(!!autoPadding);\n return this;\n }\n\n public setAAD(\n buffer: Buffer,\n options?: {\n plaintextLength: number;\n }\n ): this {\n this.internal.setAAD({\n data: buffer.buffer,\n plaintextLength: options?.plaintextLength,\n });\n return this;\n }\n\n // protected getAuthTag(): Buffer {\n // return Buffer.from(this.internal.getAuthTag());\n // }\n\n public setAuthTag(tag: Buffer): this {\n this.internal.setAuthTag(tag.buffer);\n return this;\n }\n}\n\nclass Cipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n super(cipherType, cipherKey, true, options, iv);\n }\n}\n\nclass Decipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n\n super(cipherType, cipherKey, false, options, iv);\n }\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, password, options);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): DecipherOCB;\n// export function createDecipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, key, options, iv);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// commenting them out for now\n// export function createCipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, password, options);\n}\n\n// TODO(osp) on all the createCipheriv methods, node seems to use a \"KeyObject\" is seems to be a thread safe\n// object that creates keys and what not. Not sure if we should support it.\n// Fow now I replaced all of them to BinaryLike\n// export function createCipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): CipherOCB;\n// export function createCipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, key, options, iv);\n}\n\n// RSA Functions\n// Follows closely the model implemented in node\n\n// TODO(osp) types...\nfunction rsaFunctionFor(\n method: (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n ) => Buffer,\n defaultPadding: number,\n keyType: 'public' | 'private'\n) {\n return (\n options: {\n key: any;\n encoding?: string;\n format?: any;\n padding?: any;\n oaepHash?: any;\n oaepLabel?: any;\n passphrase?: string;\n },\n buffer: BinaryLike\n ) => {\n const { format, type, data, passphrase } =\n keyType === 'private'\n ? preparePrivateKey(options)\n : preparePublicOrPrivateKey(options);\n const padding = options.padding || defaultPadding;\n const { oaepHash, encoding } = options;\n let { oaepLabel } = options;\n if (oaepHash !== undefined) validateString(oaepHash, 'key.oaepHash');\n if (oaepLabel !== undefined)\n oaepLabel = binaryLikeToArrayBuffer(oaepLabel, encoding);\n buffer = binaryLikeToArrayBuffer(buffer, encoding);\n\n const rawRes = method(\n data,\n format,\n type,\n passphrase,\n buffer,\n padding,\n oaepHash,\n oaepLabel\n );\n\n return Buffer.from(rawRes);\n };\n}\n\nexport const publicEncrypt = rsaFunctionFor(\n _publicEncrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'public'\n);\nexport const publicDecrypt = rsaFunctionFor(\n _publicDecrypt,\n constants.RSA_PKCS1_PADDING,\n 'public'\n);\n// const privateEncrypt = rsaFunctionFor(_privateEncrypt, constants.RSA_PKCS1_PADDING,\n// 'private');\nexport const privateDecrypt = rsaFunctionFor(\n _privateDecrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'private'\n);\n\n// _ _ __ _____ _\n// | | | |/ / | __ \\ (_)\n// __ _ ___ _ __ ___ _ __ __ _| |_ ___| ' / ___ _ _| |__) |_ _ _ _ __\n// / _` |/ _ \\ '_ \\ / _ \\ '__/ _` | __/ _ \\ < / _ \\ | | | ___/ _` | | '__|\n// | (_| | __/ | | | __/ | | (_| | || __/ . \\ __/ |_| | | | (_| | | |\n// \\__, |\\___|_| |_|\\___|_| \\__,_|\\__\\___|_|\\_\\___|\\__, |_| \\__,_|_|_|\n// __/ | __/ |\n// |___/ |___/\ntype GenerateKeyPairOptions = {\n modulusLength: number; // Key size in bits (RSA, DSA).\n publicExponent?: number; // Public exponent (RSA). Default: 0x10001.\n hashAlgorithm?: string; // Name of the message digest (RSA-PSS).\n mgf1HashAlgorithm?: string; // string Name of the message digest used by MGF1 (RSA-PSS).\n saltLength?: number; // Minimal salt length in bytes (RSA-PSS).\n divisorLength?: number; // Size of q in bits (DSA).\n namedCurve?: string; // Name of the curve to use (EC).\n prime?: Buffer; // The prime parameter (DH).\n primeLength?: number; // Prime length in bits (DH).\n generator?: number; // Custom generator (DH). Default: 2.\n groupName?: string; // Diffie-Hellman group name (DH). See crypto.getDiffieHellman().\n publicKeyEncoding?: any; // See keyObject.export().\n privateKeyEncoding?: any; // See keyObject.export().\n paramEncoding?: string;\n hash?: any;\n mgf1Hash?: any;\n};\ntype GenerateKeyPairCallback = (\n error: unknown | null,\n publicKey?: Buffer,\n privateKey?: Buffer\n) => void;\n\nfunction parseKeyEncoding(\n keyType: string,\n options: GenerateKeyPairOptions = kEmptyObject\n) {\n const { publicKeyEncoding, privateKeyEncoding } = options;\n\n let publicFormat, publicType;\n if (publicKeyEncoding == null) {\n publicFormat = publicType = undefined;\n } else if (typeof publicKeyEncoding === 'object') {\n ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(\n publicKeyEncoding,\n keyType,\n 'publicKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.publicKeyEncoding',\n publicKeyEncoding\n );\n }\n\n let privateFormat, privateType, cipher, passphrase;\n if (privateKeyEncoding == null) {\n privateFormat = privateType = undefined;\n } else if (typeof privateKeyEncoding === 'object') {\n ({\n format: privateFormat,\n type: privateType,\n cipher,\n passphrase,\n } = parsePrivateKeyEncoding(\n privateKeyEncoding,\n keyType,\n 'privateKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.privateKeyEncoding',\n publicKeyEncoding\n );\n }\n\n return [\n publicFormat,\n publicType,\n privateFormat,\n privateType,\n cipher,\n passphrase,\n ];\n}\n\nfunction internalGenerateKeyPair(\n isAsync: boolean,\n type: string,\n options: GenerateKeyPairOptions | undefined,\n callback: GenerateKeyPairCallback | undefined\n) {\n // On node a very complex \"job\" chain is created, we are going for a far simpler approach and calling\n // an internal function that basically executes the same byte shuffling on the native side\n const encoding = parseKeyEncoding(type, options);\n\n // if (options !== undefined)\n // validateObject(options, 'options');\n\n switch (type) {\n case 'rsa-pss':\n case 'rsa': {\n validateObject<GenerateKeyPairOptions>(options, 'options');\n const { modulusLength } = options!;\n validateUint32(modulusLength, 'options.modulusLength');\n\n let { publicExponent } = options!;\n if (publicExponent == null) {\n publicExponent = 0x10001;\n } else {\n validateUint32(publicExponent, 'options.publicExponent');\n }\n\n if (type === 'rsa') {\n if (isAsync) {\n NativeQuickCrypto.generateKeyPair(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n )\n .then(([err, publicKey, privateKey]) => {\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n callback?.(err, publicKey, privateKey);\n })\n .catch((err) => {\n callback?.(err, undefined, undefined);\n });\n return;\n } else {\n let [err, publicKey, privateKey] =\n NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n );\n\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n\n return [err, publicKey, privateKey];\n }\n }\n\n const { hash, mgf1Hash, hashAlgorithm, mgf1HashAlgorithm, saltLength } =\n options!;\n\n // // We don't have a process object on RN\n // // const pendingDeprecation = getOptionValue('--pending-deprecation');\n\n if (saltLength !== undefined)\n validateInt32(saltLength, 'options.saltLength', 0);\n if (hashAlgorithm !== undefined)\n validateString(hashAlgorithm, 'options.hashAlgorithm');\n if (mgf1HashAlgorithm !== undefined)\n validateString(mgf1HashAlgorithm, 'options.mgf1HashAlgorithm');\n if (hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.hash\" is deprecated, ' +\n // 'use \"options.hashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(hash, 'options.hash');\n if (hashAlgorithm && hash !== hashAlgorithm) {\n throw new Error(`Invalid Argument options.hash ${hash}`);\n }\n }\n if (mgf1Hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.mgf1Hash\" is deprecated, ' +\n // 'use \"options.mgf1HashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(mgf1Hash, 'options.mgf1Hash');\n if (mgf1HashAlgorithm && mgf1Hash !== mgf1HashAlgorithm) {\n throw new Error(`Invalid Argument options.mgf1Hash ${mgf1Hash}`);\n }\n }\n\n return NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_PSS,\n modulusLength,\n publicExponent,\n hashAlgorithm || hash,\n mgf1HashAlgorithm || mgf1Hash,\n saltLength,\n ...encoding\n );\n }\n // case 'dsa': {\n // validateObject(options, 'options');\n // const { modulusLength } = options!;\n // validateUint32(modulusLength, 'options.modulusLength');\n\n // let { divisorLength } = options!;\n // if (divisorLength == null) {\n // divisorLength = -1;\n // } else validateInt32(divisorLength, 'options.divisorLength', 0);\n\n // // return new DsaKeyPairGenJob(\n // // mode,\n // // modulusLength,\n // // divisorLength,\n // // ...encoding);\n // }\n // case 'ec': {\n // validateObject(options, 'options');\n // const { namedCurve } = options!;\n // validateString(namedCurve, 'options.namedCurve');\n // let { paramEncoding } = options!;\n // if (paramEncoding == null || paramEncoding === 'named')\n // paramEncoding = OPENSSL_EC_NAMED_CURVE;\n // else if (paramEncoding === 'explicit')\n // paramEncoding = OPENSSL_EC_EXPLICIT_CURVE;\n // else\n // throw new Error(`Invalid Argument options.paramEncoding ${paramEncoding}`);\n // // throw new ERR_INVALID_ARG_VALUE('options.paramEncoding', paramEncoding);\n\n // // return new EcKeyPairGenJob(mode, namedCurve, paramEncoding, ...encoding);\n // }\n // case 'ed25519':\n // case 'ed448':\n // case 'x25519':\n // case 'x448': {\n // let id;\n // switch (type) {\n // case 'ed25519':\n // id = EVP_PKEY_ED25519;\n // break;\n // case 'ed448':\n // id = EVP_PKEY_ED448;\n // break;\n // case 'x25519':\n // id = EVP_PKEY_X25519;\n // break;\n // case 'x448':\n // id = EVP_PKEY_X448;\n // break;\n // }\n // return new NidKeyPairGenJob(mode, id, ...encoding);\n // }\n // case 'dh': {\n // validateObject(options, 'options');\n // const { group, primeLength, prime, generator } = options;\n // if (group != null) {\n // if (prime != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'prime');\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');\n // if (generator != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');\n\n // validateString(group, 'options.group');\n\n // return new DhKeyPairGenJob(mode, group, ...encoding);\n // }\n\n // if (prime != null) {\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');\n\n // validateBuffer(prime, 'options.prime');\n // } else if (primeLength != null) {\n // validateInt32(primeLength, 'options.primeLength', 0);\n // } else {\n // throw new ERR_MISSING_OPTION(\n // 'At least one of the group, prime, or primeLength options'\n // );\n // }\n\n // if (generator != null) {\n // validateInt32(generator, 'options.generator', 0);\n // }\n // return new DhKeyPairGenJob(\n // mode,\n // prime != null ? prime : primeLength,\n // generator == null ? 2 : generator,\n // ...encoding\n // );\n // }\n default:\n // Fall through\n }\n throw new Error(\n `Invalid Argument options: ${type} scheme not supported. Currently not all encryption methods are supported in quick-crypto!`\n );\n}\n\n// TODO(osp) put correct types (e.g. type -> 'rsa', etc..)\nexport function generateKeyPair(\n type: string,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options: GenerateKeyPairOptions,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options?: GenerateKeyPairCallback | GenerateKeyPairOptions,\n callback?: GenerateKeyPairCallback\n) {\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n validateFunction(callback);\n\n internalGenerateKeyPair(true, type, options, callback);\n}\n\nexport function generateKeyPairSync(type: string): {\n publicKey: any;\n privateKey: any;\n};\nexport function generateKeyPairSync(\n type: string,\n options: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any };\nexport function generateKeyPairSync(\n type: string,\n options?: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any } {\n const [_, publicKey, privateKey] = internalGenerateKeyPair(\n false,\n type,\n options,\n undefined\n )!;\n\n return {\n publicKey,\n privateKey,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["Cipher.ts"],"names":["NativeQuickCrypto","Stream","binaryLikeToArrayBuffer","getDefaultEncoding","kEmptyObject","validateFunction","validateObject","validateString","validateUint32","validateInt32","RSAKeyVariant","StringDecoder","Buffer","SBuffer","constants","parsePrivateKeyEncoding","parsePublicKeyEncoding","preparePrivateKey","preparePublicOrPrivateKey","global","process","nextTick","setImmediate","createInternalCipher","createCipher","createInternalDecipher","createDecipher","_publicEncrypt","publicEncrypt","_publicDecrypt","publicDecrypt","_privateDecrypt","privateDecrypt","getUIntOption","options","key","value","Error","normalizeEncoding","enc","retried","toLowerCase","validateEncoding","data","encoding","normalizedEncoding","length","getDecoder","decoder","CipherCommon","Transform","constructor","cipherType","cipherKey","isCipher","iv","cipherKeyBuffer","authTagLength","args","cipher_type","cipher_key","auth_tag_len","internal","update","inputEncoding","outputEncoding","defaultEncoding","ArrayBuffer","isView","ret","write","from","final","end","_transform","chunk","callback","push","_flush","setAutoPadding","autoPadding","setAAD","buffer","plaintextLength","setAuthTag","tag","Cipher","Decipher","algorithm","password","createDecipheriv","createCipheriv","rsaFunctionFor","method","defaultPadding","keyType","format","type","passphrase","padding","oaepHash","oaepLabel","undefined","rawRes","RSA_PKCS1_OAEP_PADDING","RSA_PKCS1_PADDING","parseKeyEncoding","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","privateFormat","privateType","cipher","internalGenerateKeyPair","isAsync","modulusLength","publicExponent","generateKeyPair","kKeyVariantRSA_SSA_PKCS1_v1_5","then","err","publicKey","privateKey","catch","generateKeyPairSync","hash","mgf1Hash","hashAlgorithm","mgf1HashAlgorithm","saltLength","kKeyVariantRSA_PSS","_"],"mappings":"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","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport Stream from 'stream-browserify';\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n CipherEncoding,\n Encoding,\n getDefaultEncoding,\n kEmptyObject,\n validateFunction,\n validateObject,\n validateString,\n validateUint32,\n validateInt32,\n} from './Utils';\nimport { InternalCipher, RSAKeyVariant } from './NativeQuickCrypto/Cipher';\n// TODO(osp) re-enable type specific constructors\n// They are nice to have but not absolutely necessary\n// import type {\n// CipherCCMOptions,\n// CipherCCMTypes,\n// CipherGCMTypes,\n// CipherGCMOptions,\n// // CipherKey,\n// // KeyObject,\n// // TODO(Szymon) This types seem to be missing? Where did you get this definitions from?\n// // CipherOCBTypes,\n// // CipherOCBOptions,\n// } from 'crypto'; // Node crypto typings\nimport { StringDecoder } from 'string_decoder';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { Buffer as SBuffer } from 'safe-buffer';\nimport { constants } from './constants';\nimport {\n parsePrivateKeyEncoding,\n parsePublicKeyEncoding,\n preparePrivateKey,\n preparePublicOrPrivateKey,\n} from './keys';\n\n// make sure that nextTick is there\nglobal.process.nextTick = setImmediate;\n\nconst createInternalCipher = NativeQuickCrypto.createCipher;\nconst createInternalDecipher = NativeQuickCrypto.createDecipher;\nconst _publicEncrypt = NativeQuickCrypto.publicEncrypt;\nconst _publicDecrypt = NativeQuickCrypto.publicDecrypt;\nconst _privateDecrypt = NativeQuickCrypto.privateDecrypt;\n\nfunction getUIntOption(options: Record<string, any>, key: string) {\n let value;\n if (options && (value = options[key]) != null) {\n // >>> Turns any type into a positive integer (also sets the sign bit to 0)\n // eslint-disable-next-line no-bitwise\n if (value >>> 0 !== value) throw new Error(`options.${key}: ${value}`);\n return value;\n }\n return -1;\n}\n\nfunction normalizeEncoding(enc: string) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n}\n\nfunction validateEncoding(data: string, encoding: string) {\n const normalizedEncoding = normalizeEncoding(encoding);\n const length = data.length;\n\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new Error(`Encoding ${encoding} not valid for data length ${length}`);\n }\n}\n\nfunction getDecoder(decoder?: StringDecoder, encoding?: BufferEncoding) {\n return decoder ?? new StringDecoder(encoding);\n}\n\nclass CipherCommon extends Stream.Transform {\n private internal: InternalCipher;\n private decoder: StringDecoder | undefined;\n\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n isCipher: boolean,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n super(options);\n const cipherKeyBuffer = binaryLikeToArrayBuffer(cipherKey);\n // TODO(osp) This might not be smart, check again after release\n const authTagLength = getUIntOption(options, 'authTagLength');\n const args = {\n cipher_type: cipherType,\n cipher_key: cipherKeyBuffer,\n iv,\n ...options,\n auth_tag_len: authTagLength,\n };\n this.internal = isCipher\n ? createInternalCipher(args)\n : createInternalDecipher(args);\n }\n\n update(\n data: BinaryLike,\n inputEncoding?: CipherEncoding,\n outputEncoding?: CipherEncoding\n ): ArrayBuffer | string {\n const defaultEncoding = getDefaultEncoding();\n inputEncoding = inputEncoding ?? defaultEncoding;\n outputEncoding = outputEncoding ?? defaultEncoding;\n\n if (typeof data === 'string') {\n validateEncoding(data, inputEncoding);\n } else if (!ArrayBuffer.isView(data)) {\n throw new Error('Invalid data argument');\n }\n\n if (typeof data === 'string') {\n // On node this is handled on the native side\n // on our case we need to correctly send the arraybuffer to the jsi side\n inputEncoding = inputEncoding === 'buffer' ? 'utf8' : inputEncoding;\n data = binaryLikeToArrayBuffer(data, inputEncoding);\n } else {\n data = binaryLikeToArrayBuffer(data as any, inputEncoding);\n }\n\n const ret = this.internal.update(data);\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.write(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n final(): ArrayBuffer;\n final(outputEncoding: BufferEncoding | 'buffer'): string;\n final(outputEncoding?: BufferEncoding | 'buffer'): ArrayBuffer | string {\n const ret = this.internal.final();\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.end(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n _transform(chunk: BinaryLike, encoding: Encoding, callback: () => void) {\n this.push(this.update(chunk, encoding));\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.final());\n callback();\n }\n\n public setAutoPadding(autoPadding?: boolean): this {\n this.internal.setAutoPadding(!!autoPadding);\n return this;\n }\n\n public setAAD(\n buffer: Buffer,\n options?: {\n plaintextLength: number;\n }\n ): this {\n this.internal.setAAD({\n data: buffer.buffer,\n plaintextLength: options?.plaintextLength,\n });\n return this;\n }\n\n // protected getAuthTag(): Buffer {\n // return Buffer.from(this.internal.getAuthTag());\n // }\n\n public setAuthTag(tag: Buffer): this {\n this.internal.setAuthTag(tag.buffer);\n return this;\n }\n}\n\nclass Cipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n super(cipherType, cipherKey, true, options, iv);\n }\n}\n\nclass Decipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n\n super(cipherType, cipherKey, false, options, iv);\n }\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, password, options);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): DecipherOCB;\n// export function createDecipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, key, options, iv);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// commenting them out for now\n// export function createCipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, password, options);\n}\n\n// TODO(osp) on all the createCipheriv methods, node seems to use a \"KeyObject\" is seems to be a thread safe\n// object that creates keys and what not. Not sure if we should support it.\n// Fow now I replaced all of them to BinaryLike\n// export function createCipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): CipherOCB;\n// export function createCipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, key, options, iv);\n}\n\n// RSA Functions\n// Follows closely the model implemented in node\n\n// TODO(osp) types...\nfunction rsaFunctionFor(\n method: (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n ) => Buffer,\n defaultPadding: number,\n keyType: 'public' | 'private'\n) {\n return (\n options: {\n key: any;\n encoding?: string;\n format?: any;\n padding?: any;\n oaepHash?: any;\n oaepLabel?: any;\n passphrase?: string;\n },\n buffer: BinaryLike\n ) => {\n const { format, type, data, passphrase } =\n keyType === 'private'\n ? preparePrivateKey(options)\n : preparePublicOrPrivateKey(options);\n const padding = options.padding || defaultPadding;\n const { oaepHash, encoding } = options;\n let { oaepLabel } = options;\n if (oaepHash !== undefined) validateString(oaepHash, 'key.oaepHash');\n if (oaepLabel !== undefined)\n oaepLabel = binaryLikeToArrayBuffer(oaepLabel, encoding);\n buffer = binaryLikeToArrayBuffer(buffer, encoding);\n\n const rawRes = method(\n data,\n format,\n type,\n passphrase,\n buffer,\n padding,\n oaepHash,\n oaepLabel\n );\n\n return Buffer.from(rawRes);\n };\n}\n\nexport const publicEncrypt = rsaFunctionFor(\n _publicEncrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'public'\n);\nexport const publicDecrypt = rsaFunctionFor(\n _publicDecrypt,\n constants.RSA_PKCS1_PADDING,\n 'public'\n);\n// const privateEncrypt = rsaFunctionFor(_privateEncrypt, constants.RSA_PKCS1_PADDING,\n// 'private');\nexport const privateDecrypt = rsaFunctionFor(\n _privateDecrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'private'\n);\n\n// _ _ __ _____ _\n// | | | |/ / | __ \\ (_)\n// __ _ ___ _ __ ___ _ __ __ _| |_ ___| ' / ___ _ _| |__) |_ _ _ _ __\n// / _` |/ _ \\ '_ \\ / _ \\ '__/ _` | __/ _ \\ < / _ \\ | | | ___/ _` | | '__|\n// | (_| | __/ | | | __/ | | (_| | || __/ . \\ __/ |_| | | | (_| | | |\n// \\__, |\\___|_| |_|\\___|_| \\__,_|\\__\\___|_|\\_\\___|\\__, |_| \\__,_|_|_|\n// __/ | __/ |\n// |___/ |___/\ntype GenerateKeyPairOptions = {\n modulusLength: number; // Key size in bits (RSA, DSA).\n publicExponent?: number; // Public exponent (RSA). Default: 0x10001.\n hashAlgorithm?: string; // Name of the message digest (RSA-PSS).\n mgf1HashAlgorithm?: string; // string Name of the message digest used by MGF1 (RSA-PSS).\n saltLength?: number; // Minimal salt length in bytes (RSA-PSS).\n divisorLength?: number; // Size of q in bits (DSA).\n namedCurve?: string; // Name of the curve to use (EC).\n prime?: Buffer; // The prime parameter (DH).\n primeLength?: number; // Prime length in bits (DH).\n generator?: number; // Custom generator (DH). Default: 2.\n groupName?: string; // Diffie-Hellman group name (DH). See crypto.getDiffieHellman().\n publicKeyEncoding?: any; // See keyObject.export().\n privateKeyEncoding?: any; // See keyObject.export().\n paramEncoding?: string;\n hash?: any;\n mgf1Hash?: any;\n};\ntype GenerateKeyPairCallback = (\n error: unknown | null,\n publicKey?: Buffer,\n privateKey?: Buffer\n) => void;\n\nfunction parseKeyEncoding(\n keyType: string,\n options: GenerateKeyPairOptions = kEmptyObject\n) {\n const { publicKeyEncoding, privateKeyEncoding } = options;\n\n let publicFormat, publicType;\n if (publicKeyEncoding == null) {\n publicFormat = publicType = undefined;\n } else if (typeof publicKeyEncoding === 'object') {\n ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(\n publicKeyEncoding,\n keyType,\n 'publicKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.publicKeyEncoding',\n publicKeyEncoding\n );\n }\n\n let privateFormat, privateType, cipher, passphrase;\n if (privateKeyEncoding == null) {\n privateFormat = privateType = undefined;\n } else if (typeof privateKeyEncoding === 'object') {\n ({\n format: privateFormat,\n type: privateType,\n cipher,\n passphrase,\n } = parsePrivateKeyEncoding(\n privateKeyEncoding,\n keyType,\n 'privateKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.privateKeyEncoding',\n publicKeyEncoding\n );\n }\n\n return [\n publicFormat,\n publicType,\n privateFormat,\n privateType,\n cipher,\n passphrase,\n ];\n}\n\nfunction internalGenerateKeyPair(\n isAsync: boolean,\n type: string,\n options: GenerateKeyPairOptions | undefined,\n callback: GenerateKeyPairCallback | undefined\n) {\n // On node a very complex \"job\" chain is created, we are going for a far simpler approach and calling\n // an internal function that basically executes the same byte shuffling on the native side\n const encoding = parseKeyEncoding(type, options);\n\n // if (options !== undefined)\n // validateObject(options, 'options');\n\n switch (type) {\n case 'rsa-pss':\n case 'rsa': {\n validateObject<GenerateKeyPairOptions>(options, 'options');\n const { modulusLength } = options!;\n validateUint32(modulusLength, 'options.modulusLength');\n\n let { publicExponent } = options!;\n if (publicExponent == null) {\n publicExponent = 0x10001;\n } else {\n validateUint32(publicExponent, 'options.publicExponent');\n }\n\n if (type === 'rsa') {\n if (isAsync) {\n NativeQuickCrypto.generateKeyPair(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n )\n .then(([err, publicKey, privateKey]) => {\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n callback?.(err, publicKey, privateKey);\n })\n .catch((err) => {\n callback?.(err, undefined, undefined);\n });\n return;\n } else {\n let [err, publicKey, privateKey] =\n NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n );\n\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n\n return [err, publicKey, privateKey];\n }\n }\n\n const { hash, mgf1Hash, hashAlgorithm, mgf1HashAlgorithm, saltLength } =\n options!;\n\n // // We don't have a process object on RN\n // // const pendingDeprecation = getOptionValue('--pending-deprecation');\n\n if (saltLength !== undefined)\n validateInt32(saltLength, 'options.saltLength', 0);\n if (hashAlgorithm !== undefined)\n validateString(hashAlgorithm, 'options.hashAlgorithm');\n if (mgf1HashAlgorithm !== undefined)\n validateString(mgf1HashAlgorithm, 'options.mgf1HashAlgorithm');\n if (hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.hash\" is deprecated, ' +\n // 'use \"options.hashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(hash, 'options.hash');\n if (hashAlgorithm && hash !== hashAlgorithm) {\n throw new Error(`Invalid Argument options.hash ${hash}`);\n }\n }\n if (mgf1Hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.mgf1Hash\" is deprecated, ' +\n // 'use \"options.mgf1HashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(mgf1Hash, 'options.mgf1Hash');\n if (mgf1HashAlgorithm && mgf1Hash !== mgf1HashAlgorithm) {\n throw new Error(`Invalid Argument options.mgf1Hash ${mgf1Hash}`);\n }\n }\n\n return NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_PSS,\n modulusLength,\n publicExponent,\n hashAlgorithm || hash,\n mgf1HashAlgorithm || mgf1Hash,\n saltLength,\n ...encoding\n );\n }\n // case 'dsa': {\n // validateObject(options, 'options');\n // const { modulusLength } = options!;\n // validateUint32(modulusLength, 'options.modulusLength');\n\n // let { divisorLength } = options!;\n // if (divisorLength == null) {\n // divisorLength = -1;\n // } else validateInt32(divisorLength, 'options.divisorLength', 0);\n\n // // return new DsaKeyPairGenJob(\n // // mode,\n // // modulusLength,\n // // divisorLength,\n // // ...encoding);\n // }\n // case 'ec': {\n // validateObject(options, 'options');\n // const { namedCurve } = options!;\n // validateString(namedCurve, 'options.namedCurve');\n // let { paramEncoding } = options!;\n // if (paramEncoding == null || paramEncoding === 'named')\n // paramEncoding = OPENSSL_EC_NAMED_CURVE;\n // else if (paramEncoding === 'explicit')\n // paramEncoding = OPENSSL_EC_EXPLICIT_CURVE;\n // else\n // throw new Error(`Invalid Argument options.paramEncoding ${paramEncoding}`);\n // // throw new ERR_INVALID_ARG_VALUE('options.paramEncoding', paramEncoding);\n\n // // return new EcKeyPairGenJob(mode, namedCurve, paramEncoding, ...encoding);\n // }\n // case 'ed25519':\n // case 'ed448':\n // case 'x25519':\n // case 'x448': {\n // let id;\n // switch (type) {\n // case 'ed25519':\n // id = EVP_PKEY_ED25519;\n // break;\n // case 'ed448':\n // id = EVP_PKEY_ED448;\n // break;\n // case 'x25519':\n // id = EVP_PKEY_X25519;\n // break;\n // case 'x448':\n // id = EVP_PKEY_X448;\n // break;\n // }\n // return new NidKeyPairGenJob(mode, id, ...encoding);\n // }\n // case 'dh': {\n // validateObject(options, 'options');\n // const { group, primeLength, prime, generator } = options;\n // if (group != null) {\n // if (prime != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'prime');\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');\n // if (generator != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');\n\n // validateString(group, 'options.group');\n\n // return new DhKeyPairGenJob(mode, group, ...encoding);\n // }\n\n // if (prime != null) {\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');\n\n // validateBuffer(prime, 'options.prime');\n // } else if (primeLength != null) {\n // validateInt32(primeLength, 'options.primeLength', 0);\n // } else {\n // throw new ERR_MISSING_OPTION(\n // 'At least one of the group, prime, or primeLength options'\n // );\n // }\n\n // if (generator != null) {\n // validateInt32(generator, 'options.generator', 0);\n // }\n // return new DhKeyPairGenJob(\n // mode,\n // prime != null ? prime : primeLength,\n // generator == null ? 2 : generator,\n // ...encoding\n // );\n // }\n default:\n // Fall through\n }\n throw new Error(\n `Invalid Argument options: ${type} scheme not supported. Currently not all encryption methods are supported in quick-crypto!`\n );\n}\n\n// TODO(osp) put correct types (e.g. type -> 'rsa', etc..)\nexport function generateKeyPair(\n type: string,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options: GenerateKeyPairOptions,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options?: GenerateKeyPairCallback | GenerateKeyPairOptions,\n callback?: GenerateKeyPairCallback\n) {\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n validateFunction(callback);\n\n internalGenerateKeyPair(true, type, options, callback);\n}\n\nexport function generateKeyPairSync(type: string): {\n publicKey: any;\n privateKey: any;\n};\nexport function generateKeyPairSync(\n type: string,\n options: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any };\nexport function generateKeyPairSync(\n type: string,\n options?: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any } {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, publicKey, privateKey] = internalGenerateKeyPair(\n false,\n type,\n options,\n undefined\n )!;\n\n return {\n publicKey,\n privateKey,\n };\n}\n"]}
|
package/lib/module/Hash.js
CHANGED
|
@@ -4,7 +4,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
4
4
|
import 'react-native';
|
|
5
5
|
import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
|
|
6
6
|
import { toArrayBuffer } from './Utils';
|
|
7
|
-
import Stream from 'stream';
|
|
7
|
+
import Stream from 'stream-browserify';
|
|
8
8
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
9
9
|
global.process.nextTick = setImmediate;
|
|
10
10
|
const createInternalHash = NativeQuickCrypto.createHash;
|
package/lib/module/Hash.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Hash.ts"],"names":["NativeQuickCrypto","toArrayBuffer","Stream","Buffer","global","process","nextTick","setImmediate","createInternalHash","createHash","algorithm","options","Hash","Transform","constructor","arg","undefined","internalHash","copy","outputLength","update","data","inputEncoding","ArrayBuffer","buffer","from","_transform","chunk","encoding","callback","_flush","push","digest","result","toString"],"mappings":";;AAAA;AACA,OAAO,cAAP;AACA,SAASA,iBAAT,QAAkC,uCAAlC;AAEA,SAAmBC,aAAnB,QAAwC,SAAxC;AACA,OAAOC,MAAP,MAAmB,
|
|
1
|
+
{"version":3,"sources":["Hash.ts"],"names":["NativeQuickCrypto","toArrayBuffer","Stream","Buffer","global","process","nextTick","setImmediate","createInternalHash","createHash","algorithm","options","Hash","Transform","constructor","arg","undefined","internalHash","copy","outputLength","update","data","inputEncoding","ArrayBuffer","buffer","from","_transform","chunk","encoding","callback","_flush","push","digest","result","toString"],"mappings":";;AAAA;AACA,OAAO,cAAP;AACA,SAASA,iBAAT,QAAkC,uCAAlC;AAEA,SAAmBC,aAAnB,QAAwC,SAAxC;AACA,OAAOC,MAAP,MAAmB,mBAAnB;AACA,SAASC,MAAT,QAAuB,gCAAvB;AAOAC,MAAM,CAACC,OAAP,CAAeC,QAAf,GAA0BC,YAA1B;AAEA,MAAMC,kBAAkB,GAAGR,iBAAiB,CAACS,UAA7C;AAIA,OAAO,SAASA,UAAT,CAAoBC,SAApB,EAAuCC,OAAvC,EAA8D;AACnE,SAAO,IAAIC,IAAJ,CAASF,SAAT,EAAoBC,OAApB,CAAP;AACD;;AAED,MAAMC,IAAN,SAAmBV,MAAM,CAACW,SAA1B,CAAoC;AAKlCC,EAAAA,WAAW,CAACC,GAAD,EAAqBJ,OAArB,EAA4C;AACrD,UAAMA,OAAN,aAAMA,OAAN,cAAMA,OAAN,GAAiBK,SAAjB;;AADqD;;AAErD,QAAID,GAAG,YAAYH,IAAnB,EAAyB;AACvB,WAAKK,YAAL,GAAoBF,GAAG,CAACE,YAAJ,CAAiBC,IAAjB,CAAsBP,OAAtB,aAAsBA,OAAtB,uBAAsBA,OAAO,CAAEQ,YAA/B,CAApB;AACD,KAFD,MAEO;AACL,WAAKF,YAAL,GAAoBT,kBAAkB,CAACO,GAAD,EAAMJ,OAAN,aAAMA,OAAN,uBAAMA,OAAO,CAAEQ,YAAf,CAAtC;AACD;AACF;;AAEDD,EAAAA,IAAI,CAACP,OAAD,EAAkC;AACpC,UAAMO,IAAI,GAAG,IAAIN,IAAJ,CAAS,IAAT,EAAeD,OAAf,CAAb;AACA,WAAOO,IAAP;AACD;AACD;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEE,EAAAA,MAAM,CAACC,IAAD,EAA4BC,aAA5B,EAA4D;AAChE,QAAID,IAAI,YAAYE,WAApB,EAAiC;AAC/B,WAAKN,YAAL,CAAkBG,MAAlB,CAAyBC,IAAzB;AACA,aAAO,IAAP;AACD;;AACD,UAAMG,MAAM,GAAGrB,MAAM,CAACsB,IAAP,CAAYJ,IAAZ,EAAkBC,aAAlB,CAAf;AACA,SAAKL,YAAL,CAAkBG,MAAlB,CAAyBnB,aAAa,CAACuB,MAAD,CAAtC;AACA,WAAO,IAAP;AACD;;AAEDE,EAAAA,UAAU,CACRC,KADQ,EAERC,QAFQ,EAGRC,QAHQ,EAIR;AACA,SAAKT,MAAL,CAAYO,KAAZ,EAAmBC,QAAnB;AACAC,IAAAA,QAAQ;AACT;;AAEDC,EAAAA,MAAM,CAACD,QAAD,EAAuB;AAC3B,SAAKE,IAAL,CAAU,KAAKC,MAAL,EAAV;AACAH,IAAAA,QAAQ;AACT;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIEG,EAAAA,MAAM,CAACJ,QAAD,EAAkD;AACtD,UAAMK,MAAmB,GAAG,KAAKhB,YAAL,CAAkBe,MAAlB,EAA5B;;AAEA,QAAIJ,QAAQ,IAAIA,QAAQ,KAAK,QAA7B,EAAuC;AACrC,aAAOzB,MAAM,CAACsB,IAAP,CAAYQ,MAAZ,EAAoBC,QAApB,CAA6BN,QAA7B,CAAP;AACD;;AAED,WAAOzB,MAAM,CAACsB,IAAP,CAAYQ,MAAZ,CAAP;AACD;;AAzEiC","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport 'react-native';\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport type { InternalHash } from './NativeQuickCrypto/hash';\nimport { Encoding, toArrayBuffer } from './Utils';\nimport Stream from 'stream-browserify';\nimport { Buffer } from '@craftzdog/react-native-buffer';\ninterface HashOptionsBase extends Stream.TransformOptions {\n outputLength?: number | undefined;\n}\n\ntype HashOptions = null | undefined | HashOptionsBase;\n\nglobal.process.nextTick = setImmediate;\n\nconst createInternalHash = NativeQuickCrypto.createHash;\n\ntype BinaryLike = ArrayBuffer;\n\nexport function createHash(algorithm: string, options?: HashOptions) {\n return new Hash(algorithm, options);\n}\n\nclass Hash extends Stream.Transform {\n private internalHash: InternalHash;\n\n constructor(other: Hash, options?: HashOptions);\n constructor(algorithm: string, options?: HashOptions);\n constructor(arg: string | Hash, options?: HashOptions) {\n super(options ?? undefined);\n if (arg instanceof Hash) {\n this.internalHash = arg.internalHash.copy(options?.outputLength);\n } else {\n this.internalHash = createInternalHash(arg, options?.outputLength);\n }\n }\n\n copy(options?: HashOptionsBase): Hash {\n const copy = new Hash(this, options);\n return copy;\n }\n /**\n * Updates the hash content with the given `data`, the encoding of which\n * is given in `inputEncoding`.\n * If `encoding` is not provided, and the `data` is a string, an\n * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.\n *\n * This can be called many times with new data as it is streamed.\n * @since v0.1.92\n * @param inputEncoding The `encoding` of the `data` string.\n */\n update(data: string | BinaryLike, inputEncoding?: Encoding): Hash {\n if (data instanceof ArrayBuffer) {\n this.internalHash.update(data);\n return this;\n }\n const buffer = Buffer.from(data, inputEncoding);\n this.internalHash.update(toArrayBuffer(buffer));\n return this;\n }\n\n _transform(\n chunk: string | BinaryLike,\n encoding: Encoding,\n callback: () => void\n ) {\n this.update(chunk, encoding);\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.digest());\n callback();\n }\n\n /**\n * Calculates the digest of all of the data passed to be hashed (using the `hash.update()` method).\n * If `encoding` is provided a string will be returned; otherwise\n * a `Buffer` is returned.\n *\n * The `Hash` object can not be used again after `hash.digest()` method has been\n * called. Multiple calls will cause an error to be thrown.\n * @since v0.1.92\n * @param encoding The `encoding` of the return value.\n */\n digest(): Buffer;\n digest(encoding: 'buffer'): Buffer;\n digest(encoding: Encoding): string;\n digest(encoding?: Encoding | 'buffer'): string | Buffer {\n const result: ArrayBuffer = this.internalHash.digest();\n\n if (encoding && encoding !== 'buffer') {\n return Buffer.from(result).toString(encoding);\n }\n\n return Buffer.from(result);\n }\n}\n"]}
|
package/lib/module/Hmac.js
CHANGED
|
@@ -3,7 +3,7 @@ function _defineProperty(obj, key, value) { if (key in obj) { Object.definePrope
|
|
|
3
3
|
/* eslint-disable no-dupe-class-members */
|
|
4
4
|
import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
|
|
5
5
|
import { toArrayBuffer, binaryLikeToArrayBuffer } from './Utils';
|
|
6
|
-
import Stream from 'stream';
|
|
6
|
+
import Stream from 'stream-browserify';
|
|
7
7
|
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
8
8
|
const createInternalHmac = NativeQuickCrypto.createHmac;
|
|
9
9
|
export function createHmac(algorithm, key, options) {
|
package/lib/module/Hmac.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["Hmac.ts"],"names":["NativeQuickCrypto","toArrayBuffer","binaryLikeToArrayBuffer","Stream","Buffer","createInternalHmac","createHmac","algorithm","key","options","Hmac","Transform","constructor","_options","keyAsString","undefined","internalHmac","update","data","inputEncoding","ArrayBuffer","buffer","from","_transform","chunk","encoding","callback","_flush","push","digest","result","isFinalized","toString"],"mappings":";;AAAA;AACA,SAASA,iBAAT,QAAkC,uCAAlC;AAEA,SAEEC,aAFF,EAIEC,uBAJF,QAKO,SALP;AAMA,OAAOC,MAAP,MAAmB,
|
|
1
|
+
{"version":3,"sources":["Hmac.ts"],"names":["NativeQuickCrypto","toArrayBuffer","binaryLikeToArrayBuffer","Stream","Buffer","createInternalHmac","createHmac","algorithm","key","options","Hmac","Transform","constructor","_options","keyAsString","undefined","internalHmac","update","data","inputEncoding","ArrayBuffer","buffer","from","_transform","chunk","encoding","callback","_flush","push","digest","result","isFinalized","toString"],"mappings":";;AAAA;AACA,SAASA,iBAAT,QAAkC,uCAAlC;AAEA,SAEEC,aAFF,EAIEC,uBAJF,QAKO,SALP;AAMA,OAAOC,MAAP,MAAmB,mBAAnB;AACA,SAASC,MAAT,QAAuB,gCAAvB;AAEA,MAAMC,kBAAkB,GAAGL,iBAAiB,CAACM,UAA7C;AAEA,OAAO,SAASA,UAAT,CACLC,SADK,EAELC,GAFK,EAGLC,OAHK,EAIL;AACA,SAAO,IAAIC,IAAJ,CAASH,SAAT,EAAoBC,GAApB,EAAyBC,OAAzB,CAAP;AACD;;AAED,MAAMC,IAAN,SAAmBP,MAAM,CAACQ,SAA1B,CAAoC;AAIlCC,EAAAA,WAAW,CACTL,SADS,EAETC,GAFS,EAGTK,QAHS,EAIT;AACA;;AADA;;AAAA,yCAN6B,KAM7B;;AAEA,QAAIC,WAAW,GAAGZ,uBAAuB,CAACM,GAAD,CAAzC;;AAEA,QAAIM,WAAW,KAAKC,SAApB,EAA+B;AAC7B,YAAM,gBAAN;AACD;;AAED,SAAKC,YAAL,GAAoBX,kBAAkB,CACpCE,SADoC,EAEpCO,WAFoC,CAAtC;AAID;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACEG,EAAAA,MAAM,CAACC,IAAD,EAA4BC,aAA5B,EAA4D;AAChE,QAAID,IAAI,YAAYE,WAApB,EAAiC;AAC/B,WAAKJ,YAAL,CAAkBC,MAAlB,CAAyBC,IAAzB;AACA,aAAO,IAAP;AACD;;AACD,QAAI,OAAOA,IAAP,KAAgB,QAApB,EAA8B;AAC5B,YAAMG,MAAM,GAAGjB,MAAM,CAACkB,IAAP,CAAYJ,IAAZ,EAAkBC,aAAlB,CAAf;AACA,WAAKH,YAAL,CAAkBC,MAAlB,CAAyBhB,aAAa,CAACoB,MAAD,CAAtC;AACA,aAAO,IAAP;AACD;;AAED,SAAKL,YAAL,CAAkBC,MAAlB,CAAyBf,uBAAuB,CAACgB,IAAD,CAAhD;AACA,WAAO,IAAP;AACD;;AAEDK,EAAAA,UAAU,CACRC,KADQ,EAERC,QAFQ,EAGRC,QAHQ,EAIR;AACA,SAAKT,MAAL,CAAYO,KAAZ,EAAmBC,QAAnB;AACAC,IAAAA,QAAQ;AACT;;AAEDC,EAAAA,MAAM,CAACD,QAAD,EAAuB;AAC3B,SAAKE,IAAL,CAAU,KAAKC,MAAL,EAAV;AACAH,IAAAA,QAAQ;AACT;AAED;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAIEG,EAAAA,MAAM,CAACJ,QAAD,EAAkD;AACtD,UAAMK,MAAmB,GAAG,KAAKC,WAAL,GACxB,IAAIX,WAAJ,CAAgB,CAAhB,CADwB,GAExB,KAAKJ,YAAL,CAAkBa,MAAlB,EAFJ;AAGA,SAAKE,WAAL,GAAmB,IAAnB;;AACA,QAAIN,QAAQ,IAAIA,QAAQ,KAAK,QAA7B,EAAuC;AACrC,aAAOrB,MAAM,CAACkB,IAAP,CAAYQ,MAAZ,EAAoBE,QAApB,CAA6BP,QAA7B,CAAP;AACD;;AACD,WAAOrB,MAAM,CAACkB,IAAP,CAAYQ,MAAZ,CAAP;AACD;;AAnFiC","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport type { InternalHmac } from './NativeQuickCrypto/hmac';\nimport {\n Encoding,\n toArrayBuffer,\n BinaryLike,\n binaryLikeToArrayBuffer,\n} from './Utils';\nimport Stream from 'stream-browserify';\nimport { Buffer } from '@craftzdog/react-native-buffer';\n\nconst createInternalHmac = NativeQuickCrypto.createHmac;\n\nexport function createHmac(\n algorithm: string,\n key: BinaryLike,\n options?: Stream.TransformOptions\n) {\n return new Hmac(algorithm, key, options);\n}\n\nclass Hmac extends Stream.Transform {\n private internalHmac: InternalHmac;\n private isFinalized: boolean = false;\n\n constructor(\n algorithm: string,\n key: BinaryLike,\n _options?: Stream.TransformOptions\n ) {\n super();\n let keyAsString = binaryLikeToArrayBuffer(key);\n\n if (keyAsString === undefined) {\n throw 'Wrong key type';\n }\n\n this.internalHmac = createInternalHmac(\n algorithm,\n keyAsString as ArrayBuffer\n );\n }\n\n /**\n * Updates the `Hmac` content with the given `data`, the encoding of which\n * is given in `inputEncoding`.\n * If `encoding` is not provided, and the `data` is a string, an\n * encoding of `'utf8'` is enforced. If `data` is a `Buffer`, `TypedArray`, or`DataView`, then `inputEncoding` is ignored.\n *\n * This can be called many times with new data as it is streamed.\n * @since v0.1.94\n * @param inputEncoding The `encoding` of the `data` string.\n */\n update(data: string | BinaryLike, inputEncoding?: Encoding): Hmac {\n if (data instanceof ArrayBuffer) {\n this.internalHmac.update(data);\n return this;\n }\n if (typeof data === 'string') {\n const buffer = Buffer.from(data, inputEncoding);\n this.internalHmac.update(toArrayBuffer(buffer));\n return this;\n }\n\n this.internalHmac.update(binaryLikeToArrayBuffer(data));\n return this;\n }\n\n _transform(\n chunk: string | BinaryLike,\n encoding: Encoding,\n callback: () => void\n ) {\n this.update(chunk, encoding);\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.digest());\n callback();\n }\n\n /**\n * Calculates the HMAC digest of all of the data passed using `hmac.update()`.\n * If `encoding` is\n * provided a string is returned; otherwise a `Buffer` is returned;\n *\n * The `Hmac` object can not be used again after `hmac.digest()` has been\n * called. Multiple calls to `hmac.digest()` will result in an error being thrown.\n * @since v0.1.94\n * @param encoding The `encoding` of the return value.\n */\n digest(): Buffer;\n digest(encoding: 'buffer'): Buffer;\n digest(encoding: Encoding): string;\n digest(encoding?: Encoding | 'buffer'): string | Buffer {\n const result: ArrayBuffer = this.isFinalized\n ? new ArrayBuffer(0)\n : this.internalHmac.digest();\n this.isFinalized = true;\n if (encoding && encoding !== 'buffer') {\n return Buffer.from(result).toString(encoding);\n }\n return Buffer.from(result);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["NativeQuickCrypto.ts"],"names":["NativeModules","Platform","global","__QuickCryptoProxy","QuickCryptoModule","QuickCrypto","message","OS","ExpoConstants","NativeUnimoduleProxy","modulesConstants","ExponentConstants","appOwnership","Error","nativeCallSyncHook","install","result","proxy","NativeQuickCrypto"],"mappings":"AAAA,SAASA,aAAT,EAAwBC,QAAxB,QAAwC,cAAxC;;
|
|
1
|
+
{"version":3,"sources":["NativeQuickCrypto.ts"],"names":["NativeModules","Platform","global","__QuickCryptoProxy","QuickCryptoModule","QuickCrypto","message","OS","ExpoConstants","NativeUnimoduleProxy","modulesConstants","ExponentConstants","appOwnership","Error","nativeCallSyncHook","install","result","proxy","NativeQuickCrypto"],"mappings":"AAAA,SAASA,aAAT,EAAwBC,QAAxB,QAAwC,cAAxC;;AAqCA;AACA,IAAIC,MAAM,CAACC,kBAAP,IAA6B,IAAjC,EAAuC;AACrC;AACA,QAAMC,iBAAiB,GAAGJ,aAAa,CAACK,WAAxC;;AACA,MAAID,iBAAiB,IAAI,IAAzB,EAA+B;AAAA;;AAC7B,QAAIE,OAAO,GACT,kGADF;AAEAA,IAAAA,OAAO,IACL,2GADF;;AAEA,QAAIL,QAAQ,CAACM,EAAT,KAAgB,KAAhB,IAAyBN,QAAQ,CAACM,EAAT,KAAgB,OAA7C,EAAsD;AACpDD,MAAAA,OAAO,IAAI,4DAAX;AACD;;AACD,QAAIL,QAAQ,CAACM,EAAT,KAAgB,SAApB,EAA+B;AAC7BD,MAAAA,OAAO,IAAI,iCAAX;AACD,KAV4B,CAW7B;;;AACA,UAAME,aAAa,4BACjBR,aAAa,CAACS,oBADG,oFACjB,sBAAoCC,gBADnB,2DACjB,uBAAsDC,iBADxD;;AAEA,QAAIH,aAAa,IAAI,IAArB,EAA2B;AACzB,UAAIA,aAAa,CAACI,YAAd,KAA+B,MAAnC,EAA2C;AACzC;AACA,cAAM,IAAIC,KAAJ,CACJ,uHADI,CAAN;AAGD,OALD,MAKO;AACL;AACAP,QAAAA,OAAO,IAAI,wCAAX;AACD;AACF;;AAEDA,IAAAA,OAAO,IAAI,oCAAX;AACA,UAAM,IAAIO,KAAJ,CAAUP,OAAV,CAAN;AACD,GA/BoC,CAiCrC;;;AACA,MAAIJ,MAAM,CAACY,kBAAP,IAA6B,IAA7B,IAAqCV,iBAAiB,CAACW,OAAlB,IAA6B,IAAtE,EAA4E;AAC1E,UAAM,IAAIF,KAAJ,CACJ,oRADI,CAAN;AAGD,GAtCoC,CAwCrC;;;AACA,QAAMG,MAAM,GAAGZ,iBAAiB,CAACW,OAAlB,EAAf;AACA,MAAIC,MAAM,KAAK,IAAf,EACE,MAAM,IAAIH,KAAJ,CACH,oKAAmKG,MAAO,EADvK,CAAN,CA3CmC,CA+CrC;;AACA,MAAId,MAAM,CAACC,kBAAP,IAA6B,IAAjC,EACE,MAAM,IAAIU,KAAJ,CACJ,4JADI,CAAN;AAGH;;AAED,MAAMI,KAAK,GAAGf,MAAM,CAACC,kBAArB;AACA,OAAO,MAAMe,iBAAiB,GAAGD,KAA1B","sourcesContent":["import { NativeModules, Platform } from 'react-native';\nimport type { CreateHmacMethod } from './hmac';\nimport type { CreateHashMethod } from './hash';\nimport type { Pbkdf2Object } from './pbkdf2';\nimport type { RandomObject } from './random';\nimport type {\n CreateCipherMethod,\n CreateDecipherMethod,\n PublicEncryptMethod,\n PrivateDecryptMethod,\n GenerateKeyPairMethod,\n GenerateKeyPairSyncMethod,\n} from './Cipher';\nimport type { CreateSignMethod, CreateVerifyMethod } from './sig';\n\ninterface NativeQuickCryptoSpec {\n createHmac: CreateHmacMethod;\n pbkdf2: Pbkdf2Object;\n random: RandomObject;\n createHash: CreateHashMethod;\n createCipher: CreateCipherMethod;\n createDecipher: CreateDecipherMethod;\n publicEncrypt: PublicEncryptMethod;\n publicDecrypt: PublicEncryptMethod;\n privateDecrypt: PrivateDecryptMethod;\n generateKeyPair: GenerateKeyPairMethod;\n generateKeyPairSync: GenerateKeyPairSyncMethod;\n createSign: CreateSignMethod;\n createVerify: CreateVerifyMethod;\n}\n\n// global func declaration for JSI functions\ndeclare global {\n function nativeCallSyncHook(): unknown;\n var __QuickCryptoProxy: object | undefined;\n}\n\n// Check if the constructor exists. If not, try installing the JSI bindings.\nif (global.__QuickCryptoProxy == null) {\n // Get the native QuickCrypto ReactModule\n const QuickCryptoModule = NativeModules.QuickCrypto;\n if (QuickCryptoModule == null) {\n let message =\n 'Failed to install react-native-quick-crypto: The native `QuickCrypto` Module could not be found.';\n message +=\n '\\n* Make sure react-native-quick-crypto is correctly autolinked (run `npx react-native config` to verify)';\n if (Platform.OS === 'ios' || Platform.OS === 'macos') {\n message += '\\n* Make sure you ran `pod install` in the ios/ directory.';\n }\n if (Platform.OS === 'android') {\n message += '\\n* Make sure gradle is synced.';\n }\n // check if Expo\n const ExpoConstants =\n NativeModules.NativeUnimoduleProxy?.modulesConstants?.ExponentConstants;\n if (ExpoConstants != null) {\n if (ExpoConstants.appOwnership === 'expo') {\n // We're running Expo Go\n throw new Error(\n 'react-native-quick-crypto is not supported in Expo Go! Use EAS (`expo prebuild`) or eject to a bare workflow instead.'\n );\n } else {\n // We're running Expo bare / standalone\n message += '\\n* Make sure you ran `expo prebuild`.';\n }\n }\n\n message += '\\n* Make sure you rebuilt the app.';\n throw new Error(message);\n }\n\n // Check if we are running on-device (JSI)\n if (global.nativeCallSyncHook == null || QuickCryptoModule.install == null) {\n throw new Error(\n 'Failed to install react-native-quick-crypto: React Native is not running on-device. QuickCrypto can only be used when synchronous method invocations (JSI) are possible. If you are using a remote debugger (e.g. Chrome), switch to an on-device debugger (e.g. Flipper) instead.'\n );\n }\n\n // Call the synchronous blocking install() function\n const result = QuickCryptoModule.install();\n if (result !== true)\n throw new Error(\n `Failed to install react-native-quick-crypto: The native QuickCrypto Module could not be installed! Looks like something went wrong when installing JSI bindings: ${result}`\n );\n\n // Check again if the constructor now exists. If not, throw an error.\n if (global.__QuickCryptoProxy == null)\n throw new Error(\n 'Failed to install react-native-quick-crypto, the native initializer function does not exist. Are you trying to use QuickCrypto from different JS Runtimes?'\n );\n}\n\nconst proxy = global.__QuickCryptoProxy;\nexport const NativeQuickCrypto = proxy as any as NativeQuickCryptoSpec;\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","sourcesContent":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import * as pbkdf2 from './pbkdf2';
|
|
2
2
|
import * as random from './random';
|
|
3
3
|
import { createCipher, createCipheriv, createDecipher, createDecipheriv, publicEncrypt, publicDecrypt, privateDecrypt, generateKeyPair, generateKeyPairSync } from './Cipher';
|
|
4
|
+
import { createSign, createVerify } from './sig';
|
|
4
5
|
import { createHmac } from './Hmac';
|
|
5
6
|
import { createHash } from './Hash';
|
|
6
7
|
import { constants } from './constants';
|
|
@@ -18,6 +19,8 @@ export const QuickCrypto = {
|
|
|
18
19
|
privateDecrypt,
|
|
19
20
|
generateKeyPair,
|
|
20
21
|
generateKeyPairSync,
|
|
22
|
+
createSign,
|
|
23
|
+
createVerify,
|
|
21
24
|
constants,
|
|
22
25
|
...pbkdf2,
|
|
23
26
|
...random
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["QuickCrypto.ts"],"names":["pbkdf2","random","createCipher","createCipheriv","createDecipher","createDecipheriv","publicEncrypt","publicDecrypt","privateDecrypt","generateKeyPair","generateKeyPairSync","createHmac","createHash","constants","QuickCrypto","Hmac","Hash"],"mappings":"AAAA,OAAO,KAAKA,MAAZ,MAAwB,UAAxB;AACA,OAAO,KAAKC,MAAZ,MAAwB,UAAxB;AACA,SACEC,YADF,EAEEC,cAFF,EAGEC,cAHF,EAIEC,gBAJF,EAKEC,aALF,EAMEC,aANF,EAOEC,cAPF,EAQEC,eARF,EASEC,mBATF,QAUO,UAVP;AAWA,SAASC,UAAT,QAA2B,QAA3B;AACA,SAASC,UAAT,QAA2B,QAA3B;AACA,SAASC,SAAT,QAA0B,aAA1B;AAEA,OAAO,MAAMC,WAAW,GAAG;AACzBH,EAAAA,UADyB;AAEzBI,EAAAA,IAAI,EAAEJ,UAFmB;AAGzBK,EAAAA,IAAI,EAAEJ,UAHmB;AAIzBA,EAAAA,UAJyB;
|
|
1
|
+
{"version":3,"sources":["QuickCrypto.ts"],"names":["pbkdf2","random","createCipher","createCipheriv","createDecipher","createDecipheriv","publicEncrypt","publicDecrypt","privateDecrypt","generateKeyPair","generateKeyPairSync","createSign","createVerify","createHmac","createHash","constants","QuickCrypto","Hmac","Hash"],"mappings":"AAAA,OAAO,KAAKA,MAAZ,MAAwB,UAAxB;AACA,OAAO,KAAKC,MAAZ,MAAwB,UAAxB;AACA,SACEC,YADF,EAEEC,cAFF,EAGEC,cAHF,EAIEC,gBAJF,EAKEC,aALF,EAMEC,aANF,EAOEC,cAPF,EAQEC,eARF,EASEC,mBATF,QAUO,UAVP;AAWA,SAASC,UAAT,EAAqBC,YAArB,QAAyC,OAAzC;AACA,SAASC,UAAT,QAA2B,QAA3B;AACA,SAASC,UAAT,QAA2B,QAA3B;AACA,SAASC,SAAT,QAA0B,aAA1B;AAEA,OAAO,MAAMC,WAAW,GAAG;AACzBH,EAAAA,UADyB;AAEzBI,EAAAA,IAAI,EAAEJ,UAFmB;AAGzBK,EAAAA,IAAI,EAAEJ,UAHmB;AAIzBA,EAAAA,UAJyB;AAKzBZ,EAAAA,YALyB;AAMzBC,EAAAA,cANyB;AAOzBC,EAAAA,cAPyB;AAQzBC,EAAAA,gBARyB;AASzBC,EAAAA,aATyB;AAUzBC,EAAAA,aAVyB;AAWzBC,EAAAA,cAXyB;AAYzBC,EAAAA,eAZyB;AAazBC,EAAAA,mBAbyB;AAczBC,EAAAA,UAdyB;AAezBC,EAAAA,YAfyB;AAgBzBG,EAAAA,SAhByB;AAiBzB,KAAGf,MAjBsB;AAkBzB,KAAGC;AAlBsB,CAApB","sourcesContent":["import * as pbkdf2 from './pbkdf2';\nimport * as random from './random';\nimport {\n createCipher,\n createCipheriv,\n createDecipher,\n createDecipheriv,\n publicEncrypt,\n publicDecrypt,\n privateDecrypt,\n generateKeyPair,\n generateKeyPairSync,\n} from './Cipher';\nimport { createSign, createVerify } from './sig';\nimport { createHmac } from './Hmac';\nimport { createHash } from './Hash';\nimport { constants } from './constants';\n\nexport const QuickCrypto = {\n createHmac,\n Hmac: createHmac,\n Hash: createHash,\n createHash,\n createCipher,\n createCipheriv,\n createDecipher,\n createDecipheriv,\n publicEncrypt,\n publicDecrypt,\n privateDecrypt,\n generateKeyPair,\n generateKeyPairSync,\n createSign,\n createVerify,\n constants,\n ...pbkdf2,\n ...random,\n};\n"]}
|
package/lib/module/index.js
CHANGED
|
@@ -1,4 +1,14 @@
|
|
|
1
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
1
2
|
import { QuickCrypto } from './QuickCrypto';
|
|
2
|
-
|
|
3
|
-
|
|
3
|
+
import FallbackCrypto from 'crypto-browserify'; // @ts-expect-error Buffer does not match exact same type definition.
|
|
4
|
+
|
|
5
|
+
global.Buffer = Buffer;
|
|
6
|
+
const crypto = { ...FallbackCrypto,
|
|
7
|
+
...QuickCrypto
|
|
8
|
+
}; // for randombytes https://github.com/crypto-browserify/randombytes/blob/master/browser.js#L16
|
|
9
|
+
// @ts-expect-error QuickCrypto is missing `subtle` and `randomUUID`
|
|
10
|
+
|
|
11
|
+
global.crypto = crypto;
|
|
12
|
+
module.exports = crypto;
|
|
13
|
+
export default crypto;
|
|
4
14
|
//# sourceMappingURL=index.js.map
|
package/lib/module/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["index.ts"],"names":["QuickCrypto"],"mappings":"AAAA,SAASA,WAAT,QAA4B,eAA5B;
|
|
1
|
+
{"version":3,"sources":["index.ts"],"names":["Buffer","QuickCrypto","FallbackCrypto","global","crypto","module","exports"],"mappings":"AAAA,SAASA,MAAT,QAAuB,gCAAvB;AACA,SAASC,WAAT,QAA4B,eAA5B;AACA,OAAOC,cAAP,MAA2B,mBAA3B,C,CAEA;;AACAC,MAAM,CAACH,MAAP,GAAgBA,MAAhB;AAEA,MAAMI,MAAM,GAAG,EAAE,GAAGF,cAAL;AAAqB,KAAGD;AAAxB,CAAf,C,CAEA;AACA;;AACAE,MAAM,CAACC,MAAP,GAAgBA,MAAhB;AAEAC,MAAM,CAACC,OAAP,GAAiBF,MAAjB;AACA,eAAeA,MAAf","sourcesContent":["import { Buffer } from '@craftzdog/react-native-buffer';\nimport { QuickCrypto } from './QuickCrypto';\nimport FallbackCrypto from 'crypto-browserify';\n\n// @ts-expect-error Buffer does not match exact same type definition.\nglobal.Buffer = Buffer;\n\nconst crypto = { ...FallbackCrypto, ...QuickCrypto };\n\n// for randombytes https://github.com/crypto-browserify/randombytes/blob/master/browser.js#L16\n// @ts-expect-error QuickCrypto is missing `subtle` and `randomUUID`\nglobal.crypto = crypto;\n\nmodule.exports = crypto;\nexport default crypto;\n"]}
|
package/lib/module/keys.js
CHANGED
|
@@ -48,10 +48,7 @@ function parseKeyType(typeStr, required, keyType, isPublic, optionName) {
|
|
|
48
48
|
return undefined;
|
|
49
49
|
} else if (typeStr === 'pkcs1') {
|
|
50
50
|
if (keyType !== undefined && keyType !== 'rsa') {
|
|
51
|
-
throw new Error(`Crypto incompatible key options: ${typeStr} can only be used for RSA keys`);
|
|
52
|
-
// typeStr,
|
|
53
|
-
// 'can only be used for RSA keys'
|
|
54
|
-
// );
|
|
51
|
+
throw new Error(`Crypto incompatible key options: ${typeStr} can only be used for RSA keys`);
|
|
55
52
|
}
|
|
56
53
|
|
|
57
54
|
return KeyEncoding.kKeyEncodingPKCS1;
|
package/lib/module/keys.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["keys.ts"],"names":["binaryLikeToArrayBuffer","isStringOrBuffer","KFormatType","KeyInputContext","KeyEncoding","encodingNames","kKeyEncodingPKCS1","kKeyEncodingPKCS8","kKeyEncodingSPKI","kKeyEncodingSEC1","option","name","objName","undefined","parseKeyFormat","formatStr","defaultFormat","optionName","kKeyFormatPEM","kKeyFormatDER","kKeyFormatJWK","Error","parseKeyType","typeStr","required","keyType","isPublic","parseKeyFormatAndType","enc","format","type","isInput","isRequired","parseKeyEncoding","cipher","passphrase","encoding","prepareAsymmetricKey","key","ctx","data","kConsumePrivate","kCreatePrivate","preparePrivateKey","preparePublicOrPrivateKey","kConsumePublic","parsePublicKeyEncoding","parsePrivateKeyEncoding"],"mappings":"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","sourcesContent":["import { BinaryLike, binaryLikeToArrayBuffer, isStringOrBuffer } from './Utils';\n\n// On node this value is defined on the native side, for now I'm just creating it here in JS\n// TODO(osp) move this into native side to make sure they always match\nenum KFormatType {\n kKeyFormatDER,\n kKeyFormatPEM,\n kKeyFormatJWK,\n}\n\nenum KeyInputContext {\n kConsumePublic,\n kConsumePrivate,\n kCreatePublic,\n kCreatePrivate,\n}\n\nenum KeyEncoding {\n kKeyEncodingPKCS1,\n kKeyEncodingPKCS8,\n kKeyEncodingSPKI,\n kKeyEncodingSEC1,\n}\n\nconst encodingNames = {\n [KeyEncoding.kKeyEncodingPKCS1]: 'pkcs1',\n [KeyEncoding.kKeyEncodingPKCS8]: 'pkcs8',\n [KeyEncoding.kKeyEncodingSPKI]: 'spki',\n [KeyEncoding.kKeyEncodingSEC1]: 'sec1',\n};\n\nfunction option(name: string, objName: string | undefined) {\n return objName === undefined\n ? `options.${name}`\n : `options.${objName}.${name}`;\n}\n\nfunction parseKeyFormat(\n formatStr: string,\n defaultFormat: KFormatType | undefined,\n optionName?: string\n) {\n if (formatStr === undefined && defaultFormat !== undefined)\n return defaultFormat;\n else if (formatStr === 'pem') return KFormatType.kKeyFormatPEM;\n else if (formatStr === 'der') return KFormatType.kKeyFormatDER;\n else if (formatStr === 'jwk') return KFormatType.kKeyFormatJWK;\n throw new Error(`Invalid key format str: ${optionName}`);\n // throw new ERR_INVALID_ARG_VALUE(optionName, formatStr);\n}\n\nfunction parseKeyType(\n typeStr: string,\n required: boolean,\n keyType: string,\n isPublic: boolean,\n optionName: string\n) {\n if (typeStr === undefined && !required) {\n return undefined;\n } else if (typeStr === 'pkcs1') {\n if (keyType !== undefined && keyType !== 'rsa') {\n throw new Error(\n `Crypto incompatible key options: ${typeStr} can only be used for RSA keys`\n );\n // throw new ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS(\n // typeStr,\n // 'can only be used for RSA keys'\n // );\n }\n return KeyEncoding.kKeyEncodingPKCS1;\n } else if (typeStr === 'spki' && isPublic !== false) {\n return KeyEncoding.kKeyEncodingSPKI;\n } else if (typeStr === 'pkcs8' && isPublic !== true) {\n return KeyEncoding.kKeyEncodingPKCS8;\n } else if (typeStr === 'sec1' && isPublic !== true) {\n if (keyType !== undefined && keyType !== 'ec') {\n throw new Error(\n `Incompatible key options ${typeStr} can only be used for EC keys`\n );\n }\n return KeyEncoding.kKeyEncodingSEC1;\n }\n\n throw new Error(`Invalid option ${optionName} - ${typeStr}`);\n}\n\nfunction parseKeyFormatAndType(\n enc: any,\n keyType: any,\n isPublic: any,\n objName: any\n) {\n const { format: formatStr, type: typeStr } = enc;\n\n const isInput = keyType === undefined;\n const format = parseKeyFormat(\n formatStr,\n isInput ? KFormatType.kKeyFormatPEM : undefined,\n option('format', objName)\n );\n\n const isRequired =\n (!isInput || format === KFormatType.kKeyFormatDER) &&\n format !== KFormatType.kKeyFormatJWK;\n const type = parseKeyType(\n typeStr,\n isRequired,\n keyType,\n isPublic,\n option('type', objName)\n );\n return { format, type };\n}\n\nfunction parseKeyEncoding(\n enc: {\n key: any;\n encoding?: string;\n format?: string;\n cipher?: string;\n passphrase?: string;\n },\n keyType: string | undefined,\n isPublic: boolean | undefined,\n objName?: string\n) {\n // validateObject(enc, 'options');\n\n const isInput = keyType === undefined;\n\n const { format, type } = parseKeyFormatAndType(\n enc,\n keyType,\n isPublic,\n objName\n );\n\n let cipher, passphrase, encoding;\n if (isPublic !== true) {\n ({ cipher, passphrase, encoding } = enc);\n\n if (!isInput) {\n if (cipher != null) {\n if (typeof cipher !== 'string')\n throw new Error(\n `Invalid argument ${option('cipher', objName)}: ${cipher}`\n );\n if (\n format === KFormatType.kKeyFormatDER &&\n (type === KeyEncoding.kKeyEncodingPKCS1 ||\n type === KeyEncoding.kKeyEncodingSEC1)\n ) {\n throw new Error(\n `Incompatible key options ${encodingNames[type]} does not support encryption`\n );\n }\n } else if (passphrase !== undefined) {\n throw new Error(\n `invalid argument ${option('cipher', objName)}: ${cipher}`\n );\n }\n }\n\n if (\n (isInput && passphrase !== undefined && !isStringOrBuffer(passphrase)) ||\n (!isInput && cipher != null && !isStringOrBuffer(passphrase))\n ) {\n throw new Error(\n `Invalid argument value ${option('passphrase', objName)}: ${passphrase}`\n );\n }\n }\n\n if (passphrase !== undefined)\n passphrase = binaryLikeToArrayBuffer(passphrase, encoding);\n\n return { format, type, cipher, passphrase };\n}\n\nfunction prepareAsymmetricKey(\n key:\n | BinaryLike\n | { key: any; encoding?: string; format?: any; passphrase?: string },\n ctx: KeyInputContext\n): {\n format: KFormatType;\n data: ArrayBuffer;\n type?: any;\n passphrase?: any;\n} {\n // TODO(osp) check, KeyObject some node object\n // if (isKeyObject(key)) {\n // // Best case: A key object, as simple as that.\n // return { data: getKeyObjectHandle(key, ctx) };\n // } else\n // if (isCryptoKey(key)) {\n // return { data: getKeyObjectHandle(key[kKeyObject], ctx) };\n // } else\n if (isStringOrBuffer(key)) {\n // Expect PEM by default, mostly for backward compatibility.\n return {\n format: KFormatType.kKeyFormatPEM,\n data: binaryLikeToArrayBuffer(key),\n };\n } else if (typeof key === 'object') {\n const {\n key: data,\n encoding,\n // format\n } = key;\n // // The 'key' property can be a KeyObject as well to allow specifying\n // // additional options such as padding along with the key.\n // if (isKeyObject(data)) return { data: getKeyObjectHandle(data, ctx) };\n // else if (isCryptoKey(data))\n // return { data: getKeyObjectHandle(data[kKeyObject], ctx) };\n // else if (isJwk(data) && format === 'jwk')\n // return { data: getKeyObjectHandleFromJwk(data, ctx), format: 'jwk' };\n // Either PEM or DER using PKCS#1 or SPKI.\n if (!isStringOrBuffer(data)) {\n throw new Error(\n 'prepareAsymmetricKey: key is not a string or ArrayBuffer'\n );\n }\n\n const isPublic =\n ctx === KeyInputContext.kConsumePrivate ||\n ctx === KeyInputContext.kCreatePrivate\n ? false\n : undefined;\n\n return {\n data: binaryLikeToArrayBuffer(data, encoding),\n ...parseKeyEncoding(key, undefined, isPublic),\n };\n }\n\n throw new Error('[prepareAsymetricKey] Invalid argument key: ${key}');\n}\n\n// TODO(osp) any here is a node KeyObject\nexport function preparePrivateKey(\n key:\n | BinaryLike\n | {\n key: any;\n encoding?: string;\n format?: any;\n padding?: number;\n passphrase?: string;\n }\n) {\n return prepareAsymmetricKey(key, KeyInputContext.kConsumePrivate);\n}\n\n// TODO(osp) any here is a node KeyObject\nexport function preparePublicOrPrivateKey(\n key:\n | BinaryLike\n | { key: any; encoding?: string; format?: any; padding?: number }\n) {\n return prepareAsymmetricKey(key, KeyInputContext.kConsumePublic);\n}\n\n// Parses the public key encoding based on an object. keyType must be undefined\n// when this is used to parse an input encoding and must be a valid key type if\n// used to parse an output encoding.\nexport function parsePublicKeyEncoding(\n enc: {\n key: any;\n encoding?: string;\n format?: string;\n cipher?: string;\n passphrase?: string;\n },\n keyType: string | undefined,\n objName?: string\n) {\n return parseKeyEncoding(enc, keyType, keyType ? true : undefined, objName);\n}\n\n// Parses the private key encoding based on an object. keyType must be undefined\n// when this is used to parse an input encoding and must be a valid key type if\n// used to parse an output encoding.\nexport function parsePrivateKeyEncoding(\n enc: {\n key: any;\n encoding?: string;\n format?: string;\n cipher?: string;\n passphrase?: string;\n },\n keyType: string | undefined,\n objName?: string\n) {\n return parseKeyEncoding(enc, keyType, false, objName);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["keys.ts"],"names":["binaryLikeToArrayBuffer","isStringOrBuffer","KFormatType","KeyInputContext","KeyEncoding","encodingNames","kKeyEncodingPKCS1","kKeyEncodingPKCS8","kKeyEncodingSPKI","kKeyEncodingSEC1","option","name","objName","undefined","parseKeyFormat","formatStr","defaultFormat","optionName","kKeyFormatPEM","kKeyFormatDER","kKeyFormatJWK","Error","parseKeyType","typeStr","required","keyType","isPublic","parseKeyFormatAndType","enc","format","type","isInput","isRequired","parseKeyEncoding","cipher","passphrase","encoding","prepareAsymmetricKey","key","ctx","data","kConsumePrivate","kCreatePrivate","preparePrivateKey","preparePublicOrPrivateKey","kConsumePublic","parsePublicKeyEncoding","parsePrivateKeyEncoding"],"mappings":"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","sourcesContent":["import { BinaryLike, binaryLikeToArrayBuffer, isStringOrBuffer } from './Utils';\n\n// On node this value is defined on the native side, for now I'm just creating it here in JS\n// TODO(osp) move this into native side to make sure they always match\nenum KFormatType {\n kKeyFormatDER,\n kKeyFormatPEM,\n kKeyFormatJWK,\n}\n\nenum KeyInputContext {\n kConsumePublic,\n kConsumePrivate,\n kCreatePublic,\n kCreatePrivate,\n}\n\nenum KeyEncoding {\n kKeyEncodingPKCS1,\n kKeyEncodingPKCS8,\n kKeyEncodingSPKI,\n kKeyEncodingSEC1,\n}\n\nconst encodingNames = {\n [KeyEncoding.kKeyEncodingPKCS1]: 'pkcs1',\n [KeyEncoding.kKeyEncodingPKCS8]: 'pkcs8',\n [KeyEncoding.kKeyEncodingSPKI]: 'spki',\n [KeyEncoding.kKeyEncodingSEC1]: 'sec1',\n};\n\nfunction option(name: string, objName: string | undefined) {\n return objName === undefined\n ? `options.${name}`\n : `options.${objName}.${name}`;\n}\n\nfunction parseKeyFormat(\n formatStr: string | undefined,\n defaultFormat: KFormatType | undefined,\n optionName?: string\n) {\n if (formatStr === undefined && defaultFormat !== undefined)\n return defaultFormat;\n else if (formatStr === 'pem') return KFormatType.kKeyFormatPEM;\n else if (formatStr === 'der') return KFormatType.kKeyFormatDER;\n else if (formatStr === 'jwk') return KFormatType.kKeyFormatJWK;\n throw new Error(`Invalid key format str: ${optionName}`);\n // throw new ERR_INVALID_ARG_VALUE(optionName, formatStr);\n}\n\nfunction parseKeyType(\n typeStr: string | undefined,\n required: boolean,\n keyType: string | undefined,\n isPublic: boolean | undefined,\n optionName: string\n) {\n if (typeStr === undefined && !required) {\n return undefined;\n } else if (typeStr === 'pkcs1') {\n if (keyType !== undefined && keyType !== 'rsa') {\n throw new Error(\n `Crypto incompatible key options: ${typeStr} can only be used for RSA keys`\n );\n }\n return KeyEncoding.kKeyEncodingPKCS1;\n } else if (typeStr === 'spki' && isPublic !== false) {\n return KeyEncoding.kKeyEncodingSPKI;\n } else if (typeStr === 'pkcs8' && isPublic !== true) {\n return KeyEncoding.kKeyEncodingPKCS8;\n } else if (typeStr === 'sec1' && isPublic !== true) {\n if (keyType !== undefined && keyType !== 'ec') {\n throw new Error(\n `Incompatible key options ${typeStr} can only be used for EC keys`\n );\n }\n return KeyEncoding.kKeyEncodingSEC1;\n }\n\n throw new Error(`Invalid option ${optionName} - ${typeStr}`);\n}\n\nfunction parseKeyFormatAndType(\n enc: {\n key: any;\n type?: string;\n encoding?: string;\n format?: string;\n cipher?: string;\n passphrase?: string;\n },\n keyType: string | undefined,\n isPublic: boolean | undefined,\n objName: string | undefined\n) {\n const { format: formatStr, type: typeStr } = enc;\n\n const isInput = keyType === undefined;\n const format = parseKeyFormat(\n formatStr,\n isInput ? KFormatType.kKeyFormatPEM : undefined,\n option('format', objName)\n );\n\n const isRequired =\n (!isInput || format === KFormatType.kKeyFormatDER) &&\n format !== KFormatType.kKeyFormatJWK;\n\n const type = parseKeyType(\n typeStr,\n isRequired,\n keyType,\n isPublic,\n option('type', objName)\n );\n return { format, type };\n}\n\nfunction parseKeyEncoding(\n enc: {\n key: any;\n type?: string;\n encoding?: string;\n format?: string;\n cipher?: string;\n passphrase?: string;\n },\n keyType: string | undefined,\n isPublic: boolean | undefined,\n objName?: string | undefined\n) {\n // validateObject(enc, 'options');\n\n const isInput = keyType === undefined;\n\n const { format, type } = parseKeyFormatAndType(\n enc,\n keyType,\n isPublic,\n objName\n );\n\n let cipher, passphrase, encoding;\n if (isPublic !== true) {\n ({ cipher, passphrase, encoding } = enc);\n\n if (!isInput) {\n if (cipher != null) {\n if (typeof cipher !== 'string')\n throw new Error(\n `Invalid argument ${option('cipher', objName)}: ${cipher}`\n );\n if (\n format === KFormatType.kKeyFormatDER &&\n (type === KeyEncoding.kKeyEncodingPKCS1 ||\n type === KeyEncoding.kKeyEncodingSEC1)\n ) {\n throw new Error(\n `Incompatible key options ${encodingNames[type]} does not support encryption`\n );\n }\n } else if (passphrase !== undefined) {\n throw new Error(\n `invalid argument ${option('cipher', objName)}: ${cipher}`\n );\n }\n }\n\n if (\n (isInput && passphrase !== undefined && !isStringOrBuffer(passphrase)) ||\n (!isInput && cipher != null && !isStringOrBuffer(passphrase))\n ) {\n throw new Error(\n `Invalid argument value ${option('passphrase', objName)}: ${passphrase}`\n );\n }\n }\n\n if (passphrase !== undefined)\n passphrase = binaryLikeToArrayBuffer(passphrase, encoding);\n\n return { format, type, cipher, passphrase };\n}\n\nfunction prepareAsymmetricKey(\n key:\n | BinaryLike\n | { key: any; encoding?: string; format?: any; passphrase?: string },\n ctx: KeyInputContext\n): {\n format: KFormatType;\n data: ArrayBuffer;\n type?: any;\n passphrase?: any;\n} {\n // TODO(osp) check, KeyObject some node object\n // if (isKeyObject(key)) {\n // // Best case: A key object, as simple as that.\n // return { data: getKeyObjectHandle(key, ctx) };\n // } else\n // if (isCryptoKey(key)) {\n // return { data: getKeyObjectHandle(key[kKeyObject], ctx) };\n // } else\n if (isStringOrBuffer(key)) {\n // Expect PEM by default, mostly for backward compatibility.\n return {\n format: KFormatType.kKeyFormatPEM,\n data: binaryLikeToArrayBuffer(key),\n };\n } else if (typeof key === 'object') {\n const {\n key: data,\n encoding,\n // format\n } = key;\n // // The 'key' property can be a KeyObject as well to allow specifying\n // // additional options such as padding along with the key.\n // if (isKeyObject(data)) return { data: getKeyObjectHandle(data, ctx) };\n // else if (isCryptoKey(data))\n // return { data: getKeyObjectHandle(data[kKeyObject], ctx) };\n // else if (isJwk(data) && format === 'jwk')\n // return { data: getKeyObjectHandleFromJwk(data, ctx), format: 'jwk' };\n // Either PEM or DER using PKCS#1 or SPKI.\n if (!isStringOrBuffer(data)) {\n throw new Error(\n 'prepareAsymmetricKey: key is not a string or ArrayBuffer'\n );\n }\n\n const isPublic =\n ctx === KeyInputContext.kConsumePrivate ||\n ctx === KeyInputContext.kCreatePrivate\n ? false\n : undefined;\n\n return {\n data: binaryLikeToArrayBuffer(data, encoding),\n ...parseKeyEncoding(key, undefined, isPublic),\n };\n }\n\n throw new Error('[prepareAsymetricKey] Invalid argument key: ${key}');\n}\n\n// TODO(osp) any here is a node KeyObject\nexport function preparePrivateKey(\n key:\n | BinaryLike\n | {\n key: any;\n encoding?: string;\n format?: any;\n padding?: number;\n passphrase?: string;\n }\n) {\n return prepareAsymmetricKey(key, KeyInputContext.kConsumePrivate);\n}\n\n// TODO(osp) any here is a node KeyObject\nexport function preparePublicOrPrivateKey(\n key:\n | BinaryLike\n | { key: any; encoding?: string; format?: any; padding?: number }\n) {\n return prepareAsymmetricKey(key, KeyInputContext.kConsumePublic);\n}\n\n// Parses the public key encoding based on an object. keyType must be undefined\n// when this is used to parse an input encoding and must be a valid key type if\n// used to parse an output encoding.\nexport function parsePublicKeyEncoding(\n enc: {\n key: any;\n encoding?: string;\n format?: string;\n cipher?: string;\n passphrase?: string;\n },\n keyType: string | undefined,\n objName?: string\n) {\n return parseKeyEncoding(enc, keyType, keyType ? true : undefined, objName);\n}\n\n// Parses the private key encoding based on an object. keyType must be undefined\n// when this is used to parse an input encoding and must be a valid key type if\n// used to parse an output encoding.\nexport function parsePrivateKeyEncoding(\n enc: {\n key: any;\n encoding?: string;\n format?: string;\n cipher?: string;\n passphrase?: string;\n },\n keyType: string | undefined,\n objName?: string\n) {\n return parseKeyEncoding(enc, keyType, false, objName);\n}\n"]}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
2
|
+
|
|
3
|
+
import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
|
|
4
|
+
import Stream from 'stream'; // TODO(osp) same as publicCipher on node this are defined on C++ and exposed to node
|
|
5
|
+
// Do the same here
|
|
6
|
+
|
|
7
|
+
var DSASigEnc;
|
|
8
|
+
|
|
9
|
+
(function (DSASigEnc) {
|
|
10
|
+
DSASigEnc[DSASigEnc["kSigEncDER"] = 0] = "kSigEncDER";
|
|
11
|
+
DSASigEnc[DSASigEnc["kSigEncP1363"] = 1] = "kSigEncP1363";
|
|
12
|
+
})(DSASigEnc || (DSASigEnc = {}));
|
|
13
|
+
|
|
14
|
+
import { binaryLikeToArrayBuffer, getDefaultEncoding } from './Utils';
|
|
15
|
+
import { preparePrivateKey, preparePublicOrPrivateKey } from './keys';
|
|
16
|
+
const createInternalSign = NativeQuickCrypto.createSign;
|
|
17
|
+
const createInternalVerify = NativeQuickCrypto.createVerify;
|
|
18
|
+
|
|
19
|
+
function getPadding(options) {
|
|
20
|
+
return getIntOption('padding', options);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function getSaltLength(options) {
|
|
24
|
+
return getIntOption('saltLength', options);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function getDSASignatureEncoding(options) {
|
|
28
|
+
if (typeof options === 'object') {
|
|
29
|
+
const {
|
|
30
|
+
dsaEncoding = 'der'
|
|
31
|
+
} = options;
|
|
32
|
+
if (dsaEncoding === 'der') return DSASigEnc.kSigEncDER;else if (dsaEncoding === 'ieee-p1363') return DSASigEnc.kSigEncP1363;
|
|
33
|
+
throw new Error(`options.dsaEncoding: ${dsaEncoding} not a valid encoding`);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return DSASigEnc.kSigEncDER;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function getIntOption(name, options) {
|
|
40
|
+
const value = options[name];
|
|
41
|
+
|
|
42
|
+
if (value !== undefined) {
|
|
43
|
+
if (value === value >> 0) {
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
throw new Error(`options.${name}: ${value} not a valid int value`);
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
class Verify extends Stream.Writable {
|
|
54
|
+
constructor(algorithm, options) {
|
|
55
|
+
super(options);
|
|
56
|
+
|
|
57
|
+
_defineProperty(this, "internal", void 0);
|
|
58
|
+
|
|
59
|
+
this.internal = createInternalVerify();
|
|
60
|
+
this.internal.init(algorithm);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
_write(chunk, encoding, callback) {
|
|
64
|
+
this.update(chunk, encoding);
|
|
65
|
+
callback();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
update(data, encoding) {
|
|
69
|
+
var _encoding;
|
|
70
|
+
|
|
71
|
+
encoding = (_encoding = encoding) !== null && _encoding !== void 0 ? _encoding : getDefaultEncoding();
|
|
72
|
+
data = binaryLikeToArrayBuffer(data, encoding);
|
|
73
|
+
this.internal.update(data);
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
verify(options, signature) {
|
|
78
|
+
if (!options) {
|
|
79
|
+
throw new Error('Crypto sign key required');
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const {
|
|
83
|
+
data,
|
|
84
|
+
format,
|
|
85
|
+
type,
|
|
86
|
+
passphrase
|
|
87
|
+
} = preparePublicOrPrivateKey(options);
|
|
88
|
+
const rsaPadding = getPadding(options);
|
|
89
|
+
const pssSaltLength = getSaltLength(options); // Options specific to (EC)DSA
|
|
90
|
+
|
|
91
|
+
const dsaSigEnc = getDSASignatureEncoding(options);
|
|
92
|
+
const ret = this.internal.verify(data, format, type, passphrase, binaryLikeToArrayBuffer(signature), rsaPadding, pssSaltLength, dsaSigEnc);
|
|
93
|
+
return ret;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
class Sign extends Stream.Writable {
|
|
99
|
+
constructor(algorithm, options) {
|
|
100
|
+
super(options);
|
|
101
|
+
|
|
102
|
+
_defineProperty(this, "internal", void 0);
|
|
103
|
+
|
|
104
|
+
this.internal = createInternalSign();
|
|
105
|
+
this.internal.init(algorithm);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
_write(chunk, encoding, callback) {
|
|
109
|
+
this.update(chunk, encoding);
|
|
110
|
+
callback();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
update(data, encoding) {
|
|
114
|
+
var _encoding2;
|
|
115
|
+
|
|
116
|
+
encoding = (_encoding2 = encoding) !== null && _encoding2 !== void 0 ? _encoding2 : getDefaultEncoding();
|
|
117
|
+
data = binaryLikeToArrayBuffer(data, encoding);
|
|
118
|
+
this.internal.update(data);
|
|
119
|
+
return this;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
sign(options, encoding) {
|
|
123
|
+
if (!options) {
|
|
124
|
+
throw new Error('Crypto sign key required');
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const {
|
|
128
|
+
data,
|
|
129
|
+
format,
|
|
130
|
+
type,
|
|
131
|
+
passphrase
|
|
132
|
+
} = preparePrivateKey(options);
|
|
133
|
+
const rsaPadding = getPadding(options);
|
|
134
|
+
const pssSaltLength = getSaltLength(options); // Options specific to (EC)DSA
|
|
135
|
+
|
|
136
|
+
const dsaSigEnc = getDSASignatureEncoding(options);
|
|
137
|
+
const ret = this.internal.sign(data, format, type, passphrase, rsaPadding, pssSaltLength, dsaSigEnc);
|
|
138
|
+
encoding = encoding || getDefaultEncoding();
|
|
139
|
+
|
|
140
|
+
if (encoding && encoding !== 'buffer') {
|
|
141
|
+
return Buffer.from(ret).toString(encoding);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
return Buffer.from(ret);
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
export function createSign(algorithm, options) {
|
|
150
|
+
return new Sign(algorithm, options);
|
|
151
|
+
}
|
|
152
|
+
export function createVerify(algorithm, options) {
|
|
153
|
+
return new Verify(algorithm, options);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=sig.js.map
|