104 lines
2.5 KiB
Go
104 lines
2.5 KiB
Go
package keyenc
|
|
|
|
import (
|
|
"crypto/rsa"
|
|
"hash"
|
|
|
|
"github.com/lestrrat-go/jwx/jwa"
|
|
"github.com/lestrrat-go/jwx/jwe/internal/keygen"
|
|
)
|
|
|
|
// Encrypter is an interface for things that can encrypt keys
|
|
type Encrypter interface {
|
|
Algorithm() jwa.KeyEncryptionAlgorithm
|
|
Encrypt([]byte) (keygen.ByteSource, error)
|
|
// KeyID returns the key id for this Encrypter. This exists so that
|
|
// you can pass in a Encrypter to MultiEncrypt, you can rest assured
|
|
// that the generated key will have the proper key ID.
|
|
KeyID() string
|
|
}
|
|
|
|
// Decrypter is an interface for things that can decrypt keys
|
|
type Decrypter interface {
|
|
Algorithm() jwa.KeyEncryptionAlgorithm
|
|
Decrypt([]byte) ([]byte, error)
|
|
}
|
|
|
|
type Noop struct {
|
|
alg jwa.KeyEncryptionAlgorithm
|
|
keyID string
|
|
sharedkey []byte
|
|
}
|
|
|
|
// AES encrypts content encryption keys using AES key wrap.
|
|
// Contrary to what the name implies, it also decrypt encrypted keys
|
|
type AES struct {
|
|
alg jwa.KeyEncryptionAlgorithm
|
|
keyID string
|
|
sharedkey []byte
|
|
}
|
|
|
|
// AESGCM encrypts content encryption keys using AES-GCM key wrap.
|
|
type AESGCMEncrypt struct {
|
|
algorithm jwa.KeyEncryptionAlgorithm
|
|
keyID string
|
|
sharedkey []byte
|
|
}
|
|
|
|
// ECDHESEncrypt encrypts content encryption keys using ECDH-ES.
|
|
type ECDHESEncrypt struct {
|
|
algorithm jwa.KeyEncryptionAlgorithm
|
|
keyID string
|
|
generator keygen.Generator
|
|
}
|
|
|
|
// ECDHESDecrypt decrypts keys using ECDH-ES.
|
|
type ECDHESDecrypt struct {
|
|
keyalg jwa.KeyEncryptionAlgorithm
|
|
contentalg jwa.ContentEncryptionAlgorithm
|
|
apu []byte
|
|
apv []byte
|
|
privkey interface{}
|
|
pubkey interface{}
|
|
}
|
|
|
|
// RSAOAEPEncrypt encrypts keys using RSA OAEP algorithm
|
|
type RSAOAEPEncrypt struct {
|
|
alg jwa.KeyEncryptionAlgorithm
|
|
pubkey *rsa.PublicKey
|
|
keyID string
|
|
}
|
|
|
|
// RSAOAEPDecrypt decrypts keys using RSA OAEP algorithm
|
|
type RSAOAEPDecrypt struct {
|
|
alg jwa.KeyEncryptionAlgorithm
|
|
privkey *rsa.PrivateKey
|
|
}
|
|
|
|
// RSAPKCS15Decrypt decrypts keys using RSA PKCS1v15 algorithm
|
|
type RSAPKCS15Decrypt struct {
|
|
alg jwa.KeyEncryptionAlgorithm
|
|
privkey *rsa.PrivateKey
|
|
generator keygen.Generator
|
|
}
|
|
|
|
// RSAPKCSEncrypt encrypts keys using RSA PKCS1v15 algorithm
|
|
type RSAPKCSEncrypt struct {
|
|
alg jwa.KeyEncryptionAlgorithm
|
|
pubkey *rsa.PublicKey
|
|
keyID string
|
|
}
|
|
|
|
// DirectDecrypt does no encryption (Note: Unimplemented)
|
|
type DirectDecrypt struct {
|
|
Key []byte
|
|
}
|
|
|
|
// PBES2Encrypt encrypts keys with PBES2 / PBKDF2 password
|
|
type PBES2Encrypt struct {
|
|
algorithm jwa.KeyEncryptionAlgorithm
|
|
hashFunc func() hash.Hash
|
|
keylen int
|
|
keyID string
|
|
password []byte
|
|
}
|