Skip to content

Commit 586d0db

Browse files
committed
gcm.h: Added 8 to 64 bit array conversion
1 parent 485a069 commit 586d0db

File tree

1 file changed

+24
-8
lines changed

1 file changed

+24
-8
lines changed

meta/gcm.h

+24-8
Original file line numberDiff line numberDiff line change
@@ -141,19 +141,35 @@ class GCM
141141
void gf_multiplication(std::string &auth_data, const std::string &hash_key)
142142
{
143143
uint8_t auth_data_bin[16];
144+
uint64_t auth_data_bin_expanded[2];
144145
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));
148149

149150
hexstr_to_uint8t(hash_key, hash_key_bin);
150151
hexstr_to_uint8t(auth_data, auth_data_bin);
152+
uint8t_to_uint64t_arr(hash_key_bin, hash_key_bin_expanded, 2);
151153

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;
155173
}
156-
157-
uint8t_to_hexstr(auth_data, auth_data_bin, data_len);
158174
}
159175
};

0 commit comments

Comments
 (0)