libwinpr-sspi: fix SeqNo size
This commit is contained in:
parent
a1355135c5
commit
1ed7442db6
@ -500,6 +500,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_EncryptMessage(PCtxtHandle phContext, ULONG fQOP,
|
|||||||
int index;
|
int index;
|
||||||
int length;
|
int length;
|
||||||
void* data;
|
void* data;
|
||||||
|
UINT32 SeqNo;
|
||||||
HMAC_CTX hmac;
|
HMAC_CTX hmac;
|
||||||
BYTE digest[16];
|
BYTE digest[16];
|
||||||
BYTE checksum[8];
|
BYTE checksum[8];
|
||||||
@ -509,6 +510,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_EncryptMessage(PCtxtHandle phContext, ULONG fQOP,
|
|||||||
PSecBuffer data_buffer = NULL;
|
PSecBuffer data_buffer = NULL;
|
||||||
PSecBuffer signature_buffer = NULL;
|
PSecBuffer signature_buffer = NULL;
|
||||||
|
|
||||||
|
SeqNo = MessageSeqNo;
|
||||||
context = (NTLM_CONTEXT*) sspi_SecureHandleGetLowerPointer(phContext);
|
context = (NTLM_CONTEXT*) sspi_SecureHandleGetLowerPointer(phContext);
|
||||||
|
|
||||||
for (index = 0; index < (int) pMessage->cBuffers; index++)
|
for (index = 0; index < (int) pMessage->cBuffers; index++)
|
||||||
@ -533,7 +535,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_EncryptMessage(PCtxtHandle phContext, ULONG fQOP,
|
|||||||
/* Compute the HMAC-MD5 hash of ConcatenationOf(seq_num,data) using the client signing key */
|
/* Compute the HMAC-MD5 hash of ConcatenationOf(seq_num,data) using the client signing key */
|
||||||
HMAC_CTX_init(&hmac);
|
HMAC_CTX_init(&hmac);
|
||||||
HMAC_Init_ex(&hmac, context->SendSigningKey, 16, EVP_md5(), NULL);
|
HMAC_Init_ex(&hmac, context->SendSigningKey, 16, EVP_md5(), NULL);
|
||||||
HMAC_Update(&hmac, (void*) &(MessageSeqNo), 4);
|
HMAC_Update(&hmac, (void*) &(SeqNo), 4);
|
||||||
HMAC_Update(&hmac, data, length);
|
HMAC_Update(&hmac, data, length);
|
||||||
HMAC_Final(&hmac, digest, NULL);
|
HMAC_Final(&hmac, digest, NULL);
|
||||||
HMAC_CTX_cleanup(&hmac);
|
HMAC_CTX_cleanup(&hmac);
|
||||||
@ -565,7 +567,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_EncryptMessage(PCtxtHandle phContext, ULONG fQOP,
|
|||||||
/* Concatenate version, ciphertext and sequence number to build signature */
|
/* Concatenate version, ciphertext and sequence number to build signature */
|
||||||
CopyMemory(signature, (void*) &version, 4);
|
CopyMemory(signature, (void*) &version, 4);
|
||||||
CopyMemory(&signature[4], (void*) checksum, 8);
|
CopyMemory(&signature[4], (void*) checksum, 8);
|
||||||
CopyMemory(&signature[12], (void*) &(MessageSeqNo), 4);
|
CopyMemory(&signature[12], (void*) &(SeqNo), 4);
|
||||||
context->SendSeqNum++;
|
context->SendSeqNum++;
|
||||||
|
|
||||||
#ifdef WITH_DEBUG_NTLM
|
#ifdef WITH_DEBUG_NTLM
|
||||||
@ -582,6 +584,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_DecryptMessage(PCtxtHandle phContext, PSecBufferD
|
|||||||
int index;
|
int index;
|
||||||
int length;
|
int length;
|
||||||
void* data;
|
void* data;
|
||||||
|
UINT32 SeqNo;
|
||||||
HMAC_CTX hmac;
|
HMAC_CTX hmac;
|
||||||
BYTE digest[16];
|
BYTE digest[16];
|
||||||
BYTE checksum[8];
|
BYTE checksum[8];
|
||||||
@ -591,6 +594,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_DecryptMessage(PCtxtHandle phContext, PSecBufferD
|
|||||||
PSecBuffer data_buffer = NULL;
|
PSecBuffer data_buffer = NULL;
|
||||||
PSecBuffer signature_buffer = NULL;
|
PSecBuffer signature_buffer = NULL;
|
||||||
|
|
||||||
|
SeqNo = (UINT32) MessageSeqNo;
|
||||||
context = sspi_SecureHandleGetLowerPointer(phContext);
|
context = sspi_SecureHandleGetLowerPointer(phContext);
|
||||||
|
|
||||||
for (index = 0; index < (int) pMessage->cBuffers; index++)
|
for (index = 0; index < (int) pMessage->cBuffers; index++)
|
||||||
@ -622,7 +626,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_DecryptMessage(PCtxtHandle phContext, PSecBufferD
|
|||||||
/* Compute the HMAC-MD5 hash of ConcatenationOf(seq_num,data) using the client signing key */
|
/* Compute the HMAC-MD5 hash of ConcatenationOf(seq_num,data) using the client signing key */
|
||||||
HMAC_CTX_init(&hmac);
|
HMAC_CTX_init(&hmac);
|
||||||
HMAC_Init_ex(&hmac, context->RecvSigningKey, 16, EVP_md5(), NULL);
|
HMAC_Init_ex(&hmac, context->RecvSigningKey, 16, EVP_md5(), NULL);
|
||||||
HMAC_Update(&hmac, (void*) &(MessageSeqNo), 4);
|
HMAC_Update(&hmac, (void*) &(SeqNo), 4);
|
||||||
HMAC_Update(&hmac, data_buffer->pvBuffer, data_buffer->cbBuffer);
|
HMAC_Update(&hmac, data_buffer->pvBuffer, data_buffer->cbBuffer);
|
||||||
HMAC_Final(&hmac, digest, NULL);
|
HMAC_Final(&hmac, digest, NULL);
|
||||||
HMAC_CTX_cleanup(&hmac);
|
HMAC_CTX_cleanup(&hmac);
|
||||||
@ -645,7 +649,7 @@ SECURITY_STATUS SEC_ENTRY ntlm_DecryptMessage(PCtxtHandle phContext, PSecBufferD
|
|||||||
/* Concatenate version, ciphertext and sequence number to build signature */
|
/* Concatenate version, ciphertext and sequence number to build signature */
|
||||||
CopyMemory(expected_signature, (void*) &version, 4);
|
CopyMemory(expected_signature, (void*) &version, 4);
|
||||||
CopyMemory(&expected_signature[4], (void*) checksum, 8);
|
CopyMemory(&expected_signature[4], (void*) checksum, 8);
|
||||||
CopyMemory(&expected_signature[12], (void*) &(MessageSeqNo), 4);
|
CopyMemory(&expected_signature[12], (void*) &(SeqNo), 4);
|
||||||
context->RecvSeqNum++;
|
context->RecvSeqNum++;
|
||||||
|
|
||||||
if (memcmp(signature_buffer->pvBuffer, expected_signature, 16) != 0)
|
if (memcmp(signature_buffer->pvBuffer, expected_signature, 16) != 0)
|
||||||
|
Loading…
Reference in New Issue
Block a user