go-micro.dev/v5@v5.12.0/config/secrets/secrets.go (about) 1 // Package secrets is an interface for encrypting and decrypting secrets 2 package secrets 3 4 import "context" 5 6 // Secrets encrypts or decrypts arbitrary data. The data should be as small as possible. 7 type Secrets interface { 8 // Initialize options 9 Init(...Option) error 10 // Return the options 11 Options() Options 12 // Decrypt a value 13 Decrypt([]byte, ...DecryptOption) ([]byte, error) 14 // Encrypt a value 15 Encrypt([]byte, ...EncryptOption) ([]byte, error) 16 // Secrets implementation 17 String() string 18 } 19 20 type Options struct { 21 // Context for other opts 22 Context context.Context 23 // Key is a symmetric key for encoding 24 Key []byte 25 // Private key for decoding 26 PrivateKey []byte 27 // Public key for encoding 28 PublicKey []byte 29 } 30 31 // Option sets options. 32 type Option func(*Options) 33 34 // Key sets the symmetric secret key. 35 func Key(k []byte) Option { 36 return func(o *Options) { 37 o.Key = make([]byte, len(k)) 38 copy(o.Key, k) 39 } 40 } 41 42 // PublicKey sets the asymmetric Public Key of this codec. 43 func PublicKey(key []byte) Option { 44 return func(o *Options) { 45 o.PublicKey = make([]byte, len(key)) 46 copy(o.PublicKey, key) 47 } 48 } 49 50 // PrivateKey sets the asymmetric Private Key of this codec. 51 func PrivateKey(key []byte) Option { 52 return func(o *Options) { 53 o.PrivateKey = make([]byte, len(key)) 54 copy(o.PrivateKey, key) 55 } 56 } 57 58 // DecryptOptions can be passed to Secrets.Decrypt. 59 type DecryptOptions struct { 60 SenderPublicKey []byte 61 } 62 63 // DecryptOption sets DecryptOptions. 64 type DecryptOption func(*DecryptOptions) 65 66 // SenderPublicKey is the Public Key of the Secrets that encrypted this message. 67 func SenderPublicKey(key []byte) DecryptOption { 68 return func(d *DecryptOptions) { 69 d.SenderPublicKey = make([]byte, len(key)) 70 copy(d.SenderPublicKey, key) 71 } 72 } 73 74 // EncryptOptions can be passed to Secrets.Encrypt. 75 type EncryptOptions struct { 76 RecipientPublicKey []byte 77 } 78 79 // EncryptOption Sets EncryptOptions. 80 type EncryptOption func(*EncryptOptions) 81 82 // RecipientPublicKey is the Public Key of the Secrets that will decrypt this message. 83 func RecipientPublicKey(key []byte) EncryptOption { 84 return func(e *EncryptOptions) { 85 e.RecipientPublicKey = make([]byte, len(key)) 86 copy(e.RecipientPublicKey, key) 87 } 88 }