@ohos-ports/crypto 0.0.0-stage → 0.3.1-beta.1

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.
Files changed (121) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +60 -2
  3. package/dist/bech32.d.ts +53 -0
  4. package/dist/bech32.js +187 -0
  5. package/dist/blake2b.d.ts +7 -0
  6. package/dist/blake2b.js +213 -0
  7. package/dist/bls12_318.d.ts +48 -0
  8. package/dist/bls12_318.js +268 -0
  9. package/dist/ed25519.d.ts +55 -0
  10. package/dist/ed25519.js +721 -0
  11. package/dist/hasGlobalWebCrypto.d.ts +1 -0
  12. package/dist/hasGlobalWebCrypto.js +21 -0
  13. package/dist/hmacSHA512.d.ts +6 -0
  14. package/dist/hmacSHA512.js +14 -0
  15. package/dist/index.d.ts +14 -0
  16. package/dist/index.js +30 -0
  17. package/dist/keccak.d.ts +4 -0
  18. package/dist/keccak.js +43 -0
  19. package/dist/kes/constants.d.ts +2 -0
  20. package/dist/kes/constants.js +5 -0
  21. package/dist/kes/index.d.ts +0 -0
  22. package/dist/kes/index.js +0 -0
  23. package/dist/kes/macro/sum_kes.d.ts +15 -0
  24. package/dist/kes/macro/sum_kes.js +9 -0
  25. package/dist/kes/singleKes.d.ts +0 -0
  26. package/dist/kes/singleKes.js +0 -0
  27. package/dist/noble/_assert.d.ts +23 -0
  28. package/dist/noble/_assert.js +55 -0
  29. package/dist/noble/_md.d.ts +29 -0
  30. package/dist/noble/_md.js +170 -0
  31. package/dist/noble/_shortw_utils.d.ts +61 -0
  32. package/dist/noble/_shortw_utils.js +63 -0
  33. package/dist/noble/_u64.d.ts +28 -0
  34. package/dist/noble/_u64.js +116 -0
  35. package/dist/noble/abstract/bls.d.ts +119 -0
  36. package/dist/noble/abstract/bls.js +334 -0
  37. package/dist/noble/abstract/curve.d.ts +83 -0
  38. package/dist/noble/abstract/curve.js +319 -0
  39. package/dist/noble/abstract/edwards.d.ts +85 -0
  40. package/dist/noble/abstract/edwards.js +508 -0
  41. package/dist/noble/abstract/hash-to-curve.d.ts +57 -0
  42. package/dist/noble/abstract/hash-to-curve.js +220 -0
  43. package/dist/noble/abstract/modular.d.ts +122 -0
  44. package/dist/noble/abstract/modular.js +455 -0
  45. package/dist/noble/abstract/montgomery.d.ts +28 -0
  46. package/dist/noble/abstract/montgomery.js +172 -0
  47. package/dist/noble/abstract/utils.d.ts +106 -0
  48. package/dist/noble/abstract/utils.js +442 -0
  49. package/dist/noble/bls12_381.d.ts +95 -0
  50. package/dist/noble/bls12_381.js +1434 -0
  51. package/dist/noble/crypto.d.ts +1 -0
  52. package/dist/noble/crypto.js +4 -0
  53. package/dist/noble/curves/curve.d.ts +69 -0
  54. package/dist/noble/curves/curve.js +167 -0
  55. package/dist/noble/curves/modular.d.ts +122 -0
  56. package/dist/noble/curves/modular.js +442 -0
  57. package/dist/noble/curves/utils.d.ts +93 -0
  58. package/dist/noble/curves/utils.js +385 -0
  59. package/dist/noble/curves/weierstrass.d.ts +240 -0
  60. package/dist/noble/curves/weierstrass.js +1178 -0
  61. package/dist/noble/ed25519.d.ts +100 -0
  62. package/dist/noble/ed25519.js +494 -0
  63. package/dist/noble/hmac.d.ts +25 -0
  64. package/dist/noble/hmac.js +101 -0
  65. package/dist/noble/index.d.ts +2 -0
  66. package/dist/noble/index.js +20 -0
  67. package/dist/noble/keccak.d.ts +58 -0
  68. package/dist/noble/keccak.js +289 -0
  69. package/dist/noble/ripemd_160.d.ts +20 -0
  70. package/dist/noble/ripemd_160.js +147 -0
  71. package/dist/noble/secp256k1.d.ts +98 -0
  72. package/dist/noble/secp256k1.js +309 -0
  73. package/dist/noble/sha256.d.ts +34 -0
  74. package/dist/noble/sha256.js +146 -0
  75. package/dist/noble/sha512.d.ts +66 -0
  76. package/dist/noble/sha512.js +301 -0
  77. package/dist/noble/utils.d.ts +90 -0
  78. package/dist/noble/utils.js +278 -0
  79. package/dist/ripemd_160.d.ts +1 -0
  80. package/dist/ripemd_160.js +23 -0
  81. package/dist/rust_vrf_reimpl/curves.d.ts +162 -0
  82. package/dist/rust_vrf_reimpl/curves.js +4225 -0
  83. package/dist/rust_vrf_reimpl/vrf03.d.ts +60 -0
  84. package/dist/rust_vrf_reimpl/vrf03.js +373 -0
  85. package/dist/rust_vrf_reimpl/vrf10.d.ts +73 -0
  86. package/dist/rust_vrf_reimpl/vrf10.js +468 -0
  87. package/dist/rust_vrf_reimpl/vrf10_batch.d.ts +53 -0
  88. package/dist/rust_vrf_reimpl/vrf10_batch.js +245 -0
  89. package/dist/secp256k1.d.ts +4 -0
  90. package/dist/secp256k1.js +33 -0
  91. package/dist/sha2_256.d.ts +16 -0
  92. package/dist/sha2_256.js +403 -0
  93. package/dist/sha2_512.d.ts +16 -0
  94. package/dist/sha2_512.js +256 -0
  95. package/dist/sha3.d.ts +17 -0
  96. package/dist/sha3.js +181 -0
  97. package/dist/types.d.ts +26 -0
  98. package/dist/types.js +120 -0
  99. package/dist/utils/assert.d.ts +3 -0
  100. package/dist/utils/assert.js +55 -0
  101. package/dist/utils/base32.d.ts +5 -0
  102. package/dist/utils/base32.js +52 -0
  103. package/dist/utils/bigintToBuffer.d.ts +1 -0
  104. package/dist/utils/bigintToBuffer.js +27 -0
  105. package/dist/utils/bytesToHex.d.ts +2 -0
  106. package/dist/utils/bytesToHex.js +15 -0
  107. package/dist/utils/getRandomValues.d.ts +4 -0
  108. package/dist/utils/getRandomValues.js +12 -0
  109. package/dist/utils/hexToBytes.d.ts +2 -0
  110. package/dist/utils/hexToBytes.js +14 -0
  111. package/dist/utils/index.d.ts +3 -0
  112. package/dist/utils/index.js +19 -0
  113. package/dist/utils/positiveMod.d.ts +1 -0
  114. package/dist/utils/positiveMod.js +11 -0
  115. package/dist/utils/promisifySync.d.ts +0 -0
  116. package/dist/utils/promisifySync.js +0 -0
  117. package/dist/utils/rotr32.d.ts +2 -0
  118. package/dist/utils/rotr32.js +7 -0
  119. package/dist/vrf.d.ts +74 -0
  120. package/dist/vrf.js +286 -0
  121. package/package.json +49 -4
@@ -0,0 +1,403 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
+ if (ar || !(i in from)) {
57
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
+ ar[i] = from[i];
59
+ }
60
+ }
61
+ return to.concat(ar || Array.prototype.slice.call(from));
62
+ };
63
+ Object.defineProperty(exports, "__esModule", { value: true });
64
+ exports.hasNativeSha2_256 = exports.sha2_256 = exports.sha2_256_sync = void 0;
65
+ var rotr32_1 = require("./utils/rotr32.js");
66
+ var hasGlobalWebCrypto_1 = require("./hasGlobalWebCrypto.js");
67
+ var __hasNativeSupport = hasGlobalWebCrypto_1.hasGlobalWebCrypto && typeof globalThis.crypto.subtle.digest === "function";
68
+ var NATIVE_ALGO = "SHA-256";
69
+ var digest = __hasNativeSupport ?
70
+ globalThis.crypto.subtle.digest.bind(globalThis.crypto.subtle) :
71
+ function () { return Promise.resolve(new ArrayBuffer(0)); };
72
+ function _test_nativeSha2_256(data) {
73
+ return __awaiter(this, void 0, void 0, function () {
74
+ var _a;
75
+ return __generator(this, function (_b) {
76
+ switch (_b.label) {
77
+ case 0:
78
+ _a = Uint8Array.bind;
79
+ return [4 /*yield*/, digest(NATIVE_ALGO, data)];
80
+ case 1:
81
+ // await ensureNativeSupport();
82
+ // if( !__hasNativeSupport ) return sha2_256_sync( data );
83
+ return [2 /*return*/, new (_a.apply(Uint8Array, [void 0, _b.sent()]))()];
84
+ }
85
+ });
86
+ });
87
+ }
88
+ function nativeSha2_256(data) {
89
+ return __awaiter(this, void 0, void 0, function () {
90
+ var _a;
91
+ return __generator(this, function (_b) {
92
+ switch (_b.label) {
93
+ case 0: return [4 /*yield*/, ensureNativeSupport()];
94
+ case 1:
95
+ _b.sent();
96
+ if (!__hasNativeSupport)
97
+ return [2 /*return*/, sha2_256_sync(data)];
98
+ _a = Uint8Array.bind;
99
+ return [4 /*yield*/, digest(NATIVE_ALGO, data)];
100
+ case 2: return [2 /*return*/, new (_a.apply(Uint8Array, [void 0, _b.sent()]))()];
101
+ }
102
+ });
103
+ });
104
+ }
105
+ function _test(data, uint8ArrayEq) {
106
+ return __awaiter(this, void 0, void 0, function () {
107
+ var start, end, nativeRestult, _a, nativeTime, result, jsTime, _b;
108
+ return __generator(this, function (_c) {
109
+ switch (_c.label) {
110
+ case 0:
111
+ if (!__hasNativeSupport)
112
+ return [2 /*return*/, [50, 1]];
113
+ start = 0;
114
+ end = 0;
115
+ _c.label = 1;
116
+ case 1:
117
+ _c.trys.push([1, 3, , 4]);
118
+ start = performance.now();
119
+ _a = Uint8Array.bind;
120
+ return [4 /*yield*/, _test_nativeSha2_256(data)];
121
+ case 2:
122
+ nativeRestult = new (_a.apply(Uint8Array, [void 0, _c.sent()]))();
123
+ end = performance.now();
124
+ nativeTime = end - start;
125
+ start = performance.now();
126
+ result = sha2_256_sync(data);
127
+ end = performance.now();
128
+ jsTime = end - start;
129
+ __hasNativeSupport = __hasNativeSupport && uint8ArrayEq(nativeRestult, result);
130
+ return [2 /*return*/, [nativeTime, jsTime]];
131
+ case 3:
132
+ _b = _c.sent();
133
+ __hasNativeSupport = false;
134
+ return [3 /*break*/, 4];
135
+ case 4: return [2 /*return*/, [50, 1]];
136
+ }
137
+ });
138
+ });
139
+ }
140
+ var _support_was_tested = false;
141
+ function _test_support() {
142
+ return __awaiter(this, void 0, void 0, function () {
143
+ var repeatArr, eqU8Arr_1, bench, sum, _a;
144
+ return __generator(this, function (_b) {
145
+ switch (_b.label) {
146
+ case 0:
147
+ if (_support_was_tested || !__hasNativeSupport)
148
+ return [2 /*return*/];
149
+ _b.label = 1;
150
+ case 1:
151
+ _b.trys.push([1, 3, , 4]);
152
+ repeatArr = function (arr, n) {
153
+ for (var i = 0; i < n; i++)
154
+ arr = arr.concat.apply(arr, __spreadArray([], __read(arr), false));
155
+ return arr;
156
+ };
157
+ eqU8Arr_1 = function (a, b) {
158
+ if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array))
159
+ return false;
160
+ if (a.length !== b.length)
161
+ return false;
162
+ for (var i = 0; i < a.length; i++)
163
+ if (a[i] !== b[i])
164
+ return false;
165
+ return true;
166
+ };
167
+ return [4 /*yield*/, Promise.all(repeatArr([
168
+ new Uint8Array(0),
169
+ new Uint8Array(10),
170
+ new Uint8Array([0xde, 0xad, 0xbe, 0xef]),
171
+ new Uint8Array(repeatArr([0xaa], 20)),
172
+ new Uint8Array(repeatArr([0xbb], 20)),
173
+ new Uint8Array(repeatArr([0xcc], 20)),
174
+ new Uint8Array(repeatArr([0xdd], 20)),
175
+ new Uint8Array(repeatArr([0xee], 20)),
176
+ new Uint8Array(repeatArr([0xff], 20)),
177
+ new Uint8Array(repeatArr([0xaa, 0xbb], 33)),
178
+ new Uint8Array(repeatArr([0xbb, 0xcc], 33)),
179
+ new Uint8Array(repeatArr([0xcc, 0xdd], 33)),
180
+ new Uint8Array(repeatArr([0xdd, 0xee], 33)),
181
+ new Uint8Array(repeatArr([0xee, 0xff], 33)),
182
+ new Uint8Array(repeatArr([0xff, 0x00], 33)),
183
+ new Uint8Array(repeatArr([0xde, 0xad, 0xbe, 0xef], 30)),
184
+ ], 10)
185
+ .map(function (data) { return _test(data, eqU8Arr_1); }))];
186
+ case 2:
187
+ bench = _b.sent();
188
+ if (!__hasNativeSupport)
189
+ return [2 /*return*/];
190
+ sum = bench.reduce(function (acc, _a) {
191
+ var _b = __read(_a, 2), native = _b[0], js = _b[1];
192
+ acc[0] += native;
193
+ acc[1] += js;
194
+ return acc;
195
+ }, [0, 0]);
196
+ __hasNativeSupport = __hasNativeSupport && sum[0] < sum[1];
197
+ return [3 /*break*/, 4];
198
+ case 3:
199
+ _a = _b.sent();
200
+ __hasNativeSupport = false;
201
+ _support_was_tested = true;
202
+ return [3 /*break*/, 4];
203
+ case 4:
204
+ _support_was_tested = true;
205
+ return [2 /*return*/];
206
+ }
207
+ });
208
+ });
209
+ }
210
+ if (__hasNativeSupport) {
211
+ _test_support();
212
+ }
213
+ else {
214
+ _support_was_tested = true;
215
+ }
216
+ /**
217
+ * There are cases where `globalThis.crypto.subtle` is fully defined
218
+ * but the algorithm `Ed25519` is NOT SUPPORTED.
219
+ *
220
+ * unfortunately, there is NO WAY to check this syncronously.
221
+ */
222
+ function ensureNativeSupport() {
223
+ return __awaiter(this, void 0, void 0, function () {
224
+ return __generator(this, function (_a) {
225
+ switch (_a.label) {
226
+ case 0:
227
+ if (!__hasNativeSupport)
228
+ return [2 /*return*/, false];
229
+ return [4 /*yield*/, _test_support()];
230
+ case 1:
231
+ _a.sent();
232
+ return [2 /*return*/, __hasNativeSupport];
233
+ }
234
+ });
235
+ });
236
+ }
237
+ /**
238
+ * Pad a bytearray so its size is a multiple of 64 (512 bits).
239
+ * Internal method.
240
+ */
241
+ function pad(src) {
242
+ var nBits = src.length * 8;
243
+ var finalLen = src.length;
244
+ // dst = src.slice();
245
+ // dst.push(0x80);
246
+ finalLen++;
247
+ var nZeroes = (64 - (src.length + 1) % 64) - 8;
248
+ if (nZeroes < 0) {
249
+ nZeroes += 64;
250
+ }
251
+ // for (let i = 0; i < nZeroes; i++) {
252
+ // dst.push(0);
253
+ // }
254
+ finalLen += nZeroes;
255
+ // assume nBits fits in 32 bits
256
+ // dst.push(0);
257
+ // dst.push(0);
258
+ // dst.push(0);
259
+ // dst.push(0);
260
+ // dst.push( ((nBits >> 24) & 0xff) as byte);
261
+ // dst.push( ((nBits >> 16) & 0xff) as byte);
262
+ // dst.push( ((nBits >> 8) & 0xff) as byte);
263
+ // dst.push( ((nBits >> 0) & 0xff) as byte);
264
+ finalLen += 8;
265
+ var dst = new Uint8Array(finalLen);
266
+ dst.set(src);
267
+ dst[src.length] = 0x80;
268
+ dst[finalLen - 4] = (nBits >>> 24) & 0xff;
269
+ dst[finalLen - 3] = (nBits >>> 16) & 0xff;
270
+ dst[finalLen - 2] = (nBits >>> 8) & 0xff;
271
+ dst[finalLen - 1] = nBits & 0xff;
272
+ return dst;
273
+ }
274
+ var k = [
275
+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
276
+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
277
+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
278
+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
279
+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
280
+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
281
+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
282
+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
283
+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
284
+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
285
+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
286
+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
287
+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
288
+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
289
+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
290
+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
291
+ ];
292
+ function sigma0(x) {
293
+ return (0, rotr32_1.rotr32)(x, 7) ^ (0, rotr32_1.rotr32)(x, 18) ^ (x >>> 3);
294
+ }
295
+ function sigma1(x) {
296
+ return (0, rotr32_1.rotr32)(x, 17) ^ (0, rotr32_1.rotr32)(x, 19) ^ (x >>> 10);
297
+ }
298
+ var initialHash = new Uint32Array([
299
+ 0x6a09e667,
300
+ 0xbb67ae85,
301
+ 0x3c6ef372,
302
+ 0xa54ff53a,
303
+ 0x510e527f,
304
+ 0x9b05688c,
305
+ 0x1f83d9ab,
306
+ 0x5be0cd19,
307
+ ]);
308
+ /**
309
+ * getulates sha2-256 (32bytes) hash of a list of uint8 numbers.
310
+ * Result is also a list of uint8 number.
311
+ * @example
312
+ * bytesToHex(sha2_256([0x61, 0x62, 0x63])) => "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
313
+ * @example
314
+ * sha2_256(textToBytes("Hello, World!")) => [223, 253, 96, 33, 187, 43, 213, 176, 175, 103, 98, 144, 128, 158, 195, 165, 49, 145, 221, 129, 199, 247, 10, 75, 40, 104, 138, 54, 33, 130, 152, 111]
315
+ * @param {uint5[]} bytes - list of uint8 numbers
316
+ * @returns {number[]} - list of uint8 numbers
317
+ */
318
+ function sha2_256_sync(_bytes) {
319
+ if (!(_bytes instanceof Uint8Array))
320
+ _bytes = new Uint8Array(_bytes);
321
+ if (_bytes instanceof ArrayBuffer)
322
+ _bytes = new Uint8Array(_bytes);
323
+ /**
324
+ * Initial hash (updated during compression phase)
325
+ */
326
+ var hash = initialHash.slice();
327
+ var bytes = pad(_bytes);
328
+ // break message in successive 64 byte chunks
329
+ for (var chunkStart = 0; chunkStart < bytes.length; chunkStart += 64) {
330
+ var chunk = Uint8Array.prototype.slice.call(bytes, chunkStart, chunkStart + 64);
331
+ // bytes.slice(chunkStart, chunkStart + 64);
332
+ var w = new Int32Array(64); // (new Array(64)).fill(0); // array of 32 bit numbers!
333
+ // copy chunk into first 16 positions of w
334
+ for (var i = 0; i < 16; i++) {
335
+ w[i] = (chunk[i * 4 + 0] << 24) |
336
+ (chunk[i * 4 + 1] << 16) |
337
+ (chunk[i * 4 + 2] << 8) |
338
+ (chunk[i * 4 + 3]);
339
+ }
340
+ // this DOES NOT WORK
341
+ // w.set( new Int32Array( chunk.buffer, chunk.byteOffset, 16 ) );
342
+ // extends the first 16 positions into the remaining 48 positions
343
+ for (var i = 16; i < 64; i++) {
344
+ w[i] = (w[i - 16] + sigma0(w[i - 15]) + w[i - 7] + sigma1(w[i - 2])) | 0;
345
+ }
346
+ // intialize working variables to current hash value
347
+ var a = hash[0];
348
+ var b = hash[1];
349
+ var c = hash[2];
350
+ var d = hash[3];
351
+ var e = hash[4];
352
+ var f = hash[5];
353
+ var g = hash[6];
354
+ var h = hash[7];
355
+ // compression function main loop
356
+ for (var i = 0; i < 64; i++) {
357
+ var S1 = (0, rotr32_1.rotr32)(e, 6) ^ (0, rotr32_1.rotr32)(e, 11) ^ (0, rotr32_1.rotr32)(e, 25);
358
+ var ch = (e & f) ^ ((~e) & g);
359
+ var temp1 = (h + S1 + ch + k[i] + w[i]) | 0;
360
+ var S0 = (0, rotr32_1.rotr32)(a, 2) ^ (0, rotr32_1.rotr32)(a, 13) ^ (0, rotr32_1.rotr32)(a, 22);
361
+ var maj = (a & b) ^ (a & c) ^ (b & c);
362
+ var temp2 = (S0 + maj) | 0;
363
+ h = g;
364
+ g = f;
365
+ f = e;
366
+ e = (d + temp1) | 0;
367
+ d = c;
368
+ c = b;
369
+ b = a;
370
+ a = (temp1 + temp2) | 0;
371
+ }
372
+ // update the hash
373
+ hash[0] = (hash[0] + a) | 0;
374
+ hash[1] = (hash[1] + b) | 0;
375
+ hash[2] = (hash[2] + c) | 0;
376
+ hash[3] = (hash[3] + d) | 0;
377
+ hash[4] = (hash[4] + e) | 0;
378
+ hash[5] = (hash[5] + f) | 0;
379
+ hash[6] = (hash[6] + g) | 0;
380
+ hash[7] = (hash[7] + h) | 0;
381
+ }
382
+ // produce the final digest of uint8 numbers
383
+ var result = new Uint8Array(32);
384
+ for (var i = 0; i < 8; i++) {
385
+ var item = hash[i];
386
+ // result.push( ((item >> 24) & 0xff) as byte );
387
+ // result.push( ((item >> 16) & 0xff) as byte );
388
+ // result.push( ((item >> 8) & 0xff) as byte );
389
+ // result.push( ((item >> 0) & 0xff) as byte );
390
+ var i4 = i * 4;
391
+ result[i4] = (item >>> 24) & 0xff;
392
+ result[i4 + 1] = (item >>> 16) & 0xff;
393
+ result[i4 + 2] = (item >>> 8) & 0xff;
394
+ result[i4 + 3] = (item) & 0xff;
395
+ }
396
+ return result;
397
+ }
398
+ exports.sha2_256_sync = sha2_256_sync;
399
+ function wrapped_sha2_256_sync(data) {
400
+ return Promise.resolve(sha2_256_sync(data));
401
+ }
402
+ exports.sha2_256 = __hasNativeSupport ? nativeSha2_256 : wrapped_sha2_256_sync;
403
+ exports.hasNativeSha2_256 = exports.sha2_256 === nativeSha2_256;
@@ -0,0 +1,16 @@
1
+ declare function nativeSha2_512(data: Uint8Array | ArrayBuffer): Promise<Uint8Array>;
2
+ /**
3
+ * getulates sha2-512 (64bytes) hash of a list of uint8 numbers.
4
+ * Result is also a list of uint8 number.
5
+ * @example
6
+ * bytesToHex(sha2_512_sync([0x61, 0x62, 0x63])) => "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
7
+ * @example
8
+ * bytesToHex(sha2_512_sync([])) => "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
9
+ * @param {number[]} bytes - list of uint8 numbers
10
+ * @returns {number[]} - list of uint8 numbers
11
+ */
12
+ export declare function sha2_512_sync(bytes: number[] | Uint8Array | ArrayBuffer): Uint8Array & {
13
+ length: 64;
14
+ };
15
+ export declare const sha2_512: typeof nativeSha2_512;
16
+ export {};
@@ -0,0 +1,256 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __generator = (this && this.__generator) || function (thisArg, body) {
12
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14
+ function verb(n) { return function (v) { return step([n, v]); }; }
15
+ function step(op) {
16
+ if (f) throw new TypeError("Generator is already executing.");
17
+ while (g && (g = 0, op[0] && (_ = 0)), _) try {
18
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19
+ if (y = 0, t) op = [op[0] & 2, t.value];
20
+ switch (op[0]) {
21
+ case 0: case 1: t = op; break;
22
+ case 4: _.label++; return { value: op[1], done: false };
23
+ case 5: _.label++; y = op[1]; op = [0]; continue;
24
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
25
+ default:
26
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30
+ if (t[2]) _.ops.pop();
31
+ _.trys.pop(); continue;
32
+ }
33
+ op = body.call(thisArg, _);
34
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36
+ }
37
+ };
38
+ var __read = (this && this.__read) || function (o, n) {
39
+ var m = typeof Symbol === "function" && o[Symbol.iterator];
40
+ if (!m) return o;
41
+ var i = m.call(o), r, ar = [], e;
42
+ try {
43
+ while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
44
+ }
45
+ catch (error) { e = { error: error }; }
46
+ finally {
47
+ try {
48
+ if (r && !r.done && (m = i["return"])) m.call(i);
49
+ }
50
+ finally { if (e) throw e.error; }
51
+ }
52
+ return ar;
53
+ };
54
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
55
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
56
+ if (ar || !(i in from)) {
57
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
58
+ ar[i] = from[i];
59
+ }
60
+ }
61
+ return to.concat(ar || Array.prototype.slice.call(from));
62
+ };
63
+ Object.defineProperty(exports, "__esModule", { value: true });
64
+ exports.sha2_512 = exports.sha2_512_sync = void 0;
65
+ var hasGlobalWebCrypto_1 = require("./hasGlobalWebCrypto.js");
66
+ var sha512_1 = require("./noble/sha512.js");
67
+ var __hasNativeSupport = hasGlobalWebCrypto_1.hasGlobalWebCrypto && typeof globalThis.crypto.subtle.digest === "function";
68
+ var NATIVE_ALGO = "SHA-512";
69
+ var digest = __hasNativeSupport ?
70
+ globalThis.crypto.subtle.digest.bind(globalThis.crypto.subtle) :
71
+ function () { return Promise.resolve(new ArrayBuffer(0)); };
72
+ function _test_nativeSha2_512(data) {
73
+ return __awaiter(this, void 0, void 0, function () {
74
+ var _a;
75
+ return __generator(this, function (_b) {
76
+ switch (_b.label) {
77
+ case 0:
78
+ _a = Uint8Array.bind;
79
+ return [4 /*yield*/, digest(NATIVE_ALGO, data)];
80
+ case 1:
81
+ // await ensureNativeSupport();
82
+ // if( !__hasNativeSupport ) return sha2_512_sync( data );
83
+ return [2 /*return*/, new (_a.apply(Uint8Array, [void 0, _b.sent()]))()];
84
+ }
85
+ });
86
+ });
87
+ }
88
+ function nativeSha2_512(data) {
89
+ return __awaiter(this, void 0, void 0, function () {
90
+ var _a;
91
+ return __generator(this, function (_b) {
92
+ switch (_b.label) {
93
+ case 0: return [4 /*yield*/, ensureNativeSupport()];
94
+ case 1:
95
+ _b.sent();
96
+ if (!__hasNativeSupport)
97
+ return [2 /*return*/, sha2_512_sync(data)];
98
+ _a = Uint8Array.bind;
99
+ return [4 /*yield*/, digest(NATIVE_ALGO, data)];
100
+ case 2: return [2 /*return*/, new (_a.apply(Uint8Array, [void 0, _b.sent()]))()];
101
+ }
102
+ });
103
+ });
104
+ }
105
+ function _test(data, uint8ArrayEq) {
106
+ return __awaiter(this, void 0, void 0, function () {
107
+ var start, end, nativeResult, _a, nativeTime, result, jsTime, _b;
108
+ return __generator(this, function (_c) {
109
+ switch (_c.label) {
110
+ case 0:
111
+ if (!__hasNativeSupport)
112
+ return [2 /*return*/, [50, 1]];
113
+ start = 0;
114
+ end = 0;
115
+ _c.label = 1;
116
+ case 1:
117
+ _c.trys.push([1, 3, , 4]);
118
+ start = performance.now();
119
+ _a = Uint8Array.bind;
120
+ return [4 /*yield*/, _test_nativeSha2_512(data)];
121
+ case 2:
122
+ nativeResult = new (_a.apply(Uint8Array, [void 0, _c.sent()]))();
123
+ end = performance.now();
124
+ nativeTime = end - start;
125
+ start = performance.now();
126
+ result = sha2_512_sync(data);
127
+ end = performance.now();
128
+ jsTime = end - start;
129
+ __hasNativeSupport = __hasNativeSupport && uint8ArrayEq(nativeResult, result);
130
+ return [2 /*return*/, [nativeTime, jsTime]];
131
+ case 3:
132
+ _b = _c.sent();
133
+ __hasNativeSupport = false;
134
+ return [3 /*break*/, 4];
135
+ case 4: return [2 /*return*/, [50, 1]];
136
+ }
137
+ });
138
+ });
139
+ }
140
+ var _support_was_tested = false;
141
+ function _test_support() {
142
+ return __awaiter(this, void 0, void 0, function () {
143
+ var repeatArr, eqU8Arr_1, bench, sum, _a;
144
+ return __generator(this, function (_b) {
145
+ switch (_b.label) {
146
+ case 0:
147
+ if (_support_was_tested || !__hasNativeSupport)
148
+ return [2 /*return*/];
149
+ _b.label = 1;
150
+ case 1:
151
+ _b.trys.push([1, 3, , 4]);
152
+ repeatArr = function (arr, n) {
153
+ for (var i = 0; i < n; i++)
154
+ arr = arr.concat.apply(arr, __spreadArray([], __read(arr), false));
155
+ return arr;
156
+ };
157
+ eqU8Arr_1 = function (a, b) {
158
+ if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array))
159
+ return false;
160
+ if (a.length !== b.length)
161
+ return false;
162
+ for (var i = 0; i < a.length; i++)
163
+ if (a[i] !== b[i])
164
+ return false;
165
+ return true;
166
+ };
167
+ return [4 /*yield*/, Promise.all(repeatArr([
168
+ new Uint8Array(0),
169
+ new Uint8Array(10),
170
+ new Uint8Array([0xde, 0xad, 0xbe, 0xef]),
171
+ new Uint8Array(repeatArr([0xaa], 20)),
172
+ new Uint8Array(repeatArr([0xbb], 20)),
173
+ new Uint8Array(repeatArr([0xcc], 20)),
174
+ new Uint8Array(repeatArr([0xdd], 20)),
175
+ new Uint8Array(repeatArr([0xee], 20)),
176
+ new Uint8Array(repeatArr([0xff], 20)),
177
+ new Uint8Array(repeatArr([0xaa, 0xbb], 33)),
178
+ new Uint8Array(repeatArr([0xbb, 0xcc], 33)),
179
+ new Uint8Array(repeatArr([0xcc, 0xdd], 33)),
180
+ new Uint8Array(repeatArr([0xdd, 0xee], 33)),
181
+ new Uint8Array(repeatArr([0xee, 0xff], 33)),
182
+ new Uint8Array(repeatArr([0xff, 0x00], 33)),
183
+ new Uint8Array(repeatArr([0xde, 0xad, 0xbe, 0xef], 30)),
184
+ ], 10).map(function (data) { return _test(data, eqU8Arr_1); }))];
185
+ case 2:
186
+ bench = _b.sent();
187
+ if (!__hasNativeSupport)
188
+ return [2 /*return*/];
189
+ sum = bench.reduce(function (acc, _a) {
190
+ var _b = __read(_a, 2), native = _b[0], js = _b[1];
191
+ acc[0] += native;
192
+ acc[1] += js;
193
+ return acc;
194
+ }, [0, 0]);
195
+ __hasNativeSupport = __hasNativeSupport && sum[0] < sum[1];
196
+ return [3 /*break*/, 4];
197
+ case 3:
198
+ _a = _b.sent();
199
+ __hasNativeSupport = false;
200
+ return [3 /*break*/, 4];
201
+ case 4:
202
+ _support_was_tested = true;
203
+ return [2 /*return*/];
204
+ }
205
+ });
206
+ });
207
+ }
208
+ if (__hasNativeSupport) {
209
+ _test_support();
210
+ }
211
+ else {
212
+ _support_was_tested = true;
213
+ }
214
+ /**
215
+ * There are cases where `globalThis.crypto.subtle` is fully defined
216
+ * but the algorithm `Ed25519` is NOT SUPPORTED.
217
+ *
218
+ * unfortunately, there is NO WAY to check this syncronously.
219
+ */
220
+ function ensureNativeSupport() {
221
+ return __awaiter(this, void 0, void 0, function () {
222
+ return __generator(this, function (_a) {
223
+ switch (_a.label) {
224
+ case 0:
225
+ if (!__hasNativeSupport)
226
+ return [2 /*return*/, false];
227
+ return [4 /*yield*/, _test_support()];
228
+ case 1:
229
+ _a.sent();
230
+ return [2 /*return*/, __hasNativeSupport];
231
+ }
232
+ });
233
+ });
234
+ }
235
+ /**
236
+ * getulates sha2-512 (64bytes) hash of a list of uint8 numbers.
237
+ * Result is also a list of uint8 number.
238
+ * @example
239
+ * bytesToHex(sha2_512_sync([0x61, 0x62, 0x63])) => "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f"
240
+ * @example
241
+ * bytesToHex(sha2_512_sync([])) => "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e"
242
+ * @param {number[]} bytes - list of uint8 numbers
243
+ * @returns {number[]} - list of uint8 numbers
244
+ */
245
+ function sha2_512_sync(bytes) {
246
+ if (!(bytes instanceof Uint8Array))
247
+ bytes = new Uint8Array(bytes);
248
+ if (bytes instanceof ArrayBuffer)
249
+ bytes = new Uint8Array(bytes);
250
+ return (0, sha512_1.sha512)(bytes);
251
+ }
252
+ exports.sha2_512_sync = sha2_512_sync;
253
+ function wrapped_sha2_512_sync(bytes) {
254
+ return Promise.resolve(sha2_512_sync(bytes));
255
+ }
256
+ exports.sha2_512 = __hasNativeSupport ? nativeSha2_512 : wrapped_sha2_512_sync;