@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/ed25519.js
ADDED
|
@@ -0,0 +1,721 @@
|
|
|
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.verifyEd25519Signature = exports.verifyEd25519Signature_sync = exports.getEd25519Signature = exports.getEd25519Signature_sync = exports.signExtendedEd25519 = exports.signExtendedEd25519_sync = exports.signEd25519 = exports.signEd25519_sync = exports.extendedToPublic = exports.deriveEd25519PublicKey = exports.deriveEd25519PublicKey_sync = exports.getExtendedEd25519PrivateKey = exports.getExtendedEd25519PrivateKey_sync = exports.getExtendEd25519PrivateKeyComponents_sync = exports.getExtendEd25519PrivateKeyComponentsAsBytes_sync = exports.scalarMultBase = exports.scalarToBytes = exports.scalarFromBytes = exports.pointFromBytes = exports.bigpointToUint8Array = exports.encodeInt = exports.scalarMul = exports.addPointsEdwards = exports.ed25519bigint = void 0;
|
|
65
|
+
var uint8array_utils_1 = require("@harmoniclabs/uint8array-utils");
|
|
66
|
+
var sha2_512_1 = require("./sha2_512.js");
|
|
67
|
+
var types_1 = require("./types.js");
|
|
68
|
+
var positiveMod_1 = require("./utils/positiveMod.js");
|
|
69
|
+
var bigintToBuffer_1 = require("./utils/bigintToBuffer.js");
|
|
70
|
+
var hasGlobalWebCrypto_1 = require("./hasGlobalWebCrypto.js");
|
|
71
|
+
// "Ed25519" does not seem to have great support yet
|
|
72
|
+
var __hasNativeSupport = false && (hasGlobalWebCrypto_1.hasGlobalWebCrypto
|
|
73
|
+
&& typeof globalThis.crypto.subtle.importKey === "function"
|
|
74
|
+
&& typeof globalThis.crypto.subtle.sign === "function"
|
|
75
|
+
&& typeof globalThis.crypto.subtle.verify === "function");
|
|
76
|
+
var NATIVE_ALGO_NAME = "Ed25519";
|
|
77
|
+
var NATIVE_ALGO = Object.freeze({ name: NATIVE_ALGO_NAME });
|
|
78
|
+
var importKey = __hasNativeSupport ?
|
|
79
|
+
globalThis.crypto.subtle.importKey.bind(globalThis.crypto.subtle) :
|
|
80
|
+
function () { return Promise.resolve(new ArrayBuffer(0)); };
|
|
81
|
+
function getNativePrivateKey(bytes) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
83
|
+
return __generator(this, function (_a) {
|
|
84
|
+
switch (_a.label) {
|
|
85
|
+
case 0:
|
|
86
|
+
// ensure 64 bytes
|
|
87
|
+
if (bytes.length === 32)
|
|
88
|
+
bytes = getExtendedEd25519PrivateKey_sync(bytes);
|
|
89
|
+
return [4 /*yield*/, importKey("raw", bytes, NATIVE_ALGO, false, ["sign", "deriveKey"])];
|
|
90
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
function getNativePublicKey(bytes) {
|
|
96
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
97
|
+
return __generator(this, function (_a) {
|
|
98
|
+
return [2 /*return*/, importKey("raw", bytes, NATIVE_ALGO, false, ["verify"])];
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
function nativeEd25519Sign(privateKey, data) {
|
|
103
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
104
|
+
var _a, _b, _c, _d;
|
|
105
|
+
return __generator(this, function (_e) {
|
|
106
|
+
switch (_e.label) {
|
|
107
|
+
case 0: return [4 /*yield*/, ensureNativeSupport()];
|
|
108
|
+
case 1:
|
|
109
|
+
if (!(_e.sent()))
|
|
110
|
+
return [2 /*return*/, getEd25519Signature_sync(privateKey, data)];
|
|
111
|
+
_a = Uint8Array.bind;
|
|
112
|
+
_c = (_b = globalThis.crypto.subtle).sign;
|
|
113
|
+
_d = [NATIVE_ALGO_NAME];
|
|
114
|
+
return [4 /*yield*/, getNativePrivateKey(privateKey)];
|
|
115
|
+
case 2: return [4 /*yield*/, _c.apply(_b, _d.concat([_e.sent(), data]))];
|
|
116
|
+
case 3: return [2 /*return*/, new (_a.apply(Uint8Array, [void 0, _e.sent()]))()];
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
var ED25519_ORDER = BigInt('57896044618658097711785492504343953926634992332820282019728792003956564819949');
|
|
122
|
+
function ed25519bigint(n) {
|
|
123
|
+
return (0, positiveMod_1.positiveMod)(n, ED25519_ORDER);
|
|
124
|
+
}
|
|
125
|
+
exports.ed25519bigint = ed25519bigint;
|
|
126
|
+
function toArrayBuffer(bytes) {
|
|
127
|
+
if (bytes instanceof ArrayBuffer)
|
|
128
|
+
return bytes;
|
|
129
|
+
var buffer = new ArrayBuffer(bytes.length);
|
|
130
|
+
var view = new Uint8Array(buffer);
|
|
131
|
+
view.set(bytes);
|
|
132
|
+
return buffer;
|
|
133
|
+
}
|
|
134
|
+
function nativeEd25519Verify(publicKey, signature, data) {
|
|
135
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
136
|
+
var _a, _b, _c;
|
|
137
|
+
return __generator(this, function (_d) {
|
|
138
|
+
switch (_d.label) {
|
|
139
|
+
case 0: return [4 /*yield*/, ensureNativeSupport()];
|
|
140
|
+
case 1:
|
|
141
|
+
if (!(_d.sent()))
|
|
142
|
+
return [2 /*return*/, verifyEd25519Signature_sync(signature, data, publicKey)];
|
|
143
|
+
_b = (_a = globalThis.crypto.subtle).verify;
|
|
144
|
+
_c = [NATIVE_ALGO_NAME];
|
|
145
|
+
return [4 /*yield*/, getNativePublicKey(publicKey)];
|
|
146
|
+
case 2: return [2 /*return*/, _b.apply(_a, _c.concat([_d.sent(), toArrayBuffer(signature),
|
|
147
|
+
toArrayBuffer(data)]))];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
function _test(privateKey, publicKey, data, uint8ArrayEq) {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
154
|
+
var privBytes, _a, pubBytes, _b, nativeSignResult, nativeVerifyResult, mySignResult, myVerifyResult, _c;
|
|
155
|
+
return __generator(this, function (_d) {
|
|
156
|
+
switch (_d.label) {
|
|
157
|
+
case 0:
|
|
158
|
+
_d.trys.push([0, 5, , 6]);
|
|
159
|
+
_a = Uint8Array.bind;
|
|
160
|
+
return [4 /*yield*/, globalThis.crypto.subtle.exportKey("raw", privateKey)];
|
|
161
|
+
case 1:
|
|
162
|
+
privBytes = new (_a.apply(Uint8Array, [void 0, _d.sent()]))();
|
|
163
|
+
_b = Uint8Array.bind;
|
|
164
|
+
return [4 /*yield*/, globalThis.crypto.subtle.exportKey("raw", publicKey)];
|
|
165
|
+
case 2:
|
|
166
|
+
pubBytes = new (_b.apply(Uint8Array, [void 0, _d.sent()]))();
|
|
167
|
+
return [4 /*yield*/, nativeEd25519Sign(privBytes, data)];
|
|
168
|
+
case 3:
|
|
169
|
+
nativeSignResult = _d.sent();
|
|
170
|
+
return [4 /*yield*/, nativeEd25519Verify(pubBytes, nativeSignResult, data)];
|
|
171
|
+
case 4:
|
|
172
|
+
nativeVerifyResult = _d.sent();
|
|
173
|
+
mySignResult = getEd25519Signature_sync(data, privBytes);
|
|
174
|
+
myVerifyResult = verifyEd25519Signature_sync(mySignResult, data, pubBytes);
|
|
175
|
+
__hasNativeSupport = (__hasNativeSupport &&
|
|
176
|
+
uint8ArrayEq(nativeSignResult, mySignResult) &&
|
|
177
|
+
nativeVerifyResult === myVerifyResult);
|
|
178
|
+
return [3 /*break*/, 6];
|
|
179
|
+
case 5:
|
|
180
|
+
_c = _d.sent();
|
|
181
|
+
__hasNativeSupport = false;
|
|
182
|
+
return [3 /*break*/, 6];
|
|
183
|
+
case 6: return [2 /*return*/];
|
|
184
|
+
}
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
}
|
|
188
|
+
var _support_was_tested = false;
|
|
189
|
+
function _test_support() {
|
|
190
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
191
|
+
var _keyPair /* { privateKey, publicKey } */, extendedPrivate, cryptoPrivate, repeatArr, eqU8Arr, bench, sum, _a;
|
|
192
|
+
return __generator(this, function (_b) {
|
|
193
|
+
switch (_b.label) {
|
|
194
|
+
case 0:
|
|
195
|
+
if (_support_was_tested || !__hasNativeSupport)
|
|
196
|
+
return [2 /*return*/];
|
|
197
|
+
_b.label = 1;
|
|
198
|
+
case 1:
|
|
199
|
+
_b.trys.push([1, 5, , 6]);
|
|
200
|
+
return [4 /*yield*/, globalThis.crypto.subtle.generateKey(NATIVE_ALGO, true, ["sign", "verify"])];
|
|
201
|
+
case 2:
|
|
202
|
+
_keyPair = (_b.sent());
|
|
203
|
+
extendedPrivate = new Uint8Array(64);
|
|
204
|
+
globalThis.crypto.getRandomValues(extendedPrivate);
|
|
205
|
+
return [4 /*yield*/, getNativePrivateKey(extendedPrivate)];
|
|
206
|
+
case 3:
|
|
207
|
+
cryptoPrivate = _b.sent();
|
|
208
|
+
repeatArr = function (arr, n) {
|
|
209
|
+
for (var i = 0; i < n; i++)
|
|
210
|
+
arr = arr.concat.apply(arr, __spreadArray([], __read(arr), false));
|
|
211
|
+
return arr;
|
|
212
|
+
};
|
|
213
|
+
eqU8Arr = function (a, b) {
|
|
214
|
+
if (!(a instanceof Uint8Array) || !(b instanceof Uint8Array))
|
|
215
|
+
return false;
|
|
216
|
+
if (a.length !== b.length)
|
|
217
|
+
return false;
|
|
218
|
+
for (var i = 0; i < a.length; i++)
|
|
219
|
+
if (a[i] !== b[i])
|
|
220
|
+
return false;
|
|
221
|
+
return true;
|
|
222
|
+
};
|
|
223
|
+
return [4 /*yield*/, Promise.all(
|
|
224
|
+
// repeatArr(
|
|
225
|
+
// [
|
|
226
|
+
// new Uint8Array( 0 ),
|
|
227
|
+
// new Uint8Array( 10 ),
|
|
228
|
+
// new Uint8Array([ 0xde, 0xad, 0xbe, 0xef ]),
|
|
229
|
+
//
|
|
230
|
+
// new Uint8Array( repeatArr([0xaa], 20 ) ),
|
|
231
|
+
// new Uint8Array( repeatArr([0xbb], 20 ) ),
|
|
232
|
+
// new Uint8Array( repeatArr([0xcc], 20 ) ),
|
|
233
|
+
// new Uint8Array( repeatArr([0xdd], 20 ) ),
|
|
234
|
+
// new Uint8Array( repeatArr([0xee], 20 ) ),
|
|
235
|
+
// new Uint8Array( repeatArr([0xff], 20 ) ),
|
|
236
|
+
//
|
|
237
|
+
// new Uint8Array( repeatArr([0xaa, 0xbb], 33 ) ),
|
|
238
|
+
// new Uint8Array( repeatArr([0xbb, 0xcc], 33 ) ),
|
|
239
|
+
// new Uint8Array( repeatArr([0xcc, 0xdd], 33 ) ),
|
|
240
|
+
// new Uint8Array( repeatArr([0xdd, 0xee], 33 ) ),
|
|
241
|
+
// new Uint8Array( repeatArr([0xee, 0xff], 33 ) ),
|
|
242
|
+
// new Uint8Array( repeatArr([0xff, 0x00], 33 ) ),
|
|
243
|
+
//
|
|
244
|
+
// new Uint8Array( repeatArr([ 0xde, 0xad, 0xbe, 0xef ], 30 ) ),
|
|
245
|
+
// ],
|
|
246
|
+
// 10
|
|
247
|
+
// )
|
|
248
|
+
// .map( data => _test( privateKey, publicKey, data, uint8ArrayEq ) )
|
|
249
|
+
[])];
|
|
250
|
+
case 4:
|
|
251
|
+
bench = _b.sent();
|
|
252
|
+
if (!__hasNativeSupport)
|
|
253
|
+
return [2 /*return*/];
|
|
254
|
+
sum = bench.reduce(function (acc, _a) {
|
|
255
|
+
var _b = __read(_a, 2), native = _b[0], js = _b[1];
|
|
256
|
+
acc[0] += native;
|
|
257
|
+
acc[1] += js;
|
|
258
|
+
return acc;
|
|
259
|
+
}, [0, 0]);
|
|
260
|
+
__hasNativeSupport = __hasNativeSupport && sum[0] < sum[1];
|
|
261
|
+
return [3 /*break*/, 6];
|
|
262
|
+
case 5:
|
|
263
|
+
_a = _b.sent();
|
|
264
|
+
__hasNativeSupport = false;
|
|
265
|
+
_support_was_tested = true;
|
|
266
|
+
return [3 /*break*/, 6];
|
|
267
|
+
case 6:
|
|
268
|
+
_support_was_tested = true;
|
|
269
|
+
return [2 /*return*/];
|
|
270
|
+
}
|
|
271
|
+
});
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
if (__hasNativeSupport) {
|
|
275
|
+
_test_support();
|
|
276
|
+
}
|
|
277
|
+
else {
|
|
278
|
+
_support_was_tested = true;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* There are cases where `globalThis.crypto.subtle` is fully defined
|
|
282
|
+
* but the algorithm `Ed25519` is NOT SUPPORTED.
|
|
283
|
+
*
|
|
284
|
+
* unfortunately, there is NO WAY to check this syncronously.
|
|
285
|
+
*/
|
|
286
|
+
function ensureNativeSupport() {
|
|
287
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
288
|
+
return __generator(this, function (_a) {
|
|
289
|
+
switch (_a.label) {
|
|
290
|
+
case 0:
|
|
291
|
+
if (!__hasNativeSupport)
|
|
292
|
+
return [2 /*return*/, false];
|
|
293
|
+
return [4 /*yield*/, _test_support()];
|
|
294
|
+
case 1:
|
|
295
|
+
_a.sent();
|
|
296
|
+
return [2 /*return*/, __hasNativeSupport];
|
|
297
|
+
}
|
|
298
|
+
});
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
var Q = BigInt("57896044618658097711785492504343953926634992332820282019728792003956564819949"); // ipowi(255) - 19
|
|
302
|
+
var Q38 = BigInt("7237005577332262213973186563042994240829374041602535252466099000494570602494"); // (Q + 3)/8
|
|
303
|
+
var CURVE_ORDER = BigInt("7237005577332262213973186563042994240857116359379907606001950938285454250989"); // ipow2(252) + 27742317777372353535851937790883648493;
|
|
304
|
+
var D = -BigInt("4513249062541557337682894930092624173785641285191125241628941591882900924598840740"); // -121665 * invert(121666);
|
|
305
|
+
var I = BigInt("19681161376707505956807079304988542015446066515923890162744021073123829784752"); // expMod(BigInt( 2 ), (Q - BigInt( 1 ))/4, Q);
|
|
306
|
+
var BASE = Object.freeze([
|
|
307
|
+
BigInt("15112221349535400772501151409588531511454012693041857206046113283949847762202"),
|
|
308
|
+
BigInt("46316835694926478169428394003475163141307993866256225615783033603165251855960") // (4*invert(5)) % Q
|
|
309
|
+
]);
|
|
310
|
+
/**
|
|
311
|
+
*
|
|
312
|
+
* @param {bigint} b
|
|
313
|
+
* @param {bigint} e
|
|
314
|
+
* @param {bigint} m
|
|
315
|
+
* @returns {bigint}
|
|
316
|
+
*/
|
|
317
|
+
function expMod(b, e, m) {
|
|
318
|
+
if (e == BigInt(0)) {
|
|
319
|
+
return BigInt(1);
|
|
320
|
+
}
|
|
321
|
+
else {
|
|
322
|
+
var t = expMod(b, e / BigInt(2), m);
|
|
323
|
+
t = (t * t) % m;
|
|
324
|
+
if ((e % BigInt(2)) !== BigInt(0)) {
|
|
325
|
+
t = (0, positiveMod_1.positiveMod)(t * b, m);
|
|
326
|
+
}
|
|
327
|
+
return t;
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
function invert(n) {
|
|
331
|
+
var a = (0, positiveMod_1.positiveMod)(n, Q);
|
|
332
|
+
var b = Q;
|
|
333
|
+
var x = BigInt(0);
|
|
334
|
+
var y = BigInt(1);
|
|
335
|
+
var u = BigInt(1);
|
|
336
|
+
var v = BigInt(0);
|
|
337
|
+
while (a !== BigInt(0)) {
|
|
338
|
+
var q = b / a;
|
|
339
|
+
var r = b % a;
|
|
340
|
+
var m = x - u * q;
|
|
341
|
+
var n_1 = y - v * q;
|
|
342
|
+
b = a;
|
|
343
|
+
a = r;
|
|
344
|
+
x = u;
|
|
345
|
+
y = v;
|
|
346
|
+
u = m;
|
|
347
|
+
v = n_1;
|
|
348
|
+
}
|
|
349
|
+
return (0, positiveMod_1.positiveMod)(x, Q);
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* @param {bigint} y
|
|
353
|
+
* @returns {bigint}
|
|
354
|
+
*/
|
|
355
|
+
function recoverX(y) {
|
|
356
|
+
var yy = y * y;
|
|
357
|
+
var xx = (yy - BigInt(1)) * invert(D * yy + BigInt(1));
|
|
358
|
+
var x = expMod(xx, Q38, Q);
|
|
359
|
+
if (((x * x - xx) % Q) !== BigInt(0)) {
|
|
360
|
+
x = (x * I) % Q;
|
|
361
|
+
}
|
|
362
|
+
if ((x % BigInt(2)) !== BigInt(0)) {
|
|
363
|
+
x = Q - x;
|
|
364
|
+
}
|
|
365
|
+
return x;
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Curve point 'addition'
|
|
369
|
+
* Note: this is probably the bottleneck of this Ed25519 implementation
|
|
370
|
+
*/
|
|
371
|
+
function addPointsEdwards(a, b) {
|
|
372
|
+
var x1 = a[0];
|
|
373
|
+
var y1 = a[1];
|
|
374
|
+
var x2 = b[0];
|
|
375
|
+
var y2 = b[1];
|
|
376
|
+
var dxxyy = D * x1 * x2 * y1 * y2;
|
|
377
|
+
var x3 = (x1 * y2 + x2 * y1) * invert(BigInt(1) + dxxyy);
|
|
378
|
+
var y3 = (y1 * y2 + x1 * x2) * invert(BigInt(1) - dxxyy);
|
|
379
|
+
return [(0, positiveMod_1.positiveMod)(x3, Q), (0, positiveMod_1.positiveMod)(y3, Q)];
|
|
380
|
+
}
|
|
381
|
+
exports.addPointsEdwards = addPointsEdwards;
|
|
382
|
+
function scalarMul(point, n) {
|
|
383
|
+
if (n === BigInt(0)) {
|
|
384
|
+
return [BigInt(0), BigInt(1)];
|
|
385
|
+
}
|
|
386
|
+
else {
|
|
387
|
+
var sum = scalarMul(point, n / BigInt(2));
|
|
388
|
+
sum = addPointsEdwards(sum, sum);
|
|
389
|
+
if ((n % BigInt(2)) !== BigInt(0)) {
|
|
390
|
+
sum = addPointsEdwards(sum, point);
|
|
391
|
+
}
|
|
392
|
+
return sum;
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
exports.scalarMul = scalarMul;
|
|
396
|
+
/**
|
|
397
|
+
* Curve point 'multiplication'
|
|
398
|
+
*/
|
|
399
|
+
function encodeInt(y) {
|
|
400
|
+
return (0, bigintToBuffer_1.bigintToBuffer)(y, 32).reverse();
|
|
401
|
+
}
|
|
402
|
+
exports.encodeInt = encodeInt;
|
|
403
|
+
function decodeInt(s) {
|
|
404
|
+
return BigInt("0x" + (0, types_1.byteArrToHex)(s.reverse()));
|
|
405
|
+
}
|
|
406
|
+
function bigpointToByteArray(point) {
|
|
407
|
+
var _a = __read(point, 2), x = _a[0], y = _a[1];
|
|
408
|
+
var bytes = encodeInt(y);
|
|
409
|
+
// last bit is determined by x
|
|
410
|
+
bytes[31] = ((bytes[31] & 255) | (Number(x & BigInt(1)) * 128));
|
|
411
|
+
return bytes;
|
|
412
|
+
}
|
|
413
|
+
function bigpointToUint8Array(point) {
|
|
414
|
+
return new Uint8Array(bigpointToByteArray(point));
|
|
415
|
+
}
|
|
416
|
+
exports.bigpointToUint8Array = bigpointToUint8Array;
|
|
417
|
+
function getBit(bytes, i) {
|
|
418
|
+
return ((bytes[Math.floor(i / 8)] >> i % 8) & 1);
|
|
419
|
+
}
|
|
420
|
+
function isOnCurve(point) {
|
|
421
|
+
var x = point[0];
|
|
422
|
+
var y = point[1];
|
|
423
|
+
var xx = x * x;
|
|
424
|
+
var yy = y * y;
|
|
425
|
+
return (-xx + yy - BigInt(1) - D * xx * yy) % Q == BigInt(0);
|
|
426
|
+
}
|
|
427
|
+
function pointFromBytes(s) {
|
|
428
|
+
if (!(s instanceof Uint8Array))
|
|
429
|
+
s = forceUint8Array(s);
|
|
430
|
+
// assert(s.length === 32, "point must have length of 32; point length:" + s.length);
|
|
431
|
+
var bytes = s.slice(0, 32);
|
|
432
|
+
bytes[31] = (bytes[31] & 127);
|
|
433
|
+
var y = decodeInt(bytes);
|
|
434
|
+
var x = recoverX(y);
|
|
435
|
+
if (Number(x & BigInt(1)) !== getBit(s, 255)) {
|
|
436
|
+
x = Q - x;
|
|
437
|
+
}
|
|
438
|
+
var point = [x, y];
|
|
439
|
+
if (!isOnCurve(point))
|
|
440
|
+
throw new Error("point isn't on curve");
|
|
441
|
+
return point;
|
|
442
|
+
}
|
|
443
|
+
exports.pointFromBytes = pointFromBytes;
|
|
444
|
+
var ipow2_253 = BigInt("28948022309329048855892746252171976963317496166410141009864396001978282409984"); // ipow2(253)
|
|
445
|
+
function scalarFromBytes(h) {
|
|
446
|
+
var bytes = h.slice(0, 32);
|
|
447
|
+
bytes[0] = (bytes[0] & 248);
|
|
448
|
+
bytes[31] = (bytes[31] & 63);
|
|
449
|
+
return ipow2_253 + BigInt("0x" + (0, types_1.byteArrToHex)(bytes.reverse()));
|
|
450
|
+
}
|
|
451
|
+
exports.scalarFromBytes = scalarFromBytes;
|
|
452
|
+
function scalarToBytes(s) {
|
|
453
|
+
s = (0, positiveMod_1.positiveMod)(s, CURVE_ORDER);
|
|
454
|
+
var bytes = encodeInt(s);
|
|
455
|
+
bytes.reverse();
|
|
456
|
+
return bytes;
|
|
457
|
+
}
|
|
458
|
+
exports.scalarToBytes = scalarToBytes;
|
|
459
|
+
function ihash(m) {
|
|
460
|
+
return decodeInt((0, sha2_512_1.sha2_512_sync)(m));
|
|
461
|
+
}
|
|
462
|
+
function forceUint8Array(stuff) {
|
|
463
|
+
if (stuff instanceof Uint8Array)
|
|
464
|
+
return stuff;
|
|
465
|
+
if (stuff instanceof ArrayBuffer)
|
|
466
|
+
return new Uint8Array(stuff);
|
|
467
|
+
if (typeof stuff === "string")
|
|
468
|
+
return (0, uint8array_utils_1.fromHex)(stuff);
|
|
469
|
+
return new Uint8Array(stuff);
|
|
470
|
+
}
|
|
471
|
+
function scalarMultBase(scalar) {
|
|
472
|
+
return scalarMul(BASE, scalar);
|
|
473
|
+
}
|
|
474
|
+
exports.scalarMultBase = scalarMultBase;
|
|
475
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
476
|
+
//------------------------------------------------------------------------------------------------------//
|
|
477
|
+
//------------------------------------------- key management -------------------------------------------//
|
|
478
|
+
//------------------------------------------- and derivation -------------------------------------------//
|
|
479
|
+
//------------------------------------------------------------------------------------------------------//
|
|
480
|
+
//////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
481
|
+
function getExtendEd25519PrivateKeyComponentsAsBytes_sync(privateKey) {
|
|
482
|
+
var extended = (0, sha2_512_1.sha2_512_sync)(privateKey);
|
|
483
|
+
return [extended.slice(0, 32), extended.slice(32, 64)];
|
|
484
|
+
}
|
|
485
|
+
exports.getExtendEd25519PrivateKeyComponentsAsBytes_sync = getExtendEd25519PrivateKeyComponentsAsBytes_sync;
|
|
486
|
+
function getExtendEd25519PrivateKeyComponents_sync(privateKey) {
|
|
487
|
+
var _a = __read(getExtendEd25519PrivateKeyComponentsAsBytes_sync(privateKey), 2), a_bytes = _a[0], extension = _a[1];
|
|
488
|
+
return [scalarFromBytes(a_bytes), extension];
|
|
489
|
+
}
|
|
490
|
+
exports.getExtendEd25519PrivateKeyComponents_sync = getExtendEd25519PrivateKeyComponents_sync;
|
|
491
|
+
function getExtendedEd25519PrivateKey_sync(privateKey) {
|
|
492
|
+
privateKey = Uint8Array.prototype.slice.call(forceUint8Array(privateKey), 0, 32);
|
|
493
|
+
var extended = (0, sha2_512_1.sha2_512_sync)(privateKey);
|
|
494
|
+
extended.set(privateKey, 0);
|
|
495
|
+
return extended;
|
|
496
|
+
}
|
|
497
|
+
exports.getExtendedEd25519PrivateKey_sync = getExtendedEd25519PrivateKey_sync;
|
|
498
|
+
function getExtendedEd25519PrivateKey(privateKey) {
|
|
499
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
500
|
+
var extended;
|
|
501
|
+
return __generator(this, function (_a) {
|
|
502
|
+
switch (_a.label) {
|
|
503
|
+
case 0:
|
|
504
|
+
// here `__hasNativeSupport` instead of `await ensureNativeSupport()` is fine
|
|
505
|
+
// because we want to use `sha2_512`, wich implies different tests than the ones
|
|
506
|
+
// used in `ensureNativeSupport`; `__hasNativeSupport` at least tell us if there is a `crypto` global at all
|
|
507
|
+
if (!__hasNativeSupport)
|
|
508
|
+
return [2 /*return*/, getExtendedEd25519PrivateKey_sync(privateKey)];
|
|
509
|
+
privateKey = Uint8Array.prototype.slice.call(forceUint8Array(privateKey), 0, 32);
|
|
510
|
+
return [4 /*yield*/, (0, sha2_512_1.sha2_512)(privateKey)];
|
|
511
|
+
case 1:
|
|
512
|
+
extended = _a.sent();
|
|
513
|
+
extended.set(privateKey, 0);
|
|
514
|
+
return [2 /*return*/, extended];
|
|
515
|
+
}
|
|
516
|
+
});
|
|
517
|
+
});
|
|
518
|
+
}
|
|
519
|
+
exports.getExtendedEd25519PrivateKey = getExtendedEd25519PrivateKey;
|
|
520
|
+
function deriveEd25519PublicKey_sync(privateKey) {
|
|
521
|
+
var extended = (0, sha2_512_1.sha2_512_sync)(privateKey);
|
|
522
|
+
var a = scalarFromBytes(extended);
|
|
523
|
+
var A = scalarMul(BASE, a);
|
|
524
|
+
return bigpointToByteArray(A);
|
|
525
|
+
}
|
|
526
|
+
exports.deriveEd25519PublicKey_sync = deriveEd25519PublicKey_sync;
|
|
527
|
+
function wrapped_deriveEd25519PublicKey_sync(privateKey) {
|
|
528
|
+
return Promise.resolve(deriveEd25519PublicKey_sync(privateKey));
|
|
529
|
+
}
|
|
530
|
+
function deriveEd25519PublicKey_async(privateKey) {
|
|
531
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
532
|
+
var extended, a, A;
|
|
533
|
+
return __generator(this, function (_a) {
|
|
534
|
+
switch (_a.label) {
|
|
535
|
+
case 0:
|
|
536
|
+
if (!__hasNativeSupport)
|
|
537
|
+
return [2 /*return*/, deriveEd25519PublicKey_sync(privateKey)];
|
|
538
|
+
return [4 /*yield*/, (0, sha2_512_1.sha2_512)(privateKey)];
|
|
539
|
+
case 1:
|
|
540
|
+
extended = _a.sent();
|
|
541
|
+
a = scalarFromBytes(extended);
|
|
542
|
+
A = scalarMul(BASE, a);
|
|
543
|
+
return [2 /*return*/, bigpointToByteArray(A)];
|
|
544
|
+
}
|
|
545
|
+
});
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
exports.deriveEd25519PublicKey = __hasNativeSupport ? deriveEd25519PublicKey_async : wrapped_deriveEd25519PublicKey_sync;
|
|
549
|
+
function extendedToPublic(extended) {
|
|
550
|
+
extended = forceUint8Array(extended);
|
|
551
|
+
var a = scalarFromBytes(extended);
|
|
552
|
+
var A = scalarMul(BASE, a);
|
|
553
|
+
return new Uint8Array(bigpointToByteArray(A));
|
|
554
|
+
}
|
|
555
|
+
exports.extendedToPublic = extendedToPublic;
|
|
556
|
+
/** sign a message with a (32 bytes) private key */
|
|
557
|
+
function signEd25519_sync(message, privateKey) {
|
|
558
|
+
message = forceUint8Array(message);
|
|
559
|
+
privateKey = forceUint8Array(privateKey);
|
|
560
|
+
var extendedKey = privateKey.length === 64 ?
|
|
561
|
+
privateKey :
|
|
562
|
+
(0, sha2_512_1.sha2_512_sync)(privateKey);
|
|
563
|
+
return signExtendedEd25519_sync(message, extendedKey);
|
|
564
|
+
}
|
|
565
|
+
exports.signEd25519_sync = signEd25519_sync;
|
|
566
|
+
/** sign a message with a (32 bytes) private key */
|
|
567
|
+
function signEd25519(message, privateKey) {
|
|
568
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
569
|
+
var extended, _a;
|
|
570
|
+
return __generator(this, function (_b) {
|
|
571
|
+
switch (_b.label) {
|
|
572
|
+
case 0:
|
|
573
|
+
privateKey = forceUint8Array(privateKey);
|
|
574
|
+
if (!(privateKey.length === 64)) return [3 /*break*/, 1];
|
|
575
|
+
_a = privateKey;
|
|
576
|
+
return [3 /*break*/, 3];
|
|
577
|
+
case 1: return [4 /*yield*/, (0, sha2_512_1.sha2_512)(privateKey)];
|
|
578
|
+
case 2:
|
|
579
|
+
_a = _b.sent();
|
|
580
|
+
_b.label = 3;
|
|
581
|
+
case 3:
|
|
582
|
+
extended = _a;
|
|
583
|
+
return [4 /*yield*/, (0, exports.signExtendedEd25519)(message, extended)];
|
|
584
|
+
case 4: return [2 /*return*/, _b.sent()];
|
|
585
|
+
}
|
|
586
|
+
});
|
|
587
|
+
});
|
|
588
|
+
}
|
|
589
|
+
exports.signEd25519 = signEd25519;
|
|
590
|
+
/** sign a message with a (64 bytes) private key */
|
|
591
|
+
function signExtendedEd25519_sync(_message, _extendedKey) {
|
|
592
|
+
var _a;
|
|
593
|
+
var message = forceUint8Array(_message);
|
|
594
|
+
var privateKeyHash = forceUint8Array(_extendedKey);
|
|
595
|
+
if (privateKeyHash.length !== 64)
|
|
596
|
+
throw new Error('signExtendedEd25519_sync:: extended key must have length 64');
|
|
597
|
+
var a = scalarFromBytes(privateKeyHash);
|
|
598
|
+
// for convenience getulate publicKey here:
|
|
599
|
+
var publicKey = bigpointToByteArray(scalarMul(BASE, a));
|
|
600
|
+
var r = ihash((0, uint8array_utils_1.concatUint8Array)(privateKeyHash.slice(32, 64), forceUint8Array(message)));
|
|
601
|
+
var R = scalarMul(BASE, r);
|
|
602
|
+
var S = (0, positiveMod_1.positiveMod)(r +
|
|
603
|
+
ihash((0, uint8array_utils_1.concatUint8Array)(bigpointToByteArray(R), publicKey, forceUint8Array(message))) * a, CURVE_ORDER);
|
|
604
|
+
var pubKey = publicKey;
|
|
605
|
+
var signature = (0, uint8array_utils_1.concatUint8Array)(bigpointToByteArray(R), encodeInt(S));
|
|
606
|
+
return _a = {
|
|
607
|
+
0: pubKey,
|
|
608
|
+
1: signature,
|
|
609
|
+
length: 2
|
|
610
|
+
},
|
|
611
|
+
_a[Symbol.iterator] = function () {
|
|
612
|
+
return __generator(this, function (_a) {
|
|
613
|
+
switch (_a.label) {
|
|
614
|
+
case 0: return [4 /*yield*/, pubKey];
|
|
615
|
+
case 1:
|
|
616
|
+
_a.sent();
|
|
617
|
+
return [4 /*yield*/, signature];
|
|
618
|
+
case 2:
|
|
619
|
+
_a.sent();
|
|
620
|
+
return [2 /*return*/];
|
|
621
|
+
}
|
|
622
|
+
});
|
|
623
|
+
},
|
|
624
|
+
_a.pubKey = pubKey,
|
|
625
|
+
_a.signature = signature,
|
|
626
|
+
_a;
|
|
627
|
+
}
|
|
628
|
+
exports.signExtendedEd25519_sync = signExtendedEd25519_sync;
|
|
629
|
+
function wrapped_signExtendedEd25519_sync(message, extendedKey) {
|
|
630
|
+
return Promise.resolve(signExtendedEd25519_sync(message, extendedKey));
|
|
631
|
+
}
|
|
632
|
+
/** sign a message with a (64 bytes) private key */
|
|
633
|
+
function nativeExtendedSignEd25519(_message, _extendedKey) {
|
|
634
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
635
|
+
var message, privateKeyHash, a, pubKey, signature;
|
|
636
|
+
var _a;
|
|
637
|
+
return __generator(this, function (_b) {
|
|
638
|
+
switch (_b.label) {
|
|
639
|
+
case 0: return [4 /*yield*/, ensureNativeSupport()];
|
|
640
|
+
case 1:
|
|
641
|
+
if (!(_b.sent()))
|
|
642
|
+
return [2 /*return*/, signExtendedEd25519_sync(_message, _extendedKey)];
|
|
643
|
+
message = forceUint8Array(_message);
|
|
644
|
+
privateKeyHash = forceUint8Array(_extendedKey);
|
|
645
|
+
if (privateKeyHash.length !== 64)
|
|
646
|
+
throw new Error('nativeExtendedSignEd25519:: extended key must have length 64');
|
|
647
|
+
a = scalarFromBytes(privateKeyHash);
|
|
648
|
+
pubKey = bigpointToByteArray(scalarMul(BASE, a));
|
|
649
|
+
return [4 /*yield*/, nativeEd25519Sign(privateKeyHash, message)];
|
|
650
|
+
case 2:
|
|
651
|
+
signature = _b.sent();
|
|
652
|
+
return [2 /*return*/, (_a = {
|
|
653
|
+
0: pubKey,
|
|
654
|
+
1: signature,
|
|
655
|
+
length: 2
|
|
656
|
+
},
|
|
657
|
+
_a[Symbol.iterator] = function () {
|
|
658
|
+
return __generator(this, function (_a) {
|
|
659
|
+
switch (_a.label) {
|
|
660
|
+
case 0: return [4 /*yield*/, pubKey];
|
|
661
|
+
case 1:
|
|
662
|
+
_a.sent();
|
|
663
|
+
return [4 /*yield*/, signature];
|
|
664
|
+
case 2:
|
|
665
|
+
_a.sent();
|
|
666
|
+
return [2 /*return*/];
|
|
667
|
+
}
|
|
668
|
+
});
|
|
669
|
+
},
|
|
670
|
+
_a.pubKey = pubKey,
|
|
671
|
+
_a.signature = signature,
|
|
672
|
+
_a)];
|
|
673
|
+
}
|
|
674
|
+
});
|
|
675
|
+
});
|
|
676
|
+
}
|
|
677
|
+
/** sign a message with a (64 bytes) private key */
|
|
678
|
+
exports.signExtendedEd25519 = __hasNativeSupport ? nativeExtendedSignEd25519 : wrapped_signExtendedEd25519_sync;
|
|
679
|
+
/** sign a message with a (32 bytes) private key */
|
|
680
|
+
function getEd25519Signature_sync(message, privateKey) {
|
|
681
|
+
return signEd25519_sync(message, privateKey).signature;
|
|
682
|
+
}
|
|
683
|
+
exports.getEd25519Signature_sync = getEd25519Signature_sync;
|
|
684
|
+
function wrapped_getEd25519Signature_sync(message, privateKey) {
|
|
685
|
+
return Promise.resolve(getEd25519Signature_sync(message, privateKey));
|
|
686
|
+
}
|
|
687
|
+
/** sign a message with a (32 bytes) private key */
|
|
688
|
+
exports.getEd25519Signature = __hasNativeSupport ? nativeEd25519Sign : wrapped_getEd25519Signature_sync;
|
|
689
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
690
|
+
//-------------------------------------------------------------------------------------------------//
|
|
691
|
+
//------------------------------------------- verifying -------------------------------------------//
|
|
692
|
+
//-------------------------------------------------------------------------------------------------//
|
|
693
|
+
/////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
694
|
+
function verifyEd25519Signature_sync(_signature, _message, _publicKey) {
|
|
695
|
+
var signature = forceUint8Array(_signature);
|
|
696
|
+
var message = forceUint8Array(_message);
|
|
697
|
+
var publicKey = forceUint8Array(_publicKey);
|
|
698
|
+
if (signature.length !== 64 || publicKey.length !== 32) {
|
|
699
|
+
throw new Error("unexpected signature length ".concat(signature.length));
|
|
700
|
+
}
|
|
701
|
+
var R_bytes = forceUint8Array(signature).slice(0, 32);
|
|
702
|
+
var R;
|
|
703
|
+
var A;
|
|
704
|
+
try {
|
|
705
|
+
R = pointFromBytes(R_bytes);
|
|
706
|
+
A = pointFromBytes(forceUint8Array(publicKey));
|
|
707
|
+
}
|
|
708
|
+
catch (e) {
|
|
709
|
+
return false;
|
|
710
|
+
}
|
|
711
|
+
var S = decodeInt(forceUint8Array(signature).slice(32, 64));
|
|
712
|
+
var h = ihash((0, uint8array_utils_1.concatUint8Array)(R_bytes, publicKey, message));
|
|
713
|
+
var left = scalarMul(BASE, S);
|
|
714
|
+
var right = addPointsEdwards(R, scalarMul(A, h));
|
|
715
|
+
return (left[0] == right[0]) && (left[1] == right[1]);
|
|
716
|
+
}
|
|
717
|
+
exports.verifyEd25519Signature_sync = verifyEd25519Signature_sync;
|
|
718
|
+
function wrapped_verifyEd25519Signature_sync(signature, message, publicKey) {
|
|
719
|
+
return Promise.resolve(verifyEd25519Signature_sync(signature, message, publicKey));
|
|
720
|
+
}
|
|
721
|
+
exports.verifyEd25519Signature = __hasNativeSupport ? nativeEd25519Verify : wrapped_verifyEd25519Signature_sync;
|