package seal import ( "bytes" "testing" ) func TestSealRoundTripsAndDiffersPerPurpose(t *testing.T) { s, err := New(bytes.Repeat([]byte{7}, 32)) if err != nil { t.Fatal(err) } ct, err := s.SealString(PurposeMeetingTitle, "Board meeting") if err != nil { t.Fatal(err) } if bytes.Contains(ct, []byte("Board")) { t.Fatal("ciphertext contains plaintext") } got, err := s.OpenString(PurposeMeetingTitle, ct) if err != nil || got != "Board meeting" { t.Fatalf("open: %q, %v", got, err) } if _, err := s.OpenString(PurposePendingAddress, ct); err == nil { t.Fatal("a ciphertext opened under the wrong purpose") } } func TestFingerprintIsStableAndKeyed(t *testing.T) { a, _ := New(bytes.Repeat([]byte{1}, 32)) b, _ := New(bytes.Repeat([]byte{2}, 32)) x1, _ := a.Fingerprint(PurposePendingAddress, "x@example.com") x2, _ := a.Fingerprint(PurposePendingAddress, "x@example.com") y, _ := b.Fingerprint(PurposePendingAddress, "x@example.com") if x1 != x2 { t.Fatal("fingerprint is not stable") } if x1 == y { t.Fatal("fingerprint does not depend on the key") } } func TestNewRefusesWrongKeyLength(t *testing.T) { if _, err := New([]byte("short")); err == nil { t.Fatal("a 5-byte key was accepted") } }