@fleet-sdk/crypto 0.2.1 → 0.2.3

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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # @fleet-sdk/crypto
2
2
 
3
+ ## 0.2.3
4
+
5
+ ### Patch Changes
6
+
7
+ - 1e0edd4: Fix missing `types` export in `package.json`
8
+ - 65d5b33: Hex encoder performance improvements.
9
+ - 514dcd2: Fix wrong Base16 hash input encoding.
10
+ - Updated dependencies [1e0edd4]
11
+ - @fleet-sdk/common@0.2.3
12
+
13
+ ## 0.2.2
14
+
15
+ ### Patch Changes
16
+
17
+ - Updated dependencies [9cbd414]
18
+ - @fleet-sdk/common@0.2.2
19
+
3
20
  ## 0.2.1
4
21
 
5
22
  ### Patch Changes
package/dist/index.cjs.js CHANGED
@@ -7,13 +7,11 @@ var base = require('@scure/base');
7
7
  var common = require('@fleet-sdk/common');
8
8
 
9
9
  // src/index.ts
10
- var blake2b256 = (message) => blake2b.blake2b(message, { dkLen: 32 });
11
- var sha256 = sha256$1.sha256;
12
10
  var HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
13
11
  function bytesToHex(bytes) {
14
12
  common.assertInstanceOf(bytes, Uint8Array);
15
13
  let hex2 = "";
16
- for (let i = 0; i < bytes.length; i++) {
14
+ for (let i = 0, len = bytes.length; i < len; i++) {
17
15
  hex2 += HEXES[bytes[i]];
18
16
  }
19
17
  return hex2;
@@ -22,15 +20,23 @@ function hexToBytes(hex2) {
22
20
  common.assertTypeOf(hex2, "string");
23
21
  common.assert(hex2.length % 2 === 0, "Invalid hex padding.");
24
22
  const bytes = new Uint8Array(hex2.length / 2);
25
- for (let i = 0; i < bytes.length; i++) {
26
- const j = i * 2;
27
- const hexByte = hex2.slice(j, j + 2);
28
- const byte = parseInt(hexByte, 16);
29
- common.assert(!isNaN(byte) && byte >= 0, "Invalid byte sequence.");
30
- bytes[i] = byte;
23
+ for (let i = 0, j = 0, len = bytes.length; i < len; i++) {
24
+ const n1 = charCodeToBase16(hex2.charCodeAt(j++));
25
+ const n2 = charCodeToBase16(hex2.charCodeAt(j++));
26
+ bytes[i] = n1 * 16 + n2;
31
27
  }
32
28
  return bytes;
33
29
  }
30
+ function charCodeToBase16(char) {
31
+ if (char >= 48 /* ZERO */ && char <= 57 /* NINE */) {
32
+ return char - 48 /* ZERO */;
33
+ } else if (char >= 65 /* A_UP */ && char <= 70 /* F_UP */) {
34
+ return char - (65 /* A_UP */ - 10);
35
+ } else if (char >= 97 /* A_LO */ && char <= 102 /* F_LO */) {
36
+ return char - (97 /* A_LO */ - 10);
37
+ }
38
+ throw new Error("Invalid byte sequence.");
39
+ }
34
40
  var hex = {
35
41
  encode: bytesToHex,
36
42
  decode: hexToBytes
@@ -53,6 +59,19 @@ var base58check = base.base58check(sha256);
53
59
  var base58 = base.base58;
54
60
  var base64 = base.base64;
55
61
 
62
+ // src/hashes.ts
63
+ function ensureBytes(input) {
64
+ if (input instanceof Uint8Array)
65
+ return input;
66
+ return hex.decode(input);
67
+ }
68
+ function blake2b256(message) {
69
+ return blake2b.blake2b(ensureBytes(message), { dkLen: 32 });
70
+ }
71
+ function sha256(message) {
72
+ return sha256$1.sha256(ensureBytes(message));
73
+ }
74
+
56
75
  // src/index.ts
57
76
  var randomBytes = utils.randomBytes;
58
77
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/hashes.ts","../src/coders/index.ts","../src/coders/hex.ts","../src/coders/utf8.ts"],"names":["hex","assertInstanceOf","assertTypeOf"],"mappings":";AAAA,SAAS,eAAe,wBAAwB;;;ACAhD,SAAS,eAAe;AACxB,SAAS,UAAU,mBAAmB;AAG/B,IAAM,aAAa,CAAC,YAAwB,QAAQ,SAAS,EAAE,OAAO,GAAG,CAAC;AAC1E,IAAM,SAAS;;;ACLtB;AAAA,EACE,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AAAA,OACL;;;ACJP,SAAS,QAAQ,kBAAkB,oBAAoB;AAGvD,IAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAEnF,SAAS,WAAW,OAA2B;AAC7C,mBAAiB,OAAO,UAAU;AAElC,MAAIA,OAAM;AACV,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,IAAAA,QAAO,MAAM,MAAM,CAAC,CAAC;AAAA,EACvB;AAEA,SAAOA;AACT;AAEA,SAAS,WAAWA,MAAyB;AAC3C,eAAaA,MAAK,QAAQ;AAC1B,SAAOA,KAAI,SAAS,MAAM,GAAG,sBAAsB;AAEnD,QAAM,QAAQ,IAAI,WAAWA,KAAI,SAAS,CAAC;AAC3C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,IAAI,IAAI;AACd,UAAM,UAAUA,KAAI,MAAM,GAAG,IAAI,CAAC;AAClC,UAAM,OAAO,SAAS,SAAS,EAAE;AACjC,WAAO,CAAC,MAAM,IAAI,KAAK,QAAQ,GAAG,wBAAwB;AAE1D,UAAM,CAAC,IAAI;AAAA,EACb;AAEA,SAAO;AACT;AAEO,IAAM,MAAkB;AAAA,EAC7B,QAAQ;AAAA,EACR,QAAQ;AACV;;;ACpCA,SAAS,oBAAAC,mBAAkB,gBAAAC,qBAAoB;AAG/C,SAAS,YAAY,OAA2B;AAC9C,EAAAD,kBAAiB,OAAO,UAAU;AAElC,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK;AACvC;AAEA,SAAS,YAAY,KAAyB;AAC5C,EAAAC,cAAa,KAAK,QAAQ;AAE1B,SAAO,IAAI,WAAW,IAAI,YAAY,EAAE,OAAO,GAAG,CAAC;AACrD;AAEO,IAAM,OAAmB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AACV;;;AFVO,IAAM,cAAc,iBAAiB,MAAM;AAC3C,IAAM,SAAS;AACf,IAAM,SAAS;;;AFLf,IAAM,cAAc","sourcesContent":["import { randomBytes as nobleRandomBytes } from \"@noble/hashes/utils\";\n\n/**\n * Secure PRNG from \"@noble/hashes\". Uses crypto.getRandomValues, which defers to OS.\n */\nexport const randomBytes = nobleRandomBytes as (bytesLength?: number) => Uint8Array;\n\nexport * from \"./hashes\";\nexport * from \"./types\";\nexport * from \"./coders\";\n","import { blake2b } from \"@noble/hashes/blake2b\";\nimport { sha256 as nobleSha256 } from \"@noble/hashes/sha256\";\nimport { BytesInput } from \"./types\";\n\nexport const blake2b256 = (message: BytesInput) => blake2b(message, { dkLen: 32 });\nexport const sha256 = nobleSha256 as (message: BytesInput) => Uint8Array;\n","import {\n base58check as base58checkCoder,\n base58 as base58Coder,\n base64 as base64Coder\n} from \"@scure/base\";\nimport { sha256 } from \"../hashes\";\nimport { BytesCoder } from \"../types\";\n\nexport const base58check = base58checkCoder(sha256);\nexport const base58 = base58Coder as BytesCoder;\nexport const base64 = base64Coder as BytesCoder;\n\n// export const base64utf8: BytesCoder = {\n// encode: (data: Uint8Array) => utf8.decode()\n// }\n\nexport { hex } from \"./hex\";\nexport { utf8 } from \"./utf8\";\n","import { assert, assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nconst HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nfunction bytesToHex(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n let hex = \"\";\n for (let i = 0; i < bytes.length; i++) {\n hex += HEXES[bytes[i]];\n }\n\n return hex;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n assertTypeOf(hex, \"string\");\n assert(hex.length % 2 === 0, \"Invalid hex padding.\");\n\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = parseInt(hexByte, 16);\n assert(!isNaN(byte) && byte >= 0, \"Invalid byte sequence.\");\n\n bytes[i] = byte;\n }\n\n return bytes;\n}\n\nexport const hex: BytesCoder = {\n encode: bytesToHex,\n decode: hexToBytes\n};\n","import { assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nfunction bytesToUtf8(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n return new TextDecoder().decode(bytes);\n}\n\nfunction utf8ToBytes(str: string): Uint8Array {\n assertTypeOf(str, \"string\");\n\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport const utf8: BytesCoder = {\n encode: bytesToUtf8,\n decode: utf8ToBytes\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/hashes.ts","../src/coders/index.ts","../src/coders/hex.ts","../src/coders/utf8.ts"],"names":["hex","assertInstanceOf","assertTypeOf"],"mappings":";AAAA,SAAS,eAAe,wBAAwB;;;ACAhD,SAAS,eAAe;AACxB,SAAS,UAAU,eAAe;;;ACDlC;AAAA,EACE,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AAAA,OACL;;;ACJP,SAAS,QAAQ,kBAAkB,oBAAoB;AAGvD,IAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAWnF,SAAS,WAAW,OAA2B;AAC7C,mBAAiB,OAAO,UAAU;AAElC,MAAIA,OAAM;AACV,WAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,IAAAA,QAAO,MAAM,MAAM,CAAC,CAAC;AAAA,EACvB;AAEA,SAAOA;AACT;AAEA,SAAS,WAAWA,MAAyB;AAC3C,eAAaA,MAAK,QAAQ;AAC1B,SAAOA,KAAI,SAAS,MAAM,GAAG,sBAAsB;AAEnD,QAAM,QAAQ,IAAI,WAAWA,KAAI,SAAS,CAAC;AAC3C,WAAS,IAAI,GAAG,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AACvD,UAAM,KAAK,iBAAiBA,KAAI,WAAW,GAAG,CAAC;AAC/C,UAAM,KAAK,iBAAiBA,KAAI,WAAW,GAAG,CAAC;AAC/C,UAAM,CAAC,IAAI,KAAK,KAAK;AAAA,EACvB;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAc;AACtC,MAAI,QAAQ,iBAAoB,QAAQ,eAAkB;AACxD,WAAO,OAAO;AAAA,EAChB,WAAW,QAAQ,iBAAoB,QAAQ,eAAkB;AAC/D,WAAO,QAAQ,gBAAmB;AAAA,EACpC,WAAW,QAAQ,iBAAoB,QAAQ,gBAAkB;AAC/D,WAAO,QAAQ,gBAAmB;AAAA,EACpC;AAEA,QAAM,IAAI,MAAM,wBAAwB;AAC1C;AAEO,IAAM,MAAkB;AAAA,EAC7B,QAAQ;AAAA,EACR,QAAQ;AACV;;;ACtDA,SAAS,oBAAAC,mBAAkB,gBAAAC,qBAAoB;AAG/C,SAAS,YAAY,OAA2B;AAC9C,EAAAD,kBAAiB,OAAO,UAAU;AAElC,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK;AACvC;AAEA,SAAS,YAAY,KAAyB;AAC5C,EAAAC,cAAa,KAAK,QAAQ;AAE1B,SAAO,IAAI,WAAW,IAAI,YAAY,EAAE,OAAO,GAAG,CAAC;AACrD;AAEO,IAAM,OAAmB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AACV;;;AFVO,IAAM,cAAc,iBAAiB,MAAM;AAC3C,IAAM,SAAS;AACf,IAAM,SAAS;;;ADLtB,SAAS,YAAY,OAA+B;AAClD,MAAI,iBAAiB;AAAY,WAAO;AAExC,SAAO,IAAI,OAAO,KAAK;AACzB;AAEO,SAAS,WAAW,SAAiC;AAC1D,SAAO,QAAQ,YAAY,OAAO,GAAG,EAAE,OAAO,GAAG,CAAC;AACpD;AAEO,SAAS,OAAO,SAAiC;AACtD,SAAO,QAAQ,YAAY,OAAO,CAAC;AACrC;;;ADZO,IAAM,cAAc","sourcesContent":["import { randomBytes as nobleRandomBytes } from \"@noble/hashes/utils\";\n\n/**\n * Secure PRNG from \"@noble/hashes\". Uses crypto.getRandomValues, which defers to OS.\n */\nexport const randomBytes = nobleRandomBytes as (bytesLength?: number) => Uint8Array;\n\nexport * from \"./hashes\";\nexport * from \"./types\";\nexport * from \"./coders\";\n","import { blake2b } from \"@noble/hashes/blake2b\";\nimport { sha256 as _sha256 } from \"@noble/hashes/sha256\";\nimport { hex } from \"./coders\";\nimport { BytesInput } from \"./types\";\n\nfunction ensureBytes(input: BytesInput): Uint8Array {\n if (input instanceof Uint8Array) return input;\n\n return hex.decode(input);\n}\n\nexport function blake2b256(message: BytesInput): Uint8Array {\n return blake2b(ensureBytes(message), { dkLen: 32 });\n}\n\nexport function sha256(message: BytesInput): Uint8Array {\n return _sha256(ensureBytes(message));\n}\n","import {\n base58check as base58checkCoder,\n base58 as base58Coder,\n base64 as base64Coder\n} from \"@scure/base\";\nimport { sha256 } from \"../hashes\";\nimport { BytesCoder } from \"../types\";\n\nexport const base58check = base58checkCoder(sha256);\nexport const base58 = base58Coder as BytesCoder;\nexport const base64 = base64Coder as BytesCoder;\n\nexport { hex } from \"./hex\";\nexport { utf8 } from \"./utf8\";\n","import { assert, assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nconst HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nconst enum HexCharCode {\n ZERO = 48, // 0\n NINE = 57, // 9\n A_UP = 65, // A\n F_UP = 70, // F\n A_LO = 97, // a\n F_LO = 102 // f\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n let hex = \"\";\n for (let i = 0, len = bytes.length; i < len; i++) {\n hex += HEXES[bytes[i]];\n }\n\n return hex;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n assertTypeOf(hex, \"string\");\n assert(hex.length % 2 === 0, \"Invalid hex padding.\");\n\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0, j = 0, len = bytes.length; i < len; i++) {\n const n1 = charCodeToBase16(hex.charCodeAt(j++));\n const n2 = charCodeToBase16(hex.charCodeAt(j++));\n bytes[i] = n1 * 16 + n2;\n }\n\n return bytes;\n}\n\nfunction charCodeToBase16(char: number) {\n if (char >= HexCharCode.ZERO && char <= HexCharCode.NINE) {\n return char - HexCharCode.ZERO;\n } else if (char >= HexCharCode.A_UP && char <= HexCharCode.F_UP) {\n return char - (HexCharCode.A_UP - 10);\n } else if (char >= HexCharCode.A_LO && char <= HexCharCode.F_LO) {\n return char - (HexCharCode.A_LO - 10);\n }\n\n throw new Error(\"Invalid byte sequence.\");\n}\n\nexport const hex: BytesCoder = {\n encode: bytesToHex,\n decode: hexToBytes\n};\n","import { assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nfunction bytesToUtf8(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n return new TextDecoder().decode(bytes);\n}\n\nfunction utf8ToBytes(str: string): Uint8Array {\n assertTypeOf(str, \"string\");\n\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport const utf8: BytesCoder = {\n encode: bytesToUtf8,\n decode: utf8ToBytes\n};\n"]}
package/dist/index.d.mts CHANGED
@@ -16,8 +16,8 @@ interface BytesCoder extends Coder<Uint8Array, string> {
16
16
  decode: (str: string) => Uint8Array;
17
17
  }
18
18
 
19
- declare const blake2b256: (message: BytesInput) => Uint8Array;
20
- declare const sha256: (message: BytesInput) => Uint8Array;
19
+ declare function blake2b256(message: BytesInput): Uint8Array;
20
+ declare function sha256(message: BytesInput): Uint8Array;
21
21
 
22
22
  declare const hex: BytesCoder;
23
23
 
package/dist/index.d.ts CHANGED
@@ -16,8 +16,8 @@ interface BytesCoder extends Coder<Uint8Array, string> {
16
16
  decode: (str: string) => Uint8Array;
17
17
  }
18
18
 
19
- declare const blake2b256: (message: BytesInput) => Uint8Array;
20
- declare const sha256: (message: BytesInput) => Uint8Array;
19
+ declare function blake2b256(message: BytesInput): Uint8Array;
20
+ declare function sha256(message: BytesInput): Uint8Array;
21
21
 
22
22
  declare const hex: BytesCoder;
23
23
 
package/dist/index.esm.js CHANGED
@@ -5,13 +5,11 @@ import { base58check as base58check$1, base58 as base58$1, base64 as base64$1 }
5
5
  import { assertInstanceOf, assertTypeOf, assert } from '@fleet-sdk/common';
6
6
 
7
7
  // src/index.ts
8
- var blake2b256 = (message) => blake2b(message, { dkLen: 32 });
9
- var sha256 = sha256$1;
10
8
  var HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
11
9
  function bytesToHex(bytes) {
12
10
  assertInstanceOf(bytes, Uint8Array);
13
11
  let hex2 = "";
14
- for (let i = 0; i < bytes.length; i++) {
12
+ for (let i = 0, len = bytes.length; i < len; i++) {
15
13
  hex2 += HEXES[bytes[i]];
16
14
  }
17
15
  return hex2;
@@ -20,15 +18,23 @@ function hexToBytes(hex2) {
20
18
  assertTypeOf(hex2, "string");
21
19
  assert(hex2.length % 2 === 0, "Invalid hex padding.");
22
20
  const bytes = new Uint8Array(hex2.length / 2);
23
- for (let i = 0; i < bytes.length; i++) {
24
- const j = i * 2;
25
- const hexByte = hex2.slice(j, j + 2);
26
- const byte = parseInt(hexByte, 16);
27
- assert(!isNaN(byte) && byte >= 0, "Invalid byte sequence.");
28
- bytes[i] = byte;
21
+ for (let i = 0, j = 0, len = bytes.length; i < len; i++) {
22
+ const n1 = charCodeToBase16(hex2.charCodeAt(j++));
23
+ const n2 = charCodeToBase16(hex2.charCodeAt(j++));
24
+ bytes[i] = n1 * 16 + n2;
29
25
  }
30
26
  return bytes;
31
27
  }
28
+ function charCodeToBase16(char) {
29
+ if (char >= 48 /* ZERO */ && char <= 57 /* NINE */) {
30
+ return char - 48 /* ZERO */;
31
+ } else if (char >= 65 /* A_UP */ && char <= 70 /* F_UP */) {
32
+ return char - (65 /* A_UP */ - 10);
33
+ } else if (char >= 97 /* A_LO */ && char <= 102 /* F_LO */) {
34
+ return char - (97 /* A_LO */ - 10);
35
+ }
36
+ throw new Error("Invalid byte sequence.");
37
+ }
32
38
  var hex = {
33
39
  encode: bytesToHex,
34
40
  decode: hexToBytes
@@ -51,6 +57,19 @@ var base58check = base58check$1(sha256);
51
57
  var base58 = base58$1;
52
58
  var base64 = base64$1;
53
59
 
60
+ // src/hashes.ts
61
+ function ensureBytes(input) {
62
+ if (input instanceof Uint8Array)
63
+ return input;
64
+ return hex.decode(input);
65
+ }
66
+ function blake2b256(message) {
67
+ return blake2b(ensureBytes(message), { dkLen: 32 });
68
+ }
69
+ function sha256(message) {
70
+ return sha256$1(ensureBytes(message));
71
+ }
72
+
54
73
  // src/index.ts
55
74
  var randomBytes = randomBytes$1;
56
75
 
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/hashes.ts","../src/coders/index.ts","../src/coders/hex.ts","../src/coders/utf8.ts"],"names":["hex","assertInstanceOf","assertTypeOf"],"mappings":";AAAA,SAAS,eAAe,wBAAwB;;;ACAhD,SAAS,eAAe;AACxB,SAAS,UAAU,mBAAmB;AAG/B,IAAM,aAAa,CAAC,YAAwB,QAAQ,SAAS,EAAE,OAAO,GAAG,CAAC;AAC1E,IAAM,SAAS;;;ACLtB;AAAA,EACE,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AAAA,OACL;;;ACJP,SAAS,QAAQ,kBAAkB,oBAAoB;AAGvD,IAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAEnF,SAAS,WAAW,OAA2B;AAC7C,mBAAiB,OAAO,UAAU;AAElC,MAAIA,OAAM;AACV,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,IAAAA,QAAO,MAAM,MAAM,CAAC,CAAC;AAAA,EACvB;AAEA,SAAOA;AACT;AAEA,SAAS,WAAWA,MAAyB;AAC3C,eAAaA,MAAK,QAAQ;AAC1B,SAAOA,KAAI,SAAS,MAAM,GAAG,sBAAsB;AAEnD,QAAM,QAAQ,IAAI,WAAWA,KAAI,SAAS,CAAC;AAC3C,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,IAAI,IAAI;AACd,UAAM,UAAUA,KAAI,MAAM,GAAG,IAAI,CAAC;AAClC,UAAM,OAAO,SAAS,SAAS,EAAE;AACjC,WAAO,CAAC,MAAM,IAAI,KAAK,QAAQ,GAAG,wBAAwB;AAE1D,UAAM,CAAC,IAAI;AAAA,EACb;AAEA,SAAO;AACT;AAEO,IAAM,MAAkB;AAAA,EAC7B,QAAQ;AAAA,EACR,QAAQ;AACV;;;ACpCA,SAAS,oBAAAC,mBAAkB,gBAAAC,qBAAoB;AAG/C,SAAS,YAAY,OAA2B;AAC9C,EAAAD,kBAAiB,OAAO,UAAU;AAElC,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK;AACvC;AAEA,SAAS,YAAY,KAAyB;AAC5C,EAAAC,cAAa,KAAK,QAAQ;AAE1B,SAAO,IAAI,WAAW,IAAI,YAAY,EAAE,OAAO,GAAG,CAAC;AACrD;AAEO,IAAM,OAAmB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AACV;;;AFVO,IAAM,cAAc,iBAAiB,MAAM;AAC3C,IAAM,SAAS;AACf,IAAM,SAAS;;;AFLf,IAAM,cAAc","sourcesContent":["import { randomBytes as nobleRandomBytes } from \"@noble/hashes/utils\";\n\n/**\n * Secure PRNG from \"@noble/hashes\". Uses crypto.getRandomValues, which defers to OS.\n */\nexport const randomBytes = nobleRandomBytes as (bytesLength?: number) => Uint8Array;\n\nexport * from \"./hashes\";\nexport * from \"./types\";\nexport * from \"./coders\";\n","import { blake2b } from \"@noble/hashes/blake2b\";\nimport { sha256 as nobleSha256 } from \"@noble/hashes/sha256\";\nimport { BytesInput } from \"./types\";\n\nexport const blake2b256 = (message: BytesInput) => blake2b(message, { dkLen: 32 });\nexport const sha256 = nobleSha256 as (message: BytesInput) => Uint8Array;\n","import {\n base58check as base58checkCoder,\n base58 as base58Coder,\n base64 as base64Coder\n} from \"@scure/base\";\nimport { sha256 } from \"../hashes\";\nimport { BytesCoder } from \"../types\";\n\nexport const base58check = base58checkCoder(sha256);\nexport const base58 = base58Coder as BytesCoder;\nexport const base64 = base64Coder as BytesCoder;\n\n// export const base64utf8: BytesCoder = {\n// encode: (data: Uint8Array) => utf8.decode()\n// }\n\nexport { hex } from \"./hex\";\nexport { utf8 } from \"./utf8\";\n","import { assert, assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nconst HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nfunction bytesToHex(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n let hex = \"\";\n for (let i = 0; i < bytes.length; i++) {\n hex += HEXES[bytes[i]];\n }\n\n return hex;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n assertTypeOf(hex, \"string\");\n assert(hex.length % 2 === 0, \"Invalid hex padding.\");\n\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n const j = i * 2;\n const hexByte = hex.slice(j, j + 2);\n const byte = parseInt(hexByte, 16);\n assert(!isNaN(byte) && byte >= 0, \"Invalid byte sequence.\");\n\n bytes[i] = byte;\n }\n\n return bytes;\n}\n\nexport const hex: BytesCoder = {\n encode: bytesToHex,\n decode: hexToBytes\n};\n","import { assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nfunction bytesToUtf8(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n return new TextDecoder().decode(bytes);\n}\n\nfunction utf8ToBytes(str: string): Uint8Array {\n assertTypeOf(str, \"string\");\n\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport const utf8: BytesCoder = {\n encode: bytesToUtf8,\n decode: utf8ToBytes\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/hashes.ts","../src/coders/index.ts","../src/coders/hex.ts","../src/coders/utf8.ts"],"names":["hex","assertInstanceOf","assertTypeOf"],"mappings":";AAAA,SAAS,eAAe,wBAAwB;;;ACAhD,SAAS,eAAe;AACxB,SAAS,UAAU,eAAe;;;ACDlC;AAAA,EACE,eAAe;AAAA,EACf,UAAU;AAAA,EACV,UAAU;AAAA,OACL;;;ACJP,SAAS,QAAQ,kBAAkB,oBAAoB;AAGvD,IAAM,QAAQ,MAAM,KAAK,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,EAAE,SAAS,GAAG,GAAG,CAAC;AAWnF,SAAS,WAAW,OAA2B;AAC7C,mBAAiB,OAAO,UAAU;AAElC,MAAIA,OAAM;AACV,WAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,IAAAA,QAAO,MAAM,MAAM,CAAC,CAAC;AAAA,EACvB;AAEA,SAAOA;AACT;AAEA,SAAS,WAAWA,MAAyB;AAC3C,eAAaA,MAAK,QAAQ;AAC1B,SAAOA,KAAI,SAAS,MAAM,GAAG,sBAAsB;AAEnD,QAAM,QAAQ,IAAI,WAAWA,KAAI,SAAS,CAAC;AAC3C,WAAS,IAAI,GAAG,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AACvD,UAAM,KAAK,iBAAiBA,KAAI,WAAW,GAAG,CAAC;AAC/C,UAAM,KAAK,iBAAiBA,KAAI,WAAW,GAAG,CAAC;AAC/C,UAAM,CAAC,IAAI,KAAK,KAAK;AAAA,EACvB;AAEA,SAAO;AACT;AAEA,SAAS,iBAAiB,MAAc;AACtC,MAAI,QAAQ,iBAAoB,QAAQ,eAAkB;AACxD,WAAO,OAAO;AAAA,EAChB,WAAW,QAAQ,iBAAoB,QAAQ,eAAkB;AAC/D,WAAO,QAAQ,gBAAmB;AAAA,EACpC,WAAW,QAAQ,iBAAoB,QAAQ,gBAAkB;AAC/D,WAAO,QAAQ,gBAAmB;AAAA,EACpC;AAEA,QAAM,IAAI,MAAM,wBAAwB;AAC1C;AAEO,IAAM,MAAkB;AAAA,EAC7B,QAAQ;AAAA,EACR,QAAQ;AACV;;;ACtDA,SAAS,oBAAAC,mBAAkB,gBAAAC,qBAAoB;AAG/C,SAAS,YAAY,OAA2B;AAC9C,EAAAD,kBAAiB,OAAO,UAAU;AAElC,SAAO,IAAI,YAAY,EAAE,OAAO,KAAK;AACvC;AAEA,SAAS,YAAY,KAAyB;AAC5C,EAAAC,cAAa,KAAK,QAAQ;AAE1B,SAAO,IAAI,WAAW,IAAI,YAAY,EAAE,OAAO,GAAG,CAAC;AACrD;AAEO,IAAM,OAAmB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AACV;;;AFVO,IAAM,cAAc,iBAAiB,MAAM;AAC3C,IAAM,SAAS;AACf,IAAM,SAAS;;;ADLtB,SAAS,YAAY,OAA+B;AAClD,MAAI,iBAAiB;AAAY,WAAO;AAExC,SAAO,IAAI,OAAO,KAAK;AACzB;AAEO,SAAS,WAAW,SAAiC;AAC1D,SAAO,QAAQ,YAAY,OAAO,GAAG,EAAE,OAAO,GAAG,CAAC;AACpD;AAEO,SAAS,OAAO,SAAiC;AACtD,SAAO,QAAQ,YAAY,OAAO,CAAC;AACrC;;;ADZO,IAAM,cAAc","sourcesContent":["import { randomBytes as nobleRandomBytes } from \"@noble/hashes/utils\";\n\n/**\n * Secure PRNG from \"@noble/hashes\". Uses crypto.getRandomValues, which defers to OS.\n */\nexport const randomBytes = nobleRandomBytes as (bytesLength?: number) => Uint8Array;\n\nexport * from \"./hashes\";\nexport * from \"./types\";\nexport * from \"./coders\";\n","import { blake2b } from \"@noble/hashes/blake2b\";\nimport { sha256 as _sha256 } from \"@noble/hashes/sha256\";\nimport { hex } from \"./coders\";\nimport { BytesInput } from \"./types\";\n\nfunction ensureBytes(input: BytesInput): Uint8Array {\n if (input instanceof Uint8Array) return input;\n\n return hex.decode(input);\n}\n\nexport function blake2b256(message: BytesInput): Uint8Array {\n return blake2b(ensureBytes(message), { dkLen: 32 });\n}\n\nexport function sha256(message: BytesInput): Uint8Array {\n return _sha256(ensureBytes(message));\n}\n","import {\n base58check as base58checkCoder,\n base58 as base58Coder,\n base64 as base64Coder\n} from \"@scure/base\";\nimport { sha256 } from \"../hashes\";\nimport { BytesCoder } from \"../types\";\n\nexport const base58check = base58checkCoder(sha256);\nexport const base58 = base58Coder as BytesCoder;\nexport const base64 = base64Coder as BytesCoder;\n\nexport { hex } from \"./hex\";\nexport { utf8 } from \"./utf8\";\n","import { assert, assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nconst HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, \"0\"));\n\nconst enum HexCharCode {\n ZERO = 48, // 0\n NINE = 57, // 9\n A_UP = 65, // A\n F_UP = 70, // F\n A_LO = 97, // a\n F_LO = 102 // f\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n let hex = \"\";\n for (let i = 0, len = bytes.length; i < len; i++) {\n hex += HEXES[bytes[i]];\n }\n\n return hex;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n assertTypeOf(hex, \"string\");\n assert(hex.length % 2 === 0, \"Invalid hex padding.\");\n\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0, j = 0, len = bytes.length; i < len; i++) {\n const n1 = charCodeToBase16(hex.charCodeAt(j++));\n const n2 = charCodeToBase16(hex.charCodeAt(j++));\n bytes[i] = n1 * 16 + n2;\n }\n\n return bytes;\n}\n\nfunction charCodeToBase16(char: number) {\n if (char >= HexCharCode.ZERO && char <= HexCharCode.NINE) {\n return char - HexCharCode.ZERO;\n } else if (char >= HexCharCode.A_UP && char <= HexCharCode.F_UP) {\n return char - (HexCharCode.A_UP - 10);\n } else if (char >= HexCharCode.A_LO && char <= HexCharCode.F_LO) {\n return char - (HexCharCode.A_LO - 10);\n }\n\n throw new Error(\"Invalid byte sequence.\");\n}\n\nexport const hex: BytesCoder = {\n encode: bytesToHex,\n decode: hexToBytes\n};\n","import { assertInstanceOf, assertTypeOf } from \"@fleet-sdk/common\";\nimport { BytesCoder } from \"../types\";\n\nfunction bytesToUtf8(bytes: Uint8Array): string {\n assertInstanceOf(bytes, Uint8Array);\n\n return new TextDecoder().decode(bytes);\n}\n\nfunction utf8ToBytes(str: string): Uint8Array {\n assertTypeOf(str, \"string\");\n\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n\nexport const utf8: BytesCoder = {\n encode: bytesToUtf8,\n decode: utf8ToBytes\n};\n"]}
package/package.json CHANGED
@@ -1,11 +1,12 @@
1
1
  {
2
2
  "name": "@fleet-sdk/crypto",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "description": "Ergo blockchain crypto primitives.",
5
5
  "main": "./dist/index.cjs.js",
6
6
  "module": "./dist/index.esm.js",
7
7
  "types": "./dist/index.d.ts",
8
8
  "exports": {
9
+ "types": "./dist/index.d.ts",
9
10
  "require": "./dist/index.cjs.js",
10
11
  "import": "./dist/index.esm.js"
11
12
  },
@@ -25,12 +26,11 @@
25
26
  "node": ">=14"
26
27
  },
27
28
  "dependencies": {
28
- "@noble/hashes": "^1.3.1",
29
- "@scure/base": "^1.1.1",
30
- "@fleet-sdk/common": "^0.2.1"
29
+ "@noble/hashes": "^1.3.2",
30
+ "@scure/base": "^1.1.3",
31
+ "@fleet-sdk/common": "^0.2.3"
31
32
  },
32
33
  "files": [
33
- "src",
34
34
  "dist",
35
35
  "!**/*.spec.*",
36
36
  "!**/*.json",
@@ -1,15 +0,0 @@
1
- import { hex as scureHex } from "@scure/base";
2
- import { bench, describe } from "vitest";
3
- import { hex as fleetHex } from "./hex";
4
-
5
- describe("HEX <> Bytes decoding", () => {
6
- const validHex = "0008cd026dc059d64a50d0dbf07755c2c4a4e557e3df8afa7141868b3ab200643d437ee7";
7
-
8
- bench("@scure implementation", () => {
9
- scureHex.encode(scureHex.decode(validHex));
10
- });
11
-
12
- bench("Fleet implementation", () => {
13
- fleetHex.encode(fleetHex.decode(validHex));
14
- });
15
- });
package/src/coders/hex.ts DELETED
@@ -1,37 +0,0 @@
1
- import { assert, assertInstanceOf, assertTypeOf } from "@fleet-sdk/common";
2
- import { BytesCoder } from "../types";
3
-
4
- const HEXES = Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, "0"));
5
-
6
- function bytesToHex(bytes: Uint8Array): string {
7
- assertInstanceOf(bytes, Uint8Array);
8
-
9
- let hex = "";
10
- for (let i = 0; i < bytes.length; i++) {
11
- hex += HEXES[bytes[i]];
12
- }
13
-
14
- return hex;
15
- }
16
-
17
- function hexToBytes(hex: string): Uint8Array {
18
- assertTypeOf(hex, "string");
19
- assert(hex.length % 2 === 0, "Invalid hex padding.");
20
-
21
- const bytes = new Uint8Array(hex.length / 2);
22
- for (let i = 0; i < bytes.length; i++) {
23
- const j = i * 2;
24
- const hexByte = hex.slice(j, j + 2);
25
- const byte = parseInt(hexByte, 16);
26
- assert(!isNaN(byte) && byte >= 0, "Invalid byte sequence.");
27
-
28
- bytes[i] = byte;
29
- }
30
-
31
- return bytes;
32
- }
33
-
34
- export const hex: BytesCoder = {
35
- encode: bytesToHex,
36
- decode: hexToBytes
37
- };
@@ -1,18 +0,0 @@
1
- import {
2
- base58check as base58checkCoder,
3
- base58 as base58Coder,
4
- base64 as base64Coder
5
- } from "@scure/base";
6
- import { sha256 } from "../hashes";
7
- import { BytesCoder } from "../types";
8
-
9
- export const base58check = base58checkCoder(sha256);
10
- export const base58 = base58Coder as BytesCoder;
11
- export const base64 = base64Coder as BytesCoder;
12
-
13
- // export const base64utf8: BytesCoder = {
14
- // encode: (data: Uint8Array) => utf8.decode()
15
- // }
16
-
17
- export { hex } from "./hex";
18
- export { utf8 } from "./utf8";
@@ -1,19 +0,0 @@
1
- import { assertInstanceOf, assertTypeOf } from "@fleet-sdk/common";
2
- import { BytesCoder } from "../types";
3
-
4
- function bytesToUtf8(bytes: Uint8Array): string {
5
- assertInstanceOf(bytes, Uint8Array);
6
-
7
- return new TextDecoder().decode(bytes);
8
- }
9
-
10
- function utf8ToBytes(str: string): Uint8Array {
11
- assertTypeOf(str, "string");
12
-
13
- return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809
14
- }
15
-
16
- export const utf8: BytesCoder = {
17
- encode: bytesToUtf8,
18
- decode: utf8ToBytes
19
- };
package/src/hashes.ts DELETED
@@ -1,6 +0,0 @@
1
- import { blake2b } from "@noble/hashes/blake2b";
2
- import { sha256 as nobleSha256 } from "@noble/hashes/sha256";
3
- import { BytesInput } from "./types";
4
-
5
- export const blake2b256 = (message: BytesInput) => blake2b(message, { dkLen: 32 });
6
- export const sha256 = nobleSha256 as (message: BytesInput) => Uint8Array;
package/src/index.ts DELETED
@@ -1,10 +0,0 @@
1
- import { randomBytes as nobleRandomBytes } from "@noble/hashes/utils";
2
-
3
- /**
4
- * Secure PRNG from "@noble/hashes". Uses crypto.getRandomValues, which defers to OS.
5
- */
6
- export const randomBytes = nobleRandomBytes as (bytesLength?: number) => Uint8Array;
7
-
8
- export * from "./hashes";
9
- export * from "./types";
10
- export * from "./coders";
package/src/types.ts DELETED
@@ -1,17 +0,0 @@
1
- export type BytesInput = Uint8Array | string;
2
-
3
- export interface Coder<F, T> {
4
- encode(from: F): T;
5
- decode(to: T): F;
6
- }
7
-
8
- export interface BytesCoder extends Coder<Uint8Array, string> {
9
- /**
10
- * Encodes an array of bytes to a string
11
- */
12
- encode: (data: Uint8Array) => string;
13
- /**
14
- * Decodes a string to an array of bytes
15
- */
16
- decode: (str: string) => Uint8Array;
17
- }