new-api/payment/crypto_test.go
zizi 597fe545b7 feat: add payment encryption helpers
Add AES-GCM encryption utilities for payment credentials with key length and ciphertext validation.
2026-05-20 14:53:18 +08:00

65 lines
1.5 KiB
Go

package payment
import (
"testing"
"github.com/stretchr/testify/require"
)
const testEncryptionKey = "12345678901234567890123456789012"
func setTestEncryptionKey(t *testing.T, key string) {
t.Helper()
previousKey := encryptionKey
InitEncryptionKey(key)
t.Cleanup(func() {
encryptionKey = previousKey
})
}
func TestEncryptDecryptRoundTrip(t *testing.T) {
setTestEncryptionKey(t, testEncryptionKey)
encrypted, err := Encrypt("hello payment")
require.NoError(t, err)
require.NotEmpty(t, encrypted)
decrypted, err := Decrypt(encrypted)
require.NoError(t, err)
require.Equal(t, "hello payment", decrypted)
}
func TestEncryptRejectsInvalidKeyLength(t *testing.T) {
setTestEncryptionKey(t, "short")
_, err := Encrypt("hello payment")
require.Error(t, err)
require.Contains(t, err.Error(), "invalid encryption key length")
}
func TestDecryptRejectsInvalidBase64(t *testing.T) {
setTestEncryptionKey(t, testEncryptionKey)
_, err := Decrypt("not-base64")
require.Error(t, err)
}
func TestDecryptRejectsTooShortCiphertext(t *testing.T) {
setTestEncryptionKey(t, testEncryptionKey)
_, err := Decrypt("c2hvcnQ=")
require.Error(t, err)
require.Contains(t, err.Error(), "ciphertext too short")
}
func TestEncryptUsesRandomNonce(t *testing.T) {
setTestEncryptionKey(t, testEncryptionKey)
first, err := Encrypt("same plaintext")
require.NoError(t, err)
second, err := Encrypt("same plaintext")
require.NoError(t, err)
require.NotEqual(t, first, second)
}