@libp2p/crypto 4.1.9 → 5.0.0-18dd3cb26

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 (192) hide show
  1. package/dist/index.min.js +4 -5
  2. package/dist/src/ciphers/aes-gcm.browser.js +1 -1
  3. package/dist/src/ciphers/aes-gcm.browser.js.map +1 -1
  4. package/dist/src/ciphers/index.d.ts +2 -0
  5. package/dist/src/ciphers/index.d.ts.map +1 -0
  6. package/dist/src/ciphers/index.js +2 -0
  7. package/dist/src/ciphers/index.js.map +1 -0
  8. package/dist/src/errors.d.ts +19 -0
  9. package/dist/src/errors.d.ts.map +1 -0
  10. package/dist/src/errors.js +28 -0
  11. package/dist/src/errors.js.map +1 -0
  12. package/dist/src/hmac/{index-browser.d.ts → index.browser.d.ts} +1 -1
  13. package/dist/src/hmac/{index-browser.d.ts.map → index.browser.d.ts.map} +1 -1
  14. package/dist/src/hmac/{index-browser.js → index.browser.js} +2 -2
  15. package/dist/src/hmac/{index-browser.js.map → index.browser.js.map} +1 -1
  16. package/dist/src/keys/ecdh/index.browser.d.ts +4 -0
  17. package/dist/src/keys/ecdh/index.browser.d.ts.map +1 -0
  18. package/dist/src/keys/{ecdh-browser.js → ecdh/index.browser.js} +13 -11
  19. package/dist/src/keys/ecdh/index.browser.js.map +1 -0
  20. package/dist/src/keys/{ecdh.d.ts → ecdh/index.d.ts} +4 -3
  21. package/dist/src/keys/ecdh/index.d.ts.map +1 -0
  22. package/dist/src/keys/{ecdh.js → ecdh/index.js} +4 -4
  23. package/dist/src/keys/ecdh/index.js.map +1 -0
  24. package/dist/src/keys/ed25519/ed25519.d.ts +23 -0
  25. package/dist/src/keys/ed25519/ed25519.d.ts.map +1 -0
  26. package/dist/src/keys/ed25519/ed25519.js +54 -0
  27. package/dist/src/keys/ed25519/ed25519.js.map +1 -0
  28. package/dist/src/keys/{ed25519-browser.d.ts → ed25519/index.browser.d.ts} +2 -2
  29. package/dist/src/keys/ed25519/index.browser.d.ts.map +1 -0
  30. package/dist/src/keys/{ed25519-browser.js → ed25519/index.browser.js} +1 -1
  31. package/dist/src/keys/ed25519/index.browser.js.map +1 -0
  32. package/dist/src/keys/{ed25519.d.ts → ed25519/index.d.ts} +2 -2
  33. package/dist/src/keys/ed25519/index.d.ts.map +1 -0
  34. package/dist/src/keys/{ed25519.js → ed25519/index.js} +1 -1
  35. package/dist/src/keys/ed25519/index.js.map +1 -0
  36. package/dist/src/keys/ed25519/utils.d.ts +7 -0
  37. package/dist/src/keys/ed25519/utils.d.ts.map +1 -0
  38. package/dist/src/keys/ed25519/utils.js +36 -0
  39. package/dist/src/keys/ed25519/utils.js.map +1 -0
  40. package/dist/src/keys/ephemeral-keys.d.ts +2 -2
  41. package/dist/src/keys/ephemeral-keys.d.ts.map +1 -1
  42. package/dist/src/keys/ephemeral-keys.js +2 -2
  43. package/dist/src/keys/ephemeral-keys.js.map +1 -1
  44. package/dist/src/keys/index.d.ts +33 -36
  45. package/dist/src/keys/index.d.ts.map +1 -1
  46. package/dist/src/keys/index.js +93 -83
  47. package/dist/src/keys/index.js.map +1 -1
  48. package/dist/src/keys/key-stretcher.d.ts.map +1 -1
  49. package/dist/src/keys/key-stretcher.js +9 -7
  50. package/dist/src/keys/key-stretcher.js.map +1 -1
  51. package/dist/src/keys/keys.d.ts +4 -4
  52. package/dist/src/keys/keys.d.ts.map +1 -1
  53. package/dist/src/keys/keys.js +21 -15
  54. package/dist/src/keys/keys.js.map +1 -1
  55. package/dist/src/keys/rsa/index.browser.d.ts +11 -0
  56. package/dist/src/keys/rsa/index.browser.d.ts.map +1 -0
  57. package/dist/src/keys/{rsa-browser.js → rsa/index.browser.js} +10 -39
  58. package/dist/src/keys/rsa/index.browser.js.map +1 -0
  59. package/dist/src/keys/rsa/index.d.ts +11 -0
  60. package/dist/src/keys/rsa/index.d.ts.map +1 -0
  61. package/dist/src/keys/{rsa.js → rsa/index.js} +8 -22
  62. package/dist/src/keys/rsa/index.js.map +1 -0
  63. package/dist/src/keys/rsa/rsa.d.ts +28 -0
  64. package/dist/src/keys/rsa/rsa.d.ts.map +1 -0
  65. package/dist/src/keys/rsa/rsa.js +65 -0
  66. package/dist/src/keys/rsa/rsa.js.map +1 -0
  67. package/dist/src/keys/rsa/utils.d.ts +34 -0
  68. package/dist/src/keys/rsa/utils.d.ts.map +1 -0
  69. package/dist/src/keys/rsa/utils.js +193 -0
  70. package/dist/src/keys/rsa/utils.js.map +1 -0
  71. package/dist/src/keys/secp256k1/index.browser.d.ts +10 -0
  72. package/dist/src/keys/secp256k1/index.browser.d.ts.map +1 -0
  73. package/dist/src/keys/secp256k1/index.browser.js +41 -0
  74. package/dist/src/keys/secp256k1/index.browser.js.map +1 -0
  75. package/dist/src/keys/secp256k1/index.d.ts +10 -0
  76. package/dist/src/keys/secp256k1/index.d.ts.map +1 -0
  77. package/dist/src/keys/secp256k1/index.js +47 -0
  78. package/dist/src/keys/secp256k1/index.js.map +1 -0
  79. package/dist/src/keys/secp256k1/secp256k1.d.ts +24 -0
  80. package/dist/src/keys/secp256k1/secp256k1.d.ts.map +1 -0
  81. package/dist/src/keys/secp256k1/secp256k1.js +53 -0
  82. package/dist/src/keys/secp256k1/secp256k1.js.map +1 -0
  83. package/dist/src/keys/secp256k1/utils.d.ts +13 -0
  84. package/dist/src/keys/secp256k1/utils.d.ts.map +1 -0
  85. package/dist/src/keys/secp256k1/utils.js +53 -0
  86. package/dist/src/keys/secp256k1/utils.js.map +1 -0
  87. package/dist/src/pbkdf2.js +2 -2
  88. package/dist/src/pbkdf2.js.map +1 -1
  89. package/dist/src/random-bytes.js +2 -2
  90. package/dist/src/random-bytes.js.map +1 -1
  91. package/dist/src/webcrypto/index.d.ts +3 -0
  92. package/dist/src/webcrypto/index.d.ts.map +1 -0
  93. package/dist/src/webcrypto/index.js +3 -0
  94. package/dist/src/webcrypto/index.js.map +1 -0
  95. package/dist/src/{webcrypto-browser.d.ts → webcrypto/webcrypto.browser.d.ts} +1 -1
  96. package/dist/src/webcrypto/webcrypto.browser.d.ts.map +1 -0
  97. package/dist/src/{webcrypto-browser.js → webcrypto/webcrypto.browser.js} +4 -3
  98. package/dist/src/webcrypto/webcrypto.browser.js.map +1 -0
  99. package/dist/src/webcrypto/webcrypto.d.ts.map +1 -0
  100. package/dist/src/webcrypto/webcrypto.js.map +1 -0
  101. package/package.json +16 -8
  102. package/src/ciphers/aes-gcm.browser.ts +1 -1
  103. package/src/ciphers/index.ts +1 -0
  104. package/src/errors.ts +29 -0
  105. package/src/hmac/{index-browser.ts → index.browser.ts} +1 -1
  106. package/src/keys/{ecdh-browser.ts → ecdh/index.browser.ts} +16 -13
  107. package/src/keys/{ecdh.ts → ecdh/index.ts} +6 -4
  108. package/src/keys/ed25519/ed25519.ts +68 -0
  109. package/src/keys/{ed25519-browser.ts → ed25519/index.browser.ts} +1 -1
  110. package/src/keys/{ed25519.ts → ed25519/index.ts} +1 -1
  111. package/src/keys/ed25519/utils.ts +42 -0
  112. package/src/keys/ephemeral-keys.ts +2 -2
  113. package/src/keys/index.ts +110 -92
  114. package/src/keys/key-stretcher.ts +15 -8
  115. package/src/keys/keys.proto +1 -1
  116. package/src/keys/keys.ts +21 -16
  117. package/src/keys/{rsa-browser.ts → rsa/index.browser.ts} +10 -56
  118. package/src/keys/{rsa.ts → rsa/index.ts} +8 -23
  119. package/src/keys/rsa/rsa.ts +83 -0
  120. package/src/keys/rsa/utils.ts +235 -0
  121. package/src/keys/secp256k1/index.browser.ts +45 -0
  122. package/src/keys/secp256k1/index.ts +51 -0
  123. package/src/keys/secp256k1/secp256k1.ts +68 -0
  124. package/src/keys/secp256k1/utils.ts +63 -0
  125. package/src/pbkdf2.ts +2 -2
  126. package/src/random-bytes.ts +2 -2
  127. package/src/webcrypto/index.ts +3 -0
  128. package/src/webcrypto/webcrypto.browser.ts +23 -0
  129. package/dist/src/keys/ecdh-browser.d.ts +0 -3
  130. package/dist/src/keys/ecdh-browser.d.ts.map +0 -1
  131. package/dist/src/keys/ecdh-browser.js.map +0 -1
  132. package/dist/src/keys/ecdh.d.ts.map +0 -1
  133. package/dist/src/keys/ecdh.js.map +0 -1
  134. package/dist/src/keys/ed25519-browser.d.ts.map +0 -1
  135. package/dist/src/keys/ed25519-browser.js.map +0 -1
  136. package/dist/src/keys/ed25519-class.d.ts +0 -42
  137. package/dist/src/keys/ed25519-class.d.ts.map +0 -1
  138. package/dist/src/keys/ed25519-class.js +0 -133
  139. package/dist/src/keys/ed25519-class.js.map +0 -1
  140. package/dist/src/keys/ed25519.d.ts.map +0 -1
  141. package/dist/src/keys/ed25519.js.map +0 -1
  142. package/dist/src/keys/exporter.d.ts +0 -8
  143. package/dist/src/keys/exporter.d.ts.map +0 -1
  144. package/dist/src/keys/exporter.js +0 -13
  145. package/dist/src/keys/exporter.js.map +0 -1
  146. package/dist/src/keys/importer.d.ts +0 -7
  147. package/dist/src/keys/importer.d.ts.map +0 -1
  148. package/dist/src/keys/importer.js +0 -13
  149. package/dist/src/keys/importer.js.map +0 -1
  150. package/dist/src/keys/rsa-browser.d.ts +0 -12
  151. package/dist/src/keys/rsa-browser.d.ts.map +0 -1
  152. package/dist/src/keys/rsa-browser.js.map +0 -1
  153. package/dist/src/keys/rsa-class.d.ts +0 -46
  154. package/dist/src/keys/rsa-class.d.ts.map +0 -1
  155. package/dist/src/keys/rsa-class.js +0 -135
  156. package/dist/src/keys/rsa-class.js.map +0 -1
  157. package/dist/src/keys/rsa-utils.d.ts +0 -20
  158. package/dist/src/keys/rsa-utils.d.ts.map +0 -1
  159. package/dist/src/keys/rsa-utils.js +0 -330
  160. package/dist/src/keys/rsa-utils.js.map +0 -1
  161. package/dist/src/keys/rsa.d.ts +0 -12
  162. package/dist/src/keys/rsa.d.ts.map +0 -1
  163. package/dist/src/keys/rsa.js.map +0 -1
  164. package/dist/src/keys/secp256k1-browser.d.ts +0 -18
  165. package/dist/src/keys/secp256k1-browser.d.ts.map +0 -1
  166. package/dist/src/keys/secp256k1-browser.js +0 -78
  167. package/dist/src/keys/secp256k1-browser.js.map +0 -1
  168. package/dist/src/keys/secp256k1-class.d.ts +0 -39
  169. package/dist/src/keys/secp256k1-class.d.ts.map +0 -1
  170. package/dist/src/keys/secp256k1-class.js +0 -109
  171. package/dist/src/keys/secp256k1-class.js.map +0 -1
  172. package/dist/src/keys/secp256k1.d.ts +0 -18
  173. package/dist/src/keys/secp256k1.d.ts.map +0 -1
  174. package/dist/src/keys/secp256k1.js +0 -84
  175. package/dist/src/keys/secp256k1.js.map +0 -1
  176. package/dist/src/webcrypto-browser.d.ts.map +0 -1
  177. package/dist/src/webcrypto-browser.js.map +0 -1
  178. package/dist/src/webcrypto.d.ts.map +0 -1
  179. package/dist/src/webcrypto.js.map +0 -1
  180. package/dist/typedoc-urls.json +0 -40
  181. package/src/keys/ed25519-class.ts +0 -160
  182. package/src/keys/exporter.ts +0 -14
  183. package/src/keys/importer.ts +0 -13
  184. package/src/keys/rsa-class.ts +0 -172
  185. package/src/keys/rsa-utils.ts +0 -408
  186. package/src/keys/secp256k1-browser.ts +0 -87
  187. package/src/keys/secp256k1-class.ts +0 -133
  188. package/src/keys/secp256k1.ts +0 -93
  189. package/src/webcrypto-browser.ts +0 -24
  190. /package/dist/src/{webcrypto.d.ts → webcrypto/webcrypto.d.ts} +0 -0
  191. /package/dist/src/{webcrypto.js → webcrypto/webcrypto.js} +0 -0
  192. /package/src/{webcrypto.ts → webcrypto/webcrypto.ts} +0 -0
@@ -0,0 +1,235 @@
1
+ import { InvalidParametersError, InvalidPublicKeyError } from '@libp2p/interface'
2
+ import { sha256 } from '@noble/hashes/sha256'
3
+ import * as asn1js from 'asn1js'
4
+ import { create } from 'multiformats/hashes/digest'
5
+ import { fromString as uint8ArrayFromString } from 'uint8arrays/from-string'
6
+ import { toString as uint8ArrayToString } from 'uint8arrays/to-string'
7
+ import * as pb from '../keys.js'
8
+ import { RSAPrivateKey as RSAPrivateKeyClass, RSAPublicKey as RSAPublicKeyClass } from './rsa.js'
9
+ import { generateRSAKey, rsaKeySize } from './index.js'
10
+ import type { JWKKeyPair } from '../interface.js'
11
+ import type { RSAPrivateKey, RSAPublicKey } from '@libp2p/interface'
12
+
13
+ export const MAX_RSA_KEY_SIZE = 8192
14
+ const SHA2_256_CODE = 0x12
15
+
16
+ /**
17
+ * Convert a PKCS#1 in ASN1 DER format to a JWK key
18
+ */
19
+ export function pkcs1ToJwk (bytes: Uint8Array): JsonWebKey {
20
+ const { result } = asn1js.fromBER(bytes)
21
+
22
+ // @ts-expect-error this looks fragile but DER is a canonical format so we are
23
+ // safe to have deeply property chains like this
24
+ const values: asn1js.Integer[] = result.valueBlock.value
25
+
26
+ const key = {
27
+ n: uint8ArrayToString(bnToBuf(values[1].toBigInt()), 'base64url'),
28
+ e: uint8ArrayToString(bnToBuf(values[2].toBigInt()), 'base64url'),
29
+ d: uint8ArrayToString(bnToBuf(values[3].toBigInt()), 'base64url'),
30
+ p: uint8ArrayToString(bnToBuf(values[4].toBigInt()), 'base64url'),
31
+ q: uint8ArrayToString(bnToBuf(values[5].toBigInt()), 'base64url'),
32
+ dp: uint8ArrayToString(bnToBuf(values[6].toBigInt()), 'base64url'),
33
+ dq: uint8ArrayToString(bnToBuf(values[7].toBigInt()), 'base64url'),
34
+ qi: uint8ArrayToString(bnToBuf(values[8].toBigInt()), 'base64url'),
35
+ kty: 'RSA',
36
+ alg: 'RS256'
37
+ }
38
+
39
+ return key
40
+ }
41
+
42
+ /**
43
+ * Convert a JWK key into PKCS#1 in ASN1 DER format
44
+ */
45
+ export function jwkToPkcs1 (jwk: JsonWebKey): Uint8Array {
46
+ 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) {
47
+ throw new InvalidParametersError('JWK was missing components')
48
+ }
49
+
50
+ const root = new asn1js.Sequence({
51
+ value: [
52
+ new asn1js.Integer({ value: 0 }),
53
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
54
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url'))),
55
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.d, 'base64url'))),
56
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.p, 'base64url'))),
57
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.q, 'base64url'))),
58
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dp, 'base64url'))),
59
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.dq, 'base64url'))),
60
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.qi, 'base64url')))
61
+ ]
62
+ })
63
+
64
+ const der = root.toBER()
65
+
66
+ return new Uint8Array(der, 0, der.byteLength)
67
+ }
68
+
69
+ /**
70
+ * Convert a PKIX in ASN1 DER format to a JWK key
71
+ */
72
+ export function pkixToJwk (bytes: Uint8Array): JsonWebKey {
73
+ const { result } = asn1js.fromBER(bytes)
74
+
75
+ // @ts-expect-error this looks fragile but DER is a canonical format so we are
76
+ // safe to have deeply property chains like this
77
+ const values: asn1js.Integer[] = result.valueBlock.value[1].valueBlock.value[0].valueBlock.value
78
+
79
+ return {
80
+ kty: 'RSA',
81
+ n: uint8ArrayToString(bnToBuf(values[0].toBigInt()), 'base64url'),
82
+ e: uint8ArrayToString(bnToBuf(values[1].toBigInt()), 'base64url')
83
+ }
84
+ }
85
+
86
+ /**
87
+ * Convert a JWK key to PKIX in ASN1 DER format
88
+ */
89
+ export function jwkToPkix (jwk: JsonWebKey): Uint8Array {
90
+ if (jwk.n == null || jwk.e == null) {
91
+ throw new InvalidParametersError('JWK was missing components')
92
+ }
93
+
94
+ const root = new asn1js.Sequence({
95
+ value: [
96
+ new asn1js.Sequence({
97
+ value: [
98
+ // rsaEncryption
99
+ new asn1js.ObjectIdentifier({
100
+ value: '1.2.840.113549.1.1.1'
101
+ }),
102
+ new asn1js.Null()
103
+ ]
104
+ }),
105
+ // this appears to be a bug in asn1js.js - this should really be a Sequence
106
+ // and not a BitString but it generates the same bytes as node-forge so 🤷‍♂️
107
+ new asn1js.BitString({
108
+ valueHex: new asn1js.Sequence({
109
+ value: [
110
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.n, 'base64url'))),
111
+ asn1js.Integer.fromBigInt(bufToBn(uint8ArrayFromString(jwk.e, 'base64url')))
112
+ ]
113
+ }).toBER()
114
+ })
115
+ ]
116
+ })
117
+
118
+ const der = root.toBER()
119
+
120
+ return new Uint8Array(der, 0, der.byteLength)
121
+ }
122
+
123
+ function bnToBuf (bn: bigint): Uint8Array {
124
+ let hex = bn.toString(16)
125
+
126
+ if (hex.length % 2 > 0) {
127
+ hex = `0${hex}`
128
+ }
129
+
130
+ const len = hex.length / 2
131
+ const u8 = new Uint8Array(len)
132
+
133
+ let i = 0
134
+ let j = 0
135
+
136
+ while (i < len) {
137
+ u8[i] = parseInt(hex.slice(j, j + 2), 16)
138
+ i += 1
139
+ j += 2
140
+ }
141
+
142
+ return u8
143
+ }
144
+
145
+ function bufToBn (u8: Uint8Array): bigint {
146
+ const hex: string[] = []
147
+
148
+ u8.forEach(function (i) {
149
+ let h = i.toString(16)
150
+
151
+ if (h.length % 2 > 0) {
152
+ h = `0${h}`
153
+ }
154
+
155
+ hex.push(h)
156
+ })
157
+
158
+ return BigInt('0x' + hex.join(''))
159
+ }
160
+
161
+ /**
162
+ * Turn PCKS#1 DER bytes to a PrivateKey
163
+ */
164
+ export function pkcs1ToRSAPrivateKey (bytes: Uint8Array): RSAPrivateKey {
165
+ const jwk = pkcs1ToJwk(bytes)
166
+
167
+ return jwkToRSAPrivateKey(jwk)
168
+ }
169
+
170
+ /**
171
+ * Turn PKIX bytes to a PublicKey
172
+ */
173
+ export function pkixToRSAPublicKey (bytes: Uint8Array): RSAPublicKey {
174
+ const jwk = pkixToJwk(bytes)
175
+
176
+ if (rsaKeySize(jwk) > MAX_RSA_KEY_SIZE) {
177
+ throw new InvalidPublicKeyError('Key size is too large')
178
+ }
179
+
180
+ const hash = sha256(pb.PublicKey.encode({
181
+ Type: pb.KeyType.RSA,
182
+ Data: bytes
183
+ }))
184
+ const digest = create(SHA2_256_CODE, hash)
185
+
186
+ return new RSAPublicKeyClass(jwk, digest)
187
+ }
188
+
189
+ export function jwkToRSAPrivateKey (jwk: JsonWebKey): RSAPrivateKey {
190
+ if (rsaKeySize(jwk) > MAX_RSA_KEY_SIZE) {
191
+ throw new InvalidParametersError('Key size is too large')
192
+ }
193
+
194
+ const keys = jwkToJWKKeyPair(jwk)
195
+ const hash = sha256(pb.PublicKey.encode({
196
+ Type: pb.KeyType.RSA,
197
+ Data: jwkToPkix(keys.publicKey)
198
+ }))
199
+ const digest = create(SHA2_256_CODE, hash)
200
+
201
+ return new RSAPrivateKeyClass(keys.privateKey, new RSAPublicKeyClass(keys.publicKey, digest))
202
+ }
203
+
204
+ export async function generateRSAKeyPair (bits: number): Promise<RSAPrivateKey> {
205
+ if (bits > MAX_RSA_KEY_SIZE) {
206
+ throw new InvalidParametersError('Key size is too large')
207
+ }
208
+
209
+ const keys = await generateRSAKey(bits)
210
+ const hash = sha256(pb.PublicKey.encode({
211
+ Type: pb.KeyType.RSA,
212
+ Data: jwkToPkix(keys.publicKey)
213
+ }))
214
+ const digest = create(SHA2_256_CODE, hash)
215
+
216
+ return new RSAPrivateKeyClass(keys.privateKey, new RSAPublicKeyClass(keys.publicKey, digest))
217
+ }
218
+
219
+ /**
220
+ * Takes a jwk key and returns a JWK KeyPair
221
+ */
222
+ export function jwkToJWKKeyPair (key: JsonWebKey): JWKKeyPair {
223
+ if (key == null) {
224
+ throw new InvalidParametersError('Missing key parameter')
225
+ }
226
+
227
+ return {
228
+ privateKey: key,
229
+ publicKey: {
230
+ kty: key.kty,
231
+ n: key.n,
232
+ e: key.e
233
+ }
234
+ }
235
+ }
@@ -0,0 +1,45 @@
1
+ import { secp256k1 as secp } from '@noble/curves/secp256k1'
2
+ import { sha256 } from 'multiformats/hashes/sha2'
3
+ import { SigningError, VerificationError } from '../../errors.js'
4
+ import { isPromise } from '../../util.js'
5
+ import type { Uint8ArrayList } from 'uint8arraylist'
6
+
7
+ /**
8
+ * Hash and sign message with private key
9
+ */
10
+ export function hashAndSign (key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array> {
11
+ const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray())
12
+
13
+ if (isPromise(p)) {
14
+ return p.then(({ digest }) => secp.sign(digest, key).toDERRawBytes())
15
+ .catch(err => {
16
+ throw new SigningError(String(err))
17
+ })
18
+ }
19
+
20
+ try {
21
+ return secp.sign(p.digest, key).toDERRawBytes()
22
+ } catch (err) {
23
+ throw new SigningError(String(err))
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Hash message and verify signature with public key
29
+ */
30
+ export function hashAndVerify (key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean | Promise<boolean> {
31
+ const p = sha256.digest(msg instanceof Uint8Array ? msg : msg.subarray())
32
+
33
+ if (isPromise(p)) {
34
+ return p.then(({ digest }) => secp.verify(sig, digest, key))
35
+ .catch(err => {
36
+ throw new VerificationError(String(err))
37
+ })
38
+ }
39
+
40
+ try {
41
+ return secp.verify(sig, p.digest, key)
42
+ } catch (err) {
43
+ throw new VerificationError(String(err))
44
+ }
45
+ }
@@ -0,0 +1,51 @@
1
+ import crypto from 'node:crypto'
2
+ import { secp256k1 as secp } from '@noble/curves/secp256k1'
3
+ import { SigningError, VerificationError } from '../../errors.js'
4
+ import type { Uint8ArrayList } from 'uint8arraylist'
5
+
6
+ /**
7
+ * Hash and sign message with private key
8
+ */
9
+ export function hashAndSign (key: Uint8Array, msg: Uint8Array | Uint8ArrayList): Uint8Array {
10
+ const hash = crypto.createHash('sha256')
11
+
12
+ if (msg instanceof Uint8Array) {
13
+ hash.update(msg)
14
+ } else {
15
+ for (const buf of msg) {
16
+ hash.update(buf)
17
+ }
18
+ }
19
+
20
+ const digest = hash.digest()
21
+
22
+ try {
23
+ const signature = secp.sign(digest, key)
24
+ return signature.toDERRawBytes()
25
+ } catch (err) {
26
+ throw new SigningError(String(err))
27
+ }
28
+ }
29
+
30
+ /**
31
+ * Hash message and verify signature with public key
32
+ */
33
+ export function hashAndVerify (key: Uint8Array, sig: Uint8Array, msg: Uint8Array | Uint8ArrayList): boolean {
34
+ const hash = crypto.createHash('sha256')
35
+
36
+ if (msg instanceof Uint8Array) {
37
+ hash.update(msg)
38
+ } else {
39
+ for (const buf of msg) {
40
+ hash.update(buf)
41
+ }
42
+ }
43
+
44
+ const digest = hash.digest()
45
+
46
+ try {
47
+ return secp.verify(sig, digest, key)
48
+ } catch (err) {
49
+ throw new VerificationError(String(err))
50
+ }
51
+ }
@@ -0,0 +1,68 @@
1
+ import { base58btc } from 'multiformats/bases/base58'
2
+ import { CID } from 'multiformats/cid'
3
+ import { identity } from 'multiformats/hashes/identity'
4
+ import { equals as uint8ArrayEquals } from 'uint8arrays/equals'
5
+ import { publicKeyToProtobuf } from '../index.js'
6
+ import { validateSecp256k1PublicKey, compressSecp256k1PublicKey, computeSecp256k1PublicKey, validateSecp256k1PrivateKey } from './utils.js'
7
+ import { hashAndVerify, hashAndSign } from './index.js'
8
+ import type { Secp256k1PublicKey as Secp256k1PublicKeyInterface, Secp256k1PrivateKey as Secp256k1PrivateKeyInterface } from '@libp2p/interface'
9
+ import type { Digest } from 'multiformats/hashes/digest'
10
+ import type { Uint8ArrayList } from 'uint8arraylist'
11
+
12
+ export class Secp256k1PublicKey implements Secp256k1PublicKeyInterface {
13
+ public readonly type = 'secp256k1'
14
+ public readonly raw: Uint8Array
15
+ public readonly _key: Uint8Array
16
+
17
+ constructor (key: Uint8Array) {
18
+ this._key = validateSecp256k1PublicKey(key)
19
+ this.raw = compressSecp256k1PublicKey(this._key)
20
+ }
21
+
22
+ toMultihash (): Digest<0x0, number> {
23
+ return identity.digest(publicKeyToProtobuf(this))
24
+ }
25
+
26
+ toCID (): CID<unknown, 114, 0x0, 1> {
27
+ return CID.createV1(114, this.toMultihash())
28
+ }
29
+
30
+ toString (): string {
31
+ return base58btc.encode(this.toMultihash().bytes).substring(1)
32
+ }
33
+
34
+ equals (key: any): boolean {
35
+ if (key == null || !(key.raw instanceof Uint8Array)) {
36
+ return false
37
+ }
38
+
39
+ return uint8ArrayEquals(this.raw, key.raw)
40
+ }
41
+
42
+ verify (data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean {
43
+ return hashAndVerify(this._key, sig, data)
44
+ }
45
+ }
46
+
47
+ export class Secp256k1PrivateKey implements Secp256k1PrivateKeyInterface {
48
+ public readonly type = 'secp256k1'
49
+ public readonly raw: Uint8Array
50
+ public readonly publicKey: Secp256k1PublicKey
51
+
52
+ constructor (key: Uint8Array, publicKey?: Uint8Array) {
53
+ this.raw = validateSecp256k1PrivateKey(key)
54
+ this.publicKey = new Secp256k1PublicKey(publicKey ?? computeSecp256k1PublicKey(key))
55
+ }
56
+
57
+ equals (key?: any): boolean {
58
+ if (key == null || !(key.raw instanceof Uint8Array)) {
59
+ return false
60
+ }
61
+
62
+ return uint8ArrayEquals(this.raw, key.raw)
63
+ }
64
+
65
+ sign (message: Uint8Array | Uint8ArrayList): Uint8Array | Promise<Uint8Array> {
66
+ return hashAndSign(this.raw, message)
67
+ }
68
+ }
@@ -0,0 +1,63 @@
1
+ import { InvalidPrivateKeyError, InvalidPublicKeyError } from '@libp2p/interface'
2
+ import { secp256k1 as secp } from '@noble/curves/secp256k1'
3
+ import { Secp256k1PublicKey as Secp256k1PublicKeyClass, Secp256k1PrivateKey as Secp256k1PrivateKeyClass } from './secp256k1.js'
4
+ import type { Secp256k1PublicKey, Secp256k1PrivateKey } from '@libp2p/interface'
5
+
6
+ const PRIVATE_KEY_BYTE_LENGTH = 32
7
+
8
+ export { PRIVATE_KEY_BYTE_LENGTH as privateKeyLength }
9
+
10
+ export function unmarshalSecp256k1PrivateKey (bytes: Uint8Array): Secp256k1PrivateKey {
11
+ return new Secp256k1PrivateKeyClass(bytes)
12
+ }
13
+
14
+ export function unmarshalSecp256k1PublicKey (bytes: Uint8Array): Secp256k1PublicKey {
15
+ return new Secp256k1PublicKeyClass(bytes)
16
+ }
17
+
18
+ export async function generateSecp256k1KeyPair (): Promise<Secp256k1PrivateKey> {
19
+ const privateKeyBytes = generateSecp256k1PrivateKey()
20
+ return new Secp256k1PrivateKeyClass(privateKeyBytes)
21
+ }
22
+
23
+ export function compressSecp256k1PublicKey (key: Uint8Array): Uint8Array {
24
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(true)
25
+ return point
26
+ }
27
+
28
+ export function decompressSecp256k1PublicKey (key: Uint8Array): Uint8Array {
29
+ const point = secp.ProjectivePoint.fromHex(key).toRawBytes(false)
30
+ return point
31
+ }
32
+
33
+ export function validateSecp256k1PrivateKey (key: Uint8Array): Uint8Array {
34
+ try {
35
+ secp.getPublicKey(key, true)
36
+
37
+ return key
38
+ } catch (err) {
39
+ throw new InvalidPrivateKeyError(String(err))
40
+ }
41
+ }
42
+
43
+ export function validateSecp256k1PublicKey (key: Uint8Array): Uint8Array {
44
+ try {
45
+ secp.ProjectivePoint.fromHex(key)
46
+
47
+ return key
48
+ } catch (err) {
49
+ throw new InvalidPublicKeyError(String(err))
50
+ }
51
+ }
52
+
53
+ export function computeSecp256k1PublicKey (privateKey: Uint8Array): Uint8Array {
54
+ try {
55
+ return secp.getPublicKey(privateKey, true)
56
+ } catch (err) {
57
+ throw new InvalidPrivateKeyError(String(err))
58
+ }
59
+ }
60
+
61
+ export function generateSecp256k1PrivateKey (): Uint8Array {
62
+ return secp.utils.randomPrivateKey()
63
+ }
package/src/pbkdf2.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface'
1
+ import { InvalidParametersError } from '@libp2p/interface'
2
2
  import { pbkdf2 as pbkdf2Sync } from '@noble/hashes/pbkdf2'
3
3
  import { sha1 } from '@noble/hashes/sha1'
4
4
  import { sha256 } from '@noble/hashes/sha256'
@@ -24,7 +24,7 @@ const hashName = {
24
24
  export default function pbkdf2 (password: string, salt: string | Uint8Array, iterations: number, keySize: number, hash: string): string {
25
25
  if (hash !== 'sha1' && hash !== 'sha2-256' && hash !== 'sha2-512') {
26
26
  const types = Object.keys(hashName).join(' / ')
27
- throw new CodeError(`Hash '${hash}' is unknown or not supported. Must be ${types}`, 'ERR_UNSUPPORTED_HASH_TYPE')
27
+ throw new InvalidParametersError(`Hash '${hash}' is unknown or not supported. Must be ${types}`)
28
28
  }
29
29
 
30
30
  const hasher = hashName[hash]
@@ -1,4 +1,4 @@
1
- import { CodeError } from '@libp2p/interface'
1
+ import { InvalidParametersError } from '@libp2p/interface'
2
2
  import { randomBytes as randB } from '@noble/hashes/utils'
3
3
 
4
4
  /**
@@ -6,7 +6,7 @@ import { randomBytes as randB } from '@noble/hashes/utils'
6
6
  */
7
7
  export default function randomBytes (length: number): Uint8Array {
8
8
  if (isNaN(length) || length <= 0) {
9
- throw new CodeError('random bytes length must be a Number bigger than 0', 'ERR_INVALID_LENGTH')
9
+ throw new InvalidParametersError('random bytes length must be a Number bigger than 0')
10
10
  }
11
11
  return randB(length)
12
12
  }
@@ -0,0 +1,3 @@
1
+ import webcrypto from './webcrypto.js'
2
+
3
+ export default webcrypto
@@ -0,0 +1,23 @@
1
+ /* eslint-env browser */
2
+
3
+ import { WebCryptoMissingError } from '../errors.js'
4
+
5
+ // Check native crypto exists and is enabled (In insecure context `self.crypto`
6
+ // exists but `self.crypto.subtle` does not).
7
+ export default {
8
+ get (win = globalThis) {
9
+ const nativeCrypto = win.crypto
10
+
11
+ if (nativeCrypto?.subtle == null) {
12
+ throw new WebCryptoMissingError(
13
+ 'Missing Web Crypto API. ' +
14
+ 'The most likely cause of this error is that this page is being accessed ' +
15
+ 'from an insecure context (i.e. not HTTPS). For more information and ' +
16
+ 'possible resolutions see ' +
17
+ 'https://github.com/libp2p/js-libp2p/blob/main/packages/crypto/README.md#web-crypto-api'
18
+ )
19
+ }
20
+
21
+ return nativeCrypto
22
+ }
23
+ }
@@ -1,3 +0,0 @@
1
- import type { ECDHKey } from './interface.js';
2
- export declare function generateEphmeralKeyPair(curve: string): Promise<ECDHKey>;
3
- //# sourceMappingURL=ecdh-browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ecdh-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/ecdh-browser.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,OAAO,EAA0D,MAAM,gBAAgB,CAAA;AAWrG,wBAAsB,uBAAuB,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAkE9E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ecdh-browser.js","sourceRoot":"","sources":["../../../src/keys/ecdh-browser.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ecdh.d.ts","sourceRoot":"","sources":["../../../src/keys/ecdh.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAe,MAAM,gBAAgB,CAAA;AAW1D;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAmB9E"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ecdh.js","sourceRoot":"","sources":["../../../src/keys/ecdh.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AAG7C,MAAM,MAAM,GAAG;IACb,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,WAAW;IACpB,OAAO,EAAE,WAAW;CACrB,CAAA;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AACtC,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAEpC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAE,KAAa;IAC1D,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;QAChE,MAAM,IAAI,SAAS,CAAC,kBAAkB,KAAK,aAAa,KAAK,EAAE,EAAE,mBAAmB,CAAC,CAAA;IACvF,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC7C,IAAI,CAAC,YAAY,EAAE,CAAA;IAEnB,OAAO;QACL,GAAG,EAAE,IAAI,CAAC,YAAY,EAAgB;QAEtC,KAAK,CAAC,YAAY,CAAE,QAAoB,EAAE,YAA0B;YAClE,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;gBACzB,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;YAC1C,CAAC;YAED,OAAO,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAA;QACrC,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ed25519-browser.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,QAAA,MAAM,sBAAsB,KAAK,CAAA;AACjC,QAAA,MAAM,uBAAuB,KAAK,CAAA;AAGlC,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,wBAAgB,WAAW,IAAK,iBAAiB,CAYhD;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAE,IAAI,EAAE,UAAU,GAAG,iBAAiB,CAiBxE;AAED,wBAAgB,WAAW,CAAE,UAAU,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU,CAIjG;AAED,wBAAgB,aAAa,CAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAEhH"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ed25519-browser.js","sourceRoot":"","sources":["../../../src/keys/ed25519-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,EAAE,EAAE,MAAM,uBAAuB,CAAA;AAIrD,MAAM,sBAAsB,GAAG,EAAE,CAAA;AACjC,MAAM,uBAAuB,GAAG,EAAE,CAAA,CAAC,gGAAgG;AACnI,MAAM,gBAAgB,GAAG,EAAE,CAAA;AAE3B,OAAO,EAAE,sBAAsB,IAAI,eAAe,EAAE,CAAA;AACpD,OAAO,EAAE,uBAAuB,IAAI,gBAAgB,EAAE,CAAA;AAEtD,MAAM,UAAU,WAAW;IACzB,oCAAoC;IACpC,MAAM,aAAa,GAAG,EAAE,CAAC,KAAK,CAAC,gBAAgB,EAAE,CAAA;IACjD,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEhD,iDAAiD;IACjD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IAEvD,OAAO;QACL,UAAU;QACV,SAAS;KACV,CAAA;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAE,IAAgB;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,gBAAgB,EAAE,CAAC;QACrC,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAA;IAC3D,CAAC;SAAM,IAAI,CAAC,CAAC,IAAI,YAAY,UAAU,CAAC,EAAE,CAAC;QACzC,MAAM,IAAI,SAAS,CAAC,iDAAiD,CAAC,CAAA;IACxE,CAAC;IAED,2EAA2E;IAC3E,MAAM,aAAa,GAAG,IAAI,CAAA;IAC1B,MAAM,SAAS,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;IAEhD,MAAM,UAAU,GAAG,UAAU,CAAC,aAAa,EAAE,SAAS,CAAC,CAAA;IAEvD,OAAO;QACL,UAAU;QACV,SAAS;KACV,CAAA;AACH,CAAC;AAED,MAAM,UAAU,WAAW,CAAE,UAAsB,EAAE,GAAgC;IACnF,MAAM,aAAa,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,gBAAgB,CAAC,CAAA;IAE9D,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,aAAa,CAAC,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,aAAa,CAAE,SAAqB,EAAE,GAAe,EAAE,GAAgC;IACrG,OAAO,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,YAAY,UAAU,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE,SAAS,CAAC,CAAA;AACpF,CAAC;AAED,SAAS,UAAU,CAAE,aAAyB,EAAE,SAAqB;IACnE,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,uBAAuB,CAAC,CAAA;IAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,gBAAgB,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC,CAAA;QAChC,UAAU,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IACjD,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC"}
@@ -1,42 +0,0 @@
1
- import type { PublicKey, PrivateKey } from '@libp2p/interface';
2
- import type { Multibase } from 'multiformats';
3
- import type { Uint8ArrayList } from 'uint8arraylist';
4
- export declare class Ed25519PublicKey implements PublicKey<'Ed25519'> {
5
- private readonly _key;
6
- constructor(key: Uint8Array);
7
- verify(data: Uint8Array | Uint8ArrayList, sig: Uint8Array): boolean;
8
- marshal(): Uint8Array;
9
- get bytes(): Uint8Array;
10
- equals(key: any): boolean;
11
- hash(): Uint8Array | Promise<Uint8Array>;
12
- }
13
- export declare class Ed25519PrivateKey implements PrivateKey<'Ed25519'> {
14
- private readonly _key;
15
- private readonly _publicKey;
16
- constructor(key: Uint8Array, publicKey: Uint8Array);
17
- sign(message: Uint8Array | Uint8ArrayList): Uint8Array;
18
- get public(): Ed25519PublicKey;
19
- marshal(): Uint8Array;
20
- get bytes(): Uint8Array;
21
- equals(key: any): boolean;
22
- hash(): Promise<Uint8Array>;
23
- /**
24
- * Gets the ID of the key.
25
- *
26
- * The key id is the base58 encoding of the identity multihash containing its public key.
27
- * The public key is a protobuf encoding containing a type and the DER encoding
28
- * of the PKCS SubjectPublicKeyInfo.
29
- *
30
- * @returns {Promise<string>}
31
- */
32
- id(): Promise<string>;
33
- /**
34
- * Exports the key into a password protected `format`
35
- */
36
- export(password: string, format?: string): Promise<Multibase<'m'>>;
37
- }
38
- export declare function unmarshalEd25519PrivateKey(bytes: Uint8Array): Ed25519PrivateKey;
39
- export declare function unmarshalEd25519PublicKey(bytes: Uint8Array): Ed25519PublicKey;
40
- export declare function generateKeyPair(): Promise<Ed25519PrivateKey>;
41
- export declare function generateKeyPairFromSeed(seed: Uint8Array): Promise<Ed25519PrivateKey>;
42
- //# sourceMappingURL=ed25519-class.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ed25519-class.d.ts","sourceRoot":"","sources":["../../../src/keys/ed25519-class.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAEpD,qBAAa,gBAAiB,YAAW,SAAS,CAAC,SAAS,CAAC;IAC3D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;gBAEpB,GAAG,EAAE,UAAU;IAI5B,MAAM,CAAE,IAAI,EAAE,UAAU,GAAG,cAAc,EAAE,GAAG,EAAE,UAAU,GAAG,OAAO;IAIpE,OAAO,IAAK,UAAU;IAItB,IAAI,KAAK,IAAK,UAAU,CAKvB;IAED,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAI1B,IAAI,IAAK,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;CAS1C;AAED,qBAAa,iBAAkB,YAAW,UAAU,CAAC,SAAS,CAAC;IAC7D,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAY;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAY;gBAI1B,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU;IAKnD,IAAI,CAAE,OAAO,EAAE,UAAU,GAAG,cAAc,GAAG,UAAU;IAIvD,IAAI,MAAM,IAAK,gBAAgB,CAE9B;IAED,OAAO,IAAK,UAAU;IAItB,IAAI,KAAK,IAAK,UAAU,CAKvB;IAED,MAAM,CAAE,GAAG,EAAE,GAAG,GAAG,OAAO;IAIpB,IAAI,IAAK,OAAO,CAAC,UAAU,CAAC;IAalC;;;;;;;;OAQG;IACG,EAAE,IAAK,OAAO,CAAC,MAAM,CAAC;IAK5B;;OAEG;IACG,MAAM,CAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,SAAe,GAAG,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;CAOhF;AAED,wBAAgB,0BAA0B,CAAE,KAAK,EAAE,UAAU,GAAG,iBAAiB,CAahF;AAED,wBAAgB,yBAAyB,CAAE,KAAK,EAAE,UAAU,GAAG,gBAAgB,CAG9E;AAED,wBAAsB,eAAe,IAAK,OAAO,CAAC,iBAAiB,CAAC,CAGnE;AAED,wBAAsB,uBAAuB,CAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAG3F"}