@stablelib/ed25519
Advanced tools
Comparing version 1.0.2 to 1.0.3
@@ -5,14 +5,14 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
var ed25519_1 = require("./ed25519"); | ||
var benchmark_1 = require("@stablelib/benchmark"); | ||
var k = ed25519_1.generateKeyPair(); | ||
var buf = new Uint8Array(256); | ||
var seed = k.secretKey.subarray(0, 32); | ||
var sig = ed25519_1.sign(k.secretKey, buf); | ||
var badsig = new Uint8Array(sig); | ||
const ed25519_1 = require("./ed25519"); | ||
const benchmark_1 = require("@stablelib/benchmark"); | ||
const k = (0, ed25519_1.generateKeyPair)(); | ||
const buf = new Uint8Array(256); | ||
const seed = k.secretKey.subarray(0, 32); | ||
const sig = (0, ed25519_1.sign)(k.secretKey, buf); | ||
const badsig = new Uint8Array(sig); | ||
badsig[0] = 1; | ||
benchmark_1.report("ed25519.generateKeyPairFromSeed", benchmark_1.benchmark(function () { return ed25519_1.generateKeyPairFromSeed(seed); })); | ||
benchmark_1.report("ed25519.sign", benchmark_1.benchmark(function () { return ed25519_1.sign(k.secretKey, buf); })); | ||
benchmark_1.report("ed25519.verify", benchmark_1.benchmark(function () { return ed25519_1.verify(k.publicKey, buf, sig); })); | ||
benchmark_1.report("ed25519.verify (bad)", benchmark_1.benchmark(function () { return ed25519_1.verify(k.publicKey, buf, badsig); })); | ||
(0, benchmark_1.report)("ed25519.generateKeyPairFromSeed", (0, benchmark_1.benchmark)(() => (0, ed25519_1.generateKeyPairFromSeed)(seed))); | ||
(0, benchmark_1.report)("ed25519.sign", (0, benchmark_1.benchmark)(() => (0, ed25519_1.sign)(k.secretKey, buf))); | ||
(0, benchmark_1.report)("ed25519.verify", (0, benchmark_1.benchmark)(() => (0, ed25519_1.verify)(k.publicKey, buf, sig))); | ||
(0, benchmark_1.report)("ed25519.verify (bad)", (0, benchmark_1.benchmark)(() => (0, ed25519_1.verify)(k.publicKey, buf, badsig))); | ||
//# sourceMappingURL=ed25519.bench.js.map |
@@ -5,8 +5,9 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
exports.convertSecretKeyToX25519 = exports.convertPublicKeyToX25519 = exports.verify = exports.sign = exports.extractPublicKeyFromSecretKey = exports.generateKeyPair = exports.generateKeyPairFromSeed = exports.SEED_LENGTH = exports.SECRET_KEY_LENGTH = exports.PUBLIC_KEY_LENGTH = exports.SIGNATURE_LENGTH = void 0; | ||
/** | ||
* Package ed25519 implements Ed25519 public-key signature algorithm. | ||
*/ | ||
var random_1 = require("@stablelib/random"); | ||
var sha512_1 = require("@stablelib/sha512"); | ||
var wipe_1 = require("@stablelib/wipe"); | ||
const random_1 = require("@stablelib/random"); | ||
const sha512_1 = require("@stablelib/sha512"); | ||
const wipe_1 = require("@stablelib/wipe"); | ||
exports.SIGNATURE_LENGTH = 64; | ||
@@ -23,5 +24,5 @@ exports.PUBLIC_KEY_LENGTH = 32; | ||
function gf(init) { | ||
var r = new Float64Array(16); | ||
const r = new Float64Array(16); | ||
if (init) { | ||
for (var i = 0; i < init.length; i++) { | ||
for (let i = 0; i < init.length; i++) { | ||
r[i] = init[i]; | ||
@@ -33,23 +34,23 @@ } | ||
// Base point. | ||
var _9 = new Uint8Array(32); | ||
const _9 = new Uint8Array(32); | ||
_9[0] = 9; | ||
var gf0 = gf(); | ||
var gf1 = gf([1]); | ||
var D = gf([ | ||
const gf0 = gf(); | ||
const gf1 = gf([1]); | ||
const D = gf([ | ||
0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, | ||
0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203 | ||
]); | ||
var D2 = gf([ | ||
const D2 = gf([ | ||
0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, | ||
0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406 | ||
]); | ||
var X = gf([ | ||
const X = gf([ | ||
0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, | ||
0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169 | ||
]); | ||
var Y = gf([ | ||
const Y = gf([ | ||
0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, | ||
0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666 | ||
]); | ||
var I = gf([ | ||
const I = gf([ | ||
0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, | ||
@@ -59,3 +60,3 @@ 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83 | ||
function set25519(r, a) { | ||
for (var i = 0; i < 16; i++) { | ||
for (let i = 0; i < 16; i++) { | ||
r[i] = a[i] | 0; | ||
@@ -65,5 +66,5 @@ } | ||
function car25519(o) { | ||
var c = 1; | ||
for (var i = 0; i < 16; i++) { | ||
var v = o[i] + c + 65535; | ||
let c = 1; | ||
for (let i = 0; i < 16; i++) { | ||
let v = o[i] + c + 65535; | ||
c = Math.floor(v / 65536); | ||
@@ -75,5 +76,5 @@ o[i] = v - c * 65536; | ||
function sel25519(p, q, b) { | ||
var c = ~(b - 1); | ||
for (var i = 0; i < 16; i++) { | ||
var t = c & (p[i] ^ q[i]); | ||
const c = ~(b - 1); | ||
for (let i = 0; i < 16; i++) { | ||
const t = c & (p[i] ^ q[i]); | ||
p[i] ^= t; | ||
@@ -84,5 +85,5 @@ q[i] ^= t; | ||
function pack25519(o, n) { | ||
var m = gf(); | ||
var t = gf(); | ||
for (var i = 0; i < 16; i++) { | ||
const m = gf(); | ||
const t = gf(); | ||
for (let i = 0; i < 16; i++) { | ||
t[i] = n[i]; | ||
@@ -93,5 +94,5 @@ } | ||
car25519(t); | ||
for (var j = 0; j < 2; j++) { | ||
for (let j = 0; j < 2; j++) { | ||
m[0] = t[0] - 0xffed; | ||
for (var i = 1; i < 15; i++) { | ||
for (let i = 1; i < 15; i++) { | ||
m[i] = t[i] - 0xffff - ((m[i - 1] >> 16) & 1); | ||
@@ -101,7 +102,7 @@ m[i - 1] &= 0xffff; | ||
m[15] = t[15] - 0x7fff - ((m[14] >> 16) & 1); | ||
var b = (m[15] >> 16) & 1; | ||
const b = (m[15] >> 16) & 1; | ||
m[14] &= 0xffff; | ||
sel25519(t, m, 1 - b); | ||
} | ||
for (var i = 0; i < 16; i++) { | ||
for (let i = 0; i < 16; i++) { | ||
o[2 * i] = t[i] & 0xff; | ||
@@ -112,4 +113,4 @@ o[2 * i + 1] = t[i] >> 8; | ||
function verify32(x, y) { | ||
var d = 0; | ||
for (var i = 0; i < 32; i++) { | ||
let d = 0; | ||
for (let i = 0; i < 32; i++) { | ||
d |= x[i] ^ y[i]; | ||
@@ -120,4 +121,4 @@ } | ||
function neq25519(a, b) { | ||
var c = new Uint8Array(32); | ||
var d = new Uint8Array(32); | ||
const c = new Uint8Array(32); | ||
const d = new Uint8Array(32); | ||
pack25519(c, a); | ||
@@ -128,3 +129,3 @@ pack25519(d, b); | ||
function par25519(a) { | ||
var d = new Uint8Array(32); | ||
const d = new Uint8Array(32); | ||
pack25519(d, a); | ||
@@ -134,3 +135,3 @@ return d[0] & 1; | ||
function unpack25519(o, n) { | ||
for (var i = 0; i < 16; i++) { | ||
for (let i = 0; i < 16; i++) { | ||
o[i] = n[2 * i] + (n[2 * i + 1] << 8); | ||
@@ -141,3 +142,3 @@ } | ||
function add(o, a, b) { | ||
for (var i = 0; i < 16; i++) { | ||
for (let i = 0; i < 16; i++) { | ||
o[i] = a[i] + b[i]; | ||
@@ -147,3 +148,3 @@ } | ||
function sub(o, a, b) { | ||
for (var i = 0; i < 16; i++) { | ||
for (let i = 0; i < 16; i++) { | ||
o[i] = a[i] - b[i]; | ||
@@ -153,3 +154,3 @@ } | ||
function mul(o, a, b) { | ||
var v, c, t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15]; | ||
let v, c, t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0, t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0, t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0, t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0, b0 = b[0], b1 = b[1], b2 = b[2], b3 = b[3], b4 = b[4], b5 = b[5], b6 = b[6], b7 = b[7], b8 = b[8], b9 = b[9], b10 = b[10], b11 = b[11], b12 = b[12], b13 = b[13], b14 = b[14], b15 = b[15]; | ||
v = a[0]; | ||
@@ -566,4 +567,4 @@ t0 += v * b0; | ||
function inv25519(o, i) { | ||
var c = gf(); | ||
var a; | ||
const c = gf(); | ||
let a; | ||
for (a = 0; a < 16; a++) { | ||
@@ -583,4 +584,4 @@ c[a] = i[a]; | ||
function pow2523(o, i) { | ||
var c = gf(); | ||
var a; | ||
const c = gf(); | ||
let a; | ||
for (a = 0; a < 16; a++) { | ||
@@ -600,3 +601,3 @@ c[a] = i[a]; | ||
function edadd(p, q) { | ||
var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf(), g = gf(), h = gf(), t = gf(); | ||
const a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf(), g = gf(), h = gf(), t = gf(); | ||
sub(a, p[1], p[0]); | ||
@@ -622,3 +623,3 @@ sub(t, q[1], q[0]); | ||
function cswap(p, q, b) { | ||
for (var i = 0; i < 4; i++) { | ||
for (let i = 0; i < 4; i++) { | ||
sel25519(p[i], q[i], b); | ||
@@ -628,3 +629,3 @@ } | ||
function pack(r, p) { | ||
var tx = gf(), ty = gf(), zi = gf(); | ||
const tx = gf(), ty = gf(), zi = gf(); | ||
inv25519(zi, p[2]); | ||
@@ -641,4 +642,4 @@ mul(tx, p[0], zi); | ||
set25519(p[3], gf0); | ||
for (var i = 255; i >= 0; --i) { | ||
var b = (s[(i / 8) | 0] >> (i & 7)) & 1; | ||
for (let i = 255; i >= 0; --i) { | ||
const b = (s[(i / 8) | 0] >> (i & 7)) & 1; | ||
cswap(p, q, b); | ||
@@ -651,3 +652,3 @@ edadd(q, p); | ||
function scalarbase(p, s) { | ||
var q = [gf(), gf(), gf(), gf()]; | ||
const q = [gf(), gf(), gf(), gf()]; | ||
set25519(q[0], X); | ||
@@ -662,18 +663,18 @@ set25519(q[1], Y); | ||
if (seed.length !== exports.SEED_LENGTH) { | ||
throw new Error("ed25519: seed must be " + exports.SEED_LENGTH + " bytes"); | ||
throw new Error(`ed25519: seed must be ${exports.SEED_LENGTH} bytes`); | ||
} | ||
var d = sha512_1.hash(seed); | ||
const d = (0, sha512_1.hash)(seed); | ||
d[0] &= 248; | ||
d[31] &= 127; | ||
d[31] |= 64; | ||
var publicKey = new Uint8Array(32); | ||
var p = [gf(), gf(), gf(), gf()]; | ||
const publicKey = new Uint8Array(32); | ||
const p = [gf(), gf(), gf(), gf()]; | ||
scalarbase(p, d); | ||
pack(publicKey, p); | ||
var secretKey = new Uint8Array(64); | ||
const secretKey = new Uint8Array(64); | ||
secretKey.set(seed); | ||
secretKey.set(publicKey, 32); | ||
return { | ||
publicKey: publicKey, | ||
secretKey: secretKey | ||
publicKey, | ||
secretKey | ||
}; | ||
@@ -683,5 +684,5 @@ } | ||
function generateKeyPair(prng) { | ||
var seed = random_1.randomBytes(32, prng); | ||
var result = generateKeyPairFromSeed(seed); | ||
wipe_1.wipe(seed); | ||
const seed = (0, random_1.randomBytes)(32, prng); | ||
const result = generateKeyPairFromSeed(seed); | ||
(0, wipe_1.wipe)(seed); | ||
return result; | ||
@@ -692,3 +693,3 @@ } | ||
if (secretKey.length !== exports.SECRET_KEY_LENGTH) { | ||
throw new Error("ed25519: secret key must be " + exports.SECRET_KEY_LENGTH + " bytes"); | ||
throw new Error(`ed25519: secret key must be ${exports.SECRET_KEY_LENGTH} bytes`); | ||
} | ||
@@ -698,3 +699,3 @@ return new Uint8Array(secretKey.subarray(32)); | ||
exports.extractPublicKeyFromSecretKey = extractPublicKeyFromSecretKey; | ||
var L = new Float64Array([ | ||
const L = new Float64Array([ | ||
0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, | ||
@@ -704,6 +705,6 @@ 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10 | ||
function modL(r, x) { | ||
var carry; | ||
var i; | ||
var j; | ||
var k; | ||
let carry; | ||
let i; | ||
let j; | ||
let k; | ||
for (i = 63; i >= 32; --i) { | ||
@@ -734,7 +735,7 @@ carry = 0; | ||
function reduce(r) { | ||
var x = new Float64Array(64); | ||
for (var i = 0; i < 64; i++) { | ||
const x = new Float64Array(64); | ||
for (let i = 0; i < 64; i++) { | ||
x[i] = r[i]; | ||
} | ||
for (var i = 0; i < 64; i++) { | ||
for (let i = 0; i < 64; i++) { | ||
r[i] = 0; | ||
@@ -746,14 +747,14 @@ } | ||
function sign(secretKey, message) { | ||
var x = new Float64Array(64); | ||
var p = [gf(), gf(), gf(), gf()]; | ||
var d = sha512_1.hash(secretKey.subarray(0, 32)); | ||
const x = new Float64Array(64); | ||
const p = [gf(), gf(), gf(), gf()]; | ||
const d = (0, sha512_1.hash)(secretKey.subarray(0, 32)); | ||
d[0] &= 248; | ||
d[31] &= 127; | ||
d[31] |= 64; | ||
var signature = new Uint8Array(64); | ||
const signature = new Uint8Array(64); | ||
signature.set(d.subarray(32), 32); | ||
var hs = new sha512_1.SHA512(); | ||
const hs = new sha512_1.SHA512(); | ||
hs.update(signature.subarray(32)); | ||
hs.update(message); | ||
var r = hs.digest(); | ||
const r = hs.digest(); | ||
hs.clean(); | ||
@@ -767,9 +768,9 @@ reduce(r); | ||
hs.update(message); | ||
var h = hs.digest(); | ||
const h = hs.digest(); | ||
reduce(h); | ||
for (var i = 0; i < 32; i++) { | ||
for (let i = 0; i < 32; i++) { | ||
x[i] = r[i]; | ||
} | ||
for (var i = 0; i < 32; i++) { | ||
for (var j = 0; j < 32; j++) { | ||
for (let i = 0; i < 32; i++) { | ||
for (let j = 0; j < 32; j++) { | ||
x[i + j] += h[i] * d[j]; | ||
@@ -783,3 +784,3 @@ } | ||
function unpackneg(r, p) { | ||
var t = gf(), chk = gf(), num = gf(), den = gf(), den2 = gf(), den4 = gf(), den6 = gf(); | ||
const t = gf(), chk = gf(), num = gf(), den = gf(), den2 = gf(), den4 = gf(), den6 = gf(); | ||
set25519(r[2], gf1); | ||
@@ -818,7 +819,7 @@ unpack25519(r[1], p); | ||
function verify(publicKey, message, signature) { | ||
var t = new Uint8Array(32); | ||
var p = [gf(), gf(), gf(), gf()]; | ||
var q = [gf(), gf(), gf(), gf()]; | ||
const t = new Uint8Array(32); | ||
const p = [gf(), gf(), gf(), gf()]; | ||
const q = [gf(), gf(), gf(), gf()]; | ||
if (signature.length !== exports.SIGNATURE_LENGTH) { | ||
throw new Error("ed25519: signature must be " + exports.SIGNATURE_LENGTH + " bytes"); | ||
throw new Error(`ed25519: signature must be ${exports.SIGNATURE_LENGTH} bytes`); | ||
} | ||
@@ -828,7 +829,7 @@ if (unpackneg(q, publicKey)) { | ||
} | ||
var hs = new sha512_1.SHA512(); | ||
const hs = new sha512_1.SHA512(); | ||
hs.update(signature.subarray(0, 32)); | ||
hs.update(publicKey); | ||
hs.update(message); | ||
var h = hs.digest(); | ||
const h = hs.digest(); | ||
reduce(h); | ||
@@ -851,3 +852,3 @@ scalarmult(p, q, h); | ||
function convertPublicKeyToX25519(publicKey) { | ||
var q = [gf(), gf(), gf(), gf()]; | ||
let q = [gf(), gf(), gf(), gf()]; | ||
if (unpackneg(q, publicKey)) { | ||
@@ -857,5 +858,5 @@ throw new Error("Ed25519: invalid public key"); | ||
// Formula: montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p | ||
var a = gf(); | ||
var b = gf(); | ||
var y = q[1]; | ||
let a = gf(); | ||
let b = gf(); | ||
let y = q[1]; | ||
add(a, gf1, y); | ||
@@ -865,3 +866,3 @@ sub(b, gf1, y); | ||
mul(a, a, b); | ||
var z = new Uint8Array(32); | ||
let z = new Uint8Array(32); | ||
pack25519(z, a); | ||
@@ -875,8 +876,8 @@ return z; | ||
function convertSecretKeyToX25519(secretKey) { | ||
var d = sha512_1.hash(secretKey.subarray(0, 32)); | ||
const d = (0, sha512_1.hash)(secretKey.subarray(0, 32)); | ||
d[0] &= 248; | ||
d[31] &= 127; | ||
d[31] |= 64; | ||
var o = new Uint8Array(d.subarray(0, 32)); | ||
wipe_1.wipe(d); | ||
const o = new Uint8Array(d.subarray(0, 32)); | ||
(0, wipe_1.wipe)(d); | ||
return o; | ||
@@ -883,0 +884,0 @@ } |
{ | ||
"name": "@stablelib/ed25519", | ||
"version": "1.0.2", | ||
"version": "1.0.3", | ||
"description": "Ed25519 public-key signature (EdDSA with Curve25519)", | ||
@@ -22,3 +22,3 @@ "main": "./lib/ed25519.js", | ||
"dependencies": { | ||
"@stablelib/random": "^1.0.1", | ||
"@stablelib/random": "^1.0.2", | ||
"@stablelib/sha512": "^1.0.1", | ||
@@ -31,3 +31,3 @@ "@stablelib/wipe": "^1.0.1" | ||
}, | ||
"gitHead": "03dadf27703120d54e6be8436525228ee1c4299b" | ||
"gitHead": "a402dc74f45c6a93a777a0e2840ce50ba68c3010" | ||
} |
{ | ||
"extends": "../../configs/tsconfig.json", | ||
"compilerOptions": { | ||
"target": "es5", | ||
"module": "commonjs", | ||
"strict": true, | ||
"noUnusedParameters": true, | ||
"noImplicitReturns": true, | ||
"noUnusedLocals": true, | ||
"removeComments": false, | ||
"preserveConstEnums": true, | ||
"moduleResolution": "node", | ||
"newLine": "LF", | ||
"sourceMap": true, | ||
"declaration": true, | ||
"outDir": "lib", | ||
"lib": [ | ||
"es5", | ||
"es2015.promise", | ||
"dom", | ||
"scripthost" | ||
] | ||
}, | ||
@@ -23,0 +6,0 @@ "exclude": [ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
2003434
16577
Updated@stablelib/random@^1.0.2