45 lines
1.3 KiB
JavaScript
45 lines
1.3 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
var secp256k1 = require('secp256k1');
|
||
|
var BitAuth = require('./bitauth-common');
|
||
|
var crypto = require('crypto');
|
||
|
|
||
|
BitAuth._generateRandomPair = function() {
|
||
|
var privateKeyBuffer = crypto.randomBytes(32); // may throw error if entropy sources drained
|
||
|
var publicKeyBuffer = secp256k1.createPublicKey(privateKeyBuffer, true);
|
||
|
return [privateKeyBuffer.toString('hex'), publicKeyBuffer.toString('hex')];
|
||
|
};
|
||
|
|
||
|
BitAuth._getPublicKeyFromPrivateKey = function(privkey) {
|
||
|
var privateKeyBuffer;
|
||
|
if (Buffer.isBuffer(privkey)) {
|
||
|
privateKeyBuffer = privkey;
|
||
|
} else {
|
||
|
privateKeyBuffer = new Buffer(privkey, 'hex');
|
||
|
}
|
||
|
return secp256k1.createPublicKey(privateKeyBuffer, true);
|
||
|
};
|
||
|
|
||
|
BitAuth._sign = function(hashBuffer, privkey) {
|
||
|
var privkeyBuffer;
|
||
|
if (Buffer.isBuffer(privkey)) {
|
||
|
privkeyBuffer = privkey;
|
||
|
} else {
|
||
|
privkeyBuffer = new Buffer(privkey, 'hex');
|
||
|
}
|
||
|
var signatureInfo = secp256k1.sign(hashBuffer, privkeyBuffer, true);
|
||
|
return signatureInfo.toString('hex');
|
||
|
};
|
||
|
|
||
|
BitAuth._verifySignature = function(hashBuffer, signatureBuffer, pubkey) {
|
||
|
var pubkeyBuffer;
|
||
|
if (!Buffer.isBuffer(pubkey)){
|
||
|
pubkeyBuffer = new Buffer(pubkey, 'hex');
|
||
|
} else {
|
||
|
pubkeyBuffer = pubkey;
|
||
|
}
|
||
|
return secp256k1.verify(hashBuffer, signatureBuffer, pubkeyBuffer) ? true : false;
|
||
|
};
|
||
|
|
||
|
module.exports = BitAuth;
|