Flow uses ECDSA to control access to user accounts. Each key pair can be used in combination with the SHA2-256 or SHA3-256 hashing algorithms.
Here's how to generate an ECDSA private key for the P-256 (secp256r1) curve:
import "github.com/onflow/flow-go-sdk/crypto" // deterministic seed phrase // note: this is only an example, please use a secure random generator for the key seed seed := byte("elephant ears space cowboy octopus rodeo potato cannon pineapple") privateKey, err := crypto.GeneratePrivateKey(crypto.ECDSA_P256, seed)
The private key can then be encoded as bytes (i.e. for storage):
encPrivateKey := privateKey.Encode()
A private key has an accompanying public key:
publicKey := privateKey.PublicKey()
The example above uses an ECDSA key pair on the P-256 (secp256r1) elliptic curve. Flow also supports the secp256k1 curve used by Bitcoin and Ethereum.
Here's how to generate an ECDSA private key for the secp256k1 curve:
privateKey, err := crypto.GeneratePrivateKey(crypto.ECDSA_secp256k1, seed)
Here's a full list of the supported signature and hash algorithms: Flow Signature & Hash Algorithms