Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Download
80644 views
1
var hash = require('../hash');
2
var utils = hash.utils;
3
4
var rotl32 = utils.rotl32;
5
var sum32 = utils.sum32;
6
var sum32_3 = utils.sum32_3;
7
var sum32_4 = utils.sum32_4;
8
var BlockHash = hash.common.BlockHash;
9
10
function RIPEMD160() {
11
if (!(this instanceof RIPEMD160))
12
return new RIPEMD160();
13
14
BlockHash.call(this);
15
16
this.h = [ 0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0 ];
17
this.endian = 'little';
18
}
19
utils.inherits(RIPEMD160, BlockHash);
20
exports.ripemd160 = RIPEMD160;
21
22
RIPEMD160.blockSize = 512;
23
RIPEMD160.outSize = 160;
24
RIPEMD160.hmacStrength = 192;
25
RIPEMD160.padLength = 64;
26
27
RIPEMD160.prototype._update = function update(msg, start) {
28
var A = this.h[0];
29
var B = this.h[1];
30
var C = this.h[2];
31
var D = this.h[3];
32
var E = this.h[4];
33
var Ah = A;
34
var Bh = B;
35
var Ch = C;
36
var Dh = D;
37
var Eh = E;
38
for (var j = 0; j < 80; j++) {
39
var T = sum32(
40
rotl32(
41
sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)),
42
s[j]),
43
E);
44
A = E;
45
E = D;
46
D = rotl32(C, 10);
47
C = B;
48
B = T;
49
T = sum32(
50
rotl32(
51
sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)),
52
sh[j]),
53
Eh);
54
Ah = Eh;
55
Eh = Dh;
56
Dh = rotl32(Ch, 10);
57
Ch = Bh;
58
Bh = T;
59
}
60
T = sum32_3(this.h[1], C, Dh);
61
this.h[1] = sum32_3(this.h[2], D, Eh);
62
this.h[2] = sum32_3(this.h[3], E, Ah);
63
this.h[3] = sum32_3(this.h[4], A, Bh);
64
this.h[4] = sum32_3(this.h[0], B, Ch);
65
this.h[0] = T;
66
};
67
68
RIPEMD160.prototype._digest = function digest(enc) {
69
if (enc === 'hex')
70
return utils.toHex32(this.h, 'little');
71
else
72
return utils.split32(this.h, 'little');
73
};
74
75
function f(j, x, y, z) {
76
if (j <= 15)
77
return x ^ y ^ z;
78
else if (j <= 31)
79
return (x & y) | ((~x) & z);
80
else if (j <= 47)
81
return (x | (~y)) ^ z;
82
else if (j <= 63)
83
return (x & z) | (y & (~z));
84
else
85
return x ^ (y | (~z));
86
}
87
88
function K(j) {
89
if (j <= 15)
90
return 0x00000000;
91
else if (j <= 31)
92
return 0x5a827999;
93
else if (j <= 47)
94
return 0x6ed9eba1;
95
else if (j <= 63)
96
return 0x8f1bbcdc;
97
else
98
return 0xa953fd4e;
99
}
100
101
function Kh(j) {
102
if (j <= 15)
103
return 0x50a28be6;
104
else if (j <= 31)
105
return 0x5c4dd124;
106
else if (j <= 47)
107
return 0x6d703ef3;
108
else if (j <= 63)
109
return 0x7a6d76e9;
110
else
111
return 0x00000000;
112
}
113
114
var r = [
115
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
116
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
117
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
118
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
119
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
120
];
121
122
var rh = [
123
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
124
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
125
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
126
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
127
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
128
];
129
130
var s = [
131
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
132
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
133
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
134
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
135
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
136
];
137
138
var sh = [
139
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
140
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
141
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
142
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
143
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
144
];
145
146