Add hashing options to key extraction support.
[shibboleth/cpp-sp.git] / shibsp / attribute / KeyInfoAttributeDecoder.cpp
index 86b8e02..0bb9f3e 100644 (file)
@@ -53,7 +53,7 @@ namespace shibsp {
             auto_ptr<Credential> cred (getKeyInfoResolver()->resolve(k, Credential::RESOLVE_KEYS));\r
             if (cred.get()) {\r
                 dest.push_back(string());\r
-                dest.back() = SecurityHelper::getDEREncoding(*cred.get());\r
+                dest.back() = SecurityHelper::getDEREncoding(*cred.get(), m_hash);\r
                 if (dest.back().empty())\r
                     dest.pop_back();\r
             }\r
@@ -63,6 +63,7 @@ namespace shibsp {
             return m_keyInfoResolver ? m_keyInfoResolver : XMLToolingConfig::getConfig().getKeyInfoResolver();\r
         }\r
 \r
+        bool m_hash;\r
         KeyInfoResolver* m_keyInfoResolver;\r
     };\r
 \r
@@ -72,13 +73,16 @@ namespace shibsp {
     }\r
 \r
     static const XMLCh _KeyInfoResolver[] = UNICODE_LITERAL_15(K,e,y,I,n,f,o,R,e,s,o,l,v,e,r);\r
-    static const XMLCh type[] =             UNICODE_LITERAL_4(t,y,p,e);\r
+    static const XMLCh _hash[] =            UNICODE_LITERAL_4(h,a,s,h);\r
+    static const XMLCh _type[] =            UNICODE_LITERAL_4(t,y,p,e);\r
 };\r
 \r
-KeyInfoAttributeDecoder::KeyInfoAttributeDecoder(const DOMElement* e) : AttributeDecoder(e), m_keyInfoResolver(NULL) {\r
+KeyInfoAttributeDecoder::KeyInfoAttributeDecoder(const DOMElement* e) : AttributeDecoder(e), m_hash(false), m_keyInfoResolver(NULL) {\r
+    const XMLCh* flag = e ? e->getAttributeNS(NULL, _hash) : NULL;\r
+    m_hash = (flag && (*flag == chLatin_t || *flag == chDigit_1));\r
     e = e ? XMLHelper::getFirstChildElement(e,_KeyInfoResolver) : NULL;\r
     if (e) {\r
-        auto_ptr_char t(e->getAttributeNS(NULL,type));\r
+        auto_ptr_char t(e->getAttributeNS(NULL, _type));\r
         if (t.get() && *t.get())\r
             m_keyInfoResolver = XMLToolingConfig::getConfig().KeyInfoResolverManager.newPlugin(t.get(), e);\r
         else\r