Project

General

Profile

API » History » Version 9

Felix Tiede, 09/08/2013 01:13 PM
API has been changed to use std::exception::what() as well as a serial constraint.

1 1 Felix Tiede
h1. Public API
2
3
The real code is documented, of course. See header files in source:src.
4
For a history of how it was created, see ticket #34.
5
6
Regardless of the files the API is split into, in C++ it looks like this:
7
<pre><code class="cplusplus">namespace Kca
8
{
9
namespace OpenSSL
10
{
11
  enum Digest {
12
    RIPEMD160,
13
    SHA1,
14
    SHA256,
15
    SHA384,
16
    SHA512,
17
  };
18
19
  enum RevocationReason {
20
    Unspecified,
21
    KeyCompromise,
22
    CACompromise,
23
    AffilitionChanged,
24
    Superseded,
25
    CessationOfOperation,
26
    CertificateHold,
27
    RemoveFromCRL = 8
28
  };
29
30
31 6 Felix Tiede
  class OpenSSLException : public std::exception
32
  {
33
    public:
34
      ~OpenSSLException() throw();
35 5 Felix Tiede
36 9 Felix Tiede
      const char * what() const throw();
37 6 Felix Tiede
38
    protected:
39
      OpenSSLException(const QString& message) throw();
40 1 Felix Tiede
  };
41
42
43
  class SigningException : public std::exception
44
  {
45
    public:
46
      enum Operation {
47
        SignCsr,
48
        SignCrl,
49
      };
50
51
      enum Failure {
52
        NoCACertificate,
53
        KeyMismatch,
54 9 Felix Tiede
        SerialConstraint,
55 1 Felix Tiede
        TimeConstraint,
56
        ExtensionError,
57
        ObjectError,
58
      };
59
60
      ~SigningException() throw();
61
62
      const Operation operation() const throw();
63
      const Failure failure() const throw();
64 9 Felix Tiede
      const char * what() const throw();
65 1 Felix Tiede
66
    protected:
67
      SigningException(Operation operation, Failure failure, const QString& description) throw();
68
69
      void setFailure(Failure failure) throw();
70 9 Felix Tiede
      void setMessage(const QString& message) throw();
71 1 Felix Tiede
  };
72 6 Felix Tiede
73
74
  class Extension {
75
    public:
76
      struct ObjectID {
77
        QString oid;
78
        QString shortName;
79
        QString longName;
80
      };
81
82
      Extension(const ObjectID& oid, const QString& value,
83
                bool critical=false, bool replace=false);
84
      ~Extension();
85
86
      const ObjectID oid() const;
87
88
      const QString value() const;
89
      void setValue(const QString& value);
90
91
      bool critical() const;
92
      void setCritical(bool critical);
93
94
      bool replace() const;
95
      void setReplace(bool replace);
96
97
      bool operator==(const Extension& other) const;
98
      Extension& operator=(const Extension& other);
99
100
    protected:
101
      Extension(const QString& name, const QString& value,
102
                bool critical = false, bool replace = false) throw(OpenSSLException);
103
      X509_EXTENSION* handle(X509V3_CTX* ctx = NULL) const throw(OpenSSLException);
104
  };
105
  typedef QList< Extension > ExtensionList;
106
107
  struct CRLEntry {
108
    quint64 serial;
109
    RevocationReason reason;
110
    QDateTime timestamp;
111
  };
112
  typedef QList< CRLEntry > CRL;
113
114
  QString version();
115
  QString build_information();
116
117
  quint64 random();
118 8 Felix Tiede
  const QSslKey generateKeyPair(unsigned int length = 2048, QSsl::KeyAlgorithm algorithm = QSsl::Rsa);
119 6 Felix Tiede
  const QByteArray generateRequest(const QSslKey& key,
120
                                   const QString& subject,
121
                                   const ExtensionList& extensions,
122
                                   Digest digest = SHA256);
123
124
  ExtensionList emailCertExtensions();
125
126
  QString requestSubject(const QByteArray& request);
127
  ExtensionList requestExtensions(const QByteArray& request);
128
129 1 Felix Tiede
130
131
  class Certificate : public QSslCertificate
132
  {
133
    public:
134
      struct SignatureDetails {
135
        quint64 serial;
136
        Digest digest;
137
        QDateTime effectiveDate;
138
        QDateTime expiryDate;
139
      };
140
141
      Certificate(const QSslKey& key, const QString& subject,
142
                  const SignatureDetails& details, const ExtensionList& extensions) throw(SigningException);
143
144
      bool isCA() const;
145
      bool keyMatch(const QSslKey& key) const;
146
147
      const QSslCertificate sign(const QByteArray& request, const QSslKey& signingKey,
148
                                 const SignatureDetails& details,
149
                                 const ExtensionList& extensions) const throw(SigningException);
150
151
      const QByteArray sign(const CRL& crl, const QSslKey& signingKey,
152
                            const SignatureDetails& details,
153
                            const ExtensionList& extensions) const throw(SigningException);
154
  };
155
156
};
157
};</code></pre>