Check private key length in getPublic

This commit is contained in:
Kagami Hiiragi 2014-12-27 15:47:25 +03:00
parent f8c682da07
commit 513d880c64
2 changed files with 6 additions and 0 deletions

View File

@ -5,11 +5,16 @@
"use strict"; "use strict";
require("es6-promise").polyfill(); require("es6-promise").polyfill();
var assert = require("assert");
var EC = require("elliptic").ec; var EC = require("elliptic").ec;
var ec = new EC("secp256k1"); var ec = new EC("secp256k1");
exports.getPublic = function(privateKey) { exports.getPublic = function(privateKey) {
// `elliptic` doesn't have such checkings so we do it ourself. We
// should always ensure that library user doesn't try to do something
// dumb.
assert(privateKey.length === 32, "Bad private key");
// XXX(Kagami): `elliptic.utils.encode` returns array for every // XXX(Kagami): `elliptic.utils.encode` returns array for every
// encoding except `hex`. // encoding except `hex`.
return new Buffer(ec.keyPair(privateKey).getPublic("arr")); return new Buffer(ec.keyPair(privateKey).getPublic("arr"));

View File

@ -16,6 +16,7 @@ describe("Key convertion", function() {
it("should throw on invalid private key", function() { it("should throw on invalid private key", function() {
expect(eccrypto.getPublic.bind(null, Buffer("00", "hex"))).to.throw(Error); expect(eccrypto.getPublic.bind(null, Buffer("00", "hex"))).to.throw(Error);
expect(eccrypto.getPublic.bind(null, Buffer("test"))).to.throw(Error);
}); });
}); });