Skip to content

Commit

Permalink
Accept 32 byte private key in sign function.
Browse files Browse the repository at this point in the history
  • Loading branch information
mattcollier committed Sep 4, 2019
1 parent e986435 commit ddd1f06
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 1 deletion.
6 changes: 5 additions & 1 deletion lib/ed25519.js
Original file line number Diff line number Diff line change
Expand Up @@ -161,9 +161,13 @@ ed25519.sign = function(options) {
message: options.privateKey,
encoding: 'binary'
});
if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {
if(privateKey.length === ed25519.constants.SEED_BYTE_LENGTH) {
var keyPair = ed25519.generateKeyPair({seed: privateKey});
privateKey = keyPair.privateKey;
} else if(privateKey.length !== ed25519.constants.PRIVATE_KEY_BYTE_LENGTH) {
throw new TypeError(
'"options.privateKey" must have a byte length of ' +
ed25519.constants.SEED_BYTE_LENGTH + ' or ' +
ed25519.constants.PRIVATE_KEY_BYTE_LENGTH);
}

Expand Down
16 changes: 16 additions & 0 deletions tests/unit/ed25519.js
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,22 @@ var UTIL = require('../../lib/util');
ASSERT.equal(eb64(signature), b64Sha256Signature);
});

it('should sign a digest given 32 private key bytes', function() {
var pwd = 'password';
var md = SHA256.create();
md.update(pwd, 'utf8');
var seed = md.digest().getBytes();
var kp = ED25519.generateKeyPair({seed: seed});
md = SHA256.create();
md.update('test', 'utf8');
var privateKey = kp.privateKey.slice(0, 32);
var signature = ED25519.sign({
md: md,
privateKey: privateKey
});
ASSERT.equal(eb64(signature), b64Sha256Signature);
});

it('should sign a UTF-8 message', function() {
var pwd = 'password';
var md = SHA256.create();
Expand Down

0 comments on commit ddd1f06

Please sign in to comment.