/
githubmirror
/
xmlsec
Обзор
Документация
Войти
/
githubmirror
/
xmlsec
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
1.3.10
src/mscrypto/digests.c
747 строк
31 KB
lsh123
Fix docs typos in docs / comments (#993)
29 ноя 2025, 23:32
Не верифицирован
29 ноя 2025, 23:32
2ae08d3
Код
Авторство
О чём код?
/* * XML Security Library (http://www.aleksey.com/xmlsec). * * Digests transforms implementation for Microsoft Crypto API. * * This is free software; see the Copyright file in the source * distribution for precise wording. * * Copyright (C) 2003 Cordys R&D BV, All rights reserved. * Copyright (c) 2005-2006 Cryptocom LTD (http://www.cryptocom.ru). */ /** * SECTION:crypto */ #include "globals.h" #include <string.h> #ifndef XMLSEC_NO_GOST #include "csp_calg.h" #endif #include <xmlsec/xmlsec.h> #include <xmlsec/keys.h> #include <xmlsec/transforms.h> #include <xmlsec/errors.h> #include <xmlsec/mscrypto/crypto.h> #include "private.h" #include "../cast_helpers.h" #define MSCRYPTO_MAX_HASH_SIZE 256 typedef struct _xmlSecMSCryptoDigestCtx xmlSecMSCryptoDigestCtx, *xmlSecMSCryptoDigestCtxPtr; struct _xmlSecMSCryptoDigestCtx { HCRYPTPROV provider; ALG_ID alg_id; const xmlSecMSCryptoProviderInfo * providers; HCRYPTHASH mscHash; unsigned char dgst[MSCRYPTO_MAX_HASH_SIZE]; xmlSecSize dgstSize; /* dgst size in bytes */ }; /****************************************************************************** * * MSCrypto Digest transforms * *****************************************************************************/ XMLSEC_TRANSFORM_DECLARE(MSCryptoDigest, xmlSecMSCryptoDigestCtx) #define xmlSecMSCryptoDigestSize XMLSEC_TRANSFORM_SIZE(MSCryptoDigest) static int xmlSecMSCryptoDigestInitialize (xmlSecTransformPtr transform); static void xmlSecMSCryptoDigestFinalize (xmlSecTransformPtr transform); static int xmlSecMSCryptoDigestVerify (xmlSecTransformPtr transform, const xmlSecByte* data, xmlSecSize dataSize, xmlSecTransformCtxPtr transformCtx); static int xmlSecMSCryptoDigestExecute (xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx); static int xmlSecMSCryptoDigestCheckId (xmlSecTransformPtr transform); /* Ordered list of providers to search for algorithm implementation using * xmlSecMSCryptoFindProvider() function * * MUST END with { NULL, 0 } !!! */ #ifndef XMLSEC_NO_SHA1 static xmlSecMSCryptoProviderInfo xmlSecMSCryptoProviderInfo_Sha1[] = { { XMLSEC_CRYPTO_MS_ENH_RSA_AES_PROV, PROV_RSA_AES}, { XMLSEC_CRYPTO_MS_ENH_RSA_AES_PROV_PROTOTYPE, PROV_RSA_AES }, { MS_STRONG_PROV, PROV_RSA_FULL }, { MS_ENHANCED_PROV, PROV_RSA_FULL }, { MS_DEF_PROV, PROV_RSA_FULL }, { NULL, 0 } }; #endif /* XMLSEC_NO_SHA1*/ static xmlSecMSCryptoProviderInfo xmlSecMSCryptoProviderInfo_Sha2[] = { { XMLSEC_CRYPTO_MS_ENH_RSA_AES_PROV, PROV_RSA_AES}, { XMLSEC_CRYPTO_MS_ENH_RSA_AES_PROV_PROTOTYPE, PROV_RSA_AES }, { NULL, 0 } }; #ifndef XMLSEC_NO_MD5 static xmlSecMSCryptoProviderInfo xmlSecMSCryptoProviderInfo_Md5[] = { { MS_STRONG_PROV, PROV_RSA_FULL }, { MS_ENHANCED_PROV, PROV_RSA_FULL }, { MS_DEF_PROV, PROV_RSA_FULL }, { NULL, 0 } }; #endif /* XMLSEC_NO_MD5*/ #ifndef XMLSEC_NO_GOST static xmlSecMSCryptoProviderInfo xmlSecMSCryptoProviderInfo_Gost[] = { { MAGPRO_CSP, PROV_MAGPRO_GOST }, { CRYPTOPRO_CSP, PROV_CRYPTOPRO_GOST }, { NULL, 0 } }; #endif /* XMLSEC_NO_GOST*/ #ifndef XMLSEC_NO_GOST2012 static xmlSecMSCryptoProviderInfo xmlSecMSCryptoProviderInfo_Gost2012_256[] = { { CRYPTOPRO_CSP_256, PROV_GOST_2012_256 }, { NULL, 0 } }; static xmlSecMSCryptoProviderInfo xmlSecMSCryptoProviderInfo_Gost2012_512[] = { { CRYPTOPRO_CSP_512, PROV_GOST_2012_512 }, { NULL, 0 } }; #endif /* XMLSEC_NO_GOST2012*/ static int xmlSecMSCryptoDigestCheckId(xmlSecTransformPtr transform) { #ifndef XMLSEC_NO_MD5 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformMd5Id)) { return(1); } #endif /* XMLSEC_NO_MD5 */ #ifndef XMLSEC_NO_SHA1 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha1Id)) { return(1); } #endif /* XMLSEC_NO_SHA1 */ #ifndef XMLSEC_NO_SHA256 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha256Id)) { return(1); } #endif /* XMLSEC_NO_SHA256 */ #ifndef XMLSEC_NO_SHA384 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha384Id)) { return(1); } #endif /* XMLSEC_NO_SHA384 */ #ifndef XMLSEC_NO_SHA512 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha512Id)) { return(1); } #endif /* XMLSEC_NO_SHA512 */ #ifndef XMLSEC_NO_GOST if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformGostR3411_94Id)) { return(1); } #endif /* XMLSEC_NO_GOST*/ #ifndef XMLSEC_NO_GOST2012 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformGostR3411_2012_256Id)) { return(1); } if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformGostR3411_2012_512Id)) { return(1); } #endif /* XMLSEC_NO_GOST2012*/ return(0); } static int xmlSecMSCryptoDigestInitialize(xmlSecTransformPtr transform) { xmlSecMSCryptoDigestCtxPtr ctx; xmlSecAssert2(xmlSecMSCryptoDigestCheckId(transform), -1); xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecMSCryptoDigestSize), -1); ctx = xmlSecMSCryptoDigestGetCtx(transform); xmlSecAssert2(ctx != NULL, -1); /* initialize context */ memset(ctx, 0, sizeof(xmlSecMSCryptoDigestCtx)); #ifndef XMLSEC_NO_MD5 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformMd5Id)) { ctx->alg_id = CALG_MD5; ctx->providers = xmlSecMSCryptoProviderInfo_Md5; } else #endif /* XMLSEC_NO_MD5 */ #ifndef XMLSEC_NO_SHA1 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha1Id)) { ctx->alg_id = CALG_SHA1; ctx->providers = xmlSecMSCryptoProviderInfo_Sha1; } else #endif /* XMLSEC_NO_SHA1 */ #ifndef XMLSEC_NO_SHA256 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha256Id)) { ctx->alg_id = CALG_SHA_256; ctx->providers = xmlSecMSCryptoProviderInfo_Sha2; } else #endif /* XMLSEC_NO_SHA256 */ #ifndef XMLSEC_NO_SHA384 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha384Id)) { ctx->alg_id = CALG_SHA_384; ctx->providers = xmlSecMSCryptoProviderInfo_Sha2; } else #endif /* XMLSEC_NO_SHA384 */ #ifndef XMLSEC_NO_SHA512 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformSha512Id)) { ctx->alg_id = CALG_SHA_512; ctx->providers = xmlSecMSCryptoProviderInfo_Sha2; } else #endif /* XMLSEC_NO_SHA512 */ #ifndef XMLSEC_NO_GOST if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformGostR3411_94Id)) { ctx->alg_id = CALG_MAGPRO_HASH_R3411_94; ctx->providers = xmlSecMSCryptoProviderInfo_Gost; } else #endif /* XMLSEC_NO_GOST*/ #ifndef XMLSEC_NO_GOST2012 if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformGostR3411_2012_256Id)) { ctx->alg_id = CALG_GR3411_2012_256; ctx->providers = xmlSecMSCryptoProviderInfo_Gost2012_256; } else if(xmlSecTransformCheckId(transform, xmlSecMSCryptoTransformGostR3411_2012_512Id)) { ctx->alg_id = CALG_GR3411_2012_512; ctx->providers = xmlSecMSCryptoProviderInfo_Gost2012_512; } else #endif /* XMLSEC_NO_GOST2012*/ { xmlSecInvalidTransfromError(transform) return(-1); } ctx->provider = xmlSecMSCryptoFindProvider(ctx->providers, NULL, CRYPT_VERIFYCONTEXT, TRUE); if(ctx->provider == 0) { xmlSecInternalError("xmlSecMSCryptoFindProvider", xmlSecTransformGetName(transform)); return(-1); } return(0); } static void xmlSecMSCryptoDigestFinalize(xmlSecTransformPtr transform) { xmlSecMSCryptoDigestCtxPtr ctx; xmlSecAssert(xmlSecMSCryptoDigestCheckId(transform)); xmlSecAssert(xmlSecTransformCheckSize(transform, xmlSecMSCryptoDigestSize)); ctx = xmlSecMSCryptoDigestGetCtx(transform); xmlSecAssert(ctx != NULL); if(ctx->mscHash != 0) { CryptDestroyHash(ctx->mscHash); } if(ctx->provider != 0) { CryptReleaseContext(ctx->provider, 0); } memset(ctx, 0, sizeof(xmlSecMSCryptoDigestCtx)); } static int xmlSecMSCryptoDigestVerify(xmlSecTransformPtr transform, const xmlSecByte* data, xmlSecSize dataSize, xmlSecTransformCtxPtr transformCtx) { xmlSecMSCryptoDigestCtxPtr ctx; xmlSecAssert2(xmlSecMSCryptoDigestCheckId(transform), -1); xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecMSCryptoDigestSize), -1); xmlSecAssert2(transform->operation == xmlSecTransformOperationVerify, -1); xmlSecAssert2(transform->status == xmlSecTransformStatusFinished, -1); xmlSecAssert2(data != NULL, -1); xmlSecAssert2(transformCtx != NULL, -1); ctx = xmlSecMSCryptoDigestGetCtx(transform); xmlSecAssert2(ctx != NULL, -1); xmlSecAssert2(ctx->dgstSize > 0, -1); if(dataSize != ctx->dgstSize) { xmlSecInvalidSizeError("Digest", dataSize, ctx->dgstSize, xmlSecTransformGetName(transform)); transform->status = xmlSecTransformStatusFail; return(0); } if(memcmp(ctx->dgst, data, ctx->dgstSize) != 0) { xmlSecInvalidDataError("data and digest do not match", xmlSecTransformGetName(transform)); transform->status = xmlSecTransformStatusFail; return(0); } transform->status = xmlSecTransformStatusOk; return(0); } static int xmlSecMSCryptoDigestExecute(xmlSecTransformPtr transform, int last, xmlSecTransformCtxPtr transformCtx) { xmlSecMSCryptoDigestCtxPtr ctx; xmlSecBufferPtr in, out; int ret; xmlSecAssert2(xmlSecMSCryptoDigestCheckId(transform), -1); xmlSecAssert2((transform->operation == xmlSecTransformOperationSign) || (transform->operation == xmlSecTransformOperationVerify), -1); xmlSecAssert2(xmlSecTransformCheckSize(transform, xmlSecMSCryptoDigestSize), -1); xmlSecAssert2(transformCtx != NULL, -1); in = &(transform->inBuf); xmlSecAssert2(in != NULL, -1); out = &(transform->outBuf); xmlSecAssert2(out != NULL, -1); ctx = xmlSecMSCryptoDigestGetCtx(transform); xmlSecAssert2(ctx != NULL, -1); if(transform->status == xmlSecTransformStatusNone) { ret = CryptCreateHash(ctx->provider, ctx->alg_id, 0, 0, &(ctx->mscHash)); if((ret == 0) || (ctx->mscHash == 0)) { xmlSecMSCryptoError("CryptCreateHash", xmlSecTransformGetName(transform)); return(-1); } transform->status = xmlSecTransformStatusWorking; } if (transform->status == xmlSecTransformStatusWorking) { xmlSecSize inSize; inSize = xmlSecBufferGetSize(in); if(inSize > 0) { DWORD dwInSize; XMLSEC_SAFE_CAST_SIZE_TO_ULONG(inSize, dwInSize, return(-1), xmlSecTransformGetName(transform)); ret = CryptHashData(ctx->mscHash, xmlSecBufferGetData(in), dwInSize, 0); if(ret == 0) { xmlSecMSCryptoError2("CryptHashData", xmlSecTransformGetName(transform), "size=" XMLSEC_SIZE_FMT, inSize); return(-1); } ret = xmlSecBufferRemoveHead(in, inSize); if(ret < 0) { xmlSecInternalError2("xmlSecBufferRemoveHead", xmlSecTransformGetName(transform), "size=" XMLSEC_SIZE_FMT, inSize); return(-1); } } if(last) { DWORD retLen = MSCRYPTO_MAX_HASH_SIZE; ret = CryptGetHashParam(ctx->mscHash, HP_HASHVAL, ctx->dgst, &retLen, 0); if (ret == 0) { xmlSecMSCryptoError("CryptGetHashParam(HP_HASHVAL)", xmlSecTransformGetName(transform)); return(-1); } xmlSecAssert2(retLen > 0, -1); XMLSEC_SAFE_CAST_ULONG_TO_SIZE(retLen, ctx->dgstSize, return(-1), xmlSecTransformGetName(transform)); /* copy result to output */ if(transform->operation == xmlSecTransformOperationSign) { ret = xmlSecBufferAppend(out, ctx->dgst, ctx->dgstSize); if(ret < 0) { xmlSecInternalError2("xmlSecBufferAppend", xmlSecTransformGetName(transform), "size=" XMLSEC_SIZE_FMT, ctx->dgstSize); return(-1); } } transform->status = xmlSecTransformStatusFinished; } } else if(transform->status == xmlSecTransformStatusFinished) { /* the only way we can get here is if there is no input */ xmlSecAssert2(xmlSecBufferGetSize(in) == 0, -1); } else { xmlSecInvalidTransfromStatusError(transform); return(-1); } return(0); } #ifndef XMLSEC_NO_MD5 /****************************************************************************** * * MD5 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoMd5Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameMd5, /* const xmlChar* name; */ xmlSecHrefMd5, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformMd5GetKlass: * * SHA-1 digest transform klass. * * Returns: pointer to SHA-1 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformMd5GetKlass(void) { return(&xmlSecMSCryptoMd5Klass); } #endif /* XMLSEC_NO_MD5 */ #ifndef XMLSEC_NO_SHA1 /****************************************************************************** * * SHA1 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoSha1Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameSha1, /* const xmlChar* name; */ xmlSecHrefSha1, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformSha1GetKlass: * * SHA-1 digest transform klass. * * Returns: pointer to SHA-1 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformSha1GetKlass(void) { return(&xmlSecMSCryptoSha1Klass); } #endif /* XMLSEC_NO_SHA1 */ #ifndef XMLSEC_NO_SHA256 /****************************************************************************** * * SHA256 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoSha256Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameSha256, /* const xmlChar* name; */ xmlSecHrefSha256, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformSha256GetKlass: * * SHA-256 digest transform klass. * * Returns: pointer to SHA-256 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformSha256GetKlass(void) { return(&xmlSecMSCryptoSha256Klass); } #endif /* XMLSEC_NO_SHA256 */ #ifndef XMLSEC_NO_SHA384 /****************************************************************************** * * SHA384 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoSha384Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameSha384, /* const xmlChar* name; */ xmlSecHrefSha384, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformSha384GetKlass: * * SHA-384 digest transform klass. * * Returns: pointer to SHA-384 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformSha384GetKlass(void) { return(&xmlSecMSCryptoSha384Klass); } #endif /* XMLSEC_NO_SHA384 */ #ifndef XMLSEC_NO_SHA512 /****************************************************************************** * * SHA512 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoSha512Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameSha512, /* const xmlChar* name; */ xmlSecHrefSha512, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformSha512GetKlass: * * SHA-512 digest transform klass. * * Returns: pointer to SHA-512 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformSha512GetKlass(void) { return(&xmlSecMSCryptoSha512Klass); } #endif /* XMLSEC_NO_SHA512 */ #ifndef XMLSEC_NO_GOST /****************************************************************************** * * GOSTR3411_94 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoGostR3411_94Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameGostR3411_94, /* const xmlChar* name; */ xmlSecHrefGostR3411_94, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformGostR3411_94GetKlass: * * GOSTR3411_94 digest transform klass. * * Returns: pointer to GOSTR3411_94 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformGostR3411_94GetKlass(void) { return(&xmlSecMSCryptoGostR3411_94Klass); } /****************************************************************************** * * GOSTR3411-2012/256 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoGostR3411_2012_256Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameGostR3411_2012_256, /* const xmlChar* name; */ xmlSecHrefGostR3411_2012_256, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformGostR3411_2012_256GetKlass: * * GOSTR3411_2012_256 digest transform klass. * * Returns: pointer to GOSTR3411_2012_256 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformGostR3411_2012_256GetKlass(void) { return(&xmlSecMSCryptoGostR3411_2012_256Klass); } /****************************************************************************** * * GOSTR3411-2012/512 * *****************************************************************************/ static xmlSecTransformKlass xmlSecMSCryptoGostR3411_2012_512Klass = { /* klass/object sizes */ sizeof(xmlSecTransformKlass), /* size_t klassSize */ xmlSecMSCryptoDigestSize, /* size_t objSize */ xmlSecNameGostR3411_2012_512, /* const xmlChar* name; */ xmlSecHrefGostR3411_2012_512, /* const xmlChar* href; */ xmlSecTransformUsageDigestMethod, /* xmlSecTransformUsage usage; */ xmlSecMSCryptoDigestInitialize, /* xmlSecTransformInitializeMethod initialize; */ xmlSecMSCryptoDigestFinalize, /* xmlSecTransformFinalizeMethod finalize; */ NULL, /* xmlSecTransformNodeReadMethod readNode; */ NULL, /* xmlSecTransformNodeWriteMethod writeNode; */ NULL, /* xmlSecTransformSetKeyReqMethod setKeyReq; */ NULL, /* xmlSecTransformSetKeyMethod setKey; */ xmlSecMSCryptoDigestVerify, /* xmlSecTransformVerifyMethod verify; */ xmlSecTransformDefaultGetDataType, /* xmlSecTransformGetDataTypeMethod getDataType; */ xmlSecTransformDefaultPushBin, /* xmlSecTransformPushBinMethod pushBin; */ xmlSecTransformDefaultPopBin, /* xmlSecTransformPopBinMethod popBin; */ NULL, /* xmlSecTransformPushXmlMethod pushXml; */ NULL, /* xmlSecTransformPopXmlMethod popXml; */ xmlSecMSCryptoDigestExecute, /* xmlSecTransformExecuteMethod execute; */ NULL, /* void* reserved0; */ NULL, /* void* reserved1; */ }; /** * xmlSecMSCryptoTransformGostR3411_2012_512GetKlass: * * GOSTR3411_2012_512 digest transform klass. * * Returns: pointer to GOSTR3411_2012_512 digest transform klass. */ xmlSecTransformId xmlSecMSCryptoTransformGostR3411_2012_512GetKlass(void) { return(&xmlSecMSCryptoGostR3411_2012_512Klass); } #endif /* XMLSEC_NO_GOST*/