static int xmlSecMSCryptoKWAesInitialize(xmlSecTransformPtr transform) { xmlSecMSCryptoKWAesCtxPtr ctx; int ret; xmlSecAssert2(xmlSecMSCryptoKWAesCheckId(transform), -1); xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecMSCryptoKWAesSize), -1); ctx = xmlSecMSCryptoKWAesGetCtx(transform); xmlSecAssert2(ctx != NULL, -1); memset(ctx, 0, sizeof(xmlSecMSCryptoKWAesCtx)); if(transform->id == xmlSecMSCryptoTransformKWAes128Id) { ctx->algorithmIdentifier = CALG_AES_128; ctx->keyId = xmlSecMSCryptoKeyDataAesId; ctx->providers = xmlSecMSCryptoProviderInfo_Aes; ctx->keySize = XMLSEC_KW_AES128_KEY_SIZE; } else if(transform->id == xmlSecMSCryptoTransformKWAes192Id) { ctx->algorithmIdentifier = CALG_AES_192; ctx->keyId = xmlSecMSCryptoKeyDataAesId; ctx->providers = xmlSecMSCryptoProviderInfo_Aes; ctx->keySize = XMLSEC_KW_AES192_KEY_SIZE; } else if(transform->id == xmlSecMSCryptoTransformKWAes256Id) { ctx->algorithmIdentifier = CALG_AES_256; ctx->keyId = xmlSecMSCryptoKeyDataAesId; ctx->providers = xmlSecMSCryptoProviderInfo_Aes; ctx->keySize = XMLSEC_KW_AES256_KEY_SIZE; } else { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), NULL, XMLSEC_ERRORS_R_INVALID_TRANSFORM, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } ret = xmlSecBufferInitialize(&ctx->keyBuffer, 0); if(ret < 0) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), NULL, XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } /* find provider */ ctx->cryptProvider = xmlSecMSCryptoFindProvider(ctx->providers, NULL, CRYPT_VERIFYCONTEXT, TRUE); if(ctx->cryptProvider == 0) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecMSCryptoFindProvider", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } /* Create dummy key to be able to import plain session keys */ if (!xmlSecMSCryptoCreatePrivateExponentOneKey(ctx->cryptProvider, &(ctx->pubPrivKey))) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecMSCryptoCreatePrivateExponentOneKey", XMLSEC_ERRORS_R_CRYPTO_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } return(0); }
static int xmlSecMSCryptoKWDes3Initialize(xmlSecTransformPtr transform) { xmlSecMSCryptoKWDes3CtxPtr ctx; int ret; xmlSecAssert2(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformKWDes3Id), -1); xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecMSCryptoKWDes3Size), -1); ctx = xmlSecMSCryptoKWDes3GetCtx(transform); xmlSecAssert2(ctx != NULL, -1); memset(ctx, 0, sizeof(xmlSecMSCryptoKWDes3Ctx)); if(transform->id == xmlSecMSCryptoTransformKWDes3Id) { ctx->desAlgorithmIdentifier = CALG_3DES; ctx->desProviders = xmlSecMSCryptoProviderInfo_Des; ctx->sha1AlgorithmIdentifier = CALG_SHA1; ctx->sha1Providers = xmlSecMSCryptoProviderInfo_Sha1; ctx->keyId = xmlSecMSCryptoKeyDataDesId; ctx->keySize = XMLSEC_KW_DES3_KEY_LENGTH; } else { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), NULL, XMLSEC_ERRORS_R_INVALID_TRANSFORM, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } ret = xmlSecBufferInitialize(&(ctx->keyBuffer), 0); if(ret < 0) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecBufferInitialize", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } /* find providers */ ctx->desCryptProvider = xmlSecMSCryptoFindProvider(ctx->desProviders, NULL, CRYPT_VERIFYCONTEXT, TRUE); if(ctx->desCryptProvider == 0) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecMSCryptoFindProvider(des)", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } ctx->sha1CryptProvider = xmlSecMSCryptoFindProvider(ctx->sha1Providers, NULL, CRYPT_VERIFYCONTEXT, TRUE); if(ctx->sha1CryptProvider == 0) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecMSCryptoFindProvider(sha1)", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } /* Create dummy key to be able to import plain session keys */ if (!xmlSecMSCryptoCreatePrivateExponentOneKey(ctx->desCryptProvider, &(ctx->pubPrivKey))) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecMSCryptoCreatePrivateExponentOneKey", XMLSEC_ERRORS_R_CRYPTO_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } return(0); }
static int xmlSecMSCryptoHmacInitialize(xmlSecTransformPtr transform) { xmlSecMSCryptoHmacCtxPtr ctx; xmlSecAssert2(xmlSecMSCryptoHmacCheckId(transform), -1); xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecMSCryptoHmacSize), -1); ctx = xmlSecMSCryptoHmacGetCtx(transform); xmlSecAssert2(ctx != NULL, -1); /* initialize context */ memset(ctx, 0, sizeof(xmlSecMSCryptoHmacCtx)); #ifndef XMLSEC_NO_SHA1 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformHmacSha1Id)) { ctx->alg_id = CALG_SHA1; ctx->providers = xmlSecMSCryptoProviderInfo_Hmac; } else #endif /* XMLSEC_NO_SHA1 */ #ifndef XMLSEC_NO_SHA256 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformHmacSha256Id)) { ctx->alg_id = CALG_SHA_256; ctx->providers = xmlSecMSCryptoProviderInfo_Hmac; } else #endif /* XMLSEC_NO_SHA256 */ #ifndef XMLSEC_NO_SHA384 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformHmacSha384Id)) { ctx->alg_id = CALG_SHA_384; ctx->providers = xmlSecMSCryptoProviderInfo_Hmac; } else #endif /* XMLSEC_NO_SHA384 */ #ifndef XMLSEC_NO_SHA512 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformHmacSha512Id)) { ctx->alg_id = CALG_SHA_512; ctx->providers = xmlSecMSCryptoProviderInfo_Hmac; } else #endif /* XMLSEC_NO_SHA512 */ #ifndef XMLSEC_NO_MD5 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformHmacMd5Id)) { ctx->alg_id = CALG_MD5; ctx->providers = xmlSecMSCryptoProviderInfo_Hmac; } else #endif /* XMLSEC_NO_MD5 */ /* not found */ { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), NULL, XMLSEC_ERRORS_R_INVALID_TRANSFORM, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } ctx->provider = xmlSecMSCryptoFindProvider(ctx->providers, NULL, CRYPT_VERIFYCONTEXT, TRUE); if(ctx->provider == 0) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecMSCryptoFindProvider", XMLSEC_ERRORS_R_XMLSEC_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } /* Create dummy key to be able to import plain session keys */ if (!xmlSecMSCryptoCreatePrivateExponentOneKey(ctx->provider, &(ctx->pubPrivKey))) { xmlSecError(XMLSEC_ERRORS_HERE, xmlSecErrorsSafeString(xmlSecTransformGetName(transform)), "xmlSecMSCryptoCreatePrivateExponentOneKey", XMLSEC_ERRORS_R_CRYPTO_FAILED, XMLSEC_ERRORS_NO_MESSAGE); return(-1); } return(0); }