Let decryption happen in a seperate goroutine to hopefully speed it up
This commit is contained in:
parent
7235048705
commit
736310d469
36
rsaserver.go
36
rsaserver.go
@ -104,7 +104,7 @@ func handleConnection(conn net.Conn, privateKey *rsa.PrivateKey) {
|
|||||||
|
|
||||||
// Receive and handle multiple files
|
// Receive and handle multiple files
|
||||||
for {
|
for {
|
||||||
var plaintext []byte
|
var chunks []string
|
||||||
for {
|
for {
|
||||||
chunk, err := bufio.NewReader(conn).ReadString('\n')
|
chunk, err := bufio.NewReader(conn).ReadString('\n')
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -115,23 +115,14 @@ func handleConnection(conn net.Conn, privateKey *rsa.PrivateKey) {
|
|||||||
fmt.Printf("Received file\n")
|
fmt.Printf("Received file\n")
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
ciphertext, err := base64.StdEncoding.DecodeString(strings.TrimSpace(chunk))
|
|
||||||
if err != nil {
|
|
||||||
log.Printf("Error decoding chunk: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
plaintextChunk, err := decrypt(ciphertext, key, iv)
|
chunks = append(chunks, chunk)
|
||||||
if err != nil {
|
|
||||||
log.Printf("Error decrypting chunk: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
plaintext = append(plaintext, plaintextChunk...)
|
|
||||||
|
|
||||||
conn.Write([]byte("Received and decrypted chunk\n"))
|
conn.Write([]byte("Received and decrypted chunk\n"))
|
||||||
}
|
}
|
||||||
|
|
||||||
go handleDecrypted(plaintext, uid)
|
go decryptAndHandle(chunks, key, iv, uid)
|
||||||
|
|
||||||
conn.Write([]byte("Received and decrypted\n"))
|
conn.Write([]byte("Received and decrypted\n"))
|
||||||
|
|
||||||
// Check if there are more files to receive
|
// Check if there are more files to receive
|
||||||
@ -147,6 +138,25 @@ func handleConnection(conn net.Conn, privateKey *rsa.PrivateKey) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func decryptAndHandle(chunks []string, key []byte, iv []byte, uid []byte){
|
||||||
|
var plaintext []byte
|
||||||
|
for _, chunk := range chunks{
|
||||||
|
ciphertext, err := base64.StdEncoding.DecodeString(strings.TrimSpace(chunk))
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error decoding chunk: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
plaintextChunk, err := decrypt(ciphertext, key, iv)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
log.Printf("Error decrypting chunk: %v", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
plaintext = append(plaintext, plaintextChunk...)
|
||||||
|
}
|
||||||
|
handleDecrypted(plaintext, uid)
|
||||||
|
}
|
||||||
|
|
||||||
func decrypt(cipherText []byte, key []byte, iv []byte) ([]byte, error) {
|
func decrypt(cipherText []byte, key []byte, iv []byte) ([]byte, error) {
|
||||||
block, err := aes.NewCipher(key)
|
block, err := aes.NewCipher(key)
|
||||||
|
Loading…
Reference in New Issue
Block a user