mirror of
https://github.com/orbitdb/orbitdb.git
synced 2025-03-30 15:08:28 +00:00
85 lines
2.1 KiB
JavaScript
85 lines
2.1 KiB
JavaScript
'use strict';
|
|
|
|
var fs = require('fs');
|
|
var crypto = require('crypto');
|
|
var Base58 = require('bs58');
|
|
|
|
var algorithm = 'aes-256-ecb';
|
|
var useEncryption = true;
|
|
|
|
/* ENCRYPTION / DECRYPTION */
|
|
function encrypt(text, privkey, pubkey) {
|
|
if(!useEncryption)
|
|
return text;
|
|
|
|
var encrypted;
|
|
try {
|
|
var cipher = crypto.createCipher(algorithm, privkey)
|
|
encrypted = cipher.update(text, 'utf8', 'hex')
|
|
encrypted += cipher.final('hex');
|
|
} catch(e) {
|
|
console.log("Error while encrypting:", e, e.stack);
|
|
}
|
|
return encrypted;
|
|
}
|
|
|
|
function decrypt(text, privkey, pubkey) {
|
|
if(!useEncryption)
|
|
return text;
|
|
|
|
var decrypted;
|
|
try {
|
|
var cipher = crypto.createDecipher(algorithm, privkey)
|
|
decrypted = cipher.update(text, 'hex', 'utf8')
|
|
decrypted += cipher.final('utf8');
|
|
} catch(e) {
|
|
console.log("Error while decrypting:", e, e.stack);
|
|
}
|
|
return decrypted;
|
|
}
|
|
|
|
/* SIGNING FUNCTIONS */
|
|
function hashWithSHA512(data, salt) {
|
|
if(!salt) salt = "null";
|
|
var hash = crypto.createHmac('sha512', salt);
|
|
hash.update(data);
|
|
var value = hash.digest('hex');
|
|
return value;
|
|
}
|
|
|
|
function sign(data, privkey, seq, salt) {
|
|
if(!salt) salt = "null";
|
|
var sign = crypto.createSign('RSA-SHA256');
|
|
var hash = hashWithSHA512(data, "" + salt)
|
|
sign.update("" + seq + hash);
|
|
var sig = sign.sign(privkey, 'hex');
|
|
return sig;
|
|
}
|
|
|
|
function verify(data, pubkey, sig, seq, salt) {
|
|
if(!salt) salt = "null";
|
|
var verify = crypto.createVerify('RSA-SHA256');
|
|
var hash = hashWithSHA512(data, salt);
|
|
verify.update("" + seq + hash);
|
|
var verified = verify.verify(pubkey, sig, 'hex');
|
|
return verified;
|
|
}
|
|
|
|
/* PUBLIC */
|
|
module.exports = {
|
|
encrypt: function(payload, privkey, pubkey) {
|
|
return encrypt(payload, privkey, pubkey);
|
|
},
|
|
decrypt: function(payload, privkey, pubkey) {
|
|
return decrypt(payload, privkey, pubkey);
|
|
},
|
|
sign: (data, privateKey, sequenceNumber, salt) => {
|
|
return sign(data, privateKey, sequenceNumber, salt);
|
|
},
|
|
verify: (data, publicKey, signature, sequenceNumber, salt) => {
|
|
return verify(data, publicKey, signature, sequenceNumber, salt);
|
|
},
|
|
hash: (data, salt) => {
|
|
return hashWithSHA512(data, salt);
|
|
}
|
|
} |