Skip to content

Commit be6007b

Browse files
authored
fix: sha1 computation on messages longer than 31 bytes (#5397)
1 parent efeccfe commit be6007b

File tree

1 file changed

+9
-2
lines changed

1 file changed

+9
-2
lines changed

src/rcore.c

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2926,8 +2926,15 @@ unsigned int *ComputeSHA1(unsigned char *data, int dataSize)
29262926
memcpy(msg, data, dataSize);
29272927
msg[dataSize] = 128; // Write the '1' bit
29282928

2929-
unsigned int bitsLen = 8*dataSize;
2930-
msg[newDataSize-1] = bitsLen;
2929+
unsigned long long bitsLen = 8ULL * dataSize;
2930+
msg[newDataSize-1] = (unsigned char)(bitsLen);
2931+
msg[newDataSize-2] = (unsigned char)(bitsLen >> 8);
2932+
msg[newDataSize-3] = (unsigned char)(bitsLen >> 16);
2933+
msg[newDataSize-4] = (unsigned char)(bitsLen >> 24);
2934+
msg[newDataSize-5] = (unsigned char)(bitsLen >> 32);
2935+
msg[newDataSize-6] = (unsigned char)(bitsLen >> 40);
2936+
msg[newDataSize-7] = (unsigned char)(bitsLen >> 48);
2937+
msg[newDataSize-8] = (unsigned char)(bitsLen >> 56);
29312938

29322939
// Process the message in successive 512-bit chunks
29332940
for (int offset = 0; offset < newDataSize; offset += (512/8))

0 commit comments

Comments
 (0)