Botan 3.5.0
Crypto and TLS for C&
pcurves.cpp
Go to the documentation of this file.
1/*
2* (C) 2024 Jack Lloyd
3*
4* Botan is released under the Simplified BSD License (see license.txt)
5*/
6
7#include <botan/internal/pcurves.h>
8
9#include <botan/internal/pcurves_instance.h>
10
11#if defined(BOTAN_HAS_ASN1)
12 #include <botan/asn1_obj.h>
13#endif
14
15namespace Botan::PCurve {
16
17#if !defined(BOTAN_HAS_PCURVES_SECP256R1)
18//static
19std::shared_ptr<const PrimeOrderCurve> PCurveInstance::secp256r1() {
20 return nullptr;
21}
22#endif
23
24#if !defined(BOTAN_HAS_PCURVES_SECP384R1)
25//static
26std::shared_ptr<const PrimeOrderCurve> PCurveInstance::secp384r1() {
27 return nullptr;
28}
29#endif
30
31#if !defined(BOTAN_HAS_PCURVES_SECP521R1)
32//static
33std::shared_ptr<const PrimeOrderCurve> PCurveInstance::secp521r1() {
34 return nullptr;
35}
36#endif
37
38#if !defined(BOTAN_HAS_PCURVES_SECP256K1)
39//static
40std::shared_ptr<const PrimeOrderCurve> PCurveInstance::secp256k1() {
41 return nullptr;
42}
43#endif
44
45#if !defined(BOTAN_HAS_PCURVES_BRAINPOOL256R1)
46//static
47std::shared_ptr<const PrimeOrderCurve> PCurveInstance::brainpool256r1() {
48 return nullptr;
49}
50#endif
51
52#if !defined(BOTAN_HAS_PCURVES_BRAINPOOL384R1)
53//static
54std::shared_ptr<const PrimeOrderCurve> PCurveInstance::brainpool384r1() {
55 return nullptr;
56}
57#endif
58
59#if !defined(BOTAN_HAS_PCURVES_BRAINPOOL512R1)
60//static
61std::shared_ptr<const PrimeOrderCurve> PCurveInstance::brainpool512r1() {
62 return nullptr;
63}
64#endif
65
66#if !defined(BOTAN_HAS_PCURVES_FRP256V1)
67//static
68std::shared_ptr<const PrimeOrderCurve> PCurveInstance::frp256v1() {
69 return nullptr;
70}
71#endif
72
73#if !defined(BOTAN_HAS_PCURVES_SM2P256V1)
74//static
75std::shared_ptr<const PrimeOrderCurve> PCurveInstance::sm2p256v1() {
76 return nullptr;
77}
78#endif
79
103
117
118std::string PrimeOrderCurveId::to_string() const {
119 switch(this->code()) {
121 return "secp256r1";
123 return "secp384r1";
125 return "secp521r1";
127 return "secp256k1";
129 return "brainpool256r1";
131 return "brainpool384r1";
133 return "brainpool512r1";
135 return "frp256v1";
137 return "sm2p256v1";
138 }
139
140 return "unknown";
141}
142
143//static
144std::optional<PrimeOrderCurveId> PrimeOrderCurveId::from_string(std::string_view name) {
145 if(name == "secp256r1") {
147 } else if(name == "secp384r1") {
149 } else if(name == "secp521r1") {
151 } else if(name == "secp256k1") {
153 } else if(name == "brainpool256r1") {
155 } else if(name == "brainpool384r1") {
157 } else if(name == "brainpool512r1") {
159 } else if(name == "frp256v1") {
161 } else if(name == "sm2p256v1") {
163 } else {
164 return {};
165 }
166}
167
168#if defined(BOTAN_HAS_ASN1)
169
170//static
171std::optional<PrimeOrderCurveId> PrimeOrderCurveId::from_oid(const OID& oid) {
172 const std::string name = oid.human_name_or_empty();
173 if(name.empty()) {
174 return {};
175 } else {
177 }
178}
179
180#endif
181
182} // namespace Botan::PCurve
std::string human_name_or_empty() const
Definition asn1_oid.cpp:147
static std::shared_ptr< const PrimeOrderCurve > secp521r1()
Definition pcurves.cpp:33
static std::shared_ptr< const PrimeOrderCurve > secp256k1()
Definition pcurves.cpp:40
static std::shared_ptr< const PrimeOrderCurve > secp384r1()
Definition pcurves.cpp:26
static std::shared_ptr< const PrimeOrderCurve > brainpool384r1()
Definition pcurves.cpp:54
static std::shared_ptr< const PrimeOrderCurve > brainpool512r1()
Definition pcurves.cpp:61
static std::shared_ptr< const PrimeOrderCurve > frp256v1()
Definition pcurves.cpp:68
static std::shared_ptr< const PrimeOrderCurve > brainpool256r1()
Definition pcurves.cpp:47
static std::shared_ptr< const PrimeOrderCurve > sm2p256v1()
Definition pcurves.cpp:75
static std::shared_ptr< const PrimeOrderCurve > secp256r1()
Definition pcurves.cpp:19
Identifier for a named prime order curve.
Definition pcurves_id.h:27
static std::vector< PrimeOrderCurveId > all()
Definition pcurves.cpp:104
static std::optional< PrimeOrderCurveId > from_string(std::string_view name)
Map a string to a curve identifier.
Definition pcurves.cpp:144
std::string to_string() const
Convert the ID to it's commonly used name (inverse of from_string)
Definition pcurves.cpp:118
static std::shared_ptr< const PrimeOrderCurve > from_id(PrimeOrderCurveId id)
Definition pcurves.cpp:80
std::string name