Initial QSfera import
This commit is contained in:
+62
@@ -0,0 +1,62 @@
|
||||
// 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
|
||||
}
|
||||
Reference in New Issue
Block a user