diff --git a/client.go b/client.go index b76b094..d92e839 100644 --- a/client.go +++ b/client.go @@ -15,7 +15,6 @@ import ( "flag" "os" "log" - "bytes" "io/ioutil" "gopkg.in/yaml.v2" ) @@ -72,20 +71,11 @@ func chEnc(p string)(string) { log.Fatalf("Cha Nonce Error") return "" } - // Encode with gob first - var buf bytes.Buffer - tempEnc := gob.NewEncoder(&buf) - if err := tempEnc.Encode(p); err != nil { - log.Fatalf("gob encode first error") - return "" - } - // Encrypt the encoded data - encrypted := aead.Seal(nil, nonce, buf.Bytes(), nil) + encrypted := aead.Seal(nil, nonce, []byte(p), nil) // Send nonce + encrypted data - fullMessage := append(nonce, encrypted...) - + fullMessage := append(nonce, encrypted...) encoded := base64.StdEncoding.EncodeToString(fullMessage) return encoded } diff --git a/server.go b/server.go index cfdf9b2..1f25ee0 100644 --- a/server.go +++ b/server.go @@ -16,7 +16,6 @@ import ( "net" "sync" "time" - "bytes" "errors" "flag" "os" @@ -215,20 +214,22 @@ func checkPassword(hash, pw string) error { return bcrypt.CompareHashAndPassword([]byte(hash), []byte(pw)) } -func encrypt(text string) ([]byte, error) { +func encrypt(text string) (string, error) { block, err := aes.NewCipher(key) if err != nil { - return nil, err + return "", err } gcm, err := cipher.NewGCM(block) if err != nil { - return nil, err + return "", err } nonce := make([]byte, gcm.NonceSize()) - return gcm.Seal(nonce, nonce, []byte(text), nil), nil + fullMessage := gcm.Seal(nonce, nonce, []byte(text), nil) + encoded := base64.StdEncoding.EncodeToString(fullMessage) + return encoded, nil } -func decrypt(data []byte) (string, error) { +func decrypt(data string) (string, error) { block, err := aes.NewCipher(key) if err != nil { return "", err @@ -237,8 +238,15 @@ func decrypt(data []byte) (string, error) { if err != nil { return "", err } + + // Decoding from base64 + decoded, err := base64.StdEncoding.DecodeString(data) + if err != nil { + return "", err + } + nonceSize := gcm.NonceSize() - nonce, ciphertext := data[:nonceSize], data[nonceSize:] + nonce, ciphertext := decoded[:nonceSize], decoded[nonceSize:] plaintext, err := gcm.Open(nil, nonce, ciphertext, nil) if err != nil { return "", err @@ -264,15 +272,9 @@ func chEnc(pwd string)(string, error) { if _, err := rand.Read(nonce); err != nil { return "", err } - // Encode with gob first - var buf bytes.Buffer - tempEnc := gob.NewEncoder(&buf) - if err := tempEnc.Encode(pwd); err != nil { - return "", err - } // Encrypt the encoded data - encrypted := aead.Seal(nil, nonce, buf.Bytes(), nil) + encrypted := aead.Seal(nil, nonce, []byte(pwd), nil) // Send nonce + encrypted data fullMessage := append(nonce, encrypted...) @@ -287,7 +289,7 @@ func chDec(eText string)(string) { } // Decoding from base64 - decoded, err := base64.StdEncoding.DecodeString(eText) + encryptedMsg, err := base64.StdEncoding.DecodeString(eText) if err != nil { log.Fatalf("Error: Base64 decode") } @@ -298,8 +300,6 @@ func chDec(eText string)(string) { log.Fatalf("Error: Cha20 key") } - encryptedMsg := decoded - // Decrypt: Split nonce and ciphertext decryptedNonce := encryptedMsg[:aead.NonceSize()] decryptedCiphertext := encryptedMsg[aead.NonceSize():] @@ -406,7 +406,7 @@ func handleConnection(conn net.Conn, db *sql.DB) { enc.Encode(Response{Message: "Password stored successfully", Enc: ""}) case "get": - var encrypted []byte + var encrypted string err := db.QueryRow("SELECT password FROM accounts WHERE user = ? AND site = ?", username, site).Scan(&encrypted) if err == sql.ErrNoRows { enc.Encode(Response{Message: "Site not found", Enc: ""})