@libp2p/crypto 5.0.15-757577dd2 → 5.0.15-78cd7d53e

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 (63) hide show
  1. package/dist/index.min.js +1 -1
  2. package/dist/src/keys/ecdsa/ecdsa.d.ts +27 -0
  3. package/dist/src/keys/ecdsa/ecdsa.d.ts.map +1 -0
  4. package/dist/src/keys/ecdsa/ecdsa.js +65 -0
  5. package/dist/src/keys/ecdsa/ecdsa.js.map +1 -0
  6. package/dist/src/keys/ecdsa/index.d.ts +10 -0
  7. package/dist/src/keys/ecdsa/index.d.ts.map +1 -0
  8. package/dist/src/keys/ecdsa/index.js +39 -0
  9. package/dist/src/keys/ecdsa/index.js.map +1 -0
  10. package/dist/src/keys/ecdsa/utils.d.ts +11 -0
  11. package/dist/src/keys/ecdsa/utils.d.ts.map +1 -0
  12. package/dist/src/keys/ecdsa/utils.js +180 -0
  13. package/dist/src/keys/ecdsa/utils.js.map +1 -0
  14. package/dist/src/keys/index.d.ts +5 -3
  15. package/dist/src/keys/index.d.ts.map +1 -1
  16. package/dist/src/keys/index.js +56 -11
  17. package/dist/src/keys/index.js.map +1 -1
  18. package/dist/src/keys/keys.d.ts +2 -1
  19. package/dist/src/keys/keys.d.ts.map +1 -1
  20. package/dist/src/keys/keys.js +2 -0
  21. package/dist/src/keys/keys.js.map +1 -1
  22. package/dist/src/keys/rsa/der.d.ts +2 -1
  23. package/dist/src/keys/rsa/der.d.ts.map +1 -1
  24. package/dist/src/keys/rsa/der.js +53 -10
  25. package/dist/src/keys/rsa/der.js.map +1 -1
  26. package/dist/src/keys/rsa/index.browser.d.ts +1 -0
  27. package/dist/src/keys/rsa/index.browser.d.ts.map +1 -1
  28. package/dist/src/keys/rsa/index.browser.js +1 -0
  29. package/dist/src/keys/rsa/index.browser.js.map +1 -1
  30. package/dist/src/keys/rsa/index.d.ts +1 -0
  31. package/dist/src/keys/rsa/index.d.ts.map +1 -1
  32. package/dist/src/keys/rsa/index.js +1 -0
  33. package/dist/src/keys/rsa/index.js.map +1 -1
  34. package/dist/src/keys/rsa/rsa.d.ts +4 -4
  35. package/dist/src/keys/rsa/rsa.d.ts.map +1 -1
  36. package/dist/src/keys/rsa/rsa.js +10 -10
  37. package/dist/src/keys/rsa/rsa.js.map +1 -1
  38. package/dist/src/keys/rsa/utils.d.ts +12 -2
  39. package/dist/src/keys/rsa/utils.d.ts.map +1 -1
  40. package/dist/src/keys/rsa/utils.js +41 -16
  41. package/dist/src/keys/rsa/utils.js.map +1 -1
  42. package/dist/src/keys/secp256k1/index.browser.d.ts +4 -0
  43. package/dist/src/keys/secp256k1/index.browser.d.ts.map +1 -1
  44. package/dist/src/keys/secp256k1/index.browser.js +4 -0
  45. package/dist/src/keys/secp256k1/index.browser.js.map +1 -1
  46. package/dist/src/keys/secp256k1/index.d.ts +4 -0
  47. package/dist/src/keys/secp256k1/index.d.ts.map +1 -1
  48. package/dist/src/keys/secp256k1/index.js +4 -0
  49. package/dist/src/keys/secp256k1/index.js.map +1 -1
  50. package/package.json +2 -2
  51. package/src/keys/ecdsa/ecdsa.ts +84 -0
  52. package/src/keys/ecdsa/index.ts +50 -0
  53. package/src/keys/ecdsa/utils.ts +227 -0
  54. package/src/keys/index.ts +79 -15
  55. package/src/keys/keys.proto +1 -0
  56. package/src/keys/keys.ts +4 -2
  57. package/src/keys/rsa/der.ts +68 -11
  58. package/src/keys/rsa/index.browser.ts +1 -0
  59. package/src/keys/rsa/index.ts +2 -0
  60. package/src/keys/rsa/rsa.ts +10 -10
  61. package/src/keys/rsa/utils.ts +48 -16
  62. package/src/keys/secp256k1/index.browser.ts +6 -0
  63. package/src/keys/secp256k1/index.ts +6 -0
@@ -6,6 +6,7 @@ import * as utils from './utils.js'
6
6
  import type { JWKKeyPair } from '../interface.js'
7
7
  import type { Uint8ArrayList } from 'uint8arraylist'
8
8
 
9
+ export const RSAES_PKCS1_V1_5_OID = '1.2.840.113549.1.1.1'
9
10
  export { utils }
10
11
 
11
12
  export async function generateRSAKey (bits: number): Promise<JWKKeyPair> {
@@ -9,6 +9,8 @@ import type { Uint8ArrayList } from 'uint8arraylist'
9
9
 
10
10
  const keypair = promisify(crypto.generateKeyPair)
11
11
 
12
+ export const RSAES_PKCS1_V1_5_OID = '1.2.840.113549.1.1.1'
13
+
12
14
  export { utils }
13
15
 
14
16
  export async function generateRSAKey (bits: number): Promise<JWKKeyPair> {
@@ -8,18 +8,18 @@ import type { Uint8ArrayList } from 'uint8arraylist'
8
8
 
9
9
  export class RSAPublicKey implements RSAPublicKeyInterface {
10
10
  public readonly type = 'RSA'
11
- private readonly _key: JsonWebKey
11
+ public readonly jwk: JsonWebKey
12
12
  private _raw?: Uint8Array
13
13
  private readonly _multihash: Digest<18, number>
14
14
 
15
- constructor (key: JsonWebKey, digest: Digest<18, number>) {
16
- this._key = key
15
+ constructor (jwk: JsonWebKey, digest: Digest<18, number>) {
16
+ this.jwk = jwk
17
17
  this._multihash = digest
18
18
  }
19
19
 
20
20
  get raw (): Uint8Array {
21
21
  if (this._raw == null) {
22
- this._raw = utils.jwkToPkix(this._key)
22
+ this._raw = utils.jwkToPkix(this.jwk)
23
23
  }
24
24
 
25
25
  return this._raw
@@ -46,24 +46,24 @@ export class RSAPublicKey implements RSAPublicKeyInterface {
46
46
  }
47
47
 
48
48
  verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean | Promise<boolean> {
49
- return hashAndVerify(this._key, sig, data)
49
+ return hashAndVerify(this.jwk, sig, data)
50
50
  }
51
51
  }
52
52
 
53
53
  export class RSAPrivateKey implements RSAPrivateKeyInterface {
54
54
  public readonly type = 'RSA'
55
- private readonly _key: JsonWebKey
55
+ public readonly jwk: JsonWebKey
56
56
  private _raw?: Uint8Array
57
57
  public readonly publicKey: RSAPublicKey
58
58
 
59
- constructor (key: JsonWebKey, publicKey: RSAPublicKey) {
60
- this._key = key
59
+ constructor (jwk: JsonWebKey, publicKey: RSAPublicKey) {
60
+ this.jwk = jwk
61
61
  this.publicKey = publicKey
62
62
  }
63
63
 
64
64
  get raw (): Uint8Array {
65
65
  if (this._raw == null) {
66
- this._raw = utils.jwkToPkcs1(this._key)
66
+ this._raw = utils.jwkToPkcs1(this.jwk)
67
67
  }
68
68
 
69
69
  return this._raw
@@ -78,6 +78,6 @@ export class RSAPrivateKey implements RSAPrivateKeyInterface {
78
78
  }
79
79
 
80
80
  sign (message: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array> {
81
- return hashAndSign(this._key, message)
81
+ return hashAndSign(this.jwk, message)
82
82
  }
83
83
  }
@@ -23,17 +23,24 @@ const RSA_ALGORITHM_IDENTIFIER = Uint8Array.from([
23
23
  * Convert a PKCS#1 in ASN1 DER format to a JWK private key
24
24
  */
25
25
  export function pkcs1ToJwk (bytes: Uint8Array): JsonWebKey {
26
- const values = decodeDer(bytes)
26
+ const message = decodeDer(bytes)
27
27
 
28
+ return pkcs1MessageToJwk(message)
29
+ }
30
+
31
+ /**
32
+ * Convert a PKCS#1 in ASN1 DER format to a JWK private key
33
+ */
34
+ export function pkcs1MessageToJwk (message: any): JsonWebKey {
28
35
  return {
29
- n: uint8ArrayToString(values[1], 'base64url'),
30
- e: uint8ArrayToString(values[2], 'base64url'),
31
- d: uint8ArrayToString(values[3], 'base64url'),
32
- p: uint8ArrayToString(values[4], 'base64url'),
33
- q: uint8ArrayToString(values[5], 'base64url'),
34
- dp: uint8ArrayToString(values[6], 'base64url'),
35
- dq: uint8ArrayToString(values[7], 'base64url'),
36
- qi: uint8ArrayToString(values[8], 'base64url'),
36
+ n: uint8ArrayToString(message[1], 'base64url'),
37
+ e: uint8ArrayToString(message[2], 'base64url'),
38
+ d: uint8ArrayToString(message[3], 'base64url'),
39
+ p: uint8ArrayToString(message[4], 'base64url'),
40
+ q: uint8ArrayToString(message[5], 'base64url'),
41
+ dp: uint8ArrayToString(message[6], 'base64url'),
42
+ dq: uint8ArrayToString(message[7], 'base64url'),
43
+ qi: uint8ArrayToString(message[8], 'base64url'),
37
44
  kty: 'RSA'
38
45
  }
39
46
  }
@@ -63,7 +70,15 @@ export function jwkToPkcs1 (jwk: JsonWebKey): Uint8Array {
63
70
  * Convert a PKIX in ASN1 DER format to a JWK public key
64
71
  */
65
72
  export function pkixToJwk (bytes: Uint8Array): JsonWebKey {
66
- const decoded = decodeDer(bytes, {
73
+ const message = decodeDer(bytes, {
74
+ offset: 0
75
+ })
76
+
77
+ return pkixMessageToJwk(message)
78
+ }
79
+
80
+ export function pkixMessageToJwk (message: any): JsonWebKey {
81
+ const keys = decodeDer(message[1], {
67
82
  offset: 0
68
83
  })
69
84
 
@@ -72,11 +87,11 @@ export function pkixToJwk (bytes: Uint8Array): JsonWebKey {
72
87
  return {
73
88
  kty: 'RSA',
74
89
  n: uint8ArrayToString(
75
- decoded[1][0],
90
+ keys[0],
76
91
  'base64url'
77
92
  ),
78
93
  e: uint8ArrayToString(
79
- decoded[1][1],
94
+ keys[1],
80
95
  'base64url'
81
96
  )
82
97
  }
@@ -104,23 +119,40 @@ export function jwkToPkix (jwk: JsonWebKey): Uint8Array {
104
119
  }
105
120
 
106
121
  /**
107
- * Turn PKCS#1 DER bytes to a PrivateKey
122
+ * Turn PKCS#1 DER bytes into a PrivateKey
108
123
  */
109
124
  export function pkcs1ToRSAPrivateKey (bytes: Uint8Array): RSAPrivateKey {
110
- const jwk = pkcs1ToJwk(bytes)
125
+ const message = decodeDer(bytes)
126
+
127
+ return pkcs1MessageToRSAPrivateKey(message)
128
+ }
129
+
130
+ /**
131
+ * Turn PKCS#1 DER bytes into a PrivateKey
132
+ */
133
+ export function pkcs1MessageToRSAPrivateKey (message: any): RSAPrivateKey {
134
+ const jwk = pkcs1MessageToJwk(message)
111
135
 
112
136
  return jwkToRSAPrivateKey(jwk)
113
137
  }
114
138
 
115
139
  /**
116
- * Turn PKIX bytes to a PublicKey
140
+ * Turn a PKIX message into a PublicKey
117
141
  */
118
142
  export function pkixToRSAPublicKey (bytes: Uint8Array, digest?: Digest<18, number>): RSAPublicKey {
119
143
  if (bytes.byteLength >= MAX_RSA_JWK_SIZE) {
120
144
  throw new InvalidPublicKeyError('Key size is too large')
121
145
  }
122
146
 
123
- const jwk = pkixToJwk(bytes)
147
+ const message = decodeDer(bytes, {
148
+ offset: 0
149
+ })
150
+
151
+ return pkixMessageToRSAPublicKey(message, bytes, digest)
152
+ }
153
+
154
+ export function pkixMessageToRSAPublicKey (message: any, bytes: Uint8Array, digest?: Digest<18, number>): RSAPublicKey {
155
+ const jwk = pkixMessageToJwk(message)
124
156
 
125
157
  if (digest == null) {
126
158
  const hash = sha256(pb.PublicKey.encode({
@@ -4,6 +4,12 @@ import { SigningError, VerificationError } from '../../errors.js'
4
4
  import { isPromise } from '../../util.js'
5
5
  import type { Uint8ArrayList } from 'uint8arraylist'
6
6
 
7
+ const PUBLIC_KEY_BYTE_LENGTH = 33
8
+ const PRIVATE_KEY_BYTE_LENGTH = 32
9
+
10
+ export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength }
11
+ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
12
+
7
13
  /**
8
14
  * Hash and sign message with private key
9
15
  */
@@ -3,6 +3,12 @@ import { secp256k1 as secp } from '@noble/curves/secp256k1'
3
3
  import { SigningError, VerificationError } from '../../errors.js'
4
4
  import type { Uint8ArrayList } from 'uint8arraylist'
5
5
 
6
+ const PUBLIC_KEY_BYTE_LENGTH = 33
7
+ const PRIVATE_KEY_BYTE_LENGTH = 32
8
+
9
+ export { PUBLIC_KEY_BYTE_LENGTH as publicKeyLength }
10
+ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
11
+
6
12
  /**
7
13
  * Hash and sign message with private key
8
14
  */