authenvelope_test.go raw
1 package authenvelope
2
3 import (
4 "testing"
5
6 "next.orly.dev/pkg/nostr/encoders/envelopes"
7 "next.orly.dev/pkg/nostr/interfaces/signer/p8k"
8 "next.orly.dev/pkg/nostr/protocol/auth"
9 "next.orly.dev/pkg/nostr/utils"
10 "next.orly.dev/pkg/nostr/utils/bufpool"
11 "next.orly.dev/pkg/lol/chk"
12 )
13
14 const relayURL = "wss://example.com"
15
16 func TestAuth(t *testing.T) {
17 var err error
18 signer := p8k.MustNew()
19 if err = signer.Generate(); chk.E(err) {
20 t.Fatal(err)
21 }
22 for _ = range 1000 {
23 b1, b2, b3, b4 := bufpool.Get(), bufpool.Get(), bufpool.Get(), bufpool.Get()
24 ch := auth.GenerateChallenge()
25 chal := Challenge{Challenge: ch}
26 b1 = chal.Marshal(b1)
27 oChal := make([]byte, len(b1))
28 copy(oChal, b1)
29 var rem []byte
30 var l string
31 if l, b1, err = envelopes.Identify(b1); chk.E(err) {
32 t.Fatal(err)
33 }
34 if l != L {
35 t.Fatalf("invalid sentinel %s, expect %s", l, L)
36 }
37 c2 := NewChallenge()
38 if rem, err = c2.Unmarshal(b1); chk.E(err) {
39 t.Fatal(err)
40 }
41 if len(rem) != 0 {
42 t.Fatalf("remainder should be empty\n%s", rem)
43 }
44 if !utils.FastEqual(chal.Challenge, c2.Challenge) {
45 t.Fatalf(
46 "challenge mismatch\n%s\n%s",
47 chal.Challenge, c2.Challenge,
48 )
49 }
50 b2 = c2.Marshal(b2)
51 if !utils.FastEqual(oChal, b2) {
52 t.Fatalf("challenge mismatch\n%s\n%s", oChal, b2)
53 }
54 resp := Response{
55 Event: auth.CreateUnsigned(
56 signer.Pub(), ch,
57 relayURL,
58 ),
59 }
60 if err = resp.Event.Sign(signer); chk.E(err) {
61 t.Fatal(err)
62 }
63 b3 = resp.Marshal(b3)
64 oResp := make([]byte, len(b3))
65 copy(oResp, b3)
66 if l, b3, err = envelopes.Identify(b3); chk.E(err) {
67 t.Fatal(err)
68 }
69 if l != L {
70 t.Fatalf("invalid sentinel %s, expect %s", l, L)
71 }
72 r2 := NewResponse()
73 if _, err = r2.Unmarshal(b3); chk.E(err) {
74 t.Fatal(err)
75 }
76 b4 = r2.Marshal(b4)
77 if !utils.FastEqual(oResp, b4) {
78 t.Fatalf("challenge mismatch\n%s\n%s", oResp, b4)
79 }
80 bufpool.Put(b1)
81 bufpool.Put(b2)
82 bufpool.Put(b3)
83 bufpool.Put(b4)
84 oChal, oResp = oChal[:0], oResp[:0]
85 }
86 }
87