aboutsummaryrefslogtreecommitdiffstats
path: root/src/x509stat.cpp
diff options
context:
space:
mode:
authorlloyd <[email protected]>2006-06-24 02:06:30 +0000
committerlloyd <[email protected]>2006-06-24 02:06:30 +0000
commit5ff46baa0e2211e660c6925f5c42153c70eb1b11 (patch)
tree448cd34eec0238e43c1cb5808030c012aecde1ce /src/x509stat.cpp
parent37a5509d230f4a84fbaa5a889cb40e19a2b0c0ad (diff)
Add an X509_GlobalState pointer to the library state.
Initial implementation of a factory for extension objects
Diffstat (limited to 'src/x509stat.cpp')
-rw-r--r--src/x509stat.cpp79
1 files changed, 79 insertions, 0 deletions
diff --git a/src/x509stat.cpp b/src/x509stat.cpp
new file mode 100644
index 000000000..25ca197ca
--- /dev/null
+++ b/src/x509stat.cpp
@@ -0,0 +1,79 @@
+/*************************************************
+* Globally Saved X.509 State *
+* (C) 1999-2006 The Botan Project *
+*************************************************/
+
+#include <botan/x509stat.h>
+#include <botan/x509_ext.h>
+#include <botan/oids.h>
+
+namespace Botan {
+
+/*************************************************
+* Add a new prototype *
+*************************************************/
+void X509_GlobalState::add(Extension_Prototype* proto)
+ {
+ if(proto)
+ prototypes.push_back(proto);
+ }
+
+/*************************************************
+* Get an extension object *
+*************************************************/
+Certificate_Extension* X509_GlobalState::get_extension(const OID& oid) const
+ {
+ Certificate_Extension* extension = 0;
+ for(u32bit j = 0; j != prototypes.size() && !extension; ++j)
+ extension = prototypes[j]->make(oid);
+ return extension;
+ }
+
+/*************************************************
+* Set up a new global state for X.509 *
+*************************************************/
+X509_GlobalState::X509_GlobalState()
+ {
+#define CREATE_PROTOTYPE(TYPE, NAME) \
+ struct TYPE ## _Prototype : public Extension_Prototype \
+ { \
+ Certificate_Extension* make(const OID& oid) \
+ { \
+ if(oid == OIDS::lookup(NAME)) \
+ return new Cert_Extension::TYPE(); \
+ return 0; \
+ } \
+ }; \
+ add(new TYPE ## _Prototype);
+
+#if 0
+ class Basic_Constraints_Prototype : public Extension_Prototype
+ {
+ public:
+ Certificate_Extension* make(const OID& oid)
+ {
+ if(oid == OIDS::lookup("X509v3.BasicConstraints"))
+ return new Cert_Extension::Basic_Constraints();
+ return 0;
+ }
+ };
+
+ add(new Basic_Constraints_Prototype);
+#else
+
+ CREATE_PROTOTYPE(Basic_Constraints, "X509v3.BasicConstraints");
+
+#endif
+ }
+
+/*************************************************
+* Destroy this global state object *
+*************************************************/
+X509_GlobalState::~X509_GlobalState()
+ {
+ for(u32bit j = 0; j != prototypes.size(); ++j)
+ delete prototypes[j];
+ prototypes.clear();
+ }
+
+}