aboutsummaryrefslogtreecommitdiff
path: root/src/util/crypto_abe.c
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2017-07-09 19:23:26 +0200
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2017-07-09 19:23:26 +0200
commitcfc492f5d6c7c5786bd5d033892238a6889b5d7d (patch)
treefb055b7205c3278bcd7ab095556571e7c5e47753 /src/util/crypto_abe.c
parenteccfb8e81d488dade09dc4df8a981accd50c6d06 (diff)
downloadgnunet-cfc492f5d6c7c5786bd5d033892238a6889b5d7d.tar.gz
gnunet-cfc492f5d6c7c5786bd5d033892238a6889b5d7d.zip
-add free ABE functions
Diffstat (limited to 'src/util/crypto_abe.c')
-rw-r--r--src/util/crypto_abe.c87
1 files changed, 45 insertions, 42 deletions
diff --git a/src/util/crypto_abe.c b/src/util/crypto_abe.c
index 38812b412..ddaec83eb 100644
--- a/src/util/crypto_abe.c
+++ b/src/util/crypto_abe.c
@@ -148,6 +148,14 @@ GNUNET_CRYPTO_cpabe_create_master_key (void)
148 return key; 148 return key;
149} 149}
150 150
151void
152GNUNET_CRYPTO_cpabe_delete_master_key (struct GNUNET_CRYPTO_AbeMasterKey *key)
153{
154 g_byte_array_unref (key->msk);
155 g_byte_array_unref (key->pub);
156 GNUNET_free (key);
157}
158
151struct GNUNET_CRYPTO_AbeKey* 159struct GNUNET_CRYPTO_AbeKey*
152GNUNET_CRYPTO_cpabe_create_key (struct GNUNET_CRYPTO_AbeMasterKey *key, 160GNUNET_CRYPTO_cpabe_create_key (struct GNUNET_CRYPTO_AbeMasterKey *key,
153 char **attrs) 161 char **attrs)
@@ -156,7 +164,6 @@ GNUNET_CRYPTO_cpabe_create_key (struct GNUNET_CRYPTO_AbeMasterKey *key,
156 bswabe_pub_t* pub; 164 bswabe_pub_t* pub;
157 bswabe_msk_t* msk; 165 bswabe_msk_t* msk;
158 bswabe_prv_t* prv; 166 bswabe_prv_t* prv;
159 gchar* pub_data;
160 gsize len; 167 gsize len;
161 168
162 pub = bswabe_pub_unserialize(key->pub, 0); 169 pub = bswabe_pub_unserialize(key->pub, 0);
@@ -164,73 +171,69 @@ GNUNET_CRYPTO_cpabe_create_key (struct GNUNET_CRYPTO_AbeMasterKey *key,
164 prv = bswabe_keygen(pub, msk, attrs); 171 prv = bswabe_keygen(pub, msk, attrs);
165 prv_key = GNUNET_new (struct GNUNET_CRYPTO_AbeKey); 172 prv_key = GNUNET_new (struct GNUNET_CRYPTO_AbeKey);
166 prv_key->prv = bswabe_prv_serialize(prv); 173 prv_key->prv = bswabe_prv_serialize(prv);
167 pub_data = g_strndup ((gchar*)key->pub->data, 174
168 key->pub->len);
169 len = key->pub->len; 175 len = key->pub->len;
170 prv_key->pub = g_byte_array_new_take ((guint8*)pub_data, len); 176 printf ("Keylen %lu\n", len);
177 prv_key->pub = bswabe_pub_serialize (pub);
171 GNUNET_assert (NULL != prv_key->prv); 178 GNUNET_assert (NULL != prv_key->prv);
172 return prv_key; 179 return prv_key;
173} 180}
174 181
182void
183GNUNET_CRYPTO_cpabe_delete_key (struct GNUNET_CRYPTO_AbeKey *key)
184{
185 g_byte_array_unref (key->prv);
186 g_byte_array_unref (key->pub);
187 GNUNET_free (key);
188}
189
175ssize_t 190ssize_t
176write_cpabe (void **result, GByteArray* cph_buf, 191write_cpabe (void **result, GByteArray* cph_buf,
177 int file_len, GByteArray* aes_buf) 192 uint32_t file_len, GByteArray* aes_buf)
178{ 193{
179 char *ptr; 194 char *ptr;
180 int i; 195 uint32_t *len;
181 ssize_t size; 196
182 size = aes_buf->len + cph_buf->len + 12; 197 *result = GNUNET_malloc (12 + cph_buf->len + aes_buf->len);
183 *result = GNUNET_malloc (size);
184 ptr = *result; 198 ptr = *result;
185 for(i=3; i >= 0; i--) { 199 len = (uint32_t*) ptr;
186 *ptr = (file_len & 0xff<<(i*8))>>(i*8); 200 *len = htonl (file_len);
187 ptr++; 201 ptr += 4;
188 } 202 len = (uint32_t*) ptr;
189 for(i=3; i >= 0; i--) { 203 *len = htonl (aes_buf->len);
190 *ptr = (aes_buf->len & 0xff<<(i*8))>>(i*8); 204 ptr += 4;
191 ptr++;
192 }
193 memcpy (ptr, aes_buf->data, aes_buf->len); 205 memcpy (ptr, aes_buf->data, aes_buf->len);
194 ptr += aes_buf->len; 206 ptr += aes_buf->len;
195 for(i=3; i >= 0; i--) { 207 len = (uint32_t*) ptr;
196 *ptr = (cph_buf->len & 0xff<<(i*8))>>(i*8); 208 *len = htonl (cph_buf->len);
197 ptr++; 209 ptr += 4;
198 }
199 memcpy (ptr, cph_buf->data, cph_buf->len); 210 memcpy (ptr, cph_buf->data, cph_buf->len);
200 return size; 211 return 12 + cph_buf->len + aes_buf->len;
201} 212}
202 213
203ssize_t 214ssize_t
204read_cpabe (const void *data, GByteArray** cph_buf, GByteArray** aes_buf) 215read_cpabe (const void *data, GByteArray** cph_buf, GByteArray** aes_buf)
205{ 216{
206 int i; 217 int buf_len;
207 ssize_t buf_len; 218 int tmp_len;
208 ssize_t tmp_len;
209 char *ptr; 219 char *ptr;
220 uint32_t *len;
210 221
211 *cph_buf = g_byte_array_new(); 222 *cph_buf = g_byte_array_new();
212 *aes_buf = g_byte_array_new(); 223 *aes_buf = g_byte_array_new();
213 ptr = (char*)data; 224 ptr = (char*)data;
214 225 len = (uint32_t*)ptr;
215 buf_len = 0; 226 buf_len = ntohl (*len);
216 for(i=3; i >= 0; i--) { 227 ptr += 4;
217 buf_len |= *ptr<<(i*8); 228 len = (uint32_t*)ptr;
218 ptr++; 229 tmp_len = ntohl (*len);
219 } 230 ptr += 4;
220
221 tmp_len = 0;
222 for(i=3; i >= 0; i--) {
223 tmp_len |= *ptr<<(i*8);
224 ptr++;
225 }
226 g_byte_array_set_size(*aes_buf, tmp_len); 231 g_byte_array_set_size(*aes_buf, tmp_len);
227 memcpy((*aes_buf)->data, ptr, tmp_len); 232 memcpy((*aes_buf)->data, ptr, tmp_len);
228 ptr += tmp_len; 233 ptr += tmp_len;
229 tmp_len = 0; 234 len = (uint32_t*)ptr;
230 for(i=3; i >= 0; i--) { 235 tmp_len = ntohl (*len);
231 tmp_len |= *ptr<<(i*8); 236 ptr += 4;
232 ptr++;
233 }
234 g_byte_array_set_size(*cph_buf, tmp_len); 237 g_byte_array_set_size(*cph_buf, tmp_len);
235 memcpy((*cph_buf)->data, ptr, tmp_len); 238 memcpy((*cph_buf)->data, ptr, tmp_len);
236 239