@@ -141,19 +141,35 @@ class GCM
141
141
void gf_multiplication (std::string &auth_data, const std::string &hash_key)
142
142
{
143
143
uint8_t auth_data_bin[16 ];
144
+ uint64_t auth_data_bin_expanded[2 ];
144
145
uint8_t hash_key_bin[16 ];
145
- size_t data_len = sizeof (auth_data_bin) / ( 2 * sizeof (*auth_data_bin)) ;
146
-
147
- uint8_t result_poly[ 32 ] ;
146
+ uint64_t hash_key_bin_expanded[ 2 ] ;
147
+
148
+ size_t auth_data_len = sizeof (auth_data_bin) / ( 2 * sizeof (*auth_data_bin)) ;
148
149
149
150
hexstr_to_uint8t (hash_key, hash_key_bin);
150
151
hexstr_to_uint8t (auth_data, auth_data_bin);
152
+ uint8t_to_uint64t_arr (hash_key_bin, hash_key_bin_expanded, 2 );
151
153
152
- for (int i = 0 ; i < 16 ; i++)
153
- {
154
-
154
+ uint8t_to_hexstr (auth_data, auth_data_bin, auth_data_len);
155
+ }
156
+
157
+ void uint8t_to_uint64t_arr (uint8_t *uint8t_arr, uint64_t *uint64t_arr, const size_t &uint64t_arr_size)
158
+ {
159
+ int j = 0 ;
160
+
161
+ for (size_t i = 0 ; i < uint64t_arr_size; i++)
162
+ {
163
+ uint64t_arr[i] = (((uint64_t )uint8t_arr[j] << 56 ) & 0xFF00000000000000 ) |
164
+ (((uint64_t )uint8t_arr[j + 1 ] << 48 ) & 0x00FF000000000000 ) |
165
+ (((uint64_t )uint8t_arr[j + 2 ] << 40 ) & 0x0000FF0000000000 ) |
166
+ (((uint64_t )uint8t_arr[j + 3 ] << 32 ) & 0x000000FF00000000 ) |
167
+ (((uint64_t )uint8t_arr[j + 4 ] << 24 ) & 0x00000000FF000000 ) |
168
+ (((uint64_t )uint8t_arr[j + 5 ] << 16 ) & 0x0000000000FF0000 ) |
169
+ (((uint64_t )uint8t_arr[j + 6 ] << 8 ) & 0x000000000000FF00 ) |
170
+ (((uint64_t )uint8t_arr[j + 7 ]) & 0x00000000000000FF );
171
+
172
+ j += 8 ;
155
173
}
156
-
157
- uint8t_to_hexstr (auth_data, auth_data_bin, data_len);
158
174
}
159
175
};
0 commit comments