Documentation
¶
Index ¶
- Constants
- func NewPrivKeySecp256k1(path hd.BIP44Params, hrp string) (types.LedgerPrivKey, string, error)
- func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (types.LedgerPrivKeyAminoJSON, error)
- func RegisterAmino(cdc *codec.LegacyAmino)
- func SetAppName(appName string)
- func SetCreatePubkey(fn createPubkeyFn)
- func SetDERConversion(enabled bool)
- func SetDiscoverLedger(fn discoverLedgerFn)
- func SetSkipDERConversion()
- func ShowAddress(path hd.BIP44Params, expectedPubKey types.PubKey, accountAddressPrefix string) error
- type Options
- type PrivKeyLedgerSecp256k1
- func (pkl *PrivKeyLedgerSecp256k1) AssertIsPrivKeyInner()
- func (pkl PrivKeyLedgerSecp256k1) Bytes() []byte
- func (pkl PrivKeyLedgerSecp256k1) Equals(other types.LedgerPrivKey) bool
- func (pkl PrivKeyLedgerSecp256k1) PubKey() types.PubKey
- func (pkl PrivKeyLedgerSecp256k1) Sign(message []byte) ([]byte, error)
- func (pkl PrivKeyLedgerSecp256k1) SignLedgerAminoJSON(message []byte) ([]byte, error)
- func (pkl PrivKeyLedgerSecp256k1) Type() string
- func (pkl PrivKeyLedgerSecp256k1) ValidateKey() error
- type SECP256K1
Constants ¶
const AppName = "Cosmos"
AppName defines the Ledger app used for signing. Cosmos SDK uses the Cosmos app
Variables ¶
This section is empty.
Functions ¶
func NewPrivKeySecp256k1 ¶
func NewPrivKeySecp256k1(path hd.BIP44Params, hrp string) (types.LedgerPrivKey, string, error)
NewPrivKeySecp256k1 will generate a new key and store the public key for later use. The request will require user confirmation and will show account and index in the device
func NewPrivKeySecp256k1Unsafe ¶
func NewPrivKeySecp256k1Unsafe(path hd.BIP44Params) (types.LedgerPrivKeyAminoJSON, error)
NewPrivKeySecp256k1Unsafe will generate a new key and store the public key for later use.
This function is marked as unsafe as it will retrieve a pubkey without user verification. It can only be used to verify a pubkey but never to create new accounts/keys. In that case, please refer to NewPrivKeySecp256k1
func RegisterAmino ¶
func RegisterAmino(cdc *codec.LegacyAmino)
RegisterAmino registers all go-crypto related types in the given (amino) codec.
func SetAppName ¶ added in v0.47.0
func SetAppName(appName string)
Set the Ledger app name to use a different app name
func SetCreatePubkey ¶ added in v0.47.0
func SetCreatePubkey(fn createPubkeyFn)
Set the createPubkey function to use a different public key
func SetDERConversion ¶ added in v0.53.5
func SetDERConversion(enabled bool)
SetDERConversion configures whether DER signature conversion should be enabled. When enabled (true), signatures returned from the Ledger device are converted from DER format to BER format, which is the standard behavior for Cosmos SDK chains. When disabled (false), raw signatures are used without conversion, which is typically required for Ethereum/EVM-compatible chains.
Parameters:
- enabled: true to enable DER conversion (Cosmos chains), false to disable (Ethereum chains)
Example usage for different coin types in a key management CLI:
switch coinType {
case 60:
// Ethereum/EVM chains - disable DER conversion for raw signatures
cosmosLedger.SetDiscoverLedger(func() (cosmosLedger.SECP256K1, error) {
return evmkeyring.LedgerDerivation()
})
cosmosLedger.SetCreatePubkey(func(key []byte) cryptotypes.PubKey {
return evmkeyring.CreatePubkey(key)
})
cosmosLedger.SetAppName(evmkeyring.AppName)
cosmosLedger.SetDERConversion(false) // Disable DER conversion for Ethereum
case 118:
// Cosmos SDK chains - enable DER conversion for signature compatibility
cosmosLedger.SetDiscoverLedger(func() (cosmosLedger.SECP256K1, error) {
device, err := ledger.FindLedgerCosmosUserApp()
if err != nil {
return nil, err
}
return device, nil
})
cosmosLedger.SetCreatePubkey(func(key []byte) cryptotypes.PubKey {
return &secp256k1.PubKey{Key: key}
})
cosmosLedger.SetAppName(cosmosLedger.AppName)
cosmosLedger.SetDERConversion(true) // Enable DER conversion for Cosmos
default:
return fmt.Errorf(
"unsupported coin type %d for Ledger. Supported coin types: 60 (Ethereum app), 118 (Cosmos app)", coinType,
)
}
func SetDiscoverLedger ¶ added in v0.47.0
func SetDiscoverLedger(fn discoverLedgerFn)
Set the discoverLedger function to use a different Ledger derivation
func SetSkipDERConversion ¶ added in v0.47.0
func SetSkipDERConversion()
Set the DER Conversion requirement to true (false by default)
func ShowAddress ¶
func ShowAddress(path hd.BIP44Params, expectedPubKey types.PubKey, accountAddressPrefix string) error
ShowAddress triggers a ledger device to show the corresponding address.
Types ¶
type Options ¶ added in v0.47.0
type Options struct {
// contains filtered or unexported fields
}
Options hosts customization options to account for differences in Ledger signing and usage across chains.
type PrivKeyLedgerSecp256k1 ¶
type PrivKeyLedgerSecp256k1 struct {
// CachedPubKey should be private, but we want to encode it via
// go-amino so we can view the address later, even without having the
// ledger attached.
CachedPubKey types.PubKey
Path hd.BIP44Params
}
PrivKeyLedgerSecp256k1 implements PrivKey, calling the ledger nano we cache the PubKey from the first call to use it later.
func (*PrivKeyLedgerSecp256k1) AssertIsPrivKeyInner ¶
func (pkl *PrivKeyLedgerSecp256k1) AssertIsPrivKeyInner()
AssertIsPrivKeyInner implements the PrivKey interface. It performs a no-op.
func (PrivKeyLedgerSecp256k1) Bytes ¶
func (pkl PrivKeyLedgerSecp256k1) Bytes() []byte
Bytes implements the PrivKey interface. It stores the cached public key so we can verify the same key when we reconnect to a ledger.
func (PrivKeyLedgerSecp256k1) Equals ¶
func (pkl PrivKeyLedgerSecp256k1) Equals(other types.LedgerPrivKey) bool
Equals implements the PrivKey interface. It makes sure two private keys refer to the same public key.
func (PrivKeyLedgerSecp256k1) PubKey ¶
func (pkl PrivKeyLedgerSecp256k1) PubKey() types.PubKey
PubKey returns the cached public key.
func (PrivKeyLedgerSecp256k1) Sign ¶
func (pkl PrivKeyLedgerSecp256k1) Sign(message []byte) ([]byte, error)
Sign returns a secp256k1 signature for the corresponding message using SIGN_MODE_TEXTUAL.
func (PrivKeyLedgerSecp256k1) SignLedgerAminoJSON ¶ added in v0.50.0
func (pkl PrivKeyLedgerSecp256k1) SignLedgerAminoJSON(message []byte) ([]byte, error)
SignLedgerAminoJSON returns a secp256k1 signature for the corresponding message using SIGN_MODE_LEGACY_AMINO_JSON.
func (PrivKeyLedgerSecp256k1) Type ¶
func (pkl PrivKeyLedgerSecp256k1) Type() string
func (PrivKeyLedgerSecp256k1) ValidateKey ¶
func (pkl PrivKeyLedgerSecp256k1) ValidateKey() error
ValidateKey allows us to verify the sanity of a public key after loading it from disk.
type SECP256K1 ¶
type SECP256K1 interface {
Close() error
// Returns an uncompressed pubkey
GetPublicKeySECP256K1([]uint32) ([]byte, error)
// Returns a compressed pubkey and bech32 address (requires user confirmation)
GetAddressPubKeySECP256K1([]uint32, string) ([]byte, string, error)
// Signs a message (requires user confirmation)
// The last byte denotes the SIGN_MODE to be used by Ledger: 0 for
// LEGACY_AMINO_JSON, 1 for TEXTUAL. It corresponds to the P2 value
// in https://github.com/cosmos/ledger-cosmos/blob/main/docs/APDUSPEC.md
SignSECP256K1([]uint32, []byte, byte) ([]byte, error)
}
SECP256K1 reflects an interface a Ledger API must implement for SECP256K1