Extend encryption algorithm automation.
[shibboleth/xmltooling.git] / xmltooling / security / impl / BasicX509Credential.cpp
index 05b7a30..0550baa 100644 (file)
@@ -110,3 +110,67 @@ void X509Credential::extractNames(XSECCryptoX509* x509, set<string>& names)
         GENERAL_NAMES_free(altnames);
     }
 }
+
+const char* BasicX509Credential::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 BasicX509Credential::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;
+}