carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package release
2
3import (
4 "crypto/ed25519"
5 "encoding/json"
6 "errors"
7 "testing"
8)
9
10func TestRootEnvelopeRoundTripAndRefusals(t *testing.T) {
11 pub, priv, err := ed25519.GenerateKey(nil)
12 if err != nil {
13 t.Fatal(err)
14 }
15 type payload struct {
16 V int `json:"v"`
17 ID string `json:"id"`
18 }
19 wire, err := SignRootEnvelope(RootSigner(priv), payload{V: 1, ID: "loss-1"})
20 if err != nil {
21 t.Fatal(err)
22 }
23 var got payload
24 if err := VerifyRootEnvelope(pub, wire, &got); err != nil || got != (payload{V: 1, ID: "loss-1"}) {
25 t.Fatalf("verify = %+v, %v", got, err)
26 }
27
28 var wrapper map[string]any
29 if err := json.Unmarshal(wire, &wrapper); err != nil {
30 t.Fatal(err)
31 }
32 wrapper["extra"] = true
33 bad, _ := json.Marshal(wrapper)
34 if err := VerifyRootEnvelope(pub, bad, &got); !errors.Is(err, ErrRootEnvelope) {
35 t.Fatalf("unknown wrapper field = %v", err)
36 }
37 wire[len(wire)-2] ^= 1
38 if err := VerifyRootEnvelope(pub, wire, &got); !errors.Is(err, ErrRootEnvelope) {
39 t.Fatalf("tampered envelope = %v", err)
40 }
41 if _, err := SignRootEnvelope(Signer{}, got); !errors.Is(err, ErrRootEnvelope) {
42 t.Fatalf("zero signer = %v", err)
43 }
44}
45