diff --git a/src/croc/croc.go b/src/croc/croc.go index a4e23a1..ac11b6e 100644 --- a/src/croc/croc.go +++ b/src/croc/croc.go @@ -1802,10 +1802,10 @@ func (c *Client) receiveData(i int) { continue } - data, err = crypt.Decrypt(data, c.Key) - if err != nil { - panic(err) - } + // data, err = crypt.Decrypt(data, c.Key) + // if err != nil { + // panic(err) + // } if !c.Options.NoCompress { data = compress.Decompress(data) } @@ -1904,10 +1904,7 @@ func (c *Client) sendData(i int) { var err error var dataToSend []byte if c.Options.NoCompress { - dataToSend, err = crypt.Encrypt( - append(posByte, data[:n]...), - c.Key, - ) + dataToSend = append(posByte, data[:n]...) } else { dataToSend, err = crypt.Encrypt( compress.Compress( diff --git a/src/crypt/crypt.go b/src/crypt/crypt.go index a69724f..22b9b88 100644 --- a/src/crypt/crypt.go +++ b/src/crypt/crypt.go @@ -1,6 +1,7 @@ package crypt import ( + "crypto/aes" "crypto/cipher" "crypto/rand" "crypto/sha256" @@ -34,46 +35,42 @@ func New(passphrase []byte, usersalt []byte) (key []byte, salt []byte, err error // Encrypt will encrypt using the pre-generated key func Encrypt(plaintext []byte, key []byte) (encrypted []byte, err error) { - encrypted = plaintext + // generate a random iv each time + // http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf + // Section 8.2 + ivBytes := make([]byte, 12) + if _, err = rand.Read(ivBytes); err != nil { + log.Fatalf("can't initialize crypto: %v", err) + } + b, err := aes.NewCipher(key) + if err != nil { + return + } + aesgcm, err := cipher.NewGCM(b) + if err != nil { + return + } + encrypted = aesgcm.Seal(nil, ivBytes, plaintext, nil) + encrypted = append(ivBytes, encrypted...) return - // // generate a random iv each time - // // http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf - // // Section 8.2 - // ivBytes := make([]byte, 12) - // if _, err = rand.Read(ivBytes); err != nil { - // log.Fatalf("can't initialize crypto: %v", err) - // } - // b, err := aes.NewCipher(key) - // if err != nil { - // return - // } - // aesgcm, err := cipher.NewGCM(b) - // if err != nil { - // return - // } - // encrypted = aesgcm.Seal(nil, ivBytes, plaintext, nil) - // encrypted = append(ivBytes, encrypted...) - // return } // Decrypt using the pre-generated key func Decrypt(encrypted []byte, key []byte) (plaintext []byte, err error) { - plaintext = encrypted + if len(encrypted) < 13 { + err = fmt.Errorf("incorrect passphrase") + return + } + b, err := aes.NewCipher(key) + if err != nil { + return + } + aesgcm, err := cipher.NewGCM(b) + if err != nil { + return + } + plaintext, err = aesgcm.Open(nil, encrypted[:12], encrypted[12:], nil) return - // if len(encrypted) < 13 { - // err = fmt.Errorf("incorrect passphrase") - // return - // } - // b, err := aes.NewCipher(key) - // if err != nil { - // return - // } - // aesgcm, err := cipher.NewGCM(b) - // if err != nil { - // return - // } - // plaintext, err = aesgcm.Open(nil, encrypted[:12], encrypted[12:], nil) - // return } // NewArgon2 generates a new key based on a passphrase and salt