00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef LIMAL_CA_MGM_BIT_EXTENSIONS_HPP
00023 #define LIMAL_CA_MGM_BIT_EXTENSIONS_HPP
00024
00025 #include <limal/ca-mgm/config.h>
00026 #include <limal/ca-mgm/CommonData.hpp>
00027 #include <limal/ca-mgm/ExtensionBase.hpp>
00028 #include <blocxx/COWIntrusiveReference.hpp>
00029
00030 namespace LIMAL_NAMESPACE {
00031
00032 namespace CA_MGM_NAMESPACE {
00033
00034 class CA;
00035 class CAConfig;
00036 class BitExtensionImpl;
00037
00041 class BitExtension : public ExtensionBase
00042 {
00043 public:
00044 BitExtension();
00045 BitExtension(blocxx::UInt32 value);
00046 BitExtension(const BitExtension& extension);
00047 virtual ~BitExtension();
00048
00049 #ifndef SWIG
00050
00051 BitExtension& operator=(const BitExtension& extension);
00052
00053 #endif
00054
00055 void setValue(blocxx::UInt32 value);
00056 blocxx::UInt32 getValue() const;
00057
00058 virtual void commit2Config(CA& ca, Type type) const = 0;
00059
00060 virtual bool valid() const = 0;
00061 virtual blocxx::StringArray verify() const = 0;
00062
00063 virtual blocxx::StringArray dump() const = 0;
00064
00065 protected:
00066 blocxx::COWIntrusiveReference<BitExtensionImpl> m_impl;
00067
00068 };
00069
00074 class KeyUsageExt : public BitExtension {
00075 public:
00076 enum KeyUsage {
00077 digitalSignature = 0x0080,
00078 nonRepudiation = 0x0040,
00079 keyEncipherment = 0x0020,
00080 dataEncipherment = 0x0010,
00081 keyAgreement = 0x0008,
00082 keyCertSign = 0x0004,
00083 cRLSign = 0x0002,
00084 encipherOnly = 0x0001,
00085 decipherOnly = 0x8000
00086 };
00087
00088 KeyUsageExt();
00089 KeyUsageExt(CAConfig* caConfig, Type type);
00090
00094 KeyUsageExt(blocxx::UInt32 keyUsage);
00095 KeyUsageExt(const KeyUsageExt& extension);
00096 virtual ~KeyUsageExt();
00097
00098 #ifndef SWIG
00099
00100 KeyUsageExt& operator=(const KeyUsageExt& extension);
00101
00102 #endif
00103
00107 void setKeyUsage(blocxx::UInt32 keyUsage);
00108
00112 blocxx::UInt32 getKeyUsage() const;
00113
00117 bool isEnabledFor(KeyUsage ku) const;
00118
00125 virtual void commit2Config(CA& ca, Type type) const ;
00126
00132 virtual bool valid() const;
00133
00141 virtual blocxx::StringArray verify() const;
00142
00146 virtual blocxx::StringArray dump() const;
00147
00148 private:
00149 bool validKeyUsage(blocxx::UInt32 keyUsage) const;
00150 };
00151
00156 class NsCertTypeExt : public BitExtension {
00157 public:
00158 enum NsCertType {
00159 client = 0x0080,
00160 server = 0x0040,
00161 email = 0x0020,
00162 objsign = 0x0010,
00163 reserved = 0x0008,
00164 sslCA = 0x0004,
00165 emailCA = 0x0002,
00166 objCA = 0x0001
00167 };
00168
00169 NsCertTypeExt();
00170 NsCertTypeExt(CAConfig* caConfig, Type type);
00171
00175 NsCertTypeExt(blocxx::UInt32 nsCertTypes);
00176 NsCertTypeExt(const NsCertTypeExt& extension);
00177 virtual ~NsCertTypeExt();
00178
00179 #ifndef SWIG
00180
00181 NsCertTypeExt& operator=(const NsCertTypeExt& extension);
00182
00183 #endif
00184
00188 void setNsCertType(blocxx::UInt32 nsCertTypes);
00189
00193 blocxx::UInt32 getNsCertType() const;
00194
00198 bool isEnabledFor(NsCertType nsCertType) const;
00199
00206 virtual void commit2Config(CA& ca, Type type) const;
00207
00213 virtual bool valid() const;
00214
00222 virtual blocxx::StringArray verify() const;
00223
00227 virtual blocxx::StringArray dump() const;
00228 };
00229
00230 }
00231 }
00232
00233 #endif // LIMAL_CA_MGM_BIT_EXTENSIONS_HPP