diff --git a/packages/ripple-keypairs/src/index.js b/packages/ripple-keypairs/src/index.js index 93afa50e..f714ad45 100644 --- a/packages/ripple-keypairs/src/index.js +++ b/packages/ripple-keypairs/src/index.js @@ -42,6 +42,10 @@ function walletFromSeed(seed) { return deriveWallet(type, bytes); } +function walletFromPhrase(phrase, type='secp256k1') { + return deriveWallet(type, seedFromPhrase(phrase)); +} + function deriveValidator(seedBytes) { const pair = K256Pair.fromSeed(seedBytes, {validator: true}); return { @@ -67,6 +71,10 @@ function validatorKeysFromSeed(seed) { return deriveValidator(bytes); } +function validatorKeysFromPhrase(phrase) { + return deriveValidator(seedFromPhrase(phrase)); +} + module.exports = { KeyPair, K256Pair, @@ -78,6 +86,8 @@ module.exports = { generateWallet, generateValidatorKeys, walletFromSeed, + walletFromPhrase, validatorKeysFromSeed, + validatorKeysFromPhrase, nodePublicAccountID }; diff --git a/packages/ripple-keypairs/test/keypairs-test.js b/packages/ripple-keypairs/test/keypairs-test.js index 94881a26..710051f6 100644 --- a/packages/ripple-keypairs/test/keypairs-test.js +++ b/packages/ripple-keypairs/test/keypairs-test.js @@ -13,8 +13,10 @@ const { keyPairFromSeed, generateWallet, walletFromSeed, + walletFromPhrase, generateValidatorKeys, validatorKeysFromSeed, + validatorKeysFromPhrase, nodePublicAccountID } = keypairs; @@ -100,6 +102,42 @@ describe('keyPairFromSeed', function() { }); }); +describe('walletFromPhrase', function() { + it('can gan generate ed25519 wallets', function() { + const expected = { + seed: 'sEd7rBGm5kxzauRTAV2hbsNz7N45X91', + accountID: 'rJZdUusLDtY9NEsGea7ijqhVrXv98rYBYN', + publicKey: + 'ED' + + 'D3993CDC6647896C455F136648B7750723B011475547AF60691AA3D7438E021D' + }; + const wallet = walletFromPhrase('niq', 'ed25519'); + assert.deepEqual(wallet, expected); + }); + it('generates secp256k1 wallets by default', function() { + const expected = { + seed: 'shQUG1pmPYrcnSUGeuJFJTA1b3JSL', + accountID: 'rNvfq2SVbCiio1zkN5WwLQW8CHgy2dUoQi', + publicKey: + '02' + + '1E788CDEB9104C9179C3869250A89999C1AFF92D2C3FF7925A1696835EA3D840' + }; + const wallet = walletFromPhrase('niq'); + assert.deepEqual(wallet, expected); + }); +}); + +describe('validatorKeysFromPhrase', function() { + it('generates keys used by peer nodes/validators', function() { + const expected = { + seed: 'shQUG1pmPYrcnSUGeuJFJTA1b3JSL', + publicKey: 'n9KNees3ippJvi7ZT1GqHMCmEmmkCVPxQRPfU5tPzmg9MtWevpjP' + }; + const wallet = validatorKeysFromPhrase('niq'); + assert.deepEqual(wallet, expected); + }); +}); + describe('generateWallet', function() { function randGen(len) { return _.fill(Array(len), 0);