limal-ca-mgm
BitExtensions.hpp
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | |
3 | _ _ _ _ __ _ |
4 | | | | | | \_/ | / \ | | |
5 | | | | | | |_| | / /\ \ | | |
6 | | |__ | | | | | | / ____ \ | |__ |
7 | |____||_| |_| |_|/ / \ \|____| |
8 | |
9 | ca-mgm library |
10 | |
11 | (C) SUSE Linux Products GmbH |
12 \----------------------------------------------------------------------/
13 
14  File: BitExtensions.hpp
15 
16  Author: <Michael Calmer> <mc@suse.de>
17  Maintainer: <Michael Calmer> <mc@suse.de>
18 
19  Purpose:
20 
21 /-*/
22 #ifndef LIMAL_CA_MGM_BIT_EXTENSIONS_HPP
23 #define LIMAL_CA_MGM_BIT_EXTENSIONS_HPP
24 
25 #include <limal/ca-mgm/config.h>
28 #include <blocxx/COWIntrusiveReference.hpp>
29 
30 namespace LIMAL_NAMESPACE {
31 
32 namespace CA_MGM_NAMESPACE {
33 
34  class CA;
35  class CAConfig;
36  class BitExtensionImpl;
37 
41  class BitExtension : public ExtensionBase
42  {
43  public:
44  BitExtension();
45  BitExtension(blocxx::UInt32 value);
46  BitExtension(const BitExtension& extension);
47  virtual ~BitExtension();
48 
49 #ifndef SWIG
50 
51  BitExtension& operator=(const BitExtension& extension);
52 
53 #endif
54 
55  void setValue(blocxx::UInt32 value);
56  blocxx::UInt32 getValue() const;
57 
58  virtual void commit2Config(CA& ca, Type type) const = 0;
59 
60  virtual bool valid() const = 0;
61  virtual blocxx::StringArray verify() const = 0;
62 
63  virtual blocxx::StringArray dump() const = 0;
64 
65  protected:
66  blocxx::COWIntrusiveReference<BitExtensionImpl> m_impl;
67 
68  };
69 
74  class KeyUsageExt : public BitExtension {
75  public:
76  enum KeyUsage {
77  digitalSignature = 0x0080, // KU_DIGITAL_SIGNATURE
78  nonRepudiation = 0x0040, // KU_NON_REPUDIATION
79  keyEncipherment = 0x0020, // KU_KEY_ENCIPHERMENT
80  dataEncipherment = 0x0010, // KU_DATA_ENCIPHERMENT
81  keyAgreement = 0x0008, // KU_KEY_AGREEMENT
82  keyCertSign = 0x0004, // KU_KEY_CERT_SIGN
83  cRLSign = 0x0002, // KU_CRL_SIGN
84  encipherOnly = 0x0001, // KU_ENCIPHER_ONLY
85  decipherOnly = 0x8000 // KU_DECIPHER_ONLY
86  };
87 
88  KeyUsageExt();
89  KeyUsageExt(CAConfig* caConfig, Type type);
90 
94  KeyUsageExt(blocxx::UInt32 keyUsage);
95  KeyUsageExt(const KeyUsageExt& extension);
96  virtual ~KeyUsageExt();
97 
98 #ifndef SWIG
99 
100  KeyUsageExt& operator=(const KeyUsageExt& extension);
101 
102 #endif
103 
107  void setKeyUsage(blocxx::UInt32 keyUsage);
108 
112  blocxx::UInt32 getKeyUsage() const;
113 
117  bool isEnabledFor(KeyUsage ku) const;
118 
125  virtual void commit2Config(CA& ca, Type type) const ;
126 
132  virtual bool valid() const;
133 
141  virtual blocxx::StringArray verify() const;
142 
146  virtual blocxx::StringArray dump() const;
147 
148  private:
149  bool validKeyUsage(blocxx::UInt32 keyUsage) const;
150  };
151 
156  class NsCertTypeExt : public BitExtension {
157  public:
158  enum NsCertType {
159  client = 0x0080, // NS_SSL_CLIENT
160  server = 0x0040, // NS_SSL_SERVER
161  email = 0x0020, // NS_SMIME
162  objsign = 0x0010, // NS_OBJSIGN
163  reserved = 0x0008, // ??
164  sslCA = 0x0004, // NS_SSL_CA
165  emailCA = 0x0002, // NS_SMIME_CA
166  objCA = 0x0001 // NS_OBJSIGN_CA
167  };
168 
169  NsCertTypeExt();
170  NsCertTypeExt(CAConfig* caConfig, Type type);
171 
175  NsCertTypeExt(blocxx::UInt32 nsCertTypes);
176  NsCertTypeExt(const NsCertTypeExt& extension);
177  virtual ~NsCertTypeExt();
178 
179 #ifndef SWIG
180 
181  NsCertTypeExt& operator=(const NsCertTypeExt& extension);
182 
183 #endif
184 
188  void setNsCertType(blocxx::UInt32 nsCertTypes);
189 
193  blocxx::UInt32 getNsCertType() const;
194 
198  bool isEnabledFor(NsCertType nsCertType) const;
199 
206  virtual void commit2Config(CA& ca, Type type) const;
207 
213  virtual bool valid() const;
214 
222  virtual blocxx::StringArray verify() const;
223 
227  virtual blocxx::StringArray dump() const;
228  };
229 
230 }
231 }
232 
233 #endif // LIMAL_CA_MGM_BIT_EXTENSIONS_HPP