paulmillr / noble-hashes

Audited & minimal JS implementation of hash functions, MACs and KDFs.
https://paulmillr.com/noble
MIT License
573 stars 46 forks source link

Adjust for non-compliant parsers #13

Closed jacogr closed 2 years ago

paulmillr commented 2 years ago

Can you run benchmarks before/after the change?

jacogr commented 2 years ago

npm run bench as per this PR -

Note, this was skipped, crypto.hkdfSync is not defined -

// 'HKDF-SHA256': {
  //   node: (len) => crypto.hkdfSync('sha256', password, salt, new Uint8Array(), len),
  //   stable: (len) => new stableHKDF(stable256.SHA256, password, salt, undefined).expand(len),
  //   noble: (len) => hkdf(sha256, salt, password, undefined, len),
  // },
# main branch
SHA256 32B noble x 759,878 ops/sec @ 1μs/op
SHA384 32B noble x 345,901 ops/sec @ 2μs/op
SHA512 32B noble x 354,735 ops/sec @ 2μs/op
SHA3-256, keccak256, shake256 32B noble x 117,370 ops/sec @ 8μs/op
Kangaroo12 32B noble x 183,318 ops/sec @ 5μs/op
Marsupilami14 32B noble x 166,694 ops/sec @ 5μs/op
BLAKE2b 32B noble x 225,886 ops/sec @ 4μs/op
BLAKE2s 32B noble x 374,251 ops/sec @ 2μs/op
BLAKE3 32B noble x 384,911 ops/sec @ 2μs/op
RIPEMD160 32B noble x 667,556 ops/sec @ 1μs/op
HMAC-SHA256 32B noble x 220,264 ops/sec @ 4μs/op

PBKDF2-HMAC-SHA256 16384 noble x 32 ops/sec @ 30ms/op
PBKDF2-HMAC-SHA256 16384 noble (async) x 30 ops/sec @ 32ms/op
PBKDF2-HMAC-SHA256 65536 noble x 8 ops/sec @ 112ms/op
PBKDF2-HMAC-SHA256 65536 noble (async) x 8 ops/sec @ 121ms/op
PBKDF2-HMAC-SHA256 262144 noble x 2 ops/sec @ 443ms/op
PBKDF2-HMAC-SHA256 262144 noble (async) x 2 ops/sec @ 486ms/op

PBKDF2-HMAC-SHA512 16384 noble x 13 ops/sec @ 75ms/op
PBKDF2-HMAC-SHA512 16384 noble (async) x 13 ops/sec @ 76ms/op
PBKDF2-HMAC-SHA512 65536 noble x 3 ops/sec @ 290ms/op
PBKDF2-HMAC-SHA512 65536 noble (async) x 3 ops/sec @ 304ms/op
PBKDF2-HMAC-SHA512 262144 noble x 0 ops/sec @ 1161ms/op
PBKDF2-HMAC-SHA512 262144 noble (async) x 0 ops/sec @ 1220ms/op

Scrypt r: 8, p: 1, n: 16384 noble x 16 ops/sec @ 60ms/op
Scrypt r: 8, p: 1, n: 65536 noble x 4 ops/sec @ 242ms/op
Scrypt r: 8, p: 1, n: 262144 noble x 0 ops/sec @ 1006ms/op
Scrypt Async r: 8, p: 1, n: 16384 noble x 13 ops/sec @ 75ms/op
Scrypt Async r: 8, p: 1, n: 65536 noble x 3 ops/sec @ 290ms/op
Scrypt Async r: 8, p: 1, n: 262144 noble x 0 ops/sec @ 1240ms/op
# this PR 13
SHA256 32B noble x 754,716 ops/sec @ 1μs/op
SHA384 32B noble x 361,141 ops/sec @ 2μs/op
SHA512 32B noble x 360,620 ops/sec @ 2μs/op
SHA3-256, keccak256, shake256 32B noble x 126,534 ops/sec @ 7μs/op
Kangaroo12 32B noble x 193,348 ops/sec @ 5μs/op
Marsupilami14 32B noble x 173,943 ops/sec @ 5μs/op
BLAKE2b 32B noble x 207,125 ops/sec @ 4μs/op
BLAKE2s 32B noble x 374,812 ops/sec @ 2μs/op
BLAKE3 32B noble x 395,256 ops/sec @ 2μs/op
RIPEMD160 32B noble x 657,030 ops/sec @ 1μs/op
HMAC-SHA256 32B noble x 221,680 ops/sec @ 4μs/op

PBKDF2-HMAC-SHA256 16384 noble x 32 ops/sec @ 30ms/op
PBKDF2-HMAC-SHA256 16384 noble (async) x 29 ops/sec @ 33ms/op
PBKDF2-HMAC-SHA256 65536 noble x 9 ops/sec @ 109ms/op
PBKDF2-HMAC-SHA256 65536 noble (async) x 8 ops/sec @ 118ms/op
PBKDF2-HMAC-SHA256 262144 noble x 2 ops/sec @ 438ms/op
PBKDF2-HMAC-SHA256 262144 noble (async) x 2 ops/sec @ 475ms/op

PBKDF2-HMAC-SHA512 16384 noble x 13 ops/sec @ 74ms/op
PBKDF2-HMAC-SHA512 16384 noble (async) x 13 ops/sec @ 76ms/op
PBKDF2-HMAC-SHA512 65536 noble x 3 ops/sec @ 287ms/op
PBKDF2-HMAC-SHA512 65536 noble (async) x 3 ops/sec @ 302ms/op
PBKDF2-HMAC-SHA512 262144 noble x 0 ops/sec @ 1146ms/op
PBKDF2-HMAC-SHA512 262144 noble (async) x 0 ops/sec @ 1212ms/op

Scrypt r: 8, p: 1, n: 16384 noble x 16 ops/sec @ 61ms/op
Scrypt r: 8, p: 1, n: 65536 noble x 3 ops/sec @ 261ms/op
Scrypt r: 8, p: 1, n: 262144 noble x 0 ops/sec @ 1072ms/op
Scrypt Async r: 8, p: 1, n: 16384 noble x 13 ops/sec @ 71ms/op
Scrypt Async r: 8, p: 1, n: 65536 noble x 3 ops/sec @ 308ms/op
Scrypt Async r: 8, p: 1, n: 262144 noble x 0 ops/sec @ 1274ms/op