| 55 | } |
| 56 | |
| 57 | func NewCrypt(cfg baker.FilterParams) (baker.Filter, error) { |
| 58 | dcfg := cfg.DecodedConfig.(*CryptConfig) |
| 59 | |
| 60 | src, ok := cfg.FieldByName(dcfg.SrcField) |
| 61 | if !ok { |
| 62 | return nil, fmt.Errorf("unknown field %q", dcfg.SrcField) |
| 63 | } |
| 64 | |
| 65 | dst, ok := cfg.FieldByName(dcfg.DstField) |
| 66 | if !ok { |
| 67 | return nil, fmt.Errorf("unknown field %q", dcfg.DstField) |
| 68 | } |
| 69 | |
| 70 | f := &Crypt{src: src, dst: dst} |
| 71 | |
| 72 | switch dcfg.Algorithm { |
| 73 | case "fernet": |
| 74 | f.algorithm = &cryptFernet{} |
| 75 | default: |
| 76 | return nil, fmt.Errorf("unsupported algorithm %s", dcfg.Algorithm) |
| 77 | } |
| 78 | if err := f.algorithm.parseConf(dcfg.AlgorithmConfig); err != nil { |
| 79 | return nil, fmt.Errorf("invalid %s algorithm configuration: %s", dcfg.Algorithm, err) |
| 80 | } |
| 81 | |
| 82 | if dcfg.Decrypt { |
| 83 | f.transformFn = f.algorithm.decrypt |
| 84 | } else { |
| 85 | f.transformFn = f.algorithm.encrypt |
| 86 | } |
| 87 | return f, nil |
| 88 | } |
| 89 | |
| 90 | func (f *Crypt) Stats() baker.FilterStats { |
| 91 | return baker.FilterStats{ |