@dxos/crypto 0.6.3-main.3c9610d → 0.6.3-main.6906e91
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 +8 -10
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +9 -12
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/types/src/keys.d.ts +1 -2
- package/dist/types/src/keys.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/keys.ts +2 -4
|
@@ -12,14 +12,13 @@ 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 createId = () => PublicKey.stringify(randomBytes(32));
|
|
16
15
|
var SIGNATURE_LENGTH = 64;
|
|
17
|
-
var
|
|
16
|
+
var createId = () => PublicKey.stringify(randomBytes(32));
|
|
18
17
|
var createKeyPair = (seed) => {
|
|
19
18
|
if (seed) {
|
|
20
19
|
invariant(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.", {
|
|
21
20
|
F: __dxlog_file,
|
|
22
|
-
L:
|
|
21
|
+
L: 20,
|
|
23
22
|
S: void 0,
|
|
24
23
|
A: [
|
|
25
24
|
"seed.length >= 32",
|
|
@@ -39,7 +38,7 @@ var randomBytes = (length = 32) => crypto2.randomBytes(length);
|
|
|
39
38
|
var sign = (message, secretKey) => {
|
|
40
39
|
invariant(Buffer.isBuffer(message), void 0, {
|
|
41
40
|
F: __dxlog_file,
|
|
42
|
-
L:
|
|
41
|
+
L: 50,
|
|
43
42
|
S: void 0,
|
|
44
43
|
A: [
|
|
45
44
|
"Buffer.isBuffer(message)",
|
|
@@ -48,7 +47,7 @@ var sign = (message, secretKey) => {
|
|
|
48
47
|
});
|
|
49
48
|
invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH, void 0, {
|
|
50
49
|
F: __dxlog_file,
|
|
51
|
-
L:
|
|
50
|
+
L: 51,
|
|
52
51
|
S: void 0,
|
|
53
52
|
A: [
|
|
54
53
|
"Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH",
|
|
@@ -60,7 +59,7 @@ var sign = (message, secretKey) => {
|
|
|
60
59
|
var verify = (message, signature, publicKey) => {
|
|
61
60
|
invariant(Buffer.isBuffer(message), void 0, {
|
|
62
61
|
F: __dxlog_file,
|
|
63
|
-
L:
|
|
62
|
+
L: 64,
|
|
64
63
|
S: void 0,
|
|
65
64
|
A: [
|
|
66
65
|
"Buffer.isBuffer(message)",
|
|
@@ -69,7 +68,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
69
68
|
});
|
|
70
69
|
invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH, void 0, {
|
|
71
70
|
F: __dxlog_file,
|
|
72
|
-
L:
|
|
71
|
+
L: 65,
|
|
73
72
|
S: void 0,
|
|
74
73
|
A: [
|
|
75
74
|
"Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH",
|
|
@@ -78,7 +77,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
78
77
|
});
|
|
79
78
|
invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH, void 0, {
|
|
80
79
|
F: __dxlog_file,
|
|
81
|
-
L:
|
|
80
|
+
L: 66,
|
|
82
81
|
S: void 0,
|
|
83
82
|
A: [
|
|
84
83
|
"Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH",
|
|
@@ -125,7 +124,6 @@ export {
|
|
|
125
124
|
subtleCrypto,
|
|
126
125
|
validateKeyPair,
|
|
127
126
|
verify,
|
|
128
|
-
verifySignature
|
|
129
|
-
zeroKey
|
|
127
|
+
verifySignature
|
|
130
128
|
};
|
|
131
129
|
//# 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\n/**\n * @deprecated\n */\n// TODO(burdon): Remove.\nexport const createId = (): string => PublicKey.stringify(randomBytes(32));\n\nexport const
|
|
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\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 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;;AAE3F,IAAMC,mBAAmB;AAMzB,IAAMC,WAAW,MAAcJ,UAAUK,UAAUC,YAAY,EAAA,CAAA;AAE/D,IAAMC,gBAAgB,CAACC,SAAAA;AAC5B,MAAIA,MAAM;AACRT,cAAUS,KAAKC,UAAU,IAAI,gDAAA;;;;;;;;;AAC7B,WAAOX,QAAOY,QAAQF,KAAKG,MAAM,GAAG,EAAA,CAAA;EACtC;AAGA,SAAOb,QAAOY,QAAO;AACvB;AAGO,IAAME,kBAAkB,CAACC,WAAsBC,cACpDhB,QAAOc,gBAAgB;EAAEC,WAAWA,UAAUE,SAAQ;EAAID;AAAU,CAAA;AAG/D,IAAME,eAAe,CAACC,QAC3BnB,QAAOkB,aAAahB,UAAUkB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAML,cAAc,CAACG,SAAS,OAAeX,QAAOQ,YAAYG,MAAAA;AAQhE,IAAMU,OAAO,CAACC,SAAiBN,cAAAA;AACpCf,YAAUsB,OAAOC,SAASF,OAAAA,GAAAA,QAAAA;;;;;;;;;AAC1BrB,YAAUsB,OAAOC,SAASR,SAAAA,KAAcA,UAAUL,WAAWP,mBAAAA,QAAAA;;;;;;;;;AAE7D,SAAOJ,QAAOqB,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMS,SAAS,CAACH,SAAiBI,WAAmBX,cAAAA;AACzDd,YAAUsB,OAAOC,SAASF,OAAAA,GAAAA,QAAAA;;;;;;;;;AAC1BrB,YAAUsB,OAAOC,SAASE,SAAAA,KAAcA,UAAUf,WAAWN,kBAAAA,QAAAA;;;;;;;;;AAC7DJ,YAAUsB,OAAOC,SAAST,SAAAA,KAAcA,UAAUJ,WAAWR,mBAAAA,QAAAA;;;;;;;;;AAE7D,SAAOH,QAAOyB,OAAOH,SAASI,WAAWX,SAAAA;AAC3C;;;AC9DO,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", "SIGNATURE_LENGTH", "createId", "stringify", "randomBytes", "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":8456,"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":5816},"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"],"entryPoint":"packages/common/crypto/src/index.ts","inputs":{"inject-globals:@inject-globals":{"bytesInOutput":79},"packages/common/crypto/src/keys.ts":{"bytesInOutput":2240},"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":3441}}}
|
package/dist/lib/node/index.cjs
CHANGED
|
@@ -38,8 +38,7 @@ __export(node_exports, {
|
|
|
38
38
|
subtleCrypto: () => subtleCrypto,
|
|
39
39
|
validateKeyPair: () => validateKeyPair,
|
|
40
40
|
verify: () => verify,
|
|
41
|
-
verifySignature: () => verifySignature
|
|
42
|
-
zeroKey: () => zeroKey
|
|
41
|
+
verifySignature: () => verifySignature
|
|
43
42
|
});
|
|
44
43
|
module.exports = __toCommonJS(node_exports);
|
|
45
44
|
var import_hypercore_crypto = __toESM(require("hypercore-crypto"));
|
|
@@ -49,14 +48,13 @@ var nodeCrypto = __toESM(require("node:crypto"));
|
|
|
49
48
|
var import_hypercore_crypto2 = require("hypercore-crypto");
|
|
50
49
|
var import_keys2 = require("@dxos/keys");
|
|
51
50
|
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/common/crypto/src/keys.ts";
|
|
52
|
-
var createId = () => import_keys.PublicKey.stringify(randomBytes(32));
|
|
53
51
|
var SIGNATURE_LENGTH = 64;
|
|
54
|
-
var
|
|
52
|
+
var createId = () => import_keys.PublicKey.stringify(randomBytes(32));
|
|
55
53
|
var createKeyPair = (seed) => {
|
|
56
54
|
if (seed) {
|
|
57
55
|
(0, import_invariant.invariant)(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.", {
|
|
58
56
|
F: __dxlog_file,
|
|
59
|
-
L:
|
|
57
|
+
L: 20,
|
|
60
58
|
S: void 0,
|
|
61
59
|
A: [
|
|
62
60
|
"seed.length >= 32",
|
|
@@ -76,7 +74,7 @@ var randomBytes = (length = 32) => import_hypercore_crypto.default.randomBytes(l
|
|
|
76
74
|
var sign = (message, secretKey) => {
|
|
77
75
|
(0, import_invariant.invariant)(Buffer.isBuffer(message), void 0, {
|
|
78
76
|
F: __dxlog_file,
|
|
79
|
-
L:
|
|
77
|
+
L: 50,
|
|
80
78
|
S: void 0,
|
|
81
79
|
A: [
|
|
82
80
|
"Buffer.isBuffer(message)",
|
|
@@ -85,7 +83,7 @@ var sign = (message, secretKey) => {
|
|
|
85
83
|
});
|
|
86
84
|
(0, import_invariant.invariant)(Buffer.isBuffer(secretKey) && secretKey.length === import_keys.SECRET_KEY_LENGTH, void 0, {
|
|
87
85
|
F: __dxlog_file,
|
|
88
|
-
L:
|
|
86
|
+
L: 51,
|
|
89
87
|
S: void 0,
|
|
90
88
|
A: [
|
|
91
89
|
"Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH",
|
|
@@ -97,7 +95,7 @@ var sign = (message, secretKey) => {
|
|
|
97
95
|
var verify = (message, signature, publicKey) => {
|
|
98
96
|
(0, import_invariant.invariant)(Buffer.isBuffer(message), void 0, {
|
|
99
97
|
F: __dxlog_file,
|
|
100
|
-
L:
|
|
98
|
+
L: 64,
|
|
101
99
|
S: void 0,
|
|
102
100
|
A: [
|
|
103
101
|
"Buffer.isBuffer(message)",
|
|
@@ -106,7 +104,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
106
104
|
});
|
|
107
105
|
(0, import_invariant.invariant)(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH, void 0, {
|
|
108
106
|
F: __dxlog_file,
|
|
109
|
-
L:
|
|
107
|
+
L: 65,
|
|
110
108
|
S: void 0,
|
|
111
109
|
A: [
|
|
112
110
|
"Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH",
|
|
@@ -115,7 +113,7 @@ var verify = (message, signature, publicKey) => {
|
|
|
115
113
|
});
|
|
116
114
|
(0, import_invariant.invariant)(Buffer.isBuffer(publicKey) && publicKey.length === import_keys.PUBLIC_KEY_LENGTH, void 0, {
|
|
117
115
|
F: __dxlog_file,
|
|
118
|
-
L:
|
|
116
|
+
L: 66,
|
|
119
117
|
S: void 0,
|
|
120
118
|
A: [
|
|
121
119
|
"Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH",
|
|
@@ -155,7 +153,6 @@ var verifySignature = async (key, message, signature) => {
|
|
|
155
153
|
subtleCrypto,
|
|
156
154
|
validateKeyPair,
|
|
157
155
|
verify,
|
|
158
|
-
verifySignature
|
|
159
|
-
zeroKey
|
|
156
|
+
verifySignature
|
|
160
157
|
});
|
|
161
158
|
//# 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\n/**\n * @deprecated\n */\n// TODO(burdon): Remove.\nexport const createId = (): string => PublicKey.stringify(randomBytes(32));\n\nexport const
|
|
5
|
-
"mappings": "
|
|
6
|
-
"names": ["import_hypercore_crypto", "import_keys", "createId", "PublicKey", "stringify", "randomBytes", "
|
|
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\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 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;;AFGnB,IAAMC,mBAAmB;AAMzB,IAAMC,WAAW,MAAcC,sBAAUC,UAAUC,YAAY,EAAA,CAAA;AAE/D,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,aAAad,sBAAUgB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAMP,cAAc,CAACI,SAAS,OAAeC,wBAAAA,QAAOL,YAAYI,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,WAAWR,kBAAAA,QAAAA;;;;;;;;;AAC7DO,kCAAUc,OAAOC,SAAST,SAAAA,KAAcA,UAAUL,WAAWkB,+BAAAA,QAAAA;;;;;;;;;AAE7D,SAAOjB,wBAAAA,QAAOe,OAAOJ,SAASK,WAAWZ,SAAAA;AAC3C;AC9DO,IAAMc,eAA0BC,WAAAA,UAAUC;ACM1C,IAAMC,wBAAwB,CAACjB,cAAsB,CAACO,SAAiBK,kBAC5ED,yBAAAA,QAAOJ,SAASK,WAAWvB,aAAAA,UAAU6B,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", "SIGNATURE_LENGTH", "createId", "PublicKey", "stringify", "randomBytes", "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":8456,"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":5828},"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"],"entryPoint":"packages/common/crypto/src/index.ts","inputs":{"packages/common/crypto/src/keys.ts":{"bytesInOutput":2232},"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":3334}}}
|
package/dist/types/src/keys.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { type KeyPair, PublicKey, type PublicKeyLike } from '@dxos/keys';
|
|
3
|
+
export declare const SIGNATURE_LENGTH = 64;
|
|
3
4
|
/**
|
|
4
5
|
* @deprecated
|
|
5
6
|
*/
|
|
6
7
|
export declare const createId: () => string;
|
|
7
|
-
export declare const SIGNATURE_LENGTH = 64;
|
|
8
|
-
export declare const zeroKey: () => Uint8Array;
|
|
9
8
|
export declare const createKeyPair: (seed?: Buffer) => KeyPair;
|
|
10
9
|
export declare const validateKeyPair: (publicKey: PublicKey, secretKey: Buffer) => boolean;
|
|
11
10
|
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
|
|
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;;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"}
|
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.6906e91",
|
|
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/
|
|
21
|
+
"@dxos/node-std": "0.6.3-main.6906e91",
|
|
22
|
+
"@dxos/invariant": "0.6.3-main.6906e91",
|
|
23
|
+
"@dxos/keys": "0.6.3-main.6906e91"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
26
|
"@types/crypto-js": "~4.0.2",
|
package/src/keys.ts
CHANGED
|
@@ -7,16 +7,14 @@ 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
|
+
|
|
10
12
|
/**
|
|
11
13
|
* @deprecated
|
|
12
14
|
*/
|
|
13
15
|
// TODO(burdon): Remove.
|
|
14
16
|
export const createId = (): string => PublicKey.stringify(randomBytes(32));
|
|
15
17
|
|
|
16
|
-
export const SIGNATURE_LENGTH = 64;
|
|
17
|
-
|
|
18
|
-
export const zeroKey = () => new Uint8Array(32); // TODO(burdon): Remove?
|
|
19
|
-
|
|
20
18
|
export const createKeyPair = (seed?: Buffer): KeyPair => {
|
|
21
19
|
if (seed) {
|
|
22
20
|
invariant(seed.length >= 32, 'Seedphrase too sort. Expecting length of 32.');
|