react-native-quick-crypto 1.0.15 → 1.0.16
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/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/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/tsconfig.tsbuildinfo +1 -1
- package/lib/typescript/ed.d.ts.map +1 -1
- package/lib/typescript/hash.d.ts +1 -0
- package/lib/typescript/hash.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/package.json +1 -1
- package/src/ec.ts +3 -3
- package/src/ed.ts +59 -14
- package/src/hash.ts +1 -0
- package/src/keys/publicCipher.ts +1 -0
- package/src/rsa.ts +1 -0
|
@@ -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 {
|
|
@@ -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,CAAC,EAAE,QAAQ,GACxB,MAAM,GAAG,MAAM,CAIjB;AAED,eAAO,MAAM,WAAW;;;;6BArEX,eAAe,QACpB,UAAU,KACf,OAAO,CAAC,WAAW,CAAC;CAwEtB,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,CAAC,EAAE,QAAQ,GACxB,MAAM,GAAG,MAAM,CAIjB;AAED,eAAO,MAAM,WAAW;;;;6BArEX,eAAe,QACpB,UAAU,KACf,OAAO,CAAC,WAAW,CAAC;CAwEtB,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"}
|
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,
|
package/src/keys/publicCipher.ts
CHANGED