@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.
- package/LICENSE +7 -0
- package/README.md +60 -2
- package/dist/bech32.d.ts +53 -0
- package/dist/bech32.js +187 -0
- package/dist/blake2b.d.ts +7 -0
- package/dist/blake2b.js +213 -0
- package/dist/bls12_318.d.ts +48 -0
- package/dist/bls12_318.js +268 -0
- package/dist/ed25519.d.ts +55 -0
- package/dist/ed25519.js +721 -0
- package/dist/hasGlobalWebCrypto.d.ts +1 -0
- package/dist/hasGlobalWebCrypto.js +21 -0
- package/dist/hmacSHA512.d.ts +6 -0
- package/dist/hmacSHA512.js +14 -0
- package/dist/index.d.ts +14 -0
- package/dist/index.js +30 -0
- package/dist/keccak.d.ts +4 -0
- package/dist/keccak.js +43 -0
- package/dist/kes/constants.d.ts +2 -0
- package/dist/kes/constants.js +5 -0
- package/dist/kes/index.d.ts +0 -0
- package/dist/kes/index.js +0 -0
- package/dist/kes/macro/sum_kes.d.ts +15 -0
- package/dist/kes/macro/sum_kes.js +9 -0
- package/dist/kes/singleKes.d.ts +0 -0
- package/dist/kes/singleKes.js +0 -0
- package/dist/noble/_assert.d.ts +23 -0
- package/dist/noble/_assert.js +55 -0
- package/dist/noble/_md.d.ts +29 -0
- package/dist/noble/_md.js +170 -0
- package/dist/noble/_shortw_utils.d.ts +61 -0
- package/dist/noble/_shortw_utils.js +63 -0
- package/dist/noble/_u64.d.ts +28 -0
- package/dist/noble/_u64.js +116 -0
- package/dist/noble/abstract/bls.d.ts +119 -0
- package/dist/noble/abstract/bls.js +334 -0
- package/dist/noble/abstract/curve.d.ts +83 -0
- package/dist/noble/abstract/curve.js +319 -0
- package/dist/noble/abstract/edwards.d.ts +85 -0
- package/dist/noble/abstract/edwards.js +508 -0
- package/dist/noble/abstract/hash-to-curve.d.ts +57 -0
- package/dist/noble/abstract/hash-to-curve.js +220 -0
- package/dist/noble/abstract/modular.d.ts +122 -0
- package/dist/noble/abstract/modular.js +455 -0
- package/dist/noble/abstract/montgomery.d.ts +28 -0
- package/dist/noble/abstract/montgomery.js +172 -0
- package/dist/noble/abstract/utils.d.ts +106 -0
- package/dist/noble/abstract/utils.js +442 -0
- package/dist/noble/bls12_381.d.ts +95 -0
- package/dist/noble/bls12_381.js +1434 -0
- package/dist/noble/crypto.d.ts +1 -0
- package/dist/noble/crypto.js +4 -0
- package/dist/noble/curves/curve.d.ts +69 -0
- package/dist/noble/curves/curve.js +167 -0
- package/dist/noble/curves/modular.d.ts +122 -0
- package/dist/noble/curves/modular.js +442 -0
- package/dist/noble/curves/utils.d.ts +93 -0
- package/dist/noble/curves/utils.js +385 -0
- package/dist/noble/curves/weierstrass.d.ts +240 -0
- package/dist/noble/curves/weierstrass.js +1178 -0
- package/dist/noble/ed25519.d.ts +100 -0
- package/dist/noble/ed25519.js +494 -0
- package/dist/noble/hmac.d.ts +25 -0
- package/dist/noble/hmac.js +101 -0
- package/dist/noble/index.d.ts +2 -0
- package/dist/noble/index.js +20 -0
- package/dist/noble/keccak.d.ts +58 -0
- package/dist/noble/keccak.js +289 -0
- package/dist/noble/ripemd_160.d.ts +20 -0
- package/dist/noble/ripemd_160.js +147 -0
- package/dist/noble/secp256k1.d.ts +98 -0
- package/dist/noble/secp256k1.js +309 -0
- package/dist/noble/sha256.d.ts +34 -0
- package/dist/noble/sha256.js +146 -0
- package/dist/noble/sha512.d.ts +66 -0
- package/dist/noble/sha512.js +301 -0
- package/dist/noble/utils.d.ts +90 -0
- package/dist/noble/utils.js +278 -0
- package/dist/ripemd_160.d.ts +1 -0
- package/dist/ripemd_160.js +23 -0
- package/dist/rust_vrf_reimpl/curves.d.ts +162 -0
- package/dist/rust_vrf_reimpl/curves.js +4225 -0
- package/dist/rust_vrf_reimpl/vrf03.d.ts +60 -0
- package/dist/rust_vrf_reimpl/vrf03.js +373 -0
- package/dist/rust_vrf_reimpl/vrf10.d.ts +73 -0
- package/dist/rust_vrf_reimpl/vrf10.js +468 -0
- package/dist/rust_vrf_reimpl/vrf10_batch.d.ts +53 -0
- package/dist/rust_vrf_reimpl/vrf10_batch.js +245 -0
- package/dist/secp256k1.d.ts +4 -0
- package/dist/secp256k1.js +33 -0
- package/dist/sha2_256.d.ts +16 -0
- package/dist/sha2_256.js +403 -0
- package/dist/sha2_512.d.ts +16 -0
- package/dist/sha2_512.js +256 -0
- package/dist/sha3.d.ts +17 -0
- package/dist/sha3.js +181 -0
- package/dist/types.d.ts +26 -0
- package/dist/types.js +120 -0
- package/dist/utils/assert.d.ts +3 -0
- package/dist/utils/assert.js +55 -0
- package/dist/utils/base32.d.ts +5 -0
- package/dist/utils/base32.js +52 -0
- package/dist/utils/bigintToBuffer.d.ts +1 -0
- package/dist/utils/bigintToBuffer.js +27 -0
- package/dist/utils/bytesToHex.d.ts +2 -0
- package/dist/utils/bytesToHex.js +15 -0
- package/dist/utils/getRandomValues.d.ts +4 -0
- package/dist/utils/getRandomValues.js +12 -0
- package/dist/utils/hexToBytes.d.ts +2 -0
- package/dist/utils/hexToBytes.js +14 -0
- package/dist/utils/index.d.ts +3 -0
- package/dist/utils/index.js +19 -0
- package/dist/utils/positiveMod.d.ts +1 -0
- package/dist/utils/positiveMod.js +11 -0
- package/dist/utils/promisifySync.d.ts +0 -0
- package/dist/utils/promisifySync.js +0 -0
- package/dist/utils/rotr32.d.ts +2 -0
- package/dist/utils/rotr32.js +7 -0
- package/dist/vrf.d.ts +74 -0
- package/dist/vrf.js +286 -0
- package/package.json +49 -4
package/dist/sha2_256.js
ADDED
|
@@ -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 {};
|
package/dist/sha2_512.js
ADDED
|
@@ -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;
|