mirror of
https://github.com/kaspanet/kaspad.git
synced 2025-05-23 15:26:42 +00:00

* Implement bip32 * Unite private and public extended keys * Change variable names * Change test name and add comment * Rename var name * Rename ckd.go to child_key_derivation.go * Rename ser32 -> serializeUint32 * Add PrivateKey method * Rename Path -> DeriveFromPath * Add comment to validateChecksum * Remove redundant condition from parsePath * Rename Fingerprint->ParentFingerprint * Merge hardened and non-hardened paths in calcI * Change fingerPrintFromPoint to method * Move hash160 to hash.go * Fix a bug in calcI * Simplify doubleSha256 * Remove slice end bound * Split long line * Change KaspaMainnetPrivate/public to represent kprv/kpub * Add comments * Fix comment * Copy base58 library to kaspad * Add versions for all networks * Change versions to hex * Add comments Co-authored-by: Svarog <feanorr@gmail.com> Co-authored-by: Elichai Turkel <elichai.turkel@gmail.com>
47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
package bip32
|
|
|
|
import "crypto/rand"
|
|
|
|
// GenerateSeed generates seed that can be used to initialize a master key.
|
|
func GenerateSeed() ([]byte, error) {
|
|
randBytes := make([]byte, 32)
|
|
_, err := rand.Read(randBytes)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return randBytes, nil
|
|
}
|
|
|
|
// NewMasterWithPath returns a new master key based on the given seed and version, with a derivation
|
|
// to the given path.
|
|
func NewMasterWithPath(seed []byte, version [4]byte, pathString string) (*ExtendedKey, error) {
|
|
masterKey, err := NewMaster(seed, version)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return masterKey.DeriveFromPath(pathString)
|
|
}
|
|
|
|
// NewPublicMasterWithPath returns a new public master key based on the given seed and version, with a derivation
|
|
// to the given path.
|
|
func NewPublicMasterWithPath(seed []byte, version [4]byte, pathString string) (*ExtendedKey, error) {
|
|
masterKey, err := NewMaster(seed, version)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
path, err := parsePath(pathString)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
descendantKey, err := masterKey.path(path)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return descendantKey.Public()
|
|
}
|