oficina / home Public

Clone
git clone https://amadan.net/oficina/home

Plain git — no account needed to clone.

Download

Download this file

1package operator
2
3import (
4 "encoding/base64"
5 "math"
6 "testing"
7 "time"
8
9 family "amadan.net/rastrillo/rastrillo/crypto"
10)
11
12func TestPinnedSqidVectorsAndReservedInteger(t *testing.T) {
13 for n, want := range map[int64]string{1: "Uk", 2: "gb", 3: "Ef", 1000: "pnd", math.MaxInt64: "AqkYhRmbHpEX"} {
14 got, e := TeamSQID(n)
15 if e != nil || got != want {
16 t.Fatal(n, got, e)
17 }
18 decoded := teamCodec.Decode(got)
19 if len(decoded) != 1 || decoded[0] != uint64(n) {
20 t.Fatal("roundtrip")
21 }
22 }
23 for _, n := range []int64{0, -1, math.MinInt64} {
24 if _, e := TeamSQID(n); e != ErrRefused {
25 t.Fatal("invalid ID")
26 }
27 }
28 if validTeam(1, "gb") || validTeam(1, "Ukextra") {
29 t.Fatal("alternate mapping")
30 }
31}
32func TestOwnerReceiptBoundIdentityAndFreshness(t *testing.T) {
33 k, e := family.Generate()
34 if e != nil {
35 t.Fatal(e)
36 }
37 p := OwnerReceipt{1, "owner-seed", token(7), "https://id.oficina.works", "https://oficina.works", 1, "Uk", "pr_aaaaaaaaaaaaaaaaaaaaaaaaaa", "owner", 2000000000, 2000000300}
38 raw, e := SignOwner(k, p)
39 if e != nil {
40 t.Fatal(e)
41 }
42 v, e := NewOwnerVerifier(base64.RawURLEncoding.EncodeToString(k.SignPub()), p.Issuer, p.Directory)
43 if e != nil {
44 t.Fatal(e)
45 }
46 got, e := v.Verify(raw, time.Unix(p.Issued, 0))
47 if e != nil || got != p {
48 t.Fatal(e)
49 }
50 for _, n := range []int64{p.Issued - 1, p.Expires, p.Expires + 1} {
51 if _, e := v.Verify(raw, time.Unix(n, 0)); e != ErrRefused {
52 t.Fatal("freshness")
53 }
54 }
55 foreign, e := NewOwnerVerifier(base64.RawURLEncoding.EncodeToString(k.SignPub()), p.Issuer, "https://other.oficina.works")
56 if e != nil {
57 t.Fatal(e)
58 }
59 if _, e = foreign.Verify(raw, time.Unix(p.Issued, 0)); e != ErrRefused {
60 t.Fatal("foreign directory")
61 }
62 p.TeamSQID = "gb"
63 if _, e = SignOwner(k, p); e != ErrRefused {
64 t.Fatal("mismatched team")
65 }
66 p.TeamSQID = "Uk"
67 p.Role = "member"
68 if _, e = SignOwner(k, p); e != ErrRefused {
69 t.Fatal("nonowner")
70 }
71}
72