Project

General

Profile

API » History » Version 1

Felix Tiede, 02/13/2013 09:28 PM
Documented latest API in C++ code.

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
  struct X509Extension {
31
    bool replace;
32
    bool critical;
33
    QString name;
34
    QString value;
35
  };
36
  typedef QList< X509Extension > ExtensionList;
37
38
  struct CRLEntry {
39
    quint64 serial;
40
    RevocationReason reason;
41
    QDateTime timestamp;
42
  };
43
  typedef QList< CRLEntry > CRL;
44
45
  quint64 generateRandom();
46
  const QSslKey generateKeyPair(const unsigned int length = 2048);
47
  const QByteArray generateRequest(const QSslKey& key,
48
                                   const QString& subject,
49
                                   const ExtensionList& extensions);
50
51
  ExtensionList emailCertExtensions();
52
53
  QString requestSubject(const QByteArray& request);
54
  ExtensionList requestExtensions(const QByteArray& request);
55
56
57
  class SigningException : public std::exception
58
  {
59
    public:
60
      enum Operation {
61
        SignCsr,
62
        SignCrl,
63
      };
64
65
      enum Failure {
66
        NoCACertificate,
67
        KeyMismatch,
68
        TimeConstraint,
69
        ExtensionError,
70
        ObjectError,
71
      };
72
73
      ~SigningException() throw();
74
75
      const Operation operation() const throw();
76
      const Failure failure() const throw();
77
      const QString description() const throw();
78
79
    protected:
80
      SigningException(Operation operation, Failure failure, const QString& description) throw();
81
82
      void setFailure(Failure failure) throw();
83
      void setDescription(const QString& description) throw();
84
  };
85
86
87
  class Certificate : public QSslCertificate
88
  {
89
    public:
90
      struct SignatureDetails {
91
        quint64 serial;
92
        Digest digest;
93
        QDateTime effectiveDate;
94
        QDateTime expiryDate;
95
      };
96
97
      Certificate(const QSslKey& key, const QString& subject,
98
                  const SignatureDetails& details, const ExtensionList& extensions) throw(SigningException);
99
100
      bool isCA() const;
101
      bool keyMatch(const QSslKey& key) const;
102
103
      const QSslCertificate sign(const QByteArray& request, const QSslKey& signingKey,
104
                                 const SignatureDetails& details,
105
                                 const ExtensionList& extensions) const throw(SigningException);
106
107
      const QByteArray sign(const CRL& crl, const QSslKey& signingKey,
108
                            const SignatureDetails& details,
109
                            const ExtensionList& extensions) const throw(SigningException);
110
  };
111
112
};
113
};</code></pre>