Skip to content

Commit 6308271

Browse files
committed
add example and autodoc include in README
1 parent d9ae1f2 commit 6308271

2 files changed

Lines changed: 85 additions & 42 deletions

File tree

README.md

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -10,50 +10,10 @@ Go's standard library does not include Ed448 support. The only viable implementa
1010

1111
Import this package for its side effects to register Ed448 with `jwx`:
1212

13+
<!-- INCLUDE(example_test.go) -->
1314
```go
14-
package main
15-
16-
import (
17-
"fmt"
18-
19-
"github.com/cloudflare/circl/sign/ed448"
20-
"github.com/lestrrat-go/jwx/v3/jwa"
21-
"github.com/lestrrat-go/jwx/v3/jwk"
22-
"github.com/lestrrat-go/jwx/v3/jws"
23-
24-
_ "github.com/lestrrat-go/jwx-circl-ed448" // register Ed448
25-
)
26-
27-
func main() {
28-
pub, priv, err := ed448.GenerateKey(nil)
29-
if err != nil {
30-
fmt.Printf("failed to generate key: %s\n", err)
31-
return
32-
}
33-
34-
// Sign and verify with raw keys
35-
signed, err := jws.Sign([]byte("hello"), jws.WithKey(jwa.EdDSAEd448(), priv))
36-
if err != nil {
37-
fmt.Printf("failed to sign: %s\n", err)
38-
return
39-
}
40-
41-
payload, err := jws.Verify(signed, jws.WithKey(jwa.EdDSAEd448(), pub))
42-
if err != nil {
43-
fmt.Printf("failed to verify: %s\n", err)
44-
return
45-
}
46-
fmt.Printf("%s\n", payload)
47-
48-
// Import into JWK
49-
jwkKey, err := jwk.Import(priv)
50-
if err != nil {
51-
fmt.Printf("failed to import key: %s\n", err)
52-
return
53-
}
54-
_ = jwkKey
55-
}
5615
```
16+
<!-- END INCLUDE -->
5717

5818
# What gets registered
5919

example_test.go

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
package ed448_test
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
7+
"github.com/cloudflare/circl/sign/ed448"
8+
"github.com/lestrrat-go/jwx/v3/jwa"
9+
"github.com/lestrrat-go/jwx/v3/jwk"
10+
"github.com/lestrrat-go/jwx/v3/jws"
11+
12+
_ "github.com/lestrrat-go/jwx-circl-ed448"
13+
)
14+
15+
func Example() {
16+
// Generate an Ed448 key pair
17+
pub, priv, err := ed448.GenerateKey(nil)
18+
if err != nil {
19+
fmt.Printf("failed to generate key: %s\n", err)
20+
return
21+
}
22+
23+
payload := []byte("Hello, Ed448!")
24+
25+
// Sign and verify with raw keys
26+
signed, err := jws.Sign(payload, jws.WithKey(jwa.EdDSAEd448(), priv))
27+
if err != nil {
28+
fmt.Printf("failed to sign: %s\n", err)
29+
return
30+
}
31+
32+
verified, err := jws.Verify(signed, jws.WithKey(jwa.EdDSAEd448(), pub))
33+
if err != nil {
34+
fmt.Printf("failed to verify: %s\n", err)
35+
return
36+
}
37+
fmt.Printf("%s\n", verified)
38+
39+
// Import raw keys into JWK
40+
jwkPriv, err := jwk.Import(priv)
41+
if err != nil {
42+
fmt.Printf("failed to import private key: %s\n", err)
43+
return
44+
}
45+
46+
jwkPub, err := jwk.Import(pub)
47+
if err != nil {
48+
fmt.Printf("failed to import public key: %s\n", err)
49+
return
50+
}
51+
52+
// Sign and verify with JWK keys
53+
signed, err = jws.Sign(payload, jws.WithKey(jwa.EdDSAEd448(), jwkPriv))
54+
if err != nil {
55+
fmt.Printf("failed to sign with JWK key: %s\n", err)
56+
return
57+
}
58+
59+
verified, err = jws.Verify(signed, jws.WithKey(jwa.EdDSAEd448(), jwkPub))
60+
if err != nil {
61+
fmt.Printf("failed to verify with JWK key: %s\n", err)
62+
return
63+
}
64+
fmt.Printf("%s\n", verified)
65+
66+
// JWK JSON round-trip
67+
buf, err := json.MarshalIndent(jwkPriv, "", " ")
68+
if err != nil {
69+
fmt.Printf("failed to marshal JWK: %s\n", err)
70+
return
71+
}
72+
73+
parsed, err := jwk.ParseKey(buf)
74+
if err != nil {
75+
fmt.Printf("failed to parse JWK: %s\n", err)
76+
return
77+
}
78+
_ = parsed
79+
80+
// Output:
81+
// Hello, Ed448!
82+
// Hello, Ed448!
83+
}

0 commit comments

Comments
 (0)