24.06.2003 12:29:21MakeSignature Ответов: 1
Юрий
Не получается заставить работать
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;
}

Что не так ?
 
Ответы:
25.06.2003 17:43:36peter
Судя по документации, это не поддерживаемая функция - там заглушка.
Используйте EncryptMessage. Насколько я понял из описалова TLS, она не только шифрует, но и вычисляет HMAC на master-ключе. Впрочем, могу ошибаться в последнем пункте. Подробнее - почтой.