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}