summaryrefslogtreecommitdiff
path: root/src/fs/fs_publish_ksk.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2013-04-16 11:32:49 +0000
committerChristian Grothoff <christian@grothoff.org>2013-04-16 11:32:49 +0000
commit51e475cdc337a5d11bd3d552159243aa68dfe332 (patch)
treed3f19afd8b87294223619d30c3319d4490c9c24b /src/fs/fs_publish_ksk.c
parentbfedb2299a323eb0a5ae39fba56b413e11de4d47 (diff)
downloadgnunet-51e475cdc337a5d11bd3d552159243aa68dfe332.tar.gz
gnunet-51e475cdc337a5d11bd3d552159243aa68dfe332.zip
-fix
Diffstat (limited to 'src/fs/fs_publish_ksk.c')
-rw-r--r--src/fs/fs_publish_ksk.c35
1 files changed, 17 insertions, 18 deletions
diff --git a/src/fs/fs_publish_ksk.c b/src/fs/fs_publish_ksk.c
index 93eee7d72..3b0f1d4fb 100644
--- a/src/fs/fs_publish_ksk.c
+++ b/src/fs/fs_publish_ksk.c
@@ -174,6 +174,7 @@ publish_ksk_cont (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
174 struct GNUNET_CRYPTO_AesInitializationVector iv; 174 struct GNUNET_CRYPTO_AesInitializationVector iv;
175 struct GNUNET_FS_PseudonymHandle *ph; 175 struct GNUNET_FS_PseudonymHandle *ph;
176 struct GNUNET_FS_PseudonymIdentifier pseudonym; 176 struct GNUNET_FS_PseudonymIdentifier pseudonym;
177 struct UBlock *ub_dst;
177 178
178 pkc->ksk_task = GNUNET_SCHEDULER_NO_TASK; 179 pkc->ksk_task = GNUNET_SCHEDULER_NO_TASK;
179 if ((pkc->i == pkc->ksk_uri->data.ksk.keywordCount) || (NULL == pkc->dsh)) 180 if ((pkc->i == pkc->ksk_uri->data.ksk.keywordCount) || (NULL == pkc->dsh))
@@ -194,32 +195,35 @@ publish_ksk_cont (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
194 * mandatory or not -- ignore for hashing */ 195 * mandatory or not -- ignore for hashing */
195 GNUNET_CRYPTO_hash (&keyword[1], strlen (&keyword[1]), &key); 196 GNUNET_CRYPTO_hash (&keyword[1], strlen (&keyword[1]), &key);
196 GNUNET_CRYPTO_hash_to_aes_key (&key, &skey, &iv); 197 GNUNET_CRYPTO_hash_to_aes_key (&key, &skey, &iv);
198 ub_dst = pkc->cpy;
197 GNUNET_CRYPTO_aes_encrypt (&pkc->ub[1], 199 GNUNET_CRYPTO_aes_encrypt (&pkc->ub[1],
198 1 + pkc->slen + pkc->mdsize, 200 1 + pkc->slen + pkc->mdsize,
199 &skey, &iv, 201 &skey, &iv,
200 &pkc->cpy[1]); 202 &ub_dst[1]);
201 ph = GNUNET_FS_pseudonym_get_anonymous_pseudonym_handle (); 203 ph = GNUNET_FS_pseudonym_get_anonymous_pseudonym_handle ();
202 GNUNET_CRYPTO_hash (&key, sizeof (key), &signing_key); 204 GNUNET_CRYPTO_hash (&key, sizeof (key), &signing_key);
203 pkc->cpy->purpose.size = htonl (1 + pkc->slen + pkc->mdsize + sizeof (struct UBlock) 205 ub_dst->purpose.size = htonl (1 + pkc->slen + pkc->mdsize + sizeof (struct UBlock)
204 - sizeof (struct GNUNET_FS_PseudonymSignature)); 206 - sizeof (struct GNUNET_FS_PseudonymSignature));
205 pkc->cpy->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_FS_UBLOCK); 207 ub_dst->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_FS_UBLOCK);
206 GNUNET_FS_pseudonym_sign (ph, 208
207 &pkc->cpy->purpose,
208 &seed,
209 &signing_key,
210 &pkc->cpy->signature);
211 GNUNET_FS_pseudonym_get_identifier (ph, &pseudonym); 209 GNUNET_FS_pseudonym_get_identifier (ph, &pseudonym);
212 GNUNET_FS_pseudonym_derive_verification_key (&pseudonym, 210 GNUNET_FS_pseudonym_derive_verification_key (&pseudonym,
213 &signing_key, 211 &signing_key,
214 &pkc->cpy->verification_key); 212 &ub_dst->verification_key);
215 GNUNET_CRYPTO_hash (&pkc->cpy->verification_key, 213 GNUNET_FS_pseudonym_sign (ph,
216 sizeof (pkc->cpy->verification_key), 214 &ub_dst->purpose,
215 &seed,
216 &signing_key,
217 &ub_dst->signature);
218
219 GNUNET_CRYPTO_hash (&ub_dst->verification_key,
220 sizeof (ub_dst->verification_key),
217 &query); 221 &query);
218 GNUNET_FS_pseudonym_destroy (ph); 222 GNUNET_FS_pseudonym_destroy (ph);
219 pkc->qre = 223 pkc->qre =
220 GNUNET_DATASTORE_put (pkc->dsh, 0, &query, 224 GNUNET_DATASTORE_put (pkc->dsh, 0, &query,
221 1 + pkc->slen + pkc->mdsize + sizeof (struct UBlock), 225 1 + pkc->slen + pkc->mdsize + sizeof (struct UBlock),
222 pkc->cpy, GNUNET_BLOCK_TYPE_FS_UBLOCK, 226 ub_dst, GNUNET_BLOCK_TYPE_FS_UBLOCK,
223 pkc->bo.content_priority, pkc->bo.anonymity_level, 227 pkc->bo.content_priority, pkc->bo.anonymity_level,
224 pkc->bo.replication_level, pkc->bo.expiration_time, 228 pkc->bo.replication_level, pkc->bo.expiration_time,
225 -2, 1, GNUNET_CONSTANTS_SERVICE_TIMEOUT, 229 -2, 1, GNUNET_CONSTANTS_SERVICE_TIMEOUT,
@@ -308,12 +312,7 @@ GNUNET_FS_publish_ksk (struct GNUNET_FS_Handle *h,
308 return NULL; 312 return NULL;
309 } 313 }
310 size = sizeof (struct UBlock) + pkc->slen + pkc->mdsize + 1; 314 size = sizeof (struct UBlock) + pkc->slen + pkc->mdsize + 1;
311
312 pkc->cpy = GNUNET_malloc (size); 315 pkc->cpy = GNUNET_malloc (size);
313 pkc->cpy->purpose.size =
314 htonl (sizeof (struct GNUNET_FS_PseudonymSignaturePurpose) +
315 pkc->mdsize + pkc->slen + 1);
316 pkc->cpy->purpose.purpose = htonl (GNUNET_SIGNATURE_PURPOSE_FS_UBLOCK);
317 pkc->ksk_uri = GNUNET_FS_uri_dup (ksk_uri); 316 pkc->ksk_uri = GNUNET_FS_uri_dup (ksk_uri);
318 pkc->ksk_task = GNUNET_SCHEDULER_add_now (&publish_ksk_cont, pkc); 317 pkc->ksk_task = GNUNET_SCHEDULER_add_now (&publish_ksk_cont, pkc);
319 return pkc; 318 return pkc;