Package fixes.
[shibboleth/cpp-xmltooling.git] / xmltooling / security / BasicX509Credential.h
index b6accbe..e33e785 100644 (file)
@@ -36,6 +36,11 @@ namespace xmltooling {
     class XMLTOOL_API BasicX509Credential : public virtual X509Credential
     {
     protected:
+        /**
+         * Constructor.
+         * 
+         * @param ownCerts  true iff any certificates subsequently stored should be freed by destructor
+         */
         BasicX509Credential(bool ownCerts) : m_key(NULL), m_ownCerts(ownCerts), m_crl(NULL), m_keyInfo(NULL), m_compactKeyInfo(NULL) {
         }
 
@@ -56,6 +61,15 @@ namespace xmltooling {
         /** Key names (derived from credential, KeyInfo, or both). */
         std::set<std::string> m_keyNames;
 
+        /** Subject DN. */
+        std::string m_subjectName;
+
+        /** Issuer DN. */
+        std::string m_issuerName;
+
+        /** Serial number. */
+        std::string m_serial;
+
         /** The X.509 certificate chain. */
         std::vector<XSECCryptoX509*> m_xseccerts;
 
@@ -75,71 +89,15 @@ namespace xmltooling {
          * Initializes (or reinitializes) a ds:KeyInfo to represent the Credential.
          */
         void initKeyInfo();
-        
+
     public:
         virtual ~BasicX509Credential();
         
-        const char* getAlgorithm() const {
-            if (m_key) {
-                switch (m_key->getKeyType()) {
-                    case XSECCryptoKey::KEY_RSA_PRIVATE:
-                    case XSECCryptoKey::KEY_RSA_PUBLIC:
-                    case XSECCryptoKey::KEY_RSA_PAIR:
-                        return "RSA";
-
-                    case XSECCryptoKey::KEY_DSA_PRIVATE:
-                    case XSECCryptoKey::KEY_DSA_PUBLIC:
-                    case XSECCryptoKey::KEY_DSA_PAIR:
-                        return "DSA";
-                    
-                    case XSECCryptoKey::KEY_HMAC:
-                        return "HMAC";
-
-                    case XSECCryptoKey::KEY_SYMMETRIC: {
-                        XSECCryptoSymmetricKey* skey = static_cast<XSECCryptoSymmetricKey*>(m_key);
-                        switch (skey->getSymmetricKeyType()) {
-                            case XSECCryptoSymmetricKey::KEY_3DES_192:
-                                return "DESede";
-                            case XSECCryptoSymmetricKey::KEY_AES_128:
-                                return "AES";
-                            case XSECCryptoSymmetricKey::KEY_AES_192:
-                                return "AES";
-                            case XSECCryptoSymmetricKey::KEY_AES_256:
-                                return "AES";
-                        }
-                    }
-                }
-            }
-            return NULL;
-        }
-
-        unsigned int getKeySize() const {
-            if (m_key) {
-                switch (m_key->getKeyType()) {
-                    case XSECCryptoKey::KEY_RSA_PRIVATE:
-                    case XSECCryptoKey::KEY_RSA_PUBLIC:
-                    case XSECCryptoKey::KEY_RSA_PAIR: {
-                        XSECCryptoKeyRSA* rkey = static_cast<XSECCryptoKeyRSA*>(m_key);
-                        return rkey->getLength();
-                    }
-
-                    case XSECCryptoKey::KEY_SYMMETRIC: {
-                        XSECCryptoSymmetricKey* skey = static_cast<XSECCryptoSymmetricKey*>(m_key);
-                        switch (skey->getSymmetricKeyType()) {
-                            case XSECCryptoSymmetricKey::KEY_3DES_192:
-                                return 192;
-                            case XSECCryptoSymmetricKey::KEY_AES_128:
-                                return 128;
-                            case XSECCryptoSymmetricKey::KEY_AES_192:
-                                return 192;
-                            case XSECCryptoSymmetricKey::KEY_AES_256:
-                                return 256;
-                        }
-                    }
-                }
-            }
-            return 0;
+        unsigned int getUsage() const {
+            return UNSPECIFIED_CREDENTIAL;
         }
+        const char* getAlgorithm() const;
+        unsigned int getKeySize() const;
 
         XSECCryptoKey* getPrivateKey() const {
             if (m_key) {
@@ -176,6 +134,20 @@ namespace xmltooling {
         XSECCryptoX509CRL* getCRL() const {
             return m_crl;
         }
+
+        const char* getSubjectName() const {
+            return m_subjectName.c_str();
+        }
+
+        const char* getIssuerName() const {
+            return m_issuerName.c_str();
+        }
+
+        const char* getSerialNumber() const {
+            return m_serial.c_str();
+        }
+
+        void extract();
     };
 };