Skip to content

Commit f33d5a2

Browse files
authored
Add files via upload
1 parent f6bb646 commit f33d5a2

File tree

4 files changed

+70
-68
lines changed

4 files changed

+70
-68
lines changed

magma_calc.c

+52-51
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ GOST_Magma_T(const uint8_t *in_data, uint8_t *out_data)
2929
int i;
3030
for (i = 0; i < 4; i++)
3131
{
32-
first_part_byte = (in_data[i] & 0xf0) >> 4;
33-
sec_part_byte = (in_data[i] & 0x0f);
32+
first_part_byte = (in_data[i] & 0x0f);
33+
sec_part_byte = (in_data[i] & 0xf0) >> 4;
3434
first_part_byte = Pi[i * 2] [first_part_byte];
3535
sec_part_byte = Pi[i * 2 + 1] [sec_part_byte];
36-
out_data[i] = (first_part_byte << 4) | sec_part_byte;
36+
out_data[i] = (sec_part_byte << 4) | first_part_byte;
3737
}
3838
}
3939

@@ -50,7 +50,7 @@ GOST_Magma_Add_32(const uint8_t *a, const uint8_t *b, uint8_t *c)
5050
{
5151
int i;
5252
unsigned int internal = 0;
53-
for (i = 3; i >= 0; i--)
53+
for (i = 0; i < 4; i++)
5454
{
5555
internal = a[i] + b[i] + (internal >> 8);
5656
c[i] = internal & 0xff;
@@ -64,15 +64,15 @@ GOST_Magma_g(const uint8_t *k, const uint8_t *a, uint8_t *out_data)
6464
uint32_t out_data_32;
6565
GOST_Magma_Add_32(a, k, internal);
6666
GOST_Magma_T(internal, internal);
67-
out_data_32 = internal[0];
68-
out_data_32 = (out_data_32 << 8) + internal[1];
67+
out_data_32 = internal[3];
6968
out_data_32 = (out_data_32 << 8) + internal[2];
70-
out_data_32 = (out_data_32 << 8) + internal[3];
69+
out_data_32 = (out_data_32 << 8) + internal[1];
70+
out_data_32 = (out_data_32 << 8) + internal[0];
7171
out_data_32 = (out_data_32 << 11)|(out_data_32 >> 21);
72-
out_data[3] = out_data_32;
73-
out_data[2] = out_data_32 >> 8;
74-
out_data[1] = out_data_32 >> 16;
75-
out_data[0] = out_data_32 >> 24;
72+
out_data[0] = out_data_32;
73+
out_data[1] = out_data_32 >> 8;
74+
out_data[2] = out_data_32 >> 16;
75+
out_data[3] = out_data_32 >> 24;
7676
}
7777

7878
static void
@@ -84,8 +84,8 @@ GOST_Magma_G(const uint8_t *k, const uint8_t *a, uint8_t *out_data)
8484
int i;
8585
for(i = 0; i < 4; i++)
8686
{
87-
a_0[i] = a[4 + i];
88-
a_1[i] = a[i];
87+
a_1[i] = a[4 + i];
88+
a_0[i] = a[i];
8989
}
9090
GOST_Magma_g(k, a_0, G);
9191
GOST_Magma_Add(a_1, G, G);
@@ -96,9 +96,10 @@ GOST_Magma_G(const uint8_t *k, const uint8_t *a, uint8_t *out_data)
9696
}
9797
for(i = 0; i < 4; i++)
9898
{
99-
out_data[i] = a_1[i];
100-
out_data[4 + i] = a_0[i];
99+
out_data[i] = a_0[i];
100+
out_data[4 + i] = a_1[i];
101101
}
102+
102103
}
103104

104105
static void
@@ -110,55 +111,55 @@ GOST_Magma_G_Fin(const uint8_t *k, const uint8_t *a, uint8_t *out_data)
110111
int i;
111112
for(i = 0; i < 4; i++)
112113
{
113-
a_0[i] = a[4 + i];
114-
a_1[i] = a[i];
114+
a_1[i] = a[4 + i];
115+
a_0[i] = a[i];
115116
}
116117
GOST_Magma_g(k, a_0, G);
117118
GOST_Magma_Add(a_1, G, G);
118119
for(i = 0; i < 4; i++)
119120
a_1[i] = G[i];
120121
for(i = 0; i < 4; i++)
121122
{
122-
out_data[i] = a_1[i];
123-
out_data[4 + i] = a_0[i];
123+
out_data[i] = a_0[i];
124+
out_data[4 + i] = a_1[i];
124125
}
125126
}
126127

127128
void
128129
GOST_Magma_Expand_Key(const uint8_t *key)
129130
{
130-
memcpy(iter_key[0], key, 4);
131-
memcpy(iter_key[1], key + 4, 4);
132-
memcpy(iter_key[2], key + 8, 4);
133-
memcpy(iter_key[3], key + 12, 4);
134-
memcpy(iter_key[4], key + 16, 4);
135-
memcpy(iter_key[5], key + 20, 4);
136-
memcpy(iter_key[6], key + 24, 4);
137-
memcpy(iter_key[7], key + 28, 4);
138-
memcpy(iter_key[8], key, 4);
139-
memcpy(iter_key[9], key + 4, 4);
140-
memcpy(iter_key[10], key + 8, 4);
141-
memcpy(iter_key[11], key + 12, 4);
142-
memcpy(iter_key[12], key + 16, 4);
143-
memcpy(iter_key[13], key + 20, 4);
144-
memcpy(iter_key[14], key + 24, 4);
145-
memcpy(iter_key[15], key + 28, 4);
146-
memcpy(iter_key[16], key, 4);
147-
memcpy(iter_key[17], key + 4, 4);
148-
memcpy(iter_key[18], key + 8, 4);
149-
memcpy(iter_key[19], key + 12, 4);
150-
memcpy(iter_key[20], key + 16, 4);
151-
memcpy(iter_key[21], key + 20, 4);
152-
memcpy(iter_key[22], key + 24, 4);
153-
memcpy(iter_key[23], key + 28, 4);
154-
memcpy(iter_key[24], key + 28, 4);
155-
memcpy(iter_key[25], key + 24, 4);
156-
memcpy(iter_key[26], key + 20, 4);
157-
memcpy(iter_key[27], key + 16, 4);
158-
memcpy(iter_key[28], key + 12, 4);
159-
memcpy(iter_key[29], key + 8, 4);
160-
memcpy(iter_key[30], key + 4, 4);
161-
memcpy(iter_key[31], key, 4);
131+
memcpy(iter_key[7], key, 4);
132+
memcpy(iter_key[6], key + 4, 4);
133+
memcpy(iter_key[5], key + 8, 4);
134+
memcpy(iter_key[4], key + 12, 4);
135+
memcpy(iter_key[3], key + 16, 4);
136+
memcpy(iter_key[2], key + 20, 4);
137+
memcpy(iter_key[1], key + 24, 4);
138+
memcpy(iter_key[0], key + 28, 4);
139+
memcpy(iter_key[15], key, 4);
140+
memcpy(iter_key[14], key + 4, 4);
141+
memcpy(iter_key[13], key + 8, 4);
142+
memcpy(iter_key[12], key + 12, 4);
143+
memcpy(iter_key[11], key + 16, 4);
144+
memcpy(iter_key[10], key + 20, 4);
145+
memcpy(iter_key[9], key + 24, 4);
146+
memcpy(iter_key[8], key + 28, 4);
147+
memcpy(iter_key[23], key, 4);
148+
memcpy(iter_key[22], key + 4, 4);
149+
memcpy(iter_key[21], key + 8, 4);
150+
memcpy(iter_key[20], key + 12, 4);
151+
memcpy(iter_key[19], key + 16, 4);
152+
memcpy(iter_key[18], key + 20, 4);
153+
memcpy(iter_key[17], key + 24, 4);
154+
memcpy(iter_key[16], key + 28, 4);
155+
memcpy(iter_key[31], key + 28, 4);
156+
memcpy(iter_key[30], key + 24, 4);
157+
memcpy(iter_key[29], key + 20, 4);
158+
memcpy(iter_key[28], key + 16, 4);
159+
memcpy(iter_key[27], key + 12, 4);
160+
memcpy(iter_key[26], key + 8, 4);
161+
memcpy(iter_key[25], key + 4, 4);
162+
memcpy(iter_key[24], key, 4);
162163

163164
#ifdef DEBUG_MODE
164165
printf("Iteration cipher keys:\n");

magma_const.h

+7-7
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33

44
static unsigned char Pi[8][16]=
55
{
6-
{1,7,14,13,0,5,8,3,4,15,10,6,9,12,11,2},
7-
{8,14,2,5,6,9,1,12,15,4,11,0,13,10,3,7},
8-
{5,13,15,6,9,2,12,10,11,7,8,1,4,3,14,0},
9-
{7,15,5,10,8,1,6,13,0,9,3,14,11,4,2,12},
10-
{12,8,2,1,13,4,15,6,7,0,10,5,3,14,9,11},
11-
{11,3,5,8,2,15,10,13,14,1,7,4,12,9,6,0},
6+
{12,4,6,2,10,5,11,9,14,8,13,7,0,3,15,1},
127
{6,8,2,3,9,10,5,12,1,14,4,7,11,13,0,15},
13-
{12,4,6,2,10,5,11,9,14,8,13,7,0,3,15,1}
8+
{11,3,5,8,2,15,10,13,14,1,7,4,12,9,6,0},
9+
{12,8,2,1,13,4,15,6,7,0,10,5,3,14,9,11},
10+
{7,15,5,10,8,1,6,13,0,9,3,14,11,4,2,12},
11+
{5,13,15,6,9,2,12,10,11,7,8,1,4,3,14,0},
12+
{8,14,2,5,6,9,1,12,15,4,11,0,13,10,3,7},
13+
{1,7,14,13,0,5,8,3,4,15,10,6,9,12,11,2}
1414
};
1515

1616
#endif // MAGMA_CONST_H

magma_test.h

+10-10
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,22 @@
22
#define MAGMA_TEST_H
33

44
static const unsigned char test_key[32] = {
5-
0xff, 0xee, 0xdd, 0xcc,
6-
0xbb, 0xaa, 0x99, 0x88,
7-
0x77, 0x66, 0x55, 0x44,
8-
0x33, 0x22, 0x11, 0x00,
9-
0xf0, 0xf1, 0xf2, 0xf3,
10-
0xf4, 0xf5, 0xf6, 0xf7,
11-
0xf8, 0xf9, 0xfa, 0xfb,
12-
0xfc, 0xfd, 0xfe, 0xff
5+
0xff, 0xfe, 0xfd, 0xfc,
6+
0xfb, 0xfa, 0xf9, 0xf8,
7+
0xf7, 0xf6, 0xf5, 0xf4,
8+
0xf3, 0xf2, 0xf1, 0xf0,
9+
0x00, 0x11, 0x22, 0x33,
10+
0x44, 0x55, 0x66, 0x77,
11+
0x88, 0x99, 0xaa, 0xbb,
12+
0xcc, 0xdd, 0xee, 0xff
1313
};
1414

1515
static const unsigned char encrypt_test_string[8] = {
16-
0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54, 0x32, 0x10,
16+
0x10, 0x32, 0x54, 0x76, 0x98, 0xba, 0xdc, 0xfe
1717
};
1818

1919
static const unsigned char decrypt_test_string[8] = {
20-
0x4e, 0xe9, 0x01, 0xe5, 0xc2, 0xd8, 0xca, 0x3d,
20+
0x3d, 0xca, 0xd8, 0xc2, 0xe5, 0x01, 0xe9, 0x4e
2121
};
2222

2323
#endif // MAGMA_TEST_H

main.c

+1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "magma_calc.h"
22
#include "magma_test.h"
3+
34
int main(int argc, char *argv[])
45
{
56
uint8_t out_blk[4];

0 commit comments

Comments
 (0)