this repo has no description
1package oauth
2
3import (
4 "crypto/ecdsa"
5 "crypto/elliptic"
6 "crypto/rand"
7 "fmt"
8 "net/url"
9 "time"
10
11 "github.com/lestrrat-go/jwx/v2/jwk"
12)
13
14func GenerateKey(kidPrefix *string) (jwk.Key, error) {
15 privKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
16 if err != nil {
17 return nil, err
18 }
19
20 key, err := jwk.FromRaw(privKey)
21 if err != nil {
22 return nil, err
23 }
24
25 if kidPrefix != nil {
26 kid := fmt.Sprintf("%s-%d", *kidPrefix, time.Now().Unix())
27
28 if err := key.Set(jwk.KeyIDKey, kid); err != nil {
29 return nil, err
30 }
31 }
32
33 return key, nil
34}
35
36func isSafeAndParsed(ustr string) (*url.URL, error) {
37 u, err := url.Parse(ustr)
38 if err != nil {
39 return nil, err
40 }
41
42 if u.Scheme != "https" {
43 return nil, fmt.Errorf("input url is not https")
44 }
45
46 if u.Hostname() == "" {
47 return nil, fmt.Errorf("url hostname was empty")
48 }
49
50 if u.User != nil {
51 return nil, fmt.Errorf("url user was not empty")
52 }
53
54 if u.Port() != "" {
55 return nil, fmt.Errorf("url port was not empty")
56 }
57
58 return u, nil
59}
60
61func getPrivateKey(key jwk.Key) (*ecdsa.PrivateKey, error) {
62 var pkey ecdsa.PrivateKey
63 if err := key.Raw(&pkey); err != nil {
64 return nil, err
65 }
66
67 return &pkey, nil
68}
69
70func getPublicKey(key jwk.Key) (*ecdsa.PublicKey, error) {
71 var pkey ecdsa.PublicKey
72 if err := key.Raw(&pkey); err != nil {
73 return nil, err
74 }
75
76 return &pkey, nil
77}