config.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. package shadowsocks
  2. import (
  3. "io"
  4. "github.com/v2ray/v2ray-core/common/crypto"
  5. )
  6. type Cipher interface {
  7. KeySize() int
  8. IVSize() int
  9. NewEncodingStream(key []byte, iv []byte, writer io.Writer) (io.Writer, error)
  10. NewDecodingStream(key []byte, iv []byte, reader io.Reader) (io.Reader, error)
  11. }
  12. type AesCfb struct {
  13. KeyBytes int
  14. }
  15. func (this *AesCfb) KeySize() int {
  16. return this.KeyBytes
  17. }
  18. func (this *AesCfb) IVSize() int {
  19. return 16
  20. }
  21. func (this *AesCfb) NewEncodingStream(key []byte, iv []byte, writer io.Writer) (io.Writer, error) {
  22. stream, err := crypto.NewAesEncryptionStream(key, iv)
  23. if err != nil {
  24. return nil, err
  25. }
  26. aesWriter := crypto.NewCryptionWriter(stream, writer)
  27. return aesWriter, nil
  28. }
  29. func (this *AesCfb) NewDecodingStream(key []byte, iv []byte, reader io.Reader) (io.Reader, error) {
  30. stream, err := crypto.NewAesDecryptionStream(key, iv)
  31. if err != nil {
  32. return nil, err
  33. }
  34. aesReader := crypto.NewCryptionReader(stream, reader)
  35. return aesReader, nil
  36. }
  37. type Config struct {
  38. Cipher Cipher
  39. Password string
  40. UDP bool
  41. }