API » History » Version 11
Felix Tiede, 12/09/2013 07:53 PM
Documented API change from ticket #84.
| 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 | 10 | Felix Tiede | }; /* End enum Digest */ |
| 18 | 1 | Felix Tiede | |
| 19 | enum RevocationReason { |
||
| 20 | Unspecified, |
||
| 21 | KeyCompromise, |
||
| 22 | CACompromise, |
||
| 23 | AffilitionChanged, |
||
| 24 | Superseded, |
||
| 25 | CessationOfOperation, |
||
| 26 | CertificateHold, |
||
| 27 | RemoveFromCRL = 8 |
||
| 28 | 10 | Felix Tiede | }; /* End enum RevocationReason */ |
| 29 | 1 | Felix Tiede | |
| 30 | |||
| 31 | 6 | Felix Tiede | class OpenSSLException : public std::exception |
| 32 | { |
||
| 33 | public: |
||
| 34 | ~OpenSSLException() throw(); |
||
| 35 | 1 | Felix Tiede | |
| 36 | 5 | Felix Tiede | const char * what() const throw(); |
| 37 | 10 | Felix Tiede | const char * where() const throw(); |
| 38 | 1 | Felix Tiede | |
| 39 | 6 | Felix Tiede | protected: |
| 40 | 10 | Felix Tiede | OpenSSLException(const QString&, const char* = NULL, int = 0) throw(); |
| 41 | OpenSSLException(const OpenSSLException&) throw(); |
||
| 42 | }; /* End class OpenSSLException */ |
||
| 43 | 1 | Felix Tiede | |
| 44 | |||
| 45 | class SigningException : public std::exception |
||
| 46 | { |
||
| 47 | public: |
||
| 48 | enum Operation { |
||
| 49 | SignCsr, |
||
| 50 | SignCrl, |
||
| 51 | 10 | Felix Tiede | }; /* End enum Operation */ |
| 52 | 1 | Felix Tiede | |
| 53 | enum Failure { |
||
| 54 | NoCACertificate, |
||
| 55 | KeyMismatch, |
||
| 56 | SerialConstraint, |
||
| 57 | TimeConstraint, |
||
| 58 | ExtensionError, |
||
| 59 | ObjectError, |
||
| 60 | 10 | Felix Tiede | }; /* End enum Failure */ |
| 61 | 1 | Felix Tiede | |
| 62 | ~SigningException() throw(); |
||
| 63 | |||
| 64 | 10 | Felix Tiede | Operation operation() const throw(); |
| 65 | Failure failure() const throw(); |
||
| 66 | 9 | Felix Tiede | const char * what() const throw(); |
| 67 | 10 | Felix Tiede | const char * where() const throw(); |
| 68 | 1 | Felix Tiede | |
| 69 | 9 | Felix Tiede | protected: |
| 70 | 10 | Felix Tiede | SigningException(Operation, Failure, const QString&, const char* = NULL, int = 0) throw(); |
| 71 | SigningException(const SigningException&) throw(); |
||
| 72 | 1 | Felix Tiede | |
| 73 | 10 | Felix Tiede | void setFailure(Failure) throw(); |
| 74 | void setMessage(const QString&) throw(); |
||
| 75 | }; /* End class SigningException */ |
||
| 76 | 6 | Felix Tiede | |
| 77 | 1 | Felix Tiede | |
| 78 | 6 | Felix Tiede | class Extension { |
| 79 | 1 | Felix Tiede | public: |
| 80 | 6 | Felix Tiede | struct ObjectID { |
| 81 | 1 | Felix Tiede | QString oid; |
| 82 | QString shortName; |
||
| 83 | QString longName; |
||
| 84 | 10 | Felix Tiede | }; /* End struct ObjectID */ |
| 85 | 1 | Felix Tiede | |
| 86 | 10 | Felix Tiede | Extension(const ObjectID&, const QString&, |
| 87 | bool = false, bool = false); |
||
| 88 | 6 | Felix Tiede | ~Extension(); |
| 89 | |||
| 90 | const ObjectID oid() const; |
||
| 91 | |||
| 92 | const QString value() const; |
||
| 93 | 10 | Felix Tiede | void setValue(const QString&); |
| 94 | 6 | Felix Tiede | |
| 95 | bool critical() const; |
||
| 96 | 10 | Felix Tiede | void setCritical(bool); |
| 97 | 1 | Felix Tiede | |
| 98 | bool replace() const; |
||
| 99 | 10 | Felix Tiede | void setReplace(bool); |
| 100 | 1 | Felix Tiede | |
| 101 | 10 | Felix Tiede | bool operator==(const Extension&) const; |
| 102 | Extension& operator=(const Extension&); |
||
| 103 | 6 | Felix Tiede | |
| 104 | 1 | Felix Tiede | protected: |
| 105 | 10 | Felix Tiede | Extension(const QString&, const QString&, |
| 106 | bool = false, bool = false); |
||
| 107 | Extension(int, const QString&, |
||
| 108 | bool = false, bool = false); |
||
| 109 | Extension(const X509_EXTENSION*); |
||
| 110 | X509_EXTENSION* handle(X509V3_CTX* = NULL) const; |
||
| 111 | }; /* End class Extension */ |
||
| 112 | 1 | Felix Tiede | typedef QList< Extension > ExtensionList; |
| 113 | |||
| 114 | struct CRLEntry { |
||
| 115 | quint64 serial; |
||
| 116 | RevocationReason reason; |
||
| 117 | QDateTime timestamp; |
||
| 118 | 10 | Felix Tiede | }; /* End struct CRLEntry */ |
| 119 | 1 | Felix Tiede | typedef QList< CRLEntry > CRL; |
| 120 | |||
| 121 | QString version(); |
||
| 122 | QString build_information(); |
||
| 123 | |||
| 124 | quint64 random(); |
||
| 125 | |||
| 126 | ExtensionList emailCertExtensions(); |
||
| 127 | |||
| 128 | |||
| 129 | 10 | Felix Tiede | class Key : public QSslKey |
| 130 | { |
||
| 131 | public: |
||
| 132 | Key(const QSslKey& = QSslKey()); |
||
| 133 | Key(const Key&); |
||
| 134 | ~Key(); |
||
| 135 | 1 | Felix Tiede | |
| 136 | 10 | Felix Tiede | operator=(const Key&); |
| 137 | 1 | Felix Tiede | |
| 138 | 10 | Felix Tiede | static const Key generateKeyPair(int = 2048, QSsl::KeyAlgorithm = QSsl::Rsa); |
| 139 | |||
| 140 | protected: |
||
| 141 | EVP_PKEY* handle() const; |
||
| 142 | }; /* End class Key */ |
||
| 143 | |||
| 144 | |||
| 145 | class Request |
||
| 146 | { |
||
| 147 | public: |
||
| 148 | Request(const QByteArray& = QByteArray(), QSsl::EncodingFormat = QSsl::Pem); |
||
| 149 | Request(const Request&) |
||
| 150 | ~Request(); |
||
| 151 | |||
| 152 | bool isNull() const; |
||
| 153 | |||
| 154 | QByteArray subject() const; |
||
| 155 | |||
| 156 | ExtensionList extensions() const; |
||
| 157 | |||
| 158 | QByteArray toDer() const; |
||
| 159 | QByteArray toPem() const; |
||
| 160 | |||
| 161 | QByteArray version() const; |
||
| 162 | |||
| 163 | bool operator!=(const Request&) const; |
||
| 164 | bool operator==(const Request&) const; |
||
| 165 | |||
| 166 | Request& operator=(const Request&); |
||
| 167 | |||
| 168 | static Request generate(const Key&, const QByteArray&, |
||
| 169 | const ExtensionList& = ExtensionList(), |
||
| 170 | Digest = SHA256); |
||
| 171 | |||
| 172 | protected: |
||
| 173 | X509_REQ* handle() const; |
||
| 174 | }; /* End class Request */ |
||
| 175 | |||
| 176 | |||
| 177 | 1 | Felix Tiede | class Certificate : public QSslCertificate |
| 178 | { |
||
| 179 | public: |
||
| 180 | struct SignatureDetails { |
||
| 181 | quint64 serial; |
||
| 182 | Digest digest; |
||
| 183 | QDateTime effectiveDate; |
||
| 184 | QDateTime expiryDate; |
||
| 185 | 10 | Felix Tiede | }; /* End struct SignatureDetails */ |
| 186 | 1 | Felix Tiede | |
| 187 | 10 | Felix Tiede | Certificate(const QSslCertificate& = QSslCertificate()); |
| 188 | Certificate(const Certificate&); |
||
| 189 | 1 | Felix Tiede | |
| 190 | 10 | Felix Tiede | Certificate(const Key&, const QString&, |
| 191 | const SignatureDetails&, const ExtensionList&); |
||
| 192 | |||
| 193 | ~Certificate(); |
||
| 194 | |||
| 195 | 1 | Felix Tiede | bool isCA() const; |
| 196 | 10 | Felix Tiede | bool keyMatch(const Key&) const; |
| 197 | 1 | Felix Tiede | |
| 198 | 10 | Felix Tiede | ExtensionList extensions() const; |
| 199 | 1 | Felix Tiede | |
| 200 | 11 | Felix Tiede | Certificate sign(const Request&, const Key&, |
| 201 | const SignatureDetails&, |
||
| 202 | const ExtensionList&) const; |
||
| 203 | 1 | Felix Tiede | |
| 204 | 11 | Felix Tiede | QByteArray sign(const CRL&, const Key&, |
| 205 | const SignatureDetails&, |
||
| 206 | const ExtensionList&, QSsl::EncodingFormat = QSsl::Der) const; |
||
| 207 | 10 | Felix Tiede | }; /* End class Certificate */ |
| 208 | |||
| 209 | }; /* End namespace OpenSSL */ |
||
| 210 | }; /* End namespace Kca */</code></pre> |