eccrypto.generatePrivate() (#38)
* eccrypto.generatePrivate() * Fix comment indentation
This commit is contained in:
parent
1ac5b09ce5
commit
98f7eec7e7
12
README.md
12
README.md
|
@ -43,7 +43,7 @@ var crypto = require("crypto");
|
||||||
var eccrypto = require("eccrypto");
|
var eccrypto = require("eccrypto");
|
||||||
|
|
||||||
// A new random 32-byte private key.
|
// A new random 32-byte private key.
|
||||||
var privateKey = crypto.randomBytes(32);
|
var privateKey = eccrypto.generatePrivate();
|
||||||
// Corresponding uncompressed (65-byte) public key.
|
// Corresponding uncompressed (65-byte) public key.
|
||||||
var publicKey = eccrypto.getPublic(privateKey);
|
var publicKey = eccrypto.getPublic(privateKey);
|
||||||
|
|
||||||
|
@ -64,12 +64,11 @@ eccrypto.sign(privateKey, msg).then(function(sig) {
|
||||||
### ECDH
|
### ECDH
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var crypto = require("crypto");
|
|
||||||
var eccrypto = require("eccrypto");
|
var eccrypto = require("eccrypto");
|
||||||
|
|
||||||
var privateKeyA = crypto.randomBytes(32);
|
var privateKeyA = eccrypto.generatePrivate();
|
||||||
var publicKeyA = eccrypto.getPublic(privateKeyA);
|
var publicKeyA = eccrypto.getPublic(privateKeyA);
|
||||||
var privateKeyB = crypto.randomBytes(32);
|
var privateKeyB = eccrypto.generatePrivate();
|
||||||
var publicKeyB = eccrypto.getPublic(privateKeyB);
|
var publicKeyB = eccrypto.getPublic(privateKeyB);
|
||||||
|
|
||||||
eccrypto.derive(privateKeyA, publicKeyB).then(function(sharedKey1) {
|
eccrypto.derive(privateKeyA, publicKeyB).then(function(sharedKey1) {
|
||||||
|
@ -82,12 +81,11 @@ eccrypto.derive(privateKeyA, publicKeyB).then(function(sharedKey1) {
|
||||||
### ECIES
|
### ECIES
|
||||||
|
|
||||||
```js
|
```js
|
||||||
var crypto = require("crypto");
|
|
||||||
var eccrypto = require("eccrypto");
|
var eccrypto = require("eccrypto");
|
||||||
|
|
||||||
var privateKeyA = crypto.randomBytes(32);
|
var privateKeyA = eccrypto.generatePrivate();
|
||||||
var publicKeyA = eccrypto.getPublic(privateKeyA);
|
var publicKeyA = eccrypto.getPublic(privateKeyA);
|
||||||
var privateKeyB = crypto.randomBytes(32);
|
var privateKeyB = eccrypto.generatePrivate();
|
||||||
var publicKeyB = eccrypto.getPublic(privateKeyB);
|
var publicKeyB = eccrypto.getPublic(privateKeyB);
|
||||||
|
|
||||||
// Encrypting the message for B.
|
// Encrypting the message for B.
|
||||||
|
|
14
browser.js
14
browser.js
|
@ -112,6 +112,20 @@ function hmacSha256Verify(key, msg, sig) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a new valid private key. Will use the window.crypto or window.msCrypto as source
|
||||||
|
* depending on your browser.
|
||||||
|
* @return {Buffer} A 32-byte private key.
|
||||||
|
* @function
|
||||||
|
*/
|
||||||
|
exports.generatePrivate = function () {
|
||||||
|
var privateKey = randomBytes(32);
|
||||||
|
while (!isValidPrivateKey(privateKey)) {
|
||||||
|
privateKey = randomBytes(32);
|
||||||
|
}
|
||||||
|
return privateKey;
|
||||||
|
};
|
||||||
|
|
||||||
var getPublic = exports.getPublic = function(privateKey) {
|
var getPublic = exports.getPublic = function(privateKey) {
|
||||||
// This function has sync API so we throw an error immediately.
|
// This function has sync API so we throw an error immediately.
|
||||||
assert(privateKey.length === 32, "Bad private key");
|
assert(privateKey.length === 32, "Bad private key");
|
||||||
|
|
13
index.js
13
index.js
|
@ -91,6 +91,19 @@ function pad32(msg){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate a new valid private key. Will use crypto.randomBytes as source.
|
||||||
|
* @return {Buffer} A 32-byte private key.
|
||||||
|
* @function
|
||||||
|
*/
|
||||||
|
exports.generatePrivate = function() {
|
||||||
|
var privateKey = crypto.randomBytes(32);
|
||||||
|
while (!isValidPrivateKey(privateKey)) {
|
||||||
|
privateKey = crypto.randomBytes(32);
|
||||||
|
}
|
||||||
|
return privateKey;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compute the public key for a given private key.
|
* Compute the public key for a given private key.
|
||||||
* @param {Buffer} privateKey - A 32-byte private key
|
* @param {Buffer} privateKey - A 32-byte private key
|
||||||
|
|
17
test.js
17
test.js
|
@ -28,7 +28,7 @@ describe("Key conversion", function() {
|
||||||
expect(Buffer.isBuffer(publicKey)).to.be.true;
|
expect(Buffer.isBuffer(publicKey)).to.be.true;
|
||||||
expect(publicKey.toString("hex")).to.equal("041b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f70beaf8f588b541507fed6a642c5ab42dfdf8120a7f639de5122d47a69a8e8d1");
|
expect(publicKey.toString("hex")).to.equal("041b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f70beaf8f588b541507fed6a642c5ab42dfdf8120a7f639de5122d47a69a8e8d1");
|
||||||
});
|
});
|
||||||
|
|
||||||
it("shouwld allow to convert private key to compressed public", function() {
|
it("shouwld allow to convert private key to compressed public", function() {
|
||||||
expect(Buffer.isBuffer(publicKeyCompressed)).to.be.true;
|
expect(Buffer.isBuffer(publicKeyCompressed)).to.be.true;
|
||||||
expect(publicKeyCompressed.toString("hex")).to.equal("031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f");
|
expect(publicKeyCompressed.toString("hex")).to.equal("031b84c5567b126440995d3ed5aaba0565d71e1834604819ff9c17f5e9d5dd078f");
|
||||||
|
@ -56,7 +56,7 @@ describe("ECDSA", function() {
|
||||||
return eccrypto.verify(publicKeyCompressed, msg, sig);
|
return eccrypto.verify(publicKeyCompressed, msg, sig);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("shouldn't verify incorrect signature", function(done) {
|
it("shouldn't verify incorrect signature", function(done) {
|
||||||
eccrypto.sign(privateKey, msg).then(function(sig) {
|
eccrypto.sign(privateKey, msg).then(function(sig) {
|
||||||
expect(Buffer.isBuffer(sig)).to.be.true;
|
expect(Buffer.isBuffer(sig)).to.be.true;
|
||||||
|
@ -160,7 +160,7 @@ describe("ECDH", function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should reject promise on bad keys", function(done) {
|
it("should reject promise on bad keys", function(done) {
|
||||||
eccrypto.derive(Buffer.from("test"), publicKeyB).catch(function() {
|
eccrypto.derive(Buffer.from("test"), publicKeyB).catch(function() {
|
||||||
eccrypto.derive(publicKeyB, publicKeyB).catch(function() {
|
eccrypto.derive(publicKeyB, publicKeyB).catch(function() {
|
||||||
|
@ -235,6 +235,17 @@ describe("ECIES", function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("should encrypt and decrypt with generated private and public key", function () {
|
||||||
|
var privateKey = eccrypto.generatePrivate();
|
||||||
|
var publicKey = eccrypto.getPublic(privateKey);
|
||||||
|
return eccrypto.encrypt(publicKey, Buffer.from("generated private key"))
|
||||||
|
.then(function(enc) { return eccrypto.decrypt(privateKey, enc); })
|
||||||
|
.then(function(msg) {
|
||||||
|
expect(msg.toString()).to.equal("generated private key");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
it("should reject promise on bad private key when decrypting", function(done) {
|
it("should reject promise on bad private key when decrypting", function(done) {
|
||||||
eccrypto.encrypt(publicKeyA, Buffer.from("test")).then(function(enc) {
|
eccrypto.encrypt(publicKeyA, Buffer.from("test")).then(function(enc) {
|
||||||
eccrypto.decrypt(privateKeyB, enc).catch(function() {
|
eccrypto.decrypt(privateKeyB, enc).catch(function() {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user