Merge branch 'fix/xtea' into develop
This commit is contained in:
commit
9cb6c6b910
@ -15,7 +15,9 @@ int usage(char *name)
|
|||||||
{
|
{
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
printf("Usage: %s [-d](ecrypt) cipher infile outfile\nCiphers:\n", name);
|
printf("Usage encrypt: %s cipher infile outfile\n", name);
|
||||||
|
printf("Usage decrypt: %s -d cipher infile outfile\n", name);
|
||||||
|
printf("Usage test: %s -t cipher\nCiphers:\n", name);
|
||||||
for (x = 0; cipher_descriptor[x].name != NULL; x++) {
|
for (x = 0; cipher_descriptor[x].name != NULL; x++) {
|
||||||
printf("%s\n",cipher_descriptor[x].name);
|
printf("%s\n",cipher_descriptor[x].name);
|
||||||
}
|
}
|
||||||
@ -24,8 +26,6 @@ int usage(char *name)
|
|||||||
|
|
||||||
void register_algs(void)
|
void register_algs(void)
|
||||||
{
|
{
|
||||||
int x;
|
|
||||||
|
|
||||||
#ifdef LTC_RIJNDAEL
|
#ifdef LTC_RIJNDAEL
|
||||||
register_cipher (&aes_desc);
|
register_cipher (&aes_desc);
|
||||||
#endif
|
#endif
|
||||||
@ -108,6 +108,27 @@ int main(int argc, char *argv[])
|
|||||||
register_algs();
|
register_algs();
|
||||||
|
|
||||||
if (argc < 4) {
|
if (argc < 4) {
|
||||||
|
if ((argc > 2) && (!strcmp(argv[1], "-t"))) {
|
||||||
|
cipher = argv[2];
|
||||||
|
cipher_idx = find_cipher(cipher);
|
||||||
|
if (cipher_idx == -1) {
|
||||||
|
printf("Invalid cipher %s entered on command line.\n", cipher);
|
||||||
|
exit(-1);
|
||||||
|
} /* if */
|
||||||
|
if (cipher_descriptor[cipher_idx].test)
|
||||||
|
{
|
||||||
|
if (cipher_descriptor[cipher_idx].test() != CRYPT_OK)
|
||||||
|
{
|
||||||
|
printf("Error when testing cipher %s.\n", cipher);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("Testing cipher %s succeeded.\n", cipher);
|
||||||
|
exit(0);
|
||||||
|
} /* if ... else */
|
||||||
|
} /* if */
|
||||||
|
}
|
||||||
return usage(argv[0]);
|
return usage(argv[0]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -321,56 +321,56 @@ Key Size: 56 bytes
|
|||||||
|
|
||||||
Cipher: xtea
|
Cipher: xtea
|
||||||
Key Size: 16 bytes
|
Key Size: 16 bytes
|
||||||
0: 256004E1F55BC0C7
|
0: FFC52D10A010010B
|
||||||
1: 2D385C151A691C42
|
1: 9CFB2B659387BC37
|
||||||
2: F93BFEA758A7DDB4
|
2: 7067D153B259E0D6
|
||||||
3: 2A905D97C0CA3E48
|
3: 0A1769C085DD67A9
|
||||||
4: 12C7C2787B913AE6
|
4: A9D781A1A7B4B292
|
||||||
5: FB24B1F32549EF59
|
5: 6FEF8300DF395062
|
||||||
6: 2A8BFF867FB4FF73
|
6: A67B66CA99B9121C
|
||||||
7: 5692243526C6BA77
|
7: 006E657E1DAD46D3
|
||||||
8: 4CD423ADFCDD1B6C
|
8: 2D63322467438A5B
|
||||||
9: 9B99AFC35EB2FED0
|
9: 4F67A826126BE01D
|
||||||
10: 416B4AA4E07DA7F4
|
10: 852C6FD597EBAB00
|
||||||
11: 4DBC9052ABFF9510
|
11: F8DD14F59FF44A20
|
||||||
12: 8AF9457F8E599216
|
12: CD4DC4E92B5CD40B
|
||||||
13: BC3CA2B1C7267395
|
13: 802B89A3EFB75810
|
||||||
14: E4BE31DF42282F7A
|
14: CCA7D920F69A5491
|
||||||
15: B344CA8AA57E9E40
|
15: 0DFF98CA4F71CA0E
|
||||||
16: 57A1F94CD2F4576D
|
16: 80118F2AE4E83DE8
|
||||||
17: 96177FCD28BFF1BB
|
17: CD6935285D45D83C
|
||||||
18: 78A1F63A0EBAAC33
|
18: 47B4613483889187
|
||||||
19: 5F3FCBCD7442B617
|
19: 87F3F1975B8618E3
|
||||||
20: D6F7CD5ECA688967
|
20: 49BF15EF40C72DBA
|
||||||
21: D92EDF70CBDE703F
|
21: F850822AD58AD1CC
|
||||||
22: E2E2C2EE5D18E58E
|
22: 9701AD2EF51FD705
|
||||||
23: 4BF00478CB7833C3
|
23: 705AE7F6FD60420B
|
||||||
24: F9936D550815FE8F
|
24: E885CC84A9866B28
|
||||||
25: 19A3B07B3E47D7D8
|
25: 93E0D712D27E4E22
|
||||||
26: ACA441F099A7E30C
|
26: 8C9CE43E517D3324
|
||||||
27: F70183F199988E3F
|
27: 31004841AF51FB0E
|
||||||
28: 0A41FC22F369310A
|
28: B250BEBF0E58457C
|
||||||
29: ABFAF40853A4A38C
|
29: 78290B6D83D442E9
|
||||||
30: 6B5D29DB1155D96B
|
30: 3EC72388709CC6E2
|
||||||
31: 0DD0C08A27561D66
|
31: 099FB875AB5CA6EA
|
||||||
32: 4C56E22292F17AA3
|
32: B15E20B58F5E8DD0
|
||||||
33: 3F925ED65613DF4A
|
33: A41511E198E0B1E7
|
||||||
34: 521B4C97081DC901
|
34: B8B5CDD9607B6B40
|
||||||
35: 2B1EC3E1C8CF84EC
|
35: BEF9624E922DB8AC
|
||||||
36: 2A412556F42A48F6
|
36: AF198FCD314D8DD4
|
||||||
37: 0A57B8A527DFE507
|
37: 1A37E433C261EF9D
|
||||||
38: EB55C9C157E3C922
|
38: AB7895A2E9D41EE4
|
||||||
39: 6E6D6E9AB925ED92
|
39: 4C95BE8D34A7D75B
|
||||||
40: A4C5C90A0D4A8F16
|
40: 0D90A8EB03F2852E
|
||||||
41: 7F9F9F658C427D55
|
41: 9AAD1D630D835C67
|
||||||
42: 9A5139994FF04C3F
|
42: 6AD88003661B2C5E
|
||||||
43: 9054771F027E29BC
|
43: 4FA7E2CC53EBA728
|
||||||
44: 90543E7BAED313BD
|
44: 862245D794441522
|
||||||
45: 5DEC1EBE6A617D36
|
45: FAB262C13D245B3E
|
||||||
46: 19AB6A708CDB9B2D
|
46: C0A29AA315A5721E
|
||||||
47: BABB97BB5CF9D4E4
|
47: F98617BBEFA6AD6A
|
||||||
48: 2C2ADC05AF255861
|
48: 6F84EAB462F10F36
|
||||||
49: 52266710153E3F7E
|
49: 30850051303CDB96
|
||||||
|
|
||||||
|
|
||||||
Cipher: rc5
|
Cipher: rc5
|
||||||
|
@ -57,23 +57,23 @@ EAX-blowfish (8 byte key)
|
|||||||
16: 60A315193F58144F5701D547C79FEEED, 912FDBDB05467DF5
|
16: 60A315193F58144F5701D547C79FEEED, 912FDBDB05467DF5
|
||||||
|
|
||||||
EAX-xtea (16 byte key)
|
EAX-xtea (16 byte key)
|
||||||
0: , 86881D824E3BC561
|
0: , A04FAC8D0416F081
|
||||||
1: EE, 4C3505F04611D9C2
|
1: 5E, F95DAA99F8FE28E9
|
||||||
2: 80C8, 6A3428BEEAD60738
|
2: B6A7, E2A05E1F1E6D17B5
|
||||||
3: BF88E7, 04F1E99E9F5906C2
|
3: 27D698, CCC0CC54F40DA243
|
||||||
4: E06574B7, 33B0153AAEF9776F
|
4: C2E81CCC, 283AB8F109D287ED
|
||||||
5: 42D950AF63, 4A0F415640322FDF
|
5: 51B99DF694, A9637DB356B4BC0C
|
||||||
6: C30F6AD46EC9, 9646FE909D2B95CB
|
6: C2ED3E79A4F2, 413D3A65FFE803BA
|
||||||
7: A0049FCA856A14, A0257289C6BBF278
|
7: 40E35BE6CA019C, 1B68833B90E4E026
|
||||||
8: 2814B0C1358440E0, C4B0A2354925E887
|
8: C246C2B5ACEBEB08, 50CFEB01DEC3BB1F
|
||||||
9: BF4F062B52C1E489CF, B56442A3CA57A041
|
9: 35E2F7AAB57842D50F, 617804483BFFCA9D
|
||||||
10: 63DF433956831B8780FC, ADF9ED0B46DCA19E
|
10: 2F855AB7A4664958300D, 6F054767FE484664
|
||||||
11: C317FD079817F50E0E8A16, 2EA0EC993FC603AE
|
11: 2824A5486D1B621D0F992A, 238566B9F56ECAB1
|
||||||
12: 2BD12FDDD81EB11660346D2A, FBC6F69125BBA88D
|
12: BF5C121A6144AA0CC05A380E, 63F4DA4B898FB2A8
|
||||||
13: 85D356536FE2843C6BBE60EDBC, BB2FEFD04F230E79
|
13: 2EB53E8A4698EDEBB990FC65E6, 7DFFE0E43187D10C
|
||||||
14: 22493009DB01B4746F4927A8C4FB, 64CC08471D93C9AC
|
14: 85F77FD150C6649F5826AD45D50D, AA660F37975768FC
|
||||||
15: C0F3C0DB08DC93FBA725D1E02DE084, 77B762213DDCCFFE
|
15: 8B4EB3750814EE7E8FC6B97B3ED1ED, F79545FB1F1C389B
|
||||||
16: 568B66D3112556BD98FF9339E9C002E5, C8355F508219FE0C
|
16: 980EB7FCEEE37558BEDA0E938325F608, 2FAA9235BFA3EA30
|
||||||
|
|
||||||
EAX-rc5 (8 byte key)
|
EAX-rc5 (8 byte key)
|
||||||
0: , 169C7954341EF44D
|
0: , 169C7954341EF44D
|
||||||
|
@ -57,23 +57,23 @@ OCB-blowfish (8 byte key)
|
|||||||
16: 1F4919EB6CAD8D19B755157FD1A2E89A, F7EAE8DB5F5FA9B1
|
16: 1F4919EB6CAD8D19B755157FD1A2E89A, F7EAE8DB5F5FA9B1
|
||||||
|
|
||||||
OCB-xtea (16 byte key)
|
OCB-xtea (16 byte key)
|
||||||
0: , 311A7010FB045BEE
|
0: , 5F751041CDB0C2B5
|
||||||
1: F8, E65BD38F1C4E7BFF
|
1: A5, C48C22CADB797CF7
|
||||||
2: 7AE4, 5B78197CE29D8FD4
|
2: A3E9, CBB821F70FBAEA3A
|
||||||
3: 36A39F, 98FEA390BC03F915
|
3: 7CA3C5, 686647FF8466C56A
|
||||||
4: 9AE3921C, 76F6EEBC194DEFE4
|
4: 318C2DA8, 65C58584A3E9118A
|
||||||
5: E925968C09, 105E0FBF3B664875
|
5: A7C02B6438, F87A48C547971C30
|
||||||
6: 537DE3B6AADF, B2C57709CEDBBA10
|
6: 314FBFEE9BDE, E62DC6E65FD35E8B
|
||||||
7: 4525D6927B4343, D83CB96C7ADA6241
|
7: 87481270584EB8, C582AC684B8D02A0
|
||||||
8: 807A0E8382A91CE9, F6DF1EAA4929EEEE
|
8: 1E5E0DD030860CBC, A19FF0144005994E
|
||||||
9: 59C09E427C56CDF015, 885813D7F4D4CB40
|
9: F0BDCCA3C2463850A5, 15420E4C10821445
|
||||||
10: F785DAB910D186761A82, 46346AB52983186D
|
10: B6D1C598C7046F921299, EE9C28659EE2927E
|
||||||
11: F11CE4DAAEBCC204B318F2, 67E95CA14FB4FD3D
|
11: B1376A4D9B3EF59B873917, 0DD3005E47CE72DB
|
||||||
12: 4A7FD586015561801115981F, 70DAC17D50DB4E5C
|
12: BC9D026F374A89B8A45E55D0, 09DA1DDFDC3A5463
|
||||||
13: CF03722B78DE7AE951B5E6442A, F40D80E40690378E
|
13: CC8DF93BE2D71601CDC52124A7, 9623D92C2FD9D62C
|
||||||
14: B17224FE335A8CC17425D0AA3382, 2BEEC3D3828EA9E8
|
14: 90854B2161951CEA934AAB4E2B6C, E80632AB9F2CE421
|
||||||
15: 5B333EE0CC163F8C22E5E0747AE7F6, 29BCD90905505D05
|
15: 7ADE7A19FD0BAF71BE1C6DA601F6D3, 90612EEA15A64111
|
||||||
16: 7FC2C0D4E865D082174AE033E71DD3A9, E34E60A7D43F8EDB
|
16: FA21FE68977D60D51ED897915945E5C4, 1A9344DD8E25D45C
|
||||||
|
|
||||||
OCB-rc5 (8 byte key)
|
OCB-rc5 (8 byte key)
|
||||||
0: , 4287F61BB46382B2
|
0: , 4287F61BB46382B2
|
||||||
|
@ -57,23 +57,23 @@ OCB-blowfish (8 byte key)
|
|||||||
16: 3EDC4A0FA95BD8F944BCE4F252B6470C, 87B54BBEA86A5B5C
|
16: 3EDC4A0FA95BD8F944BCE4F252B6470C, 87B54BBEA86A5B5C
|
||||||
|
|
||||||
OCB-xtea (16 byte key)
|
OCB-xtea (16 byte key)
|
||||||
0: , 56722ECFE6ED1300
|
0: , F996E5CC593FD6E9
|
||||||
1: CA, DF53479333DB86AA
|
1: 88, 64636E3C48940F8D
|
||||||
2: 9529, D0B5A859106FCC9B
|
2: 223D, 230D7718A8BCB965
|
||||||
3: DDBAB2, 3B31FFDA57CF51C8
|
3: 32531B, 37FEA4728FAE474D
|
||||||
4: 22EB7DD4, 2BB34D04FFF810CB
|
4: BDCF3E96, A9F30B4187CD174C
|
||||||
5: 108693761A, 7AFF6F52574A019A
|
5: 7B0CCDE546, E7328648817987FE
|
||||||
6: 391FB7C61E76, 616C5E66297F2CCE
|
6: 824BD771B724, 0BDF80C14EDB758B
|
||||||
7: 3E22E4A4A0BD13, E84C385ABE25C8D8
|
7: 8F0E73B1280717, 2DEDBF2C87180CC4
|
||||||
8: 94FA11D5243EE34F, 8F017DE96049D0F9
|
8: 6F7EFA44AF774B1F, 1A9C5509D54A7185
|
||||||
9: DADB6B5D27049240A7, CA69E14047C6BBA7
|
9: 9749BCF684F68755AC, E46941DBE948BDD5
|
||||||
10: F79C8EA83C69DE914DAC, 1EF042DA68106C64
|
10: DCD32D91FE2D5590355D, E17DFA54A5B60E07
|
||||||
11: C5B6E04AB8B9491E6A99F8, 143515779A55C972
|
11: 3CBBF6464D438AB95B3ACF, C207876D030362EC
|
||||||
12: 33F493AB7AE62DADA38C5B24, 531BF7799A778620
|
12: 1C804A611F6CE4CFD2657366, B957F48EA00C428C
|
||||||
13: 6DAA66BF02E66DF8C0B6C1CC24, 6CDF72786C5EC761
|
13: 5A2F6927951D8F60C754893790, EB3A27A9E5B8928F
|
||||||
14: 4940E22F083A0F3EC01B3D468928, 185EE9CD2D7521AB
|
14: C710D28CD02726002596D9196021, C6C9EBF090A20C07
|
||||||
15: 5D100BF55708147A9537C7DB6E42A6, 78984C682124E904
|
15: 298FFCE0CD42BC329697AEB5F53A56, BB2F0C415317928C
|
||||||
16: 744033532DDB372BA4AFADEA1959251E, 438EB9F6B939844C
|
16: 59F6395260ECEAB2E3511991EEEF9656, 278A218A720F8E05
|
||||||
|
|
||||||
OCB-rc5 (8 byte key)
|
OCB-rc5 (8 byte key)
|
||||||
0: , E7462C3C0C95A73E
|
0: , E7462C3C0C95A73E
|
||||||
|
@ -57,23 +57,23 @@ OMAC-blowfish (8 byte key)
|
|||||||
16: 8E6831D5370678EF
|
16: 8E6831D5370678EF
|
||||||
|
|
||||||
OMAC-xtea (16 byte key)
|
OMAC-xtea (16 byte key)
|
||||||
0: 4A0B6160602E6C69
|
0: A821403929958A1A
|
||||||
1: 1B797D5E14237F21
|
1: 68C4A02D47C2E7C0
|
||||||
2: 938300C83B99D0AC
|
2: 7D37358141506DC1
|
||||||
3: F989B99B3DE563C6
|
3: 9BEA3AAE55B75F52
|
||||||
4: F65DEA2A6AD45D1E
|
4: 884D053D05CC8DE4
|
||||||
5: 1DB329F0239E162E
|
5: E953747483FF4E0D
|
||||||
6: C0C148C4EE8B4E1F
|
6: B6E77E72C9738E4F
|
||||||
7: D82B387D5DFFE1FB
|
7: 8AB67D2B24E3D512
|
||||||
8: 1D027A4493898DF2
|
8: 329C0B9D504A0D41
|
||||||
9: 196369F6B0AF971A
|
9: 50323DA8ACEF4164
|
||||||
10: 2A37A2655191D10A
|
10: FA3239C668C34DA3
|
||||||
11: BD514BE32718EB4A
|
11: B5A12FC81FC24084
|
||||||
12: B4DBC978F8EE74ED
|
12: 71A01A3ED3936934
|
||||||
13: 8ACCAD35C3D436AE
|
13: F29B630CEB6AEDDB
|
||||||
14: 73ABDC1956630C9B
|
14: F8802F0D4504D55E
|
||||||
15: 73410D3D169373CE
|
15: F844B92162038F99
|
||||||
16: 23D797B3C7919374
|
16: 99AECD7CA69F0465
|
||||||
|
|
||||||
OMAC-rc5 (8 byte key)
|
OMAC-rc5 (8 byte key)
|
||||||
0: E374E40562C3CB23
|
0: E374E40562C3CB23
|
||||||
|
@ -57,23 +57,23 @@ PMAC-blowfish (8 byte key)
|
|||||||
16: BDFE0C7F0254BAD5
|
16: BDFE0C7F0254BAD5
|
||||||
|
|
||||||
PMAC-xtea (16 byte key)
|
PMAC-xtea (16 byte key)
|
||||||
0: A7EF6BB667216DDA
|
0: F5E28630DFDE34E0
|
||||||
1: B039E53812C4ABDC
|
1: FFCC52D905DA5198
|
||||||
2: 87D2F8EA5FB6864D
|
2: 25198AB18B2B290D
|
||||||
3: F85E3F4C1D9F5EFC
|
3: 18914E50791161E9
|
||||||
4: 4EB749D982FB5FE2
|
4: 200F832212AD6747
|
||||||
5: 0BFA0F172027441A
|
5: A9D09C41D734DDF7
|
||||||
6: FF82D01F36A6EC91
|
6: 32D7CCA3F4BD8215
|
||||||
7: 3BC2AA2028EBBD7A
|
7: 91A1AA9389CD5D02
|
||||||
8: 15AA03A97A971E2A
|
8: 35CB1F77D7C25E2F
|
||||||
9: C974691F5D66B835
|
9: D91EEE6D0A3874F3
|
||||||
10: 4FC7AA8F399A79ED
|
10: A42872686A8FF6F2
|
||||||
11: 2633DA9E94673BAE
|
11: 7568908634A79CBD
|
||||||
12: 82A9FD48C5B60902
|
12: 5B91A633D919BC34
|
||||||
13: 31BF6DA9EE0CE7E4
|
13: 32DCD17176896F1D
|
||||||
14: 26B2538601B7620E
|
14: 2BBBA64F30E672B6
|
||||||
15: D103F3C0B4579BE5
|
15: AFEB07DBC636AEED
|
||||||
16: 031346BA20CD87BC
|
16: 7A417347CA03C598
|
||||||
|
|
||||||
PMAC-rc5 (8 byte key)
|
PMAC-rc5 (8 byte key)
|
||||||
0: C6B48F8DEC631F7C
|
0: C6B48F8DEC631F7C
|
||||||
|
@ -48,10 +48,10 @@ int xtea_setup(const unsigned char *key, int keylen, int num_rounds, symmetric_k
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* load key */
|
/* load key */
|
||||||
LOAD32L(K[0], key+0);
|
LOAD32H(K[0], key+0);
|
||||||
LOAD32L(K[1], key+4);
|
LOAD32H(K[1], key+4);
|
||||||
LOAD32L(K[2], key+8);
|
LOAD32H(K[2], key+8);
|
||||||
LOAD32L(K[3], key+12);
|
LOAD32H(K[3], key+12);
|
||||||
|
|
||||||
for (x = sum = 0; x < 32; x++) {
|
for (x = sum = 0; x < 32; x++) {
|
||||||
skey->xtea.A[x] = (sum + K[sum&3]) & 0xFFFFFFFFUL;
|
skey->xtea.A[x] = (sum + K[sum&3]) & 0xFFFFFFFFUL;
|
||||||
@ -82,8 +82,8 @@ int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
|
|||||||
LTC_ARGCHK(ct != NULL);
|
LTC_ARGCHK(ct != NULL);
|
||||||
LTC_ARGCHK(skey != NULL);
|
LTC_ARGCHK(skey != NULL);
|
||||||
|
|
||||||
LOAD32L(y, &pt[0]);
|
LOAD32H(y, &pt[0]);
|
||||||
LOAD32L(z, &pt[4]);
|
LOAD32H(z, &pt[4]);
|
||||||
for (r = 0; r < 32; r += 4) {
|
for (r = 0; r < 32; r += 4) {
|
||||||
y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r])) & 0xFFFFFFFFUL;
|
y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r])) & 0xFFFFFFFFUL;
|
||||||
z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r])) & 0xFFFFFFFFUL;
|
z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r])) & 0xFFFFFFFFUL;
|
||||||
@ -97,8 +97,8 @@ int xtea_ecb_encrypt(const unsigned char *pt, unsigned char *ct, symmetric_key *
|
|||||||
y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r+3])) & 0xFFFFFFFFUL;
|
y = (y + ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r+3])) & 0xFFFFFFFFUL;
|
||||||
z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r+3])) & 0xFFFFFFFFUL;
|
z = (z + ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r+3])) & 0xFFFFFFFFUL;
|
||||||
}
|
}
|
||||||
STORE32L(y, &ct[0]);
|
STORE32H(y, &ct[0]);
|
||||||
STORE32L(z, &ct[4]);
|
STORE32H(z, &ct[4]);
|
||||||
return CRYPT_OK;
|
return CRYPT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -118,8 +118,8 @@ int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *
|
|||||||
LTC_ARGCHK(ct != NULL);
|
LTC_ARGCHK(ct != NULL);
|
||||||
LTC_ARGCHK(skey != NULL);
|
LTC_ARGCHK(skey != NULL);
|
||||||
|
|
||||||
LOAD32L(y, &ct[0]);
|
LOAD32H(y, &ct[0]);
|
||||||
LOAD32L(z, &ct[4]);
|
LOAD32H(z, &ct[4]);
|
||||||
for (r = 31; r >= 0; r -= 4) {
|
for (r = 31; r >= 0; r -= 4) {
|
||||||
z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r])) & 0xFFFFFFFFUL;
|
z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r])) & 0xFFFFFFFFUL;
|
||||||
y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r])) & 0xFFFFFFFFUL;
|
y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r])) & 0xFFFFFFFFUL;
|
||||||
@ -133,8 +133,8 @@ int xtea_ecb_decrypt(const unsigned char *ct, unsigned char *pt, symmetric_key *
|
|||||||
z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r-3])) & 0xFFFFFFFFUL;
|
z = (z - ((((y<<4)^(y>>5)) + y) ^ skey->xtea.B[r-3])) & 0xFFFFFFFFUL;
|
||||||
y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r-3])) & 0xFFFFFFFFUL;
|
y = (y - ((((z<<4)^(z>>5)) + z) ^ skey->xtea.A[r-3])) & 0xFFFFFFFFUL;
|
||||||
}
|
}
|
||||||
STORE32L(y, &pt[0]);
|
STORE32H(y, &pt[0]);
|
||||||
STORE32L(z, &pt[4]);
|
STORE32H(z, &pt[4]);
|
||||||
return CRYPT_OK;
|
return CRYPT_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -147,32 +147,98 @@ int xtea_test(void)
|
|||||||
#ifndef LTC_TEST
|
#ifndef LTC_TEST
|
||||||
return CRYPT_NOP;
|
return CRYPT_NOP;
|
||||||
#else
|
#else
|
||||||
static const unsigned char key[16] =
|
static const struct {
|
||||||
{ 0x78, 0x56, 0x34, 0x12, 0xf0, 0xcd, 0xcb, 0x9a,
|
unsigned char key[16], pt[8], ct[8];
|
||||||
0x48, 0x37, 0x26, 0x15, 0xc0, 0xbf, 0xae, 0x9d };
|
} tests[] = {
|
||||||
static const unsigned char pt[8] =
|
{
|
||||||
{ 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 };
|
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
static const unsigned char ct[8] =
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||||
{ 0x75, 0xd7, 0xc5, 0xbf, 0xcf, 0x58, 0xc9, 0x3f };
|
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||||
|
{ 0xde, 0xe9, 0xd4, 0xd8, 0xf7, 0x13, 0x1e, 0xd9 }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02,
|
||||||
|
0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04 },
|
||||||
|
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||||
|
{ 0xa5, 0x97, 0xab, 0x41, 0x76, 0x01, 0x4d, 0x72 }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04,
|
||||||
|
0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06 },
|
||||||
|
{ 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02 },
|
||||||
|
{ 0xb1, 0xfd, 0x5d, 0xa9, 0xcc, 0x6d, 0xc9, 0xdc }
|
||||||
|
}, {
|
||||||
|
{ 0x78, 0x69, 0x5a, 0x4b, 0x3c, 0x2d, 0x1e, 0x0f,
|
||||||
|
0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
|
||||||
|
{ 0xf0, 0xe1, 0xd2, 0xc3, 0xb4, 0xa5, 0x96, 0x87 },
|
||||||
|
{ 0x70, 0x4b, 0x31, 0x34, 0x47, 0x44, 0xdf, 0xab }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||||
|
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||||
|
{ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 },
|
||||||
|
{ 0x49, 0x7d, 0xf3, 0xd0, 0x72, 0x61, 0x2c, 0xb5 }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||||
|
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||||
|
{ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 },
|
||||||
|
{ 0xe7, 0x8f, 0x2d, 0x13, 0x74, 0x43, 0x41, 0xd8 }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
|
||||||
|
0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f },
|
||||||
|
{ 0x5a, 0x5b, 0x6e, 0x27, 0x89, 0x48, 0xd7, 0x7f },
|
||||||
|
{ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||||
|
{ 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48 },
|
||||||
|
{ 0xa0, 0x39, 0x05, 0x89, 0xf8, 0xb8, 0xef, 0xa5 }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||||
|
{ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 },
|
||||||
|
{ 0xed, 0x23, 0x37, 0x5a, 0x82, 0x1a, 0x8c, 0x2d }
|
||||||
|
}, {
|
||||||
|
{ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
|
||||||
|
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
|
||||||
|
{ 0x70, 0xe1, 0x22, 0x5d, 0x6e, 0x4e, 0x76, 0x55 },
|
||||||
|
{ 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41, 0x41 }
|
||||||
|
}
|
||||||
|
};
|
||||||
unsigned char tmp[2][8];
|
unsigned char tmp[2][8];
|
||||||
symmetric_key skey;
|
symmetric_key skey;
|
||||||
int err, y;
|
int i, err, y;
|
||||||
|
for (i = 0; i < (int)(sizeof(tests)/sizeof(tests[0])); i++) {
|
||||||
|
zeromem(&skey, sizeof(skey));
|
||||||
|
if ((err = xtea_setup(tests[i].key, 16, 0, &skey)) != CRYPT_OK) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
xtea_ecb_encrypt(tests[i].pt, tmp[0], &skey);
|
||||||
|
xtea_ecb_decrypt(tmp[0], tmp[1], &skey);
|
||||||
|
|
||||||
if ((err = xtea_setup(key, 16, 0, &skey)) != CRYPT_OK) {
|
if (XMEMCMP(tmp[0], tests[i].ct, 8) != 0 || XMEMCMP(tmp[1], tests[i].pt, 8) != 0) {
|
||||||
return err;
|
#if 0
|
||||||
}
|
printf("\n\nTest %d failed\n", i);
|
||||||
xtea_ecb_encrypt(pt, tmp[0], &skey);
|
if (XMEMCMP(tmp[0], tests[i].ct, 8)) {
|
||||||
xtea_ecb_decrypt(tmp[0], tmp[1], &skey);
|
printf("CT: ");
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
if (XMEMCMP(tmp[0], ct, 8) != 0 || XMEMCMP(tmp[1], pt, 8) != 0) {
|
printf("%02x ", tmp[0][i]);
|
||||||
return CRYPT_FAIL_TESTVECTOR;
|
}
|
||||||
}
|
printf("\n");
|
||||||
|
} else {
|
||||||
|
printf("PT: ");
|
||||||
|
for (i = 0; i < 8; i++) {
|
||||||
|
printf("%02x ", tmp[1][i]);
|
||||||
|
}
|
||||||
|
printf("\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return CRYPT_FAIL_TESTVECTOR;
|
||||||
|
}
|
||||||
|
|
||||||
/* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */
|
/* now see if we can encrypt all zero bytes 1000 times, decrypt and come back where we started */
|
||||||
for (y = 0; y < 8; y++) tmp[0][y] = 0;
|
for (y = 0; y < 8; y++) tmp[0][y] = 0;
|
||||||
for (y = 0; y < 1000; y++) xtea_ecb_encrypt(tmp[0], tmp[0], &skey);
|
for (y = 0; y < 1000; y++) xtea_ecb_encrypt(tmp[0], tmp[0], &skey);
|
||||||
for (y = 0; y < 1000; y++) xtea_ecb_decrypt(tmp[0], tmp[0], &skey);
|
for (y = 0; y < 1000; y++) xtea_ecb_decrypt(tmp[0], tmp[0], &skey);
|
||||||
for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR;
|
for (y = 0; y < 8; y++) if (tmp[0][y] != 0) return CRYPT_FAIL_TESTVECTOR;
|
||||||
|
} /* for */
|
||||||
|
|
||||||
return CRYPT_OK;
|
return CRYPT_OK;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user