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> |