github.com/Venafi/vcert/v5@v5.10.2/pkg/certificate/ellipticCurve.go (about) 1 package certificate 2 3 import ( 4 "strings" 5 6 "gopkg.in/yaml.v3" 7 ) 8 9 // EllipticCurve represents the types of supported elliptic curves 10 type EllipticCurve int 11 12 const ( 13 // EllipticCurveNotSet represents a value not set 14 EllipticCurveNotSet EllipticCurve = iota 15 // EllipticCurveP521 represents the P521 curve 16 EllipticCurveP521 17 // EllipticCurveP256 represents the P256 curve 18 EllipticCurveP256 19 // EllipticCurveP384 represents the P384 curve 20 EllipticCurveP384 21 // EllipticCurveED25519 represents the ED25519 curve 22 EllipticCurveED25519 23 // EllipticCurveDefault represents the default curve value 24 EllipticCurveDefault = EllipticCurveP256 25 26 // String representations of the EllipticCurve types 27 strEccP256 = "P256" 28 strEccP384 = "P384" 29 strEccP521 = "P521" 30 strEccED25519 = "ED25519" 31 ) 32 33 func (ec *EllipticCurve) String() string { 34 switch *ec { 35 case EllipticCurveP521: 36 return strEccP521 37 case EllipticCurveP384: 38 return strEccP384 39 case EllipticCurveP256: 40 return strEccP256 41 case EllipticCurveED25519: 42 return strEccED25519 43 default: 44 return "" 45 } 46 } 47 48 // Set EllipticCurve value via a string 49 func (ec *EllipticCurve) Set(value string) error { 50 switch strings.ToUpper(value) { 51 case strEccP521, "P-521": 52 *ec = EllipticCurveP521 53 case strEccP384, "P-384": 54 *ec = EllipticCurveP384 55 case strEccP256, "P-256": 56 *ec = EllipticCurveP256 57 case strEccED25519: 58 *ec = EllipticCurveED25519 59 default: 60 *ec = EllipticCurveDefault 61 } 62 63 return nil 64 } 65 66 func parseEllipticCurve(value string) EllipticCurve { 67 switch strings.ToUpper(value) { 68 case strEccP256, "P-256": 69 return EllipticCurveP256 70 case strEccP384, "P-384": 71 return EllipticCurveP384 72 case strEccP521, "P-521": 73 return EllipticCurveP521 74 case strEccED25519: 75 return EllipticCurveED25519 76 default: 77 return EllipticCurveDefault 78 } 79 } 80 81 // MarshalYAML customizes the behavior of ChainOption when being marshaled into a YAML document. 82 // The returned value is marshaled in place of the original value implementing Marshaller 83 func (ec EllipticCurve) MarshalYAML() (interface{}, error) { 84 return ec.String(), nil 85 } 86 87 // UnmarshalYAML customizes the behavior when being unmarshalled from a YAML document 88 func (ec *EllipticCurve) UnmarshalYAML(value *yaml.Node) error { 89 var strValue string 90 err := value.Decode(&strValue) 91 if err != nil { 92 return err 93 } 94 95 *ec = parseEllipticCurve(strValue) 96 97 return nil 98 } 99 100 func AllSupportedCurves() []EllipticCurve { 101 return []EllipticCurve{EllipticCurveP521, EllipticCurveP256, EllipticCurveP384, EllipticCurveED25519} 102 }