@libp2p/crypto 5.0.13 → 5.0.14

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.
@@ -9,6 +9,7 @@
9
9
  */
10
10
  import type { PrivateKey, PublicKey, KeyType, RSAPrivateKey, Secp256k1PrivateKey, Ed25519PrivateKey, Secp256k1PublicKey, Ed25519PublicKey } from '@libp2p/interface';
11
11
  import type { MultihashDigest } from 'multiformats';
12
+ import type { Digest } from 'multiformats/hashes/digest';
12
13
  export { generateEphemeralKeyPair } from './ecdh/index.js';
13
14
  export type { Curve } from './ecdh/index.js';
14
15
  export type { ECDHKey, EnhancedKey, EnhancedKeyPair, ECDHKeyPair } from './interface.js';
@@ -29,9 +30,15 @@ export declare function generateKeyPair(type: KeyType, bits?: number): Promise<P
29
30
  export declare function generateKeyPairFromSeed(type: 'Ed25519', seed: Uint8Array): Promise<Ed25519PrivateKey>;
30
31
  export declare function generateKeyPairFromSeed<T extends KeyType>(type: T, seed: Uint8Array, bits?: number): Promise<never>;
31
32
  /**
32
- * Converts a protobuf serialized public key into its representative object
33
+ * Converts a protobuf serialized public key into its representative object.
34
+ *
35
+ * For RSA public keys optionally pass the multihash digest of the public key if
36
+ * it is known. If the digest is omitted it will be calculated which can be
37
+ * expensive.
38
+ *
39
+ * For other key types the digest option is ignored.
33
40
  */
34
- export declare function publicKeyFromProtobuf(buf: Uint8Array): PublicKey;
41
+ export declare function publicKeyFromProtobuf(buf: Uint8Array, digest?: Digest<18, number>): PublicKey;
35
42
  /**
36
43
  * Creates a public key from the raw key bytes
37
44
  */
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpK,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAEnD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;GAEG;AACH,wBAAsB,eAAe,CAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AACnF,wBAAsB,eAAe,CAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;AACvF,wBAAsB,eAAe,CAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAC1F,wBAAsB,eAAe,CAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAiBzF;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAC7G,wBAAsB,uBAAuB,CAAE,CAAC,SAAS,OAAO,EAAG,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAS5H;;GAEG;AACH,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,UAAU,GAAG,SAAS,CAcjE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,UAAU,GAAG,SAAS,CAQ5D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,kBAAkB,CAY3G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAE,GAAG,EAAE,SAAS,GAAG,UAAU,CAK/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,GAAG,EAAE,UAAU,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,aAAa,CAchH;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAQ9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAKjE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AACpK,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAExD,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAC1D,YAAY,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAA;AAC5C,YAAY,EAAE,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACxF,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD;;GAEG;AACH,wBAAsB,eAAe,CAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AACnF,wBAAsB,eAAe,CAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAA;AACvF,wBAAsB,eAAe,CAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAAA;AAC1F,wBAAsB,eAAe,CAAE,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;AAiBzF;;;;;GAKG;AACH,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AAC7G,wBAAsB,uBAAuB,CAAE,CAAC,SAAS,OAAO,EAAG,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAA;AAS5H;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAE,GAAG,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,SAAS,CAc9F;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAE,GAAG,EAAE,UAAU,GAAG,SAAS,CAQ5D;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAE,MAAM,EAAE,eAAe,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,kBAAkB,CAY3G;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAE,GAAG,EAAE,SAAS,GAAG,UAAU,CAK/D;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAE,GAAG,EAAE,UAAU,GAAG,iBAAiB,GAAG,mBAAmB,GAAG,aAAa,CAchH;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAQ9D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAKjE"}
@@ -33,14 +33,20 @@ export async function generateKeyPairFromSeed(type, seed) {
33
33
  return generateEd25519KeyPairFromSeed(seed);
34
34
  }
35
35
  /**
36
- * Converts a protobuf serialized public key into its representative object
36
+ * Converts a protobuf serialized public key into its representative object.
37
+ *
38
+ * For RSA public keys optionally pass the multihash digest of the public key if
39
+ * it is known. If the digest is omitted it will be calculated which can be
40
+ * expensive.
41
+ *
42
+ * For other key types the digest option is ignored.
37
43
  */
38
- export function publicKeyFromProtobuf(buf) {
44
+ export function publicKeyFromProtobuf(buf, digest) {
39
45
  const { Type, Data } = pb.PublicKey.decode(buf);
40
46
  const data = Data ?? new Uint8Array();
41
47
  switch (Type) {
42
48
  case pb.KeyType.RSA:
43
- return pkixToRSAPublicKey(data);
49
+ return pkixToRSAPublicKey(data, digest);
44
50
  case pb.KeyType.Ed25519:
45
51
  return unmarshalEd25519PublicKey(data);
46
52
  case pb.KeyType.secp256k1:
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/keys/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import { Uint8ArrayList } from 'uint8arraylist';
2
+ interface Context {
3
+ offset: number;
4
+ }
5
+ export declare function decodeDer(buf: Uint8Array, context?: Context): any;
6
+ export declare function encodeInteger(value: Uint8Array | Uint8ArrayList): Uint8ArrayList;
7
+ export declare function encodeBitString(value: Uint8Array | Uint8ArrayList): Uint8ArrayList;
8
+ export declare function encodeSequence(values: Array<Uint8Array | Uint8ArrayList>): Uint8ArrayList;
9
+ export {};
10
+ //# sourceMappingURL=der.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"der.d.ts","sourceRoot":"","sources":["../../../../src/keys/rsa/der.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,UAAU,OAAO;IACf,MAAM,EAAE,MAAM,CAAA;CACf;AAoBD,wBAAgB,SAAS,CAAE,GAAG,EAAE,UAAU,EAAE,OAAO,GAAE,OAAuB,GAAG,GAAG,CASjF;AAiID,wBAAgB,aAAa,CAAE,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,CAiBjF;AAED,wBAAgB,eAAe,CAAE,KAAK,EAAE,UAAU,GAAG,cAAc,GAAG,cAAc,CAcnF;AAED,wBAAgB,cAAc,CAAE,MAAM,EAAE,KAAK,CAAC,UAAU,GAAG,cAAc,CAAC,GAAG,cAAc,CAc1F"}
@@ -0,0 +1,137 @@
1
+ import { Uint8ArrayList } from 'uint8arraylist';
2
+ const TAG_MASK = parseInt('11111', 2);
3
+ const LONG_LENGTH_MASK = parseInt('10000000', 2);
4
+ const LONG_LENGTH_BYTES_MASK = parseInt('01111111', 2);
5
+ const decoders = {
6
+ 0x2: readInteger,
7
+ 0x3: readBitString,
8
+ 0x5: readNull,
9
+ 0x6: readObjectIdentifier,
10
+ 0x10: readSequence,
11
+ 0x16: readSequence,
12
+ 0x30: readSequence
13
+ };
14
+ export function decodeDer(buf, context = { offset: 0 }) {
15
+ const tag = buf[context.offset] & TAG_MASK;
16
+ context.offset++;
17
+ if (decoders[tag] != null) {
18
+ return decoders[tag](buf, context);
19
+ }
20
+ throw new Error('No decoder for tag ' + tag);
21
+ }
22
+ function readLength(buf, context) {
23
+ let length = 0;
24
+ if ((buf[context.offset] & LONG_LENGTH_MASK) === LONG_LENGTH_MASK) {
25
+ // long length
26
+ const count = buf[context.offset] & LONG_LENGTH_BYTES_MASK;
27
+ let str = '0x';
28
+ context.offset++;
29
+ for (let i = 0; i < count; i++, context.offset++) {
30
+ str += buf[context.offset].toString(16).padStart(2, '0');
31
+ }
32
+ length = parseInt(str, 16);
33
+ }
34
+ else {
35
+ length = buf[context.offset];
36
+ context.offset++;
37
+ }
38
+ return length;
39
+ }
40
+ function readSequence(buf, context) {
41
+ readLength(buf, context);
42
+ const entries = [];
43
+ while (true) {
44
+ if (context.offset >= buf.byteLength) {
45
+ break;
46
+ }
47
+ const result = decodeDer(buf, context);
48
+ if (result === null) {
49
+ break;
50
+ }
51
+ entries.push(result);
52
+ }
53
+ return entries;
54
+ }
55
+ function readInteger(buf, context) {
56
+ const length = readLength(buf, context);
57
+ const start = context.offset;
58
+ const end = context.offset + length;
59
+ const vals = [];
60
+ for (let i = start; i < end; i++) {
61
+ if (i === start && buf[i] === 0) {
62
+ continue;
63
+ }
64
+ vals.push(buf[i]);
65
+ }
66
+ context.offset += length;
67
+ return Uint8Array.from(vals);
68
+ }
69
+ function readObjectIdentifier(buf, context) {
70
+ const count = readLength(buf, context);
71
+ // skip OID
72
+ context.offset += count;
73
+ return ['oid-unimplemented'];
74
+ }
75
+ function readNull(buf, context) {
76
+ context.offset++;
77
+ return null;
78
+ }
79
+ function readBitString(buf, context) {
80
+ const length = readLength(buf, context);
81
+ const unusedBits = buf[context.offset];
82
+ context.offset++;
83
+ const bytes = buf.subarray(context.offset, context.offset + length);
84
+ context.offset += length;
85
+ if (unusedBits !== 0) {
86
+ // need to shift all bytes along by this many bits
87
+ throw new Error('Unused bits in bit string is unimplemented');
88
+ }
89
+ return decodeDer(bytes, {
90
+ offset: 0
91
+ });
92
+ }
93
+ function encodeNumber(value) {
94
+ let number = value.toString(16);
95
+ if (number.length % 2 === 1) {
96
+ number = '0' + number;
97
+ }
98
+ const array = new Uint8ArrayList();
99
+ for (let i = 0; i < number.length; i += 2) {
100
+ array.append(Uint8Array.from([parseInt(`${number[i]}${number[i + 1]}`, 16)]));
101
+ }
102
+ return array;
103
+ }
104
+ function encodeLength(bytes) {
105
+ if (bytes.byteLength < 128) {
106
+ return Uint8Array.from([bytes.byteLength]);
107
+ }
108
+ // long length
109
+ const length = encodeNumber(bytes.byteLength);
110
+ return new Uint8ArrayList(Uint8Array.from([
111
+ length.byteLength | LONG_LENGTH_MASK
112
+ ]), length);
113
+ }
114
+ export function encodeInteger(value) {
115
+ const contents = new Uint8ArrayList();
116
+ const mask = parseInt('10000000', 2);
117
+ const positive = (value.subarray()[0] & mask) === mask;
118
+ if (positive) {
119
+ contents.append(Uint8Array.from([0]));
120
+ }
121
+ contents.append(value);
122
+ return new Uint8ArrayList(Uint8Array.from([0x02]), encodeLength(contents), contents);
123
+ }
124
+ export function encodeBitString(value) {
125
+ // unused bits is always 0 with full-byte-only values
126
+ const unusedBits = Uint8Array.from([0]);
127
+ const contents = new Uint8ArrayList(unusedBits, value);
128
+ return new Uint8ArrayList(Uint8Array.from([0x03]), encodeLength(contents), contents);
129
+ }
130
+ export function encodeSequence(values) {
131
+ const output = new Uint8ArrayList();
132
+ for (const buf of values) {
133
+ output.append(buf);
134
+ }
135
+ return new Uint8ArrayList(Uint8Array.from([0x30]), encodeLength(output), output);
136
+ }
137
+ //# sourceMappingURL=der.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"der.js","sourceRoot":"","sources":["../../../../src/keys/rsa/der.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,21 @@
1
1
  import type { JWKKeyPair } from '../interface.js';
2
2
  import type { RSAPrivateKey, RSAPublicKey } from '@libp2p/interface';
3
+ import type { Digest } from 'multiformats/hashes/digest';
3
4
  export declare const MAX_RSA_KEY_SIZE = 8192;
4
5
  /**
5
- * Convert a PKCS#1 in ASN1 DER format to a JWK key
6
+ * Convert a PKCS#1 in ASN1 DER format to a JWK private key
6
7
  */
7
8
  export declare function pkcs1ToJwk(bytes: Uint8Array): JsonWebKey;
8
9
  /**
9
- * Convert a JWK key into PKCS#1 in ASN1 DER format
10
+ * Convert a JWK private key into PKCS#1 in ASN1 DER format
10
11
  */
11
12
  export declare function jwkToPkcs1(jwk: JsonWebKey): Uint8Array;
12
13
  /**
13
- * Convert a PKIX in ASN1 DER format to a JWK key
14
+ * Convert a PKIX in ASN1 DER format to a JWK public key
14
15
  */
15
16
  export declare function pkixToJwk(bytes: Uint8Array): JsonWebKey;
16
17
  /**
17
- * Convert a JWK key to PKIX in ASN1 DER format
18
+ * Convert a JWK public key to PKIX in ASN1 DER format
18
19
  */
19
20
  export declare function jwkToPkix(jwk: JsonWebKey): Uint8Array;
20
21
  /**
@@ -24,7 +25,7 @@ export declare function pkcs1ToRSAPrivateKey(bytes: Uint8Array): RSAPrivateKey;
24
25
  /**
25
26
  * Turn PKIX bytes to a PublicKey
26
27
  */
27
- export declare function pkixToRSAPublicKey(bytes: Uint8Array): RSAPublicKey;
28
+ export declare function pkixToRSAPublicKey(bytes: Uint8Array, digest?: Digest<18, number>): RSAPublicKey;
28
29
  export declare function jwkToRSAPrivateKey(jwk: JsonWebKey): RSAPrivateKey;
29
30
  export declare function generateRSAKeyPair(bits: number): Promise<RSAPrivateKey>;
30
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/keys/rsa/utils.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEpE,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAGpC;;GAEG;AACH,wBAAgB,UAAU,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAqBzD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAsBvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAYxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAgCtD;AA6BD;;GAEG;AACH,wBAAgB,oBAAoB,CAAE,KAAK,EAAE,UAAU,GAAG,aAAa,CAItE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAE,KAAK,EAAE,UAAU,GAAG,YAAY,CAcnE;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,aAAa,CAalE;AAED,wBAAsB,kBAAkB,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAa9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAa5D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/keys/rsa/utils.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AACpE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AAExD,eAAO,MAAM,gBAAgB,OAAO,CAAA;AAQpC;;GAEG;AACH,wBAAgB,UAAU,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAczD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAgBvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAE,KAAK,EAAE,UAAU,GAAG,UAAU,CAkBxD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAgBtD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAE,KAAK,EAAE,UAAU,GAAG,aAAa,CAItE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAE,KAAK,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,GAAG,YAAY,CAgBhG;AAED,wBAAgB,kBAAkB,CAAE,GAAG,EAAE,UAAU,GAAG,aAAa,CAalE;AAED,wBAAsB,kBAAkB,CAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAa9E;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAE,GAAG,EAAE,UAAU,GAAG,UAAU,CAa5D"}
@@ -1,124 +1,84 @@
1
1
  import { InvalidParametersError, InvalidPublicKeyError } from '@libp2p/interface';
2
2
  import { sha256 } from '@noble/hashes/sha256';
3
- import * as asn1js from 'asn1js';
4
3
  import { create } from 'multiformats/hashes/digest';
5
4
  import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string';
6
5
  import { toString as uint8ArrayToString } from 'uint8arrays/to-string';
7
6
  import * as pb from '../keys.js';
7
+ import { decodeDer, encodeBitString, encodeInteger, encodeSequence } from './der.js';
8
8
  import { RSAPrivateKey as RSAPrivateKeyClass, RSAPublicKey as RSAPublicKeyClass } from './rsa.js';
9
9
  import { generateRSAKey, rsaKeySize } from './index.js';
10
10
  export const MAX_RSA_KEY_SIZE = 8192;
11
11
  const SHA2_256_CODE = 0x12;
12
+ const MAX_RSA_JWK_SIZE = 1062;
13
+ const RSA_ALGORITHM_IDENTIFIER = Uint8Array.from([
14
+ 0x30, 0x0D, 0x06, 0x09, 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01, 0x05, 0x00
15
+ ]);
12
16
  /**
13
- * Convert a PKCS#1 in ASN1 DER format to a JWK key
17
+ * Convert a PKCS#1 in ASN1 DER format to a JWK private key
14
18
  */
15
19
  export function pkcs1ToJwk(bytes) {
16
- const { result } = asn1js.fromBER(bytes);
17
- // @ts-expect-error this looks fragile but DER is a canonical format so we are
18
- // safe to have deeply property chains like this
19
- const values = result.valueBlock.value;
20
- const key = {
21
- n: asn1jsIntegerToBase64(values[1]),
22
- e: asn1jsIntegerToBase64(values[2]),
23
- d: asn1jsIntegerToBase64(values[3]),
24
- p: asn1jsIntegerToBase64(values[4]),
25
- q: asn1jsIntegerToBase64(values[5]),
26
- dp: asn1jsIntegerToBase64(values[6]),
27
- dq: asn1jsIntegerToBase64(values[7]),
28
- qi: asn1jsIntegerToBase64(values[8]),
29
- kty: 'RSA',
30
- alg: 'RS256'
20
+ const values = decodeDer(bytes);
21
+ return {
22
+ n: uint8ArrayToString(values[1], 'base64url'),
23
+ e: uint8ArrayToString(values[2], 'base64url'),
24
+ d: uint8ArrayToString(values[3], 'base64url'),
25
+ p: uint8ArrayToString(values[4], 'base64url'),
26
+ q: uint8ArrayToString(values[5], 'base64url'),
27
+ dp: uint8ArrayToString(values[6], 'base64url'),
28
+ dq: uint8ArrayToString(values[7], 'base64url'),
29
+ qi: uint8ArrayToString(values[8], 'base64url'),
30
+ kty: 'RSA'
31
31
  };
32
- return key;
33
32
  }
34
33
  /**
35
- * Convert a JWK key into PKCS#1 in ASN1 DER format
34
+ * Convert a JWK private key into PKCS#1 in ASN1 DER format
36
35
  */
37
36
  export function jwkToPkcs1(jwk) {
38
37
  if (jwk.n == null || jwk.e == null || jwk.d == null || jwk.p == null || jwk.q == null || jwk.dp == null || jwk.dq == null || jwk.qi == null) {
39
38
  throw new InvalidParametersError('JWK was missing components');
40
39
  }
41
- const root = new asn1js.Sequence({
42
- value: [
43
- new asn1js.Integer({ value: 0 }),
44
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
45
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url'))),
46
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.d, 'base64url'))),
47
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.p, 'base64url'))),
48
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.q, 'base64url'))),
49
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dp, 'base64url'))),
50
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dq, 'base64url'))),
51
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.qi, 'base64url')))
52
- ]
53
- });
54
- const der = root.toBER();
55
- return new Uint8Array(der, 0, der.byteLength);
40
+ return encodeSequence([
41
+ encodeInteger(Uint8Array.from([0])),
42
+ encodeInteger(uint8ArrayFromString(jwk.n, 'base64url')),
43
+ encodeInteger(uint8ArrayFromString(jwk.e, 'base64url')),
44
+ encodeInteger(uint8ArrayFromString(jwk.d, 'base64url')),
45
+ encodeInteger(uint8ArrayFromString(jwk.p, 'base64url')),
46
+ encodeInteger(uint8ArrayFromString(jwk.q, 'base64url')),
47
+ encodeInteger(uint8ArrayFromString(jwk.dp, 'base64url')),
48
+ encodeInteger(uint8ArrayFromString(jwk.dq, 'base64url')),
49
+ encodeInteger(uint8ArrayFromString(jwk.qi, 'base64url'))
50
+ ]).subarray();
56
51
  }
57
52
  /**
58
- * Convert a PKIX in ASN1 DER format to a JWK key
53
+ * Convert a PKIX in ASN1 DER format to a JWK public key
59
54
  */
60
55
  export function pkixToJwk(bytes) {
61
- const { result } = asn1js.fromBER(bytes);
62
- // @ts-expect-error this looks fragile but DER is a canonical format so we are
63
- // safe to have deeply property chains like this
64
- const values = result.valueBlock.value[1].valueBlock.value[0].valueBlock.value;
56
+ const decoded = decodeDer(bytes, {
57
+ offset: 0
58
+ });
59
+ // this looks fragile but DER is a canonical format so we are safe to have
60
+ // deeply property chains like this
65
61
  return {
66
62
  kty: 'RSA',
67
- n: asn1jsIntegerToBase64(values[0]),
68
- e: asn1jsIntegerToBase64(values[1])
63
+ n: uint8ArrayToString(decoded[1][0], 'base64url'),
64
+ e: uint8ArrayToString(decoded[1][1], 'base64url')
69
65
  };
70
66
  }
71
67
  /**
72
- * Convert a JWK key to PKIX in ASN1 DER format
68
+ * Convert a JWK public key to PKIX in ASN1 DER format
73
69
  */
74
70
  export function jwkToPkix(jwk) {
75
71
  if (jwk.n == null || jwk.e == null) {
76
72
  throw new InvalidParametersError('JWK was missing components');
77
73
  }
78
- const root = new asn1js.Sequence({
79
- value: [
80
- new asn1js.Sequence({
81
- value: [
82
- // rsaEncryption
83
- new asn1js.ObjectIdentifier({
84
- value: '1.2.840.113549.1.1.1'
85
- }),
86
- new asn1js.Null()
87
- ]
88
- }),
89
- // this appears to be a bug in asn1js.js - this should really be a Sequence
90
- // and not a BitString but it generates the same bytes as node-forge so 🤷‍♂️
91
- new asn1js.BitString({
92
- valueHex: new asn1js.Sequence({
93
- value: [
94
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
95
- asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url')))
96
- ]
97
- }).toBER()
98
- })
99
- ]
100
- });
101
- const der = root.toBER();
102
- return new Uint8Array(der, 0, der.byteLength);
103
- }
104
- function asn1jsIntegerToBase64(int) {
105
- let buf = int.valueBlock.valueHexView;
106
- // chrome rejects values with leading 0s
107
- while (buf[0] === 0) {
108
- buf = buf.subarray(1);
109
- }
110
- return uint8ArrayToString(buf, 'base64url');
111
- }
112
- function bufToBn(u8) {
113
- const hex = [];
114
- u8.forEach(function (i) {
115
- let h = i.toString(16);
116
- if (h.length % 2 > 0) {
117
- h = `0${h}`;
118
- }
119
- hex.push(h);
120
- });
121
- return BigInt('0x' + hex.join(''));
74
+ const subjectPublicKeyInfo = encodeSequence([
75
+ RSA_ALGORITHM_IDENTIFIER,
76
+ encodeBitString(encodeSequence([
77
+ encodeInteger(uint8ArrayFromString(jwk.n, 'base64url')),
78
+ encodeInteger(uint8ArrayFromString(jwk.e, 'base64url'))
79
+ ]))
80
+ ]);
81
+ return subjectPublicKeyInfo.subarray();
122
82
  }
123
83
  /**
124
84
  * Turn PKCS#1 DER bytes to a PrivateKey
@@ -130,16 +90,18 @@ export function pkcs1ToRSAPrivateKey(bytes) {
130
90
  /**
131
91
  * Turn PKIX bytes to a PublicKey
132
92
  */
133
- export function pkixToRSAPublicKey(bytes) {
134
- const jwk = pkixToJwk(bytes);
135
- if (rsaKeySize(jwk) > MAX_RSA_KEY_SIZE) {
93
+ export function pkixToRSAPublicKey(bytes, digest) {
94
+ if (bytes.byteLength >= MAX_RSA_JWK_SIZE) {
136
95
  throw new InvalidPublicKeyError('Key size is too large');
137
96
  }
138
- const hash = sha256(pb.PublicKey.encode({
139
- Type: pb.KeyType.RSA,
140
- Data: bytes
141
- }));
142
- const digest = create(SHA2_256_CODE, hash);
97
+ const jwk = pkixToJwk(bytes);
98
+ if (digest == null) {
99
+ const hash = sha256(pb.PublicKey.encode({
100
+ Type: pb.KeyType.RSA,
101
+ Data: bytes
102
+ }));
103
+ digest = create(SHA2_256_CODE, hash);
104
+ }
143
105
  return new RSAPublicKeyClass(jwk, digest);
144
106
  }
145
107
  export function jwkToRSAPrivateKey(jwk) {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/keys/rsa/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../src/keys/rsa/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAA;AACjF,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAA;AACnD,OAAO,EAAE,UAAU,IAAI,oBAAoB,EAAE,MAAM,yBAAyB,CAAA;AAC5E,OAAO,EAAE,QAAQ,IAAI,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AACtE,OAAO,KAAK,EAAE,MAAM,YAAY,CAAA;AAChC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,UAAU,CAAA;AACpF,OAAO,EAAE,aAAa,IAAI,kBAAkB,EAAE,YAAY,IAAI,iBAAiB,EAAE,MAAM,UAAU,CAAA;AACjG,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAKvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAA;AACpC,MAAM,aAAa,GAAG,IAAI,CAAA;AAC1B,MAAM,gBAAgB,GAAG,IAAI,CAAA;AAE7B,MAAM,wBAAwB,GAAG,UAAU,CAAC,IAAI,CAAC;IAC/C,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;CACzF,CAAC,CAAA;AAEF;;GAEG;AACH,MAAM,UAAU,UAAU,CAAE,KAAiB;IAC3C,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAE/B,OAAO;QACL,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC7C,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC7C,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC7C,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC7C,CAAC,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC7C,EAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC9C,EAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC9C,EAAE,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC;QAC9C,GAAG,EAAE,KAAK;KACX,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAE,GAAe;IACzC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC;QAC5I,MAAM,IAAI,sBAAsB,CAAC,4BAA4B,CAAC,CAAA;IAChE,CAAC;IAED,OAAO,cAAc,CAAC;QACpB,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACnC,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;QACvD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACxD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;QACxD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,EAAE,EAAE,WAAW,CAAC,CAAC;KACzD,CAAC,CAAC,QAAQ,EAAE,CAAA;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAE,KAAiB;IAC1C,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE;QAC/B,MAAM,EAAE,CAAC;KACV,CAAC,CAAA;IAEF,0EAA0E;IAC1E,mCAAmC;IACnC,OAAO;QACL,GAAG,EAAE,KAAK;QACV,CAAC,EAAE,kBAAkB,CACnB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACb,WAAW,CACZ;QACD,CAAC,EAAE,kBAAkB,CACnB,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACb,WAAW,CACZ;KACF,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAE,GAAe;IACxC,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;QACnC,MAAM,IAAI,sBAAsB,CAAC,4BAA4B,CAAC,CAAA;IAChE,CAAC;IAED,MAAM,oBAAoB,GAAG,cAAc,CAAC;QAC1C,wBAAwB;QACxB,eAAe,CACb,cAAc,CAAC;YACb,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;YACvD,aAAa,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;SACxD,CAAC,CACH;KACF,CAAC,CAAA;IAEF,OAAO,oBAAoB,CAAC,QAAQ,EAAE,CAAA;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAE,KAAiB;IACrD,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;IAE7B,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAA;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAE,KAAiB,EAAE,MAA2B;IAChF,IAAI,KAAK,CAAC,UAAU,IAAI,gBAAgB,EAAE,CAAC;QACzC,MAAM,IAAI,qBAAqB,CAAC,uBAAuB,CAAC,CAAA;IAC1D,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;IAE5B,IAAI,MAAM,IAAI,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;YACtC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG;YACpB,IAAI,EAAE,KAAK;SACZ,CAAC,CAAC,CAAA;QACH,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IACtC,CAAC;IAED,OAAO,IAAI,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;AAC3C,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAE,GAAe;IACjD,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,gBAAgB,EAAE,CAAC;QACvC,MAAM,IAAI,sBAAsB,CAAC,uBAAuB,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;QACtC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;KAChC,CAAC,CAAC,CAAA;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAE1C,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;AAC/F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAE,IAAY;IACpD,IAAI,IAAI,GAAG,gBAAgB,EAAE,CAAC;QAC5B,MAAM,IAAI,sBAAsB,CAAC,uBAAuB,CAAC,CAAA;IAC3D,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,CAAA;IACvC,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC;QACtC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG;QACpB,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC;KAChC,CAAC,CAAC,CAAA;IACH,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,EAAE,IAAI,CAAC,CAAA;IAE1C,OAAO,IAAI,kBAAkB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,iBAAiB,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAA;AAC/F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAE,GAAe;IAC9C,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QAChB,MAAM,IAAI,sBAAsB,CAAC,uBAAuB,CAAC,CAAA;IAC3D,CAAC;IAED,OAAO;QACL,UAAU,EAAE,GAAG;QACf,SAAS,EAAE;YACT,GAAG,EAAE,GAAG,CAAC,GAAG;YACZ,CAAC,EAAE,GAAG,CAAC,CAAC;YACR,CAAC,EAAE,GAAG,CAAC,CAAC;SACT;KACF,CAAA;AACH,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@libp2p/crypto",
3
- "version": "5.0.13",
3
+ "version": "5.0.14",
4
4
  "description": "Crypto primitives for libp2p",
5
5
  "license": "Apache-2.0 OR MIT",
6
6
  "homepage": "https://github.com/libp2p/js-libp2p/tree/main/packages/crypto#readme",
@@ -48,7 +48,7 @@
48
48
  ],
49
49
  "exports": {
50
50
  ".": {
51
- "types": "./src/index.d.ts",
51
+ "types": "./dist/src/index.d.ts",
52
52
  "import": "./dist/src/index.js"
53
53
  },
54
54
  "./ciphers": {
@@ -95,7 +95,6 @@
95
95
  "@libp2p/interface": "^2.6.1",
96
96
  "@noble/curves": "^1.7.0",
97
97
  "@noble/hashes": "^1.6.1",
98
- "asn1js": "^3.0.5",
99
98
  "multiformats": "^13.3.1",
100
99
  "protons-runtime": "^5.5.0",
101
100
  "uint8arraylist": "^2.4.8",
@@ -104,6 +103,7 @@
104
103
  "devDependencies": {
105
104
  "@types/mocha": "^10.0.10",
106
105
  "aegir": "^45.1.1",
106
+ "asn1js": "^3.0.5",
107
107
  "benchmark": "^2.1.4",
108
108
  "protons": "^7.6.0"
109
109
  },
package/src/keys/index.ts CHANGED
@@ -15,6 +15,7 @@ import { pkcs1ToRSAPrivateKey, pkixToRSAPublicKey, generateRSAKeyPair } from './
15
15
  import { generateSecp256k1KeyPair, unmarshalSecp256k1PrivateKey, unmarshalSecp256k1PublicKey } from './secp256k1/utils.js'
16
16
  import type { PrivateKey, PublicKey, KeyType, RSAPrivateKey, Secp256k1PrivateKey, Ed25519PrivateKey, Secp256k1PublicKey, Ed25519PublicKey } from '@libp2p/interface'
17
17
  import type { MultihashDigest } from 'multiformats'
18
+ import type { Digest } from 'multiformats/hashes/digest'
18
19
 
19
20
  export { generateEphemeralKeyPair } from './ecdh/index.js'
20
21
  export type { Curve } from './ecdh/index.js'
@@ -61,15 +62,21 @@ export async function generateKeyPairFromSeed (type: string, seed: Uint8Array):
61
62
  }
62
63
 
63
64
  /**
64
- * Converts a protobuf serialized public key into its representative object
65
+ * Converts a protobuf serialized public key into its representative object.
66
+ *
67
+ * For RSA public keys optionally pass the multihash digest of the public key if
68
+ * it is known. If the digest is omitted it will be calculated which can be
69
+ * expensive.
70
+ *
71
+ * For other key types the digest option is ignored.
65
72
  */
66
- export function publicKeyFromProtobuf (buf: Uint8Array): PublicKey {
73
+ export function publicKeyFromProtobuf (buf: Uint8Array, digest?: Digest<18, number>): PublicKey {
67
74
  const { Type, Data } = pb.PublicKey.decode(buf)
68
75
  const data = Data ?? new Uint8Array()
69
76
 
70
77
  switch (Type) {
71
78
  case pb.KeyType.RSA:
72
- return pkixToRSAPublicKey(data)
79
+ return pkixToRSAPublicKey(data, digest)
73
80
  case pb.KeyType.Ed25519:
74
81
  return unmarshalEd25519PublicKey(data)
75
82
  case pb.KeyType.secp256k1: