removed some files that wasn't needed
This commit is contained in:
parent
a9e2592cd2
commit
a0fb57fdde
2 changed files with 0 additions and 571 deletions
|
@ -1,407 +0,0 @@
|
||||||
/*!
|
|
||||||
* Crypto-JS v2.5.4 AES.js
|
|
||||||
* http://code.google.com/p/crypto-js/
|
|
||||||
* Copyright (c) 2009-2013, Jeff Mott. All rights reserved.
|
|
||||||
* http://code.google.com/p/crypto-js/wiki/License
|
|
||||||
*/
|
|
||||||
(function () {
|
|
||||||
|
|
||||||
// Shortcuts
|
|
||||||
var C = Crypto,
|
|
||||||
util = C.util,
|
|
||||||
charenc = C.charenc,
|
|
||||||
UTF8 = charenc.UTF8;
|
|
||||||
|
|
||||||
// Precomputed SBOX
|
|
||||||
var SBOX = [0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
|
|
||||||
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
|
|
||||||
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
|
|
||||||
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
|
|
||||||
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
|
|
||||||
0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
|
|
||||||
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
|
|
||||||
0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
|
|
||||||
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
|
|
||||||
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
|
|
||||||
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
|
|
||||||
0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
|
|
||||||
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
|
|
||||||
0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
|
|
||||||
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
|
|
||||||
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
|
|
||||||
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
|
|
||||||
0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
|
|
||||||
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
|
|
||||||
0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
|
|
||||||
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
|
|
||||||
0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
|
|
||||||
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
|
|
||||||
0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
|
|
||||||
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
|
|
||||||
0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
|
|
||||||
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
|
|
||||||
0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
|
|
||||||
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
|
|
||||||
0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
|
|
||||||
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
|
|
||||||
0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16];
|
|
||||||
|
|
||||||
// Compute inverse SBOX lookup table
|
|
||||||
for (var INVSBOX = [], i = 0; i < 256; i++) INVSBOX[SBOX[i]] = i;
|
|
||||||
|
|
||||||
// Compute multiplication in GF(2^8) lookup tables
|
|
||||||
var MULT2 = [],
|
|
||||||
MULT3 = [],
|
|
||||||
MULT9 = [],
|
|
||||||
MULTB = [],
|
|
||||||
MULTD = [],
|
|
||||||
MULTE = [];
|
|
||||||
|
|
||||||
function xtime(a, b) {
|
|
||||||
for (var result = 0, i = 0; i < 8; i++) {
|
|
||||||
if (b & 1) result ^= a;
|
|
||||||
var hiBitSet = a & 0x80;
|
|
||||||
a = (a << 1) & 0xFF;
|
|
||||||
if (hiBitSet) a ^= 0x1b;
|
|
||||||
b >>>= 1;
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = 0; i < 256; i++) {
|
|
||||||
MULT2[i] = xtime(i, 2);
|
|
||||||
MULT3[i] = xtime(i, 3);
|
|
||||||
MULT9[i] = xtime(i, 9);
|
|
||||||
MULTB[i] = xtime(i, 0xB);
|
|
||||||
MULTD[i] = xtime(i, 0xD);
|
|
||||||
MULTE[i] = xtime(i, 0xE);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Precomputed RCon lookup
|
|
||||||
var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];
|
|
||||||
|
|
||||||
// Inner state
|
|
||||||
var state = [[], [], [], []],
|
|
||||||
keylength,
|
|
||||||
nrounds,
|
|
||||||
keyschedule;
|
|
||||||
|
|
||||||
var AES = C.AES = {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Public API
|
|
||||||
*/
|
|
||||||
|
|
||||||
encrypt: function (message, password, options) {
|
|
||||||
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
// Determine mode
|
|
||||||
var mode = options.mode || new C.mode.OFB;
|
|
||||||
|
|
||||||
// Allow mode to override options
|
|
||||||
if (mode.fixOptions) mode.fixOptions(options);
|
|
||||||
|
|
||||||
var
|
|
||||||
|
|
||||||
// Convert to bytes if message is a string
|
|
||||||
m = (
|
|
||||||
message.constructor == String ?
|
|
||||||
UTF8.stringToBytes(message) :
|
|
||||||
message
|
|
||||||
),
|
|
||||||
|
|
||||||
// Generate random IV
|
|
||||||
iv = options.iv || util.randomBytes(AES._blocksize * 4),
|
|
||||||
|
|
||||||
// Generate key
|
|
||||||
k = (
|
|
||||||
password.constructor == String ?
|
|
||||||
// Derive key from pass-phrase
|
|
||||||
C.PBKDF2(password, iv, 32, { asBytes: true }) :
|
|
||||||
// else, assume byte array representing cryptographic key
|
|
||||||
password
|
|
||||||
);
|
|
||||||
|
|
||||||
// Encrypt
|
|
||||||
AES._init(k);
|
|
||||||
mode.encrypt(AES, m, iv);
|
|
||||||
|
|
||||||
// Return ciphertext
|
|
||||||
m = options.iv ? m : iv.concat(m);
|
|
||||||
return (options && options.asBytes) ? m : util.bytesToBase64(m);
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
decrypt: function (ciphertext, password, options) {
|
|
||||||
|
|
||||||
options = options || {};
|
|
||||||
|
|
||||||
// Determine mode
|
|
||||||
var mode = options.mode || new C.mode.OFB;
|
|
||||||
|
|
||||||
// Allow mode to override options
|
|
||||||
if (mode.fixOptions) mode.fixOptions(options);
|
|
||||||
|
|
||||||
var
|
|
||||||
|
|
||||||
// Convert to bytes if ciphertext is a string
|
|
||||||
c = (
|
|
||||||
ciphertext.constructor == String ?
|
|
||||||
util.base64ToBytes(ciphertext) :
|
|
||||||
ciphertext
|
|
||||||
),
|
|
||||||
|
|
||||||
// Separate IV and message
|
|
||||||
iv = options.iv || c.splice(0, AES._blocksize * 4),
|
|
||||||
|
|
||||||
// Generate key
|
|
||||||
k = (
|
|
||||||
password.constructor == String ?
|
|
||||||
// Derive key from pass-phrase
|
|
||||||
C.PBKDF2(password, iv, 32, { asBytes: true }) :
|
|
||||||
// else, assume byte array representing cryptographic key
|
|
||||||
password
|
|
||||||
);
|
|
||||||
|
|
||||||
// Decrypt
|
|
||||||
AES._init(k);
|
|
||||||
mode.decrypt(AES, c, iv);
|
|
||||||
|
|
||||||
// Return plaintext
|
|
||||||
return (options && options.asBytes) ? c : UTF8.bytesToString(c);
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Package private methods and properties
|
|
||||||
*/
|
|
||||||
|
|
||||||
_blocksize: 4,
|
|
||||||
|
|
||||||
_encryptblock: function (m, offset) {
|
|
||||||
|
|
||||||
// Set input
|
|
||||||
for (var row = 0; row < AES._blocksize; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] = m[offset + col * 4 + row];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add round key
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] ^= keyschedule[col][row];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var round = 1; round < nrounds; round++) {
|
|
||||||
|
|
||||||
// Sub bytes
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] = SBOX[state[row][col]];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shift rows
|
|
||||||
state[1].push(state[1].shift());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[3].unshift(state[3].pop());
|
|
||||||
|
|
||||||
// Mix columns
|
|
||||||
for (var col = 0; col < 4; col++) {
|
|
||||||
|
|
||||||
var s0 = state[0][col],
|
|
||||||
s1 = state[1][col],
|
|
||||||
s2 = state[2][col],
|
|
||||||
s3 = state[3][col];
|
|
||||||
|
|
||||||
state[0][col] = MULT2[s0] ^ MULT3[s1] ^ s2 ^ s3;
|
|
||||||
state[1][col] = s0 ^ MULT2[s1] ^ MULT3[s2] ^ s3;
|
|
||||||
state[2][col] = s0 ^ s1 ^ MULT2[s2] ^ MULT3[s3];
|
|
||||||
state[3][col] = MULT3[s0] ^ s1 ^ s2 ^ MULT2[s3];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add round key
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] ^= keyschedule[round * 4 + col][row];
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Sub bytes
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] = SBOX[state[row][col]];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Shift rows
|
|
||||||
state[1].push(state[1].shift());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[3].unshift(state[3].pop());
|
|
||||||
|
|
||||||
// Add round key
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] ^= keyschedule[nrounds * 4 + col][row];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set output
|
|
||||||
for (var row = 0; row < AES._blocksize; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
m[offset + col * 4 + row] = state[row][col];
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
_decryptblock: function (c, offset) {
|
|
||||||
|
|
||||||
// Set input
|
|
||||||
for (var row = 0; row < AES._blocksize; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] = c[offset + col * 4 + row];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add round key
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] ^= keyschedule[nrounds * 4 + col][row];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var round = 1; round < nrounds; round++) {
|
|
||||||
|
|
||||||
// Inv shift rows
|
|
||||||
state[1].unshift(state[1].pop());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[3].push(state[3].shift());
|
|
||||||
|
|
||||||
// Inv sub bytes
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] = INVSBOX[state[row][col]];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add round key
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] ^= keyschedule[(nrounds - round) * 4 + col][row];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inv mix columns
|
|
||||||
for (var col = 0; col < 4; col++) {
|
|
||||||
|
|
||||||
var s0 = state[0][col],
|
|
||||||
s1 = state[1][col],
|
|
||||||
s2 = state[2][col],
|
|
||||||
s3 = state[3][col];
|
|
||||||
|
|
||||||
state[0][col] = MULTE[s0] ^ MULTB[s1] ^ MULTD[s2] ^ MULT9[s3];
|
|
||||||
state[1][col] = MULT9[s0] ^ MULTE[s1] ^ MULTB[s2] ^ MULTD[s3];
|
|
||||||
state[2][col] = MULTD[s0] ^ MULT9[s1] ^ MULTE[s2] ^ MULTB[s3];
|
|
||||||
state[3][col] = MULTB[s0] ^ MULTD[s1] ^ MULT9[s2] ^ MULTE[s3];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// Inv shift rows
|
|
||||||
state[1].unshift(state[1].pop());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[2].push(state[2].shift());
|
|
||||||
state[3].push(state[3].shift());
|
|
||||||
|
|
||||||
// Inv sub bytes
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] = INVSBOX[state[row][col]];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add round key
|
|
||||||
for (var row = 0; row < 4; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
state[row][col] ^= keyschedule[col][row];
|
|
||||||
}
|
|
||||||
|
|
||||||
// Set output
|
|
||||||
for (var row = 0; row < AES._blocksize; row++) {
|
|
||||||
for (var col = 0; col < 4; col++)
|
|
||||||
c[offset + col * 4 + row] = state[row][col];
|
|
||||||
}
|
|
||||||
|
|
||||||
},
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Private methods
|
|
||||||
*/
|
|
||||||
|
|
||||||
_init: function (k) {
|
|
||||||
keylength = k.length / 4;
|
|
||||||
nrounds = keylength + 6;
|
|
||||||
AES._keyexpansion(k);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Generate a key schedule
|
|
||||||
_keyexpansion: function (k) {
|
|
||||||
|
|
||||||
keyschedule = [];
|
|
||||||
|
|
||||||
for (var row = 0; row < keylength; row++) {
|
|
||||||
keyschedule[row] = [
|
|
||||||
k[row * 4],
|
|
||||||
k[row * 4 + 1],
|
|
||||||
k[row * 4 + 2],
|
|
||||||
k[row * 4 + 3]
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var row = keylength; row < AES._blocksize * (nrounds + 1); row++) {
|
|
||||||
|
|
||||||
var temp = [
|
|
||||||
keyschedule[row - 1][0],
|
|
||||||
keyschedule[row - 1][1],
|
|
||||||
keyschedule[row - 1][2],
|
|
||||||
keyschedule[row - 1][3]
|
|
||||||
];
|
|
||||||
|
|
||||||
if (row % keylength == 0) {
|
|
||||||
|
|
||||||
// Rot word
|
|
||||||
temp.push(temp.shift());
|
|
||||||
|
|
||||||
// Sub word
|
|
||||||
temp[0] = SBOX[temp[0]];
|
|
||||||
temp[1] = SBOX[temp[1]];
|
|
||||||
temp[2] = SBOX[temp[2]];
|
|
||||||
temp[3] = SBOX[temp[3]];
|
|
||||||
|
|
||||||
temp[0] ^= RCON[row / keylength];
|
|
||||||
|
|
||||||
} else if (keylength > 6 && row % keylength == 4) {
|
|
||||||
|
|
||||||
// Sub word
|
|
||||||
temp[0] = SBOX[temp[0]];
|
|
||||||
temp[1] = SBOX[temp[1]];
|
|
||||||
temp[2] = SBOX[temp[2]];
|
|
||||||
temp[3] = SBOX[temp[3]];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
keyschedule[row] = [
|
|
||||||
keyschedule[row - keylength][0] ^ temp[0],
|
|
||||||
keyschedule[row - keylength][1] ^ temp[1],
|
|
||||||
keyschedule[row - keylength][2] ^ temp[2],
|
|
||||||
keyschedule[row - keylength][3] ^ temp[3]
|
|
||||||
];
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
|
||||||
|
|
||||||
})();
|
|
|
@ -1,164 +0,0 @@
|
||||||
/*!
|
|
||||||
* Crypto-JS v2.0.0 RIPEMD-160
|
|
||||||
* http://code.google.com/p/crypto-js/
|
|
||||||
* Copyright (c) 2009, Jeff Mott. All rights reserved.
|
|
||||||
* http://code.google.com/p/crypto-js/wiki/License
|
|
||||||
*
|
|
||||||
* A JavaScript implementation of the RIPEMD-160 Algorithm
|
|
||||||
* Version 2.2 Copyright Jeremy Lin, Paul Johnston 2000 - 2009.
|
|
||||||
* Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
|
|
||||||
* Distributed under the BSD License
|
|
||||||
* See http://pajhome.org.uk/crypt/md5 for details.
|
|
||||||
* Also http://www.ocf.berkeley.edu/~jjlin/jsotp/
|
|
||||||
* Ported to Crypto-JS by Stefan Thomas.
|
|
||||||
*/
|
|
||||||
|
|
||||||
(function () {
|
|
||||||
// Shortcuts
|
|
||||||
var C = Crypto,
|
|
||||||
util = C.util,
|
|
||||||
charenc = C.charenc,
|
|
||||||
UTF8 = charenc.UTF8,
|
|
||||||
Binary = charenc.Binary;
|
|
||||||
|
|
||||||
// Convert a byte array to little-endian 32-bit words
|
|
||||||
util.bytesToLWords = function (bytes) {
|
|
||||||
|
|
||||||
var output = Array(bytes.length >> 2);
|
|
||||||
for (var i = 0; i < output.length; i++)
|
|
||||||
output[i] = 0;
|
|
||||||
for (var i = 0; i < bytes.length * 8; i += 8)
|
|
||||||
output[i >> 5] |= (bytes[i / 8] & 0xFF) << (i % 32);
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Convert little-endian 32-bit words to a byte array
|
|
||||||
util.lWordsToBytes = function (words) {
|
|
||||||
var output = [];
|
|
||||||
for (var i = 0; i < words.length * 32; i += 8)
|
|
||||||
output.push((words[i >> 5] >>> (i % 32)) & 0xff);
|
|
||||||
return output;
|
|
||||||
};
|
|
||||||
|
|
||||||
// Public API
|
|
||||||
var RIPEMD160 = C.RIPEMD160 = function (message, options) {
|
|
||||||
var digestbytes = util.lWordsToBytes(RIPEMD160._rmd160(message));
|
|
||||||
return options && options.asBytes ? digestbytes :
|
|
||||||
options && options.asString ? Binary.bytesToString(digestbytes) :
|
|
||||||
util.bytesToHex(digestbytes);
|
|
||||||
};
|
|
||||||
|
|
||||||
// The core
|
|
||||||
RIPEMD160._rmd160 = function (message) {
|
|
||||||
// Convert to byte array
|
|
||||||
if (message.constructor == String) message = UTF8.stringToBytes(message);
|
|
||||||
|
|
||||||
var x = util.bytesToLWords(message),
|
|
||||||
len = message.length * 8;
|
|
||||||
|
|
||||||
/* append padding */
|
|
||||||
x[len >> 5] |= 0x80 << (len % 32);
|
|
||||||
x[(((len + 64) >>> 9) << 4) + 14] = len;
|
|
||||||
|
|
||||||
var h0 = 0x67452301;
|
|
||||||
var h1 = 0xefcdab89;
|
|
||||||
var h2 = 0x98badcfe;
|
|
||||||
var h3 = 0x10325476;
|
|
||||||
var h4 = 0xc3d2e1f0;
|
|
||||||
|
|
||||||
for (var i = 0; i < x.length; i += 16) {
|
|
||||||
var T;
|
|
||||||
var A1 = h0, B1 = h1, C1 = h2, D1 = h3, E1 = h4;
|
|
||||||
var A2 = h0, B2 = h1, C2 = h2, D2 = h3, E2 = h4;
|
|
||||||
for (var j = 0; j <= 79; ++j) {
|
|
||||||
T = safe_add(A1, rmd160_f(j, B1, C1, D1));
|
|
||||||
T = safe_add(T, x[i + rmd160_r1[j]]);
|
|
||||||
T = safe_add(T, rmd160_K1(j));
|
|
||||||
T = safe_add(bit_rol(T, rmd160_s1[j]), E1);
|
|
||||||
A1 = E1; E1 = D1; D1 = bit_rol(C1, 10); C1 = B1; B1 = T;
|
|
||||||
T = safe_add(A2, rmd160_f(79 - j, B2, C2, D2));
|
|
||||||
T = safe_add(T, x[i + rmd160_r2[j]]);
|
|
||||||
T = safe_add(T, rmd160_K2(j));
|
|
||||||
T = safe_add(bit_rol(T, rmd160_s2[j]), E2);
|
|
||||||
A2 = E2; E2 = D2; D2 = bit_rol(C2, 10); C2 = B2; B2 = T;
|
|
||||||
}
|
|
||||||
T = safe_add(h1, safe_add(C1, D2));
|
|
||||||
h1 = safe_add(h2, safe_add(D1, E2));
|
|
||||||
h2 = safe_add(h3, safe_add(E1, A2));
|
|
||||||
h3 = safe_add(h4, safe_add(A1, B2));
|
|
||||||
h4 = safe_add(h0, safe_add(B1, C2));
|
|
||||||
h0 = T;
|
|
||||||
}
|
|
||||||
return [h0, h1, h2, h3, h4];
|
|
||||||
}
|
|
||||||
|
|
||||||
function rmd160_f(j, x, y, z) {
|
|
||||||
return (0 <= j && j <= 15) ? (x ^ y ^ z) :
|
|
||||||
(16 <= j && j <= 31) ? (x & y) | (~x & z) :
|
|
||||||
(32 <= j && j <= 47) ? (x | ~y) ^ z :
|
|
||||||
(48 <= j && j <= 63) ? (x & z) | (y & ~z) :
|
|
||||||
(64 <= j && j <= 79) ? x ^ (y | ~z) :
|
|
||||||
"rmd160_f: j out of range";
|
|
||||||
}
|
|
||||||
function rmd160_K1(j) {
|
|
||||||
return (0 <= j && j <= 15) ? 0x00000000 :
|
|
||||||
(16 <= j && j <= 31) ? 0x5a827999 :
|
|
||||||
(32 <= j && j <= 47) ? 0x6ed9eba1 :
|
|
||||||
(48 <= j && j <= 63) ? 0x8f1bbcdc :
|
|
||||||
(64 <= j && j <= 79) ? 0xa953fd4e :
|
|
||||||
"rmd160_K1: j out of range";
|
|
||||||
}
|
|
||||||
function rmd160_K2(j) {
|
|
||||||
return (0 <= j && j <= 15) ? 0x50a28be6 :
|
|
||||||
(16 <= j && j <= 31) ? 0x5c4dd124 :
|
|
||||||
(32 <= j && j <= 47) ? 0x6d703ef3 :
|
|
||||||
(48 <= j && j <= 63) ? 0x7a6d76e9 :
|
|
||||||
(64 <= j && j <= 79) ? 0x00000000 :
|
|
||||||
"rmd160_K2: j out of range";
|
|
||||||
}
|
|
||||||
var rmd160_r1 = [
|
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
|
||||||
7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,
|
|
||||||
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,
|
|
||||||
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,
|
|
||||||
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
|
|
||||||
];
|
|
||||||
var rmd160_r2 = [
|
|
||||||
5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,
|
|
||||||
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,
|
|
||||||
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,
|
|
||||||
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,
|
|
||||||
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
|
|
||||||
];
|
|
||||||
var rmd160_s1 = [
|
|
||||||
11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,
|
|
||||||
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,
|
|
||||||
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,
|
|
||||||
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,
|
|
||||||
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
|
|
||||||
];
|
|
||||||
var rmd160_s2 = [
|
|
||||||
8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,
|
|
||||||
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,
|
|
||||||
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,
|
|
||||||
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
|
|
||||||
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
|
|
||||||
];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Add integers, wrapping at 2^32. This uses 16-bit operations internally
|
|
||||||
* to work around bugs in some JS interpreters.
|
|
||||||
*/
|
|
||||||
function safe_add(x, y) {
|
|
||||||
var lsw = (x & 0xFFFF) + (y & 0xFFFF);
|
|
||||||
var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
|
|
||||||
return (msw << 16) | (lsw & 0xFFFF);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Bitwise rotate a 32-bit number to the left.
|
|
||||||
*/
|
|
||||||
function bit_rol(num, cnt) {
|
|
||||||
return (num << cnt) | (num >>> (32 - cnt));
|
|
||||||
}
|
|
||||||
})();
|
|
Loading…
Reference in a new issue