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 c : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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