Documentation ¶
Overview ¶
Package crypto provides the following functionality: * Key Generation: secp256k1, ed25519 * Signing: secp256k1, ed25519 * Verification: secp256k1, ed25519 * A KeyManager abstraction that can be leveraged to manage/use keys (create, sign etc) as desired per the given use case
Index ¶
- func GenerateEntropy(n EntropySize) ([]byte, error)
- func GenerateNonce(n EntropySize) (string, error)
- type EntropySize
- type KeyExporter
- type KeyImporter
- type KeyManager
- type LocalKeyManager
- func (k *LocalKeyManager) ExportKey(keyID string) (jwk.JWK, error)
- func (k *LocalKeyManager) GeneratePrivateKey(algorithmID string) (string, error)
- func (k *LocalKeyManager) GetPublicKey(keyID string) (jwk.JWK, error)
- func (k *LocalKeyManager) ImportKey(key jwk.JWK) (string, error)
- func (k *LocalKeyManager) Sign(keyID string, payload []byte) ([]byte, error)
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func GenerateEntropy ¶
func GenerateEntropy(n EntropySize) ([]byte, error)
GenerateEntropy generates a random byte array of size n bytes
func GenerateNonce ¶
func GenerateNonce(n EntropySize) (string, error)
GenerateNonce generates a hex-encoded nonce by calling GenerateEntropy with a size of 16 bytes (128 bits)
Types ¶
type EntropySize ¶
type EntropySize int
EntropySize represents the size of the entropy in bits, i.e. Entropy128 is equal to 128 bits (or 16 bytes) of entrop
const ( Entropy112 EntropySize = 112 / 8 // 14 bytes Entropy128 EntropySize = 128 / 8 // 16 bytes Entropy192 EntropySize = 192 / 8 // 24 bytes Entropy256 EntropySize = 256 / 8 // 32 bytes )
Directly set the sizes according to NIST recommendations for entropy defined here: https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-90Ar1.pdf
type KeyExporter ¶
KeyExporter is an abstraction that can be leveraged to implement types which intend to export keys
type KeyImporter ¶
KeyImporter is an abstraction that can be leveraged to implement types which intend to import keys
type KeyManager ¶
type KeyManager interface { // GeneratePrivateKey generates a new private key, stores it in the key store and returns the key id GeneratePrivateKey(algorithmID string) (string, error) // GetPublicKey returns the public key for the given key id GetPublicKey(keyID string) (jwk.JWK, error) // Sign signs the given payload with the private key for the given key id Sign(keyID string, payload []byte) ([]byte, error) }
KeyManager is an abstraction that can be leveraged to manage/use keys (create, sign etc) as desired per the given use case examples of concrete implementations include: AWS KMS, Azure Key Vault, Google Cloud KMS, Hashicorp Vault etc
type LocalKeyManager ¶
type LocalKeyManager struct {
// contains filtered or unexported fields
}
LocalKeyManager is an implementation of KeyManager that stores keys in memory
func NewLocalKeyManager ¶
func NewLocalKeyManager() *LocalKeyManager
NewLocalKeyManager returns a new instance of InMemoryKeyManager
func (*LocalKeyManager) ExportKey ¶
func (k *LocalKeyManager) ExportKey(keyID string) (jwk.JWK, error)
ExportKey exports the key specific by the key ID from the LocalKeyManager
func (*LocalKeyManager) GeneratePrivateKey ¶
func (k *LocalKeyManager) GeneratePrivateKey(algorithmID string) (string, error)
GeneratePrivateKey generates a new private key using the algorithm provided, stores it in the key store and returns the key id
func (*LocalKeyManager) GetPublicKey ¶
func (k *LocalKeyManager) GetPublicKey(keyID string) (jwk.JWK, error)
GetPublicKey returns the public key for the given key id
func (*LocalKeyManager) ImportKey ¶
func (k *LocalKeyManager) ImportKey(key jwk.JWK) (string, error)
ImportKey imports the key into the LocalKeyManager and returns the key alias