jsOMS/Security/Hash/Sha1b.js
Dennis Eichhorn 7b75ec58f7
Some checks failed
CodeQL / Analyze (javascript) (push) Has been cancelled
CI / general_module_workflow_js (push) Has been cancelled
fix permissions
2025-04-02 14:15:07 +00:00

93 lines
2.5 KiB
JavaScript

function SHA1(s)
{
function U(a, b, c)
{
while (0 < c--) {
a.push(b)
}
}
function L(a, b)
{
return (a << b) | (a >>> (32 - b))
}
function P(a, b, c)
{
return a ^ b ^ c
}
function A(a, b)
{
let c = (b & 0xFFFF) + (a & 0xFFFF), d = (b >>> 16) + (a >>> 16) + (c >>> 16);
return ((d & 0xFFFF) << 16) | (c & 0xFFFF)
}
var B = '0123456789abcdef';
return (function (a)
{
let c = [], d = a.length * 4, e;
for (let i = 0; i < d; i++) {
e = a[i >> 2] >> ((3 - (i % 4)) * 8);
c.push(B.charAt((e >> 4) & 0xF) + B.charAt(e & 0xF))
}
return c.join('')
}((function (a, b)
{
let c, d, e, f, g, h = a.length, v = 0x67452301, w = 0xefcdab89, x = 0x98badcfe, y = 0x10325476, z = 0xc3d2e1f0, M = [];
U(M, 0x5a827999, 20);
U(M, 0x6ed9eba1, 20);
U(M, 0x8f1bbcdc, 20);
U(M, 0xca62c1d6, 20);
a[b >> 5] |= 0x80 << (24 - (b % 32));
a[(((b + 65) >> 9) << 4) + 15] = b;
for (let i = 0; i < h; i += 16) {
c = v;
d = w;
e = x;
f = y;
g = z;
for (let j = 0, O = []; j < 80; j++) {
O[j] = j < 16 ? a[j + i] : L(O[j - 3] ^ O[j - 8] ^ O[j - 14] ^ O[j - 16], 1);
let k = (function (a, b, c, d, e)
{
let f = (e & 0xFFFF) + (a & 0xFFFF) + (b & 0xFFFF) + (c & 0xFFFF) + (d & 0xFFFF), g = (e >>> 16) + (a >>> 16) + (b >>> 16) + (c >>> 16) + (d >>> 16) + (f >>> 16);
return ((g & 0xFFFF) << 16) | (f & 0xFFFF)
})(j < 20 ? (function (t, a, b)
{
return (t & a) ^ (~t & b)
}(d, e, f)) : j < 40 ? P(d, e, f) : j < 60 ? (function (t, a, b)
{
return (t & a) ^ (t & b) ^ (a & b)
}(d, e, f)) : P(d, e, f), g, M[j], O[j], L(c, 5));
g = f;
f = e;
e = L(d, 30);
d = c;
c = k
}
v = A(v, c);
w = A(w, d);
x = A(x, e);
y = A(y, f);
z = A(z, g)
}
return [v, w, x, y, z]
}((function (t)
{
let a = [], b = 255, c = t.length * 8;
for (let i = 0; i < c; i += 8) {
a[i >> 5] |= (t.charCodeAt(i / 8) & b) << (24 - (i % 32))
}
return a
}(s)).slice(), s.length * 8))))
}