blob: 7a733ded9a1641c6c92eb0d401548261f4306faf [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
/*
* XSEC
*
* DSIGConstants := Definitions of varius DSIG constants (mainly strings)
*
* Author(s): Berin Lautenbach
*
* $Id$
*
*/
#include <xsec/dsig/DSIGConstants.hpp>
#include <xsec/utils/XSECDOMUtils.hpp>
#include <xercesc/util/XMLUniDefs.hpp>
XERCES_CPP_NAMESPACE_USE
// We need a special version of XSEC_RELEASE_XMLCH
#undef XSEC_RELEASE_XMLCH
#define XSEC_RELEASE_XMLCH(x) XMLString::release((XMLCh **) &x)
// --------------------------------------------------------------------------------
// Some useful defines
// --------------------------------------------------------------------------------
static XMLCh s_dsa[] = {
chLatin_d,
chLatin_s,
chLatin_a,
chNull
};
static XMLCh s_rsa[] = {
chLatin_r,
chLatin_s,
chLatin_a,
chNull
};
static XMLCh s_ecdsa[] = {
chLatin_e,
chLatin_c,
chLatin_d,
chLatin_s,
chLatin_a,
chNull
};
static XMLCh s_hmac[] = {
chLatin_h,
chLatin_m,
chLatin_a,
chLatin_c,
chNull
};
static XMLCh s_sha1[] = {
chLatin_s,
chLatin_h,
chLatin_a,
chDigit_1,
chNull
};
static XMLCh s_sha224[] = {
chLatin_s,
chLatin_h,
chLatin_a,
chDigit_2,
chDigit_2,
chDigit_4,
chNull
};
static XMLCh s_sha256[] = {
chLatin_s,
chLatin_h,
chLatin_a,
chDigit_2,
chDigit_5,
chDigit_6,
chNull
};
static XMLCh s_sha384[] = {
chLatin_s,
chLatin_h,
chLatin_a,
chDigit_3,
chDigit_8,
chDigit_4,
chNull
};
static XMLCh s_sha512[] = {
chLatin_s,
chLatin_h,
chLatin_a,
chDigit_5,
chDigit_1,
chDigit_2,
chNull
};
static XMLCh s_md5[] = {
chLatin_m,
chLatin_d,
chDigit_5,
chNull
};
// --------------------------------------------------------------------------------
// Constant Strings Storage
// --------------------------------------------------------------------------------
const XMLCh * DSIGConstants::s_unicodeStrEmpty; // ""
const XMLCh * DSIGConstants::s_unicodeStrNL; // "\n"
const XMLCh * DSIGConstants::s_unicodeStrXmlns; // "xmlns"
const XMLCh * DSIGConstants::s_unicodeStrURI;
const XMLCh * DSIGConstants::s_unicodeStrAlgorithm;
const XMLCh * DSIGConstants::s_unicodeStrURIDSIG;
const XMLCh * DSIGConstants::s_unicodeStrURIDSIG11;
const XMLCh * DSIGConstants::s_unicodeStrURIEC;
const XMLCh * DSIGConstants::s_unicodeStrURIXPF;
const XMLCh * DSIGConstants::s_unicodeStrURIXENC;
const XMLCh * DSIGConstants::s_unicodeStrURIXENC11;
const XMLCh * DSIGConstants::s_unicodeStrURISIGBASE;
const XMLCh * DSIGConstants::s_unicodeStrURISIGBASEMORE;
const XMLCh * DSIGConstants::s_unicodeStrURISIGBASE11;
const XMLCh * DSIGConstants::s_unicodeStrURIRawX509;
const XMLCh * DSIGConstants::s_unicodeStrURISHA1;
const XMLCh * DSIGConstants::s_unicodeStrURISHA224;
const XMLCh * DSIGConstants::s_unicodeStrURISHA256;
const XMLCh * DSIGConstants::s_unicodeStrURISHA384;
const XMLCh * DSIGConstants::s_unicodeStrURISHA512;
const XMLCh * DSIGConstants::s_unicodeStrURIMD5; // Not recommended
const XMLCh * DSIGConstants::s_unicodeStrURIBASE64;
const XMLCh * DSIGConstants::s_unicodeStrURIXPATH;
const XMLCh * DSIGConstants::s_unicodeStrURIXSLT;
const XMLCh * DSIGConstants::s_unicodeStrURIENVELOPE;
const XMLCh * DSIGConstants::s_unicodeStrURIC14N_NOC;
const XMLCh * DSIGConstants::s_unicodeStrURIC14N_COM;
const XMLCh * DSIGConstants::s_unicodeStrURIC14N11_NOC;
const XMLCh * DSIGConstants::s_unicodeStrURIC14N11_COM;
const XMLCh * DSIGConstants::s_unicodeStrURIEXC_C14N_NOC;
const XMLCh * DSIGConstants::s_unicodeStrURIEXC_C14N_COM;
const XMLCh * DSIGConstants::s_unicodeStrURIDSA_SHA1;
const XMLCh * DSIGConstants::s_unicodeStrURIDSA_SHA256;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_MD5;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_SHA1;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_SHA224;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_SHA256;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_SHA384;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_SHA512;
const XMLCh * DSIGConstants::s_unicodeStrURIECDSA_SHA1;
const XMLCh * DSIGConstants::s_unicodeStrURIECDSA_SHA224;
const XMLCh * DSIGConstants::s_unicodeStrURIECDSA_SHA256;
const XMLCh * DSIGConstants::s_unicodeStrURIECDSA_SHA384;
const XMLCh * DSIGConstants::s_unicodeStrURIECDSA_SHA512;
const XMLCh * DSIGConstants::s_unicodeStrURIHMAC_SHA1;
const XMLCh * DSIGConstants::s_unicodeStrURIHMAC_SHA224;
const XMLCh * DSIGConstants::s_unicodeStrURIHMAC_SHA256;
const XMLCh * DSIGConstants::s_unicodeStrURIHMAC_SHA384;
const XMLCh * DSIGConstants::s_unicodeStrURIHMAC_SHA512;
const XMLCh * DSIGConstants::s_unicodeStrURIXMLNS;
const XMLCh * DSIGConstants::s_unicodeStrURIMANIFEST;
const XMLCh * DSIGConstants::s_unicodeStrURI3DES_CBC;
const XMLCh * DSIGConstants::s_unicodeStrURIAES128_CBC;
const XMLCh * DSIGConstants::s_unicodeStrURIAES192_CBC;
const XMLCh * DSIGConstants::s_unicodeStrURIAES256_CBC;
const XMLCh * DSIGConstants::s_unicodeStrURIAES128_GCM;
const XMLCh * DSIGConstants::s_unicodeStrURIAES192_GCM;
const XMLCh * DSIGConstants::s_unicodeStrURIAES256_GCM;
const XMLCh * DSIGConstants::s_unicodeStrURIKW_3DES;
const XMLCh * DSIGConstants::s_unicodeStrURIKW_AES128;
const XMLCh * DSIGConstants::s_unicodeStrURIKW_AES192;
const XMLCh * DSIGConstants::s_unicodeStrURIKW_AES256;
const XMLCh * DSIGConstants::s_unicodeStrURIKW_AES128_PAD;
const XMLCh * DSIGConstants::s_unicodeStrURIKW_AES192_PAD;
const XMLCh * DSIGConstants::s_unicodeStrURIKW_AES256_PAD;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_1_5;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_OAEP_MGFP1;
const XMLCh * DSIGConstants::s_unicodeStrURIRSA_OAEP;
const XMLCh * DSIGConstants::s_unicodeStrURIMGF1_BASE;
const XMLCh * DSIGConstants::s_unicodeStrURIMGF1_SHA1;
const XMLCh * DSIGConstants::s_unicodeStrURIMGF1_SHA224;
const XMLCh * DSIGConstants::s_unicodeStrURIMGF1_SHA256;
const XMLCh * DSIGConstants::s_unicodeStrURIMGF1_SHA384;
const XMLCh * DSIGConstants::s_unicodeStrURIMGF1_SHA512;
const XMLCh * DSIGConstants::s_unicodeStrURIXENC_ELEMENT;
const XMLCh * DSIGConstants::s_unicodeStrURIXENC_CONTENT;
const XMLCh * DSIGConstants::s_unicodeStrPROVOpenSSL;
const XMLCh * DSIGConstants::s_unicodeStrPROVWinCAPI;
const XMLCh * DSIGConstants::s_unicodeStrPROVNSS;
// --------------------------------------------------------------------------------
// Constant Strings Creation and Deletion
// --------------------------------------------------------------------------------
void DSIGConstants::create() {
// Set up the static strings
s_unicodeStrEmpty = XMLString::transcode("");
s_unicodeStrNL = XMLString::transcode("\n");
s_unicodeStrXmlns = XMLString::transcode("xmlns");
s_unicodeStrURI = XMLString::transcode("URI");
s_unicodeStrAlgorithm = XMLString::transcode("Algorithm");
s_unicodeStrURIRawX509 = XMLString::transcode(URI_ID_RAWX509);
s_unicodeStrURIDSIG = XMLString::transcode(URI_ID_DSIG);
s_unicodeStrURIDSIG11 = XMLString::transcode(URI_ID_DSIG11);
s_unicodeStrURIEC = XMLString::transcode(URI_ID_EC);
s_unicodeStrURIXPF = XMLString::transcode(URI_ID_XPF);
s_unicodeStrURIXENC = XMLString::transcode(URI_ID_XENC);
s_unicodeStrURIXENC11 = XMLString::transcode(URI_ID_XENC11);
s_unicodeStrURISIGBASE = XMLString::transcode(URI_ID_SIG_BASE);
s_unicodeStrURISIGBASEMORE = XMLString::transcode(URI_ID_SIG_BASEMORE);
s_unicodeStrURISIGBASE11 = XMLString::transcode(URI_ID_SIG_BASE11);
s_unicodeStrURISHA1 = XMLString::transcode(URI_ID_SHA1);
s_unicodeStrURISHA224 = XMLString::transcode(URI_ID_SHA224);
s_unicodeStrURISHA256 = XMLString::transcode(URI_ID_SHA256);
s_unicodeStrURISHA384 = XMLString::transcode(URI_ID_SHA384);
s_unicodeStrURISHA512 = XMLString::transcode(URI_ID_SHA512);
s_unicodeStrURIMD5 = XMLString::transcode(URI_ID_MD5);
s_unicodeStrURIBASE64 = XMLString::transcode(URI_ID_BASE64);
s_unicodeStrURIXPATH = XMLString::transcode(URI_ID_XPATH);
s_unicodeStrURIXSLT = XMLString::transcode(URI_ID_XSLT);
s_unicodeStrURIENVELOPE = XMLString::transcode(URI_ID_ENVELOPE);
s_unicodeStrURIC14N_NOC = XMLString::transcode(URI_ID_C14N_NOC);
s_unicodeStrURIC14N_COM = XMLString::transcode(URI_ID_C14N_COM);
s_unicodeStrURIC14N11_NOC = XMLString::transcode(URI_ID_C14N11_NOC);
s_unicodeStrURIC14N11_COM = XMLString::transcode(URI_ID_C14N11_COM);
s_unicodeStrURIEXC_C14N_NOC = XMLString::transcode(URI_ID_EXC_C14N_NOC);
s_unicodeStrURIEXC_C14N_COM = XMLString::transcode(URI_ID_EXC_C14N_COM);
s_unicodeStrURIDSA_SHA1 = XMLString::transcode(URI_ID_DSA_SHA1);
s_unicodeStrURIDSA_SHA256 = XMLString::transcode(URI_ID_DSA_SHA256);
s_unicodeStrURIRSA_MD5 = XMLString::transcode(URI_ID_RSA_MD5);
s_unicodeStrURIRSA_SHA1 = XMLString::transcode(URI_ID_RSA_SHA1);
s_unicodeStrURIRSA_SHA224 = XMLString::transcode(URI_ID_RSA_SHA224);
s_unicodeStrURIRSA_SHA256 = XMLString::transcode(URI_ID_RSA_SHA256);
s_unicodeStrURIRSA_SHA384 = XMLString::transcode(URI_ID_RSA_SHA384);
s_unicodeStrURIRSA_SHA512 = XMLString::transcode(URI_ID_RSA_SHA512);
s_unicodeStrURIECDSA_SHA1 = XMLString::transcode(URI_ID_ECDSA_SHA1);
s_unicodeStrURIECDSA_SHA224 = XMLString::transcode(URI_ID_ECDSA_SHA224);
s_unicodeStrURIECDSA_SHA256 = XMLString::transcode(URI_ID_ECDSA_SHA256);
s_unicodeStrURIECDSA_SHA384 = XMLString::transcode(URI_ID_ECDSA_SHA384);
s_unicodeStrURIECDSA_SHA512 = XMLString::transcode(URI_ID_ECDSA_SHA512);
s_unicodeStrURIHMAC_SHA1 = XMLString::transcode(URI_ID_HMAC_SHA1);
s_unicodeStrURIHMAC_SHA224 = XMLString::transcode(URI_ID_HMAC_SHA224);
s_unicodeStrURIHMAC_SHA256 = XMLString::transcode(URI_ID_HMAC_SHA256);
s_unicodeStrURIHMAC_SHA384 = XMLString::transcode(URI_ID_HMAC_SHA384);
s_unicodeStrURIHMAC_SHA512 = XMLString::transcode(URI_ID_HMAC_SHA512);
s_unicodeStrURIXMLNS = XMLString::transcode(URI_ID_XMLNS);
s_unicodeStrURIMANIFEST = XMLString::transcode(URI_ID_MANIFEST);
s_unicodeStrURI3DES_CBC = XMLString::transcode(URI_ID_3DES_CBC);
s_unicodeStrURIAES128_CBC = XMLString::transcode(URI_ID_AES128_CBC);
s_unicodeStrURIAES192_CBC = XMLString::transcode(URI_ID_AES192_CBC);
s_unicodeStrURIAES256_CBC = XMLString::transcode(URI_ID_AES256_CBC);
s_unicodeStrURIAES128_GCM = XMLString::transcode(URI_ID_AES128_GCM);
s_unicodeStrURIAES192_GCM = XMLString::transcode(URI_ID_AES192_GCM);
s_unicodeStrURIAES256_GCM = XMLString::transcode(URI_ID_AES256_GCM);
s_unicodeStrURIKW_3DES = XMLString::transcode(URI_ID_KW_3DES);
s_unicodeStrURIKW_AES128 = XMLString::transcode(URI_ID_KW_AES128);
s_unicodeStrURIKW_AES192 = XMLString::transcode(URI_ID_KW_AES192);
s_unicodeStrURIKW_AES256 = XMLString::transcode(URI_ID_KW_AES256);
s_unicodeStrURIKW_AES128_PAD = XMLString::transcode(URI_ID_KW_AES128_PAD);
s_unicodeStrURIKW_AES192_PAD = XMLString::transcode(URI_ID_KW_AES192_PAD);
s_unicodeStrURIKW_AES256_PAD = XMLString::transcode(URI_ID_KW_AES256_PAD);
s_unicodeStrURIRSA_1_5 = XMLString::transcode(URI_ID_RSA_1_5);
s_unicodeStrURIRSA_OAEP_MGFP1 = XMLString::transcode(URI_ID_RSA_OAEP_MGFP1);
s_unicodeStrURIRSA_OAEP = XMLString::transcode(URI_ID_RSA_OAEP);
s_unicodeStrURIMGF1_BASE = XMLString::transcode(URI_ID_MGF1_BASE);
s_unicodeStrURIMGF1_SHA1 = XMLString::transcode(URI_ID_MGF1_SHA1);
s_unicodeStrURIMGF1_SHA224 = XMLString::transcode(URI_ID_MGF1_SHA224);
s_unicodeStrURIMGF1_SHA256 = XMLString::transcode(URI_ID_MGF1_SHA256);
s_unicodeStrURIMGF1_SHA384 = XMLString::transcode(URI_ID_MGF1_SHA384);
s_unicodeStrURIMGF1_SHA512 = XMLString::transcode(URI_ID_MGF1_SHA512);
s_unicodeStrURIXENC_ELEMENT = XMLString::transcode(URI_ID_XENC_ELEMENT);
s_unicodeStrURIXENC_CONTENT = XMLString::transcode(URI_ID_XENC_CONTENT);
s_unicodeStrPROVOpenSSL = XMLString::transcode(PROV_OPENSSL);
s_unicodeStrPROVWinCAPI = XMLString::transcode(PROV_WINCAPI);
s_unicodeStrPROVNSS = XMLString::transcode(PROV_NSS);
}
void DSIGConstants::destroy() {
// Delete the static strings
XSEC_RELEASE_XMLCH(s_unicodeStrEmpty);
XSEC_RELEASE_XMLCH(s_unicodeStrNL);
XSEC_RELEASE_XMLCH(s_unicodeStrXmlns);
XSEC_RELEASE_XMLCH(s_unicodeStrURI);
XSEC_RELEASE_XMLCH(s_unicodeStrAlgorithm);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRawX509);
XSEC_RELEASE_XMLCH(s_unicodeStrURIDSIG);
XSEC_RELEASE_XMLCH(s_unicodeStrURIDSIG11);
XSEC_RELEASE_XMLCH(s_unicodeStrURIEC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXPF);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXENC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXENC11);
XSEC_RELEASE_XMLCH(s_unicodeStrURISIGBASE);
XSEC_RELEASE_XMLCH(s_unicodeStrURISIGBASEMORE);
XSEC_RELEASE_XMLCH(s_unicodeStrURISIGBASE11);
XSEC_RELEASE_XMLCH(s_unicodeStrURISHA1);
XSEC_RELEASE_XMLCH(s_unicodeStrURISHA224);
XSEC_RELEASE_XMLCH(s_unicodeStrURISHA256);
XSEC_RELEASE_XMLCH(s_unicodeStrURISHA384);
XSEC_RELEASE_XMLCH(s_unicodeStrURISHA512);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMD5);
XSEC_RELEASE_XMLCH(s_unicodeStrURIBASE64);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXPATH);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXSLT);
XSEC_RELEASE_XMLCH(s_unicodeStrURIENVELOPE);
XSEC_RELEASE_XMLCH(s_unicodeStrURIC14N_NOC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIC14N_COM);
XSEC_RELEASE_XMLCH(s_unicodeStrURIC14N11_NOC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIC14N11_COM);
XSEC_RELEASE_XMLCH(s_unicodeStrURIEXC_C14N_NOC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIEXC_C14N_COM);
XSEC_RELEASE_XMLCH(s_unicodeStrURIDSA_SHA1);
XSEC_RELEASE_XMLCH(s_unicodeStrURIDSA_SHA256);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_MD5);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_SHA1);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_SHA224);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_SHA256);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_SHA384);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_SHA512);
XSEC_RELEASE_XMLCH(s_unicodeStrURIECDSA_SHA1);
XSEC_RELEASE_XMLCH(s_unicodeStrURIECDSA_SHA224);
XSEC_RELEASE_XMLCH(s_unicodeStrURIECDSA_SHA256);
XSEC_RELEASE_XMLCH(s_unicodeStrURIECDSA_SHA384);
XSEC_RELEASE_XMLCH(s_unicodeStrURIECDSA_SHA512);
XSEC_RELEASE_XMLCH(s_unicodeStrURIHMAC_SHA1);
XSEC_RELEASE_XMLCH(s_unicodeStrURIHMAC_SHA224);
XSEC_RELEASE_XMLCH(s_unicodeStrURIHMAC_SHA256);
XSEC_RELEASE_XMLCH(s_unicodeStrURIHMAC_SHA384);
XSEC_RELEASE_XMLCH(s_unicodeStrURIHMAC_SHA512);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXMLNS);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMANIFEST);
XSEC_RELEASE_XMLCH(s_unicodeStrURI3DES_CBC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIAES128_CBC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIAES192_CBC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIAES256_CBC);
XSEC_RELEASE_XMLCH(s_unicodeStrURIAES128_GCM);
XSEC_RELEASE_XMLCH(s_unicodeStrURIAES192_GCM);
XSEC_RELEASE_XMLCH(s_unicodeStrURIAES256_GCM);
XSEC_RELEASE_XMLCH(s_unicodeStrURIKW_3DES);
XSEC_RELEASE_XMLCH(s_unicodeStrURIKW_AES128);
XSEC_RELEASE_XMLCH(s_unicodeStrURIKW_AES192);
XSEC_RELEASE_XMLCH(s_unicodeStrURIKW_AES256);
XSEC_RELEASE_XMLCH(s_unicodeStrURIKW_AES128_PAD);
XSEC_RELEASE_XMLCH(s_unicodeStrURIKW_AES192_PAD);
XSEC_RELEASE_XMLCH(s_unicodeStrURIKW_AES256_PAD);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_1_5);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_OAEP_MGFP1);
XSEC_RELEASE_XMLCH(s_unicodeStrURIRSA_OAEP);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMGF1_BASE);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMGF1_SHA1);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMGF1_SHA224);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMGF1_SHA256);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMGF1_SHA384);
XSEC_RELEASE_XMLCH(s_unicodeStrURIMGF1_SHA512);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXENC_ELEMENT);
XSEC_RELEASE_XMLCH(s_unicodeStrURIXENC_CONTENT);
XSEC_RELEASE_XMLCH(s_unicodeStrPROVOpenSSL);
XSEC_RELEASE_XMLCH(s_unicodeStrPROVWinCAPI);
XSEC_RELEASE_XMLCH(s_unicodeStrPROVNSS);
}
// --------------------------------------------------------------------------------
// URI Mappings
// --------------------------------------------------------------------------------
bool getHashMethod(const XMLCh * URI, XSECCryptoHash::HashType& type) {
if (strEquals(URI, s_md5)) {
type = XSECCryptoHash::HASH_MD5;
return true;
}
if (strEquals(URI, s_sha1)) {
type = XSECCryptoHash::HASH_SHA1;
return true;
}
if (strEquals(URI, s_sha224)) {
type = XSECCryptoHash::HASH_SHA224;
return true;
}
if (strEquals(URI, s_sha256)) {
type = XSECCryptoHash::HASH_SHA256;
return true;
}
if (strEquals(URI, s_sha384)) {
type = XSECCryptoHash::HASH_SHA384;
return true;
}
if (strEquals(URI, s_sha512)) {
type = XSECCryptoHash::HASH_SHA512;
return true;
}
type = XSECCryptoHash::HASH_NONE;
return false;
}
bool XSECmapURIToSignatureMethods(const XMLCh * URI,
signatureMethod & sm,
XSECCryptoHash::HashType& type) {
// The easy ones!
if (strEquals(URI, DSIGConstants::s_unicodeStrURIDSA_SHA1)) {
sm = SIGNATURE_DSA;
type = XSECCryptoHash::HASH_SHA1;
return true;
}
if (strEquals(URI, DSIGConstants::s_unicodeStrURIRSA_SHA1)) {
sm = SIGNATURE_RSA;
type = XSECCryptoHash::HASH_SHA1;
return true;
}
if (strEquals(URI, DSIGConstants::s_unicodeStrURIHMAC_SHA1)) {
sm = SIGNATURE_HMAC;
type = XSECCryptoHash::HASH_SHA1;
return true;
}
/* Check to see if we are one of the more exotic RSA signatures */
XMLSize_t cnt = XMLString::stringLen(DSIGConstants::s_unicodeStrURISIGBASEMORE);
if (XMLString::compareNString(URI, DSIGConstants::s_unicodeStrURISIGBASEMORE, cnt) == 0) {
// Have a "new" algorithm
if (XMLString::compareNString(&URI[cnt], s_hmac, 4) == 0) {
// Some kind of HMAC
sm = SIGNATURE_HMAC;
// Determine a trailing hash method
if (URI[cnt+4] != chDash)
return false;
return getHashMethod(&(URI[cnt+5]), type);
}
else if (XMLString::compareNString(&URI[cnt], s_rsa, 3) == 0) {
sm = SIGNATURE_RSA;
if (URI[cnt+3] != chDash)
return false;
return getHashMethod(&(URI[cnt+4]), type);
}
else if (XMLString::compareNString(&URI[cnt], s_ecdsa, 5) == 0) {
sm = SIGNATURE_ECDSA;
if (URI[cnt+5] != chDash)
return false;
return getHashMethod(&(URI[cnt+6]), type);
}
}
cnt = XMLString::stringLen(DSIGConstants::s_unicodeStrURISIGBASE11);
if (XMLString::compareNString(URI, DSIGConstants::s_unicodeStrURISIGBASE11, cnt) == 0) {
if (XMLString::compareNString(&URI[cnt], s_dsa, 3) == 0) {
sm = SIGNATURE_DSA;
if (URI[cnt+3] != chDash)
return false;
return getHashMethod(&(URI[cnt+4]), type);
}
}
sm = SIGNATURE_NONE;
type = XSECCryptoHash::HASH_NONE;
return false;
}
bool XSECmapURIToCanonicalizationMethod(const XMLCh * URI,
canonicalizationMethod & cm) {
// Quick and dirty but inefficient
if (strEquals(URI, DSIGConstants::s_unicodeStrURIC14N_NOC)) {
cm = CANON_C14N_NOC;
}
else if (strEquals(URI, DSIGConstants::s_unicodeStrURIC14N_COM)) {
cm = CANON_C14N_COM;
}
else if (strEquals(URI, DSIGConstants::s_unicodeStrURIEXC_C14N_COM)) {
cm = CANON_C14NE_COM;
}
else if (strEquals(URI, DSIGConstants::s_unicodeStrURIEXC_C14N_NOC)) {
cm = CANON_C14NE_NOC;
}
else if (strEquals(URI, DSIGConstants::s_unicodeStrURIC14N11_NOC)) {
cm = CANON_C14N11_NOC;
}
else if (strEquals(URI, DSIGConstants::s_unicodeStrURIC14N11_COM)) {
cm = CANON_C14N11_COM;
}
else {
// Unknown
cm = CANON_NONE;
return false;
}
return true;
}