Fixed bytes issue in enc...

main
Robert 5 months ago
parent b586d1e8ee
commit c9c06cde15
  1. 14
      client.go
  2. 36
      server.go

@ -15,7 +15,6 @@ import (
"flag" "flag"
"os" "os"
"log" "log"
"bytes"
"io/ioutil" "io/ioutil"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
) )
@ -72,20 +71,11 @@ func chEnc(p string)(string) {
log.Fatalf("Cha Nonce Error") log.Fatalf("Cha Nonce Error")
return "" 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 // Encrypt the encoded data
encrypted := aead.Seal(nil, nonce, buf.Bytes(), nil) encrypted := aead.Seal(nil, nonce, []byte(p), nil)
// Send nonce + encrypted data // Send nonce + encrypted data
fullMessage := append(nonce, encrypted...) fullMessage := append(nonce, encrypted...)
encoded := base64.StdEncoding.EncodeToString(fullMessage) encoded := base64.StdEncoding.EncodeToString(fullMessage)
return encoded return encoded
} }

@ -16,7 +16,6 @@ import (
"net" "net"
"sync" "sync"
"time" "time"
"bytes"
"errors" "errors"
"flag" "flag"
"os" "os"
@ -215,20 +214,22 @@ func checkPassword(hash, pw string) error {
return bcrypt.CompareHashAndPassword([]byte(hash), []byte(pw)) return bcrypt.CompareHashAndPassword([]byte(hash), []byte(pw))
} }
func encrypt(text string) ([]byte, error) { func encrypt(text string) (string, error) {
block, err := aes.NewCipher(key) block, err := aes.NewCipher(key)
if err != nil { if err != nil {
return nil, err return "", err
} }
gcm, err := cipher.NewGCM(block) gcm, err := cipher.NewGCM(block)
if err != nil { if err != nil {
return nil, err return "", err
} }
nonce := make([]byte, gcm.NonceSize()) 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) block, err := aes.NewCipher(key)
if err != nil { if err != nil {
return "", err return "", err
@ -237,8 +238,15 @@ func decrypt(data []byte) (string, error) {
if err != nil { if err != nil {
return "", err return "", err
} }
// Decoding from base64
decoded, err := base64.StdEncoding.DecodeString(data)
if err != nil {
return "", err
}
nonceSize := gcm.NonceSize() nonceSize := gcm.NonceSize()
nonce, ciphertext := data[:nonceSize], data[nonceSize:] nonce, ciphertext := decoded[:nonceSize], decoded[nonceSize:]
plaintext, err := gcm.Open(nil, nonce, ciphertext, nil) plaintext, err := gcm.Open(nil, nonce, ciphertext, nil)
if err != nil { if err != nil {
return "", err return "", err
@ -264,15 +272,9 @@ func chEnc(pwd string)(string, error) {
if _, err := rand.Read(nonce); err != nil { if _, err := rand.Read(nonce); err != nil {
return "", err 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 // Encrypt the encoded data
encrypted := aead.Seal(nil, nonce, buf.Bytes(), nil) encrypted := aead.Seal(nil, nonce, []byte(pwd), nil)
// Send nonce + encrypted data // Send nonce + encrypted data
fullMessage := append(nonce, encrypted...) fullMessage := append(nonce, encrypted...)
@ -287,7 +289,7 @@ func chDec(eText string)(string) {
} }
// Decoding from base64 // Decoding from base64
decoded, err := base64.StdEncoding.DecodeString(eText) encryptedMsg, err := base64.StdEncoding.DecodeString(eText)
if err != nil { if err != nil {
log.Fatalf("Error: Base64 decode") log.Fatalf("Error: Base64 decode")
} }
@ -298,8 +300,6 @@ func chDec(eText string)(string) {
log.Fatalf("Error: Cha20 key") log.Fatalf("Error: Cha20 key")
} }
encryptedMsg := decoded
// Decrypt: Split nonce and ciphertext // Decrypt: Split nonce and ciphertext
decryptedNonce := encryptedMsg[:aead.NonceSize()] decryptedNonce := encryptedMsg[:aead.NonceSize()]
decryptedCiphertext := 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: ""}) enc.Encode(Response{Message: "Password stored successfully", Enc: ""})
case "get": case "get":
var encrypted []byte var encrypted string
err := db.QueryRow("SELECT password FROM accounts WHERE user = ? AND site = ?", username, site).Scan(&encrypted) err := db.QueryRow("SELECT password FROM accounts WHERE user = ? AND site = ?", username, site).Scan(&encrypted)
if err == sql.ErrNoRows { if err == sql.ErrNoRows {
enc.Encode(Response{Message: "Site not found", Enc: ""}) enc.Encode(Response{Message: "Site not found", Enc: ""})

Loading…
Cancel
Save