From c36136af9888356f8d85ef893d4777266400d36f Mon Sep 17 00:00:00 2001 From: Kevin Pita Date: Tue, 24 Feb 2026 13:25:10 +0100 Subject: [PATCH] refactor(address-codec): set ed25519 family seed prefix --- address-codec/codec.go | 8 +++----- pkg/crypto/ed25519.go | 10 +++++----- pkg/crypto/ed25519_test.go | 2 +- pkg/crypto/secp256k1.go | 14 ++++++-------- pkg/crypto/types.go | 2 +- 5 files changed, 16 insertions(+), 20 deletions(-) diff --git a/address-codec/codec.go b/address-codec/codec.go index bc8d1099..b32573f1 100644 --- a/address-codec/codec.go +++ b/address-codec/codec.go @@ -118,12 +118,10 @@ func EncodeSeed(entropy []byte, encodingType interfaces.CryptoImplementation) (s return "", &EncodeLengthError{Instance: "Entropy", Input: len(entropy), Expected: FamilySeedLength} } - if encodingType == crypto.ED25519() { - prefix := []byte{0x01, 0xe1, 0x4b} - return Encode(entropy, prefix, FamilySeedLength) + if ed25519 := crypto.ED25519(); encodingType == ed25519 { + return Encode(entropy, ed25519.FamilySeedPrefix(), FamilySeedLength) } else if secp256k1 := crypto.SECP256K1(); encodingType == secp256k1 { - prefix := []byte{secp256k1.FamilySeedPrefix()} - return Encode(entropy, prefix, FamilySeedLength) + return Encode(entropy, secp256k1.FamilySeedPrefix(), FamilySeedLength) } return "", errors.New("encoding type must be `ed25519` or `secp256k1`") diff --git a/pkg/crypto/ed25519.go b/pkg/crypto/ed25519.go index 7b47ae77..0a912642 100644 --- a/pkg/crypto/ed25519.go +++ b/pkg/crypto/ed25519.go @@ -13,13 +13,13 @@ const ( ) var ( - _ Algorithm = &ED25519CryptoAlgorithm{} + _ Algorithm = &ED25519CryptoAlgorithm{} + ed25519FamilySeedPrefix = []byte{0x01, 0xe1, 0x4b} ) // ED25519CryptoAlgorithm is the implementation of the ED25519 cryptographic algorithm. type ED25519CryptoAlgorithm struct { - prefix byte - familySeedPrefix byte + prefix byte } // ED25519 returns the ED25519 cryptographic algorithm. @@ -35,8 +35,8 @@ func (c ED25519CryptoAlgorithm) Prefix() byte { } // FamilySeedPrefix returns the family seed prefix for the ED25519 cryptographic algorithm. -func (c ED25519CryptoAlgorithm) FamilySeedPrefix() byte { - return c.familySeedPrefix +func (c ED25519CryptoAlgorithm) FamilySeedPrefix() []byte { + return ed25519FamilySeedPrefix } // DeriveKeypair derives a keypair from a seed. diff --git a/pkg/crypto/ed25519_test.go b/pkg/crypto/ed25519_test.go index dc277459..ef510a5f 100644 --- a/pkg/crypto/ed25519_test.go +++ b/pkg/crypto/ed25519_test.go @@ -11,7 +11,7 @@ func TestED25519_Prefix(t *testing.T) { } func TestED25519_FamilySeedPrefix(t *testing.T) { - require.Zero(t, ED25519().FamilySeedPrefix()) + require.Equal(t, ed25519FamilySeedPrefix, ED25519().FamilySeedPrefix()) } func TestED25519DeriveKeypair(t *testing.T) { diff --git a/pkg/crypto/secp256k1.go b/pkg/crypto/secp256k1.go index e6c7b85f..e708d9a5 100644 --- a/pkg/crypto/secp256k1.go +++ b/pkg/crypto/secp256k1.go @@ -14,25 +14,23 @@ import ( const ( // SECP256K1 prefix - value is 0 secp256K1Prefix byte = 0x00 - // SECP256K1 family seed prefix - value is 33 - secp256K1FamilySeedPrefix byte = 0x21 ) var ( _ Algorithm = SECP256K1CryptoAlgorithm{} + // SECP256K1 family seed prefix - value is 33 + secp256K1FamilySeedPrefix = []byte{0x21} ) // SECP256K1CryptoAlgorithm is the implementation of the SECP256K1 algorithm. type SECP256K1CryptoAlgorithm struct { - prefix byte - familySeedPrefix byte + prefix byte } // SECP256K1 returns a new SECP256K1CryptoAlgorithm instance. func SECP256K1() SECP256K1CryptoAlgorithm { return SECP256K1CryptoAlgorithm{ - prefix: secp256K1Prefix, - familySeedPrefix: secp256K1FamilySeedPrefix, + prefix: secp256K1Prefix, } } @@ -42,8 +40,8 @@ func (c SECP256K1CryptoAlgorithm) Prefix() byte { } // FamilySeedPrefix returns the family seed prefix for the SECP256K1 algorithm. -func (c SECP256K1CryptoAlgorithm) FamilySeedPrefix() byte { - return c.familySeedPrefix +func (c SECP256K1CryptoAlgorithm) FamilySeedPrefix() []byte { + return secp256K1FamilySeedPrefix } // deriveScalar derives a scalar from a seed. diff --git a/pkg/crypto/types.go b/pkg/crypto/types.go index 0ad37cf1..1dd1a806 100644 --- a/pkg/crypto/types.go +++ b/pkg/crypto/types.go @@ -3,5 +3,5 @@ package crypto // Algorithm defines the interface for cryptographic algorithms used in XRPL key generation and signing. type Algorithm interface { Prefix() byte - FamilySeedPrefix() byte + FamilySeedPrefix() []byte }