...
1
2
3 package jwa
4
5 import (
6 "fmt"
7 "sort"
8 "sync"
9
10 "github.com/pkg/errors"
11 )
12
13
14 type EllipticCurveAlgorithm string
15
16
17 const (
18 Ed25519 EllipticCurveAlgorithm = "Ed25519"
19 Ed448 EllipticCurveAlgorithm = "Ed448"
20 InvalidEllipticCurve EllipticCurveAlgorithm = "P-invalid"
21 P256 EllipticCurveAlgorithm = "P-256"
22 P384 EllipticCurveAlgorithm = "P-384"
23 P521 EllipticCurveAlgorithm = "P-521"
24 X25519 EllipticCurveAlgorithm = "X25519"
25 X448 EllipticCurveAlgorithm = "X448"
26 )
27
28 var allEllipticCurveAlgorithms = map[EllipticCurveAlgorithm]struct{}{
29 Ed25519: {},
30 Ed448: {},
31 P256: {},
32 P384: {},
33 P521: {},
34 X25519: {},
35 X448: {},
36 }
37
38 var listEllipticCurveAlgorithmOnce sync.Once
39 var listEllipticCurveAlgorithm []EllipticCurveAlgorithm
40
41
42 func EllipticCurveAlgorithms() []EllipticCurveAlgorithm {
43 listEllipticCurveAlgorithmOnce.Do(func() {
44 listEllipticCurveAlgorithm = make([]EllipticCurveAlgorithm, 0, len(allEllipticCurveAlgorithms))
45 for v := range allEllipticCurveAlgorithms {
46 listEllipticCurveAlgorithm = append(listEllipticCurveAlgorithm, v)
47 }
48 sort.Slice(listEllipticCurveAlgorithm, func(i, j int) bool {
49 return string(listEllipticCurveAlgorithm[i]) < string(listEllipticCurveAlgorithm[j])
50 })
51 })
52 return listEllipticCurveAlgorithm
53 }
54
55
56
57 func (v *EllipticCurveAlgorithm) Accept(value interface{}) error {
58 var tmp EllipticCurveAlgorithm
59 if x, ok := value.(EllipticCurveAlgorithm); ok {
60 tmp = x
61 } else {
62 var s string
63 switch x := value.(type) {
64 case fmt.Stringer:
65 s = x.String()
66 case string:
67 s = x
68 default:
69 return errors.Errorf(`invalid type for jwa.EllipticCurveAlgorithm: %T`, value)
70 }
71 tmp = EllipticCurveAlgorithm(s)
72 }
73 if _, ok := allEllipticCurveAlgorithms[tmp]; !ok {
74 return errors.Errorf(`invalid jwa.EllipticCurveAlgorithm value`)
75 }
76
77 *v = tmp
78 return nil
79 }
80
81
82 func (v EllipticCurveAlgorithm) String() string {
83 return string(v)
84 }
85
View as plain text