diff options
Diffstat (limited to 'pkg/server/module/aes.go')
| -rw-r--r-- | pkg/server/module/aes.go | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/pkg/server/module/aes.go b/pkg/server/module/aes.go deleted file mode 100644 index 13153bc..0000000 --- a/pkg/server/module/aes.go +++ /dev/null @@ -1,85 +0,0 @@ -package module - -import ( - "crypto/aes" - "crypto/cipher" - "crypto/md5" - "crypto/rand" - "io" - "tunnel/pkg/server/env" - "tunnel/pkg/server/opts" - "tunnel/pkg/server/queue" -) - -type aesModule struct{} - -type aesPipe struct { - key []byte -} - -func (a *aesPipe) Send(rq, wq queue.Q) error { - block, err := aes.NewCipher(a.key) - if err != nil { - return err - } - - iv := make([]byte, aes.BlockSize) - - if _, err := rand.Read(iv); err != nil { - return err - } - - writer := &cipher.StreamWriter{ - S: cipher.NewOFB(block, iv), - W: wq.Writer(), - } - - wq <- iv - - return queue.IoCopy(rq.Reader(), writer) -} - -func (a *aesPipe) Recv(rq, wq queue.Q) error { - block, err := aes.NewCipher(a.key) - if err != nil { - return err - } - - r := rq.Reader() - - iv := make([]byte, aes.BlockSize) - - if _, err := io.ReadFull(r, iv); err != nil { - if err == io.EOF { - return nil - } - return err - } - - reader := &cipher.StreamReader{ - S: cipher.NewOFB(block, iv), - R: r, - } - - return queue.IoCopy(reader, wq.Writer()) -} - -func newAes(env env.Env) *aesPipe { - s := getAuthSecret(env) - h := md5.Sum([]byte(s)) - - a := &aesPipe{key: make([]byte, 16)} - copy(a.key, h[:]) - - return a -} - -func (m aesModule) Open(env env.Env) (interface{}, error) { - return newAes(env), nil -} - -func init() { - register("aes", func(opts.Opts, env.Env) (module, error) { - return aesModule{}, nil - }) -} |
