mirror of
https://github.com/XRPLF/rippled.git
synced 2025-12-05 16:57:56 +00:00
Generate master validator public key from master secret
This commit is contained in:
@@ -16,6 +16,9 @@ Usage:
|
|||||||
create
|
create
|
||||||
Create a new master public/secret key pair.
|
Create a new master public/secret key pair.
|
||||||
|
|
||||||
|
create <master-secret>
|
||||||
|
Generate master key pair using provided secret.
|
||||||
|
|
||||||
check <key>
|
check <key>
|
||||||
Check an existing key for validity.
|
Check an existing key for validity.
|
||||||
|
|
||||||
@@ -87,6 +90,15 @@ def create_ed_keys(urandom=os.urandom):
|
|||||||
Base58.VER_NODE_PRIVATE, private_key)
|
Base58.VER_NODE_PRIVATE, private_key)
|
||||||
return public_key_human, private_key_human
|
return public_key_human, private_key_human
|
||||||
|
|
||||||
|
def create_ed_public_key(private_key_human):
|
||||||
|
v, private_key = Base58.decode_version(private_key_human)
|
||||||
|
check_master_secret(v, private_key)
|
||||||
|
|
||||||
|
public_key = ed25519.publickey(private_key)
|
||||||
|
public_key_human = Base58.encode_version(
|
||||||
|
Base58.VER_NODE_PUBLIC, ED25519_BYTE + public_key)
|
||||||
|
return public_key_human
|
||||||
|
|
||||||
def check_validator_public(v, validator_public_key):
|
def check_validator_public(v, validator_public_key):
|
||||||
Base58.check_version(v, Base58.VER_NODE_PUBLIC)
|
Base58.check_version(v, Base58.VER_NODE_PUBLIC)
|
||||||
if len(validator_public_key) != 33:
|
if len(validator_public_key) != 33:
|
||||||
@@ -132,6 +144,12 @@ def perform_create(urandom=os.urandom, print=print):
|
|||||||
public, private = create_ed_keys(urandom)
|
public, private = create_ed_keys(urandom)
|
||||||
print('[validator_keys]', public, '', '[master_secret]', private, sep='\n')
|
print('[validator_keys]', public, '', '[master_secret]', private, sep='\n')
|
||||||
|
|
||||||
|
def perform_create_public(private_key_human, print=print):
|
||||||
|
public_key_human = create_ed_public_key(private_key_human)
|
||||||
|
print(
|
||||||
|
'[validator_keys]',public_key_human, '',
|
||||||
|
'[master_secret]', private_key_human, sep='\n')
|
||||||
|
|
||||||
def perform_check(s, print=print):
|
def perform_check(s, print=print):
|
||||||
version, b = Base58.decode_version(s)
|
version, b = Base58.decode_version(s)
|
||||||
print('version = ' + Base58.version_name(version))
|
print('version = ' + Base58.version_name(version))
|
||||||
@@ -151,8 +169,11 @@ def perform_verify(
|
|||||||
print('Signature valid for', public_key_human)
|
print('Signature valid for', public_key_human)
|
||||||
|
|
||||||
# Externally visible versions of functions.
|
# Externally visible versions of functions.
|
||||||
def create():
|
def create(private_key_human=None):
|
||||||
perform_create()
|
if private_key_human:
|
||||||
|
perform_create_public(private_key_human)
|
||||||
|
else:
|
||||||
|
perform_create()
|
||||||
|
|
||||||
def check(s):
|
def check(s):
|
||||||
perform_check(s)
|
perform_check(s)
|
||||||
|
|||||||
@@ -83,6 +83,12 @@ class test_Sign(TestCase):
|
|||||||
self.assertEquals(
|
self.assertEquals(
|
||||||
skh, 'pnEp13Zu7xTeKQVQ2RZVaUraE9GXKqFtnXQVUFKXbTE6wsP4wne')
|
skh, 'pnEp13Zu7xTeKQVQ2RZVaUraE9GXKqFtnXQVUFKXbTE6wsP4wne')
|
||||||
|
|
||||||
|
def test_create_ed_public_key(self):
|
||||||
|
pkh = Sign.create_ed_public_key(
|
||||||
|
'pnEp13Zu7xTeKQVQ2RZVaUraE9GXKqFtnXQVUFKXbTE6wsP4wne')
|
||||||
|
self.assertEquals(
|
||||||
|
pkh, 'nHUUaKHpxyRP4TZZ79tTpXuTpoM8pRNs5crZpGVA5jdrjib5easY')
|
||||||
|
|
||||||
def get_test_keypair(self):
|
def get_test_keypair(self):
|
||||||
public = (Base58.VER_NODE_PUBLIC, '\x02' + (32 * 'v'))
|
public = (Base58.VER_NODE_PUBLIC, '\x02' + (32 * 'v'))
|
||||||
private = (Base58.VER_NODE_PRIVATE, 32 * 'k')
|
private = (Base58.VER_NODE_PRIVATE, 32 * 'k')
|
||||||
@@ -123,6 +129,18 @@ class test_Sign(TestCase):
|
|||||||
'pnEp13Zu7xTeKQVQ2RZVaUraE9GXKqFtnXQVUFKXbTE6wsP4wne'],
|
'pnEp13Zu7xTeKQVQ2RZVaUraE9GXKqFtnXQVUFKXbTE6wsP4wne'],
|
||||||
{'sep': '\n'}]])
|
{'sep': '\n'}]])
|
||||||
|
|
||||||
|
def test_create_public(self):
|
||||||
|
Sign.perform_create_public(
|
||||||
|
'pnEp13Zu7xTeKQVQ2RZVaUraE9GXKqFtnXQVUFKXbTE6wsP4wne', self.print)
|
||||||
|
self.assertEquals(
|
||||||
|
self.results,
|
||||||
|
[[['[validator_keys]',
|
||||||
|
'nHUUaKHpxyRP4TZZ79tTpXuTpoM8pRNs5crZpGVA5jdrjib5easY',
|
||||||
|
'',
|
||||||
|
'[master_secret]',
|
||||||
|
'pnEp13Zu7xTeKQVQ2RZVaUraE9GXKqFtnXQVUFKXbTE6wsP4wne'],
|
||||||
|
{'sep': '\n'}]])
|
||||||
|
|
||||||
def test_sign(self):
|
def test_sign(self):
|
||||||
public, private = self.get_test_keypair()
|
public, private = self.get_test_keypair()
|
||||||
Sign.perform_sign(self.SEQUENCE, public, private, print=self.print)
|
Sign.perform_sign(self.SEQUENCE, public, private, print=self.print)
|
||||||
|
|||||||
Reference in New Issue
Block a user