@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.
- package/dist/index.min.js +4 -5
- package/dist/src/ciphers/aes-gcm.browser.js +1 -1
- package/dist/src/ciphers/aes-gcm.browser.js.map +1 -1
- package/dist/src/ciphers/index.d.ts +2 -0
- package/dist/src/ciphers/index.d.ts.map +1 -0
- package/dist/src/ciphers/index.js +2 -0
- package/dist/src/ciphers/index.js.map +1 -0
- package/dist/src/errors.d.ts +19 -0
- package/dist/src/errors.d.ts.map +1 -0
- package/dist/src/errors.js +28 -0
- package/dist/src/errors.js.map +1 -0
- package/dist/src/hmac/{index-browser.d.ts → index.browser.d.ts} +1 -1
- package/dist/src/hmac/{index-browser.d.ts.map → index.browser.d.ts.map} +1 -1
- package/dist/src/hmac/{index-browser.js → index.browser.js} +2 -2
- package/dist/src/hmac/{index-browser.js.map → index.browser.js.map} +1 -1
- package/dist/src/keys/ecdh/index.browser.d.ts +4 -0
- package/dist/src/keys/ecdh/index.browser.d.ts.map +1 -0
- package/dist/src/keys/{ecdh-browser.js → ecdh/index.browser.js} +13 -11
- package/dist/src/keys/ecdh/index.browser.js.map +1 -0
- package/dist/src/keys/{ecdh.d.ts → ecdh/index.d.ts} +4 -3
- package/dist/src/keys/ecdh/index.d.ts.map +1 -0
- package/dist/src/keys/{ecdh.js → ecdh/index.js} +4 -4
- package/dist/src/keys/ecdh/index.js.map +1 -0
- package/dist/src/keys/ed25519/ed25519.d.ts +23 -0
- package/dist/src/keys/ed25519/ed25519.d.ts.map +1 -0
- package/dist/src/keys/ed25519/ed25519.js +54 -0
- package/dist/src/keys/ed25519/ed25519.js.map +1 -0
- package/dist/src/keys/{ed25519-browser.d.ts → ed25519/index.browser.d.ts} +2 -2
- package/dist/src/keys/ed25519/index.browser.d.ts.map +1 -0
- package/dist/src/keys/{ed25519-browser.js → ed25519/index.browser.js} +1 -1
- package/dist/src/keys/ed25519/index.browser.js.map +1 -0
- package/dist/src/keys/{ed25519.d.ts → ed25519/index.d.ts} +2 -2
- package/dist/src/keys/ed25519/index.d.ts.map +1 -0
- package/dist/src/keys/{ed25519.js → ed25519/index.js} +1 -1
- package/dist/src/keys/ed25519/index.js.map +1 -0
- package/dist/src/keys/ed25519/utils.d.ts +7 -0
- package/dist/src/keys/ed25519/utils.d.ts.map +1 -0
- package/dist/src/keys/ed25519/utils.js +36 -0
- package/dist/src/keys/ed25519/utils.js.map +1 -0
- package/dist/src/keys/ephemeral-keys.d.ts +2 -2
- package/dist/src/keys/ephemeral-keys.d.ts.map +1 -1
- package/dist/src/keys/ephemeral-keys.js +2 -2
- package/dist/src/keys/ephemeral-keys.js.map +1 -1
- package/dist/src/keys/index.d.ts +33 -36
- package/dist/src/keys/index.d.ts.map +1 -1
- package/dist/src/keys/index.js +93 -83
- package/dist/src/keys/index.js.map +1 -1
- package/dist/src/keys/key-stretcher.d.ts.map +1 -1
- package/dist/src/keys/key-stretcher.js +9 -7
- package/dist/src/keys/key-stretcher.js.map +1 -1
- package/dist/src/keys/keys.d.ts +4 -4
- package/dist/src/keys/keys.d.ts.map +1 -1
- package/dist/src/keys/keys.js +21 -15
- package/dist/src/keys/keys.js.map +1 -1
- package/dist/src/keys/rsa/index.browser.d.ts +11 -0
- package/dist/src/keys/rsa/index.browser.d.ts.map +1 -0
- package/dist/src/keys/{rsa-browser.js → rsa/index.browser.js} +10 -39
- package/dist/src/keys/rsa/index.browser.js.map +1 -0
- package/dist/src/keys/rsa/index.d.ts +11 -0
- package/dist/src/keys/rsa/index.d.ts.map +1 -0
- package/dist/src/keys/{rsa.js → rsa/index.js} +8 -22
- package/dist/src/keys/rsa/index.js.map +1 -0
- package/dist/src/keys/rsa/rsa.d.ts +28 -0
- package/dist/src/keys/rsa/rsa.d.ts.map +1 -0
- package/dist/src/keys/rsa/rsa.js +65 -0
- package/dist/src/keys/rsa/rsa.js.map +1 -0
- package/dist/src/keys/rsa/utils.d.ts +34 -0
- package/dist/src/keys/rsa/utils.d.ts.map +1 -0
- package/dist/src/keys/rsa/utils.js +193 -0
- package/dist/src/keys/rsa/utils.js.map +1 -0
- package/dist/src/keys/secp256k1/index.browser.d.ts +10 -0
- package/dist/src/keys/secp256k1/index.browser.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/index.browser.js +41 -0
- package/dist/src/keys/secp256k1/index.browser.js.map +1 -0
- package/dist/src/keys/secp256k1/index.d.ts +10 -0
- package/dist/src/keys/secp256k1/index.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/index.js +47 -0
- package/dist/src/keys/secp256k1/index.js.map +1 -0
- package/dist/src/keys/secp256k1/secp256k1.d.ts +24 -0
- package/dist/src/keys/secp256k1/secp256k1.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/secp256k1.js +53 -0
- package/dist/src/keys/secp256k1/secp256k1.js.map +1 -0
- package/dist/src/keys/secp256k1/utils.d.ts +13 -0
- package/dist/src/keys/secp256k1/utils.d.ts.map +1 -0
- package/dist/src/keys/secp256k1/utils.js +53 -0
- package/dist/src/keys/secp256k1/utils.js.map +1 -0
- package/dist/src/pbkdf2.js +2 -2
- package/dist/src/pbkdf2.js.map +1 -1
- package/dist/src/random-bytes.js +2 -2
- package/dist/src/random-bytes.js.map +1 -1
- package/dist/src/webcrypto/index.d.ts +3 -0
- package/dist/src/webcrypto/index.d.ts.map +1 -0
- package/dist/src/webcrypto/index.js +3 -0
- package/dist/src/webcrypto/index.js.map +1 -0
- package/dist/src/{webcrypto-browser.d.ts → webcrypto/webcrypto.browser.d.ts} +1 -1
- package/dist/src/webcrypto/webcrypto.browser.d.ts.map +1 -0
- package/dist/src/{webcrypto-browser.js → webcrypto/webcrypto.browser.js} +4 -3
- package/dist/src/webcrypto/webcrypto.browser.js.map +1 -0
- package/dist/src/webcrypto/webcrypto.d.ts.map +1 -0
- package/dist/src/webcrypto/webcrypto.js.map +1 -0
- package/package.json +16 -8
- package/src/ciphers/aes-gcm.browser.ts +1 -1
- package/src/ciphers/index.ts +1 -0
- package/src/errors.ts +29 -0
- package/src/hmac/{index-browser.ts → index.browser.ts} +1 -1
- package/src/keys/{ecdh-browser.ts → ecdh/index.browser.ts} +16 -13
- package/src/keys/{ecdh.ts → ecdh/index.ts} +6 -4
- package/src/keys/ed25519/ed25519.ts +68 -0
- package/src/keys/{ed25519-browser.ts → ed25519/index.browser.ts} +1 -1
- package/src/keys/{ed25519.ts → ed25519/index.ts} +1 -1
- package/src/keys/ed25519/utils.ts +42 -0
- package/src/keys/ephemeral-keys.ts +2 -2
- package/src/keys/index.ts +110 -92
- package/src/keys/key-stretcher.ts +15 -8
- package/src/keys/keys.proto +1 -1
- package/src/keys/keys.ts +21 -16
- package/src/keys/{rsa-browser.ts → rsa/index.browser.ts} +10 -56
- package/src/keys/{rsa.ts → rsa/index.ts} +8 -23
- package/src/keys/rsa/rsa.ts +83 -0
- package/src/keys/rsa/utils.ts +235 -0
- package/src/keys/secp256k1/index.browser.ts +45 -0
- package/src/keys/secp256k1/index.ts +51 -0
- package/src/keys/secp256k1/secp256k1.ts +68 -0
- package/src/keys/secp256k1/utils.ts +63 -0
- package/src/pbkdf2.ts +2 -2
- package/src/random-bytes.ts +2 -2
- package/src/webcrypto/index.ts +3 -0
- package/src/webcrypto/webcrypto.browser.ts +23 -0
- package/dist/src/keys/ecdh-browser.d.ts +0 -3
- package/dist/src/keys/ecdh-browser.d.ts.map +0 -1
- package/dist/src/keys/ecdh-browser.js.map +0 -1
- package/dist/src/keys/ecdh.d.ts.map +0 -1
- package/dist/src/keys/ecdh.js.map +0 -1
- package/dist/src/keys/ed25519-browser.d.ts.map +0 -1
- package/dist/src/keys/ed25519-browser.js.map +0 -1
- package/dist/src/keys/ed25519-class.d.ts +0 -42
- package/dist/src/keys/ed25519-class.d.ts.map +0 -1
- package/dist/src/keys/ed25519-class.js +0 -133
- package/dist/src/keys/ed25519-class.js.map +0 -1
- package/dist/src/keys/ed25519.d.ts.map +0 -1
- package/dist/src/keys/ed25519.js.map +0 -1
- package/dist/src/keys/exporter.d.ts +0 -8
- package/dist/src/keys/exporter.d.ts.map +0 -1
- package/dist/src/keys/exporter.js +0 -13
- package/dist/src/keys/exporter.js.map +0 -1
- package/dist/src/keys/importer.d.ts +0 -7
- package/dist/src/keys/importer.d.ts.map +0 -1
- package/dist/src/keys/importer.js +0 -13
- package/dist/src/keys/importer.js.map +0 -1
- package/dist/src/keys/rsa-browser.d.ts +0 -12
- package/dist/src/keys/rsa-browser.d.ts.map +0 -1
- package/dist/src/keys/rsa-browser.js.map +0 -1
- package/dist/src/keys/rsa-class.d.ts +0 -46
- package/dist/src/keys/rsa-class.d.ts.map +0 -1
- package/dist/src/keys/rsa-class.js +0 -135
- package/dist/src/keys/rsa-class.js.map +0 -1
- package/dist/src/keys/rsa-utils.d.ts +0 -20
- package/dist/src/keys/rsa-utils.d.ts.map +0 -1
- package/dist/src/keys/rsa-utils.js +0 -330
- package/dist/src/keys/rsa-utils.js.map +0 -1
- package/dist/src/keys/rsa.d.ts +0 -12
- package/dist/src/keys/rsa.d.ts.map +0 -1
- package/dist/src/keys/rsa.js.map +0 -1
- package/dist/src/keys/secp256k1-browser.d.ts +0 -18
- package/dist/src/keys/secp256k1-browser.d.ts.map +0 -1
- package/dist/src/keys/secp256k1-browser.js +0 -78
- package/dist/src/keys/secp256k1-browser.js.map +0 -1
- package/dist/src/keys/secp256k1-class.d.ts +0 -39
- package/dist/src/keys/secp256k1-class.d.ts.map +0 -1
- package/dist/src/keys/secp256k1-class.js +0 -109
- package/dist/src/keys/secp256k1-class.js.map +0 -1
- package/dist/src/keys/secp256k1.d.ts +0 -18
- package/dist/src/keys/secp256k1.d.ts.map +0 -1
- package/dist/src/keys/secp256k1.js +0 -84
- package/dist/src/keys/secp256k1.js.map +0 -1
- package/dist/src/webcrypto-browser.d.ts.map +0 -1
- package/dist/src/webcrypto-browser.js.map +0 -1
- package/dist/src/webcrypto.d.ts.map +0 -1
- package/dist/src/webcrypto.js.map +0 -1
- package/dist/typedoc-urls.json +0 -40
- package/src/keys/ed25519-class.ts +0 -160
- package/src/keys/exporter.ts +0 -14
- package/src/keys/importer.ts +0 -13
- package/src/keys/rsa-class.ts +0 -172
- package/src/keys/rsa-utils.ts +0 -408
- package/src/keys/secp256k1-browser.ts +0 -87
- package/src/keys/secp256k1-class.ts +0 -133
- package/src/keys/secp256k1.ts +0 -93
- package/src/webcrypto-browser.ts +0 -24
- /package/dist/src/{webcrypto.d.ts → webcrypto/webcrypto.d.ts} +0 -0
- /package/dist/src/{webcrypto.js → webcrypto/webcrypto.js} +0 -0
- /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 {
|
|
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
|
|
27
|
+
throw new InvalidParametersError(`Hash '${hash}' is unknown or not supported. Must be ${types}`)
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
const hasher = hashName[hash]
|
package/src/random-bytes.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
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
|
|
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,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 +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"}
|