GetReader wraps a crypto StreamReader using the input key on the input Reader.
(key x.Sensitive, r io.Reader)
| 41 | |
| 42 | // GetReader wraps a crypto StreamReader using the input key on the input Reader. |
| 43 | func GetReader(key x.Sensitive, r io.Reader) (io.Reader, error) { |
| 44 | // No encryption, return input reader as is. |
| 45 | if key == nil { |
| 46 | return r, nil |
| 47 | } |
| 48 | |
| 49 | // Encryption, wrap crypto StreamReader on input Reader. |
| 50 | c, err := aes.NewCipher(key) |
| 51 | if err != nil { |
| 52 | return nil, err |
| 53 | } |
| 54 | var iv []byte = make([]byte, 16) |
| 55 | cnt, err := r.Read(iv) |
| 56 | if cnt != 16 || err != nil { |
| 57 | err = errors.Errorf("unable to get IV from encrypted backup. Read %v bytes, err %v ", |
| 58 | cnt, err) |
| 59 | return nil, err |
| 60 | } |
| 61 | return cipher.StreamReader{S: cipher.NewCTR(c, iv), R: r}, nil |
| 62 | } |
no test coverage detected