|
|
|
@ -134,11 +134,11 @@ DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32
|
|
|
|
|
next headers follow the same ASN1 "type-length-data" scheme
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2 + 0, out0); i += 16;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2 + 0, out0); i += 16;
|
|
|
|
|
|
|
|
|
|
if (((out0[2] & 0xff00ffff) != 0x30008163) && ((out0[2] & 0x0000ffff) != 0x00008263)) return 0;
|
|
|
|
|
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2 + 4, out1); i += 16;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2 + 4, out1); i += 16;
|
|
|
|
|
|
|
|
|
|
if (((out1[0] & 0x00ffffff) != 0x00000503) && (out1[0] != 0x050307A0)) return 0;
|
|
|
|
|
|
|
|
|
@ -180,10 +180,10 @@ DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32
|
|
|
|
|
|
|
|
|
|
for (edata2_left = edata2_len; edata2_left >= 64; edata2_left -= 64)
|
|
|
|
|
{
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w2); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w3); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w3); i += 16; edata2 += 4;
|
|
|
|
|
|
|
|
|
|
md5_transform (w0, w1, w2, w3, ipad);
|
|
|
|
|
}
|
|
|
|
@ -207,7 +207,7 @@ DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32
|
|
|
|
|
|
|
|
|
|
if (edata2_left < 16)
|
|
|
|
|
{
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
|
|
|
|
|
truncate_block_4x4_le_S (w0, edata2_left & 0xf);
|
|
|
|
|
|
|
|
|
@ -220,8 +220,8 @@ DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32
|
|
|
|
|
}
|
|
|
|
|
else if (edata2_left < 32)
|
|
|
|
|
{
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
|
|
|
|
|
truncate_block_4x4_le_S (w1, edata2_left & 0xf);
|
|
|
|
|
|
|
|
|
@ -234,9 +234,9 @@ DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32
|
|
|
|
|
}
|
|
|
|
|
else if (edata2_left < 48)
|
|
|
|
|
{
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w2); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4;
|
|
|
|
|
|
|
|
|
|
truncate_block_4x4_le_S (w2, edata2_left & 0xf);
|
|
|
|
|
|
|
|
|
@ -249,10 +249,10 @@ DECLSPEC int decrypt_and_check (LOCAL_AS u32 *S, u32 *data, GLOBAL_AS const u32
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w2); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16 (S, i, j, edata2, w3); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w0); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w1); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w2); i += 16; edata2 += 4;
|
|
|
|
|
j = rc4_next_16_global (S, i, j, edata2, w3); i += 16; edata2 += 4;
|
|
|
|
|
|
|
|
|
|
truncate_block_4x4_le_S (w3, edata2_left & 0xf);
|
|
|
|
|
|
|
|
|
|