limal-ca-mgm
BitExtensions.hpp
Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                                                                      |
00003 |                     _     _   _   _     __     _                     |
00004 |                    | |   | | | \_/ |   /  \   | |                    |
00005 |                    | |   | | | |_| |  / /\ \  | |                    |
00006 |                    | |__ | | | | | | / ____ \ | |__                  |
00007 |                    |____||_| |_| |_|/ /    \ \|____|                 |
00008 |                                                                      |
00009 |                             ca-mgm library                           |
00010 |                                                                      |
00011 |                                         (C) SUSE Linux Products GmbH |
00012 \----------------------------------------------------------------------/
00013 
00014   File:       BitExtensions.hpp
00015 
00016   Author:     <Michael Calmer>     <mc@suse.de>
00017   Maintainer: <Michael Calmer>     <mc@suse.de>
00018 
00019   Purpose:
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, // KU_DIGITAL_SIGNATURE
00078                         nonRepudiation    = 0x0040, // KU_NON_REPUDIATION
00079                         keyEncipherment   = 0x0020, // KU_KEY_ENCIPHERMENT
00080                         dataEncipherment  = 0x0010, // KU_DATA_ENCIPHERMENT
00081                         keyAgreement      = 0x0008, // KU_KEY_AGREEMENT
00082                         keyCertSign       = 0x0004, // KU_KEY_CERT_SIGN
00083                         cRLSign           = 0x0002, // KU_CRL_SIGN
00084                         encipherOnly      = 0x0001, // KU_ENCIPHER_ONLY
00085                         decipherOnly      = 0x8000  // KU_DECIPHER_ONLY
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, // NS_SSL_CLIENT
00160                         server   = 0x0040, // NS_SSL_SERVER
00161                         email    = 0x0020, // NS_SMIME
00162                         objsign  = 0x0010, // NS_OBJSIGN
00163                         reserved = 0x0008, // ??
00164                         sslCA    = 0x0004, // NS_SSL_CA
00165                         emailCA  = 0x0002, // NS_SMIME_CA
00166                         objCA    = 0x0001  // NS_OBJSIGN_CA
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