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"
"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
}

@ -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: ""})

Loading…
Cancel
Save