eccrypto/index.js

63 lines
1.9 KiB
JavaScript
Raw Normal View History

/**
* Node.js eccrypto implementation.
* @module eccrypto
*/
"use strict";
var promise = typeof Promise === "undefined" ?
require("es6-promise").Promise :
Promise;
2015-01-13 19:39:37 +00:00
// TODO(Kagami): We may fallback to pure JS implementation
// (`browser.js`) if this modules are failed to load.
2014-12-23 20:28:40 +00:00
var secp256k1 = require("secp256k1");
2015-01-13 19:39:37 +00:00
var ecdh = require("./build/Release/ecdh");
2014-12-23 20:28:40 +00:00
/**
* Compute the public key for a given private key.
2015-01-02 15:21:24 +00:00
* @param {Buffer} privateKey - A 32-byte private key
* @return {Buffer} A 65-byte public key.
2015-01-02 13:47:09 +00:00
* @function
*/
2015-01-13 13:21:11 +00:00
exports.getPublic = secp256k1.createPublicKey;
/**
* Create an ECDSA signature.
2015-01-02 15:21:24 +00:00
* @param {Buffer} privateKey - A 32-byte private key
* @param {Buffer} msg - The message being signed
* @return {Promise.<Buffer>} A promise that resolves with the
* signature and rejects on bad key or message.
*/
exports.sign = function(privateKey, msg) {
2015-01-12 17:50:21 +00:00
return new promise(function(resolve) {
resolve(secp256k1.sign(privateKey, msg));
});
};
/**
* Verify an ECDSA signature.
2015-01-13 12:11:53 +00:00
* @param {Buffer} publicKey - A 65-byte public key
2015-01-02 15:21:24 +00:00
* @param {Buffer} msg - The message being verified
* @param {Buffer} sig - The signature
* @return {Promise.<undefined>} A promise that resolves on correct
* signature and rejects on bad key or signature.
*/
2015-01-13 12:11:53 +00:00
exports.verify = function(publicKey, msg, sig) {
return new promise(function(resolve, reject) {
2015-01-12 17:50:21 +00:00
return secp256k1.verify(publicKey, msg, sig) === 1 ? resolve() : reject();
});
};
2015-01-13 19:39:37 +00:00
/**
* Derive shared secret for given private and public keys.
* @param {Buffer} privateKeyA - Sender's private key
* @param {Buffer} publicKeyB - Recipient's public key
* @return {Promise.<Buffer>} A promise that resolves with the derived
* shared secret (Px) and rejects on bad key.
*/
exports.derive = function(privateKeyA, publicKeyB) {
return new promise(function(resolve) {
resolve(ecdh.derive(privateKeyA, publicKeyB));
});
};