@dxos/crypto 0.6.3-main.6906e91 → 0.6.3-main.98b0ce6
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 +10 -8
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +12 -9
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/keys.d.ts +2 -1
- package/dist/types/src/keys.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/keys.ts +4 -2
|
@@ -12,13 +12,14 @@ import crypto2 from "hypercore-crypto";
|
|
|
12
12
|
import { invariant } from "@dxos/invariant";
|
|
13
13
|
import { PublicKey, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from "@dxos/keys";
|
|
14
14
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/crypto/src/keys.ts";
|
|
15
|
-
var SIGNATURE_LENGTH = 64;
|
|
16
15
|
var createId = () => PublicKey.stringify(randomBytes(32));
|
|
16
|
+
var SIGNATURE_LENGTH = 64;
|
|
17
|
+
var zeroKey = () => new Uint8Array(32);
|
|
17
18
|
var createKeyPair = (seed) => {
|
|
18
19
|
if (seed) {
|
|
19
20
|
invariant(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.", {
|
|
20
21
|
F: __dxlog_file,
|
|
21
|
-
L:
|
|
22
|
+
L: 22,
|
|
22
23
|
S: void 0,
|
|
23
24
|
A: [
|
|
24
25
|
"seed.length >= 32",
|
|
@@ -38,7 +39,7 @@ var randomBytes = (length = 32) => crypto2.randomBytes(length);
|
|
|
38
39
|
var sign = (message, secretKey) => {
|
|
39
40
|
invariant(Buffer.isBuffer(message), void 0, {
|
|
40
41
|
F: __dxlog_file,
|
|
41
|
-
L:
|
|
42
|
+
L: 52,
|
|
42
43
|
S: void 0,
|
|
43
44
|
A: [
|
|
44
45
|
"Buffer.isBuffer(message)",
|
|
@@ -47,7 +48,7 @@ var sign = (message, secretKey) => {
|
|
|
47
48
|
});
|
|
48
49
|
invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH, void 0, {
|
|
49
50
|
F: __dxlog_file,
|
|
50
|
-
L:
|
|
51
|
+
L: 53,
|
|
51
52
|
S: void 0,
|
|
52
53
|
A: [
|
|
53
54
|
"Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH",
|
|
@@ -59,7 +60,7 @@ var sign = (message, secretKey) => {
|
|
|
59
60
|
var verify = (message, signature, publicKey) => {
|
|
60
61
|
invariant(Buffer.isBuffer(message), void 0, {
|
|
61
62
|
F: __dxlog_file,
|
|
62
|
-
L:
|
|
63
|
+
L: 66,
|
|
63
64
|
S: void 0,
|
|
64
65
|
A: [
|
|
65
66
|
"Buffer.isBuffer(message)",
|
|
@@ -68,7 +69,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
68
69
|
});
|
|
69
70
|
invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH, void 0, {
|
|
70
71
|
F: __dxlog_file,
|
|
71
|
-
L:
|
|
72
|
+
L: 67,
|
|
72
73
|
S: void 0,
|
|
73
74
|
A: [
|
|
74
75
|
"Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH",
|
|
@@ -77,7 +78,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
77
78
|
});
|
|
78
79
|
invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH, void 0, {
|
|
79
80
|
F: __dxlog_file,
|
|
80
|
-
L:
|
|
81
|
+
L: 68,
|
|
81
82
|
S: void 0,
|
|
82
83
|
A: [
|
|
83
84
|
"Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH",
|
|
@@ -124,6 +125,7 @@ export {
|
|
|
124
125
|
subtleCrypto,
|
|
125
126
|
validateKeyPair,
|
|
126
127
|
verify,
|
|
127
|
-
verifySignature
|
|
128
|
+
verifySignature,
|
|
129
|
+
zeroKey
|
|
128
130
|
};
|
|
129
131
|
//# sourceMappingURL=index.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/keys.ts", "../../../src/browser/subtle.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport crypto from 'hypercore-crypto';\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PublicKey, type PublicKeyLike, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from '@dxos/keys';\n\
|
|
5
|
-
"mappings": ";;;;;;;;;;AAIA,OAAOA,aAAY;AAEnB,SAASC,iBAAiB;AAC1B,SAAuBC,WAA+BC,mBAAmBC,yBAAyB;;
|
|
6
|
-
"names": ["crypto", "invariant", "PublicKey", "PUBLIC_KEY_LENGTH", "SECRET_KEY_LENGTH", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport crypto from 'hypercore-crypto';\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PublicKey, type PublicKeyLike, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from '@dxos/keys';\n\n/**\n * @deprecated\n */\n// TODO(burdon): Remove.\nexport const createId = (): string => PublicKey.stringify(randomBytes(32));\n\nexport const SIGNATURE_LENGTH = 64;\n\nexport const zeroKey = () => new Uint8Array(32); // TODO(burdon): Remove?\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 2022 DXOS.org\n//\n\n// Replacement implementation for the browser (see package.json).\n\nexport const subtleCrypto = crypto.subtle;\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { verify } from 'hypercore-crypto';\n\nimport { PublicKey } from '@dxos/keys';\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 (key: PublicKey, message: Uint8Array, signature: Uint8Array): Promise<boolean> => {\n let publicKey!: CryptoKey;\n\n try {\n publicKey = await subtleCrypto.importKey(\n 'raw',\n key.asUint8Array(),\n {\n name: 'ECDSA',\n namedCurve: 'P-256',\n },\n true,\n ['verify'],\n );\n } catch {\n return false;\n }\n\n return subtleCrypto.verify(\n {\n name: 'ECDSA',\n hash: 'SHA-256',\n },\n publicKey,\n signature,\n message,\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;AAIA,OAAOA,aAAY;AAEnB,SAASC,iBAAiB;AAC1B,SAAuBC,WAA+BC,mBAAmBC,yBAAyB;;AAM3F,IAAMC,WAAW,MAAcH,UAAUI,UAAUC,YAAY,EAAA,CAAA;AAE/D,IAAMC,mBAAmB;AAEzB,IAAMC,UAAU,MAAM,IAAIC,WAAW,EAAA;AAErC,IAAMC,gBAAgB,CAACC,SAAAA;AAC5B,MAAIA,MAAM;AACRX,cAAUW,KAAKC,UAAU,IAAI,gDAAA;;;;;;;;;AAC7B,WAAOb,QAAOc,QAAQF,KAAKG,MAAM,GAAG,EAAA,CAAA;EACtC;AAGA,SAAOf,QAAOc,QAAO;AACvB;AAGO,IAAME,kBAAkB,CAACC,WAAsBC,cACpDlB,QAAOgB,gBAAgB;EAAEC,WAAWA,UAAUE,SAAQ;EAAID;AAAU,CAAA;AAG/D,IAAME,eAAe,CAACC,QAC3BrB,QAAOoB,aAAalB,UAAUoB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAMR,cAAc,CAACM,SAAS,OAAeb,QAAOO,YAAYM,MAAAA;AAQhE,IAAMU,OAAO,CAACC,SAAiBN,cAAAA;AACpCjB,YAAUwB,OAAOC,SAASF,OAAAA,GAAAA,QAAAA;;;;;;;;;AAC1BvB,YAAUwB,OAAOC,SAASR,SAAAA,KAAcA,UAAUL,WAAWT,mBAAAA,QAAAA;;;;;;;;;AAE7D,SAAOJ,QAAOuB,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMS,SAAS,CAACH,SAAiBI,WAAmBX,cAAAA;AACzDhB,YAAUwB,OAAOC,SAASF,OAAAA,GAAAA,QAAAA;;;;;;;;;AAC1BvB,YAAUwB,OAAOC,SAASE,SAAAA,KAAcA,UAAUf,WAAWL,kBAAAA,QAAAA;;;;;;;;;AAC7DP,YAAUwB,OAAOC,SAAST,SAAAA,KAAcA,UAAUJ,WAAWV,mBAAAA,QAAAA;;;;;;;;;AAE7D,SAAOH,QAAO2B,OAAOH,SAASI,WAAWX,SAAAA;AAC3C;;;AChEO,IAAMY,eAAeC,OAAOC;;;ACFnC,SAASC,UAAAA,eAAc;AAEvB,SAASC,aAAAA,kBAAiB;AAMnB,IAAMC,wBAAwB,CAACC,cAAsB,CAACC,SAAiBC,cAC5EC,QAAOF,SAASC,WAAWE,WAAUC,UAAUL,SAAAA,CAAAA;;;ACF1C,IAAMM,kBAAkB,OAAOC,KAAgBC,SAAqBC,cAAAA;AACzE,MAAIC;AAEJ,MAAI;AACFA,gBAAY,MAAMC,aAAaC,UAC7B,OACAL,IAAIM,aAAY,GAChB;MACEC,MAAM;MACNC,YAAY;IACd,GACA,MACA;MAAC;KAAS;EAEd,QAAQ;AACN,WAAO;EACT;AAEA,SAAOJ,aAAaK,OAClB;IACEF,MAAM;IACNG,MAAM;EACR,GACAP,WACAD,WACAD,OAAAA;AAEJ;",
|
|
6
|
+
"names": ["crypto", "invariant", "PublicKey", "PUBLIC_KEY_LENGTH", "SECRET_KEY_LENGTH", "createId", "stringify", "randomBytes", "SIGNATURE_LENGTH", "zeroKey", "Uint8Array", "createKeyPair", "seed", "length", "keyPair", "slice", "validateKeyPair", "publicKey", "secretKey", "asBuffer", "discoveryKey", "key", "from", "sign", "message", "Buffer", "isBuffer", "verify", "signature", "subtleCrypto", "crypto", "subtle", "verify", "PublicKey", "getSignatureValidator", "publicKey", "message", "signature", "verify", "PublicKey", "bufferize", "verifySignature", "key", "message", "signature", "publicKey", "subtleCrypto", "importKey", "asUint8Array", "name", "namedCurve", "verify", "hash"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/keys.ts":{"bytes":
|
|
1
|
+
{"inputs":{"inject-globals:@inject-globals":{"bytes":384,"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/keys.ts":{"bytes":8740,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/signer.ts":{"bytes":810,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/browser/subtle.ts":{"bytes":788,"imports":[{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/validator.ts":{"bytes":1518,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/verify.ts":{"bytes":2511,"imports":[{"path":"packages/common/crypto/src/browser/subtle.ts","kind":"import-statement","original":"./subtle"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/index.ts":{"bytes":829,"imports":[{"path":"packages/common/crypto/src/keys.ts","kind":"import-statement","original":"./keys"},{"path":"packages/common/crypto/src/signer.ts","kind":"import-statement","original":"./signer"},{"path":"packages/common/crypto/src/browser/subtle.ts","kind":"import-statement","original":"./subtle"},{"path":"packages/common/crypto/src/validator.ts","kind":"import-statement","original":"./validator"},{"path":"packages/common/crypto/src/verify.ts","kind":"import-statement","original":"./verify"},{"path":"@inject-globals","kind":"import-statement","external":true}],"format":"esm"}},"outputs":{"packages/common/crypto/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5959},"packages/common/crypto/dist/lib/browser/index.mjs":{"imports":[{"path":"@dxos/node-std/inject-globals","kind":"import-statement","external":true},{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["SIGNATURE_LENGTH","createId","createKeyPair","discoveryKey","getSignatureValidator","randomBytes","sign","subtleCrypto","validateKeyPair","verify","verifySignature","zeroKey"],"entryPoint":"packages/common/crypto/src/index.ts","inputs":{"inject-globals:@inject-globals":{"bytesInOutput":79},"packages/common/crypto/src/keys.ts":{"bytesInOutput":2280},"packages/common/crypto/src/index.ts":{"bytesInOutput":0},"packages/common/crypto/src/browser/subtle.ts":{"bytesInOutput":34},"packages/common/crypto/src/validator.ts":{"bytesInOutput":237},"packages/common/crypto/src/verify.ts":{"bytesInOutput":387}},"bytes":3492}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -38,7 +38,8 @@ __export(node_exports, {
|
|
|
38
38
|
subtleCrypto: () => subtleCrypto,
|
|
39
39
|
validateKeyPair: () => validateKeyPair,
|
|
40
40
|
verify: () => verify,
|
|
41
|
-
verifySignature: () => verifySignature
|
|
41
|
+
verifySignature: () => verifySignature,
|
|
42
|
+
zeroKey: () => zeroKey
|
|
42
43
|
});
|
|
43
44
|
module.exports = __toCommonJS(node_exports);
|
|
44
45
|
var import_hypercore_crypto = __toESM(require("hypercore-crypto"));
|
|
@@ -48,13 +49,14 @@ var nodeCrypto = __toESM(require("node:crypto"));
|
|
|
48
49
|
var import_hypercore_crypto2 = require("hypercore-crypto");
|
|
49
50
|
var import_keys2 = require("@dxos/keys");
|
|
50
51
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/crypto/src/keys.ts";
|
|
51
|
-
var SIGNATURE_LENGTH = 64;
|
|
52
52
|
var createId = () => import_keys.PublicKey.stringify(randomBytes(32));
|
|
53
|
+
var SIGNATURE_LENGTH = 64;
|
|
54
|
+
var zeroKey = () => new Uint8Array(32);
|
|
53
55
|
var createKeyPair = (seed) => {
|
|
54
56
|
if (seed) {
|
|
55
57
|
(0, import_invariant.invariant)(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.", {
|
|
56
58
|
F: __dxlog_file,
|
|
57
|
-
L:
|
|
59
|
+
L: 22,
|
|
58
60
|
S: void 0,
|
|
59
61
|
A: [
|
|
60
62
|
"seed.length >= 32",
|
|
@@ -74,7 +76,7 @@ var randomBytes = (length = 32) => import_hypercore_crypto.default.randomBytes(l
|
|
|
74
76
|
var sign = (message, secretKey) => {
|
|
75
77
|
(0, import_invariant.invariant)(Buffer.isBuffer(message), void 0, {
|
|
76
78
|
F: __dxlog_file,
|
|
77
|
-
L:
|
|
79
|
+
L: 52,
|
|
78
80
|
S: void 0,
|
|
79
81
|
A: [
|
|
80
82
|
"Buffer.isBuffer(message)",
|
|
@@ -83,7 +85,7 @@ var sign = (message, secretKey) => {
|
|
|
83
85
|
});
|
|
84
86
|
(0, import_invariant.invariant)(Buffer.isBuffer(secretKey) && secretKey.length === import_keys.SECRET_KEY_LENGTH, void 0, {
|
|
85
87
|
F: __dxlog_file,
|
|
86
|
-
L:
|
|
88
|
+
L: 53,
|
|
87
89
|
S: void 0,
|
|
88
90
|
A: [
|
|
89
91
|
"Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH",
|
|
@@ -95,7 +97,7 @@ var sign = (message, secretKey) => {
|
|
|
95
97
|
var verify = (message, signature, publicKey) => {
|
|
96
98
|
(0, import_invariant.invariant)(Buffer.isBuffer(message), void 0, {
|
|
97
99
|
F: __dxlog_file,
|
|
98
|
-
L:
|
|
100
|
+
L: 66,
|
|
99
101
|
S: void 0,
|
|
100
102
|
A: [
|
|
101
103
|
"Buffer.isBuffer(message)",
|
|
@@ -104,7 +106,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
104
106
|
});
|
|
105
107
|
(0, import_invariant.invariant)(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH, void 0, {
|
|
106
108
|
F: __dxlog_file,
|
|
107
|
-
L:
|
|
109
|
+
L: 67,
|
|
108
110
|
S: void 0,
|
|
109
111
|
A: [
|
|
110
112
|
"Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH",
|
|
@@ -113,7 +115,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
113
115
|
});
|
|
114
116
|
(0, import_invariant.invariant)(Buffer.isBuffer(publicKey) && publicKey.length === import_keys.PUBLIC_KEY_LENGTH, void 0, {
|
|
115
117
|
F: __dxlog_file,
|
|
116
|
-
L:
|
|
118
|
+
L: 68,
|
|
117
119
|
S: void 0,
|
|
118
120
|
A: [
|
|
119
121
|
"Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH",
|
|
@@ -153,6 +155,7 @@ var verifySignature = async (key, message, signature) => {
|
|
|
153
155
|
subtleCrypto,
|
|
154
156
|
validateKeyPair,
|
|
155
157
|
verify,
|
|
156
|
-
verifySignature
|
|
158
|
+
verifySignature,
|
|
159
|
+
zeroKey
|
|
157
160
|
});
|
|
158
161
|
//# sourceMappingURL=index.cjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/keys.ts", "../../../src/subtle.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport crypto from 'hypercore-crypto';\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PublicKey, type PublicKeyLike, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from '@dxos/keys';\n\
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["import_hypercore_crypto", "import_keys", "
|
|
4
|
+
"sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport crypto from 'hypercore-crypto';\n\nimport { invariant } from '@dxos/invariant';\nimport { type KeyPair, PublicKey, type PublicKeyLike, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from '@dxos/keys';\n\n/**\n * @deprecated\n */\n// TODO(burdon): Remove.\nexport const createId = (): string => PublicKey.stringify(randomBytes(32));\n\nexport const SIGNATURE_LENGTH = 64;\n\nexport const zeroKey = () => new Uint8Array(32); // TODO(burdon): Remove?\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 2022 DXOS.org\n//\n\nimport * as nodeCrypto from 'node:crypto';\n\nexport const subtleCrypto = nodeCrypto.webcrypto.subtle;\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport { verify } from 'hypercore-crypto';\n\nimport { PublicKey } from '@dxos/keys';\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 (key: PublicKey, message: Uint8Array, signature: Uint8Array): Promise<boolean> => {\n let publicKey!: CryptoKey;\n\n try {\n publicKey = await subtleCrypto.importKey(\n 'raw',\n key.asUint8Array(),\n {\n name: 'ECDSA',\n namedCurve: 'P-256',\n },\n true,\n ['verify'],\n );\n } catch {\n return false;\n }\n\n return subtleCrypto.verify(\n {\n name: 'ECDSA',\n hash: 'SHA-256',\n },\n publicKey,\n signature,\n message,\n );\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,8BAAmB;AAEnB,uBAA0B;AAC1B,kBAAkG;ACHlG,iBAA4B;ACA5B,IAAAA,2BAAuB;AAEvB,IAAAC,eAA0B;;AFOnB,IAAMC,WAAW,MAAcC,sBAAUC,UAAUC,YAAY,EAAA,CAAA;AAE/D,IAAMC,mBAAmB;AAEzB,IAAMC,UAAU,MAAM,IAAIC,WAAW,EAAA;AAErC,IAAMC,gBAAgB,CAACC,SAAAA;AAC5B,MAAIA,MAAM;AACRC,oCAAUD,KAAKE,UAAU,IAAI,gDAAA;;;;;;;;;AAC7B,WAAOC,wBAAAA,QAAOC,QAAQJ,KAAKK,MAAM,GAAG,EAAA,CAAA;EACtC;AAGA,SAAOF,wBAAAA,QAAOC,QAAO;AACvB;AAGO,IAAME,kBAAkB,CAACC,WAAsBC,cACpDL,wBAAAA,QAAOG,gBAAgB;EAAEC,WAAWA,UAAUE,SAAQ;EAAID;AAAU,CAAA;AAG/D,IAAME,eAAe,CAACC,QAC3BR,wBAAAA,QAAOO,aAAajB,sBAAUmB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAMV,cAAc,CAACO,SAAS,OAAeC,wBAAAA,QAAOR,YAAYO,MAAAA;AAQhE,IAAMW,OAAO,CAACC,SAAiBN,cAAAA;AACpCP,kCAAUc,OAAOC,SAASF,OAAAA,GAAAA,QAAAA;;;;;;;;;AAC1Bb,kCAAUc,OAAOC,SAASR,SAAAA,KAAcA,UAAUN,WAAWe,+BAAAA,QAAAA;;;;;;;;;AAE7D,SAAOd,wBAAAA,QAAOU,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMU,SAAS,CAACJ,SAAiBK,WAAmBZ,cAAAA;AACzDN,kCAAUc,OAAOC,SAASF,OAAAA,GAAAA,QAAAA;;;;;;;;;AAC1Bb,kCAAUc,OAAOC,SAASG,SAAAA,KAAcA,UAAUjB,WAAWN,kBAAAA,QAAAA;;;;;;;;;AAC7DK,kCAAUc,OAAOC,SAAST,SAAAA,KAAcA,UAAUL,WAAWkB,+BAAAA,QAAAA;;;;;;;;;AAE7D,SAAOjB,wBAAAA,QAAOe,OAAOJ,SAASK,WAAWZ,SAAAA;AAC3C;AChEO,IAAMc,eAA0BC,WAAAA,UAAUC;ACM1C,IAAMC,wBAAwB,CAACjB,cAAsB,CAACO,SAAiBK,kBAC5ED,yBAAAA,QAAOJ,SAASK,WAAW1B,aAAAA,UAAUgC,UAAUlB,SAAAA,CAAAA;ACF1C,IAAMmB,kBAAkB,OAAOf,KAAgBG,SAAqBK,cAAAA;AACzE,MAAIZ;AAEJ,MAAI;AACFA,gBAAY,MAAMc,aAAaM,UAC7B,OACAhB,IAAIiB,aAAY,GAChB;MACEC,MAAM;MACNC,YAAY;IACd,GACA,MACA;MAAC;KAAS;EAEd,QAAQ;AACN,WAAO;EACT;AAEA,SAAOT,aAAaH,OAClB;IACEW,MAAM;IACNE,MAAM;EACR,GACAxB,WACAY,WACAL,OAAAA;AAEJ;",
|
|
6
|
+
"names": ["import_hypercore_crypto", "import_keys", "createId", "PublicKey", "stringify", "randomBytes", "SIGNATURE_LENGTH", "zeroKey", "Uint8Array", "createKeyPair", "seed", "invariant", "length", "crypto", "keyPair", "slice", "validateKeyPair", "publicKey", "secretKey", "asBuffer", "discoveryKey", "key", "from", "sign", "message", "Buffer", "isBuffer", "SECRET_KEY_LENGTH", "verify", "signature", "PUBLIC_KEY_LENGTH", "subtleCrypto", "webcrypto", "subtle", "getSignatureValidator", "bufferize", "verifySignature", "importKey", "asUint8Array", "name", "namedCurve", "hash"]
|
|
7
7
|
}
|
package/dist/lib/node/meta.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"inputs":{"packages/common/crypto/src/keys.ts":{"bytes":
|
|
1
|
+
{"inputs":{"packages/common/crypto/src/keys.ts":{"bytes":8740,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/signer.ts":{"bytes":810,"imports":[],"format":"esm"},"packages/common/crypto/src/subtle.ts":{"bytes":811,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/validator.ts":{"bytes":1518,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"format":"esm"},"packages/common/crypto/src/verify.ts":{"bytes":2511,"imports":[{"path":"packages/common/crypto/src/subtle.ts","kind":"import-statement","original":"./subtle"}],"format":"esm"},"packages/common/crypto/src/index.ts":{"bytes":829,"imports":[{"path":"packages/common/crypto/src/keys.ts","kind":"import-statement","original":"./keys"},{"path":"packages/common/crypto/src/signer.ts","kind":"import-statement","original":"./signer"},{"path":"packages/common/crypto/src/subtle.ts","kind":"import-statement","original":"./subtle"},{"path":"packages/common/crypto/src/validator.ts","kind":"import-statement","original":"./validator"},{"path":"packages/common/crypto/src/verify.ts","kind":"import-statement","original":"./verify"}],"format":"esm"}},"outputs":{"packages/common/crypto/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5971},"packages/common/crypto/dist/lib/node/index.cjs":{"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true},{"path":"node:crypto","kind":"import-statement","external":true},{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}],"exports":["SIGNATURE_LENGTH","createId","createKeyPair","discoveryKey","getSignatureValidator","randomBytes","sign","subtleCrypto","validateKeyPair","verify","verifySignature","zeroKey"],"entryPoint":"packages/common/crypto/src/index.ts","inputs":{"packages/common/crypto/src/keys.ts":{"bytesInOutput":2272},"packages/common/crypto/src/index.ts":{"bytesInOutput":0},"packages/common/crypto/src/subtle.ts":{"bytesInOutput":91},"packages/common/crypto/src/validator.ts":{"bytesInOutput":237},"packages/common/crypto/src/verify.ts":{"bytesInOutput":387}},"bytes":3385}}}
|
package/dist/types/src/keys.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { type KeyPair, PublicKey, type PublicKeyLike } from '@dxos/keys';
|
|
3
|
-
export declare const SIGNATURE_LENGTH = 64;
|
|
4
3
|
/**
|
|
5
4
|
* @deprecated
|
|
6
5
|
*/
|
|
7
6
|
export declare const createId: () => string;
|
|
7
|
+
export declare const SIGNATURE_LENGTH = 64;
|
|
8
|
+
export declare const zeroKey: () => Uint8Array;
|
|
8
9
|
export declare const createKeyPair: (seed?: Buffer) => KeyPair;
|
|
9
10
|
export declare const validateKeyPair: (publicKey: PublicKey, secretKey: Buffer) => boolean;
|
|
10
11
|
export declare const discoveryKey: (key: PublicKeyLike) => Buffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/keys.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAwC,MAAM,YAAY,CAAC;AAE/G,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC
|
|
1
|
+
{"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../../src/keys.ts"],"names":[],"mappings":";AAOA,OAAO,EAAE,KAAK,OAAO,EAAE,SAAS,EAAE,KAAK,aAAa,EAAwC,MAAM,YAAY,CAAC;AAE/G;;GAEG;AAEH,eAAO,MAAM,QAAQ,QAAO,MAA8C,CAAC;AAE3E,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,eAAO,MAAM,OAAO,kBAA2B,CAAC;AAEhD,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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dxos/crypto",
|
|
3
|
-
"version": "0.6.3-main.
|
|
3
|
+
"version": "0.6.3-main.98b0ce6",
|
|
4
4
|
"description": "Basic cross-platform crypto utils.",
|
|
5
5
|
"homepage": "https://dxos.org",
|
|
6
6
|
"bugs": "https://github.com/dxos/dxos/issues",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
],
|
|
19
19
|
"dependencies": {
|
|
20
20
|
"hypercore-crypto": "^2.3.0",
|
|
21
|
-
"@dxos/
|
|
22
|
-
"@dxos/
|
|
23
|
-
"@dxos/keys": "0.6.3-main.
|
|
21
|
+
"@dxos/invariant": "0.6.3-main.98b0ce6",
|
|
22
|
+
"@dxos/node-std": "0.6.3-main.98b0ce6",
|
|
23
|
+
"@dxos/keys": "0.6.3-main.98b0ce6"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/crypto-js": "~4.0.2",
|
package/src/keys.ts
CHANGED
|
@@ -7,14 +7,16 @@ import crypto from 'hypercore-crypto';
|
|
|
7
7
|
import { invariant } from '@dxos/invariant';
|
|
8
8
|
import { type KeyPair, PublicKey, type PublicKeyLike, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from '@dxos/keys';
|
|
9
9
|
|
|
10
|
-
export const SIGNATURE_LENGTH = 64;
|
|
11
|
-
|
|
12
10
|
/**
|
|
13
11
|
* @deprecated
|
|
14
12
|
*/
|
|
15
13
|
// TODO(burdon): Remove.
|
|
16
14
|
export const createId = (): string => PublicKey.stringify(randomBytes(32));
|
|
17
15
|
|
|
16
|
+
export const SIGNATURE_LENGTH = 64;
|
|
17
|
+
|
|
18
|
+
export const zeroKey = () => new Uint8Array(32); // TODO(burdon): Remove?
|
|
19
|
+
|
|
18
20
|
export const createKeyPair = (seed?: Buffer): KeyPair => {
|
|
19
21
|
if (seed) {
|
|
20
22
|
invariant(seed.length >= 32, 'Seedphrase too sort. Expecting length of 32.');
|