Project

General

Profile

API » History » Revision 6

Revision 5 (Felix Tiede, 02/23/2013 11:12 AM) → Revision 6/11 (Felix Tiede, 05/09/2013 07:17 AM)

h1. Public API 

 The real code is documented, of course. See header files in source:src. 
 For a history of how it was created, see ticket #34. 

 Regardless of the files the API is split into, in C++ it looks like this: 
 <pre><code class="cplusplus">namespace Kca 
 { 
 namespace OpenSSL 
 { 
   enum Digest { 
     RIPEMD160, 
     SHA1, 
     SHA256, 
     SHA384, 
     SHA512, 
   }; 

   enum RevocationReason { 
     Unspecified, 
     KeyCompromise, 
     CACompromise, 
     AffilitionChanged, 
     Superseded, 
     CessationOfOperation, 
     CertificateHold, 
     RemoveFromCRL = 8 
   }; 


   

   class OpenSSLException : public std::exception 
   X509Extension { 
     public: 
       ~OpenSSLException() throw(); 

       const bool replace; 
     bool critical; 
     QString message() const throw(); 

     protected: 
       OpenSSLException(const QString& message) throw(); 
   }; 


   class SigningException : public std::exception 
   { name; 
     public: 
       enum Operation { 
         SignCsr, 
         SignCrl, 
       }; 

       enum Failure { 
         NoCACertificate, 
         KeyMismatch, 
         TimeConstraint, 
         ExtensionError, 
         ObjectError, 
       }; 

       ~SigningException() throw(); 

       const Operation operation() const throw(); 
       const Failure failure() const throw(); 
       const QString description() const throw(); value; 

     protected: 
       SigningException(Operation operation, Failure failure, const X509Extension(const QString& description) throw(); 

       void setFailure(Failure failure) throw(); 
       void setDescription(const QString& description) throw(); 
   }; 


   class Extension { 
     public: 
       struct ObjectID { 
         QString oid; 
         QString shortName; 
         QString longName; 
       }; 

       Extension(const ObjectID& oid, name, const QString& value, 
                 
                   bool critical=false, bool replace=false); 
       ~Extension(); 

       const ObjectID oid() const; 

       const QString value() const; 
       void setValue(const QString& value); 

       bool critical() const; 
       void setCritical(bool critical); 

       bool replace() const; 
       void setReplace(bool replace); 

       bool operator==(const Extension& other) const; 
       Extension& operator=(const Extension& other); 

     protected: 
       Extension(const QString& name, const QString& value, 
                 bool critical = false, bool replace = false) throw(OpenSSLException); 
       X509_EXTENSION* handle(X509V3_CTX* ctx = NULL) const throw(OpenSSLException); 
   }; 
   typedef QList< Extension X509Extension > ExtensionList; 

   struct CRLEntry { 
     quint64 serial; 
     RevocationReason reason; 
     QDateTime timestamp; 
   }; 
   typedef QList< CRLEntry > CRL; 

   QString version(); 
   QString build_information(); 

   quint64 random(); 
   const QSslKey generateKeyPair(const unsigned int length = 2048); 
   const QByteArray generateRequest(const QSslKey& key, 
                                    const QString& subject, 
                                    const ExtensionList& extensions, 
                                    Digest digest = SHA256); 

   ExtensionList emailCertExtensions(); 

   QString requestSubject(const QByteArray& request); 
   ExtensionList requestExtensions(const QByteArray& request); 



   


   class SigningException : public std::exception 
   { 
     public: 
       enum Operation { 
         SignCsr, 
         SignCrl, 
       }; 

       enum Failure { 
         NoCACertificate, 
         KeyMismatch, 
         TimeConstraint, 
         ExtensionError, 
         ObjectError, 
       }; 

       ~SigningException() throw(); 

       const Operation operation() const throw(); 
       const Failure failure() const throw(); 
       const QString description() const throw(); 

     protected: 
       SigningException(Operation operation, Failure failure, const QString& description) throw(); 

       void setFailure(Failure failure) throw(); 
       void setDescription(const QString& description) throw(); 
   }; 


   class Certificate : public QSslCertificate 
   { 
     public: 
       struct SignatureDetails { 
         quint64 serial; 
         Digest digest; 
         QDateTime effectiveDate; 
         QDateTime expiryDate; 
       }; 

       Certificate(const QSslKey& key, const QString& subject, 
                   const SignatureDetails& details, const ExtensionList& extensions) throw(SigningException); 

       bool isCA() const; 
       bool keyMatch(const QSslKey& key) const; 

       const QSslCertificate sign(const QByteArray& request, const QSslKey& signingKey, 
                                  const SignatureDetails& details, 
                                  const ExtensionList& extensions) const throw(SigningException); 

       const QByteArray sign(const CRL& crl, const QSslKey& signingKey, 
                             const SignatureDetails& details, 
                             const ExtensionList& extensions) const throw(SigningException); 
   }; 

 }; 
 };</code></pre>