Project

General

Profile

API » History » Version 3

Felix Tiede, 02/17/2013 08:50 PM
As with commit:fa712a7 generateRandom() has been renamed.

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 2 Felix Tiede
  QString version();
46
  QString build_information();
47
48 3 Felix Tiede
  quint64 random();
49 1 Felix Tiede
  const QSslKey generateKeyPair(const unsigned int length = 2048);
50
  const QByteArray generateRequest(const QSslKey& key,
51
                                   const QString& subject,
52
                                   const ExtensionList& extensions);
53
54
  ExtensionList emailCertExtensions();
55
56
  QString requestSubject(const QByteArray& request);
57
  ExtensionList requestExtensions(const QByteArray& request);
58
59
60
  class SigningException : public std::exception
61
  {
62
    public:
63
      enum Operation {
64
        SignCsr,
65
        SignCrl,
66
      };
67
68
      enum Failure {
69
        NoCACertificate,
70
        KeyMismatch,
71
        TimeConstraint,
72
        ExtensionError,
73
        ObjectError,
74
      };
75
76
      ~SigningException() throw();
77
78
      const Operation operation() const throw();
79
      const Failure failure() const throw();
80
      const QString description() const throw();
81
82
    protected:
83
      SigningException(Operation operation, Failure failure, const QString& description) throw();
84
85
      void setFailure(Failure failure) throw();
86
      void setDescription(const QString& description) throw();
87
  };
88
89
90
  class Certificate : public QSslCertificate
91
  {
92
    public:
93
      struct SignatureDetails {
94
        quint64 serial;
95
        Digest digest;
96
        QDateTime effectiveDate;
97
        QDateTime expiryDate;
98
      };
99
100
      Certificate(const QSslKey& key, const QString& subject,
101
                  const SignatureDetails& details, const ExtensionList& extensions) throw(SigningException);
102
103
      bool isCA() const;
104
      bool keyMatch(const QSslKey& key) const;
105
106
      const QSslCertificate sign(const QByteArray& request, const QSslKey& signingKey,
107
                                 const SignatureDetails& details,
108
                                 const ExtensionList& extensions) const throw(SigningException);
109
110
      const QByteArray sign(const CRL& crl, const QSslKey& signingKey,
111
                            const SignatureDetails& details,
112
                            const ExtensionList& extensions) const throw(SigningException);
113
  };
114
115
};
116
};</code></pre>