Hallo,
ich muss gerade ein paar C Zeilen übersetzten. Aber da hier Äpfel und Birnen addiert werden komme ich nicht weiter.
Code:
struct crypt_block
{
uint8 keytable[256];
uint8 state;
uint8 counter;
uint8 sum;
};
static void init_crypt(struct crypt_block *block, uint8 *key, int len)
{
block->state = *key;
block->counter=0;
block->sum=0;
}
static void crypt(struct crypt_block *block, uint8 *data, int len, crypt_mode_t mode)
{
int i;
uint8 z;
for (i = 0; i < len; i++) {
block->counter++;
block->sum += block->keytable[block->counter];
z = data[i];
data[i] = z ^ block->keytable[(block->keytable[block->counter] + block->keytable[block->sum]) & 0xff] ^ block->state;
if (!mode) z = data[i];
block->state = block->state ^ z;
}
}
Geschrieben habe ich es nun so:
Delphi-Quellcode:
Type
TCrypt_Block = Record
keytable: Array [0 .. 255] of byte;
state: PArray; // to key
counter: byte;
sum: byte;
End;
PCrypt_Block = ^TCrypt_Block;
procedure init_crypt(block: PCrypt_Block; key: PArray; len: Integer);
begin
.........
block^.state := @key;
block^.counter := 0;
block^.sum := 0;
end;
procedure crypt(block: PCrypt_Block; Data: PArray; len: Word; mode: TCrypt_Mode);
Var
i: Integer;
z : byte;
begin
for i := 0 to len - 1 do
begin
Inc(block^.counter);
block^.sum := block^.sum + block^.keytable[block^.counter];
z := Data^[i];
Data^[i] := z xor block^.keytable[(block^.keytable[block^.counter] + block^.keytable[block^.sum]) and $FF] xor block^.state; // hier klemmt es
if mode = DECRYPT then
z := Data^[i];
block^.state := block^.state xor z; // und hier auch
end;
end;
Aber beim block.state komme ich nicht weiter. Ist ja eigentlich ein Zeiger auf ein Array ?
Besten Dank