@dxos/crypto 0.8.4-main.f9ba587 → 0.8.4-main.fcc0d83b33
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/lib/browser/index.mjs +26 -76
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +19 -70
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/index.d.ts +3 -3
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/keys.d.ts +1 -1
- package/dist/types/src/keys.d.ts.map +1 -1
- package/dist/types/src/validator.d.ts +1 -1
- package/dist/types/src/validator.d.ts.map +1 -1
- package/dist/types/src/verify.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +16 -16
- package/src/index.ts +3 -3
- package/src/keys.test.ts +1 -1
- package/src/keys.ts +2 -3
- package/src/uuid.ts +1 -1
- package/src/validator.ts +1 -2
- package/src/verify.ts +6 -4
- package/vendor/subtle.d.ts +7 -0
- package/dist/types/src/browser/subtle.d.ts +0 -3
- package/dist/types/src/browser/subtle.d.ts.map +0 -1
- package/dist/types/src/subtle.d.ts +0 -4
- package/dist/types/src/subtle.d.ts.map +0 -1
- package/hypercore-crypto-stub.mjs +0 -11
- package/src/shims.d.ts +0 -6
- /package/{src/browser/subtle.ts → vendor/subtle-browser.mjs} +0 -0
- /package/{src/subtle.ts → vendor/subtle-node.mjs} +0 -0
|
@@ -1,95 +1,52 @@
|
|
|
1
1
|
import "@dxos/node-std/globals";
|
|
2
2
|
|
|
3
|
+
// src/index.ts
|
|
4
|
+
export * from "#subtle";
|
|
5
|
+
|
|
3
6
|
// src/keys.ts
|
|
4
7
|
import { invariant } from "@dxos/invariant";
|
|
5
|
-
import {
|
|
6
|
-
import
|
|
7
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/crypto/src/keys.ts";
|
|
8
|
+
import { PUBLIC_KEY_LENGTH, PublicKey, SECRET_KEY_LENGTH } from "@dxos/keys";
|
|
9
|
+
import crypto from "@dxos/vendor-hypercore/hypercore-crypto";
|
|
8
10
|
var SIGNATURE_LENGTH = 64;
|
|
9
11
|
var createId = () => PublicKey.stringify(randomBytes(32));
|
|
10
12
|
var createKeyPair = (seed) => {
|
|
11
13
|
if (seed) {
|
|
12
|
-
invariant(seed.length >= 32, "Seedphrase too sort. Expecting length of 32."
|
|
13
|
-
|
|
14
|
-
L: 20,
|
|
15
|
-
S: void 0,
|
|
16
|
-
A: [
|
|
17
|
-
"seed.length >= 32",
|
|
18
|
-
"'Seedphrase too sort. Expecting length of 32.'"
|
|
19
|
-
]
|
|
20
|
-
});
|
|
21
|
-
return crypto2.keyPair(seed.slice(0, 32));
|
|
14
|
+
invariant(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.");
|
|
15
|
+
return crypto.keyPair(seed.slice(0, 32));
|
|
22
16
|
}
|
|
23
|
-
return
|
|
17
|
+
return crypto.keyPair();
|
|
24
18
|
};
|
|
25
|
-
var validateKeyPair = (publicKey, secretKey) =>
|
|
19
|
+
var validateKeyPair = (publicKey, secretKey) => crypto.validateKeyPair({
|
|
26
20
|
publicKey: publicKey.asBuffer(),
|
|
27
21
|
secretKey
|
|
28
22
|
});
|
|
29
|
-
var discoveryKey = (key) =>
|
|
30
|
-
var randomBytes = (length = 32) =>
|
|
23
|
+
var discoveryKey = (key) => crypto.discoveryKey(PublicKey.from(key).asBuffer().slice(1));
|
|
24
|
+
var randomBytes = (length = 32) => crypto.randomBytes(length);
|
|
31
25
|
var sign = (message, secretKey) => {
|
|
32
|
-
invariant(Buffer.isBuffer(message)
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
S: void 0,
|
|
36
|
-
A: [
|
|
37
|
-
"Buffer.isBuffer(message)",
|
|
38
|
-
""
|
|
39
|
-
]
|
|
40
|
-
});
|
|
41
|
-
invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH, void 0, {
|
|
42
|
-
F: __dxlog_file,
|
|
43
|
-
L: 51,
|
|
44
|
-
S: void 0,
|
|
45
|
-
A: [
|
|
46
|
-
"Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH",
|
|
47
|
-
""
|
|
48
|
-
]
|
|
49
|
-
});
|
|
50
|
-
return crypto2.sign(message, secretKey);
|
|
26
|
+
invariant(Buffer.isBuffer(message));
|
|
27
|
+
invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);
|
|
28
|
+
return crypto.sign(message, secretKey);
|
|
51
29
|
};
|
|
52
30
|
var verify = (message, signature, publicKey) => {
|
|
53
|
-
invariant(Buffer.isBuffer(message)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
A: [
|
|
58
|
-
"Buffer.isBuffer(message)",
|
|
59
|
-
""
|
|
60
|
-
]
|
|
61
|
-
});
|
|
62
|
-
invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH, void 0, {
|
|
63
|
-
F: __dxlog_file,
|
|
64
|
-
L: 65,
|
|
65
|
-
S: void 0,
|
|
66
|
-
A: [
|
|
67
|
-
"Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH",
|
|
68
|
-
""
|
|
69
|
-
]
|
|
70
|
-
});
|
|
71
|
-
invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH, void 0, {
|
|
72
|
-
F: __dxlog_file,
|
|
73
|
-
L: 66,
|
|
74
|
-
S: void 0,
|
|
75
|
-
A: [
|
|
76
|
-
"Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH",
|
|
77
|
-
""
|
|
78
|
-
]
|
|
79
|
-
});
|
|
80
|
-
return crypto2.verify(message, signature, publicKey);
|
|
31
|
+
invariant(Buffer.isBuffer(message));
|
|
32
|
+
invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
|
|
33
|
+
invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);
|
|
34
|
+
return crypto.verify(message, signature, publicKey);
|
|
81
35
|
};
|
|
82
36
|
|
|
83
|
-
// src/
|
|
84
|
-
|
|
85
|
-
var
|
|
37
|
+
// src/uuid.ts
|
|
38
|
+
import { webcrypto } from "#subtle";
|
|
39
|
+
var randomUUID = () => {
|
|
40
|
+
return webcrypto.randomUUID();
|
|
41
|
+
};
|
|
86
42
|
|
|
87
43
|
// src/validator.ts
|
|
88
44
|
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
89
|
-
import { verify as verify2 } from "
|
|
45
|
+
import { verify as verify2 } from "@dxos/vendor-hypercore/hypercore-crypto";
|
|
90
46
|
var getSignatureValidator = (publicKey) => (message, signature) => verify2(message, signature, PublicKey2.bufferize(publicKey));
|
|
91
47
|
|
|
92
48
|
// src/verify.ts
|
|
49
|
+
import { subtleCrypto } from "#subtle";
|
|
93
50
|
var verifySignature = async (key, message, signature, algorithm = {
|
|
94
51
|
name: "ECDSA",
|
|
95
52
|
namedCurve: "P-256"
|
|
@@ -107,11 +64,6 @@ var verifySignature = async (key, message, signature, algorithm = {
|
|
|
107
64
|
hash: "SHA-256"
|
|
108
65
|
}, publicKey, signature, message);
|
|
109
66
|
};
|
|
110
|
-
|
|
111
|
-
// src/uuid.ts
|
|
112
|
-
var randomUUID = () => {
|
|
113
|
-
return webcrypto.randomUUID();
|
|
114
|
-
};
|
|
115
67
|
export {
|
|
116
68
|
SIGNATURE_LENGTH,
|
|
117
69
|
createId,
|
|
@@ -121,10 +73,8 @@ export {
|
|
|
121
73
|
randomBytes,
|
|
122
74
|
randomUUID,
|
|
123
75
|
sign,
|
|
124
|
-
subtleCrypto,
|
|
125
76
|
validateKeyPair,
|
|
126
77
|
verify,
|
|
127
|
-
verifySignature
|
|
128
|
-
webcrypto
|
|
78
|
+
verifySignature
|
|
129
79
|
};
|
|
130
80
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PublicKey, type PublicKeyLike,
|
|
5
|
-
"mappings": ";;;AAIA,SAASA,iBAAiB;AAC1B,SAAuBC,WAA+BC,
|
|
6
|
-
"names": ["invariant", "
|
|
3
|
+
"sources": ["../../../src/index.ts", "../../../src/keys.ts", "../../../src/uuid.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from '#subtle';\nexport * from './keys';\nexport type * from './signer';\nexport * from './uuid';\nexport * from './validator';\nexport * from './verify';\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PUBLIC_KEY_LENGTH, PublicKey, type PublicKeyLike, SECRET_KEY_LENGTH } from '@dxos/keys';\nimport crypto from '@dxos/vendor-hypercore/hypercore-crypto';\n\nexport const SIGNATURE_LENGTH = 64;\n\n/**\n * @deprecated\n */\n// TODO(burdon): Remove.\nexport const createId = (): string => PublicKey.stringify(randomBytes(32));\n\nexport const createKeyPair = (seed?: Buffer): KeyPair => {\n if (seed) {\n invariant(seed.length >= 32, 'Seedphrase too sort. Expecting length of 32.');\n return crypto.keyPair(seed.slice(0, 32));\n }\n\n // TODO(burdon): Enable seed for debugging.\n return crypto.keyPair();\n};\n\n// TODO(burdon): Buffer.\nexport const validateKeyPair = (publicKey: PublicKey, secretKey: Buffer) =>\n crypto.validateKeyPair({ publicKey: publicKey.asBuffer(), secretKey });\n\n// TODO(dmaretskyi): Slicing because webcrypto keys are too long.\nexport const discoveryKey = (key: PublicKeyLike): Buffer =>\n crypto.discoveryKey(PublicKey.from(key).asBuffer().slice(1));\n\n/**\n * Return random bytes of length.\n * @param [length=32]\n * @return {Buffer}\n */\nexport const randomBytes = (length = 32): Buffer => crypto.randomBytes(length);\n\n/**\n * Sign the contents of message with secret_key\n * @param {Buffer} message\n * @param {Buffer} secretKey\n * @returns {Buffer} signature\n */\nexport const sign = (message: Buffer, secretKey: Buffer): Buffer => {\n invariant(Buffer.isBuffer(message));\n invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);\n\n return crypto.sign(message, secretKey);\n};\n\n/**\n * Verifies the signature against the message and public_key.\n * @param {Buffer} message\n * @param {Buffer} publicKey\n * @param {Buffer} signature\n * @return {boolean}\n */\nexport const verify = (message: Buffer, signature: Buffer, publicKey: Buffer): boolean => {\n invariant(Buffer.isBuffer(message));\n invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);\n invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);\n\n return crypto.verify(message, signature, publicKey);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { webcrypto } from '#subtle';\n\nexport const randomUUID = (): string => {\n return webcrypto.randomUUID();\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\nimport { verify } from '@dxos/vendor-hypercore/hypercore-crypto';\n\n/**\n * Generator for signature validation function.\n * @param {String} publicKey\n */\nexport const getSignatureValidator = (publicKey: string) => (message: Buffer, signature: Buffer) =>\n verify(message, signature, PublicKey.bufferize(publicKey));\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type PublicKey } from '@dxos/keys';\n\nimport { subtleCrypto } from '#subtle';\n\n/**\n * Verify a signature with the given key.\n */\nexport const verifySignature = async (\n key: PublicKey,\n message: Uint8Array,\n signature: Uint8Array,\n algorithm: { name: string; namedCurve?: string } = { name: 'ECDSA', namedCurve: 'P-256' },\n): Promise<boolean> => {\n let publicKey!: CryptoKey;\n\n try {\n publicKey = await subtleCrypto.importKey('raw', key.asUint8Array() as Uint8Array<ArrayBuffer>, algorithm, true, [\n 'verify',\n ]);\n } catch {\n return false;\n }\n\n return subtleCrypto.verify(\n {\n name: algorithm.name,\n hash: 'SHA-256',\n },\n publicKey,\n signature as Uint8Array<ArrayBuffer>,\n message as Uint8Array<ArrayBuffer>,\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;AAIA,cAAc;;;ACAd,SAASA,iBAAiB;AAC1B,SAAuBC,mBAAmBC,WAA+BC,yBAAyB;AAClG,OAAOC,YAAY;AAEZ,IAAMC,mBAAmB;AAMzB,IAAMC,WAAW,MAAcJ,UAAUK,UAAUC,YAAY,EAAA,CAAA;AAE/D,IAAMC,gBAAgB,CAACC,SAAAA;AAC5B,MAAIA,MAAM;AACRV,cAAUU,KAAKC,UAAU,IAAI,8CAAA;AAC7B,WAAOP,OAAOQ,QAAQF,KAAKG,MAAM,GAAG,EAAA,CAAA;EACtC;AAGA,SAAOT,OAAOQ,QAAO;AACvB;AAGO,IAAME,kBAAkB,CAACC,WAAsBC,cACpDZ,OAAOU,gBAAgB;EAAEC,WAAWA,UAAUE,SAAQ;EAAID;AAAU,CAAA;AAG/D,IAAME,eAAe,CAACC,QAC3Bf,OAAOc,aAAahB,UAAUkB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAML,cAAc,CAACG,SAAS,OAAeP,OAAOI,YAAYG,MAAAA;AAQhE,IAAMU,OAAO,CAACC,SAAiBN,cAAAA;AACpChB,YAAUuB,OAAOC,SAASF,OAAAA,CAAAA;AAC1BtB,YAAUuB,OAAOC,SAASR,SAAAA,KAAcA,UAAUL,WAAWR,iBAAAA;AAE7D,SAAOC,OAAOiB,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMS,SAAS,CAACH,SAAiBI,WAAmBX,cAAAA;AACzDf,YAAUuB,OAAOC,SAASF,OAAAA,CAAAA;AAC1BtB,YAAUuB,OAAOC,SAASE,SAAAA,KAAcA,UAAUf,WAAWN,gBAAAA;AAC7DL,YAAUuB,OAAOC,SAAST,SAAAA,KAAcA,UAAUJ,WAAWV,iBAAAA;AAE7D,SAAOG,OAAOqB,OAAOH,SAASI,WAAWX,SAAAA;AAC3C;;;AC/DA,SAASY,iBAAiB;AAEnB,IAAMC,aAAa,MAAA;AACxB,SAAOD,UAAUC,WAAU;AAC7B;;;ACJA,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,UAAAA,eAAc;AAMhB,IAAMC,wBAAwB,CAACC,cAAsB,CAACC,SAAiBC,cAC5EJ,QAAOG,SAASC,WAAWL,WAAUM,UAAUH,SAAAA,CAAAA;;;ACNjD,SAASI,oBAAoB;AAKtB,IAAMC,kBAAkB,OAC7BC,KACAC,SACAC,WACAC,YAAmD;EAAEC,MAAM;EAASC,YAAY;AAAQ,MAAC;AAEzF,MAAIC;AAEJ,MAAI;AACFA,gBAAY,MAAMR,aAAaS,UAAU,OAAOP,IAAIQ,aAAY,GAA+BL,WAAW,MAAM;MAC9G;KACD;EACH,QAAQ;AACN,WAAO;EACT;AAEA,SAAOL,aAAaW,OAClB;IACEL,MAAMD,UAAUC;IAChBM,MAAM;EACR,GACAJ,WACAJ,WACAD,OAAAA;AAEJ;",
|
|
6
|
+
"names": ["invariant", "PUBLIC_KEY_LENGTH", "PublicKey", "SECRET_KEY_LENGTH", "crypto", "SIGNATURE_LENGTH", "createId", "stringify", "randomBytes", "createKeyPair", "seed", "length", "keyPair", "slice", "validateKeyPair", "publicKey", "secretKey", "asBuffer", "discoveryKey", "key", "from", "sign", "message", "Buffer", "isBuffer", "verify", "signature", "webcrypto", "randomUUID", "PublicKey", "verify", "getSignatureValidator", "publicKey", "message", "signature", "bufferize", "subtleCrypto", "verifySignature", "key", "message", "signature", "algorithm", "name", "namedCurve", "publicKey", "importKey", "asUint8Array", "verify", "hash"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/keys.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/keys.ts":{"bytes":7088,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true}],"format":"esm"},"src/uuid.ts":{"bytes":699,"imports":[{"path":"#subtle","kind":"import-statement","external":true}],"format":"esm"},"src/validator.ts":{"bytes":1439,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true}],"format":"esm"},"src/verify.ts":{"bytes":2573,"imports":[{"path":"#subtle","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":744,"imports":[{"path":"#subtle","kind":"import-statement","external":true},{"path":"src/keys.ts","kind":"import-statement","original":"./keys"},{"path":"src/uuid.ts","kind":"import-statement","original":"./uuid"},{"path":"src/validator.ts","kind":"import-statement","original":"./validator"},{"path":"src/verify.ts","kind":"import-statement","original":"./verify"}],"format":"esm"}},"outputs":{"dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6186},"dist/lib/browser/index.mjs":{"imports":[{"path":"#subtle","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true},{"path":"#subtle","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true},{"path":"#subtle","kind":"import-statement","external":true}],"exports":["SIGNATURE_LENGTH","createId","createKeyPair","discoveryKey","getSignatureValidator","randomBytes","randomUUID","sign","validateKeyPair","verify","verifySignature"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":25},"src/keys.ts":{"bytesInOutput":1272},"src/uuid.ts":{"bytesInOutput":98},"src/validator.ts":{"bytesInOutput":260},"src/verify.ts":{"bytesInOutput":445}},"bytes":2442}}}
|
|
@@ -1,23 +1,17 @@
|
|
|
1
1
|
import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
|
|
2
2
|
|
|
3
|
+
// src/index.ts
|
|
4
|
+
export * from "#subtle";
|
|
5
|
+
|
|
3
6
|
// src/keys.ts
|
|
4
7
|
import { invariant } from "@dxos/invariant";
|
|
5
|
-
import {
|
|
6
|
-
import crypto from "
|
|
7
|
-
var __dxlog_file = "/__w/dxos/dxos/packages/common/crypto/src/keys.ts";
|
|
8
|
+
import { PUBLIC_KEY_LENGTH, PublicKey, SECRET_KEY_LENGTH } from "@dxos/keys";
|
|
9
|
+
import crypto from "@dxos/vendor-hypercore/hypercore-crypto";
|
|
8
10
|
var SIGNATURE_LENGTH = 64;
|
|
9
11
|
var createId = () => PublicKey.stringify(randomBytes(32));
|
|
10
12
|
var createKeyPair = (seed) => {
|
|
11
13
|
if (seed) {
|
|
12
|
-
invariant(seed.length >= 32, "Seedphrase too sort. Expecting length of 32."
|
|
13
|
-
F: __dxlog_file,
|
|
14
|
-
L: 20,
|
|
15
|
-
S: void 0,
|
|
16
|
-
A: [
|
|
17
|
-
"seed.length >= 32",
|
|
18
|
-
"'Seedphrase too sort. Expecting length of 32.'"
|
|
19
|
-
]
|
|
20
|
-
});
|
|
14
|
+
invariant(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.");
|
|
21
15
|
return crypto.keyPair(seed.slice(0, 32));
|
|
22
16
|
}
|
|
23
17
|
return crypto.keyPair();
|
|
@@ -29,68 +23,30 @@ var validateKeyPair = (publicKey, secretKey) => crypto.validateKeyPair({
|
|
|
29
23
|
var discoveryKey = (key) => crypto.discoveryKey(PublicKey.from(key).asBuffer().slice(1));
|
|
30
24
|
var randomBytes = (length = 32) => crypto.randomBytes(length);
|
|
31
25
|
var sign = (message, secretKey) => {
|
|
32
|
-
invariant(Buffer.isBuffer(message)
|
|
33
|
-
|
|
34
|
-
L: 50,
|
|
35
|
-
S: void 0,
|
|
36
|
-
A: [
|
|
37
|
-
"Buffer.isBuffer(message)",
|
|
38
|
-
""
|
|
39
|
-
]
|
|
40
|
-
});
|
|
41
|
-
invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH, void 0, {
|
|
42
|
-
F: __dxlog_file,
|
|
43
|
-
L: 51,
|
|
44
|
-
S: void 0,
|
|
45
|
-
A: [
|
|
46
|
-
"Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH",
|
|
47
|
-
""
|
|
48
|
-
]
|
|
49
|
-
});
|
|
26
|
+
invariant(Buffer.isBuffer(message));
|
|
27
|
+
invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);
|
|
50
28
|
return crypto.sign(message, secretKey);
|
|
51
29
|
};
|
|
52
30
|
var verify = (message, signature, publicKey) => {
|
|
53
|
-
invariant(Buffer.isBuffer(message)
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
S: void 0,
|
|
57
|
-
A: [
|
|
58
|
-
"Buffer.isBuffer(message)",
|
|
59
|
-
""
|
|
60
|
-
]
|
|
61
|
-
});
|
|
62
|
-
invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH, void 0, {
|
|
63
|
-
F: __dxlog_file,
|
|
64
|
-
L: 65,
|
|
65
|
-
S: void 0,
|
|
66
|
-
A: [
|
|
67
|
-
"Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH",
|
|
68
|
-
""
|
|
69
|
-
]
|
|
70
|
-
});
|
|
71
|
-
invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH, void 0, {
|
|
72
|
-
F: __dxlog_file,
|
|
73
|
-
L: 66,
|
|
74
|
-
S: void 0,
|
|
75
|
-
A: [
|
|
76
|
-
"Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH",
|
|
77
|
-
""
|
|
78
|
-
]
|
|
79
|
-
});
|
|
31
|
+
invariant(Buffer.isBuffer(message));
|
|
32
|
+
invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
|
|
33
|
+
invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);
|
|
80
34
|
return crypto.verify(message, signature, publicKey);
|
|
81
35
|
};
|
|
82
36
|
|
|
83
|
-
// src/
|
|
84
|
-
import
|
|
85
|
-
var
|
|
86
|
-
|
|
37
|
+
// src/uuid.ts
|
|
38
|
+
import { webcrypto } from "#subtle";
|
|
39
|
+
var randomUUID = () => {
|
|
40
|
+
return webcrypto.randomUUID();
|
|
41
|
+
};
|
|
87
42
|
|
|
88
43
|
// src/validator.ts
|
|
89
44
|
import { PublicKey as PublicKey2 } from "@dxos/keys";
|
|
90
|
-
import { verify as verify2 } from "
|
|
45
|
+
import { verify as verify2 } from "@dxos/vendor-hypercore/hypercore-crypto";
|
|
91
46
|
var getSignatureValidator = (publicKey) => (message, signature) => verify2(message, signature, PublicKey2.bufferize(publicKey));
|
|
92
47
|
|
|
93
48
|
// src/verify.ts
|
|
49
|
+
import { subtleCrypto } from "#subtle";
|
|
94
50
|
var verifySignature = async (key, message, signature, algorithm = {
|
|
95
51
|
name: "ECDSA",
|
|
96
52
|
namedCurve: "P-256"
|
|
@@ -108,11 +64,6 @@ var verifySignature = async (key, message, signature, algorithm = {
|
|
|
108
64
|
hash: "SHA-256"
|
|
109
65
|
}, publicKey, signature, message);
|
|
110
66
|
};
|
|
111
|
-
|
|
112
|
-
// src/uuid.ts
|
|
113
|
-
var randomUUID = () => {
|
|
114
|
-
return webcrypto2.randomUUID();
|
|
115
|
-
};
|
|
116
67
|
export {
|
|
117
68
|
SIGNATURE_LENGTH,
|
|
118
69
|
createId,
|
|
@@ -122,10 +73,8 @@ export {
|
|
|
122
73
|
randomBytes,
|
|
123
74
|
randomUUID,
|
|
124
75
|
sign,
|
|
125
|
-
subtleCrypto,
|
|
126
76
|
validateKeyPair,
|
|
127
77
|
verify,
|
|
128
|
-
verifySignature
|
|
129
|
-
webcrypto2 as webcrypto
|
|
78
|
+
verifySignature
|
|
130
79
|
};
|
|
131
80
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../../src/
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PublicKey, type PublicKeyLike,
|
|
5
|
-
"mappings": ";;;AAIA,SAASA,iBAAiB;AAC1B,SAAuBC,WAA+BC,
|
|
6
|
-
"names": ["invariant", "
|
|
3
|
+
"sources": ["../../../src/index.ts", "../../../src/keys.ts", "../../../src/uuid.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from '#subtle';\nexport * from './keys';\nexport type * from './signer';\nexport * from './uuid';\nexport * from './validator';\nexport * from './verify';\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PUBLIC_KEY_LENGTH, PublicKey, type PublicKeyLike, SECRET_KEY_LENGTH } from '@dxos/keys';\nimport crypto from '@dxos/vendor-hypercore/hypercore-crypto';\n\nexport const SIGNATURE_LENGTH = 64;\n\n/**\n * @deprecated\n */\n// TODO(burdon): Remove.\nexport const createId = (): string => PublicKey.stringify(randomBytes(32));\n\nexport const createKeyPair = (seed?: Buffer): KeyPair => {\n if (seed) {\n invariant(seed.length >= 32, 'Seedphrase too sort. Expecting length of 32.');\n return crypto.keyPair(seed.slice(0, 32));\n }\n\n // TODO(burdon): Enable seed for debugging.\n return crypto.keyPair();\n};\n\n// TODO(burdon): Buffer.\nexport const validateKeyPair = (publicKey: PublicKey, secretKey: Buffer) =>\n crypto.validateKeyPair({ publicKey: publicKey.asBuffer(), secretKey });\n\n// TODO(dmaretskyi): Slicing because webcrypto keys are too long.\nexport const discoveryKey = (key: PublicKeyLike): Buffer =>\n crypto.discoveryKey(PublicKey.from(key).asBuffer().slice(1));\n\n/**\n * Return random bytes of length.\n * @param [length=32]\n * @return {Buffer}\n */\nexport const randomBytes = (length = 32): Buffer => crypto.randomBytes(length);\n\n/**\n * Sign the contents of message with secret_key\n * @param {Buffer} message\n * @param {Buffer} secretKey\n * @returns {Buffer} signature\n */\nexport const sign = (message: Buffer, secretKey: Buffer): Buffer => {\n invariant(Buffer.isBuffer(message));\n invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);\n\n return crypto.sign(message, secretKey);\n};\n\n/**\n * Verifies the signature against the message and public_key.\n * @param {Buffer} message\n * @param {Buffer} publicKey\n * @param {Buffer} signature\n * @return {boolean}\n */\nexport const verify = (message: Buffer, signature: Buffer, publicKey: Buffer): boolean => {\n invariant(Buffer.isBuffer(message));\n invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);\n invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);\n\n return crypto.verify(message, signature, publicKey);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { webcrypto } from '#subtle';\n\nexport const randomUUID = (): string => {\n return webcrypto.randomUUID();\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { PublicKey } from '@dxos/keys';\nimport { verify } from '@dxos/vendor-hypercore/hypercore-crypto';\n\n/**\n * Generator for signature validation function.\n * @param {String} publicKey\n */\nexport const getSignatureValidator = (publicKey: string) => (message: Buffer, signature: Buffer) =>\n verify(message, signature, PublicKey.bufferize(publicKey));\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport { type PublicKey } from '@dxos/keys';\n\nimport { subtleCrypto } from '#subtle';\n\n/**\n * Verify a signature with the given key.\n */\nexport const verifySignature = async (\n key: PublicKey,\n message: Uint8Array,\n signature: Uint8Array,\n algorithm: { name: string; namedCurve?: string } = { name: 'ECDSA', namedCurve: 'P-256' },\n): Promise<boolean> => {\n let publicKey!: CryptoKey;\n\n try {\n publicKey = await subtleCrypto.importKey('raw', key.asUint8Array() as Uint8Array<ArrayBuffer>, algorithm, true, [\n 'verify',\n ]);\n } catch {\n return false;\n }\n\n return subtleCrypto.verify(\n {\n name: algorithm.name,\n hash: 'SHA-256',\n },\n publicKey,\n signature as Uint8Array<ArrayBuffer>,\n message as Uint8Array<ArrayBuffer>,\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;AAIA,cAAc;;;ACAd,SAASA,iBAAiB;AAC1B,SAAuBC,mBAAmBC,WAA+BC,yBAAyB;AAClG,OAAOC,YAAY;AAEZ,IAAMC,mBAAmB;AAMzB,IAAMC,WAAW,MAAcJ,UAAUK,UAAUC,YAAY,EAAA,CAAA;AAE/D,IAAMC,gBAAgB,CAACC,SAAAA;AAC5B,MAAIA,MAAM;AACRV,cAAUU,KAAKC,UAAU,IAAI,8CAAA;AAC7B,WAAOP,OAAOQ,QAAQF,KAAKG,MAAM,GAAG,EAAA,CAAA;EACtC;AAGA,SAAOT,OAAOQ,QAAO;AACvB;AAGO,IAAME,kBAAkB,CAACC,WAAsBC,cACpDZ,OAAOU,gBAAgB;EAAEC,WAAWA,UAAUE,SAAQ;EAAID;AAAU,CAAA;AAG/D,IAAME,eAAe,CAACC,QAC3Bf,OAAOc,aAAahB,UAAUkB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAML,cAAc,CAACG,SAAS,OAAeP,OAAOI,YAAYG,MAAAA;AAQhE,IAAMU,OAAO,CAACC,SAAiBN,cAAAA;AACpChB,YAAUuB,OAAOC,SAASF,OAAAA,CAAAA;AAC1BtB,YAAUuB,OAAOC,SAASR,SAAAA,KAAcA,UAAUL,WAAWR,iBAAAA;AAE7D,SAAOC,OAAOiB,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMS,SAAS,CAACH,SAAiBI,WAAmBX,cAAAA;AACzDf,YAAUuB,OAAOC,SAASF,OAAAA,CAAAA;AAC1BtB,YAAUuB,OAAOC,SAASE,SAAAA,KAAcA,UAAUf,WAAWN,gBAAAA;AAC7DL,YAAUuB,OAAOC,SAAST,SAAAA,KAAcA,UAAUJ,WAAWV,iBAAAA;AAE7D,SAAOG,OAAOqB,OAAOH,SAASI,WAAWX,SAAAA;AAC3C;;;AC/DA,SAASY,iBAAiB;AAEnB,IAAMC,aAAa,MAAA;AACxB,SAAOD,UAAUC,WAAU;AAC7B;;;ACJA,SAASC,aAAAA,kBAAiB;AAC1B,SAASC,UAAAA,eAAc;AAMhB,IAAMC,wBAAwB,CAACC,cAAsB,CAACC,SAAiBC,cAC5EJ,QAAOG,SAASC,WAAWL,WAAUM,UAAUH,SAAAA,CAAAA;;;ACNjD,SAASI,oBAAoB;AAKtB,IAAMC,kBAAkB,OAC7BC,KACAC,SACAC,WACAC,YAAmD;EAAEC,MAAM;EAASC,YAAY;AAAQ,MAAC;AAEzF,MAAIC;AAEJ,MAAI;AACFA,gBAAY,MAAMR,aAAaS,UAAU,OAAOP,IAAIQ,aAAY,GAA+BL,WAAW,MAAM;MAC9G;KACD;EACH,QAAQ;AACN,WAAO;EACT;AAEA,SAAOL,aAAaW,OAClB;IACEL,MAAMD,UAAUC;IAChBM,MAAM;EACR,GACAJ,WACAJ,WACAD,OAAAA;AAEJ;",
|
|
6
|
+
"names": ["invariant", "PUBLIC_KEY_LENGTH", "PublicKey", "SECRET_KEY_LENGTH", "crypto", "SIGNATURE_LENGTH", "createId", "stringify", "randomBytes", "createKeyPair", "seed", "length", "keyPair", "slice", "validateKeyPair", "publicKey", "secretKey", "asBuffer", "discoveryKey", "key", "from", "sign", "message", "Buffer", "isBuffer", "verify", "signature", "webcrypto", "randomUUID", "PublicKey", "verify", "getSignatureValidator", "publicKey", "message", "signature", "bufferize", "subtleCrypto", "verifySignature", "key", "message", "signature", "algorithm", "name", "namedCurve", "publicKey", "importKey", "asUint8Array", "verify", "hash"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"src/keys.ts":{"bytes":
|
|
1
|
+
{"inputs":{"src/keys.ts":{"bytes":7088,"imports":[{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true}],"format":"esm"},"src/uuid.ts":{"bytes":699,"imports":[{"path":"#subtle","kind":"import-statement","external":true}],"format":"esm"},"src/validator.ts":{"bytes":1439,"imports":[{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true}],"format":"esm"},"src/verify.ts":{"bytes":2573,"imports":[{"path":"#subtle","kind":"import-statement","external":true}],"format":"esm"},"src/index.ts":{"bytes":744,"imports":[{"path":"#subtle","kind":"import-statement","external":true},{"path":"src/keys.ts","kind":"import-statement","original":"./keys"},{"path":"src/uuid.ts","kind":"import-statement","original":"./uuid"},{"path":"src/validator.ts","kind":"import-statement","original":"./validator"},{"path":"src/verify.ts","kind":"import-statement","original":"./verify"}],"format":"esm"}},"outputs":{"dist/lib/node-esm/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6186},"dist/lib/node-esm/index.mjs":{"imports":[{"path":"#subtle","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true},{"path":"#subtle","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@dxos/vendor-hypercore/hypercore-crypto","kind":"import-statement","external":true},{"path":"#subtle","kind":"import-statement","external":true}],"exports":["SIGNATURE_LENGTH","createId","createKeyPair","discoveryKey","getSignatureValidator","randomBytes","randomUUID","sign","validateKeyPair","verify","verifySignature"],"entryPoint":"src/index.ts","inputs":{"src/index.ts":{"bytesInOutput":25},"src/keys.ts":{"bytesInOutput":1272},"src/uuid.ts":{"bytesInOutput":98},"src/validator.ts":{"bytesInOutput":260},"src/verify.ts":{"bytesInOutput":445}},"bytes":2501}}}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
+
export * from '#subtle';
|
|
1
2
|
export * from './keys';
|
|
2
|
-
export * from './signer';
|
|
3
|
-
export * from './
|
|
3
|
+
export type * from './signer';
|
|
4
|
+
export * from './uuid';
|
|
4
5
|
export * from './validator';
|
|
5
6
|
export * from './verify';
|
|
6
|
-
export * from './uuid';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,mBAAmB,UAAU,CAAC;AAC9B,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
|
package/dist/types/src/keys.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ export declare const SIGNATURE_LENGTH = 64;
|
|
|
5
5
|
*/
|
|
6
6
|
export declare const createId: () => string;
|
|
7
7
|
export declare const createKeyPair: (seed?: Buffer) => KeyPair;
|
|
8
|
-
export declare const validateKeyPair: (publicKey: PublicKey, secretKey: Buffer) =>
|
|
8
|
+
export declare const validateKeyPair: (publicKey: PublicKey, secretKey: Buffer) => boolean;
|
|
9
9
|
export declare const discoveryKey: (key: PublicKeyLike) => Buffer;
|
|
10
10
|
/**
|
|
11
11
|
* Return random bytes of length.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/keys.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAqB,SAAS,EAAE,KAAK,aAAa,EAAqB,MAAM,YAAY,CAAC;AAG/G,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC;;GAEG;AAEH,eAAO,MAAM,QAAQ,QAAO,MAA8C,CAAC;AAE3E,eAAO,MAAM,aAAa,UAAW,MAAM,KAAG,OAQ7C,CAAC;AAGF,eAAO,MAAM,eAAe,cAAe,SAAS,aAAa,MAAM,YACC,CAAC;AAGzE,eAAO,MAAM,YAAY,QAAS,aAAa,KAAG,MACY,CAAC;AAE/D;;;;GAIG;AACH,eAAO,MAAM,WAAW,uBAAkB,MAAoC,CAAC;AAE/E;;;;;GAKG;AACH,eAAO,MAAM,IAAI,YAAa,MAAM,aAAa,MAAM,KAAG,MAKzD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,MAAM,YAAa,MAAM,aAAa,MAAM,aAAa,MAAM,KAAG,OAM9E,CAAC"}
|
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
* Generator for signature validation function.
|
|
3
3
|
* @param {String} publicKey
|
|
4
4
|
*/
|
|
5
|
-
export declare const getSignatureValidator: (publicKey: string) => (message: Buffer, signature: Buffer) =>
|
|
5
|
+
export declare const getSignatureValidator: (publicKey: string) => (message: Buffer, signature: Buffer) => boolean;
|
|
6
6
|
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/validator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../../src/validator.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,eAAO,MAAM,qBAAqB,cAAe,MAAM,eAAe,MAAM,aAAa,MAAM,YACnC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/verify.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C;;GAEG;AACH,eAAO,MAAM,eAAe,
|
|
1
|
+
{"version":3,"file":"verify.d.ts","sourceRoot":"","sources":["../../../src/verify.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,YAAY,CAAC;AAI5C;;GAEG;AACH,eAAO,MAAM,eAAe,QACrB,SAAS,WACL,UAAU,aACR,UAAU,cACV;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,KAC/C,OAAO,CAAC,OAAO,CAoBjB,CAAC"}
|