37 lines
1.2 KiB
Go
37 lines
1.2 KiB
Go
package hardwarelicense
|
|
|
|
import (
|
|
"testing"
|
|
"time"
|
|
|
|
"data-terminal-cloud/internal/audit"
|
|
|
|
"github.com/jackc/pgx/v5/pgxpool"
|
|
)
|
|
|
|
func TestNewServiceRequiresDomainKey(t *testing.T) {
|
|
for _, key := range []string{"", "not-hex", "00"} {
|
|
if _, err := NewService(&pgxpool.Pool{}, audit.NewRepository(), key); err == nil {
|
|
t.Fatalf("key %q should be rejected", key)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestLicenseCipherUsesBoundAAD(t *testing.T) {
|
|
service, err := NewService(&pgxpool.Pool{}, audit.NewRepository(), "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
expires := time.Date(2027, 1, 2, 3, 4, 5, 0, time.UTC)
|
|
nonce := make([]byte, service.aead.NonceSize())
|
|
aad := licenseAAD("license-1", "instance-1", "product-1", expires)
|
|
ciphertext := service.aead.Seal(nil, nonce, []byte("secret-license-value"), aad)
|
|
plaintext, err := service.aead.Open(nil, nonce, ciphertext, aad)
|
|
if err != nil || string(plaintext) != "secret-license-value" {
|
|
t.Fatalf("round trip = %q, %v", plaintext, err)
|
|
}
|
|
if _, err := service.aead.Open(nil, nonce, ciphertext, licenseAAD("license-1", "instance-1", "product-2", expires)); err == nil {
|
|
t.Fatal("ciphertext must not decrypt for another product")
|
|
}
|
|
}
|