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