diff options
author | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-07-09 19:23:26 +0200 |
---|---|---|
committer | Schanzenbach, Martin <mschanzenbach@posteo.de> | 2017-07-09 19:23:26 +0200 |
commit | cfc492f5d6c7c5786bd5d033892238a6889b5d7d (patch) | |
tree | fb055b7205c3278bcd7ab095556571e7c5e47753 /src/util/crypto_abe.c | |
parent | eccfb8e81d488dade09dc4df8a981accd50c6d06 (diff) | |
download | gnunet-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.c | 87 |
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 | ||
151 | void | ||
152 | GNUNET_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 | |||
151 | struct GNUNET_CRYPTO_AbeKey* | 159 | struct GNUNET_CRYPTO_AbeKey* |
152 | GNUNET_CRYPTO_cpabe_create_key (struct GNUNET_CRYPTO_AbeMasterKey *key, | 160 | GNUNET_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 | ||
182 | void | ||
183 | GNUNET_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 | |||
175 | ssize_t | 190 | ssize_t |
176 | write_cpabe (void **result, GByteArray* cph_buf, | 191 | write_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 | ||
203 | ssize_t | 214 | ssize_t |
204 | read_cpabe (const void *data, GByteArray** cph_buf, GByteArray** aes_buf) | 215 | read_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 | ||