Aide sur la traduction de c++ vers delphi
Salut à tous je pense que le titre vous a donné une idée de ce que je veux
alors ... j'ai un code de l'algo xtea et xtea bloc decrypt mais écrit en c++ mais je le veux en delphi, j'ai pu traduire la moitier mais j'ai échoué dans la deuxième
N.B : Je veux traduire ce code tel qu'il est en c n'ajoutez rien svp pck c tré imprtant
voila le code
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| XTEA Block
---------------------------------------------------------------------------*/
void XTEA_Decrypt(BYTE* Buf, BYTE* Key)
{
DWORD v0, v1, delta, sum, k1, k2;
int i;
v0 = *((DWORD*)(Buf+0));
v1 = *((DWORD*)(Buf+4));
delta = 0x9E3779B9;
sum = 32 * delta;
for (int i=0; i<32; i++)
{
k1 = *((DWORD*)(Key+((sum>>9)& 0x0C)));
v1-= (((v0<<4)^(v0>>5)) + v0)^(sum + k1);
sum-=delta;
k2 = *((DWORD*)(Key+((sum & 0x03)<<2)));
v0-= (((v1<<4)^(v1>>5)) + v1)^(sum + k2);
}
*((DWORD*)(Buf+0)) = v0;
*((DWORD*)(Buf+4)) = v1;
}
/*---------------------------------------------------------------------------
cbc buggy xtea function
---------------------------------------------------------------------------*/
void XTEA_Bloc_Decrypt(BYTE* Buf, DWORD Size, BYTE* Key)
{
BYTE* pBlock;
BYTE* pMask;
//Last 8 bytes aligned bloc
pBlock = Buf + ((Size - 8) & 0xFFFFFFF8);
if (Size>8)
{
for (DWORD i = 0; i<Size/8; i++)
{
//Choose IV
if (pBlock!=Buf)
pMask = pBlock - 8;
else
pMask = Buf+Size-8; //Last complete
//xor block (buggy cbc-> should be done after decrypting)
for (int j = 0; j<8; j++)
pBlock[j] ^= pMask[j];
//decrypt block
XTEA_Decrypt(pBlock, Key);
//next block
pBlock-=8;
}
//decrypt again last block
XTEA_Decrypt(pMask, Key);
}
}
//--------------------------------------------------------------------------- |
et voila ce que j'ai écrit pour la première fonction...
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| TYPE
XTEABUF = array[0..1] of longword;
PXTEABUF = XTEABUF^
XTEAkey = array[0..3] of longword;
PXTEAkey = XTEAkey^
.
.
.
procedure XTEA_Decrypt(Buf:PXTEABUF;Key:PXTEAkey)
VAR
v0, v1, delta, sum, k1, k2 :longword;
i:integer;
begin
v0 := Buf[0];
v1 := Buf[1];
delta := $9E3779B9;
sum := 32 * delta;
for i := 0 to 31 do
begin
k1 := Key[((sum>>9) and $C))];
dec(v1,(((v0 shl 4) xor (v0 shr 5)) + v0)xor(sum + k1));
dec(sum,delta);
k2 := Key[((sum and 3) shl 2))];
dec(v0,(((v1 shl 4) xor (v1 shr 5)) + v1) xor (sum + k2));
end;
buf[0] = v0;
buf[1] = v1;
end; |
maintenant il me manque la 2eme partie de "cbc buggy xtea function" svp chers membres aidez moi à traduire cette fonction ? j'attends vos propositions et merci à tous en avance