@dxos/crypto 0.1.52 → 0.1.53-main.01cbc6b

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.
@@ -1,44 +1,15 @@
1
- import "@dxos/node-std/globals"
2
-
3
- // packages/common/crypto/src/encrypt.ts
4
- import CryptoJS from "crypto-js";
5
- import assert from "@dxos/node-std/assert";
6
- var encrypt = (plaintext, passphrase, cipher = "AES") => {
7
- assert(typeof passphrase === "string");
8
- assert(typeof cipher === "string");
9
- return CryptoJS[cipher].encrypt(plaintext, passphrase).toString();
10
- };
11
- var decrypt = (ciphertext, passphrase, cipher = "AES") => {
12
- assert(typeof ciphertext === "string");
13
- assert(typeof passphrase === "string");
14
- assert(typeof cipher === "string");
15
- const bytes = CryptoJS[cipher].decrypt(ciphertext, passphrase);
16
- return bytes.toString(CryptoJS.enc.Utf8);
17
- };
18
-
19
- // packages/common/crypto/src/hash.ts
20
- import CryptoJS2 from "crypto-js";
21
- import assert2 from "@dxos/node-std/assert";
22
- var _hash = (algorithm, plaintext) => {
23
- assert2(typeof algorithm === "string");
24
- assert2(typeof plaintext === "string");
25
- return CryptoJS2[algorithm](plaintext).toString();
26
- };
27
- var sha1 = (text) => _hash("SHA1", text);
28
- var sha256 = (text) => _hash("SHA256", text);
29
- var sha512 = (text) => _hash("SHA512", text);
30
- var ripemd160 = (text) => _hash("RIPEMD160", text);
1
+ import "@dxos/node-std/globals";
31
2
 
32
3
  // packages/common/crypto/src/keys.ts
33
4
  import crypto2 from "hypercore-crypto";
34
- import assert3 from "@dxos/node-std/assert";
5
+ import invariant from "tiny-invariant";
35
6
  import { PublicKey, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from "@dxos/keys";
36
7
  var createId = () => PublicKey.stringify(randomBytes(32));
37
8
  var SIGNATURE_LENGTH = 64;
38
9
  var zeroKey = () => new Uint8Array(32);
39
10
  var createKeyPair = (seed) => {
40
11
  if (seed) {
41
- assert3(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.");
12
+ invariant(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.");
42
13
  return crypto2.keyPair(seed.slice(0, 32));
43
14
  }
44
15
  return crypto2.keyPair();
@@ -50,14 +21,14 @@ var validateKeyPair = (publicKey, secretKey) => crypto2.validateKeyPair({
50
21
  var discoveryKey = (key) => crypto2.discoveryKey(PublicKey.from(key).asBuffer().slice(1));
51
22
  var randomBytes = (length = 32) => crypto2.randomBytes(length);
52
23
  var sign = (message, secretKey) => {
53
- assert3(Buffer.isBuffer(message));
54
- assert3(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);
24
+ invariant(Buffer.isBuffer(message));
25
+ invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);
55
26
  return crypto2.sign(message, secretKey);
56
27
  };
57
28
  var verify = (message, signature, publicKey) => {
58
- assert3(Buffer.isBuffer(message));
59
- assert3(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
60
- assert3(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);
29
+ invariant(Buffer.isBuffer(message));
30
+ invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
31
+ invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);
61
32
  return crypto2.verify(message, signature, publicKey);
62
33
  };
63
34
 
@@ -91,15 +62,9 @@ export {
91
62
  SIGNATURE_LENGTH,
92
63
  createId,
93
64
  createKeyPair,
94
- decrypt,
95
65
  discoveryKey,
96
- encrypt,
97
66
  getSignatureValidator,
98
67
  randomBytes,
99
- ripemd160,
100
- sha1,
101
- sha256,
102
- sha512,
103
68
  sign,
104
69
  subtleCrypto,
105
70
  validateKeyPair,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/encrypt.ts", "../../../src/hash.ts", "../../../src/keys.ts", "../../../src/browser/subtle.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nimport CryptoJS from 'crypto-js';\nimport assert from 'node:assert';\n\n/**\n * Encrypt string plaintext to a base64-encoded string ciphertext.\n * @param plaintext\n * @param passphrase\n * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers\n * @returns ciphertext\n */\nexport const encrypt = (plaintext: string, passphrase: string, cipher = 'AES') => {\n assert(typeof passphrase === 'string');\n assert(typeof cipher === 'string');\n\n return (CryptoJS as any)[cipher].encrypt(plaintext, passphrase).toString();\n};\n\n/**\n * Decrypt from a base64-encoded string ciphertext to string plaintext.\n * @param ciphertext\n * @param passphrase\n * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers\n * @returns plaintext\n */\nexport const decrypt = (ciphertext: string, passphrase: string, cipher = 'AES') => {\n assert(typeof ciphertext === 'string');\n assert(typeof passphrase === 'string');\n assert(typeof cipher === 'string');\n\n const bytes = (CryptoJS as any)[cipher].decrypt(ciphertext, passphrase);\n return bytes.toString(CryptoJS.enc.Utf8);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport CryptoJS from 'crypto-js';\nimport assert from 'node:assert';\n\n/**\n *\n * @param algorithm\n * @param plaintext\n */\nconst _hash = (algorithm: string, plaintext: string): string => {\n assert(typeof algorithm === 'string');\n assert(typeof plaintext === 'string');\n\n return (CryptoJS as any)[algorithm](plaintext).toString();\n};\n\n/**\n * Creates a SHA-1 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const sha1 = (text: string) => _hash('SHA1', text);\n\n/**\n * Creates a SHA-256 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const sha256 = (text: string) => _hash('SHA256', text);\n\n/**\n * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const sha512 = (text: string) => _hash('SHA512', text);\n\n/**\n * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const ripemd160 = (text: string) => _hash('RIPEMD160', text);\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport crypto from 'hypercore-crypto';\nimport assert from 'node:assert';\n\nimport { KeyPair, PublicKey, 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 assert(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 assert(Buffer.isBuffer(message));\n assert(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 assert(Buffer.isBuffer(message));\n assert(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);\n assert(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 { 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": "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",
6
- "names": ["CryptoJS", "assert", "encrypt", "plaintext", "passphrase", "cipher", "toString", "decrypt", "ciphertext", "bytes", "enc", "Utf8", "CryptoJS", "assert", "_hash", "algorithm", "plaintext", "toString", "sha1", "text", "sha256", "sha512", "ripemd160", "crypto", "assert", "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", "bufferize", "verifySignature", "key", "message", "signature", "publicKey", "subtleCrypto", "importKey", "asUint8Array", "name", "namedCurve", "verify", "hash"]
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';\nimport invariant from 'tiny-invariant';\n\nimport { KeyPair, PublicKey, 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 { 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;AACnB,OAAOC,eAAe;AAEtB,SAAkBC,WAA0BC,mBAAmBC,yBAAyB;AAMjF,IAAMC,WAAW,MAAcC,UAAUC,UAAUC,YAAY,EAAA,CAAA;AAE/D,IAAMC,mBAAmB;AAEzB,IAAMC,UAAU,MAAM,IAAIC,WAAW,EAAA;AAErC,IAAMC,gBAAgB,CAACC,SAAAA;AAC5B,MAAIA,MAAM;AACRC,cAAUD,KAAKE,UAAU,IAAI,8CAAA;AAC7B,WAAOC,QAAOC,QAAQJ,KAAKK,MAAM,GAAG,EAAA,CAAA;EACtC;AAGA,SAAOF,QAAOC,QAAO;AACvB;AAGO,IAAME,kBAAkB,CAACC,WAAsBC,cACpDL,QAAOG,gBAAgB;EAAEC,WAAWA,UAAUE,SAAQ;EAAID;AAAU,CAAA;AAG/D,IAAME,eAAe,CAACC,QAC3BR,QAAOO,aAAajB,UAAUmB,KAAKD,GAAAA,EAAKF,SAAQ,EAAGJ,MAAM,CAAA,CAAA;AAOpD,IAAMV,cAAc,CAACO,SAAS,OAAeC,QAAOR,YAAYO,MAAAA;AAQhE,IAAMW,OAAO,CAACC,SAAiBN,cAAAA;AACpCP,YAAUc,OAAOC,SAASF,OAAAA,CAAAA;AAC1Bb,YAAUc,OAAOC,SAASR,SAAAA,KAAcA,UAAUN,WAAWe,iBAAAA;AAE7D,SAAOd,QAAOU,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMU,SAAS,CAACJ,SAAiBK,WAAmBZ,cAAAA;AACzDN,YAAUc,OAAOC,SAASF,OAAAA,CAAAA;AAC1Bb,YAAUc,OAAOC,SAASG,SAAAA,KAAcA,UAAUjB,WAAWN,gBAAAA;AAC7DK,YAAUc,OAAOC,SAAST,SAAAA,KAAcA,UAAUL,WAAWkB,iBAAAA;AAE7D,SAAOjB,QAAOe,OAAOJ,SAASK,WAAWZ,SAAAA;AAC3C;;;AChEO,IAAMc,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,SAAQ,GAAN;AACA,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", "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", "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":{"packages/common/crypto/src/encrypt.ts":{"bytes":3585,"imports":[{"path":"crypto-js","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","kind":"import-statement","external":true}]},"packages/common/crypto/src/hash.ts":{"bytes":3374,"imports":[{"path":"crypto-js","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","kind":"import-statement","external":true}]},"packages/common/crypto/src/keys.ts":{"bytes":7256,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/signer.ts":{"bytes":656,"imports":[]},"packages/common/crypto/src/browser/subtle.ts":{"bytes":661,"imports":[]},"packages/common/crypto/src/validator.ts":{"bytes":1388,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/verify.ts":{"bytes":2380,"imports":[{"path":"packages/common/crypto/src/browser/subtle.ts","kind":"import-statement","original":"./subtle"}]},"packages/common/crypto/src/index.ts":{"bytes":870,"imports":[{"path":"packages/common/crypto/src/encrypt.ts","kind":"import-statement","original":"./encrypt"},{"path":"packages/common/crypto/src/hash.ts","kind":"import-statement","original":"./hash"},{"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"}]}},"outputs":{"packages/common/crypto/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9186},"packages/common/crypto/dist/lib/browser/index.mjs":{"imports":[{"path":"crypto-js","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","kind":"import-statement","external":true},{"path":"crypto-js","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","kind":"import-statement","external":true},{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/node-std/assert","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","decrypt","discoveryKey","encrypt","getSignatureValidator","randomBytes","ripemd160","sha1","sha256","sha512","sign","subtleCrypto","validateKeyPair","verify","verifySignature","zeroKey"],"entryPoint":"packages/common/crypto/src/index.ts","inputs":{"packages/common/crypto/src/encrypt.ts":{"bytesInOutput":584},"packages/common/crypto/src/index.ts":{"bytesInOutput":0},"packages/common/crypto/src/hash.ts":{"bytesInOutput":446},"packages/common/crypto/src/keys.ts":{"bytesInOutput":1285},"packages/common/crypto/src/browser/subtle.ts":{"bytesInOutput":34},"packages/common/crypto/src/validator.ts":{"bytesInOutput":237},"packages/common/crypto/src/verify.ts":{"bytesInOutput":391}},"bytes":3560}}}
1
+ {"inputs":{"packages/common/crypto/src/keys.ts":{"bytes":7377,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"tiny-invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/signer.ts":{"bytes":743,"imports":[]},"packages/common/crypto/src/browser/subtle.ts":{"bytes":756,"imports":[]},"packages/common/crypto/src/validator.ts":{"bytes":1478,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/verify.ts":{"bytes":2447,"imports":[{"path":"packages/common/crypto/src/browser/subtle.ts","kind":"import-statement","original":"./subtle"}]},"packages/common/crypto/src/index.ts":{"bytes":793,"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"}]}},"outputs":{"packages/common/crypto/dist/lib/browser/index.mjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":5922},"packages/common/crypto/dist/lib/browser/index.mjs":{"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"tiny-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":{"packages/common/crypto/src/keys.ts":{"bytesInOutput":1292},"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":391}},"bytes":2394}}}
@@ -33,15 +33,9 @@ __export(src_exports, {
33
33
  SIGNATURE_LENGTH: () => SIGNATURE_LENGTH,
34
34
  createId: () => createId,
35
35
  createKeyPair: () => createKeyPair,
36
- decrypt: () => decrypt,
37
36
  discoveryKey: () => discoveryKey,
38
- encrypt: () => encrypt,
39
37
  getSignatureValidator: () => getSignatureValidator,
40
38
  randomBytes: () => randomBytes,
41
- ripemd160: () => ripemd160,
42
- sha1: () => sha1,
43
- sha256: () => sha256,
44
- sha512: () => sha512,
45
39
  sign: () => sign,
46
40
  subtleCrypto: () => subtleCrypto,
47
41
  validateKeyPair: () => validateKeyPair,
@@ -51,45 +45,16 @@ __export(src_exports, {
51
45
  });
52
46
  module.exports = __toCommonJS(src_exports);
53
47
 
54
- // packages/common/crypto/src/encrypt.ts
55
- var import_crypto_js = __toESM(require("crypto-js"));
56
- var import_node_assert = __toESM(require("node:assert"));
57
- var encrypt = (plaintext, passphrase, cipher = "AES") => {
58
- (0, import_node_assert.default)(typeof passphrase === "string");
59
- (0, import_node_assert.default)(typeof cipher === "string");
60
- return import_crypto_js.default[cipher].encrypt(plaintext, passphrase).toString();
61
- };
62
- var decrypt = (ciphertext, passphrase, cipher = "AES") => {
63
- (0, import_node_assert.default)(typeof ciphertext === "string");
64
- (0, import_node_assert.default)(typeof passphrase === "string");
65
- (0, import_node_assert.default)(typeof cipher === "string");
66
- const bytes = import_crypto_js.default[cipher].decrypt(ciphertext, passphrase);
67
- return bytes.toString(import_crypto_js.default.enc.Utf8);
68
- };
69
-
70
- // packages/common/crypto/src/hash.ts
71
- var import_crypto_js2 = __toESM(require("crypto-js"));
72
- var import_node_assert2 = __toESM(require("node:assert"));
73
- var _hash = (algorithm, plaintext) => {
74
- (0, import_node_assert2.default)(typeof algorithm === "string");
75
- (0, import_node_assert2.default)(typeof plaintext === "string");
76
- return import_crypto_js2.default[algorithm](plaintext).toString();
77
- };
78
- var sha1 = (text) => _hash("SHA1", text);
79
- var sha256 = (text) => _hash("SHA256", text);
80
- var sha512 = (text) => _hash("SHA512", text);
81
- var ripemd160 = (text) => _hash("RIPEMD160", text);
82
-
83
48
  // packages/common/crypto/src/keys.ts
84
49
  var import_hypercore_crypto = __toESM(require("hypercore-crypto"));
85
- var import_node_assert3 = __toESM(require("node:assert"));
50
+ var import_tiny_invariant = __toESM(require("tiny-invariant"));
86
51
  var import_keys = require("@dxos/keys");
87
52
  var createId = () => import_keys.PublicKey.stringify(randomBytes(32));
88
53
  var SIGNATURE_LENGTH = 64;
89
54
  var zeroKey = () => new Uint8Array(32);
90
55
  var createKeyPair = (seed) => {
91
56
  if (seed) {
92
- (0, import_node_assert3.default)(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.");
57
+ (0, import_tiny_invariant.default)(seed.length >= 32, "Seedphrase too sort. Expecting length of 32.");
93
58
  return import_hypercore_crypto.default.keyPair(seed.slice(0, 32));
94
59
  }
95
60
  return import_hypercore_crypto.default.keyPair();
@@ -101,14 +66,14 @@ var validateKeyPair = (publicKey, secretKey) => import_hypercore_crypto.default.
101
66
  var discoveryKey = (key) => import_hypercore_crypto.default.discoveryKey(import_keys.PublicKey.from(key).asBuffer().slice(1));
102
67
  var randomBytes = (length = 32) => import_hypercore_crypto.default.randomBytes(length);
103
68
  var sign = (message, secretKey) => {
104
- (0, import_node_assert3.default)(Buffer.isBuffer(message));
105
- (0, import_node_assert3.default)(Buffer.isBuffer(secretKey) && secretKey.length === import_keys.SECRET_KEY_LENGTH);
69
+ (0, import_tiny_invariant.default)(Buffer.isBuffer(message));
70
+ (0, import_tiny_invariant.default)(Buffer.isBuffer(secretKey) && secretKey.length === import_keys.SECRET_KEY_LENGTH);
106
71
  return import_hypercore_crypto.default.sign(message, secretKey);
107
72
  };
108
73
  var verify = (message, signature, publicKey) => {
109
- (0, import_node_assert3.default)(Buffer.isBuffer(message));
110
- (0, import_node_assert3.default)(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
111
- (0, import_node_assert3.default)(Buffer.isBuffer(publicKey) && publicKey.length === import_keys.PUBLIC_KEY_LENGTH);
74
+ (0, import_tiny_invariant.default)(Buffer.isBuffer(message));
75
+ (0, import_tiny_invariant.default)(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
76
+ (0, import_tiny_invariant.default)(Buffer.isBuffer(publicKey) && publicKey.length === import_keys.PUBLIC_KEY_LENGTH);
112
77
  return import_hypercore_crypto.default.verify(message, signature, publicKey);
113
78
  };
114
79
 
@@ -144,15 +109,9 @@ var verifySignature = async (key, message, signature) => {
144
109
  SIGNATURE_LENGTH,
145
110
  createId,
146
111
  createKeyPair,
147
- decrypt,
148
112
  discoveryKey,
149
- encrypt,
150
113
  getSignatureValidator,
151
114
  randomBytes,
152
- ripemd160,
153
- sha1,
154
- sha256,
155
- sha512,
156
115
  sign,
157
116
  subtleCrypto,
158
117
  validateKeyPair,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../src/index.ts", "../../../src/encrypt.ts", "../../../src/hash.ts", "../../../src/keys.ts", "../../../src/subtle.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
4
- "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from './encrypt';\nexport * from './hash';\nexport * from './keys';\nexport * from './signer';\nexport * from './subtle';\nexport * from './validator';\nexport * from './verify';\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport CryptoJS from 'crypto-js';\nimport assert from 'node:assert';\n\n/**\n * Encrypt string plaintext to a base64-encoded string ciphertext.\n * @param plaintext\n * @param passphrase\n * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers\n * @returns ciphertext\n */\nexport const encrypt = (plaintext: string, passphrase: string, cipher = 'AES') => {\n assert(typeof passphrase === 'string');\n assert(typeof cipher === 'string');\n\n return (CryptoJS as any)[cipher].encrypt(plaintext, passphrase).toString();\n};\n\n/**\n * Decrypt from a base64-encoded string ciphertext to string plaintext.\n * @param ciphertext\n * @param passphrase\n * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers\n * @returns plaintext\n */\nexport const decrypt = (ciphertext: string, passphrase: string, cipher = 'AES') => {\n assert(typeof ciphertext === 'string');\n assert(typeof passphrase === 'string');\n assert(typeof cipher === 'string');\n\n const bytes = (CryptoJS as any)[cipher].decrypt(ciphertext, passphrase);\n return bytes.toString(CryptoJS.enc.Utf8);\n};\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport CryptoJS from 'crypto-js';\nimport assert from 'node:assert';\n\n/**\n *\n * @param algorithm\n * @param plaintext\n */\nconst _hash = (algorithm: string, plaintext: string): string => {\n assert(typeof algorithm === 'string');\n assert(typeof plaintext === 'string');\n\n return (CryptoJS as any)[algorithm](plaintext).toString();\n};\n\n/**\n * Creates a SHA-1 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const sha1 = (text: string) => _hash('SHA1', text);\n\n/**\n * Creates a SHA-256 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const sha256 = (text: string) => _hash('SHA256', text);\n\n/**\n * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const sha512 = (text: string) => _hash('SHA512', text);\n\n/**\n * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.\n * @param text\n */\nexport const ripemd160 = (text: string) => _hash('RIPEMD160', text);\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport crypto from 'hypercore-crypto';\nimport assert from 'node:assert';\n\nimport { KeyPair, PublicKey, 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 assert(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 assert(Buffer.isBuffer(message));\n assert(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 assert(Buffer.isBuffer(message));\n assert(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);\n assert(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 { 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": "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",
6
- "names": ["encrypt", "plaintext", "passphrase", "cipher", "assert", "CryptoJS", "toString", "decrypt", "ciphertext", "bytes", "enc", "Utf8", "import_crypto_js", "import_node_assert", "_hash", "algorithm", "plaintext", "assert", "CryptoJS", "toString", "sha1", "text", "sha256", "sha512", "ripemd160", "import_node_assert", "createId", "PublicKey", "stringify", "randomBytes", "SIGNATURE_LENGTH", "zeroKey", "Uint8Array", "createKeyPair", "seed", "assert", "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", "import_hypercore_crypto", "import_keys", "getSignatureValidator", "publicKey", "message", "signature", "verify", "PublicKey", "bufferize", "verifySignature", "key", "message", "signature", "publicKey", "subtleCrypto", "importKey", "asUint8Array", "name", "namedCurve", "verify", "hash"]
3
+ "sources": ["../../../src/index.ts", "../../../src/keys.ts", "../../../src/subtle.ts", "../../../src/validator.ts", "../../../src/verify.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2020 DXOS.org\n//\n\nexport * from './keys';\nexport * from './signer';\nexport * from './subtle';\nexport * from './validator';\nexport * from './verify';\n", "//\n// Copyright 2020 DXOS.org\n//\n\nimport crypto from 'hypercore-crypto';\nimport invariant from 'tiny-invariant';\n\nimport { KeyPair, PublicKey, 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 { 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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;ACIA,8BAAmB;AACnB,4BAAsB;AAEtB,kBAAwF;AAMjF,IAAMA,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,8BAAAA,SAAUD,KAAKE,UAAU,IAAI,8CAAA;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,4BAAAA,SAAUc,OAAOC,SAASF,OAAAA,CAAAA;AAC1Bb,4BAAAA,SAAUc,OAAOC,SAASR,SAAAA,KAAcA,UAAUN,WAAWe,6BAAAA;AAE7D,SAAOd,wBAAAA,QAAOU,KAAKC,SAASN,SAAAA;AAC9B;AASO,IAAMU,SAAS,CAACJ,SAAiBK,WAAmBZ,cAAAA;AACzDN,4BAAAA,SAAUc,OAAOC,SAASF,OAAAA,CAAAA;AAC1Bb,4BAAAA,SAAUc,OAAOC,SAASG,SAAAA,KAAcA,UAAUjB,WAAWN,gBAAAA;AAC7DK,4BAAAA,SAAUc,OAAOC,SAAST,SAAAA,KAAcA,UAAUL,WAAWkB,6BAAAA;AAE7D,SAAOjB,wBAAAA,QAAOe,OAAOJ,SAASK,WAAWZ,SAAAA;AAC3C;;;AClEA,iBAA4B;AAErB,IAAMc,eAA0BC,qBAAUC;;;ACFjD,IAAAC,2BAAuB;AAEvB,IAAAC,eAA0B;AAMnB,IAAMC,wBAAwB,CAACC,cAAsB,CAACC,SAAiBC,kBAC5EC,iCAAOF,SAASC,WAAWE,uBAAUC,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,SAAQ,GAAN;AACA,WAAO;EACT;AAEA,SAAOJ,aAAaK,OAClB;IACEF,MAAM;IACNG,MAAM;EACR,GACAP,WACAD,WACAD,OAAAA;AAEJ;",
6
+ "names": ["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", "import_hypercore_crypto", "import_keys", "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":{"packages/common/crypto/src/encrypt.ts":{"bytes":3585,"imports":[{"path":"crypto-js","kind":"import-statement","external":true},{"path":"node:assert","kind":"import-statement","external":true}]},"packages/common/crypto/src/hash.ts":{"bytes":3374,"imports":[{"path":"crypto-js","kind":"import-statement","external":true},{"path":"node:assert","kind":"import-statement","external":true}]},"packages/common/crypto/src/keys.ts":{"bytes":7256,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"node:assert","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/signer.ts":{"bytes":656,"imports":[]},"packages/common/crypto/src/subtle.ts":{"bytes":692,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}]},"packages/common/crypto/src/validator.ts":{"bytes":1388,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/verify.ts":{"bytes":2380,"imports":[{"path":"packages/common/crypto/src/subtle.ts","kind":"import-statement","original":"./subtle"}]},"packages/common/crypto/src/index.ts":{"bytes":870,"imports":[{"path":"packages/common/crypto/src/encrypt.ts","kind":"import-statement","original":"./encrypt"},{"path":"packages/common/crypto/src/hash.ts","kind":"import-statement","original":"./hash"},{"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"}]}},"outputs":{"packages/common/crypto/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":9678},"packages/common/crypto/dist/lib/node/index.cjs":{"imports":[{"path":"crypto-js","kind":"require-call","external":true},{"path":"node:assert","kind":"require-call","external":true},{"path":"crypto-js","kind":"require-call","external":true},{"path":"node:assert","kind":"require-call","external":true},{"path":"hypercore-crypto","kind":"require-call","external":true},{"path":"node:assert","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true},{"path":"node:crypto","kind":"require-call","external":true},{"path":"hypercore-crypto","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/crypto/src/index.ts","inputs":{"packages/common/crypto/src/index.ts":{"bytesInOutput":667},"packages/common/crypto/src/encrypt.ts":{"bytesInOutput":791},"packages/common/crypto/src/hash.ts":{"bytesInOutput":546},"packages/common/crypto/src/keys.ts":{"bytesInOutput":1656},"packages/common/crypto/src/subtle.ts":{"bytesInOutput":98},"packages/common/crypto/src/validator.ts":{"bytesInOutput":272},"packages/common/crypto/src/verify.ts":{"bytesInOutput":391}},"bytes":6479}}}
1
+ {"inputs":{"packages/common/crypto/src/keys.ts":{"bytes":7377,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"tiny-invariant","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/signer.ts":{"bytes":743,"imports":[]},"packages/common/crypto/src/subtle.ts":{"bytes":779,"imports":[{"path":"node:crypto","kind":"import-statement","external":true}]},"packages/common/crypto/src/validator.ts":{"bytes":1478,"imports":[{"path":"hypercore-crypto","kind":"import-statement","external":true},{"path":"@dxos/keys","kind":"import-statement","external":true}]},"packages/common/crypto/src/verify.ts":{"bytes":2447,"imports":[{"path":"packages/common/crypto/src/subtle.ts","kind":"import-statement","original":"./subtle"}]},"packages/common/crypto/src/index.ts":{"bytes":793,"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"}]}},"outputs":{"packages/common/crypto/dist/lib/node/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":6171},"packages/common/crypto/dist/lib/node/index.cjs":{"imports":[{"path":"hypercore-crypto","kind":"require-call","external":true},{"path":"tiny-invariant","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true},{"path":"node:crypto","kind":"require-call","external":true},{"path":"hypercore-crypto","kind":"require-call","external":true},{"path":"@dxos/keys","kind":"require-call","external":true}],"exports":[],"entryPoint":"packages/common/crypto/src/index.ts","inputs":{"packages/common/crypto/src/index.ts":{"bytesInOutput":517},"packages/common/crypto/src/keys.ts":{"bytesInOutput":1673},"packages/common/crypto/src/subtle.ts":{"bytesInOutput":98},"packages/common/crypto/src/validator.ts":{"bytesInOutput":272},"packages/common/crypto/src/verify.ts":{"bytesInOutput":391}},"bytes":4865}}}
@@ -1,5 +1,3 @@
1
- export * from './encrypt';
2
- export * from './hash';
3
1
  export * from './keys';
4
2
  export * from './signer';
5
3
  export * from './subtle';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC;AAC5B,cAAc,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/crypto",
3
- "version": "0.1.52",
3
+ "version": "0.1.53-main.01cbc6b",
4
4
  "description": "Basic cross-platform crypto utils.",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -17,10 +17,10 @@
17
17
  "src"
18
18
  ],
19
19
  "dependencies": {
20
- "crypto-js": "^3.1.9-1",
21
20
  "hypercore-crypto": "^2.3.0",
22
- "@dxos/keys": "0.1.52",
23
- "@dxos/node-std": "0.1.52"
21
+ "tiny-invariant": "^1.3.1",
22
+ "@dxos/keys": "0.1.53-main.01cbc6b",
23
+ "@dxos/node-std": "0.1.53-main.01cbc6b"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@types/crypto-js": "~4.0.2",
package/src/index.ts CHANGED
@@ -2,8 +2,6 @@
2
2
  // Copyright 2020 DXOS.org
3
3
  //
4
4
 
5
- export * from './encrypt';
6
- export * from './hash';
7
5
  export * from './keys';
8
6
  export * from './signer';
9
7
  export * from './subtle';
package/src/keys.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  //
4
4
 
5
5
  import crypto from 'hypercore-crypto';
6
- import assert from 'node:assert';
6
+ import invariant from 'tiny-invariant';
7
7
 
8
8
  import { KeyPair, PublicKey, PublicKeyLike, PUBLIC_KEY_LENGTH, SECRET_KEY_LENGTH } from '@dxos/keys';
9
9
 
@@ -19,7 +19,7 @@ export const zeroKey = () => new Uint8Array(32); // TODO(burdon): Remove?
19
19
 
20
20
  export const createKeyPair = (seed?: Buffer): KeyPair => {
21
21
  if (seed) {
22
- assert(seed.length >= 32, 'Seedphrase too sort. Expecting length of 32.');
22
+ invariant(seed.length >= 32, 'Seedphrase too sort. Expecting length of 32.');
23
23
  return crypto.keyPair(seed.slice(0, 32));
24
24
  }
25
25
 
@@ -49,8 +49,8 @@ export const randomBytes = (length = 32): Buffer => crypto.randomBytes(length);
49
49
  * @returns {Buffer} signature
50
50
  */
51
51
  export const sign = (message: Buffer, secretKey: Buffer): Buffer => {
52
- assert(Buffer.isBuffer(message));
53
- assert(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);
52
+ invariant(Buffer.isBuffer(message));
53
+ invariant(Buffer.isBuffer(secretKey) && secretKey.length === SECRET_KEY_LENGTH);
54
54
 
55
55
  return crypto.sign(message, secretKey);
56
56
  };
@@ -63,9 +63,9 @@ export const sign = (message: Buffer, secretKey: Buffer): Buffer => {
63
63
  * @return {boolean}
64
64
  */
65
65
  export const verify = (message: Buffer, signature: Buffer, publicKey: Buffer): boolean => {
66
- assert(Buffer.isBuffer(message));
67
- assert(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
68
- assert(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);
66
+ invariant(Buffer.isBuffer(message));
67
+ invariant(Buffer.isBuffer(signature) && signature.length === SIGNATURE_LENGTH);
68
+ invariant(Buffer.isBuffer(publicKey) && publicKey.length === PUBLIC_KEY_LENGTH);
69
69
 
70
70
  return crypto.verify(message, signature, publicKey);
71
71
  };
@@ -1,17 +0,0 @@
1
- /**
2
- * Encrypt string plaintext to a base64-encoded string ciphertext.
3
- * @param plaintext
4
- * @param passphrase
5
- * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers
6
- * @returns ciphertext
7
- */
8
- export declare const encrypt: (plaintext: string, passphrase: string, cipher?: string) => any;
9
- /**
10
- * Decrypt from a base64-encoded string ciphertext to string plaintext.
11
- * @param ciphertext
12
- * @param passphrase
13
- * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers
14
- * @returns plaintext
15
- */
16
- export declare const decrypt: (ciphertext: string, passphrase: string, cipher?: string) => any;
17
- //# sourceMappingURL=encrypt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../../src/encrypt.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,cAAe,MAAM,cAAc,MAAM,yBAK5D,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,eAAgB,MAAM,cAAc,MAAM,yBAO7D,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=encrypt.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"encrypt.test.d.ts","sourceRoot":"","sources":["../../../src/encrypt.test.ts"],"names":[],"mappings":""}
@@ -1,21 +0,0 @@
1
- /**
2
- * Creates a SHA-1 hash of the supplied string, returned as a hexadecimal string.
3
- * @param text
4
- */
5
- export declare const sha1: (text: string) => string;
6
- /**
7
- * Creates a SHA-256 hash of the supplied string, returned as a hexadecimal string.
8
- * @param text
9
- */
10
- export declare const sha256: (text: string) => string;
11
- /**
12
- * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.
13
- * @param text
14
- */
15
- export declare const sha512: (text: string) => string;
16
- /**
17
- * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.
18
- * @param text
19
- */
20
- export declare const ripemd160: (text: string) => string;
21
- //# sourceMappingURL=hash.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../../src/hash.ts"],"names":[],"mappings":"AAmBA;;;GAGG;AACH,eAAO,MAAM,IAAI,SAAU,MAAM,WAAwB,CAAC;AAE1D;;;GAGG;AACH,eAAO,MAAM,MAAM,SAAU,MAAM,WAA0B,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,MAAM,SAAU,MAAM,WAA0B,CAAC;AAE9D;;;GAGG;AACH,eAAO,MAAM,SAAS,SAAU,MAAM,WAA6B,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=hash.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hash.test.d.ts","sourceRoot":"","sources":["../../../src/hash.test.ts"],"names":[],"mappings":""}
@@ -1,50 +0,0 @@
1
- //
2
- // Copyright 2020 DXOS.org
3
- //
4
-
5
- import { expect } from 'chai';
6
-
7
- import { test } from '@dxos/test';
8
-
9
- import { decrypt, encrypt } from './encrypt';
10
-
11
- // Using JSON test data due to its popularity. Any text should work.
12
- const testJsonData = `{"keys":[{"added":"2020-02-04T22:22:37-07:00","created":"2020-02-04T22:22:37-07:00","hint":false,
13
- "key":"9d902af1d1d6f42e2c6736cea4191b05368f1df77181bc8d798d8db946c48cd4","own":true,"publicKey":"9d902af1d1d6f42e2c6736
14
- cea4191b05368f1df77181bc8d798d8db946c48cd4","secretKey":"1fb50514ae9edb4cadc448a60f345f69459616f3ad5e9d74d5a8c920b8b5f7
15
- 409d902af1d1d6f42e2c6736cea4191b05368f1df77181bc8d798d8db946c48cd4","trusted":true,"type":"IDENTITY"},{"added":"2020-02
16
- -04T22:22:37-07:00","created":"2020-02-04T22:22:37-07:00","hint":false,"key":"1a9cd591afb12920546c2e35ebc341dd54f30c261
17
- 90118998596991f3fd1af5c","own":true,"publicKey":"1a9cd591afb12920546c2e35ebc341dd54f30c26190118998596991f3fd1af5c","sec
18
- retKey":"51885b933a7fc50f7e8e94b34336497b1030d7e5b112ad6c7721bc1f34766a4a1a9cd591afb12920546c2e35ebc341dd54f30c26190118
19
- 998596991f3fd1af5c","trusted":true,"type":"PSEUDONYM"},{"added":"2020-02-04T22:22:37-07:00","created":"2020-02-04T22:22
20
- :37-07:00","hint":false,"key":"6047e56f37dfd50a24590acb861dd5095955fedbd87d133f06b576146a3305ab","own":true,"publicKey"
21
- :"6047e56f37dfd50a24590acb861dd5095955fedbd87d133f06b576146a3305ab","secretKey":"6737bec794cc8547dc5062afe70c01522b94c0
22
- d945729ff8cf9e9669d09366436047e56f37dfd50a24590acb861dd5095955fedbd87d133f06b576146a3305ab","trusted":true,"type":"DEVI
23
- CE"},{"added":"2020-02-04T22:22:37-07:00","created":"2020-02-04T22:22:37-07:00","hint":false,"key":"2dd57ada7744cf5db66
24
- d8183505086e9b3e1853e7af79857e443299abe103b58","own":true,"publicKey":"2dd57ada7744cf5db66d8183505086e9b3e1853e7af79857
25
- e443299abe103b58","secretKey":"4c5c53e97267bcf295bb91eaaf83d69b619a3df195ec085b4ca7e41cbf88f2e12dd57ada7744cf5db66d8183
26
- 505086e9b3e1853e7af79857e443299abe103b58","trusted":true,"type":"DEVICE_IDENTITY"},{"added":"2020-02-04T22:22:37-07:00"
27
- ,"created":"2020-02-04T22:22:37-07:00","hint":false,"key":"6fbe6aacfd25e7324b7420f3d38b93316eed6097d58d261f6f802d33903b
28
- b7c9","own":true,"publicKey":"6fbe6aacfd25e7324b7420f3d38b93316eed6097d58d261f6f802d33903bb7c9","secretKey":"67aeedd8fc
29
- d0555d455097daafc777103697f96e3697847d30ea802057d4795f6fbe6aacfd25e7324b7420f3d38b93316eed6097d58d261f6f802d33903bb7c9"
30
- ,"trusted":true,"type":"DEVICE_PSEUDONYM"},{"added":"2020-02-04T22:22:37-07:00","created":"2020-02-04T22:22:37-07:00","
31
- hint":false,"key":"0d7a22f56bc1e398a5611f592d6a41fcc0f93cf233437d5f3a7f760de2b2bc75","own":true,"publicKey":"0d7a22f56b
32
- c1e398a5611f592d6a41fcc0f93cf233437d5f3a7f760de2b2bc75","secretKey":"279e5ee1ec0b45d3505ab8a3fc79f1b2d9f71667ac311e36e4
33
- d237bca84e68920d7a22f56bc1e398a5611f592d6a41fcc0f93cf233437d5f3a7f760de2b2bc75","trusted":true,"type":"SPACE"},{"added"
34
- :"2020-02-04T22:22:37-07:00","created":"2020-02-04T22:22:37-07:00","hint":false,"key":"c8e865ae089f4cb5add830b67fa676dd
35
- c0e813f5333272633b305b359115a6b6","own":true,"publicKey":"c8e865ae089f4cb5add830b67fa676ddc0e813f5333272633b305b359115a
36
- 6b6","secretKey":"1a211268f48fe9fc4d6a294b320bc1f92a592631d0bbdb5c94a8a8626a150a2dc8e865ae089f4cb5add830b67fa676ddc0e81
37
- 3f5333272633b305b359115a6b6","trusted":true,"type":"FEED"},{"added":"2020-02-04T22:22:37-07:00","created":"2020-02-04T2
38
- 2:22:37-07:00","hint":false,"key":"4f5e87626c62c5f61873d1e7c995c1b7e7e66e7600b454fa370a93d18f4a9a6f","own":true,"public
39
- Key":"4f5e87626c62c5f61873d1e7c995c1b7e7e66e7600b454fa370a93d18f4a9a6f","secretKey":"94a4ce17823895e25fa637ce6aa9ef9bcd
40
- 8c13d81376b61fb252db32d1002bba4f5e87626c62c5f61873d1e7c995c1b7e7e66e7600b454fa370a93d18f4a9a6f","trusted":true,"type":"
41
- UNKNOWN"}]}';`;
42
-
43
- test('Bulk encryption/decryption', () => {
44
- const original = testJsonData;
45
-
46
- const origCrypt = encrypt(original, 'secret12');
47
- const copy = decrypt(origCrypt, 'secret12');
48
-
49
- expect(original).to.equal(copy);
50
- });
package/src/encrypt.ts DELETED
@@ -1,36 +0,0 @@
1
- //
2
- // Copyright 2020 DXOS.org
3
- //
4
-
5
- import CryptoJS from 'crypto-js';
6
- import assert from 'node:assert';
7
-
8
- /**
9
- * Encrypt string plaintext to a base64-encoded string ciphertext.
10
- * @param plaintext
11
- * @param passphrase
12
- * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers
13
- * @returns ciphertext
14
- */
15
- export const encrypt = (plaintext: string, passphrase: string, cipher = 'AES') => {
16
- assert(typeof passphrase === 'string');
17
- assert(typeof cipher === 'string');
18
-
19
- return (CryptoJS as any)[cipher].encrypt(plaintext, passphrase).toString();
20
- };
21
-
22
- /**
23
- * Decrypt from a base64-encoded string ciphertext to string plaintext.
24
- * @param ciphertext
25
- * @param passphrase
26
- * @param cipher see https://cryptojs.gitbook.io/docs/#ciphers
27
- * @returns plaintext
28
- */
29
- export const decrypt = (ciphertext: string, passphrase: string, cipher = 'AES') => {
30
- assert(typeof ciphertext === 'string');
31
- assert(typeof passphrase === 'string');
32
- assert(typeof cipher === 'string');
33
-
34
- const bytes = (CryptoJS as any)[cipher].decrypt(ciphertext, passphrase);
35
- return bytes.toString(CryptoJS.enc.Utf8);
36
- };
package/src/hash.test.ts DELETED
@@ -1,34 +0,0 @@
1
- // DXOS testing browser.
2
-
3
- //
4
- // Copyright 2020 DXOS.org
5
- //
6
-
7
- import { expect } from 'chai';
8
-
9
- import { test } from '@dxos/test';
10
-
11
- import { ripemd160, sha1, sha256, sha512 } from './hash';
12
-
13
- test('SHA1', () => {
14
- const hashed = sha1('Test message');
15
- expect(hashed).to.equal('8de39b4722207f2da2a831e8734f02e740c15738');
16
- });
17
-
18
- test('SHA256', () => {
19
- const hashed = sha256('Test message');
20
- expect(hashed).to.equal('c0719e9a8d5d838d861dc6f675c899d2b309a3a65bb9fe6b11e5afcbf9a2c0b1');
21
- });
22
-
23
- test('SHA512', () => {
24
- const hashed = sha512('Test message');
25
- expect(hashed).to.equal(
26
- '48418241a4d779508a6b98e623328a68f7f0bf27fd101bb2c89384827bfc0740' +
27
- '3fefd5855576f1824fcd7acd233541514240c2bcf0fa9732ebb8f166a7c38bdf',
28
- );
29
- });
30
-
31
- test('RIPEMD160', () => {
32
- const hashed = ripemd160('Test message');
33
- expect(hashed).to.equal('24b83e2457880c95d2e3c3c6b98e24ab170b1e11');
34
- });
package/src/hash.ts DELETED
@@ -1,42 +0,0 @@
1
- //
2
- // Copyright 2020 DXOS.org
3
- //
4
-
5
- import CryptoJS from 'crypto-js';
6
- import assert from 'node:assert';
7
-
8
- /**
9
- *
10
- * @param algorithm
11
- * @param plaintext
12
- */
13
- const _hash = (algorithm: string, plaintext: string): string => {
14
- assert(typeof algorithm === 'string');
15
- assert(typeof plaintext === 'string');
16
-
17
- return (CryptoJS as any)[algorithm](plaintext).toString();
18
- };
19
-
20
- /**
21
- * Creates a SHA-1 hash of the supplied string, returned as a hexadecimal string.
22
- * @param text
23
- */
24
- export const sha1 = (text: string) => _hash('SHA1', text);
25
-
26
- /**
27
- * Creates a SHA-256 hash of the supplied string, returned as a hexadecimal string.
28
- * @param text
29
- */
30
- export const sha256 = (text: string) => _hash('SHA256', text);
31
-
32
- /**
33
- * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.
34
- * @param text
35
- */
36
- export const sha512 = (text: string) => _hash('SHA512', text);
37
-
38
- /**
39
- * Creates a SHA-512 hash of the supplied string, returned as a hexadecimal string.
40
- * @param text
41
- */
42
- export const ripemd160 = (text: string) => _hash('RIPEMD160', text);