benzcloud-server/internal/core/crypto/crypto_test.go

60 lines
1.3 KiB
Go

package crypto
import (
"bytes"
"testing"
)
func TestCryptoRoundtrip(t *testing.T) {
passphrase := "SecureAdminPassphrase2026!#"
salt, err := GenerateSalt(16)
if err != nil {
t.Fatalf("GenerateSalt failed: %v", err)
}
key := DeriveKey(passphrase, salt)
if len(key) != 32 {
t.Fatalf("Expected key length 32, got %d", len(key))
}
original := []byte("BenzCloud Confidential Enterprise Secret Payload")
encrypted, err := Encrypt(key, original)
if err != nil {
t.Fatalf("Encrypt failed: %v", err)
}
decrypted, err := Decrypt(key, encrypted)
if err != nil {
t.Fatalf("Decrypt failed: %v", err)
}
if !bytes.Equal(original, decrypted) {
t.Fatalf("Decrypted content mismatch: got %s, want %s", string(decrypted), string(original))
}
// Tampering test
encrypted[len(encrypted)-1] ^= 0x01
_, err = Decrypt(key, encrypted)
if err == nil {
t.Fatal("Expected error when decrypting tampered data, got nil")
}
}
func TestGenerateToken(t *testing.T) {
token1, err := GenerateToken()
if err != nil {
t.Fatalf("GenerateToken failed: %v", err)
}
if len(token1) != 64 { // 32 bytes in hex = 64 characters
t.Fatalf("Expected token length 64, got %d", len(token1))
}
token2, err := GenerateToken()
if err != nil {
t.Fatalf("GenerateToken failed: %v", err)
}
if token1 == token2 {
t.Fatal("Tokens should be unique")
}
}