mirror of
https://github.com/mickael-kerjean/filestash
synced 2025-12-06 08:22:24 +01:00
62 lines
1.9 KiB
Go
62 lines
1.9 KiB
Go
// Package xmlenc is a partial implementation of the xmlenc standard
|
|
// as described in https://www.w3.org/TR/2002/REC-xmlenc-core-20021210/Overview.html.
|
|
// The purpose of this implementation is to support encrypted SAML assertions.
|
|
package xmlenc
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"hash"
|
|
|
|
"github.com/beevik/etree"
|
|
)
|
|
|
|
// RandReader is a thunk that allows test to replace the source of randomness used by
|
|
// this package. By default it is Reader from crypto/rand.
|
|
var RandReader = rand.Reader
|
|
|
|
// Encrypter is an interface that encrypts things. Given a plaintext it returns an
|
|
// XML EncryptedData or EncryptedKey element. The required type of `key` varies
|
|
// depending on the implementation.
|
|
type Encrypter interface {
|
|
Encrypt(key interface{}, plaintext []byte, nonce []byte) (*etree.Element, error)
|
|
}
|
|
|
|
// Decrypter is an interface that decrypts things. The Decrypt() method returns the
|
|
// plaintext version of the EncryptedData or EncryptedKey element passed.
|
|
//
|
|
// You probably don't have to use this interface directly, instead you may call
|
|
// Decrypt() and it will examine the element to determine which Decrypter to use.
|
|
type Decrypter interface {
|
|
Algorithm() string
|
|
Decrypt(key interface{}, ciphertextEl *etree.Element) ([]byte, error)
|
|
}
|
|
|
|
// DigestMethod represents a digest method such as SHA1, etc.
|
|
type DigestMethod interface {
|
|
Algorithm() string
|
|
Hash() hash.Hash
|
|
}
|
|
|
|
var (
|
|
decrypters = map[string]Decrypter{}
|
|
digestMethods = map[string]DigestMethod{}
|
|
)
|
|
|
|
// RegisterDecrypter registers the specified decrypter to that it can be
|
|
// used with Decrypt().
|
|
func RegisterDecrypter(d Decrypter) {
|
|
decrypters[d.Algorithm()] = d
|
|
}
|
|
|
|
// RegisterDigestMethod registers the specified digest method to that it can be
|
|
// used with Decrypt().
|
|
func RegisterDigestMethod(dm DigestMethod) {
|
|
digestMethods[dm.Algorithm()] = dm
|
|
}
|
|
|
|
// BlockCipher implements a cipher with a fixed size key like AES or 3DES.
|
|
type BlockCipher interface {
|
|
Encrypter
|
|
Decrypter
|
|
KeySize() int
|
|
}
|