react-native-quick-crypto 1.0.15 → 1.0.17
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/cpp/utils/HybridUtils.cpp +216 -0
- package/cpp/utils/HybridUtils.hpp +2 -0
- package/lib/commonjs/ec.js +3 -3
- package/lib/commonjs/ec.js.map +1 -1
- package/lib/commonjs/ed.js +48 -13
- package/lib/commonjs/ed.js.map +1 -1
- package/lib/commonjs/hash.js +2 -1
- package/lib/commonjs/hash.js.map +1 -1
- package/lib/commonjs/keys/publicCipher.js +5 -4
- package/lib/commonjs/keys/publicCipher.js.map +1 -1
- package/lib/commonjs/rsa.js +3 -2
- package/lib/commonjs/rsa.js.map +1 -1
- package/lib/commonjs/utils/conversion.js +24 -0
- package/lib/commonjs/utils/conversion.js.map +1 -1
- package/lib/module/ec.js +3 -3
- package/lib/module/ec.js.map +1 -1
- package/lib/module/ed.js +48 -13
- package/lib/module/ed.js.map +1 -1
- package/lib/module/hash.js +1 -0
- package/lib/module/hash.js.map +1 -1
- package/lib/module/keys/publicCipher.js +1 -0
- package/lib/module/keys/publicCipher.js.map +1 -1
- package/lib/module/rsa.js +1 -0
- package/lib/module/rsa.js.map +1 -1
- package/lib/module/utils/conversion.js +20 -0
- package/lib/module/utils/conversion.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +4 -2
- package/lib/typescript/hash.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -0
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/keys/publicCipher.d.ts +1 -0
- package/lib/typescript/keys/publicCipher.d.ts.map +1 -1
- package/lib/typescript/rsa.d.ts +1 -0
- package/lib/typescript/rsa.d.ts.map +1 -1
- package/lib/typescript/specs/utils.nitro.d.ts +2 -0
- package/lib/typescript/specs/utils.nitro.d.ts.map +1 -1
- package/lib/typescript/utils/conversion.d.ts +4 -0
- package/lib/typescript/utils/conversion.d.ts.map +1 -1
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.cpp +2 -0
- package/nitrogen/generated/shared/c++/HybridUtilsSpec.hpp +3 -0
- package/package.json +1 -1
- package/src/ec.ts +3 -3
- package/src/ed.ts +59 -14
- package/src/hash.ts +8 -1
- package/src/keys/publicCipher.ts +1 -0
- package/src/rsa.ts +1 -0
- package/src/specs/utils.nitro.ts +2 -0
- package/src/utils/conversion.ts +38 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed.d.ts","sourceRoot":"","sources":["../../src/ed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,OAAO,EACL,SAAS,EAIV,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,GAAG,EACH,gBAAgB,EAChB,QAAQ,EACR,eAAe,EAChB,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ed.d.ts","sourceRoot":"","sources":["../../src/ed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,OAAO,EACL,SAAS,EAIV,MAAM,gBAAgB,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,KAAK,EACV,UAAU,EACV,eAAe,EACf,aAAa,EACb,qBAAqB,EACrB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,EACrB,GAAG,EACH,gBAAgB,EAChB,QAAQ,EACR,eAAe,EAChB,MAAM,SAAS,CAAC;AAWjB,qBAAa,EAAE;IACb,IAAI,EAAE,eAAe,CAAC;IACtB,MAAM,EAAE,gBAAgB,CAAC;IACzB,MAAM,EAAE,SAAS,CAAC;gBAEN,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,gBAAgB;IAO3D;;;;;;;;;;OAUG;IACH,aAAa,CACX,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,MAAM,GAAG,IAAI;IAyBV,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC,mBAAmB,IAAI,IAAI;IAW3B,YAAY,IAAI,WAAW;IAI3B,aAAa,IAAI,WAAW;IAI5B;;;;;;;;;OASG;IACH,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,GAAG,WAAW;IAIvD,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAMvE,QAAQ,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,WAAW;IAMtD,MAAM,CACV,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC;IAMnB,UAAU,CACR,SAAS,EAAE,UAAU,EACrB,OAAO,EAAE,UAAU,EACnB,GAAG,CAAC,EAAE,UAAU,GACf,OAAO;CAKX;AAGD,wBAAgB,aAAa,CAC3B,OAAO,EAAE,oBAAoB,EAC7B,QAAQ,CAAC,EAAE,qBAAqB,GAC/B,MAAM,GAAG,IAAI,CAaf;AAGD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,eAAe,EACrB,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,uBAAuB,GAAG,SAAS,GAC5C,qBAAqB,GAAG,IAAI,CAgE9B;AAmGD,wBAAsB,2BAA2B,CAC/C,IAAI,EAAE,SAAS,GAAG,OAAO,EACzB,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,aAAa,CAAC,CAsDxB;AAED,wBAAsB,0BAA0B,CAC9C,IAAI,EAAE,QAAQ,GAAG,MAAM,EACvB,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,aAAa,CAAC,CAsDxB;AAED,wBAAgB,WAAW,CACzB,SAAS,EAAE,eAAe,EAC1B,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,MAAM,GAAG,IAAI,GACpB,WAAW,CAmCb"}
|
package/lib/typescript/hash.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Stream } from 'readable-stream';
|
|
2
2
|
import type { TransformOptions } from 'readable-stream';
|
|
3
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
3
4
|
import type { BinaryLike, Encoding, BufferLike, SubtleAlgorithm } from './utils';
|
|
4
5
|
export declare function getHashes(): string[];
|
|
5
6
|
interface HashOptions extends TransformOptions {
|
|
@@ -41,7 +42,7 @@ declare class Hash extends Stream.Transform {
|
|
|
41
42
|
* @param encoding The `encoding` of the return value.
|
|
42
43
|
*/
|
|
43
44
|
digest(): Buffer;
|
|
44
|
-
digest(encoding: Encoding):
|
|
45
|
+
digest(encoding: Encoding): string;
|
|
45
46
|
/**
|
|
46
47
|
* Creates a new `Hash` object that contains a deep copy of the internal state
|
|
47
48
|
* of the current `Hash` object.
|
|
@@ -113,7 +114,8 @@ export declare function createHash(algorithm: string, options?: HashOptions): Ha
|
|
|
113
114
|
* @returns Promise resolving to the hash digest as ArrayBuffer
|
|
114
115
|
*/
|
|
115
116
|
export declare const asyncDigest: (algorithm: SubtleAlgorithm, data: BufferLike) => Promise<ArrayBuffer>;
|
|
116
|
-
export declare function hash(algorithm: string, data: BinaryLike, outputEncoding
|
|
117
|
+
export declare function hash(algorithm: string, data: BinaryLike, outputEncoding: Encoding): string;
|
|
118
|
+
export declare function hash(algorithm: string, data: BinaryLike): Buffer;
|
|
117
119
|
export declare const hashExports: {
|
|
118
120
|
createHash: typeof createHash;
|
|
119
121
|
getHashes: typeof getHashes;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAExD,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,eAAe,EAChB,MAAM,SAAS,CAAC;AAiBjB,wBAAgB,SAAS,aAExB;AAED,UAAU,WAAY,SAAQ,gBAAgB;IAC5C;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAQD,cAAM,IAAK,SAAQ,MAAM,CAAC,SAAS;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,QAAQ;IAehB;;OAEG;IACH,OAAO;IAiBP;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAC9B,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,GAAG,MAAM;IAezD;;;;;;;;;OASG;IACH,MAAM,IAAI,MAAM;IAChB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAWlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAYhC;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAK3B,UAAU,CACR,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,IAAI;IAKtB,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI;CAI5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAMzE;AAID;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,eAAe,EAC1B,MAAM,UAAU,KACf,OAAO,CAAC,WAAW,CAqCrB,CAAC;AAoBF,wBAAgB,IAAI,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,EAChB,cAAc,
|
|
1
|
+
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,OAAO,KAAK,EACV,UAAU,EACV,QAAQ,EACR,UAAU,EACV,eAAe,EAChB,MAAM,SAAS,CAAC;AAiBjB,wBAAgB,SAAS,aAExB;AAED,UAAU,WAAY,SAAQ,gBAAgB;IAC5C;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACnC;AAQD,cAAM,IAAK,SAAQ,MAAM,CAAC,SAAS;IACjC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,QAAQ;IAehB;;OAEG;IACH,OAAO;IAiBP;;;;;;;;;OASG;IACH,MAAM,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAC9B,MAAM,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,GAAG,MAAM;IAezD;;;;;;;;;OASG;IACH,MAAM,IAAI,MAAM;IAChB,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM;IAWlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;IACH,IAAI,IAAI,IAAI;IACZ,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI;IAYhC;;;OAGG;IACH,iBAAiB,IAAI,MAAM;IAK3B,UAAU,CACR,KAAK,EAAE,UAAU,EACjB,QAAQ,EAAE,cAAc,EACxB,QAAQ,EAAE,MAAM,IAAI;IAKtB,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI;CAI5B;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,IAAI,CAMzE;AAID;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,WAAW,eAAe,EAC1B,MAAM,UAAU,KACf,OAAO,CAAC,WAAW,CAqCrB,CAAC;AAoBF,wBAAgB,IAAI,CAClB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,EAChB,cAAc,EAAE,QAAQ,GACvB,MAAM,CAAC;AACV,wBAAgB,IAAI,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,MAAM,CAAC;AAWlE,eAAO,MAAM,WAAW;;;;6BA3EX,eAAe,QACpB,UAAU,KACf,OAAO,CAAC,WAAW,CAAC;CA8EtB,CAAC"}
|
|
@@ -50,6 +50,8 @@ declare const QuickCrypto: {
|
|
|
50
50
|
bufferLikeToArrayBuffer(buf: utils.BufferLike): ArrayBuffer;
|
|
51
51
|
binaryLikeToArrayBuffer(input: utils.BinaryLikeNode, encoding?: string): ArrayBuffer;
|
|
52
52
|
ab2str(buf: ArrayBuffer, encoding?: string): string;
|
|
53
|
+
bufferToString(buf: ArrayBuffer, encoding?: string): string;
|
|
54
|
+
stringToBuffer(str: string, encoding?: string): ArrayBuffer;
|
|
53
55
|
abvToArrayBuffer: (buf: utils.ABV) => ArrayBuffer;
|
|
54
56
|
kEmptyObject: any;
|
|
55
57
|
ensureBytes(title: string, hex: utils.Hex, expectedLength?: number): Uint8Array;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAGxD,OAAO,KAAK,YAAY,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAG3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC;;;GAGG;AACH,QAAA,MAAM,WAAW
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAGxD,OAAO,KAAK,YAAY,MAAM,UAAU,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,EAAE,MAAM,MAAM,CAAC;AAG3B,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAE/B,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AACnC,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAC;AAC/B,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAIjC,OAAO,KAAK,KAAK,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAC;AAEnC;;;GAGG;AACH,QAAA,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBAZd,cAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8BAiCR,yCAKC,EAAC,YAAe;qBAQT,0BACX,EACE,sEAAsE;IAEtE,2BAFoB;qBAmBK,oCACpB,EAAC,2BAAwB;;;;;;qIAyB+7E,CAAC;mKAA85B,CAAC;;;;;;;;;;;;;;+DAvB33G,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBA5BoD,CAAC;gBAAkB,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAP5E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO,YAUnB,CAAC;AAYF,eAAe,WAAW,CAAC;AAC3B,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACxE,cAAc,UAAU,CAAC;AACzB,cAAc,MAAM,CAAC;AACrB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,cAAc,kBAAkB,CAAC;AACjC,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"publicCipher.d.ts","sourceRoot":"","sources":["../../../src/keys/publicCipher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"publicCipher.d.ts","sourceRoot":"","sources":["../../../src/keys/publicCipher.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AAExD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAQ3C,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAGjD,UAAU,mBAAmB;IAC3B,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB;AAED,KAAK,iBAAiB,GAClB,UAAU,GACV,SAAS,GACT,SAAS,GACT,mBAAmB,CAAC;AAExB,UAAU,oBAAoB;IAC5B,GAAG,EAAE,UAAU,GAAG,SAAS,GAAG,SAAS,CAAC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,UAAU,CAAC;CACxB;AAED,KAAK,kBAAkB,GACnB,UAAU,GACV,SAAS,GACT,SAAS,GACT,oBAAoB,CAAC;AA+DzB,wBAAgB,aAAa,CAC3B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,UAAU,GACjB,MAAM,CAuBR;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,iBAAiB,EACtB,MAAM,EAAE,UAAU,GACjB,MAAM,CAiBR;AAoDD,wBAAgB,cAAc,CAC5B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,UAAU,GACjB,MAAM,CAiBR;AAED,wBAAgB,cAAc,CAC5B,GAAG,EAAE,kBAAkB,EACvB,MAAM,EAAE,UAAU,GACjB,MAAM,CAuBR"}
|
package/lib/typescript/rsa.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
1
2
|
import { PrivateKeyObject, PublicKeyObject } from './keys/classes';
|
|
2
3
|
import type { CryptoKeyPair, KeyUsage, SubtleAlgorithm, GenerateKeyPairOptions, KeyPairGenConfig } from './utils';
|
|
3
4
|
import type { RsaKeyPair } from './specs/rsaKeyPair.nitro';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../src/rsa.ts"],"names":[],"mappings":"AACA,OAAO,EAGL,gBAAgB,EAChB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EAER,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,qBAAa,GAAG;IACd,MAAM,EAAE,UAAU,CAAC;gBAGjB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,UAAU,EAC1B,aAAa,EAAE,MAAM;IAajB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC;IAQ/C,mBAAmB,IAAI,aAAa;CAOrC;AAGD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,aAAa,CAAC,CAiHxB;AA0GD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,KAAK,GAAG,SAAS,EACvB,OAAO,EAAE,sBAAsB,GAAG,SAAS,EAC3C,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC;IACT,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3D,UAAU,EAAE,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;CAC9D,CAAC,CAID;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,KAAK,GAAG,SAAS,EACvB,OAAO,EAAE,sBAAsB,GAAG,SAAS,EAC3C,QAAQ,EAAE,gBAAgB,GACzB;IACD,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3D,UAAU,EAAE,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;CAC9D,CAIA"}
|
|
1
|
+
{"version":3,"file":"rsa.d.ts","sourceRoot":"","sources":["../../src/rsa.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAC;AACxD,OAAO,EAGL,gBAAgB,EAChB,eAAe,EAChB,MAAM,gBAAgB,CAAC;AASxB,OAAO,KAAK,EACV,aAAa,EACb,QAAQ,EAER,eAAe,EACf,sBAAsB,EACtB,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AAE3D,qBAAa,GAAG;IACd,MAAM,EAAE,UAAU,CAAC;gBAGjB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,UAAU,EAC1B,aAAa,EAAE,MAAM;IAajB,eAAe,IAAI,OAAO,CAAC,aAAa,CAAC;IAQ/C,mBAAmB,IAAI,aAAa;CAOrC;AAGD,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,eAAe,EAC1B,WAAW,EAAE,OAAO,EACpB,SAAS,EAAE,QAAQ,EAAE,GACpB,OAAO,CAAC,aAAa,CAAC,CAiHxB;AA0GD,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,KAAK,GAAG,SAAS,EACvB,OAAO,EAAE,sBAAsB,GAAG,SAAS,EAC3C,QAAQ,EAAE,gBAAgB,GACzB,OAAO,CAAC;IACT,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3D,UAAU,EAAE,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;CAC9D,CAAC,CAID;AAED,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,KAAK,GAAG,SAAS,EACvB,OAAO,EAAE,sBAAsB,GAAG,SAAS,EAC3C,QAAQ,EAAE,gBAAgB,GACzB;IACD,SAAS,EAAE,eAAe,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;IAC3D,UAAU,EAAE,gBAAgB,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;CAC9D,CAIA"}
|
|
@@ -4,5 +4,7 @@ export interface Utils extends HybridObject<{
|
|
|
4
4
|
android: 'c++';
|
|
5
5
|
}> {
|
|
6
6
|
timingSafeEqual(a: ArrayBuffer, b: ArrayBuffer): boolean;
|
|
7
|
+
bufferToString(buffer: ArrayBuffer, encoding: string): string;
|
|
8
|
+
stringToBuffer(str: string, encoding: string): ArrayBuffer;
|
|
7
9
|
}
|
|
8
10
|
//# sourceMappingURL=utils.nitro.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.nitro.d.ts","sourceRoot":"","sources":["../../../src/specs/utils.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,KAAM,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IACzE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.nitro.d.ts","sourceRoot":"","sources":["../../../src/specs/utils.nitro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAE/D,MAAM,WAAW,KAAM,SAAQ,YAAY,CAAC;IAAE,GAAG,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAAC;IACzE,eAAe,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC;IACzD,cAAc,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9D,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,WAAW,CAAC;CAC5D"}
|
|
@@ -21,6 +21,10 @@ export declare function bufferLikeToArrayBuffer(buf: BufferLike): ArrayBuffer;
|
|
|
21
21
|
export declare function binaryLikeToArrayBuffer(input: BinaryLikeNode, // CipherKey adds compat with node types
|
|
22
22
|
encoding?: string): ArrayBuffer;
|
|
23
23
|
export declare function ab2str(buf: ArrayBuffer, encoding?: string): string;
|
|
24
|
+
/** Native C++ buffer-to-string — exposed for benchmarking */
|
|
25
|
+
export declare function bufferToString(buf: ArrayBuffer, encoding?: string): string;
|
|
26
|
+
/** Native C++ string-to-buffer — exposed for benchmarking */
|
|
27
|
+
export declare function stringToBuffer(str: string, encoding?: string): ArrayBuffer;
|
|
24
28
|
export declare const kEmptyObject: any;
|
|
25
29
|
export * from './noble';
|
|
26
30
|
//# sourceMappingURL=conversion.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../../src/utils/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"conversion.d.ts","sourceRoot":"","sources":["../../../src/utils/conversion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,IAAI,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EAAE,MAAM,IAAI,UAAU,EAAE,MAAM,aAAa,CAAC;AAGnD,OAAO,KAAK,EAAE,GAAG,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAI/D;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAAI,KAAK,GAAG,gBAQxC,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,eAAe,GAAG,UAAU,GAAG,eAAe,GAClD,WAAW,CAiBb;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,UAAU,GAAG,WAAW,CAgCpE;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,cAAc,EAAE,wCAAwC;AAC/D,QAAQ,GAAE,MAAgB,GACzB,WAAW,CAiEb;AAaD,wBAAgB,MAAM,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,GAAE,MAAc,GAAG,MAAM,CAKzE;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAC5B,GAAG,EAAE,WAAW,EAChB,QAAQ,GAAE,MAAc,GACvB,MAAM,CAER;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,QAAQ,GAAE,MAAgB,GACzB,WAAW,CAEb;AAED,eAAO,MAAM,YAAY,KAAqC,CAAC;AAE/D,cAAc,SAAS,CAAC"}
|
|
@@ -15,6 +15,8 @@ namespace margelo::nitro::crypto {
|
|
|
15
15
|
// load custom methods/properties
|
|
16
16
|
registerHybrids(this, [](Prototype& prototype) {
|
|
17
17
|
prototype.registerHybridMethod("timingSafeEqual", &HybridUtilsSpec::timingSafeEqual);
|
|
18
|
+
prototype.registerHybridMethod("bufferToString", &HybridUtilsSpec::bufferToString);
|
|
19
|
+
prototype.registerHybridMethod("stringToBuffer", &HybridUtilsSpec::stringToBuffer);
|
|
18
20
|
});
|
|
19
21
|
}
|
|
20
22
|
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
#include <NitroModules/ArrayBuffer.hpp>
|
|
19
|
+
#include <string>
|
|
19
20
|
|
|
20
21
|
namespace margelo::nitro::crypto {
|
|
21
22
|
|
|
@@ -49,6 +50,8 @@ namespace margelo::nitro::crypto {
|
|
|
49
50
|
public:
|
|
50
51
|
// Methods
|
|
51
52
|
virtual bool timingSafeEqual(const std::shared_ptr<ArrayBuffer>& a, const std::shared_ptr<ArrayBuffer>& b) = 0;
|
|
53
|
+
virtual std::string bufferToString(const std::shared_ptr<ArrayBuffer>& buffer, const std::string& encoding) = 0;
|
|
54
|
+
virtual std::shared_ptr<ArrayBuffer> stringToBuffer(const std::string& str, const std::string& encoding) = 0;
|
|
52
55
|
|
|
53
56
|
protected:
|
|
54
57
|
// Hybrid Setup
|
package/package.json
CHANGED
package/src/ec.ts
CHANGED
|
@@ -527,13 +527,13 @@ export function ecDeriveBits(
|
|
|
527
527
|
|
|
528
528
|
const jwkPrivate = baseKey.keyObject.handle.exportJwk({}, false);
|
|
529
529
|
if (!jwkPrivate.d) throw new Error('Invalid private key');
|
|
530
|
-
const privateBytes = Buffer.from(jwkPrivate.d, '
|
|
530
|
+
const privateBytes = Buffer.from(jwkPrivate.d, 'base64url');
|
|
531
531
|
ecdh.setPrivateKey(privateBytes);
|
|
532
532
|
|
|
533
533
|
const jwkPublic = publicKey.keyObject.handle.exportJwk({}, false);
|
|
534
534
|
if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');
|
|
535
|
-
const x = Buffer.from(jwkPublic.x, '
|
|
536
|
-
const y = Buffer.from(jwkPublic.y, '
|
|
535
|
+
const x = Buffer.from(jwkPublic.x, 'base64url');
|
|
536
|
+
const y = Buffer.from(jwkPublic.y, 'base64url');
|
|
537
537
|
const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);
|
|
538
538
|
|
|
539
539
|
const secret = ecdh.computeSecret(publicBytes);
|
package/src/ed.ts
CHANGED
|
@@ -29,6 +29,7 @@ import {
|
|
|
29
29
|
KFormatType,
|
|
30
30
|
KeyEncoding,
|
|
31
31
|
} from './utils';
|
|
32
|
+
import { ECDH } from './ecdh';
|
|
32
33
|
|
|
33
34
|
export class Ed {
|
|
34
35
|
type: CFRGKeyPairType;
|
|
@@ -57,19 +58,6 @@ export class Ed {
|
|
|
57
58
|
options: DiffieHellmanOptions,
|
|
58
59
|
callback?: DiffieHellmanCallback,
|
|
59
60
|
): Buffer | void {
|
|
60
|
-
checkDiffieHellmanOptions(options);
|
|
61
|
-
|
|
62
|
-
// key types must be of certain type
|
|
63
|
-
const keyType = (options.privateKey as AsymmetricKeyObject)
|
|
64
|
-
.asymmetricKeyType;
|
|
65
|
-
switch (keyType) {
|
|
66
|
-
case 'x25519':
|
|
67
|
-
case 'x448':
|
|
68
|
-
break;
|
|
69
|
-
default:
|
|
70
|
-
throw new Error(`Unsupported or unimplemented curve type: ${keyType}`);
|
|
71
|
-
}
|
|
72
|
-
|
|
73
61
|
// extract the private and public keys as ArrayBuffers
|
|
74
62
|
const privateKey = toAB(options.privateKey);
|
|
75
63
|
const publicKey = toAB(options.publicKey);
|
|
@@ -176,8 +164,16 @@ export function diffieHellman(
|
|
|
176
164
|
options: DiffieHellmanOptions,
|
|
177
165
|
callback?: DiffieHellmanCallback,
|
|
178
166
|
): Buffer | void {
|
|
167
|
+
checkDiffieHellmanOptions(options);
|
|
168
|
+
|
|
179
169
|
const privateKey = options.privateKey as PrivateKeyObject;
|
|
180
|
-
const
|
|
170
|
+
const keyType = privateKey.asymmetricKeyType;
|
|
171
|
+
|
|
172
|
+
if (keyType === 'ec') {
|
|
173
|
+
return ecDiffieHellman(options, callback);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const type = keyType as CFRGKeyPairType;
|
|
181
177
|
const ed = new Ed(type, {});
|
|
182
178
|
return ed.diffieHellman(options, callback);
|
|
183
179
|
}
|
|
@@ -254,6 +250,47 @@ export function ed_generateKeyPair(
|
|
|
254
250
|
return [err, publicKey, privateKey];
|
|
255
251
|
}
|
|
256
252
|
|
|
253
|
+
function ecDiffieHellman(
|
|
254
|
+
options: DiffieHellmanOptions,
|
|
255
|
+
callback?: DiffieHellmanCallback,
|
|
256
|
+
): Buffer | void {
|
|
257
|
+
const privateKey = options.privateKey as PrivateKeyObject;
|
|
258
|
+
const publicKey = options.publicKey as AsymmetricKeyObject;
|
|
259
|
+
|
|
260
|
+
const curveName = privateKey.namedCurve;
|
|
261
|
+
if (!curveName) {
|
|
262
|
+
throw new Error('Unable to determine EC curve name from private key');
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
const ecdh = new ECDH(curveName);
|
|
266
|
+
|
|
267
|
+
const jwkPrivate = privateKey.handle.exportJwk({}, false);
|
|
268
|
+
if (!jwkPrivate.d) throw new Error('Invalid private key');
|
|
269
|
+
ecdh.setPrivateKey(Buffer.from(jwkPrivate.d, 'base64url'));
|
|
270
|
+
|
|
271
|
+
const jwkPublic = publicKey.handle.exportJwk({}, false);
|
|
272
|
+
if (!jwkPublic.x || !jwkPublic.y) throw new Error('Invalid public key');
|
|
273
|
+
const x = Buffer.from(jwkPublic.x, 'base64url');
|
|
274
|
+
const y = Buffer.from(jwkPublic.y, 'base64url');
|
|
275
|
+
const publicBytes = Buffer.concat([Buffer.from([0x04]), x, y]);
|
|
276
|
+
|
|
277
|
+
try {
|
|
278
|
+
const secret = ecdh.computeSecret(publicBytes);
|
|
279
|
+
if (callback) {
|
|
280
|
+
callback(null, secret);
|
|
281
|
+
} else {
|
|
282
|
+
return secret;
|
|
283
|
+
}
|
|
284
|
+
} catch (e: unknown) {
|
|
285
|
+
const err = e as Error;
|
|
286
|
+
if (callback) {
|
|
287
|
+
callback(err, undefined);
|
|
288
|
+
} else {
|
|
289
|
+
throw err;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
257
294
|
function checkDiffieHellmanOptions(options: DiffieHellmanOptions): void {
|
|
258
295
|
const { privateKey, publicKey } = options;
|
|
259
296
|
|
|
@@ -292,6 +329,14 @@ function checkDiffieHellmanOptions(options: DiffieHellmanOptions): void {
|
|
|
292
329
|
|
|
293
330
|
switch (privateKeyAsym.asymmetricKeyType) {
|
|
294
331
|
// case 'dh': // TODO: uncomment when implemented
|
|
332
|
+
case 'ec': {
|
|
333
|
+
const privateCurve = privateKeyAsym.namedCurve;
|
|
334
|
+
const publicCurve = publicKeyAsym.namedCurve;
|
|
335
|
+
if (privateCurve && publicCurve && privateCurve !== publicCurve) {
|
|
336
|
+
throw new Error('Private and public key curves do not match');
|
|
337
|
+
}
|
|
338
|
+
break;
|
|
339
|
+
}
|
|
295
340
|
case 'x25519':
|
|
296
341
|
case 'x448':
|
|
297
342
|
break;
|
package/src/hash.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Stream } from 'readable-stream';
|
|
2
2
|
import { NitroModules } from 'react-native-nitro-modules';
|
|
3
3
|
import type { TransformOptions } from 'readable-stream';
|
|
4
|
+
import { Buffer } from '@craftzdog/react-native-buffer';
|
|
4
5
|
import type { Hash as NativeHash } from './specs/hash.nitro';
|
|
5
6
|
import type {
|
|
6
7
|
BinaryLike,
|
|
@@ -119,7 +120,7 @@ class Hash extends Stream.Transform {
|
|
|
119
120
|
* @param encoding The `encoding` of the return value.
|
|
120
121
|
*/
|
|
121
122
|
digest(): Buffer;
|
|
122
|
-
digest(encoding: Encoding):
|
|
123
|
+
digest(encoding: Encoding): string;
|
|
123
124
|
digest(encoding?: Encoding): Buffer | string {
|
|
124
125
|
const nativeDigest = this.native.digest(encoding);
|
|
125
126
|
|
|
@@ -295,6 +296,12 @@ const internalDigest = (
|
|
|
295
296
|
return arrayBuffer;
|
|
296
297
|
};
|
|
297
298
|
|
|
299
|
+
export function hash(
|
|
300
|
+
algorithm: string,
|
|
301
|
+
data: BinaryLike,
|
|
302
|
+
outputEncoding: Encoding,
|
|
303
|
+
): string;
|
|
304
|
+
export function hash(algorithm: string, data: BinaryLike): Buffer;
|
|
298
305
|
export function hash(
|
|
299
306
|
algorithm: string,
|
|
300
307
|
data: BinaryLike,
|
package/src/keys/publicCipher.ts
CHANGED
package/src/rsa.ts
CHANGED
package/src/specs/utils.nitro.ts
CHANGED
|
@@ -2,4 +2,6 @@ import { type HybridObject } from 'react-native-nitro-modules';
|
|
|
2
2
|
|
|
3
3
|
export interface Utils extends HybridObject<{ ios: 'c++'; android: 'c++' }> {
|
|
4
4
|
timingSafeEqual(a: ArrayBuffer, b: ArrayBuffer): boolean;
|
|
5
|
+
bufferToString(buffer: ArrayBuffer, encoding: string): string;
|
|
6
|
+
stringToBuffer(str: string, encoding: string): ArrayBuffer;
|
|
5
7
|
}
|
package/src/utils/conversion.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
import { Buffer as CraftzdogBuffer } from '@craftzdog/react-native-buffer';
|
|
2
2
|
import { Buffer as SafeBuffer } from 'safe-buffer';
|
|
3
|
+
import { NitroModules } from 'react-native-nitro-modules';
|
|
4
|
+
import type { Utils } from '../specs/utils.nitro';
|
|
3
5
|
import type { ABV, BinaryLikeNode, BufferLike } from './types';
|
|
4
6
|
|
|
7
|
+
const utils = NitroModules.createHybridObject<Utils>('Utils');
|
|
8
|
+
|
|
5
9
|
/**
|
|
6
10
|
* Converts supplied argument to an ArrayBuffer. Note this does not copy the
|
|
7
11
|
* data so it is faster than toArrayBuffer. Not copying is important for
|
|
@@ -93,8 +97,10 @@ export function binaryLikeToArrayBuffer(
|
|
|
93
97
|
);
|
|
94
98
|
}
|
|
95
99
|
|
|
100
|
+
if (nativeEncodings.has(encoding)) {
|
|
101
|
+
return utils.stringToBuffer(input, encoding);
|
|
102
|
+
}
|
|
96
103
|
const buffer = CraftzdogBuffer.from(input, encoding);
|
|
97
|
-
|
|
98
104
|
return buffer.buffer.slice(
|
|
99
105
|
buffer.byteOffset,
|
|
100
106
|
buffer.byteOffset + buffer.byteLength,
|
|
@@ -149,10 +155,40 @@ export function binaryLikeToArrayBuffer(
|
|
|
149
155
|
);
|
|
150
156
|
}
|
|
151
157
|
|
|
152
|
-
|
|
158
|
+
const nativeEncodings = new Set([
|
|
159
|
+
'hex',
|
|
160
|
+
'base64',
|
|
161
|
+
'base64url',
|
|
162
|
+
'utf8',
|
|
163
|
+
'utf-8',
|
|
164
|
+
'latin1',
|
|
165
|
+
'binary',
|
|
166
|
+
'ascii',
|
|
167
|
+
]);
|
|
168
|
+
|
|
169
|
+
export function ab2str(buf: ArrayBuffer, encoding: string = 'hex'): string {
|
|
170
|
+
if (nativeEncodings.has(encoding)) {
|
|
171
|
+
return utils.bufferToString(buf, encoding);
|
|
172
|
+
}
|
|
153
173
|
return CraftzdogBuffer.from(buf).toString(encoding);
|
|
154
174
|
}
|
|
155
175
|
|
|
176
|
+
/** Native C++ buffer-to-string — exposed for benchmarking */
|
|
177
|
+
export function bufferToString(
|
|
178
|
+
buf: ArrayBuffer,
|
|
179
|
+
encoding: string = 'hex',
|
|
180
|
+
): string {
|
|
181
|
+
return utils.bufferToString(buf, encoding);
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** Native C++ string-to-buffer — exposed for benchmarking */
|
|
185
|
+
export function stringToBuffer(
|
|
186
|
+
str: string,
|
|
187
|
+
encoding: string = 'utf-8',
|
|
188
|
+
): ArrayBuffer {
|
|
189
|
+
return utils.stringToBuffer(str, encoding);
|
|
190
|
+
}
|
|
191
|
+
|
|
156
192
|
export const kEmptyObject = Object.freeze(Object.create(null));
|
|
157
193
|
|
|
158
194
|
export * from './noble';
|