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.
Files changed (88) hide show
  1. package/README.md +25 -14
  2. package/android/CMakeLists.txt +10 -2
  3. package/android/gradle.properties +1 -1
  4. package/android/src/main/AndroidManifest.xml +1 -1
  5. package/android/src/main/java/com/margelo/quickcrypto/QuickCryptoModule.java +70 -0
  6. package/android/src/main/java/com/{reactnativequickcrypto → margelo/quickcrypto}/QuickCryptoPackage.java +11 -12
  7. package/cpp/Cipher/MGLCipherHostObject.cpp +4 -5
  8. package/cpp/Cipher/MGLCreateCipherInstaller.cpp +1 -3
  9. package/cpp/Cipher/MGLGenerateKeyPairInstaller.h +6 -3
  10. package/cpp/Cipher/MGLGenerateKeyPairSyncInstaller.h +5 -3
  11. package/cpp/Cipher/MGLPublicCipher.h +1 -1
  12. package/cpp/Cipher/MGLPublicCipherInstaller.h +1 -1
  13. package/cpp/Cipher/MGLRsa.h +5 -1
  14. package/cpp/JSIUtils/MGLJSIMacros.h +69 -6
  15. package/cpp/{Cipher/MGLCipherKeys.cpp → MGLKeys.cpp} +47 -49
  16. package/cpp/{Cipher/MGLCipherKeys.h → MGLKeys.h} +29 -30
  17. package/cpp/MGLQuickCryptoHostObject.cpp +12 -0
  18. package/cpp/Sig/MGLSignHostObjects.cpp +889 -0
  19. package/cpp/Sig/MGLSignHostObjects.h +88 -0
  20. package/cpp/Sig/MGLSignInstaller.cpp +24 -0
  21. package/cpp/Sig/MGLSignInstaller.h +29 -0
  22. package/cpp/Sig/MGLVerifyInstaller.cpp +24 -0
  23. package/cpp/Sig/MGLVerifyInstaller.h +22 -0
  24. package/cpp/Utils/MGLUtils.cpp +67 -29
  25. package/cpp/Utils/MGLUtils.h +17 -17
  26. package/lib/commonjs/@types/crypto-browserify.d.js +2 -0
  27. package/lib/commonjs/@types/crypto-browserify.d.js.map +1 -0
  28. package/lib/commonjs/@types/stream-browserify.d.js +2 -0
  29. package/lib/commonjs/@types/stream-browserify.d.js.map +1 -0
  30. package/lib/commonjs/Cipher.js +3 -2
  31. package/lib/commonjs/Cipher.js.map +1 -1
  32. package/lib/commonjs/Hash.js +2 -2
  33. package/lib/commonjs/Hash.js.map +1 -1
  34. package/lib/commonjs/Hmac.js +2 -2
  35. package/lib/commonjs/Hmac.js.map +1 -1
  36. package/lib/commonjs/NativeQuickCrypto/NativeQuickCrypto.js.map +1 -1
  37. package/lib/commonjs/NativeQuickCrypto/sig.js +2 -0
  38. package/lib/commonjs/NativeQuickCrypto/sig.js.map +1 -0
  39. package/lib/commonjs/QuickCrypto.js +4 -0
  40. package/lib/commonjs/QuickCrypto.js.map +1 -1
  41. package/lib/commonjs/index.js +16 -13
  42. package/lib/commonjs/index.js.map +1 -1
  43. package/lib/commonjs/keys.js +1 -4
  44. package/lib/commonjs/keys.js.map +1 -1
  45. package/lib/commonjs/sig.js +170 -0
  46. package/lib/commonjs/sig.js.map +1 -0
  47. package/lib/module/@types/crypto-browserify.d.js +2 -0
  48. package/lib/module/@types/crypto-browserify.d.js.map +1 -0
  49. package/lib/module/@types/stream-browserify.d.js +2 -0
  50. package/lib/module/@types/stream-browserify.d.js.map +1 -0
  51. package/lib/module/Cipher.js +2 -1
  52. package/lib/module/Cipher.js.map +1 -1
  53. package/lib/module/Hash.js +1 -1
  54. package/lib/module/Hash.js.map +1 -1
  55. package/lib/module/Hmac.js +1 -1
  56. package/lib/module/Hmac.js.map +1 -1
  57. package/lib/module/NativeQuickCrypto/NativeQuickCrypto.js.map +1 -1
  58. package/lib/module/NativeQuickCrypto/sig.js +2 -0
  59. package/lib/module/NativeQuickCrypto/sig.js.map +1 -0
  60. package/lib/module/QuickCrypto.js +3 -0
  61. package/lib/module/QuickCrypto.js.map +1 -1
  62. package/lib/module/index.js +12 -2
  63. package/lib/module/index.js.map +1 -1
  64. package/lib/module/keys.js +1 -4
  65. package/lib/module/keys.js.map +1 -1
  66. package/lib/module/sig.js +155 -0
  67. package/lib/module/sig.js.map +1 -0
  68. package/lib/typescript/Cipher.d.ts +1 -1
  69. package/lib/typescript/Hash.d.ts +1 -1
  70. package/lib/typescript/Hmac.d.ts +1 -1
  71. package/lib/typescript/NativeQuickCrypto/NativeQuickCrypto.d.ts +3 -0
  72. package/lib/typescript/NativeQuickCrypto/sig.d.ts +12 -0
  73. package/lib/typescript/QuickCrypto.d.ts +3 -0
  74. package/lib/typescript/index.d.ts +207 -3
  75. package/lib/typescript/sig.d.ts +35 -0
  76. package/package.json +5 -3
  77. package/src/@types/crypto-browserify.d.ts +4 -0
  78. package/src/@types/stream-browserify.d.ts +4 -0
  79. package/src/Cipher.ts +2 -1
  80. package/src/Hash.ts +1 -1
  81. package/src/Hmac.ts +1 -1
  82. package/src/NativeQuickCrypto/NativeQuickCrypto.ts +3 -0
  83. package/src/NativeQuickCrypto/sig.ts +17 -0
  84. package/src/QuickCrypto.ts +3 -0
  85. package/src/index.ts +12 -2
  86. package/src/keys.ts +18 -13
  87. package/src/sig.ts +179 -0
  88. package/android/src/main/java/com/reactnativequickcrypto/QuickCryptoModule.java +0 -70
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["sig.ts"],"names":["NativeQuickCrypto","Stream","DSASigEnc","binaryLikeToArrayBuffer","getDefaultEncoding","preparePrivateKey","preparePublicOrPrivateKey","createInternalSign","createSign","createInternalVerify","createVerify","getPadding","options","getIntOption","getSaltLength","getDSASignatureEncoding","dsaEncoding","kSigEncDER","kSigEncP1363","Error","name","value","undefined","Verify","Writable","constructor","algorithm","internal","init","_write","chunk","encoding","callback","update","data","verify","signature","format","type","passphrase","rsaPadding","pssSaltLength","dsaSigEnc","ret","Sign","sign","Buffer","from","toString"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport type { InternalSign, InternalVerify } from './NativeQuickCrypto/sig';\nimport Stream from 'stream';\n\n// TODO(osp) same as publicCipher on node this are defined on C++ and exposed to node\n// Do the same here\nenum DSASigEnc {\n kSigEncDER,\n kSigEncP1363,\n}\n\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n getDefaultEncoding,\n} from './Utils';\nimport { preparePrivateKey, preparePublicOrPrivateKey } from './keys';\n\nconst createInternalSign = NativeQuickCrypto.createSign;\nconst createInternalVerify = NativeQuickCrypto.createVerify;\n\nfunction getPadding(options: any) {\n return getIntOption('padding', options);\n}\n\nfunction getSaltLength(options: any) {\n return getIntOption('saltLength', options);\n}\n\nfunction getDSASignatureEncoding(options: any) {\n if (typeof options === 'object') {\n const { dsaEncoding = 'der' } = options;\n if (dsaEncoding === 'der') return DSASigEnc.kSigEncDER;\n else if (dsaEncoding === 'ieee-p1363') return DSASigEnc.kSigEncP1363;\n throw new Error(`options.dsaEncoding: ${dsaEncoding} not a valid encoding`);\n }\n\n return DSASigEnc.kSigEncDER;\n}\n\nfunction getIntOption(name: string, options: any) {\n const value = options[name];\n if (value !== undefined) {\n if (value === value >> 0) {\n return value;\n }\n throw new Error(`options.${name}: ${value} not a valid int value`);\n }\n return undefined;\n}\n\nclass Verify extends Stream.Writable {\n private internal: InternalVerify;\n constructor(algorithm: string, options: Stream.WritableOptions) {\n super(options);\n this.internal = createInternalVerify();\n this.internal.init(algorithm);\n }\n\n _write(chunk: BinaryLike, encoding: string, callback: () => void) {\n this.update(chunk, encoding);\n callback();\n }\n\n update(data: BinaryLike, encoding?: string) {\n encoding = encoding ?? getDefaultEncoding();\n data = binaryLikeToArrayBuffer(data, encoding);\n this.internal.update(data);\n return this;\n }\n\n verify(\n options: {\n key: string | Buffer;\n format?: string;\n type?: string;\n passphrase?: string;\n padding?: number;\n saltLength?: number;\n },\n signature: BinaryLike\n ): boolean {\n if (!options) {\n throw new Error('Crypto sign key required');\n }\n\n const { data, format, type, passphrase } =\n preparePublicOrPrivateKey(options);\n\n const rsaPadding = getPadding(options);\n const pssSaltLength = getSaltLength(options);\n\n // Options specific to (EC)DSA\n const dsaSigEnc = getDSASignatureEncoding(options);\n\n const ret = this.internal.verify(\n data,\n format,\n type,\n passphrase,\n binaryLikeToArrayBuffer(signature),\n rsaPadding,\n pssSaltLength,\n dsaSigEnc\n );\n\n return ret;\n }\n}\n\nclass Sign extends Stream.Writable {\n private internal: InternalSign;\n constructor(algorithm: string, options: Stream.WritableOptions) {\n super(options);\n this.internal = createInternalSign();\n this.internal.init(algorithm);\n }\n\n _write(chunk: BinaryLike, encoding: string, callback: () => void) {\n this.update(chunk, encoding);\n callback();\n }\n\n update(data: BinaryLike, encoding?: string) {\n encoding = encoding ?? getDefaultEncoding();\n data = binaryLikeToArrayBuffer(data, encoding);\n this.internal.update(data);\n return this;\n }\n\n sign(\n options: {\n key: string | Buffer;\n format?: string;\n type?: string;\n passphrase?: string;\n padding?: number;\n saltLength?: number;\n },\n encoding?: string\n ) {\n if (!options) {\n throw new Error('Crypto sign key required');\n }\n\n const { data, format, type, passphrase } = preparePrivateKey(options);\n\n const rsaPadding = getPadding(options);\n const pssSaltLength = getSaltLength(options);\n\n // Options specific to (EC)DSA\n const dsaSigEnc = getDSASignatureEncoding(options);\n\n const ret = this.internal.sign(\n data,\n format,\n type,\n passphrase,\n rsaPadding,\n pssSaltLength,\n dsaSigEnc\n );\n\n encoding = encoding || getDefaultEncoding();\n if (encoding && encoding !== 'buffer') {\n return Buffer.from(ret).toString(encoding as any);\n }\n\n return Buffer.from(ret);\n }\n}\n\nexport function createSign(algorithm: string, options?: any) {\n return new Sign(algorithm, options);\n}\n\nexport function createVerify(algorithm: string, options?: any) {\n return new Verify(algorithm, options);\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  /// <reference types="node" />
3
- import Stream from 'stream';
3
+ import Stream from 'stream-browserify';
4
4
  import { BinaryLike, CipherEncoding, Encoding } from './Utils';
5
5
  import { Buffer } from '@craftzdog/react-native-buffer';
6
6
  declare class CipherCommon extends Stream.Transform {
@@ -1,7 +1,7 @@
1
1
  /// <reference types="node" />
2
2
  import 'react-native';
3
3
  import { Encoding } from './Utils';
4
- import Stream from 'stream';
4
+ import Stream from 'stream-browserify';
5
5
  import { Buffer } from '@craftzdog/react-native-buffer';
6
6
  interface HashOptionsBase extends Stream.TransformOptions {
7
7
  outputLength?: number | undefined;
@@ -1,6 +1,6 @@
1
1
  /// <reference types="node" />
2
2
  import { Encoding, BinaryLike } from './Utils';
3
- import Stream from 'stream';
3
+ import Stream from 'stream-browserify';
4
4
  import { Buffer } from '@craftzdog/react-native-buffer';
5
5
  export declare function createHmac(algorithm: string, key: BinaryLike, options?: Stream.TransformOptions): Hmac;
6
6
  declare class Hmac extends Stream.Transform {
@@ -3,6 +3,7 @@ import type { CreateHashMethod } from './hash';
3
3
  import type { Pbkdf2Object } from './pbkdf2';
4
4
  import type { RandomObject } from './random';
5
5
  import type { CreateCipherMethod, CreateDecipherMethod, PublicEncryptMethod, PrivateDecryptMethod, GenerateKeyPairMethod, GenerateKeyPairSyncMethod } from './Cipher';
6
+ import type { CreateSignMethod, CreateVerifyMethod } from './sig';
6
7
  interface NativeQuickCryptoSpec {
7
8
  createHmac: CreateHmacMethod;
8
9
  pbkdf2: Pbkdf2Object;
@@ -15,6 +16,8 @@ interface NativeQuickCryptoSpec {
15
16
  privateDecrypt: PrivateDecryptMethod;
16
17
  generateKeyPair: GenerateKeyPairMethod;
17
18
  generateKeyPairSync: GenerateKeyPairSyncMethod;
19
+ createSign: CreateSignMethod;
20
+ createVerify: CreateVerifyMethod;
18
21
  }
19
22
  declare global {
20
23
  function nativeCallSyncHook(): unknown;
@@ -0,0 +1,12 @@
1
+ export declare type InternalSign = {
2
+ init: (algorithm: string) => void;
3
+ update: (data: ArrayBuffer) => void;
4
+ sign: (...args: any) => Uint8Array;
5
+ };
6
+ export declare type InternalVerify = {
7
+ init: (algorithm: string) => void;
8
+ update: (data: ArrayBuffer) => void;
9
+ verify: (...args: any) => boolean;
10
+ };
11
+ export declare type CreateSignMethod = () => InternalSign;
12
+ export declare type CreateVerifyMethod = () => InternalVerify;
@@ -1,5 +1,6 @@
1
1
  import * as random from './random';
2
2
  import { createCipher, createCipheriv, createDecipher, createDecipheriv, generateKeyPair, generateKeyPairSync } from './Cipher';
3
+ import { createSign, createVerify } from './sig';
3
4
  import { createHmac } from './Hmac';
4
5
  import { createHash } from './Hash';
5
6
  export declare const QuickCrypto: {
@@ -57,6 +58,8 @@ export declare const QuickCrypto: {
57
58
  }, buffer: import("./Utils").BinaryLike) => import("@craftzdog/react-native-buffer").Buffer;
58
59
  generateKeyPair: typeof generateKeyPair;
59
60
  generateKeyPairSync: typeof generateKeyPairSync;
61
+ createSign: typeof createSign;
62
+ createVerify: typeof createVerify;
60
63
  constants: {
61
64
  OPENSSL_VERSION_NUMBER: number;
62
65
  SSL_OP_ALL: number;
@@ -1,3 +1,207 @@
1
- import { QuickCrypto } from './QuickCrypto';
2
- export * from './QuickCrypto';
3
- export default QuickCrypto;
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ /// <reference types="node" />
4
+ import { Buffer } from '@craftzdog/react-native-buffer';
5
+ import FallbackCrypto from 'crypto-browserify';
6
+ declare const crypto: {
7
+ randomFill<T extends Buffer | ArrayBufferLike | (Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array) | DataView>(buffer: T, callback: (err: Error | null, buf: T) => void): void;
8
+ randomFill<T_1 extends Buffer | ArrayBufferLike | (Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array) | DataView>(buffer: T_1, offset: number, callback: (err: Error | null, buf: T_1) => void): void;
9
+ randomFill<T_2 extends Buffer | ArrayBufferLike | (Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array) | DataView>(buffer: T_2, offset: number, size: number, callback: (err: Error | null, buf: T_2) => void): void;
10
+ randomFillSync<T_3 extends Buffer | ArrayBufferLike | (Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array | Float32Array | Float64Array) | DataView>(buffer: T_3, offset?: number | undefined, size?: number | undefined): T_3;
11
+ randomBytes(size: number): ArrayBuffer;
12
+ randomBytes(size: number, callback: (err: Error | null, buf?: ArrayBuffer | undefined) => void): void;
13
+ randomInt(max: number, callback: (err: Error | null, value: number) => void): void;
14
+ randomInt(max: number): number;
15
+ randomInt(min: number, max: number, callback: (err: Error | null, value: number) => void): void;
16
+ randomInt(min: number, max: number): number;
17
+ getRandomValues(data: Uint8Array | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array): Uint8Array | Uint16Array | Uint32Array | Int8Array | Int16Array | Int32Array;
18
+ rng: typeof import("./random").randomBytes;
19
+ pseudoRandomBytes: typeof import("./random").randomBytes;
20
+ prng: typeof import("./random").randomBytes;
21
+ pbkdf2(password: import("./Utils").BinaryLike, salt: import("./Utils").BinaryLike, iterations: number, keylen: number, digest: string, callback: (err: Error | null, derivedKey?: Buffer | undefined) => void): void;
22
+ pbkdf2(password: import("./Utils").BinaryLike, salt: import("./Utils").BinaryLike, iterations: number, keylen: number, callback: (err: Error | null, derivedKey?: Buffer | undefined) => void): void;
23
+ pbkdf2Sync(password: import("./Utils").BinaryLike, salt: import("./Utils").BinaryLike, iterations: number, keylen: number, digest?: string | undefined): Buffer;
24
+ createHmac: typeof import("./Hmac").createHmac;
25
+ Hmac: typeof import("./Hmac").createHmac;
26
+ Hash: typeof import("./Hash").createHash;
27
+ createHash: typeof import("./Hash").createHash;
28
+ createCipher: typeof import("./Cipher").createCipher;
29
+ createCipheriv: typeof import("./Cipher").createCipheriv;
30
+ createDecipher: typeof import("./Cipher").createDecipher;
31
+ createDecipheriv: typeof import("./Cipher").createDecipheriv;
32
+ publicEncrypt: (options: {
33
+ key: any;
34
+ encoding?: string | undefined;
35
+ format?: any;
36
+ padding?: any;
37
+ oaepHash?: any;
38
+ oaepLabel?: any;
39
+ passphrase?: string | undefined;
40
+ }, buffer: import("./Utils").BinaryLike) => Buffer;
41
+ publicDecrypt: (options: {
42
+ key: any;
43
+ encoding?: string | undefined;
44
+ format?: any;
45
+ padding?: any;
46
+ oaepHash?: any;
47
+ oaepLabel?: any;
48
+ passphrase?: string | undefined;
49
+ }, buffer: import("./Utils").BinaryLike) => Buffer;
50
+ privateDecrypt: (options: {
51
+ key: any;
52
+ encoding?: string | undefined;
53
+ format?: any;
54
+ padding?: any;
55
+ oaepHash?: any;
56
+ oaepLabel?: any;
57
+ passphrase?: string | undefined;
58
+ }, buffer: import("./Utils").BinaryLike) => Buffer;
59
+ generateKeyPair: typeof import("./Cipher").generateKeyPair;
60
+ generateKeyPairSync: typeof import("./Cipher").generateKeyPairSync;
61
+ createSign: typeof import("./sig").createSign;
62
+ createVerify: typeof import("./sig").createVerify;
63
+ constants: {
64
+ OPENSSL_VERSION_NUMBER: number;
65
+ SSL_OP_ALL: number;
66
+ SSL_OP_ALLOW_NO_DHE_KEX: number;
67
+ SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION: number;
68
+ SSL_OP_CIPHER_SERVER_PREFERENCE: number;
69
+ SSL_OP_CISCO_ANYCONNECT: number;
70
+ SSL_OP_COOKIE_EXCHANGE: number;
71
+ SSL_OP_CRYPTOPRO_TLSEXT_BUG: number;
72
+ SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS: number;
73
+ SSL_OP_EPHEMERAL_RSA: number;
74
+ SSL_OP_LEGACY_SERVER_CONNECT: number;
75
+ SSL_OP_MICROSOFT_BIG_SSLV3_BUFFER: number;
76
+ SSL_OP_MICROSOFT_SESS_ID_BUG: number;
77
+ SSL_OP_MSIE_SSLV2_RSA_PADDING: number;
78
+ SSL_OP_NETSCAPE_CA_DN_BUG: number;
79
+ SSL_OP_NETSCAPE_CHALLENGE_BUG: number;
80
+ SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG: number;
81
+ SSL_OP_NETSCAPE_REUSE_CIPHER_CHANGE_BUG: number;
82
+ SSL_OP_NO_COMPRESSION: number;
83
+ SSL_OP_NO_ENCRYPT_THEN_MAC: number;
84
+ SSL_OP_NO_QUERY_MTU: number;
85
+ SSL_OP_NO_RENEGOTIATION: number;
86
+ SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION: number;
87
+ SSL_OP_NO_SSLv2: number;
88
+ SSL_OP_NO_SSLv3: number;
89
+ SSL_OP_NO_TICKET: number;
90
+ SSL_OP_NO_TLSv1: number;
91
+ SSL_OP_NO_TLSv1_1: number;
92
+ SSL_OP_NO_TLSv1_2: number;
93
+ SSL_OP_NO_TLSv1_3: number;
94
+ SSL_OP_PKCS1_CHECK_1: number;
95
+ SSL_OP_PKCS1_CHECK_2: number;
96
+ SSL_OP_PRIORITIZE_CHACHA: number;
97
+ SSL_OP_SINGLE_DH_USE: number;
98
+ SSL_OP_SINGLE_ECDH_USE: number;
99
+ SSL_OP_SSLEAY_080_CLIENT_DH_BUG: number;
100
+ SSL_OP_SSLREF2_REUSE_CERT_TYPE_BUG: number;
101
+ SSL_OP_TLS_BLOCK_PADDING_BUG: number;
102
+ SSL_OP_TLS_D5_BUG: number;
103
+ SSL_OP_TLS_ROLLBACK_BUG: number;
104
+ ENGINE_METHOD_RSA: number;
105
+ ENGINE_METHOD_DSA: number;
106
+ ENGINE_METHOD_DH: number;
107
+ ENGINE_METHOD_RAND: number;
108
+ ENGINE_METHOD_EC: number;
109
+ ENGINE_METHOD_CIPHERS: number;
110
+ ENGINE_METHOD_DIGESTS: number;
111
+ ENGINE_METHOD_PKEY_METHS: number;
112
+ ENGINE_METHOD_PKEY_ASN1_METHS: number;
113
+ ENGINE_METHOD_ALL: number;
114
+ ENGINE_METHOD_NONE: number;
115
+ DH_CHECK_P_NOT_SAFE_PRIME: number;
116
+ DH_CHECK_P_NOT_PRIME: number;
117
+ DH_UNABLE_TO_CHECK_GENERATOR: number;
118
+ DH_NOT_SUITABLE_GENERATOR: number;
119
+ ALPN_ENABLED: number;
120
+ RSA_PKCS1_PADDING: number;
121
+ RSA_SSLV23_PADDING: number;
122
+ RSA_NO_PADDING: number;
123
+ RSA_PKCS1_OAEP_PADDING: number;
124
+ RSA_X931_PADDING: number;
125
+ RSA_PKCS1_PSS_PADDING: number;
126
+ RSA_PSS_SALTLEN_DIGEST: number;
127
+ RSA_PSS_SALTLEN_MAX_SIGN: number;
128
+ RSA_PSS_SALTLEN_AUTO: number;
129
+ defaultCoreCipherList: string;
130
+ TLS1_VERSION: number;
131
+ TLS1_1_VERSION: number;
132
+ TLS1_2_VERSION: number;
133
+ TLS1_3_VERSION: number;
134
+ POINT_CONVERSION_COMPRESSED: number;
135
+ POINT_CONVERSION_UNCOMPRESSED: number;
136
+ POINT_CONVERSION_HYBRID: number;
137
+ };
138
+ generateKey(type: "hmac" | "aes", options: {
139
+ length: number;
140
+ }, callback: (err: Error | null, key: FallbackCrypto.KeyObject) => void): void;
141
+ generateKeySync(type: "hmac" | "aes", options: {
142
+ length: number;
143
+ }): FallbackCrypto.KeyObject;
144
+ createPrivateKey(key: string | globalThis.Buffer | FallbackCrypto.PrivateKeyInput | FallbackCrypto.JsonWebKeyInput): FallbackCrypto.KeyObject;
145
+ createPublicKey(key: string | globalThis.Buffer | FallbackCrypto.KeyObject | FallbackCrypto.JsonWebKeyInput | FallbackCrypto.PublicKeyInput): FallbackCrypto.KeyObject;
146
+ createSecretKey(key: NodeJS.ArrayBufferView): FallbackCrypto.KeyObject;
147
+ createSecretKey(key: string, encoding: BufferEncoding): FallbackCrypto.KeyObject;
148
+ createDiffieHellman(primeLength: number, generator?: number | NodeJS.ArrayBufferView | undefined): FallbackCrypto.DiffieHellman;
149
+ createDiffieHellman(prime: NodeJS.ArrayBufferView): FallbackCrypto.DiffieHellman;
150
+ createDiffieHellman(prime: string, primeEncoding: FallbackCrypto.BinaryToTextEncoding): FallbackCrypto.DiffieHellman;
151
+ createDiffieHellman(prime: string, primeEncoding: FallbackCrypto.BinaryToTextEncoding, generator: number | NodeJS.ArrayBufferView): FallbackCrypto.DiffieHellman;
152
+ createDiffieHellman(prime: string, primeEncoding: FallbackCrypto.BinaryToTextEncoding, generator: string, generatorEncoding: FallbackCrypto.BinaryToTextEncoding): FallbackCrypto.DiffieHellman;
153
+ getDiffieHellman(groupName: string): FallbackCrypto.DiffieHellman;
154
+ scrypt(password: FallbackCrypto.BinaryLike, salt: FallbackCrypto.BinaryLike, keylen: number, callback: (err: Error | null, derivedKey: globalThis.Buffer) => void): void;
155
+ scrypt(password: FallbackCrypto.BinaryLike, salt: FallbackCrypto.BinaryLike, keylen: number, options: FallbackCrypto.ScryptOptions, callback: (err: Error | null, derivedKey: globalThis.Buffer) => void): void;
156
+ scryptSync(password: FallbackCrypto.BinaryLike, salt: FallbackCrypto.BinaryLike, keylen: number, options?: FallbackCrypto.ScryptOptions | undefined): globalThis.Buffer;
157
+ privateEncrypt(privateKey: FallbackCrypto.RsaPrivateKey | FallbackCrypto.KeyLike, buffer: NodeJS.ArrayBufferView): globalThis.Buffer;
158
+ getCiphers(): string[];
159
+ getCurves(): string[];
160
+ getFips(): 0 | 1;
161
+ getHashes(): string[];
162
+ createECDH(curveName: string): FallbackCrypto.ECDH;
163
+ timingSafeEqual(a: NodeJS.ArrayBufferView, b: NodeJS.ArrayBufferView): boolean;
164
+ sign(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: FallbackCrypto.KeyLike | FallbackCrypto.SignKeyObjectInput | FallbackCrypto.SignPrivateKeyInput): globalThis.Buffer;
165
+ sign(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: FallbackCrypto.KeyLike | FallbackCrypto.SignKeyObjectInput | FallbackCrypto.SignPrivateKeyInput, callback: (error: Error | null, data: globalThis.Buffer) => void): void;
166
+ verify(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: FallbackCrypto.KeyLike | FallbackCrypto.VerifyKeyObjectInput | FallbackCrypto.VerifyPublicKeyInput, signature: NodeJS.ArrayBufferView): boolean;
167
+ verify(algorithm: string | null | undefined, data: NodeJS.ArrayBufferView, key: FallbackCrypto.KeyLike | FallbackCrypto.VerifyKeyObjectInput | FallbackCrypto.VerifyPublicKeyInput, signature: NodeJS.ArrayBufferView, callback: (error: Error | null, result: boolean) => void): void;
168
+ diffieHellman(options: {
169
+ privateKey: FallbackCrypto.KeyObject;
170
+ publicKey: FallbackCrypto.KeyObject;
171
+ }): globalThis.Buffer;
172
+ getCipherInfo(nameOrNid: string | number, options?: FallbackCrypto.CipherInfoOptions | undefined): FallbackCrypto.CipherInfo | undefined;
173
+ hkdf(digest: string, irm: FallbackCrypto.KeyObject | FallbackCrypto.BinaryLike, salt: FallbackCrypto.BinaryLike, info: FallbackCrypto.BinaryLike, keylen: number, callback: (err: Error | null, derivedKey: ArrayBuffer) => void): void;
174
+ hkdfSync(digest: string, ikm: FallbackCrypto.KeyObject | FallbackCrypto.BinaryLike, salt: FallbackCrypto.BinaryLike, info: FallbackCrypto.BinaryLike, keylen: number): ArrayBuffer;
175
+ secureHeapUsed(): FallbackCrypto.SecureHeapUsage;
176
+ randomUUID(options?: FallbackCrypto.RandomUUIDOptions | undefined): string;
177
+ generatePrime(size: number, callback: (err: Error | null, prime: ArrayBuffer) => void): void;
178
+ generatePrime(size: number, options: FallbackCrypto.GeneratePrimeOptionsBigInt, callback: (err: Error | null, prime: bigint) => void): void;
179
+ generatePrime(size: number, options: FallbackCrypto.GeneratePrimeOptionsArrayBuffer, callback: (err: Error | null, prime: ArrayBuffer) => void): void;
180
+ generatePrime(size: number, options: FallbackCrypto.GeneratePrimeOptions, callback: (err: Error | null, prime: bigint | ArrayBuffer) => void): void;
181
+ generatePrimeSync(size: number): ArrayBuffer;
182
+ generatePrimeSync(size: number, options: FallbackCrypto.GeneratePrimeOptionsBigInt): bigint;
183
+ generatePrimeSync(size: number, options: FallbackCrypto.GeneratePrimeOptionsArrayBuffer): ArrayBuffer;
184
+ generatePrimeSync(size: number, options: FallbackCrypto.GeneratePrimeOptions): bigint | ArrayBuffer;
185
+ checkPrime(value: FallbackCrypto.LargeNumberLike, callback: (err: Error | null, result: boolean) => void): void;
186
+ checkPrime(value: FallbackCrypto.LargeNumberLike, options: FallbackCrypto.CheckPrimeOptions, callback: (err: Error | null, result: boolean) => void): void;
187
+ checkPrimeSync(candidate: FallbackCrypto.LargeNumberLike, options?: FallbackCrypto.CheckPrimeOptions | undefined): boolean;
188
+ Certificate: FallbackCrypto.Certificate & {
189
+ (): FallbackCrypto.Certificate;
190
+ new (): FallbackCrypto.Certificate;
191
+ exportChallenge(spkac: FallbackCrypto.BinaryLike): globalThis.Buffer;
192
+ exportPublicKey(spkac: FallbackCrypto.BinaryLike, encoding?: string | undefined): globalThis.Buffer;
193
+ verifySpkac(spkac: NodeJS.ArrayBufferView): boolean;
194
+ };
195
+ fips: boolean;
196
+ KeyObject: typeof FallbackCrypto.KeyObject;
197
+ Cipher: typeof FallbackCrypto.Cipher;
198
+ Decipher: typeof FallbackCrypto.Decipher;
199
+ Sign: typeof FallbackCrypto.Sign;
200
+ Verify: typeof FallbackCrypto.Verify;
201
+ DiffieHellman: typeof FallbackCrypto.DiffieHellman;
202
+ ECDH: typeof FallbackCrypto.ECDH;
203
+ DEFAULT_ENCODING: BufferEncoding;
204
+ X509Certificate: typeof FallbackCrypto.X509Certificate;
205
+ webcrypto: typeof FallbackCrypto.webcrypto;
206
+ };
207
+ export default crypto;
@@ -0,0 +1,35 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import Stream from 'stream';
4
+ import { BinaryLike } from './Utils';
5
+ declare class Verify extends Stream.Writable {
6
+ private internal;
7
+ constructor(algorithm: string, options: Stream.WritableOptions);
8
+ _write(chunk: BinaryLike, encoding: string, callback: () => void): void;
9
+ update(data: BinaryLike, encoding?: string): this;
10
+ verify(options: {
11
+ key: string | Buffer;
12
+ format?: string;
13
+ type?: string;
14
+ passphrase?: string;
15
+ padding?: number;
16
+ saltLength?: number;
17
+ }, signature: BinaryLike): boolean;
18
+ }
19
+ declare class Sign extends Stream.Writable {
20
+ private internal;
21
+ constructor(algorithm: string, options: Stream.WritableOptions);
22
+ _write(chunk: BinaryLike, encoding: string, callback: () => void): void;
23
+ update(data: BinaryLike, encoding?: string): this;
24
+ sign(options: {
25
+ key: string | Buffer;
26
+ format?: string;
27
+ type?: string;
28
+ passphrase?: string;
29
+ padding?: number;
30
+ saltLength?: number;
31
+ }, encoding?: string): string | Buffer;
32
+ }
33
+ export declare function createSign(algorithm: string, options?: any): Sign;
34
+ export declare function createVerify(algorithm: string, options?: any): Verify;
35
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-quick-crypto",
3
- "version": "0.3.0",
3
+ "version": "0.4.0",
4
4
  "description": "A fast implementation of Node's `crypto` module written in C/C++ JSI",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -128,7 +128,8 @@
128
128
  ]
129
129
  },
130
130
  "globals": {
131
- "BufferEncoding": true
131
+ "BufferEncoding": true,
132
+ "Buffer": true
132
133
  }
133
134
  },
134
135
  "eslintIgnore": [
@@ -163,6 +164,7 @@
163
164
  "react-native-quick-base64": "^2.0.2",
164
165
  "stream": "^0.0.2",
165
166
  "stream-browserify": "^3.0.0",
166
- "string_decoder": "^1.3.0"
167
+ "string_decoder": "^1.3.0",
168
+ "crypto-browserify": "^3.12.0"
167
169
  }
168
170
  }
@@ -0,0 +1,4 @@
1
+ declare module 'crypto-browserify' {
2
+ import Crypto from 'crypto';
3
+ export = Crypto;
4
+ }
@@ -0,0 +1,4 @@
1
+ declare module 'stream-browserify' {
2
+ import Stream from 'stream';
3
+ export = Stream;
4
+ }
package/src/Cipher.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  /* eslint-disable no-dupe-class-members */
2
2
  import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
3
- import Stream from 'stream';
3
+ import Stream from 'stream-browserify';
4
4
  import {
5
5
  BinaryLike,
6
6
  binaryLikeToArrayBuffer,
@@ -749,6 +749,7 @@ export function generateKeyPairSync(
749
749
  type: string,
750
750
  options?: GenerateKeyPairOptions
751
751
  ): { publicKey: any; privateKey: any } {
752
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
752
753
  const [_, publicKey, privateKey] = internalGenerateKeyPair(
753
754
  false,
754
755
  type,
package/src/Hash.ts CHANGED
@@ -3,7 +3,7 @@ import 'react-native';
3
3
  import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
4
4
  import type { InternalHash } from './NativeQuickCrypto/hash';
5
5
  import { Encoding, toArrayBuffer } from './Utils';
6
- import Stream from 'stream';
6
+ import Stream from 'stream-browserify';
7
7
  import { Buffer } from '@craftzdog/react-native-buffer';
8
8
  interface HashOptionsBase extends Stream.TransformOptions {
9
9
  outputLength?: number | undefined;
package/src/Hmac.ts CHANGED
@@ -7,7 +7,7 @@ import {
7
7
  BinaryLike,
8
8
  binaryLikeToArrayBuffer,
9
9
  } from './Utils';
10
- import Stream from 'stream';
10
+ import Stream from 'stream-browserify';
11
11
  import { Buffer } from '@craftzdog/react-native-buffer';
12
12
 
13
13
  const createInternalHmac = NativeQuickCrypto.createHmac;
@@ -11,6 +11,7 @@ import type {
11
11
  GenerateKeyPairMethod,
12
12
  GenerateKeyPairSyncMethod,
13
13
  } from './Cipher';
14
+ import type { CreateSignMethod, CreateVerifyMethod } from './sig';
14
15
 
15
16
  interface NativeQuickCryptoSpec {
16
17
  createHmac: CreateHmacMethod;
@@ -24,6 +25,8 @@ interface NativeQuickCryptoSpec {
24
25
  privateDecrypt: PrivateDecryptMethod;
25
26
  generateKeyPair: GenerateKeyPairMethod;
26
27
  generateKeyPairSync: GenerateKeyPairSyncMethod;
28
+ createSign: CreateSignMethod;
29
+ createVerify: CreateVerifyMethod;
27
30
  }
28
31
 
29
32
  // global func declaration for JSI functions
@@ -0,0 +1,17 @@
1
+ // TODO Add real types to sign/verify, the problem is that because of encryption schemes
2
+ // they will have variable amount of parameters
3
+ export type InternalSign = {
4
+ init: (algorithm: string) => void;
5
+ update: (data: ArrayBuffer) => void;
6
+ sign: (...args: any) => Uint8Array; // returns raw bytes
7
+ };
8
+
9
+ export type InternalVerify = {
10
+ init: (algorithm: string) => void;
11
+ update: (data: ArrayBuffer) => void;
12
+ verify: (...args: any) => boolean;
13
+ };
14
+
15
+ export type CreateSignMethod = () => InternalSign;
16
+
17
+ export type CreateVerifyMethod = () => InternalVerify;
@@ -11,6 +11,7 @@ import {
11
11
  generateKeyPair,
12
12
  generateKeyPairSync,
13
13
  } from './Cipher';
14
+ import { createSign, createVerify } from './sig';
14
15
  import { createHmac } from './Hmac';
15
16
  import { createHash } from './Hash';
16
17
  import { constants } from './constants';
@@ -29,6 +30,8 @@ export const QuickCrypto = {
29
30
  privateDecrypt,
30
31
  generateKeyPair,
31
32
  generateKeyPairSync,
33
+ createSign,
34
+ createVerify,
32
35
  constants,
33
36
  ...pbkdf2,
34
37
  ...random,
package/src/index.ts CHANGED
@@ -1,5 +1,15 @@
1
+ import { Buffer } from '@craftzdog/react-native-buffer';
1
2
  import { QuickCrypto } from './QuickCrypto';
3
+ import FallbackCrypto from 'crypto-browserify';
2
4
 
3
- export * from './QuickCrypto';
5
+ // @ts-expect-error Buffer does not match exact same type definition.
6
+ global.Buffer = Buffer;
4
7
 
5
- export default QuickCrypto;
8
+ const crypto = { ...FallbackCrypto, ...QuickCrypto };
9
+
10
+ // for randombytes https://github.com/crypto-browserify/randombytes/blob/master/browser.js#L16
11
+ // @ts-expect-error QuickCrypto is missing `subtle` and `randomUUID`
12
+ global.crypto = crypto;
13
+
14
+ module.exports = crypto;
15
+ export default crypto;
package/src/keys.ts CHANGED
@@ -36,7 +36,7 @@ function option(name: string, objName: string | undefined) {
36
36
  }
37
37
 
38
38
  function parseKeyFormat(
39
- formatStr: string,
39
+ formatStr: string | undefined,
40
40
  defaultFormat: KFormatType | undefined,
41
41
  optionName?: string
42
42
  ) {
@@ -50,10 +50,10 @@ function parseKeyFormat(
50
50
  }
51
51
 
52
52
  function parseKeyType(
53
- typeStr: string,
53
+ typeStr: string | undefined,
54
54
  required: boolean,
55
- keyType: string,
56
- isPublic: boolean,
55
+ keyType: string | undefined,
56
+ isPublic: boolean | undefined,
57
57
  optionName: string
58
58
  ) {
59
59
  if (typeStr === undefined && !required) {
@@ -63,10 +63,6 @@ function parseKeyType(
63
63
  throw new Error(
64
64
  `Crypto incompatible key options: ${typeStr} can only be used for RSA keys`
65
65
  );
66
- // throw new ERR_CRYPTO_INCOMPATIBLE_KEY_OPTIONS(
67
- // typeStr,
68
- // 'can only be used for RSA keys'
69
- // );
70
66
  }
71
67
  return KeyEncoding.kKeyEncodingPKCS1;
72
68
  } else if (typeStr === 'spki' && isPublic !== false) {
@@ -86,10 +82,17 @@ function parseKeyType(
86
82
  }
87
83
 
88
84
  function parseKeyFormatAndType(
89
- enc: any,
90
- keyType: any,
91
- isPublic: any,
92
- objName: any
85
+ enc: {
86
+ key: any;
87
+ type?: string;
88
+ encoding?: string;
89
+ format?: string;
90
+ cipher?: string;
91
+ passphrase?: string;
92
+ },
93
+ keyType: string | undefined,
94
+ isPublic: boolean | undefined,
95
+ objName: string | undefined
93
96
  ) {
94
97
  const { format: formatStr, type: typeStr } = enc;
95
98
 
@@ -103,6 +106,7 @@ function parseKeyFormatAndType(
103
106
  const isRequired =
104
107
  (!isInput || format === KFormatType.kKeyFormatDER) &&
105
108
  format !== KFormatType.kKeyFormatJWK;
109
+
106
110
  const type = parseKeyType(
107
111
  typeStr,
108
112
  isRequired,
@@ -116,6 +120,7 @@ function parseKeyFormatAndType(
116
120
  function parseKeyEncoding(
117
121
  enc: {
118
122
  key: any;
123
+ type?: string;
119
124
  encoding?: string;
120
125
  format?: string;
121
126
  cipher?: string;
@@ -123,7 +128,7 @@ function parseKeyEncoding(
123
128
  },
124
129
  keyType: string | undefined,
125
130
  isPublic: boolean | undefined,
126
- objName?: string
131
+ objName?: string | undefined
127
132
  ) {
128
133
  // validateObject(enc, 'options');
129
134