73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
package keygen
|
|
|
|
import (
|
|
"crypto/ecdsa"
|
|
|
|
"github.com/lestrrat-go/jwx/jwa"
|
|
"github.com/lestrrat-go/jwx/x25519"
|
|
)
|
|
|
|
type Generator interface {
|
|
Size() int
|
|
Generate() (ByteSource, error)
|
|
}
|
|
|
|
// StaticKeyGenerate uses a static byte buffer to provide keys.
|
|
type Static []byte
|
|
|
|
// RandomKeyGenerate generates random keys
|
|
type Random struct {
|
|
keysize int
|
|
}
|
|
|
|
// EcdhesKeyGenerate generates keys using ECDH-ES algorithm / EC-DSA curve
|
|
type Ecdhes struct {
|
|
pubkey *ecdsa.PublicKey
|
|
keysize int
|
|
algorithm jwa.KeyEncryptionAlgorithm
|
|
enc jwa.ContentEncryptionAlgorithm
|
|
}
|
|
|
|
// X25519KeyGenerate generates keys using ECDH-ES algorithm / X25519 curve
|
|
type X25519 struct {
|
|
algorithm jwa.KeyEncryptionAlgorithm
|
|
enc jwa.ContentEncryptionAlgorithm
|
|
keysize int
|
|
pubkey x25519.PublicKey
|
|
}
|
|
|
|
// ByteKey is a generated key that only has the key's byte buffer
|
|
// as its instance data. If a key needs to do more, such as providing
|
|
// values to be set in a JWE header, that key type wraps a ByteKey
|
|
type ByteKey []byte
|
|
|
|
// ByteWithECPublicKey holds the EC private key that generated
|
|
// the key along with the key itself. This is required to set the
|
|
// proper values in the JWE headers
|
|
type ByteWithECPublicKey struct {
|
|
ByteKey
|
|
PublicKey interface{}
|
|
}
|
|
|
|
type ByteWithIVAndTag struct {
|
|
ByteKey
|
|
IV []byte
|
|
Tag []byte
|
|
}
|
|
|
|
type ByteWithSaltAndCount struct {
|
|
ByteKey
|
|
Salt []byte
|
|
Count int
|
|
}
|
|
|
|
// ByteSource is an interface for things that return a byte sequence.
|
|
// This is used for KeyGenerator so that the result of computations can
|
|
// carry more than just the generate byte sequence.
|
|
type ByteSource interface {
|
|
Bytes() []byte
|
|
}
|
|
|
|
type Setter interface {
|
|
Set(string, interface{}) error
|
|
}
|