51 lines
766 B
Go
51 lines
766 B
Go
package crypto
|
|
|
|
import "io"
|
|
|
|
// KEM defines the contract for a Key Encapsulation Mechanism.
|
|
type KEM interface {
|
|
SchemeID() uint16
|
|
GenerateKeyPair(
|
|
rand io.Reader,
|
|
) (
|
|
RecipientPub,
|
|
RecipientPriv,
|
|
error,
|
|
)
|
|
Encapsulate(
|
|
pub RecipientPub,
|
|
rand io.Reader,
|
|
) (
|
|
ciphertext []byte,
|
|
sharedSecret []byte,
|
|
err error,
|
|
)
|
|
Decapsulate(
|
|
priv RecipientPriv,
|
|
ciphertext []byte,
|
|
) (
|
|
sharedSecret []byte,
|
|
err error,
|
|
)
|
|
LoadPriv(
|
|
raw []byte,
|
|
) (
|
|
RecipientPriv,
|
|
error,
|
|
)
|
|
}
|
|
|
|
// RecipientPub represents a public recipient key.
|
|
type RecipientPub interface {
|
|
SchemeID() uint16
|
|
KeyID() []byte
|
|
Raw() []byte
|
|
}
|
|
|
|
// RecipientPriv represents a private recipient key.
|
|
type RecipientPriv interface {
|
|
SchemeID() uint16
|
|
KeyID() []byte
|
|
Raw() []byte
|
|
}
|