X-Git-Url: http://www.project-moonshot.org/gitweb/?p=shibboleth%2Fcpp-xmltooling.git;a=blobdiff_plain;f=xmltooling%2Fsecurity%2FBasicX509Credential.h;h=e33e7855d2498bf47c34d634d24c538fe3b7fb13;hp=6435655253626f8262910075444fdc5fbe311c23;hb=a934a8b4cfcb4c9a6aabad577f7194eaeba9f78e;hpb=d96a01ce4d9648bb3186f74d43610b6f12d49758 diff --git a/xmltooling/security/BasicX509Credential.h b/xmltooling/security/BasicX509Credential.h index 6435655..e33e785 100644 --- a/xmltooling/security/BasicX509Credential.h +++ b/xmltooling/security/BasicX509Credential.h @@ -24,13 +24,10 @@ #define __xmltooling_basicx509cred_h__ #include +#include #include -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) { } @@ -59,6 +61,15 @@ namespace xmltooling { /** Key names (derived from credential, KeyInfo, or both). */ std::set 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 m_xseccerts; @@ -78,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(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(m_key); - return rkey->getLength(); - } - - case XSECCryptoKey::KEY_SYMMETRIC: { - XSECCryptoSymmetricKey* skey = static_cast(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) { @@ -166,8 +121,10 @@ namespace xmltooling { return m_keyNames; } - 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(); } const std::vector& getEntityCertificateChain() const { @@ -177,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(); }; };