@@ -29,11 +29,11 @@ GOST_Magma_T(const uint8_t *in_data, uint8_t *out_data)
29
29
int i ;
30
30
for (i = 0 ; i < 4 ; i ++ )
31
31
{
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 ;
34
34
first_part_byte = Pi [i * 2 ] [first_part_byte ];
35
35
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 ;
37
37
}
38
38
}
39
39
@@ -50,7 +50,7 @@ GOST_Magma_Add_32(const uint8_t *a, const uint8_t *b, uint8_t *c)
50
50
{
51
51
int i ;
52
52
unsigned int internal = 0 ;
53
- for (i = 3 ; i >= 0 ; i -- )
53
+ for (i = 0 ; i < 4 ; i ++ )
54
54
{
55
55
internal = a [i ] + b [i ] + (internal >> 8 );
56
56
c [i ] = internal & 0xff ;
@@ -64,15 +64,15 @@ GOST_Magma_g(const uint8_t *k, const uint8_t *a, uint8_t *out_data)
64
64
uint32_t out_data_32 ;
65
65
GOST_Magma_Add_32 (a , k , internal );
66
66
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 ];
69
68
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 ];
71
71
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 ;
76
76
}
77
77
78
78
static void
@@ -84,8 +84,8 @@ GOST_Magma_G(const uint8_t *k, const uint8_t *a, uint8_t *out_data)
84
84
int i ;
85
85
for (i = 0 ; i < 4 ; i ++ )
86
86
{
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 ];
89
89
}
90
90
GOST_Magma_g (k , a_0 , G );
91
91
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)
96
96
}
97
97
for (i = 0 ; i < 4 ; i ++ )
98
98
{
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 ];
101
101
}
102
+
102
103
}
103
104
104
105
static void
@@ -110,55 +111,55 @@ GOST_Magma_G_Fin(const uint8_t *k, const uint8_t *a, uint8_t *out_data)
110
111
int i ;
111
112
for (i = 0 ; i < 4 ; i ++ )
112
113
{
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 ];
115
116
}
116
117
GOST_Magma_g (k , a_0 , G );
117
118
GOST_Magma_Add (a_1 , G , G );
118
119
for (i = 0 ; i < 4 ; i ++ )
119
120
a_1 [i ] = G [i ];
120
121
for (i = 0 ; i < 4 ; i ++ )
121
122
{
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 ];
124
125
}
125
126
}
126
127
127
128
void
128
129
GOST_Magma_Expand_Key (const uint8_t * key )
129
130
{
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 );
162
163
163
164
#ifdef DEBUG_MODE
164
165
printf ("Iteration cipher keys:\n" );
0 commit comments