- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 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
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
j = 0;
while (len >= 8)
{
N[0] = N[0] ^ in[j++];
N[1] = N[1] ^ in[j++];
// first round
S = N[0];
N[0] = N[0] + k[0];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
S = N[0];
N[0] = N[0] + k[1];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
S = N[0];
N[0] = N[0] + k[2];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
/* skipped k[3] - k[6] */
S = N[0];
N[0] = N[0] + k[7];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
// second round
S = N[0];
N[0] = N[0] + k[0];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
/* skipped */
S = N[0];
N[0] = N[0] + k[7];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
len = len - 8;
};
if (len > 0)
{
for (i=0;i<len;i++)
((uint8 *)N)[i] = ((uint8 *)N)[i]^((uint8 *)&in[j])[i];
// first round
S = N[0];
N[0] = N[0] + k[0];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
/* skipped */
S = N[0];
N[0] = N[0] + k[7];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
// second round
S = N[0];
N[0] = N[0] + k[0];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
/* skipped */
S = N[0];
N[0] = N[0] + k[7];
N[0] = sbox_ext1[Sa0->b0]^sbox_ext2[Sa0->b1]^sbox_ext3[Sa0->b2]^sbox_ext4[Sa0->b3];
N[0] = (N[0]<<11) | (N[0]>>21);
N[0] = N[0]^N[1];
N[1]=S;
};
полная версия - 250 строк.
это не школолостудентокод, это реальный код, за который когда то кому то были заплачены деньги
movaxbx 20.10.2011 10:53 # +5
defecate-plusplus 20.10.2011 10:55 # +1
AnimeGovno-_- 20.10.2011 10:56 # −3
wecanstoptrain 20.10.2011 10:57 # 0
Lure Of Chaos 20.10.2011 11:10 # +2
для тех, у кого время разработки и поддержки дешевле машинного = )
roman-kashitsyn 20.10.2011 12:26 # −1
В этом отношении показателен FFTW.
SIGSEGV 20.10.2011 14:07 # 0
Ну и напоследок: в последних 8 раундах ключи надо совать в обратном порядке.
SIGSEGV 20.10.2011 14:11 # 0
defecate-plusplus 20.10.2011 15:19 # 0
SIGSEGV 22.10.2011 11:15 # 0
AnimeGovno-_- 04.11.2011 20:44 # 0
AHCKujlbHblu_netyx 04.09.2020 11:41 # 0