feat: Test running overhaul, switch to Prettier & reformat everything (#1407)

* chore: Switch to Node 20 + Vitest

* chore: migrate to vitest mock functions

* chore: code style (switch to prettier)

* test: re-enable long-running test

Seems the switch to Node 20 and Vitest has vastly improved the code's and / or the test's runtime!

see #1193

* chore: code style

* chore: fix failing tests

* Updated Documentation in README.md

* Update contribution guidelines to state usage of Prettier

* fix: set prettier printWidth back to 80

* chore: apply updated code style automatically

* fix: set prettier line endings to lf again

* chore: apply updated code style automatically

---------

Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
Co-authored-by: Lars Müller <34514239+appgurueu@users.noreply.github.com>
This commit is contained in:
Roland Hummel
2023-10-03 23:08:19 +02:00
committed by GitHub
parent 0ca18c2b2c
commit 86d333ee94
392 changed files with 5849 additions and 16622 deletions

View File

@@ -18,7 +18,7 @@ const CHAR_SIZE = 8
* @example
* pad("10011", 8); // "00010011"
*/
function pad (str, bits) {
function pad(str, bits) {
let res = str
while (res.length % bits !== 0) {
res = '0' + res
@@ -36,7 +36,7 @@ function pad (str, bits) {
* @example
* chunkify("this is a test", 2)
*/
function chunkify (str, size) {
function chunkify(str, size) {
const chunks = []
for (let i = 0; i < str.length; i += size) {
chunks.push(str.slice(i, i + size))
@@ -54,7 +54,7 @@ function chunkify (str, size) {
* @example
* rotateLeft("1011", 3); // "1101"
*/
function rotateLeft (bits, turns) {
function rotateLeft(bits, turns) {
return bits.substr(turns) + bits.substr(0, turns)
}
@@ -64,14 +64,16 @@ function rotateLeft (bits, turns) {
* @param {string} message - message to pre-process
* @return {string} - processed message
*/
function preProcess (message) {
function preProcess(message) {
// convert message to binary representation padded to
// 8 bits, and add 1
let m = message.split('')
.map(e => e.charCodeAt(0))
.map(e => e.toString(2))
.map(e => pad(e, 8))
.join('') + '1'
let m =
message
.split('')
.map((e) => e.charCodeAt(0))
.map((e) => e.toString(2))
.map((e) => pad(e, 8))
.join('') + '1'
// extend message by adding empty bits (0)
while (m.length % 512 !== 448) {
@@ -93,13 +95,13 @@ function preProcess (message) {
* @param {string} message - message to hash
* @return {string} - message digest (hash value)
*/
function SHA1 (message) {
function SHA1(message) {
// main variables
let H0 = 0x67452301
let H1 = 0xEFCDAB89
let H2 = 0x98BADCFE
let H1 = 0xefcdab89
let H2 = 0x98badcfe
let H3 = 0x10325476
let H4 = 0xC3D2E1F0
let H4 = 0xc3d2e1f0
// pre-process message and split into 512 bit chunks
const bits = preProcess(message)
@@ -112,7 +114,7 @@ function SHA1 (message) {
// extend 16 32-bit words to 80 32-bit words
for (let i = 16; i < 80; i++) {
const val = [words[i - 3], words[i - 8], words[i - 14], words[i - 16]]
.map(e => parseInt(e, 2))
.map((e) => parseInt(e, 2))
.reduce((acc, curr) => curr ^ acc, 0)
const bin = (val >>> 0).toString(2)
const paddedBin = pad(bin, 32)
@@ -127,16 +129,16 @@ function SHA1 (message) {
let f, k
if (i < 20) {
f = (b & c) | (~b & d)
k = 0x5A827999
k = 0x5a827999
} else if (i < 40) {
f = b ^ c ^ d
k = 0x6ED9EBA1
k = 0x6ed9eba1
} else if (i < 60) {
f = (b & c) | (b & d) | (c & d)
k = 0x8F1BBCDC
k = 0x8f1bbcdc
} else {
f = b ^ c ^ d
k = 0xCA62C1D6
k = 0xca62c1d6
}
// make sure f is unsigned
f >>>= 0
@@ -163,8 +165,8 @@ function SHA1 (message) {
// combine hash values of main hash variables and return
const HH = [H0, H1, H2, H3, H4]
.map(e => e.toString(16))
.map(e => pad(e, 8))
.map((e) => e.toString(16))
.map((e) => pad(e, 8))
.join('')
return HH

View File

@@ -9,14 +9,17 @@
const CHAR_SIZE = 8
const K = [
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1,
0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786,
0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147,
0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a,
0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2
]
/**
@@ -29,7 +32,7 @@ const K = [
* @example
* pad("10011", 8); // "00010011"
*/
function pad (str, bits) {
function pad(str, bits) {
let res = str
while (res.length % bits !== 0) {
res = '0' + res
@@ -47,7 +50,7 @@ function pad (str, bits) {
* @example
* chunkify("this is a test", 2)
*/
function chunkify (str, size) {
function chunkify(str, size) {
const chunks = []
for (let i = 0; i < str.length; i += size) {
chunks.push(str.slice(i, i + size))
@@ -65,7 +68,7 @@ function chunkify (str, size) {
* @example
* rotateLeft("1011", 3); // "1101"
*/
function rotateRight (bits, turns) {
function rotateRight(bits, turns) {
return bits.substr(bits.length - turns) + bits.substr(0, bits.length - turns)
}
@@ -75,14 +78,16 @@ function rotateRight (bits, turns) {
* @param {string} message - message to pre-process
* @return {string} - processed message
*/
function preProcess (message) {
function preProcess(message) {
// convert message to binary representation padded to
// 8 bits, and add 1
let m = message.split('')
.map(e => e.charCodeAt(0))
.map(e => e.toString(2))
.map(e => pad(e, 8))
.join('') + '1'
let m =
message
.split('')
.map((e) => e.charCodeAt(0))
.map((e) => e.toString(2))
.map((e) => pad(e, 8))
.join('') + '1'
// extend message by adding empty bits (0)
while (m.length % 512 !== 448) {
@@ -104,7 +109,7 @@ function preProcess (message) {
* @param {string} message - message to hash
* @return {string} - message digest (hash value)
*/
function SHA256 (message) {
function SHA256(message) {
// initial hash variables
let H0 = 0x6a09e667
let H1 = 0xbb67ae85
@@ -133,7 +138,8 @@ function SHA256 (message) {
const R4 = rotateRight(W2, 19)
const S0 = parseInt(R1, 2) ^ parseInt(R2, 2) ^ (parseInt(W1, 2) >>> 3)
const S1 = parseInt(R3, 2) ^ parseInt(R4, 2) ^ (parseInt(W2, 2) >>> 10)
const val = parseInt(words[i - 16], 2) + S0 + parseInt(words[i - 7], 2) + S1
const val =
parseInt(words[i - 16], 2) + S0 + parseInt(words[i - 7], 2) + S1
words[i] = pad((val >>> 0).toString(2), 32)
}
@@ -141,16 +147,18 @@ function SHA256 (message) {
let [a, b, c, d, e, f, g, h] = [H0, H1, H2, H3, H4, H5, H6, H7]
for (let i = 0; i < 64; i++) {
const S1 = [6, 11, 25]
.map(turns => rotateRight(pad(e.toString(2), 32), turns))
.map(bitstring => parseInt(bitstring, 2))
.reduce((acc, curr) => acc ^ curr, 0) >>> 0
const S1 =
[6, 11, 25]
.map((turns) => rotateRight(pad(e.toString(2), 32), turns))
.map((bitstring) => parseInt(bitstring, 2))
.reduce((acc, curr) => acc ^ curr, 0) >>> 0
const CH = ((e & f) ^ (~e & g)) >>> 0
const temp1 = (h + S1 + CH + K[i] + parseInt(words[i], 2)) >>> 0
const S0 = [2, 13, 22]
.map(turns => rotateRight(pad(a.toString(2), 32), turns))
.map(bitstring => parseInt(bitstring, 2))
.reduce((acc, curr) => acc ^ curr, 0) >>> 0
const S0 =
[2, 13, 22]
.map((turns) => rotateRight(pad(a.toString(2), 32), turns))
.map((bitstring) => parseInt(bitstring, 2))
.reduce((acc, curr) => acc ^ curr, 0) >>> 0
const maj = ((a & b) ^ (a & c) ^ (b & c)) >>> 0
const temp2 = (S0 + maj) >>> 0
@@ -177,8 +185,8 @@ function SHA256 (message) {
// combine hash values of main hash variables and return
const HH = [H0, H1, H2, H3, H4, H5, H6, H7]
.map(e => e.toString(16))
.map(e => pad(e, 8))
.map((e) => e.toString(16))
.map((e) => pad(e, 8))
.join('')
return HH