aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2018-02-07 15:07:54 -0500
committerJack Lloyd <[email protected]>2018-02-07 15:07:54 -0500
commit8fb4037b351d757945bf42f771c54b593f8e0191 (patch)
tree9d3f8bf63e6cd1c791f6b5024dab562157bf82aa /src
parent08046d32318090bd6ef110c3e4bb0105453ef26f (diff)
parent9cf0b093de0b58bab6f9377c1e16e1ed32f8a4a5 (diff)
Merge GH #1444 Add (back) modifyable OID maps
Diffstat (limited to 'src')
-rw-r--r--src/lib/asn1/oid_maps.cpp423
-rw-r--r--src/lib/asn1/oids.cpp522
-rw-r--r--src/lib/asn1/oids.h28
-rwxr-xr-xsrc/scripts/oids.py2
-rw-r--r--src/tests/test_oid.cpp109
5 files changed, 670 insertions, 414 deletions
diff --git a/src/lib/asn1/oid_maps.cpp b/src/lib/asn1/oid_maps.cpp
new file mode 100644
index 000000000..c291a9cd6
--- /dev/null
+++ b/src/lib/asn1/oid_maps.cpp
@@ -0,0 +1,423 @@
+/*
+* OID maps
+*
+* This file was automatically generated by src/scripts/oids.py on 2018-01-09
+*
+* All manual edits to this file will be lost. Edit the script
+* then regenerate this source file.
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include <botan/oids.h>
+#include <unordered_map>
+
+namespace Botan {
+
+std::unordered_map<std::string, std::string> OIDS::load_oid2str_map()
+ {
+ return std::unordered_map<std::string,std::string>{
+ { "1.0.14888.3.0.5", "ECKCDSA" },
+ { "1.2.156.10197.1.301", "sm2p256v1" },
+ { "1.2.156.10197.1.301.1", "SM2_Sig" },
+ { "1.2.156.10197.1.301.2", "SM2_Kex" },
+ { "1.2.156.10197.1.301.3", "SM2_Enc" },
+ { "1.2.156.10197.1.401", "SM3" },
+ { "1.2.156.10197.1.504", "RSA/EMSA3(SM3)" },
+ { "1.2.250.1.223.101.256.1", "frp256v1" },
+ { "1.2.410.200004.1.100.4.3", "ECKCDSA/EMSA1(SHA-1)" },
+ { "1.2.410.200004.1.100.4.4", "ECKCDSA/EMSA1(SHA-224)" },
+ { "1.2.410.200004.1.100.4.5", "ECKCDSA/EMSA1(SHA-256)" },
+ { "1.2.410.200004.1.4", "SEED/CBC" },
+ { "1.2.643.2.2.19", "GOST-34.10" },
+ { "1.2.643.2.2.3", "GOST-34.10/EMSA1(GOST-R-34.11-94)" },
+ { "1.2.643.2.2.35.1", "gost_256A" },
+ { "1.2.643.2.2.36.0", "gost_256A" },
+ { "1.2.643.7.1.1.2.2", "Streebog-256" },
+ { "1.2.643.7.1.1.2.3", "Streebog-512" },
+ { "1.2.840.10040.4.1", "DSA" },
+ { "1.2.840.10040.4.3", "DSA/EMSA1(SHA-160)" },
+ { "1.2.840.10045.2.1", "ECDSA" },
+ { "1.2.840.10045.3.1.1", "secp192r1" },
+ { "1.2.840.10045.3.1.2", "x962_p192v2" },
+ { "1.2.840.10045.3.1.3", "x962_p192v3" },
+ { "1.2.840.10045.3.1.4", "x962_p239v1" },
+ { "1.2.840.10045.3.1.5", "x962_p239v2" },
+ { "1.2.840.10045.3.1.6", "x962_p239v3" },
+ { "1.2.840.10045.3.1.7", "secp256r1" },
+ { "1.2.840.10045.4.1", "ECDSA/EMSA1(SHA-160)" },
+ { "1.2.840.10045.4.3.1", "ECDSA/EMSA1(SHA-224)" },
+ { "1.2.840.10045.4.3.2", "ECDSA/EMSA1(SHA-256)" },
+ { "1.2.840.10045.4.3.3", "ECDSA/EMSA1(SHA-384)" },
+ { "1.2.840.10045.4.3.4", "ECDSA/EMSA1(SHA-512)" },
+ { "1.2.840.10046.2.1", "DH" },
+ { "1.2.840.113533.7.66.10", "CAST-128/CBC" },
+ { "1.2.840.113533.7.66.15", "KeyWrap.CAST-128" },
+ { "1.2.840.113549.1.1.1", "RSA" },
+ { "1.2.840.113549.1.1.10", "RSA/EMSA4" },
+ { "1.2.840.113549.1.1.11", "RSA/EMSA3(SHA-256)" },
+ { "1.2.840.113549.1.1.12", "RSA/EMSA3(SHA-384)" },
+ { "1.2.840.113549.1.1.13", "RSA/EMSA3(SHA-512)" },
+ { "1.2.840.113549.1.1.14", "RSA/EMSA3(SHA-224)" },
+ { "1.2.840.113549.1.1.16", "RSA/EMSA3(SHA-512-256)" },
+ { "1.2.840.113549.1.1.4", "RSA/EMSA3(MD5)" },
+ { "1.2.840.113549.1.1.5", "RSA/EMSA3(SHA-160)" },
+ { "1.2.840.113549.1.1.7", "RSA/OAEP" },
+ { "1.2.840.113549.1.1.8", "MGF1" },
+ { "1.2.840.113549.1.5.12", "PKCS5.PBKDF2" },
+ { "1.2.840.113549.1.5.13", "PBE-PKCS5v20" },
+ { "1.2.840.113549.1.9.1", "PKCS9.EmailAddress" },
+ { "1.2.840.113549.1.9.14", "PKCS9.ExtensionRequest" },
+ { "1.2.840.113549.1.9.16.3.6", "KeyWrap.TripleDES" },
+ { "1.2.840.113549.1.9.16.3.7", "KeyWrap.RC2" },
+ { "1.2.840.113549.1.9.16.3.8", "Compression.Zlib" },
+ { "1.2.840.113549.1.9.2", "PKCS9.UnstructuredName" },
+ { "1.2.840.113549.1.9.3", "PKCS9.ContentType" },
+ { "1.2.840.113549.1.9.4", "PKCS9.MessageDigest" },
+ { "1.2.840.113549.1.9.7", "PKCS9.ChallengePassword" },
+ { "1.2.840.113549.2.10", "HMAC(SHA-384)" },
+ { "1.2.840.113549.2.11", "HMAC(SHA-512)" },
+ { "1.2.840.113549.2.5", "MD5" },
+ { "1.2.840.113549.2.7", "HMAC(SHA-160)" },
+ { "1.2.840.113549.2.8", "HMAC(SHA-224)" },
+ { "1.2.840.113549.2.9", "HMAC(SHA-256)" },
+ { "1.2.840.113549.3.2", "RC2/CBC" },
+ { "1.2.840.113549.3.7", "TripleDES/CBC" },
+ { "1.3.101.110", "Curve25519" },
+ { "1.3.101.112", "Ed25519" },
+ { "1.3.132.0.10", "secp256k1" },
+ { "1.3.132.0.30", "secp160r2" },
+ { "1.3.132.0.31", "secp192k1" },
+ { "1.3.132.0.32", "secp224k1" },
+ { "1.3.132.0.33", "secp224r1" },
+ { "1.3.132.0.34", "secp384r1" },
+ { "1.3.132.0.35", "secp521r1" },
+ { "1.3.132.0.8", "secp160r1" },
+ { "1.3.132.0.9", "secp160k1" },
+ { "1.3.132.1.12", "ECDH" },
+ { "1.3.14.3.2.26", "SHA-160" },
+ { "1.3.14.3.2.7", "DES/CBC" },
+ { "1.3.36.3.2.1", "RIPEMD-160" },
+ { "1.3.36.3.3.1.2", "RSA/EMSA3(RIPEMD-160)" },
+ { "1.3.36.3.3.2.5.2.1", "ECGDSA" },
+ { "1.3.36.3.3.2.5.4.1", "ECGDSA/EMSA1(RIPEMD-160)" },
+ { "1.3.36.3.3.2.5.4.2", "ECGDSA/EMSA1(SHA-160)" },
+ { "1.3.36.3.3.2.5.4.3", "ECGDSA/EMSA1(SHA-224)" },
+ { "1.3.36.3.3.2.5.4.4", "ECGDSA/EMSA1(SHA-256)" },
+ { "1.3.36.3.3.2.5.4.5", "ECGDSA/EMSA1(SHA-384)" },
+ { "1.3.36.3.3.2.5.4.6", "ECGDSA/EMSA1(SHA-512)" },
+ { "1.3.36.3.3.2.8.1.1.1", "brainpool160r1" },
+ { "1.3.36.3.3.2.8.1.1.11", "brainpool384r1" },
+ { "1.3.36.3.3.2.8.1.1.13", "brainpool512r1" },
+ { "1.3.36.3.3.2.8.1.1.3", "brainpool192r1" },
+ { "1.3.36.3.3.2.8.1.1.5", "brainpool224r1" },
+ { "1.3.36.3.3.2.8.1.1.7", "brainpool256r1" },
+ { "1.3.36.3.3.2.8.1.1.9", "brainpool320r1" },
+ { "1.3.6.1.4.1.11591.12.2", "Tiger(24,3)" },
+ { "1.3.6.1.4.1.25258.1.3", "McEliece" },
+ { "1.3.6.1.4.1.25258.1.5", "XMSS" },
+ { "1.3.6.1.4.1.25258.1.6.1", "GOST-34.10/EMSA1(SHA-256)" },
+ { "1.3.6.1.4.1.25258.3.1", "Serpent/CBC" },
+ { "1.3.6.1.4.1.25258.3.101", "Serpent/GCM" },
+ { "1.3.6.1.4.1.25258.3.102", "Twofish/GCM" },
+ { "1.3.6.1.4.1.25258.3.2", "Threefish-512/CBC" },
+ { "1.3.6.1.4.1.25258.3.2.1", "AES-128/OCB" },
+ { "1.3.6.1.4.1.25258.3.2.2", "AES-192/OCB" },
+ { "1.3.6.1.4.1.25258.3.2.3", "AES-256/OCB" },
+ { "1.3.6.1.4.1.25258.3.2.4", "Serpent/OCB" },
+ { "1.3.6.1.4.1.25258.3.2.5", "Twofish/OCB" },
+ { "1.3.6.1.4.1.25258.3.3", "Twofish/CBC" },
+ { "1.3.6.1.4.1.3029.1.2.1", "ElGamal" },
+ { "1.3.6.1.4.1.311.20.2.2", "Microsoft SmartcardLogon" },
+ { "1.3.6.1.4.1.8301.3.1.2.9.0.38", "secp521r1" },
+ { "1.3.6.1.5.5.7.1.1", "PKIX.AuthorityInformationAccess" },
+ { "1.3.6.1.5.5.7.3.1", "PKIX.ServerAuth" },
+ { "1.3.6.1.5.5.7.3.2", "PKIX.ClientAuth" },
+ { "1.3.6.1.5.5.7.3.3", "PKIX.CodeSigning" },
+ { "1.3.6.1.5.5.7.3.4", "PKIX.EmailProtection" },
+ { "1.3.6.1.5.5.7.3.5", "PKIX.IPsecEndSystem" },
+ { "1.3.6.1.5.5.7.3.6", "PKIX.IPsecTunnel" },
+ { "1.3.6.1.5.5.7.3.7", "PKIX.IPsecUser" },
+ { "1.3.6.1.5.5.7.3.8", "PKIX.TimeStamping" },
+ { "1.3.6.1.5.5.7.3.9", "PKIX.OCSPSigning" },
+ { "1.3.6.1.5.5.7.48.1", "PKIX.OCSP" },
+ { "1.3.6.1.5.5.7.48.1.1", "PKIX.OCSP.BasicResponse" },
+ { "1.3.6.1.5.5.7.48.2", "PKIX.CertificateAuthorityIssuers" },
+ { "1.3.6.1.5.5.7.8.5", "PKIX.XMPPAddr" },
+ { "2.16.840.1.101.3.4.1.2", "AES-128/CBC" },
+ { "2.16.840.1.101.3.4.1.22", "AES-192/CBC" },
+ { "2.16.840.1.101.3.4.1.25", "KeyWrap.AES-192" },
+ { "2.16.840.1.101.3.4.1.26", "AES-192/GCM" },
+ { "2.16.840.1.101.3.4.1.27", "AES-192/CCM" },
+ { "2.16.840.1.101.3.4.1.42", "AES-256/CBC" },
+ { "2.16.840.1.101.3.4.1.45", "KeyWrap.AES-256" },
+ { "2.16.840.1.101.3.4.1.46", "AES-256/GCM" },
+ { "2.16.840.1.101.3.4.1.47", "AES-256/CCM" },
+ { "2.16.840.1.101.3.4.1.5", "KeyWrap.AES-128" },
+ { "2.16.840.1.101.3.4.1.6", "AES-128/GCM" },
+ { "2.16.840.1.101.3.4.1.7", "AES-128/CCM" },
+ { "2.16.840.1.101.3.4.2.1", "SHA-256" },
+ { "2.16.840.1.101.3.4.2.10", "SHA-3(512)" },
+ { "2.16.840.1.101.3.4.2.11", "SHAKE-128" },
+ { "2.16.840.1.101.3.4.2.12", "SHAKE-256" },
+ { "2.16.840.1.101.3.4.2.2", "SHA-384" },
+ { "2.16.840.1.101.3.4.2.3", "SHA-512" },
+ { "2.16.840.1.101.3.4.2.4", "SHA-224" },
+ { "2.16.840.1.101.3.4.2.6", "SHA-512-256" },
+ { "2.16.840.1.101.3.4.2.7", "SHA-3(224)" },
+ { "2.16.840.1.101.3.4.2.8", "SHA-3(256)" },
+ { "2.16.840.1.101.3.4.2.9", "SHA-3(384)" },
+ { "2.16.840.1.101.3.4.3.1", "DSA/EMSA1(SHA-224)" },
+ { "2.16.840.1.101.3.4.3.10", "ECDSA/EMSA1(SHA-3(256))" },
+ { "2.16.840.1.101.3.4.3.11", "ECDSA/EMSA1(SHA-3(384))" },
+ { "2.16.840.1.101.3.4.3.12", "ECDSA/EMSA1(SHA-3(512))" },
+ { "2.16.840.1.101.3.4.3.13", "RSA/EMSA3(SHA-3(224))" },
+ { "2.16.840.1.101.3.4.3.14", "RSA/EMSA3(SHA-3(256))" },
+ { "2.16.840.1.101.3.4.3.15", "RSA/EMSA3(SHA-3(384))" },
+ { "2.16.840.1.101.3.4.3.16", "RSA/EMSA3(SHA-3(512))" },
+ { "2.16.840.1.101.3.4.3.2", "DSA/EMSA1(SHA-256)" },
+ { "2.16.840.1.101.3.4.3.3", "DSA/EMSA1(SHA-384)" },
+ { "2.16.840.1.101.3.4.3.4", "DSA/EMSA1(SHA-512)" },
+ { "2.16.840.1.101.3.4.3.5", "DSA/EMSA1(SHA-3(224))" },
+ { "2.16.840.1.101.3.4.3.6", "DSA/EMSA1(SHA-3(256))" },
+ { "2.16.840.1.101.3.4.3.7", "DSA/EMSA1(SHA-3(384))" },
+ { "2.16.840.1.101.3.4.3.8", "DSA/EMSA1(SHA-3(512))" },
+ { "2.16.840.1.101.3.4.3.9", "ECDSA/EMSA1(SHA-3(224))" },
+ { "2.5.29.14", "X509v3.SubjectKeyIdentifier" },
+ { "2.5.29.15", "X509v3.KeyUsage" },
+ { "2.5.29.17", "X509v3.SubjectAlternativeName" },
+ { "2.5.29.18", "X509v3.IssuerAlternativeName" },
+ { "2.5.29.19", "X509v3.BasicConstraints" },
+ { "2.5.29.20", "X509v3.CRLNumber" },
+ { "2.5.29.21", "X509v3.ReasonCode" },
+ { "2.5.29.23", "X509v3.HoldInstructionCode" },
+ { "2.5.29.24", "X509v3.InvalidityDate" },
+ { "2.5.29.28", "X509v3.CRLIssuingDistributionPoint" },
+ { "2.5.29.30", "X509v3.NameConstraints" },
+ { "2.5.29.31", "X509v3.CRLDistributionPoints" },
+ { "2.5.29.32", "X509v3.CertificatePolicies" },
+ { "2.5.29.32.0", "X509v3.AnyPolicy" },
+ { "2.5.29.35", "X509v3.AuthorityKeyIdentifier" },
+ { "2.5.29.36", "X509v3.PolicyConstraints" },
+ { "2.5.29.37", "X509v3.ExtendedKeyUsage" },
+ { "2.5.4.10", "X520.Organization" },
+ { "2.5.4.11", "X520.OrganizationalUnit" },
+ { "2.5.4.12", "X520.Title" },
+ { "2.5.4.3", "X520.CommonName" },
+ { "2.5.4.4", "X520.Surname" },
+ { "2.5.4.42", "X520.GivenName" },
+ { "2.5.4.43", "X520.Initials" },
+ { "2.5.4.44", "X520.GenerationalQualifier" },
+ { "2.5.4.46", "X520.DNQualifier" },
+ { "2.5.4.5", "X520.SerialNumber" },
+ { "2.5.4.6", "X520.Country" },
+ { "2.5.4.65", "X520.Pseudonym" },
+ { "2.5.4.7", "X520.Locality" },
+ { "2.5.4.8", "X520.State" },
+ { "2.5.8.1.1", "RSA" }
+ };
+ }
+
+std::unordered_map<std::string, OID> OIDS::load_str2oid_map()
+ {
+ return std::unordered_map<std::string,OID>{
+ { "AES-128/CBC", OID("2.16.840.1.101.3.4.1.2") },
+ { "AES-128/CCM", OID("2.16.840.1.101.3.4.1.7") },
+ { "AES-128/GCM", OID("2.16.840.1.101.3.4.1.6") },
+ { "AES-128/OCB", OID("1.3.6.1.4.1.25258.3.2.1") },
+ { "AES-192/CBC", OID("2.16.840.1.101.3.4.1.22") },
+ { "AES-192/CCM", OID("2.16.840.1.101.3.4.1.27") },
+ { "AES-192/GCM", OID("2.16.840.1.101.3.4.1.26") },
+ { "AES-192/OCB", OID("1.3.6.1.4.1.25258.3.2.2") },
+ { "AES-256/CBC", OID("2.16.840.1.101.3.4.1.42") },
+ { "AES-256/CCM", OID("2.16.840.1.101.3.4.1.47") },
+ { "AES-256/GCM", OID("2.16.840.1.101.3.4.1.46") },
+ { "AES-256/OCB", OID("1.3.6.1.4.1.25258.3.2.3") },
+ { "CAST-128/CBC", OID("1.2.840.113533.7.66.10") },
+ { "Compression.Zlib", OID("1.2.840.113549.1.9.16.3.8") },
+ { "Curve25519", OID("1.3.101.110") },
+ { "DES/CBC", OID("1.3.14.3.2.7") },
+ { "DH", OID("1.2.840.10046.2.1") },
+ { "DSA", OID("1.2.840.10040.4.1") },
+ { "DSA/EMSA1(SHA-160)", OID("1.2.840.10040.4.3") },
+ { "DSA/EMSA1(SHA-224)", OID("2.16.840.1.101.3.4.3.1") },
+ { "DSA/EMSA1(SHA-256)", OID("2.16.840.1.101.3.4.3.2") },
+ { "DSA/EMSA1(SHA-3(224))", OID("2.16.840.1.101.3.4.3.5") },
+ { "DSA/EMSA1(SHA-3(256))", OID("2.16.840.1.101.3.4.3.6") },
+ { "DSA/EMSA1(SHA-3(384))", OID("2.16.840.1.101.3.4.3.7") },
+ { "DSA/EMSA1(SHA-3(512))", OID("2.16.840.1.101.3.4.3.8") },
+ { "DSA/EMSA1(SHA-384)", OID("2.16.840.1.101.3.4.3.3") },
+ { "DSA/EMSA1(SHA-512)", OID("2.16.840.1.101.3.4.3.4") },
+ { "ECDH", OID("1.3.132.1.12") },
+ { "ECDSA", OID("1.2.840.10045.2.1") },
+ { "ECDSA/EMSA1(SHA-160)", OID("1.2.840.10045.4.1") },
+ { "ECDSA/EMSA1(SHA-224)", OID("1.2.840.10045.4.3.1") },
+ { "ECDSA/EMSA1(SHA-256)", OID("1.2.840.10045.4.3.2") },
+ { "ECDSA/EMSA1(SHA-3(224))", OID("2.16.840.1.101.3.4.3.9") },
+ { "ECDSA/EMSA1(SHA-3(256))", OID("2.16.840.1.101.3.4.3.10") },
+ { "ECDSA/EMSA1(SHA-3(384))", OID("2.16.840.1.101.3.4.3.11") },
+ { "ECDSA/EMSA1(SHA-3(512))", OID("2.16.840.1.101.3.4.3.12") },
+ { "ECDSA/EMSA1(SHA-384)", OID("1.2.840.10045.4.3.3") },
+ { "ECDSA/EMSA1(SHA-512)", OID("1.2.840.10045.4.3.4") },
+ { "ECGDSA", OID("1.3.36.3.3.2.5.2.1") },
+ { "ECGDSA/EMSA1(RIPEMD-160)", OID("1.3.36.3.3.2.5.4.1") },
+ { "ECGDSA/EMSA1(SHA-160)", OID("1.3.36.3.3.2.5.4.2") },
+ { "ECGDSA/EMSA1(SHA-224)", OID("1.3.36.3.3.2.5.4.3") },
+ { "ECGDSA/EMSA1(SHA-256)", OID("1.3.36.3.3.2.5.4.4") },
+ { "ECGDSA/EMSA1(SHA-384)", OID("1.3.36.3.3.2.5.4.5") },
+ { "ECGDSA/EMSA1(SHA-512)", OID("1.3.36.3.3.2.5.4.6") },
+ { "ECKCDSA", OID("1.0.14888.3.0.5") },
+ { "ECKCDSA/EMSA1(SHA-1)", OID("1.2.410.200004.1.100.4.3") },
+ { "ECKCDSA/EMSA1(SHA-224)", OID("1.2.410.200004.1.100.4.4") },
+ { "ECKCDSA/EMSA1(SHA-256)", OID("1.2.410.200004.1.100.4.5") },
+ { "Ed25519", OID("1.3.101.112") },
+ { "ElGamal", OID("1.3.6.1.4.1.3029.1.2.1") },
+ { "GOST-34.10", OID("1.2.643.2.2.19") },
+ { "GOST-34.10/EMSA1(GOST-R-34.11-94)", OID("1.2.643.2.2.3") },
+ { "GOST-34.10/EMSA1(SHA-256)", OID("1.3.6.1.4.1.25258.1.6.1") },
+ { "HMAC(SHA-160)", OID("1.2.840.113549.2.7") },
+ { "HMAC(SHA-224)", OID("1.2.840.113549.2.8") },
+ { "HMAC(SHA-256)", OID("1.2.840.113549.2.9") },
+ { "HMAC(SHA-384)", OID("1.2.840.113549.2.10") },
+ { "HMAC(SHA-512)", OID("1.2.840.113549.2.11") },
+ { "KeyWrap.AES-128", OID("2.16.840.1.101.3.4.1.5") },
+ { "KeyWrap.AES-192", OID("2.16.840.1.101.3.4.1.25") },
+ { "KeyWrap.AES-256", OID("2.16.840.1.101.3.4.1.45") },
+ { "KeyWrap.CAST-128", OID("1.2.840.113533.7.66.15") },
+ { "KeyWrap.RC2", OID("1.2.840.113549.1.9.16.3.7") },
+ { "KeyWrap.TripleDES", OID("1.2.840.113549.1.9.16.3.6") },
+ { "MD5", OID("1.2.840.113549.2.5") },
+ { "MGF1", OID("1.2.840.113549.1.1.8") },
+ { "McEliece", OID("1.3.6.1.4.1.25258.1.3") },
+ { "Microsoft SmartcardLogon", OID("1.3.6.1.4.1.311.20.2.2") },
+ { "PBE-PKCS5v20", OID("1.2.840.113549.1.5.13") },
+ { "PKCS5.PBKDF2", OID("1.2.840.113549.1.5.12") },
+ { "PKCS9.ChallengePassword", OID("1.2.840.113549.1.9.7") },
+ { "PKCS9.ContentType", OID("1.2.840.113549.1.9.3") },
+ { "PKCS9.EmailAddress", OID("1.2.840.113549.1.9.1") },
+ { "PKCS9.ExtensionRequest", OID("1.2.840.113549.1.9.14") },
+ { "PKCS9.MessageDigest", OID("1.2.840.113549.1.9.4") },
+ { "PKCS9.UnstructuredName", OID("1.2.840.113549.1.9.2") },
+ { "PKIX.AuthorityInformationAccess", OID("1.3.6.1.5.5.7.1.1") },
+ { "PKIX.CertificateAuthorityIssuers", OID("1.3.6.1.5.5.7.48.2") },
+ { "PKIX.ClientAuth", OID("1.3.6.1.5.5.7.3.2") },
+ { "PKIX.CodeSigning", OID("1.3.6.1.5.5.7.3.3") },
+ { "PKIX.EmailProtection", OID("1.3.6.1.5.5.7.3.4") },
+ { "PKIX.IPsecEndSystem", OID("1.3.6.1.5.5.7.3.5") },
+ { "PKIX.IPsecTunnel", OID("1.3.6.1.5.5.7.3.6") },
+ { "PKIX.IPsecUser", OID("1.3.6.1.5.5.7.3.7") },
+ { "PKIX.OCSP", OID("1.3.6.1.5.5.7.48.1") },
+ { "PKIX.OCSP.BasicResponse", OID("1.3.6.1.5.5.7.48.1.1") },
+ { "PKIX.OCSPSigning", OID("1.3.6.1.5.5.7.3.9") },
+ { "PKIX.ServerAuth", OID("1.3.6.1.5.5.7.3.1") },
+ { "PKIX.TimeStamping", OID("1.3.6.1.5.5.7.3.8") },
+ { "PKIX.XMPPAddr", OID("1.3.6.1.5.5.7.8.5") },
+ { "RC2/CBC", OID("1.2.840.113549.3.2") },
+ { "RIPEMD-160", OID("1.3.36.3.2.1") },
+ { "RSA", OID("1.2.840.113549.1.1.1") },
+ { "RSA/EMSA3(MD5)", OID("1.2.840.113549.1.1.4") },
+ { "RSA/EMSA3(RIPEMD-160)", OID("1.3.36.3.3.1.2") },
+ { "RSA/EMSA3(SHA-160)", OID("1.2.840.113549.1.1.5") },
+ { "RSA/EMSA3(SHA-224)", OID("1.2.840.113549.1.1.14") },
+ { "RSA/EMSA3(SHA-256)", OID("1.2.840.113549.1.1.11") },
+ { "RSA/EMSA3(SHA-3(224))", OID("2.16.840.1.101.3.4.3.13") },
+ { "RSA/EMSA3(SHA-3(256))", OID("2.16.840.1.101.3.4.3.14") },
+ { "RSA/EMSA3(SHA-3(384))", OID("2.16.840.1.101.3.4.3.15") },
+ { "RSA/EMSA3(SHA-3(512))", OID("2.16.840.1.101.3.4.3.16") },
+ { "RSA/EMSA3(SHA-384)", OID("1.2.840.113549.1.1.12") },
+ { "RSA/EMSA3(SHA-512)", OID("1.2.840.113549.1.1.13") },
+ { "RSA/EMSA3(SHA-512-256)", OID("1.2.840.113549.1.1.16") },
+ { "RSA/EMSA3(SM3)", OID("1.2.156.10197.1.504") },
+ { "RSA/EMSA4", OID("1.2.840.113549.1.1.10") },
+ { "RSA/OAEP", OID("1.2.840.113549.1.1.7") },
+ { "SEED/CBC", OID("1.2.410.200004.1.4") },
+ { "SHA-160", OID("1.3.14.3.2.26") },
+ { "SHA-224", OID("2.16.840.1.101.3.4.2.4") },
+ { "SHA-256", OID("2.16.840.1.101.3.4.2.1") },
+ { "SHA-3(224)", OID("2.16.840.1.101.3.4.2.7") },
+ { "SHA-3(256)", OID("2.16.840.1.101.3.4.2.8") },
+ { "SHA-3(384)", OID("2.16.840.1.101.3.4.2.9") },
+ { "SHA-3(512)", OID("2.16.840.1.101.3.4.2.10") },
+ { "SHA-384", OID("2.16.840.1.101.3.4.2.2") },
+ { "SHA-512", OID("2.16.840.1.101.3.4.2.3") },
+ { "SHA-512-256", OID("2.16.840.1.101.3.4.2.6") },
+ { "SHAKE-128", OID("2.16.840.1.101.3.4.2.11") },
+ { "SHAKE-256", OID("2.16.840.1.101.3.4.2.12") },
+ { "SM2_Enc", OID("1.2.156.10197.1.301.3") },
+ { "SM2_Kex", OID("1.2.156.10197.1.301.2") },
+ { "SM2_Sig", OID("1.2.156.10197.1.301.1") },
+ { "SM3", OID("1.2.156.10197.1.401") },
+ { "Serpent/CBC", OID("1.3.6.1.4.1.25258.3.1") },
+ { "Serpent/GCM", OID("1.3.6.1.4.1.25258.3.101") },
+ { "Serpent/OCB", OID("1.3.6.1.4.1.25258.3.2.4") },
+ { "Streebog-256", OID("1.2.643.7.1.1.2.2") },
+ { "Streebog-512", OID("1.2.643.7.1.1.2.3") },
+ { "Threefish-512/CBC", OID("1.3.6.1.4.1.25258.3.2") },
+ { "Tiger(24,3)", OID("1.3.6.1.4.1.11591.12.2") },
+ { "TripleDES/CBC", OID("1.2.840.113549.3.7") },
+ { "Twofish/CBC", OID("1.3.6.1.4.1.25258.3.3") },
+ { "Twofish/GCM", OID("1.3.6.1.4.1.25258.3.102") },
+ { "Twofish/OCB", OID("1.3.6.1.4.1.25258.3.2.5") },
+ { "X509v3.AnyPolicy", OID("2.5.29.32.0") },
+ { "X509v3.AuthorityKeyIdentifier", OID("2.5.29.35") },
+ { "X509v3.BasicConstraints", OID("2.5.29.19") },
+ { "X509v3.CRLDistributionPoints", OID("2.5.29.31") },
+ { "X509v3.CRLIssuingDistributionPoint", OID("2.5.29.28") },
+ { "X509v3.CRLNumber", OID("2.5.29.20") },
+ { "X509v3.CertificatePolicies", OID("2.5.29.32") },
+ { "X509v3.ExtendedKeyUsage", OID("2.5.29.37") },
+ { "X509v3.HoldInstructionCode", OID("2.5.29.23") },
+ { "X509v3.InvalidityDate", OID("2.5.29.24") },
+ { "X509v3.IssuerAlternativeName", OID("2.5.29.18") },
+ { "X509v3.KeyUsage", OID("2.5.29.15") },
+ { "X509v3.NameConstraints", OID("2.5.29.30") },
+ { "X509v3.PolicyConstraints", OID("2.5.29.36") },
+ { "X509v3.ReasonCode", OID("2.5.29.21") },
+ { "X509v3.SubjectAlternativeName", OID("2.5.29.17") },
+ { "X509v3.SubjectKeyIdentifier", OID("2.5.29.14") },
+ { "X520.CommonName", OID("2.5.4.3") },
+ { "X520.Country", OID("2.5.4.6") },
+ { "X520.DNQualifier", OID("2.5.4.46") },
+ { "X520.GenerationalQualifier", OID("2.5.4.44") },
+ { "X520.GivenName", OID("2.5.4.42") },
+ { "X520.Initials", OID("2.5.4.43") },
+ { "X520.Locality", OID("2.5.4.7") },
+ { "X520.Organization", OID("2.5.4.10") },
+ { "X520.OrganizationalUnit", OID("2.5.4.11") },
+ { "X520.Pseudonym", OID("2.5.4.65") },
+ { "X520.SerialNumber", OID("2.5.4.5") },
+ { "X520.State", OID("2.5.4.8") },
+ { "X520.Surname", OID("2.5.4.4") },
+ { "X520.Title", OID("2.5.4.12") },
+ { "XMSS", OID("1.3.6.1.4.1.25258.1.5") },
+ { "brainpool160r1", OID("1.3.36.3.3.2.8.1.1.1") },
+ { "brainpool192r1", OID("1.3.36.3.3.2.8.1.1.3") },
+ { "brainpool224r1", OID("1.3.36.3.3.2.8.1.1.5") },
+ { "brainpool256r1", OID("1.3.36.3.3.2.8.1.1.7") },
+ { "brainpool320r1", OID("1.3.36.3.3.2.8.1.1.9") },
+ { "brainpool384r1", OID("1.3.36.3.3.2.8.1.1.11") },
+ { "brainpool512r1", OID("1.3.36.3.3.2.8.1.1.13") },
+ { "frp256v1", OID("1.2.250.1.223.101.256.1") },
+ { "gost_256A", OID("1.2.643.2.2.35.1") },
+ { "secp160k1", OID("1.3.132.0.9") },
+ { "secp160r1", OID("1.3.132.0.8") },
+ { "secp160r2", OID("1.3.132.0.30") },
+ { "secp192k1", OID("1.3.132.0.31") },
+ { "secp192r1", OID("1.2.840.10045.3.1.1") },
+ { "secp224k1", OID("1.3.132.0.32") },
+ { "secp224r1", OID("1.3.132.0.33") },
+ { "secp256k1", OID("1.3.132.0.10") },
+ { "secp256r1", OID("1.2.840.10045.3.1.7") },
+ { "secp384r1", OID("1.3.132.0.34") },
+ { "secp521r1", OID("1.3.132.0.35") },
+ { "sm2p256v1", OID("1.2.156.10197.1.301") },
+ { "x962_p192v2", OID("1.2.840.10045.3.1.2") },
+ { "x962_p192v3", OID("1.2.840.10045.3.1.3") },
+ { "x962_p239v1", OID("1.2.840.10045.3.1.4") },
+ { "x962_p239v2", OID("1.2.840.10045.3.1.5") },
+ { "x962_p239v3", OID("1.2.840.10045.3.1.6") }
+ };
+ }
+
+}
+
diff --git a/src/lib/asn1/oids.cpp b/src/lib/asn1/oids.cpp
index b60ec24d2..47d1c1c4b 100644
--- a/src/lib/asn1/oids.cpp
+++ b/src/lib/asn1/oids.cpp
@@ -1,435 +1,139 @@
/*
-* OID maps
-*
-* This file was automatically generated by ./src/scripts/oids.py on 2018-01-03
-*
-* All manual edits to this file will be lost. Edit the script
-* then regenerate this source file.
+* OID Registry
+* (C) 1999-2008,2013 Jack Lloyd
*
* Botan is released under the Simplified BSD License (see license.txt)
*/
#include <botan/oids.h>
+#include <botan/mutex.h>
namespace Botan {
namespace OIDS {
-std::string lookup(const OID& oid)
+namespace {
+
+class OID_Map
{
- const std::string oid_str = oid.as_string();
- if(oid_str == "1.0.14888.3.0.5") return "ECKCDSA";
- if(oid_str == "1.2.156.10197.1.301") return "sm2p256v1";
- if(oid_str == "1.2.156.10197.1.301.1") return "SM2_Sig";
- if(oid_str == "1.2.156.10197.1.301.2") return "SM2_Kex";
- if(oid_str == "1.2.156.10197.1.301.3") return "SM2_Enc";
- if(oid_str == "1.2.156.10197.1.401") return "SM3";
- if(oid_str == "1.2.156.10197.1.504") return "RSA/EMSA3(SM3)";
- if(oid_str == "1.2.250.1.223.101.256.1") return "frp256v1";
- if(oid_str == "1.2.410.200004.1.100.4.3") return "ECKCDSA/EMSA1(SHA-1)";
- if(oid_str == "1.2.410.200004.1.100.4.4") return "ECKCDSA/EMSA1(SHA-224)";
- if(oid_str == "1.2.410.200004.1.100.4.5") return "ECKCDSA/EMSA1(SHA-256)";
- if(oid_str == "1.2.410.200004.1.4") return "SEED/CBC";
- if(oid_str == "1.2.643.2.2.19") return "GOST-34.10";
- if(oid_str == "1.2.643.2.2.3") return "GOST-34.10/EMSA1(GOST-R-34.11-94)";
- if(oid_str == "1.2.643.2.2.35.1") return "gost_256A";
- if(oid_str == "1.2.643.2.2.36.0") return "gost_256A";
- if(oid_str == "1.2.643.7.1.1.2.2") return "Streebog-256";
- if(oid_str == "1.2.643.7.1.1.2.3") return "Streebog-512";
- if(oid_str == "1.2.840.10040.4.1") return "DSA";
- if(oid_str == "1.2.840.10040.4.3") return "DSA/EMSA1(SHA-160)";
- if(oid_str == "1.2.840.10045.2.1") return "ECDSA";
- if(oid_str == "1.2.840.10045.3.1.1") return "secp192r1";
- if(oid_str == "1.2.840.10045.3.1.2") return "x962_p192v2";
- if(oid_str == "1.2.840.10045.3.1.3") return "x962_p192v3";
- if(oid_str == "1.2.840.10045.3.1.4") return "x962_p239v1";
- if(oid_str == "1.2.840.10045.3.1.5") return "x962_p239v2";
- if(oid_str == "1.2.840.10045.3.1.6") return "x962_p239v3";
- if(oid_str == "1.2.840.10045.3.1.7") return "secp256r1";
- if(oid_str == "1.2.840.10045.4.1") return "ECDSA/EMSA1(SHA-160)";
- if(oid_str == "1.2.840.10045.4.3.1") return "ECDSA/EMSA1(SHA-224)";
- if(oid_str == "1.2.840.10045.4.3.2") return "ECDSA/EMSA1(SHA-256)";
- if(oid_str == "1.2.840.10045.4.3.3") return "ECDSA/EMSA1(SHA-384)";
- if(oid_str == "1.2.840.10045.4.3.4") return "ECDSA/EMSA1(SHA-512)";
- if(oid_str == "1.2.840.10046.2.1") return "DH";
- if(oid_str == "1.2.840.113533.7.66.10") return "CAST-128/CBC";
- if(oid_str == "1.2.840.113533.7.66.15") return "KeyWrap.CAST-128";
- if(oid_str == "1.2.840.113549.1.1.1") return "RSA";
- if(oid_str == "1.2.840.113549.1.1.10") return "RSA/EMSA4";
- if(oid_str == "1.2.840.113549.1.1.11") return "RSA/EMSA3(SHA-256)";
- if(oid_str == "1.2.840.113549.1.1.12") return "RSA/EMSA3(SHA-384)";
- if(oid_str == "1.2.840.113549.1.1.13") return "RSA/EMSA3(SHA-512)";
- if(oid_str == "1.2.840.113549.1.1.14") return "RSA/EMSA3(SHA-224)";
- if(oid_str == "1.2.840.113549.1.1.16") return "RSA/EMSA3(SHA-512-256)";
- if(oid_str == "1.2.840.113549.1.1.4") return "RSA/EMSA3(MD5)";
- if(oid_str == "1.2.840.113549.1.1.5") return "RSA/EMSA3(SHA-160)";
- if(oid_str == "1.2.840.113549.1.1.7") return "RSA/OAEP";
- if(oid_str == "1.2.840.113549.1.1.8") return "MGF1";
- if(oid_str == "1.2.840.113549.1.5.12") return "PKCS5.PBKDF2";
- if(oid_str == "1.2.840.113549.1.5.13") return "PBE-PKCS5v20";
- if(oid_str == "1.2.840.113549.1.9.1") return "PKCS9.EmailAddress";
- if(oid_str == "1.2.840.113549.1.9.14") return "PKCS9.ExtensionRequest";
- if(oid_str == "1.2.840.113549.1.9.16.3.6") return "KeyWrap.TripleDES";
- if(oid_str == "1.2.840.113549.1.9.16.3.7") return "KeyWrap.RC2";
- if(oid_str == "1.2.840.113549.1.9.16.3.8") return "Compression.Zlib";
- if(oid_str == "1.2.840.113549.1.9.2") return "PKCS9.UnstructuredName";
- if(oid_str == "1.2.840.113549.1.9.3") return "PKCS9.ContentType";
- if(oid_str == "1.2.840.113549.1.9.4") return "PKCS9.MessageDigest";
- if(oid_str == "1.2.840.113549.1.9.7") return "PKCS9.ChallengePassword";
- if(oid_str == "1.2.840.113549.2.10") return "HMAC(SHA-384)";
- if(oid_str == "1.2.840.113549.2.11") return "HMAC(SHA-512)";
- if(oid_str == "1.2.840.113549.2.5") return "MD5";
- if(oid_str == "1.2.840.113549.2.7") return "HMAC(SHA-160)";
- if(oid_str == "1.2.840.113549.2.8") return "HMAC(SHA-224)";
- if(oid_str == "1.2.840.113549.2.9") return "HMAC(SHA-256)";
- if(oid_str == "1.2.840.113549.3.2") return "RC2/CBC";
- if(oid_str == "1.2.840.113549.3.7") return "TripleDES/CBC";
- if(oid_str == "1.3.101.110") return "Curve25519";
- if(oid_str == "1.3.101.112") return "Ed25519";
- if(oid_str == "1.3.132.0.10") return "secp256k1";
- if(oid_str == "1.3.132.0.30") return "secp160r2";
- if(oid_str == "1.3.132.0.31") return "secp192k1";
- if(oid_str == "1.3.132.0.32") return "secp224k1";
- if(oid_str == "1.3.132.0.33") return "secp224r1";
- if(oid_str == "1.3.132.0.34") return "secp384r1";
- if(oid_str == "1.3.132.0.35") return "secp521r1";
- if(oid_str == "1.3.132.0.8") return "secp160r1";
- if(oid_str == "1.3.132.0.9") return "secp160k1";
- if(oid_str == "1.3.132.1.12") return "ECDH";
- if(oid_str == "1.3.14.3.2.26") return "SHA-160";
- if(oid_str == "1.3.14.3.2.7") return "DES/CBC";
- if(oid_str == "1.3.36.3.2.1") return "RIPEMD-160";
- if(oid_str == "1.3.36.3.3.1.2") return "RSA/EMSA3(RIPEMD-160)";
- if(oid_str == "1.3.36.3.3.2.5.2.1") return "ECGDSA";
- if(oid_str == "1.3.36.3.3.2.5.4.1") return "ECGDSA/EMSA1(RIPEMD-160)";
- if(oid_str == "1.3.36.3.3.2.5.4.2") return "ECGDSA/EMSA1(SHA-160)";
- if(oid_str == "1.3.36.3.3.2.5.4.3") return "ECGDSA/EMSA1(SHA-224)";
- if(oid_str == "1.3.36.3.3.2.5.4.4") return "ECGDSA/EMSA1(SHA-256)";
- if(oid_str == "1.3.36.3.3.2.5.4.5") return "ECGDSA/EMSA1(SHA-384)";
- if(oid_str == "1.3.36.3.3.2.5.4.6") return "ECGDSA/EMSA1(SHA-512)";
- if(oid_str == "1.3.36.3.3.2.8.1.1.1") return "brainpool160r1";
- if(oid_str == "1.3.36.3.3.2.8.1.1.11") return "brainpool384r1";
- if(oid_str == "1.3.36.3.3.2.8.1.1.13") return "brainpool512r1";
- if(oid_str == "1.3.36.3.3.2.8.1.1.3") return "brainpool192r1";
- if(oid_str == "1.3.36.3.3.2.8.1.1.5") return "brainpool224r1";
- if(oid_str == "1.3.36.3.3.2.8.1.1.7") return "brainpool256r1";
- if(oid_str == "1.3.36.3.3.2.8.1.1.9") return "brainpool320r1";
- if(oid_str == "1.3.6.1.4.1.11591.12.2") return "Tiger(24,3)";
- if(oid_str == "1.3.6.1.4.1.25258.1.3") return "McEliece";
- if(oid_str == "1.3.6.1.4.1.25258.1.5") return "XMSS";
- if(oid_str == "1.3.6.1.4.1.25258.1.6.1") return "GOST-34.10/EMSA1(SHA-256)";
- if(oid_str == "1.3.6.1.4.1.25258.3.1") return "Serpent/CBC";
- if(oid_str == "1.3.6.1.4.1.25258.3.101") return "Serpent/GCM";
- if(oid_str == "1.3.6.1.4.1.25258.3.102") return "Twofish/GCM";
- if(oid_str == "1.3.6.1.4.1.25258.3.2") return "Threefish-512/CBC";
- if(oid_str == "1.3.6.1.4.1.25258.3.2.1") return "AES-128/OCB";
- if(oid_str == "1.3.6.1.4.1.25258.3.2.2") return "AES-192/OCB";
- if(oid_str == "1.3.6.1.4.1.25258.3.2.3") return "AES-256/OCB";
- if(oid_str == "1.3.6.1.4.1.25258.3.2.4") return "Serpent/OCB";
- if(oid_str == "1.3.6.1.4.1.25258.3.2.5") return "Twofish/OCB";
- if(oid_str == "1.3.6.1.4.1.25258.3.3") return "Twofish/CBC";
- if(oid_str == "1.3.6.1.4.1.3029.1.2.1") return "ElGamal";
- if(oid_str == "1.3.6.1.4.1.311.20.2.2") return "Microsoft SmartcardLogon";
- if(oid_str == "1.3.6.1.4.1.8301.3.1.2.9.0.38") return "secp521r1";
- if(oid_str == "1.3.6.1.5.5.7.1.1") return "PKIX.AuthorityInformationAccess";
- if(oid_str == "1.3.6.1.5.5.7.3.1") return "PKIX.ServerAuth";
- if(oid_str == "1.3.6.1.5.5.7.3.2") return "PKIX.ClientAuth";
- if(oid_str == "1.3.6.1.5.5.7.3.3") return "PKIX.CodeSigning";
- if(oid_str == "1.3.6.1.5.5.7.3.4") return "PKIX.EmailProtection";
- if(oid_str == "1.3.6.1.5.5.7.3.5") return "PKIX.IPsecEndSystem";
- if(oid_str == "1.3.6.1.5.5.7.3.6") return "PKIX.IPsecTunnel";
- if(oid_str == "1.3.6.1.5.5.7.3.7") return "PKIX.IPsecUser";
- if(oid_str == "1.3.6.1.5.5.7.3.8") return "PKIX.TimeStamping";
- if(oid_str == "1.3.6.1.5.5.7.3.9") return "PKIX.OCSPSigning";
- if(oid_str == "1.3.6.1.5.5.7.48.1") return "PKIX.OCSP";
- if(oid_str == "1.3.6.1.5.5.7.48.1.1") return "PKIX.OCSP.BasicResponse";
- if(oid_str == "1.3.6.1.5.5.7.48.2") return "PKIX.CertificateAuthorityIssuers";
- if(oid_str == "1.3.6.1.5.5.7.8.5") return "PKIX.XMPPAddr";
- if(oid_str == "2.16.840.1.101.3.4.1.2") return "AES-128/CBC";
- if(oid_str == "2.16.840.1.101.3.4.1.22") return "AES-192/CBC";
- if(oid_str == "2.16.840.1.101.3.4.1.25") return "KeyWrap.AES-192";
- if(oid_str == "2.16.840.1.101.3.4.1.26") return "AES-192/GCM";
- if(oid_str == "2.16.840.1.101.3.4.1.27") return "AES-192/CCM";
- if(oid_str == "2.16.840.1.101.3.4.1.42") return "AES-256/CBC";
- if(oid_str == "2.16.840.1.101.3.4.1.45") return "KeyWrap.AES-256";
- if(oid_str == "2.16.840.1.101.3.4.1.46") return "AES-256/GCM";
- if(oid_str == "2.16.840.1.101.3.4.1.47") return "AES-256/CCM";
- if(oid_str == "2.16.840.1.101.3.4.1.5") return "KeyWrap.AES-128";
- if(oid_str == "2.16.840.1.101.3.4.1.6") return "AES-128/GCM";
- if(oid_str == "2.16.840.1.101.3.4.1.7") return "AES-128/CCM";
- if(oid_str == "2.16.840.1.101.3.4.2.1") return "SHA-256";
- if(oid_str == "2.16.840.1.101.3.4.2.10") return "SHA-3(512)";
- if(oid_str == "2.16.840.1.101.3.4.2.11") return "SHAKE-128";
- if(oid_str == "2.16.840.1.101.3.4.2.12") return "SHAKE-256";
- if(oid_str == "2.16.840.1.101.3.4.2.2") return "SHA-384";
- if(oid_str == "2.16.840.1.101.3.4.2.3") return "SHA-512";
- if(oid_str == "2.16.840.1.101.3.4.2.4") return "SHA-224";
- if(oid_str == "2.16.840.1.101.3.4.2.6") return "SHA-512-256";
- if(oid_str == "2.16.840.1.101.3.4.2.7") return "SHA-3(224)";
- if(oid_str == "2.16.840.1.101.3.4.2.8") return "SHA-3(256)";
- if(oid_str == "2.16.840.1.101.3.4.2.9") return "SHA-3(384)";
- if(oid_str == "2.16.840.1.101.3.4.3.1") return "DSA/EMSA1(SHA-224)";
- if(oid_str == "2.16.840.1.101.3.4.3.10") return "ECDSA/EMSA1(SHA-3(256))";
- if(oid_str == "2.16.840.1.101.3.4.3.11") return "ECDSA/EMSA1(SHA-3(384))";
- if(oid_str == "2.16.840.1.101.3.4.3.12") return "ECDSA/EMSA1(SHA-3(512))";
- if(oid_str == "2.16.840.1.101.3.4.3.13") return "RSA/EMSA3(SHA-3(224))";
- if(oid_str == "2.16.840.1.101.3.4.3.14") return "RSA/EMSA3(SHA-3(256))";
- if(oid_str == "2.16.840.1.101.3.4.3.15") return "RSA/EMSA3(SHA-3(384))";
- if(oid_str == "2.16.840.1.101.3.4.3.16") return "RSA/EMSA3(SHA-3(512))";
- if(oid_str == "2.16.840.1.101.3.4.3.2") return "DSA/EMSA1(SHA-256)";
- if(oid_str == "2.16.840.1.101.3.4.3.3") return "DSA/EMSA1(SHA-384)";
- if(oid_str == "2.16.840.1.101.3.4.3.4") return "DSA/EMSA1(SHA-512)";
- if(oid_str == "2.16.840.1.101.3.4.3.5") return "DSA/EMSA1(SHA-3(224))";
- if(oid_str == "2.16.840.1.101.3.4.3.6") return "DSA/EMSA1(SHA-3(256))";
- if(oid_str == "2.16.840.1.101.3.4.3.7") return "DSA/EMSA1(SHA-3(384))";
- if(oid_str == "2.16.840.1.101.3.4.3.8") return "DSA/EMSA1(SHA-3(512))";
- if(oid_str == "2.16.840.1.101.3.4.3.9") return "ECDSA/EMSA1(SHA-3(224))";
- if(oid_str == "2.5.29.14") return "X509v3.SubjectKeyIdentifier";
- if(oid_str == "2.5.29.15") return "X509v3.KeyUsage";
- if(oid_str == "2.5.29.17") return "X509v3.SubjectAlternativeName";
- if(oid_str == "2.5.29.18") return "X509v3.IssuerAlternativeName";
- if(oid_str == "2.5.29.19") return "X509v3.BasicConstraints";
- if(oid_str == "2.5.29.20") return "X509v3.CRLNumber";
- if(oid_str == "2.5.29.21") return "X509v3.ReasonCode";
- if(oid_str == "2.5.29.23") return "X509v3.HoldInstructionCode";
- if(oid_str == "2.5.29.24") return "X509v3.InvalidityDate";
- if(oid_str == "2.5.29.28") return "X509v3.CRLIssuingDistributionPoint";
- if(oid_str == "2.5.29.30") return "X509v3.NameConstraints";
- if(oid_str == "2.5.29.31") return "X509v3.CRLDistributionPoints";
- if(oid_str == "2.5.29.32") return "X509v3.CertificatePolicies";
- if(oid_str == "2.5.29.32.0") return "X509v3.AnyPolicy";
- if(oid_str == "2.5.29.35") return "X509v3.AuthorityKeyIdentifier";
- if(oid_str == "2.5.29.36") return "X509v3.PolicyConstraints";
- if(oid_str == "2.5.29.37") return "X509v3.ExtendedKeyUsage";
- if(oid_str == "2.5.4.10") return "X520.Organization";
- if(oid_str == "2.5.4.11") return "X520.OrganizationalUnit";
- if(oid_str == "2.5.4.12") return "X520.Title";
- if(oid_str == "2.5.4.3") return "X520.CommonName";
- if(oid_str == "2.5.4.4") return "X520.Surname";
- if(oid_str == "2.5.4.42") return "X520.GivenName";
- if(oid_str == "2.5.4.43") return "X520.Initials";
- if(oid_str == "2.5.4.44") return "X520.GenerationalQualifier";
- if(oid_str == "2.5.4.46") return "X520.DNQualifier";
- if(oid_str == "2.5.4.5") return "X520.SerialNumber";
- if(oid_str == "2.5.4.6") return "X520.Country";
- if(oid_str == "2.5.4.65") return "X520.Pseudonym";
- if(oid_str == "2.5.4.7") return "X520.Locality";
- if(oid_str == "2.5.4.8") return "X520.State";
- if(oid_str == "2.5.8.1.1") return "RSA";
+ public:
+ void add_oid(const OID& oid, const std::string& str)
+ {
+ add_str2oid(oid, str);
+ add_oid2str(oid, str);
+ }
+
+ void add_str2oid(const OID& oid, const std::string& str)
+ {
+ lock_guard_type<mutex_type> lock(m_mutex);
+ auto i = m_str2oid.find(str);
+ if(i == m_str2oid.end())
+ m_str2oid.insert(std::make_pair(str, oid.as_string()));
+ }
+
+ void add_oid2str(const OID& oid, const std::string& str)
+ {
+ const std::string oid_str = oid.as_string();
+ lock_guard_type<mutex_type> lock(m_mutex);
+ auto i = m_oid2str.find(oid_str);
+ if(i == m_oid2str.end())
+ m_oid2str.insert(std::make_pair(oid_str, str));
+ }
+
+ std::string lookup(const OID& oid)
+ {
+ lock_guard_type<mutex_type> lock(m_mutex);
+
+ auto i = m_oid2str.find(oid.as_string());
+ if(i != m_oid2str.end())
+ return i->second;
#if defined(BOTAN_HOUSE_ECC_CURVE_NAME)
- if(oid_str == BOTAN_HOUSE_ECC_CURVE_OID) return BOTAN_HOUSE_ECC_CURVE_NAME;
+ if(oid_str == BOTAN_HOUSE_ECC_CURVE_OID) return BOTAN_HOUSE_ECC_CURVE_NAME;
#endif
+ return "";
+ }
+
+ OID lookup(const std::string& str)
+ {
+ lock_guard_type<mutex_type> lock(m_mutex);
+ auto i = m_str2oid.find(str);
+ if(i != m_str2oid.end())
+ return i->second;
- return std::string();
+#if defined(BOTAN_HOUSE_ECC_CURVE_NAME)
+ if(name == BOTAN_HOUSE_ECC_CURVE_NAME) return OID(BOTAN_HOUSE_ECC_CURVE_OID);
+#endif
+ return OID();
+ }
+
+ bool have_oid(const std::string& str)
+ {
+ lock_guard_type<mutex_type> lock(m_mutex);
+ return m_str2oid.find(str) != m_str2oid.end();
+ }
+
+ static OID_Map& global_registry()
+ {
+ static OID_Map g_map;
+ return g_map;
+ }
+
+ private:
+
+ OID_Map()
+ {
+ m_str2oid = load_str2oid_map();
+ m_oid2str = load_oid2str_map();
+ }
+
+ mutex_type m_mutex;
+ std::unordered_map<std::string, OID> m_str2oid;
+ std::unordered_map<std::string, std::string> m_oid2str;
+ };
+
+}
+
+void add_oid(const OID& oid, const std::string& name)
+ {
+ OID_Map::global_registry().add_oid(oid, name);
}
-OID lookup(const std::string& name)
+void add_oidstr(const char* oidstr, const char* name)
{
- if(name == "AES-128/CBC") return OID("2.16.840.1.101.3.4.1.2");
- if(name == "AES-128/CCM") return OID("2.16.840.1.101.3.4.1.7");
- if(name == "AES-128/GCM") return OID("2.16.840.1.101.3.4.1.6");
- if(name == "AES-128/OCB") return OID("1.3.6.1.4.1.25258.3.2.1");
- if(name == "AES-192/CBC") return OID("2.16.840.1.101.3.4.1.22");
- if(name == "AES-192/CCM") return OID("2.16.840.1.101.3.4.1.27");
- if(name == "AES-192/GCM") return OID("2.16.840.1.101.3.4.1.26");
- if(name == "AES-192/OCB") return OID("1.3.6.1.4.1.25258.3.2.2");
- if(name == "AES-256/CBC") return OID("2.16.840.1.101.3.4.1.42");
- if(name == "AES-256/CCM") return OID("2.16.840.1.101.3.4.1.47");
- if(name == "AES-256/GCM") return OID("2.16.840.1.101.3.4.1.46");
- if(name == "AES-256/OCB") return OID("1.3.6.1.4.1.25258.3.2.3");
- if(name == "CAST-128/CBC") return OID("1.2.840.113533.7.66.10");
- if(name == "Compression.Zlib") return OID("1.2.840.113549.1.9.16.3.8");
- if(name == "Curve25519") return OID("1.3.101.110");
- if(name == "DES/CBC") return OID("1.3.14.3.2.7");
- if(name == "DH") return OID("1.2.840.10046.2.1");
- if(name == "DSA") return OID("1.2.840.10040.4.1");
- if(name == "DSA/EMSA1(SHA-160)") return OID("1.2.840.10040.4.3");
- if(name == "DSA/EMSA1(SHA-224)") return OID("2.16.840.1.101.3.4.3.1");
- if(name == "DSA/EMSA1(SHA-256)") return OID("2.16.840.1.101.3.4.3.2");
- if(name == "DSA/EMSA1(SHA-3(224))") return OID("2.16.840.1.101.3.4.3.5");
- if(name == "DSA/EMSA1(SHA-3(256))") return OID("2.16.840.1.101.3.4.3.6");
- if(name == "DSA/EMSA1(SHA-3(384))") return OID("2.16.840.1.101.3.4.3.7");
- if(name == "DSA/EMSA1(SHA-3(512))") return OID("2.16.840.1.101.3.4.3.8");
- if(name == "DSA/EMSA1(SHA-384)") return OID("2.16.840.1.101.3.4.3.3");
- if(name == "DSA/EMSA1(SHA-512)") return OID("2.16.840.1.101.3.4.3.4");
- if(name == "ECDH") return OID("1.3.132.1.12");
- if(name == "ECDSA") return OID("1.2.840.10045.2.1");
- if(name == "ECDSA/EMSA1(SHA-160)") return OID("1.2.840.10045.4.1");
- if(name == "ECDSA/EMSA1(SHA-224)") return OID("1.2.840.10045.4.3.1");
- if(name == "ECDSA/EMSA1(SHA-256)") return OID("1.2.840.10045.4.3.2");
- if(name == "ECDSA/EMSA1(SHA-3(224))") return OID("2.16.840.1.101.3.4.3.9");
- if(name == "ECDSA/EMSA1(SHA-3(256))") return OID("2.16.840.1.101.3.4.3.10");
- if(name == "ECDSA/EMSA1(SHA-3(384))") return OID("2.16.840.1.101.3.4.3.11");
- if(name == "ECDSA/EMSA1(SHA-3(512))") return OID("2.16.840.1.101.3.4.3.12");
- if(name == "ECDSA/EMSA1(SHA-384)") return OID("1.2.840.10045.4.3.3");
- if(name == "ECDSA/EMSA1(SHA-512)") return OID("1.2.840.10045.4.3.4");
- if(name == "ECGDSA") return OID("1.3.36.3.3.2.5.2.1");
- if(name == "ECGDSA/EMSA1(RIPEMD-160)") return OID("1.3.36.3.3.2.5.4.1");
- if(name == "ECGDSA/EMSA1(SHA-160)") return OID("1.3.36.3.3.2.5.4.2");
- if(name == "ECGDSA/EMSA1(SHA-224)") return OID("1.3.36.3.3.2.5.4.3");
- if(name == "ECGDSA/EMSA1(SHA-256)") return OID("1.3.36.3.3.2.5.4.4");
- if(name == "ECGDSA/EMSA1(SHA-384)") return OID("1.3.36.3.3.2.5.4.5");
- if(name == "ECGDSA/EMSA1(SHA-512)") return OID("1.3.36.3.3.2.5.4.6");
- if(name == "ECKCDSA") return OID("1.0.14888.3.0.5");
- if(name == "ECKCDSA/EMSA1(SHA-1)") return OID("1.2.410.200004.1.100.4.3");
- if(name == "ECKCDSA/EMSA1(SHA-224)") return OID("1.2.410.200004.1.100.4.4");
- if(name == "ECKCDSA/EMSA1(SHA-256)") return OID("1.2.410.200004.1.100.4.5");
- if(name == "Ed25519") return OID("1.3.101.112");
- if(name == "ElGamal") return OID("1.3.6.1.4.1.3029.1.2.1");
- if(name == "GOST-34.10") return OID("1.2.643.2.2.19");
- if(name == "GOST-34.10/EMSA1(GOST-R-34.11-94)") return OID("1.2.643.2.2.3");
- if(name == "GOST-34.10/EMSA1(SHA-256)") return OID("1.3.6.1.4.1.25258.1.6.1");
- if(name == "HMAC(SHA-160)") return OID("1.2.840.113549.2.7");
- if(name == "HMAC(SHA-224)") return OID("1.2.840.113549.2.8");
- if(name == "HMAC(SHA-256)") return OID("1.2.840.113549.2.9");
- if(name == "HMAC(SHA-384)") return OID("1.2.840.113549.2.10");
- if(name == "HMAC(SHA-512)") return OID("1.2.840.113549.2.11");
- if(name == "KeyWrap.AES-128") return OID("2.16.840.1.101.3.4.1.5");
- if(name == "KeyWrap.AES-192") return OID("2.16.840.1.101.3.4.1.25");
- if(name == "KeyWrap.AES-256") return OID("2.16.840.1.101.3.4.1.45");
- if(name == "KeyWrap.CAST-128") return OID("1.2.840.113533.7.66.15");
- if(name == "KeyWrap.RC2") return OID("1.2.840.113549.1.9.16.3.7");
- if(name == "KeyWrap.TripleDES") return OID("1.2.840.113549.1.9.16.3.6");
- if(name == "MD5") return OID("1.2.840.113549.2.5");
- if(name == "MGF1") return OID("1.2.840.113549.1.1.8");
- if(name == "McEliece") return OID("1.3.6.1.4.1.25258.1.3");
- if(name == "Microsoft SmartcardLogon") return OID("1.3.6.1.4.1.311.20.2.2");
- if(name == "PBE-PKCS5v20") return OID("1.2.840.113549.1.5.13");
- if(name == "PKCS5.PBKDF2") return OID("1.2.840.113549.1.5.12");
- if(name == "PKCS9.ChallengePassword") return OID("1.2.840.113549.1.9.7");
- if(name == "PKCS9.ContentType") return OID("1.2.840.113549.1.9.3");
- if(name == "PKCS9.EmailAddress") return OID("1.2.840.113549.1.9.1");
- if(name == "PKCS9.ExtensionRequest") return OID("1.2.840.113549.1.9.14");
- if(name == "PKCS9.MessageDigest") return OID("1.2.840.113549.1.9.4");
- if(name == "PKCS9.UnstructuredName") return OID("1.2.840.113549.1.9.2");
- if(name == "PKIX.AuthorityInformationAccess") return OID("1.3.6.1.5.5.7.1.1");
- if(name == "PKIX.CertificateAuthorityIssuers") return OID("1.3.6.1.5.5.7.48.2");
- if(name == "PKIX.ClientAuth") return OID("1.3.6.1.5.5.7.3.2");
- if(name == "PKIX.CodeSigning") return OID("1.3.6.1.5.5.7.3.3");
- if(name == "PKIX.EmailProtection") return OID("1.3.6.1.5.5.7.3.4");
- if(name == "PKIX.IPsecEndSystem") return OID("1.3.6.1.5.5.7.3.5");
- if(name == "PKIX.IPsecTunnel") return OID("1.3.6.1.5.5.7.3.6");
- if(name == "PKIX.IPsecUser") return OID("1.3.6.1.5.5.7.3.7");
- if(name == "PKIX.OCSP") return OID("1.3.6.1.5.5.7.48.1");
- if(name == "PKIX.OCSP.BasicResponse") return OID("1.3.6.1.5.5.7.48.1.1");
- if(name == "PKIX.OCSPSigning") return OID("1.3.6.1.5.5.7.3.9");
- if(name == "PKIX.ServerAuth") return OID("1.3.6.1.5.5.7.3.1");
- if(name == "PKIX.TimeStamping") return OID("1.3.6.1.5.5.7.3.8");
- if(name == "PKIX.XMPPAddr") return OID("1.3.6.1.5.5.7.8.5");
- if(name == "RC2/CBC") return OID("1.2.840.113549.3.2");
- if(name == "RIPEMD-160") return OID("1.3.36.3.2.1");
- if(name == "RSA") return OID("1.2.840.113549.1.1.1");
- if(name == "RSA/EMSA3(MD5)") return OID("1.2.840.113549.1.1.4");
- if(name == "RSA/EMSA3(RIPEMD-160)") return OID("1.3.36.3.3.1.2");
- if(name == "RSA/EMSA3(SHA-160)") return OID("1.2.840.113549.1.1.5");
- if(name == "RSA/EMSA3(SHA-224)") return OID("1.2.840.113549.1.1.14");
- if(name == "RSA/EMSA3(SHA-256)") return OID("1.2.840.113549.1.1.11");
- if(name == "RSA/EMSA3(SHA-3(224))") return OID("2.16.840.1.101.3.4.3.13");
- if(name == "RSA/EMSA3(SHA-3(256))") return OID("2.16.840.1.101.3.4.3.14");
- if(name == "RSA/EMSA3(SHA-3(384))") return OID("2.16.840.1.101.3.4.3.15");
- if(name == "RSA/EMSA3(SHA-3(512))") return OID("2.16.840.1.101.3.4.3.16");
- if(name == "RSA/EMSA3(SHA-384)") return OID("1.2.840.113549.1.1.12");
- if(name == "RSA/EMSA3(SHA-512)") return OID("1.2.840.113549.1.1.13");
- if(name == "RSA/EMSA3(SHA-512-256)") return OID("1.2.840.113549.1.1.16");
- if(name == "RSA/EMSA3(SM3)") return OID("1.2.156.10197.1.504");
- if(name == "RSA/EMSA4") return OID("1.2.840.113549.1.1.10");
- if(name == "RSA/OAEP") return OID("1.2.840.113549.1.1.7");
- if(name == "SEED/CBC") return OID("1.2.410.200004.1.4");
- if(name == "SHA-160") return OID("1.3.14.3.2.26");
- if(name == "SHA-224") return OID("2.16.840.1.101.3.4.2.4");
- if(name == "SHA-256") return OID("2.16.840.1.101.3.4.2.1");
- if(name == "SHA-3(224)") return OID("2.16.840.1.101.3.4.2.7");
- if(name == "SHA-3(256)") return OID("2.16.840.1.101.3.4.2.8");
- if(name == "SHA-3(384)") return OID("2.16.840.1.101.3.4.2.9");
- if(name == "SHA-3(512)") return OID("2.16.840.1.101.3.4.2.10");
- if(name == "SHA-384") return OID("2.16.840.1.101.3.4.2.2");
- if(name == "SHA-512") return OID("2.16.840.1.101.3.4.2.3");
- if(name == "SHA-512-256") return OID("2.16.840.1.101.3.4.2.6");
- if(name == "SHAKE-128") return OID("2.16.840.1.101.3.4.2.11");
- if(name == "SHAKE-256") return OID("2.16.840.1.101.3.4.2.12");
- if(name == "SM2_Enc") return OID("1.2.156.10197.1.301.3");
- if(name == "SM2_Kex") return OID("1.2.156.10197.1.301.2");
- if(name == "SM2_Sig") return OID("1.2.156.10197.1.301.1");
- if(name == "SM3") return OID("1.2.156.10197.1.401");
- if(name == "Serpent/CBC") return OID("1.3.6.1.4.1.25258.3.1");
- if(name == "Serpent/GCM") return OID("1.3.6.1.4.1.25258.3.101");
- if(name == "Serpent/OCB") return OID("1.3.6.1.4.1.25258.3.2.4");
- if(name == "Streebog-256") return OID("1.2.643.7.1.1.2.2");
- if(name == "Streebog-512") return OID("1.2.643.7.1.1.2.3");
- if(name == "Threefish-512/CBC") return OID("1.3.6.1.4.1.25258.3.2");
- if(name == "Tiger(24,3)") return OID("1.3.6.1.4.1.11591.12.2");
- if(name == "TripleDES/CBC") return OID("1.2.840.113549.3.7");
- if(name == "Twofish/CBC") return OID("1.3.6.1.4.1.25258.3.3");
- if(name == "Twofish/GCM") return OID("1.3.6.1.4.1.25258.3.102");
- if(name == "Twofish/OCB") return OID("1.3.6.1.4.1.25258.3.2.5");
- if(name == "X509v3.AnyPolicy") return OID("2.5.29.32.0");
- if(name == "X509v3.AuthorityKeyIdentifier") return OID("2.5.29.35");
- if(name == "X509v3.BasicConstraints") return OID("2.5.29.19");
- if(name == "X509v3.CRLDistributionPoints") return OID("2.5.29.31");
- if(name == "X509v3.CRLIssuingDistributionPoint") return OID("2.5.29.28");
- if(name == "X509v3.CRLNumber") return OID("2.5.29.20");
- if(name == "X509v3.CertificatePolicies") return OID("2.5.29.32");
- if(name == "X509v3.ExtendedKeyUsage") return OID("2.5.29.37");
- if(name == "X509v3.HoldInstructionCode") return OID("2.5.29.23");
- if(name == "X509v3.InvalidityDate") return OID("2.5.29.24");
- if(name == "X509v3.IssuerAlternativeName") return OID("2.5.29.18");
- if(name == "X509v3.KeyUsage") return OID("2.5.29.15");
- if(name == "X509v3.NameConstraints") return OID("2.5.29.30");
- if(name == "X509v3.PolicyConstraints") return OID("2.5.29.36");
- if(name == "X509v3.ReasonCode") return OID("2.5.29.21");
- if(name == "X509v3.SubjectAlternativeName") return OID("2.5.29.17");
- if(name == "X509v3.SubjectKeyIdentifier") return OID("2.5.29.14");
- if(name == "X520.CommonName") return OID("2.5.4.3");
- if(name == "X520.Country") return OID("2.5.4.6");
- if(name == "X520.DNQualifier") return OID("2.5.4.46");
- if(name == "X520.GenerationalQualifier") return OID("2.5.4.44");
- if(name == "X520.GivenName") return OID("2.5.4.42");
- if(name == "X520.Initials") return OID("2.5.4.43");
- if(name == "X520.Locality") return OID("2.5.4.7");
- if(name == "X520.Organization") return OID("2.5.4.10");
- if(name == "X520.OrganizationalUnit") return OID("2.5.4.11");
- if(name == "X520.Pseudonym") return OID("2.5.4.65");
- if(name == "X520.SerialNumber") return OID("2.5.4.5");
- if(name == "X520.State") return OID("2.5.4.8");
- if(name == "X520.Surname") return OID("2.5.4.4");
- if(name == "X520.Title") return OID("2.5.4.12");
- if(name == "XMSS") return OID("1.3.6.1.4.1.25258.1.5");
- if(name == "brainpool160r1") return OID("1.3.36.3.3.2.8.1.1.1");
- if(name == "brainpool192r1") return OID("1.3.36.3.3.2.8.1.1.3");
- if(name == "brainpool224r1") return OID("1.3.36.3.3.2.8.1.1.5");
- if(name == "brainpool256r1") return OID("1.3.36.3.3.2.8.1.1.7");
- if(name == "brainpool320r1") return OID("1.3.36.3.3.2.8.1.1.9");
- if(name == "brainpool384r1") return OID("1.3.36.3.3.2.8.1.1.11");
- if(name == "brainpool512r1") return OID("1.3.36.3.3.2.8.1.1.13");
- if(name == "frp256v1") return OID("1.2.250.1.223.101.256.1");
- if(name == "gost_256A") return OID("1.2.643.2.2.35.1");
- if(name == "secp160k1") return OID("1.3.132.0.9");
- if(name == "secp160r1") return OID("1.3.132.0.8");
- if(name == "secp160r2") return OID("1.3.132.0.30");
- if(name == "secp192k1") return OID("1.3.132.0.31");
- if(name == "secp192r1") return OID("1.2.840.10045.3.1.1");
- if(name == "secp224k1") return OID("1.3.132.0.32");
- if(name == "secp224r1") return OID("1.3.132.0.33");
- if(name == "secp256k1") return OID("1.3.132.0.10");
- if(name == "secp256r1") return OID("1.2.840.10045.3.1.7");
- if(name == "secp384r1") return OID("1.3.132.0.34");
- if(name == "secp521r1") return OID("1.3.132.0.35");
- if(name == "sm2p256v1") return OID("1.2.156.10197.1.301");
- if(name == "x962_p192v2") return OID("1.2.840.10045.3.1.2");
- if(name == "x962_p192v3") return OID("1.2.840.10045.3.1.3");
- if(name == "x962_p239v1") return OID("1.2.840.10045.3.1.4");
- if(name == "x962_p239v2") return OID("1.2.840.10045.3.1.5");
- if(name == "x962_p239v3") return OID("1.2.840.10045.3.1.6");
+ add_oid(OID(oidstr), name);
+ }
-#if defined(BOTAN_HOUSE_ECC_CURVE_NAME)
- if(name == BOTAN_HOUSE_ECC_CURVE_NAME) return OID(BOTAN_HOUSE_ECC_CURVE_OID);
-#endif
+void add_oid2str(const OID& oid, const std::string& name)
+ {
+ OID_Map::global_registry().add_oid2str(oid, name);
+ }
- return OID();
+void add_str2oid(const OID& oid, const std::string& name)
+ {
+ OID_Map::global_registry().add_str2oid(oid, name);
}
-}
+std::string lookup(const OID& oid)
+ {
+ return OID_Map::global_registry().lookup(oid);
+ }
+
+OID lookup(const std::string& name)
+ {
+ return OID_Map::global_registry().lookup(name);
+ }
+
+bool have_oid(const std::string& name)
+ {
+ return OID_Map::global_registry().have_oid(name);
+ }
+
+bool name_of(const OID& oid, const std::string& name)
+ {
+ return (oid == lookup(name));
+ }
}
+} \ No newline at end of file
diff --git a/src/lib/asn1/oids.h b/src/lib/asn1/oids.h
index 5b175e9a5..7b87b5eaf 100644
--- a/src/lib/asn1/oids.h
+++ b/src/lib/asn1/oids.h
@@ -9,12 +9,28 @@
#define BOTAN_OIDS_H_
#include <botan/asn1_oid.h>
+#include <unordered_map>
namespace Botan {
namespace OIDS {
/**
+* Register an OID to string mapping.
+* @param oid the oid to register
+* @param name the name to be associated with the oid
+*/
+BOTAN_UNSTABLE_API void add_oid(const OID& oid, const std::string& name);
+
+BOTAN_UNSTABLE_API void add_oid2str(const OID& oid, const std::string& name);
+BOTAN_UNSTABLE_API void add_str2oid(const OID& oid, const std::string& name);
+
+BOTAN_UNSTABLE_API void add_oidstr(const char* oidstr, const char* name);
+
+std::unordered_map<std::string, std::string> load_oid2str_map();
+std::unordered_map<std::string, OID> load_str2oid_map();
+
+/**
* Resolve an OID
* @param oid the OID to look up
* @return name associated with this OID
@@ -44,11 +60,15 @@ inline OID str2oid(const std::string& name)
* @param oid the oid to check for
* @return true if the oid is registered
*/
-inline bool have_oid(const std::string& oid)
- {
- return (lookup(oid).empty() == false);
- }
+BOTAN_UNSTABLE_API bool have_oid(const std::string& oid);
+/**
+* Tests whether the specified OID stands for the specified name.
+* @param oid the OID to check
+* @param name the name to check
+* @return true if the specified OID stands for the specified name
+*/
+BOTAN_UNSTABLE_API bool name_of(const OID& oid, const std::string& name);
}
}
diff --git a/src/scripts/oids.py b/src/scripts/oids.py
index 1a162e732..882104d7b 100755
--- a/src/scripts/oids.py
+++ b/src/scripts/oids.py
@@ -323,7 +323,7 @@ def main(args = None):
str2oid[nam] = oid
if args[1] == "oids":
- print format_as_ifs(oid2str, str2oid)
+ print format_as_map(oid2str, str2oid)
elif args[1] == "dn_ub":
print format_dn_ub_as_map(dn_ub,oid2str)
elif args[1] == "pads":
diff --git a/src/tests/test_oid.cpp b/src/tests/test_oid.cpp
new file mode 100644
index 000000000..3431f6f31
--- /dev/null
+++ b/src/tests/test_oid.cpp
@@ -0,0 +1,109 @@
+/*
+* (C) 2016 Daniel Neus, Rohde & Schwarz Cybersecurity
+*
+* Botan is released under the Simplified BSD License (see license.txt)
+*/
+
+#include "tests.h"
+
+#if defined(BOTAN_HAS_ASN1)
+ #include <botan/oids.h>
+#endif
+
+namespace Botan_Tests {
+
+namespace {
+
+#if defined(BOTAN_HAS_ASN1)
+
+Test::Result test_add_have_OID()
+ {
+ Test::Result result("OID add");
+
+ result.test_eq("there is no OID 'botan-test-oid1'", Botan::OIDS::have_oid("botan-test-oid1"), false);
+
+ Botan::OIDS::add_oid(Botan::OID("1.2.345.6.666"), "botan-test-oid1");
+
+ result.test_eq("OID 'botan-test-oid1' added successfully", Botan::OIDS::have_oid("botan-test-oid1"), true);
+
+ result.test_eq("name of OID '1.2.345.6.666' is 'botan-test-oid1'", Botan::OIDS::name_of(Botan::OID("1.2.345.6.666"),
+ "botan-test-oid1"), true);
+
+ return result;
+ }
+
+Test::Result test_add_have_OID_str()
+ {
+ Test::Result result("OID add string");
+
+ result.test_eq("there is no OID 'botan-test-oid2'", Botan::OIDS::have_oid("botan-test-oid2"), false);
+
+ Botan::OIDS::add_oidstr("1.2.345.6.777", "botan-test-oid2");
+
+ result.test_eq("OID 'botan-test-oid2' added successfully", Botan::OIDS::have_oid("botan-test-oid2"), true);
+
+ result.test_eq("name of OID '1.2.345.6.777' is 'botan-test-oid2'", Botan::OIDS::name_of(Botan::OID("1.2.345.6.777"),
+ "botan-test-oid2"), true);
+ return result;
+ }
+
+Test::Result test_add_and_lookup()
+ {
+ Test::Result result("OID add and lookup");
+
+ result.test_eq("OIDS::lookup returns empty string for non-existent OID object",
+ Botan::OIDS::lookup(Botan::OID("1.2.345.6.888")), std::string());
+
+ result.test_eq("OIDS::lookup returns empty OID for non-existent OID name", Botan::OIDS::lookup("botan-test-oid3").as_string(), Botan::OID().as_string());
+
+ // add oid -> string mapping
+ Botan::OIDS::add_oid2str(Botan::OID("1.2.345.6.888"), "botan-test-oid3");
+ result.test_eq("", Botan::OIDS::lookup(Botan::OID("1.2.345.6.888")), "botan-test-oid3");
+
+ // still returns empty OID
+ result.test_eq("OIDS::lookup still returns empty OID without adding name mapping", Botan::OIDS::lookup("botan-test-oid3").as_string(), Botan::OID().as_string());
+
+ // add string -> oid mapping
+ Botan::OIDS::add_str2oid(Botan::OID("1.2.345.6.888"), "botan-test-oid3");
+ Botan::OIDS::lookup("botan-test-oid3");
+
+ return result;
+ }
+
+class OID_Tests final : public Test
+ {
+ public:
+ std::vector<Test::Result> run() override
+ {
+ std::vector<Test::Result> results;
+
+ std::vector<std::function<Test::Result()>> fns =
+ {
+ test_add_have_OID,
+ test_add_have_OID_str,
+ test_add_and_lookup,
+ };
+
+ for(size_t i = 0; i != fns.size(); ++i)
+ {
+ try
+ {
+ results.push_back(fns[ i ]());
+ }
+ catch(std::exception& e)
+ {
+ results.push_back(Test::Result::Failure("OID tests " + std::to_string(i), e.what()));
+ }
+ }
+
+ return results;
+ }
+ };
+
+BOTAN_REGISTER_TEST("oid", OID_Tests);
+
+#endif
+
+}
+
+} \ No newline at end of file