Add nodejs version
This commit is contained in:
parent
4f20ec4834
commit
ad9ef78e11
5 changed files with 539 additions and 0 deletions
39
nodejs-version/index.html
Executable file
39
nodejs-version/index.html
Executable file
|
|
@ -0,0 +1,39 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en-US">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8" />
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css" crossorigin="anonymous" />
|
||||||
|
<script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
|
||||||
|
<script src="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/js/bootstrap.min.js" crossorigin="anonymous"></script>
|
||||||
|
<title>SuperMicro IPMI License Generator</title>
|
||||||
|
<style>body{background:#eee}.form-control{font-family:Consolas;}.main{margin-top:64px;border:1px solid #ccc;padding:10px 32px 16px 32px;background:#FFF;box-shadow:0px 0px 12px rgba(0,0,0,0.3)}</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="row">
|
||||||
|
<div class="col-sm-3"></div>
|
||||||
|
<div class="col-sm-6 main">
|
||||||
|
<h3>SuperMicro IPMI License Generator</h3>
|
||||||
|
<p>This is a helpful tool, It can generate the SuperMicro's motherboard IPMI Activate License keys, And it is free and open-source.</p>
|
||||||
|
<hr />
|
||||||
|
<p>First, input your IPMI BMC-MAC here:</p>
|
||||||
|
<p><div class="input-group">
|
||||||
|
<input id="input" class="form-control" placeholder="You BMC-MAC" />
|
||||||
|
<span class="input-group-btn">
|
||||||
|
<button class="btn btn-default" id="button">Generate</button>
|
||||||
|
</span>
|
||||||
|
</div></p>
|
||||||
|
<p>Then, click the Generate button, your will get the license key:</p>
|
||||||
|
<p><input id="output" class="form-control" readonly placeholder="License Key" onclick="this.select()" /></p>
|
||||||
|
<p>If you like this tool, please give me a star, thank you.</p>
|
||||||
|
<hr>
|
||||||
|
<p>Github project: <a href="https://github.com/kasuganosoras/SuperMicro-IPMI-LicenseGenerator" target="_blank">kasuganosoras/SuperMicro-IPMI-LicenseGenerator</a></p>
|
||||||
|
<p>Thanks for: <a href="https://www.v2ex.com/member/azh7138m" target="_blank">@azh7138m</a>, <a href="https://github.com/Seldaek" target="_blank">@Seldaek</a></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<script src="./src/main.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
15
nodejs-version/package.json
Executable file
15
nodejs-version/package.json
Executable file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
"name": "parcel-sandbox",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"description": "Simple Parcel Sandbox",
|
||||||
|
"main": "index.html",
|
||||||
|
"scripts": {
|
||||||
|
"start": "parcel index.html --open",
|
||||||
|
"build": "parcel build index.html"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"@babel/core": "7.2.0",
|
||||||
|
"parcel-bundler": "^1.6.1"
|
||||||
|
}
|
||||||
|
}
|
||||||
36
nodejs-version/src/index.js
Executable file
36
nodejs-version/src/index.js
Executable file
|
|
@ -0,0 +1,36 @@
|
||||||
|
var sha1hmac = require("./sha1hmac.js");
|
||||||
|
|
||||||
|
const input = document.getElementById("input");
|
||||||
|
const output = document.getElementById("output");
|
||||||
|
const button = document.getElementById("button");
|
||||||
|
|
||||||
|
function hex2bin(hex) {
|
||||||
|
let bytes = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < hex.length - 1; i += 2) {
|
||||||
|
bytes.push(parseInt(hex.substr(i, 2), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
return String.fromCharCode.apply(String, bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string} mac
|
||||||
|
*/
|
||||||
|
function getKey(mac) {
|
||||||
|
return sha1hmac.Crypto.sha1_hmac(
|
||||||
|
hex2bin(mac.replace(/:/g, "")),
|
||||||
|
hex2bin("8544E3B47ECA58F9583043F8")
|
||||||
|
)
|
||||||
|
.toString()
|
||||||
|
.substr(0, 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handler() {
|
||||||
|
output.value = getKey(input.value)
|
||||||
|
.match(/..../g)
|
||||||
|
.join("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
button.addEventListener("click", handler);
|
||||||
245
nodejs-version/src/main.js
Normal file
245
nodejs-version/src/main.js
Normal file
|
|
@ -0,0 +1,245 @@
|
||||||
|
(function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){
|
||||||
|
var sha1hmac = require("./sha1hmac.js");
|
||||||
|
|
||||||
|
const input = document.getElementById("input");
|
||||||
|
const output = document.getElementById("output");
|
||||||
|
const button = document.getElementById("button");
|
||||||
|
|
||||||
|
function hex2bin(hex) {
|
||||||
|
let bytes = [];
|
||||||
|
|
||||||
|
for (let i = 0; i < hex.length - 1; i += 2) {
|
||||||
|
bytes.push(parseInt(hex.substr(i, 2), 16));
|
||||||
|
}
|
||||||
|
|
||||||
|
return String.fromCharCode.apply(String, bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @param {string} mac
|
||||||
|
*/
|
||||||
|
function getKey(mac) {
|
||||||
|
return sha1hmac.Crypto.sha1_hmac(
|
||||||
|
hex2bin(mac.replace(/:/g, "")),
|
||||||
|
hex2bin("8544E3B47ECA58F9583043F8")
|
||||||
|
)
|
||||||
|
.toString()
|
||||||
|
.substr(0, 24);
|
||||||
|
}
|
||||||
|
|
||||||
|
function handler() {
|
||||||
|
output.value = getKey(input.value)
|
||||||
|
.match(/..../g)
|
||||||
|
.join("-");
|
||||||
|
}
|
||||||
|
|
||||||
|
button.addEventListener("click", handler);
|
||||||
|
|
||||||
|
},{"./sha1hmac.js":2}],2:[function(require,module,exports){
|
||||||
|
var Crypto = {};
|
||||||
|
|
||||||
|
Crypto.sha1_hmac = function(msg, key) {
|
||||||
|
"use strict";
|
||||||
|
var oKeyPad, iKeyPad, iPadRes, bytes, i, len;
|
||||||
|
if (key.length > 64) {
|
||||||
|
// keys longer than blocksize are shortened
|
||||||
|
key = Crypto.sha1(key, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bytes = [];
|
||||||
|
len = key.length;
|
||||||
|
for (i = 0; i < 64; ++i) {
|
||||||
|
bytes[i] = len > i ? key.charCodeAt(i) : 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
oKeyPad = "";
|
||||||
|
iKeyPad = "";
|
||||||
|
|
||||||
|
for (i = 0; i < 64; ++i) {
|
||||||
|
oKeyPad += String.fromCharCode(bytes[i] ^ 0x5c);
|
||||||
|
iKeyPad += String.fromCharCode(bytes[i] ^ 0x36);
|
||||||
|
}
|
||||||
|
|
||||||
|
iPadRes = Crypto.sha1(iKeyPad + msg, true);
|
||||||
|
|
||||||
|
return Crypto.sha1(oKeyPad + iPadRes);
|
||||||
|
};
|
||||||
|
|
||||||
|
Crypto.sha1 = function(msg, raw) {
|
||||||
|
function rotate_left(n, s) {
|
||||||
|
var t4 = (n << s) | (n >>> (32 - s));
|
||||||
|
return t4;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lsb_hex(val) {
|
||||||
|
var str = "";
|
||||||
|
var i;
|
||||||
|
var vh;
|
||||||
|
var vl;
|
||||||
|
|
||||||
|
for (i = 0; i <= 6; i += 2) {
|
||||||
|
vh = (val >>> (i * 4 + 4)) & 0x0f;
|
||||||
|
vl = (val >>> (i * 4)) & 0x0f;
|
||||||
|
str += vh.toString(16) + vl.toString(16);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function cvt_hex(val, raw) {
|
||||||
|
var str = "";
|
||||||
|
var i;
|
||||||
|
var v;
|
||||||
|
|
||||||
|
for (i = 7; i >= 0; i--) {
|
||||||
|
v = (val >>> (i * 4)) & 0x0f;
|
||||||
|
str += raw ? String.fromCharCode(v) : v.toString(16);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
var blockstart;
|
||||||
|
var i, j;
|
||||||
|
var W = new Array(80);
|
||||||
|
var H0 = 0x67452301;
|
||||||
|
var H1 = 0xefcdab89;
|
||||||
|
var H2 = 0x98badcfe;
|
||||||
|
var H3 = 0x10325476;
|
||||||
|
var H4 = 0xc3d2e1f0;
|
||||||
|
var A, B, C, D, E;
|
||||||
|
var result, rawResult;
|
||||||
|
var temp;
|
||||||
|
|
||||||
|
var msg_len = msg.length;
|
||||||
|
|
||||||
|
var word_array = [];
|
||||||
|
for (i = 0; i < msg_len - 3; i += 4) {
|
||||||
|
j =
|
||||||
|
(msg.charCodeAt(i) << 24) |
|
||||||
|
(msg.charCodeAt(i + 1) << 16) |
|
||||||
|
(msg.charCodeAt(i + 2) << 8) |
|
||||||
|
msg.charCodeAt(i + 3);
|
||||||
|
word_array.push(j);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (msg_len % 4) {
|
||||||
|
case 0:
|
||||||
|
i = 0x080000000;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
i = (msg.charCodeAt(msg_len - 1) << 24) | 0x0800000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
i =
|
||||||
|
(msg.charCodeAt(msg_len - 2) << 24) |
|
||||||
|
(msg.charCodeAt(msg_len - 1) << 16) |
|
||||||
|
0x08000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
i =
|
||||||
|
(msg.charCodeAt(msg_len - 3) << 24) |
|
||||||
|
(msg.charCodeAt(msg_len - 2) << 16) |
|
||||||
|
(msg.charCodeAt(msg_len - 1) << 8) |
|
||||||
|
0x80;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
word_array.push(i);
|
||||||
|
|
||||||
|
while (word_array.length % 16 !== 14) word_array.push(0);
|
||||||
|
|
||||||
|
word_array.push(msg_len >>> 29);
|
||||||
|
word_array.push((msg_len << 3) & 0x0ffffffff);
|
||||||
|
|
||||||
|
for (blockstart = 0; blockstart < word_array.length; blockstart += 16) {
|
||||||
|
for (i = 0; i < 16; i++) W[i] = word_array[blockstart + i];
|
||||||
|
for (i = 16; i <= 79; i++)
|
||||||
|
W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
|
||||||
|
|
||||||
|
A = H0;
|
||||||
|
B = H1;
|
||||||
|
C = H2;
|
||||||
|
D = H3;
|
||||||
|
E = H4;
|
||||||
|
|
||||||
|
for (i = 0; i <= 19; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5a827999) &
|
||||||
|
0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 20; i <= 39; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ed9eba1) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 40; i <= 59; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) +
|
||||||
|
((B & C) | (B & D) | (C & D)) +
|
||||||
|
E +
|
||||||
|
W[i] +
|
||||||
|
0x8f1bbcdc) &
|
||||||
|
0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 60; i <= 79; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0xca62c1d6) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
H0 = (H0 + A) & 0x0ffffffff;
|
||||||
|
H1 = (H1 + B) & 0x0ffffffff;
|
||||||
|
H2 = (H2 + C) & 0x0ffffffff;
|
||||||
|
H3 = (H3 + D) & 0x0ffffffff;
|
||||||
|
H4 = (H4 + E) & 0x0ffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = (
|
||||||
|
cvt_hex(H0) +
|
||||||
|
cvt_hex(H1) +
|
||||||
|
cvt_hex(H2) +
|
||||||
|
cvt_hex(H3) +
|
||||||
|
cvt_hex(H4)
|
||||||
|
).toLowerCase();
|
||||||
|
|
||||||
|
if (!raw) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
rawResult = "";
|
||||||
|
while (result.length) {
|
||||||
|
rawResult += String.fromCharCode(parseInt(result.substr(0, 2), 16));
|
||||||
|
result = result.substr(2);
|
||||||
|
}
|
||||||
|
return rawResult;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.Crypto = Crypto;
|
||||||
|
|
||||||
|
},{}]},{},[1]);
|
||||||
204
nodejs-version/src/sha1hmac.js
Executable file
204
nodejs-version/src/sha1hmac.js
Executable file
|
|
@ -0,0 +1,204 @@
|
||||||
|
var Crypto = {};
|
||||||
|
|
||||||
|
Crypto.sha1_hmac = function(msg, key) {
|
||||||
|
"use strict";
|
||||||
|
var oKeyPad, iKeyPad, iPadRes, bytes, i, len;
|
||||||
|
if (key.length > 64) {
|
||||||
|
// keys longer than blocksize are shortened
|
||||||
|
key = Crypto.sha1(key, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
bytes = [];
|
||||||
|
len = key.length;
|
||||||
|
for (i = 0; i < 64; ++i) {
|
||||||
|
bytes[i] = len > i ? key.charCodeAt(i) : 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
|
oKeyPad = "";
|
||||||
|
iKeyPad = "";
|
||||||
|
|
||||||
|
for (i = 0; i < 64; ++i) {
|
||||||
|
oKeyPad += String.fromCharCode(bytes[i] ^ 0x5c);
|
||||||
|
iKeyPad += String.fromCharCode(bytes[i] ^ 0x36);
|
||||||
|
}
|
||||||
|
|
||||||
|
iPadRes = Crypto.sha1(iKeyPad + msg, true);
|
||||||
|
|
||||||
|
return Crypto.sha1(oKeyPad + iPadRes);
|
||||||
|
};
|
||||||
|
|
||||||
|
Crypto.sha1 = function(msg, raw) {
|
||||||
|
function rotate_left(n, s) {
|
||||||
|
var t4 = (n << s) | (n >>> (32 - s));
|
||||||
|
return t4;
|
||||||
|
}
|
||||||
|
|
||||||
|
function lsb_hex(val) {
|
||||||
|
var str = "";
|
||||||
|
var i;
|
||||||
|
var vh;
|
||||||
|
var vl;
|
||||||
|
|
||||||
|
for (i = 0; i <= 6; i += 2) {
|
||||||
|
vh = (val >>> (i * 4 + 4)) & 0x0f;
|
||||||
|
vl = (val >>> (i * 4)) & 0x0f;
|
||||||
|
str += vh.toString(16) + vl.toString(16);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function cvt_hex(val, raw) {
|
||||||
|
var str = "";
|
||||||
|
var i;
|
||||||
|
var v;
|
||||||
|
|
||||||
|
for (i = 7; i >= 0; i--) {
|
||||||
|
v = (val >>> (i * 4)) & 0x0f;
|
||||||
|
str += raw ? String.fromCharCode(v) : v.toString(16);
|
||||||
|
}
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
var blockstart;
|
||||||
|
var i, j;
|
||||||
|
var W = new Array(80);
|
||||||
|
var H0 = 0x67452301;
|
||||||
|
var H1 = 0xefcdab89;
|
||||||
|
var H2 = 0x98badcfe;
|
||||||
|
var H3 = 0x10325476;
|
||||||
|
var H4 = 0xc3d2e1f0;
|
||||||
|
var A, B, C, D, E;
|
||||||
|
var result, rawResult;
|
||||||
|
var temp;
|
||||||
|
|
||||||
|
var msg_len = msg.length;
|
||||||
|
|
||||||
|
var word_array = [];
|
||||||
|
for (i = 0; i < msg_len - 3; i += 4) {
|
||||||
|
j =
|
||||||
|
(msg.charCodeAt(i) << 24) |
|
||||||
|
(msg.charCodeAt(i + 1) << 16) |
|
||||||
|
(msg.charCodeAt(i + 2) << 8) |
|
||||||
|
msg.charCodeAt(i + 3);
|
||||||
|
word_array.push(j);
|
||||||
|
}
|
||||||
|
|
||||||
|
switch (msg_len % 4) {
|
||||||
|
case 0:
|
||||||
|
i = 0x080000000;
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
i = (msg.charCodeAt(msg_len - 1) << 24) | 0x0800000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
i =
|
||||||
|
(msg.charCodeAt(msg_len - 2) << 24) |
|
||||||
|
(msg.charCodeAt(msg_len - 1) << 16) |
|
||||||
|
0x08000;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
i =
|
||||||
|
(msg.charCodeAt(msg_len - 3) << 24) |
|
||||||
|
(msg.charCodeAt(msg_len - 2) << 16) |
|
||||||
|
(msg.charCodeAt(msg_len - 1) << 8) |
|
||||||
|
0x80;
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
word_array.push(i);
|
||||||
|
|
||||||
|
while (word_array.length % 16 !== 14) word_array.push(0);
|
||||||
|
|
||||||
|
word_array.push(msg_len >>> 29);
|
||||||
|
word_array.push((msg_len << 3) & 0x0ffffffff);
|
||||||
|
|
||||||
|
for (blockstart = 0; blockstart < word_array.length; blockstart += 16) {
|
||||||
|
for (i = 0; i < 16; i++) W[i] = word_array[blockstart + i];
|
||||||
|
for (i = 16; i <= 79; i++)
|
||||||
|
W[i] = rotate_left(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);
|
||||||
|
|
||||||
|
A = H0;
|
||||||
|
B = H1;
|
||||||
|
C = H2;
|
||||||
|
D = H3;
|
||||||
|
E = H4;
|
||||||
|
|
||||||
|
for (i = 0; i <= 19; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) + ((B & C) | (~B & D)) + E + W[i] + 0x5a827999) &
|
||||||
|
0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 20; i <= 39; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0x6ed9eba1) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 40; i <= 59; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) +
|
||||||
|
((B & C) | (B & D) | (C & D)) +
|
||||||
|
E +
|
||||||
|
W[i] +
|
||||||
|
0x8f1bbcdc) &
|
||||||
|
0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 60; i <= 79; i++) {
|
||||||
|
temp =
|
||||||
|
(rotate_left(A, 5) + (B ^ C ^ D) + E + W[i] + 0xca62c1d6) & 0x0ffffffff;
|
||||||
|
E = D;
|
||||||
|
D = C;
|
||||||
|
C = rotate_left(B, 30);
|
||||||
|
B = A;
|
||||||
|
A = temp;
|
||||||
|
}
|
||||||
|
|
||||||
|
H0 = (H0 + A) & 0x0ffffffff;
|
||||||
|
H1 = (H1 + B) & 0x0ffffffff;
|
||||||
|
H2 = (H2 + C) & 0x0ffffffff;
|
||||||
|
H3 = (H3 + D) & 0x0ffffffff;
|
||||||
|
H4 = (H4 + E) & 0x0ffffffff;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = (
|
||||||
|
cvt_hex(H0) +
|
||||||
|
cvt_hex(H1) +
|
||||||
|
cvt_hex(H2) +
|
||||||
|
cvt_hex(H3) +
|
||||||
|
cvt_hex(H4)
|
||||||
|
).toLowerCase();
|
||||||
|
|
||||||
|
if (!raw) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
rawResult = "";
|
||||||
|
while (result.length) {
|
||||||
|
rawResult += String.fromCharCode(parseInt(result.substr(0, 2), 16));
|
||||||
|
result = result.substr(2);
|
||||||
|
}
|
||||||
|
return rawResult;
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports.Crypto = Crypto;
|
||||||
Loading…
Add table
Reference in a new issue