12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- // Package secrets is an interface for encrypting and decrypting secrets
- package secrets
- import "context"
- // Secrets encrypts or decrypts arbitrary data. The data should be as small as possible
- type Secrets interface {
- // Initialise options
- Init(...Option) error
- // Return the options
- Options() Options
- // Decrypt a value
- Decrypt([]byte, ...DecryptOption) ([]byte, error)
- // Encrypt a value
- Encrypt([]byte, ...EncryptOption) ([]byte, error)
- // Secrets implementation
- String() string
- }
- type Options struct {
- // Key is a symmetric key for encoding
- Key []byte
- // Private key for decoding
- PrivateKey []byte
- // Public key for encoding
- PublicKey []byte
- // Context for other opts
- Context context.Context
- }
- // Option sets options
- type Option func(*Options)
- // Key sets the symmetric secret key
- func Key(k []byte) Option {
- return func(o *Options) {
- o.Key = make([]byte, len(k))
- copy(o.Key, k)
- }
- }
- // PublicKey sets the asymmetric Public Key of this codec
- func PublicKey(key []byte) Option {
- return func(o *Options) {
- o.PublicKey = make([]byte, len(key))
- copy(o.PublicKey, key)
- }
- }
- // PrivateKey sets the asymmetric Private Key of this codec
- func PrivateKey(key []byte) Option {
- return func(o *Options) {
- o.PrivateKey = make([]byte, len(key))
- copy(o.PrivateKey, key)
- }
- }
- // DecryptOptions can be passed to Secrets.Decrypt
- type DecryptOptions struct {
- SenderPublicKey []byte
- }
- // DecryptOption sets DecryptOptions
- type DecryptOption func(*DecryptOptions)
- // SenderPublicKey is the Public Key of the Secrets that encrypted this message
- func SenderPublicKey(key []byte) DecryptOption {
- return func(d *DecryptOptions) {
- d.SenderPublicKey = make([]byte, len(key))
- copy(d.SenderPublicKey, key)
- }
- }
- // EncryptOptions can be passed to Secrets.Encrypt
- type EncryptOptions struct {
- RecipientPublicKey []byte
- }
- // EncryptOption Sets EncryptOptions
- type EncryptOption func(*EncryptOptions)
- // RecipientPublicKey is the Public Key of the Secrets that will decrypt this message
- func RecipientPublicKey(key []byte) EncryptOption {
- return func(e *EncryptOptions) {
- e.RecipientPublicKey = make([]byte, len(key))
- copy(e.RecipientPublicKey, key)
- }
- }
|