aes.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package crypto
  2. import (
  3. "crypto/aes"
  4. "crypto/cipher"
  5. "io"
  6. )
  7. func NewAesDecryptionStream(key []byte, iv []byte) (cipher.Stream, error) {
  8. aesBlock, err := aes.NewCipher(key)
  9. if err != nil {
  10. return nil, err
  11. }
  12. return cipher.NewCFBDecrypter(aesBlock, iv), nil
  13. }
  14. func NewAesEncryptionStream(key []byte, iv []byte) (cipher.Stream, error) {
  15. aesBlock, err := aes.NewCipher(key)
  16. if err != nil {
  17. return nil, err
  18. }
  19. return cipher.NewCFBEncrypter(aesBlock, iv), nil
  20. }
  21. type cryptionReader struct {
  22. stream cipher.Stream
  23. reader io.Reader
  24. }
  25. func NewCryptionReader(stream cipher.Stream, reader io.Reader) io.Reader {
  26. return &cryptionReader{
  27. stream: stream,
  28. reader: reader,
  29. }
  30. }
  31. func (this *cryptionReader) Read(data []byte) (int, error) {
  32. nBytes, err := this.reader.Read(data)
  33. if nBytes > 0 {
  34. this.stream.XORKeyStream(data[:nBytes], data[:nBytes])
  35. }
  36. return nBytes, err
  37. }
  38. type cryptionWriter struct {
  39. stream cipher.Stream
  40. writer io.Writer
  41. }
  42. func NewCryptionWriter(stream cipher.Stream, writer io.Writer) io.Writer {
  43. return &cryptionWriter{
  44. stream: stream,
  45. writer: writer,
  46. }
  47. }
  48. func (this *cryptionWriter) Write(data []byte) (int, error) {
  49. this.stream.XORKeyStream(data, data)
  50. return this.writer.Write(data)
  51. }