Work Finished
This commit is contained in:
parent
3c3d23c337
commit
8253020c5d
|
@ -2,3 +2,4 @@ node_modules/
|
|||
.env
|
||||
package-lock.json
|
||||
yarn.lock
|
||||
testBox.js
|
|
@ -0,0 +1,9 @@
|
|||
const crypto = require("crypto");
|
||||
function createDigest(encodedData, secretKey, format) {
|
||||
return crypto
|
||||
.createHmac("sha1", secretKey)
|
||||
.update(encodedData)
|
||||
.digest(format);
|
||||
}
|
||||
|
||||
module.exports = createDigest;
|
|
@ -0,0 +1,18 @@
|
|||
const createDigest = require("./createDigest");
|
||||
const crypto = require("crypto");
|
||||
|
||||
function decode(value, secretKey) {
|
||||
let [encodedData, sourceDigest] = value.split("!");
|
||||
if (!encodedData || !sourceDigest) throw new Error("invalid value(s)");
|
||||
const json = Buffer.from(encodedData, "base64").toString("utf8");
|
||||
const decodedData = JSON.parse(json);
|
||||
const checkDigest = createDigest(encodedData, secretKey);
|
||||
const digestsEqual = crypto.timingSafeEqual(
|
||||
Buffer.from(sourceDigest, "base64"),
|
||||
checkDigest
|
||||
);
|
||||
if (!digestsEqual) throw new Error("invalid value(s)");
|
||||
return decodedData;
|
||||
}
|
||||
|
||||
module.exports = decode;
|
|
@ -0,0 +1,10 @@
|
|||
const createDigest = require("./createDigest");
|
||||
const crypto = require("crypto");
|
||||
|
||||
function encode(sourceData, secretKey) {
|
||||
const json = JSON.stringify(sourceData);
|
||||
const encodedData = Buffer.from(json).toString("base64");
|
||||
return `${encodedData}!${createDigest(encodedData, secretKey, "base64")}`;
|
||||
}
|
||||
|
||||
module.exports = encode;
|
65
index.js
65
index.js
|
@ -1,20 +1,69 @@
|
|||
const Cryptr = require("cryptr");
|
||||
const encode = require("./functions/encode");
|
||||
const decode = require("./functions/decode");
|
||||
|
||||
function Randomizer(secret) {
|
||||
var encypSep = ["#", "@", "$", "^", "&", "*", "?"];
|
||||
|
||||
function Randomizer(secretKey) {
|
||||
const ts = new Date().toUTCString();
|
||||
if (!secret || typeof secret !== "string") {
|
||||
throw new Error("Cryptr: secret must be a non-0-length string");
|
||||
}
|
||||
const cryptr = new Cryptr(secret);
|
||||
|
||||
if (!secretKey || typeof secretKey !== "string") {
|
||||
throw new Error("Error: secret must be a non-0-length string");
|
||||
}
|
||||
|
||||
const cryptr = new Cryptr(secretKey);
|
||||
const encryptedTs = cryptr.encrypt(ts);
|
||||
console.log(encryptedTs);
|
||||
|
||||
this.showKey = function showKey() {
|
||||
return secret;
|
||||
return secretKey;
|
||||
};
|
||||
|
||||
this.getTs = function getTs() {
|
||||
return ts;
|
||||
};
|
||||
|
||||
this.encTs = function encTs() {
|
||||
return encryptedTs;
|
||||
};
|
||||
|
||||
this.sendHeader = function sendHeader() {
|
||||
let setEncypSep = encypSep[Math.floor(Math.random() * encypSep.length)];
|
||||
var encryptHeader =
|
||||
encryptedTs + setEncypSep + Buffer.from(encryptedTs).toString("base64");
|
||||
|
||||
const finalHeader = encode(encryptHeader, secretKey);
|
||||
return finalHeader;
|
||||
};
|
||||
}
|
||||
|
||||
function Validator(secretKey, encryptedTs) {
|
||||
const cryptr = new Cryptr(secretKey);
|
||||
const ts = cryptr.decrypt(encryptedTs);
|
||||
|
||||
this.verifyState = function verify(headers) {
|
||||
const decodedHeaders = decode(headers, secretKey);
|
||||
const encodedDecryptedTs = [
|
||||
decodedHeaders.slice(0, 250),
|
||||
decodedHeaders.slice(251),
|
||||
];
|
||||
const decodeDecryptedTs = Buffer.from(
|
||||
encodedDecryptedTs[1],
|
||||
"base64"
|
||||
).toString("utf8");
|
||||
if (decodeDecryptedTs != encodedDecryptedTs[0]) {
|
||||
return false;
|
||||
} else if (cryptr.decrypt(encodedDecryptedTs[0]) != ts) {
|
||||
return false;
|
||||
} else return true;
|
||||
};
|
||||
|
||||
this.showKey = function showKey() {
|
||||
return secretKey;
|
||||
};
|
||||
|
||||
this.getTs = function getTs() {
|
||||
return ts;
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = Randomizer;
|
||||
module.exports = { Randomizer, Validator };
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
"main": "index.js",
|
||||
"scripts": {
|
||||
"hello": "echo hello world !!",
|
||||
"test": "node ./test"
|
||||
"test": "node ./test/sandbox"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
@ -27,8 +27,11 @@
|
|||
},
|
||||
"homepage": "https://github.com/bravo68web/randomizer#readme",
|
||||
"dependencies": {
|
||||
"crypto": "^1.0.1",
|
||||
"crypto-js": "^4.0.0",
|
||||
"cryptr": "^6.0.2",
|
||||
"extends-string": "^1.0.0",
|
||||
"hash-wasm": "^4.8.0",
|
||||
"jose": "^3.14.0",
|
||||
"randomstring": "^1.2.1",
|
||||
"string-crypto": "^2.0.1",
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
const test = require("tape");
|
||||
const Randomizer = require("../");
|
||||
|
||||
const testSecret = "myTotalySecretKey";
|
||||
const testData = "bacon";
|
||||
|
||||
test("Initialization...", (t) => {
|
||||
t.plan(1);
|
||||
const Randomizr = new Randomizer(testSecret);
|
||||
checkKey = Randomizr.showKey();
|
||||
t.equal(checkKey, testSecret, "Key Mention can be Used");
|
||||
});
|
||||
|
||||
test("Checking Timestamps...", (t) => {
|
||||
t.plan(1);
|
||||
const Randomizr = new Randomizer(testSecret);
|
||||
var currentTs = new Date().toUTCString();
|
||||
var innerTs = Randomizr.getTs();
|
||||
t.equal(currentTs, innerTs, "TimeStamp Matched");
|
||||
});
|
|
@ -0,0 +1,40 @@
|
|||
const test = require("tape");
|
||||
const { Randomizer, Validator } = require("..");
|
||||
const Cryptr = require("cryptr");
|
||||
|
||||
const testSecret = "myTotalySecretKey";
|
||||
|
||||
test("Initialization ...", async (t) => {
|
||||
t.plan(1);
|
||||
const Randomizr = new Randomizer(testSecret);
|
||||
checkKey = Randomizr.showKey();
|
||||
t.equal(checkKey, testSecret, "Key Mention can be Used");
|
||||
});
|
||||
|
||||
test("Checking Timestamps ...", async (t) => {
|
||||
t.plan(1);
|
||||
const Randomizr = new Randomizer(testSecret);
|
||||
var currentTs = new Date().toUTCString();
|
||||
var innerTs = Randomizr.getTs();
|
||||
t.equal(currentTs, innerTs, "TimeStamp Matched");
|
||||
});
|
||||
|
||||
test("Working ..........", async (t) => {
|
||||
t.plan(1);
|
||||
const Randomizr = new Randomizer(testSecret);
|
||||
var currentTs = new Date().toUTCString();
|
||||
var innerTs = Randomizr.getTs();
|
||||
var hearders = await Randomizr.sendHeader();
|
||||
t.equal(true, typeof hearders == "string", "Headers Successfully Created");
|
||||
});
|
||||
|
||||
test("Verification.......", async (t) => {
|
||||
t.plan(1);
|
||||
const Randomizr = new Randomizer(testSecret);
|
||||
var hearders = await Randomizr.sendHeader();
|
||||
const cryptr = new Cryptr(testSecret);
|
||||
const encryptedTs = cryptr.encrypt(Randomizr.getTs());
|
||||
const Validatr = new Validator(testSecret, encryptedTs);
|
||||
const verifyState = Validatr.verifyState(hearders);
|
||||
t.equal(verifyState, true, "Verified");
|
||||
});
|
10
testBox.js
10
testBox.js
|
@ -1,10 +0,0 @@
|
|||
// console.log(new Date().toUTCString());
|
||||
const Cryptr = require("cryptr");
|
||||
const appEncryptKey =
|
||||
"jWThgBwk4Awh7QQ82GDaz5QFcnVULu9Nk8bnU8sH6LcnfWfpeNaeYDLNGhSU47Yy";
|
||||
const cryptr = new Cryptr(appEncryptKey);
|
||||
currentTs = new Date().toUTCString();
|
||||
const encryptedString = cryptr.encrypt(currentTs);
|
||||
const decryptedString = cryptr.decrypt(encryptedString);
|
||||
|
||||
console.log(encryptedString);
|
Loading…
Reference in New Issue