Package fixes.
[shibboleth/cpp-xmltooling.git] / xmltooling / security / BasicX509Credential.h
index 6225f69..e33e785 100644 (file)
 #define __xmltooling_basicx509cred_h__
 
 #include <xmltooling/security/X509Credential.h>
+#include <xmltooling/signature/KeyInfo.h>
 
 #include <algorithm>
 
-namespace xmlsignature {
-    class XMLTOOL_API KeyInfo;
-};
-
 namespace xmltooling {
 
     /**
@@ -39,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 +58,18 @@ namespace xmltooling {
         /** The private/secret key/keypair. */
         XSECCryptoKey* m_key;
 
+        /** 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,10 +89,16 @@ namespace xmltooling {
          * Initializes (or reinitializes) a ds:KeyInfo to represent the Credential.
          */
         void initKeyInfo();
-        
+
     public:
         virtual ~BasicX509Credential();
         
+        unsigned int getUsage() const {
+            return UNSPECIFIED_CREDENTIAL;
+        }
+        const char* getAlgorithm() const;
+        unsigned int getKeySize() const;
+
         XSECCryptoKey* getPrivateKey() const {
             if (m_key) {
                 XSECCryptoKey::KeyType type = m_key->getKeyType();
@@ -96,19 +116,17 @@ namespace xmltooling {
             }
             return NULL;
         }
+        
+        const std::set<std::string>& getKeyNames() const {
+            return m_keyNames;
+        }
 
-        std::vector<std::string>::size_type getKeyNames(std::vector<std::string>& results) const;
-
-        const xmlsignature::KeyInfo* getKeyInfo(bool compact=false) const {
-            return compact ? m_compactKeyInfo : (m_keyInfo ? m_keyInfo : m_compactKeyInfo);
+        xmlsignature::KeyInfo* getKeyInfo(bool compact=false) const {
+            if (compact || !m_keyInfo)
+                return m_compactKeyInfo ? m_compactKeyInfo->cloneKeyInfo() : NULL;
+            return m_keyInfo->cloneKeyInfo();
         }
         
-        /**
-         * Gets an immutable collection of certificates in the entity's trust chain. The entity certificate is contained
-         * within this list. No specific ordering of the certificates is guaranteed.
-         * 
-         * @return a certificate chain
-         */
         const std::vector<XSECCryptoX509*>& getEntityCertificateChain() const {
             return m_xseccerts;
         }
@@ -116,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();
     };
 };