Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
Go
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485package crypto
import ( "crypto/rand" "encoding/base64" "testing")
func generateTestKey(t *testing.T) (MasterKey, string) { t.Helper() var raw [32]byte if _, err := rand.Read(raw[:]); err != nil { t.Fatal(err) } encoded := base64.StdEncoding.EncodeToString(raw[:]) key, err := ParseMasterKey(encoded) if err != nil { t.Fatal(err) } return key, encoded}
func TestEncryptDecrypt(t *testing.T) { key, _ := generateTestKey(t) aad := ComputeAAD("did:plc:alice", "batch-1", "req-1")
secret := "ghp_supersecretgithubtoken12345" encrypted, err := Encrypt(key, secret, aad) if err != nil { t.Fatalf("encrypt failed: %v", err) }
decrypted, err := Decrypt(key, encrypted, aad) if err != nil { t.Fatalf("decrypt failed: %v", err) }
if decrypted != secret { t.Fatalf("got %q, want %q", decrypted, secret) }}
func TestDecryptRejectsMismatchedAAD(t *testing.T) { key, _ := generateTestKey(t) aad1 := ComputeAAD("did:plc:alice", "batch-1", "req-1") aad2 := ComputeAAD("did:plc:bob", "batch-1", "req-1")
secret := "ghp_secret" encrypted, err := Encrypt(key, secret, aad1) if err != nil { t.Fatal(err) }
if _, err := Decrypt(key, encrypted, aad2); err == nil { t.Fatal("expected decryption failure with mismatched AAD") }}
func TestDecryptRejectsCiphertextSwapBetweenBatches(t *testing.T) { key, _ := generateTestKey(t) aadBatchA := ComputeAAD("did:plc:alice", "batch-A", "req-1") aadBatchB := ComputeAAD("did:plc:alice", "batch-B", "req-2")
encryptedA, err := Encrypt(key, "tokenA", aadBatchA) if err != nil { t.Fatal(err) }
if _, err := Decrypt(key, encryptedA, aadBatchB); err == nil { t.Fatal("expected decryption failure when ciphertext swapped to different batch AAD") }}
func TestParseMasterKey(t *testing.T) { _, err := ParseMasterKey("invalid-base64!!!") if err == nil { t.Fatal("expected error for invalid base64") }
short := base64.StdEncoding.EncodeToString([]byte("too-short")) if _, err := ParseMasterKey(short); err == nil { t.Fatal("expected error for non-32-byte key") }}