| ||||
| ||||
Не получается заставить работать MakeSignature, вызов QueryContextAttributes для определения размера буфера для подписи возвращает SEC_E_UNSUPPORTED_FUNCTION Вот код: SecStatus = QueryContextAttributes( phContext, SECPKG_ATTR_SIZES, &ContextSizes ); if (!SEC_SUCCESS (SecStatus)) { HandleErrorH("QueryContextAttributes call failed ",SecStatus ); return 0; } if(ContextSizes.cbMaxSignature == 0){ HandleErrorHR("LisTlsMakeSignature: This session(security context) does not support message signing",0); return 0; } // Setup the Buffer Descriptors OutBuffDesc.ulVersion=SECBUFFER_VERSION; OutBuffDesc.cBuffers = 2; OutBuffDesc.pBuffers = OutSecBuff; OutSecBuff[0].cbBuffer = nDataLen; OutSecBuff[0].BufferType = SECBUFFER_DATA; OutSecBuff[0].pvBuffer = pbData; // Allocate and build a security buffer for the message // signature. OutSecBuff[1].BufferType = SECBUFFER_EMPTY/*SECBUFFER_TOKEN*/; OutSecBuff[1].cbBuffer = ContextSizes.cbMaxSignature; OutSecBuff[1].pvBuffer = (void *)malloc(ContextSizes.cbMaxSignature); // Now call MakeSignature API to get it //signed SecStatus = MakeSignature( phContext, 0, // no QOS &OutBuffDesc, 0 // no sequence number ); if (!SEC_SUCCESS (SecStatus)) { HandleErrorHR ("MakeSignature call failed ",SecStatus ); return 0; } Что не так ? | ||||
Ответы: | ||||
| ||||
Судя по документации, это не поддерживаемая функция - там заглушка. Используйте EncryptMessage. Насколько я понял из описалова TLS, она не только шифрует, но и вычисляет HMAC на master-ключе. Впрочем, могу ошибаться в последнем пункте. Подробнее - почтой. | ||||