summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/conversation/test_conversation_api.c4
-rw-r--r--src/conversation/test_conversation_api_reject.c4
-rw-r--r--src/conversation/test_conversation_api_twocalls.c4
-rw-r--r--src/identity/gnunet-identity.c42
-rw-r--r--src/identity/identity_api.c7
-rw-r--r--src/identity/plugin_rest_identity.c21
-rw-r--r--src/identity/test_identity.c2
-rw-r--r--src/identity/test_identity_defaults.c2
-rw-r--r--src/include/gnunet_identity_service.h2
-rw-r--r--src/revocation/test_revocation.c2
10 files changed, 74 insertions, 16 deletions
diff --git a/src/conversation/test_conversation_api.c b/src/conversation/test_conversation_api.c
index 2b717367a..dbb742d91 100644
--- a/src/conversation/test_conversation_api.c
+++ b/src/conversation/test_conversation_api.c
@@ -402,7 +402,7 @@ namestore_put_cont (void *cls, int32_t success, const char *emsg)
GNUNET_assert (GNUNET_YES == success);
GNUNET_assert (NULL == emsg);
GNUNET_assert (NULL == op);
- op = GNUNET_IDENTITY_create (id, "caller-ego", &caller_ego_create_cont, NULL);
+ op = GNUNET_IDENTITY_create (id, "caller-ego", NULL, &caller_ego_create_cont, NULL);
}
@@ -483,7 +483,7 @@ run (void *cls,
cfg = c;
GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_test, NULL);
id = GNUNET_IDENTITY_connect (cfg, &identity_cb, NULL);
- op = GNUNET_IDENTITY_create (id, "phone-ego", &phone_ego_create_cont, NULL);
+ op = GNUNET_IDENTITY_create (id, "phone-ego", NULL, &phone_ego_create_cont, NULL);
ns = GNUNET_NAMESTORE_connect (cfg);
}
diff --git a/src/conversation/test_conversation_api_reject.c b/src/conversation/test_conversation_api_reject.c
index 62e4109b0..855b21fd7 100644
--- a/src/conversation/test_conversation_api_reject.c
+++ b/src/conversation/test_conversation_api_reject.c
@@ -255,7 +255,7 @@ namestore_put_cont (void *cls, int32_t success, const char *emsg)
GNUNET_assert (GNUNET_YES == success);
GNUNET_assert (NULL == emsg);
GNUNET_assert (NULL == op);
- op = GNUNET_IDENTITY_create (id, "caller-ego", &caller_ego_create_cont, NULL);
+ op = GNUNET_IDENTITY_create (id, "caller-ego", NULL, &caller_ego_create_cont, NULL);
}
@@ -336,7 +336,7 @@ run (void *cls,
cfg = c;
GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_test, NULL);
id = GNUNET_IDENTITY_connect (cfg, &identity_cb, NULL);
- op = GNUNET_IDENTITY_create (id, "phone-ego", &phone_ego_create_cont, NULL);
+ op = GNUNET_IDENTITY_create (id, "phone-ego", NULL, &phone_ego_create_cont, NULL);
ns = GNUNET_NAMESTORE_connect (cfg);
}
diff --git a/src/conversation/test_conversation_api_twocalls.c b/src/conversation/test_conversation_api_twocalls.c
index fab49f7d7..6d434a3e1 100644
--- a/src/conversation/test_conversation_api_twocalls.c
+++ b/src/conversation/test_conversation_api_twocalls.c
@@ -524,7 +524,7 @@ namestore_put_cont (void *cls, int32_t success, const char *emsg)
GNUNET_assert (GNUNET_YES == success);
GNUNET_assert (NULL == emsg);
GNUNET_assert (NULL == op);
- op = GNUNET_IDENTITY_create (id, "caller-ego", &caller_ego_create_cont, NULL);
+ op = GNUNET_IDENTITY_create (id, "caller-ego", NULL, &caller_ego_create_cont, NULL);
}
@@ -613,7 +613,7 @@ run (void *cls,
timeout_task = GNUNET_SCHEDULER_add_delayed (TIMEOUT, &end_test, NULL);
GNUNET_SCHEDULER_add_shutdown (&do_shutdown, NULL);
id = GNUNET_IDENTITY_connect (cfg, &identity_cb, NULL);
- op = GNUNET_IDENTITY_create (id, "phone-ego", &phone_ego_create_cont, NULL);
+ op = GNUNET_IDENTITY_create (id, "phone-ego", NULL, &phone_ego_create_cont, NULL);
ns = GNUNET_NAMESTORE_connect (cfg);
}
diff --git a/src/identity/gnunet-identity.c b/src/identity/gnunet-identity.c
index fd73048c4..cf44afd1f 100644
--- a/src/identity/gnunet-identity.c
+++ b/src/identity/gnunet-identity.c
@@ -76,6 +76,11 @@ static char *create_ego;
static char *delete_ego;
/**
+ * -P option
+ */
+static char *privkey_ego;
+
+/**
* -s option.
*/
static char *set_ego;
@@ -101,6 +106,11 @@ static struct GNUNET_IDENTITY_Operation *create_op;
static struct GNUNET_IDENTITY_Operation *delete_op;
/**
+ * Private key from command line option, or NULL.
+ */
+struct GNUNET_CRYPTO_EcdsaPrivateKey pk;
+
+/**
* Value to return from #main().
*/
static int global_ret;
@@ -390,11 +400,28 @@ run (void *cls,
&delete_finished,
&delete_op);
if (NULL != create_ego)
- create_op =
- GNUNET_IDENTITY_create (sh,
- create_ego,
- &create_finished,
- &create_op);
+ {
+ if (NULL != privkey_ego)
+ {
+ GNUNET_STRINGS_string_to_data (privkey_ego,
+ strlen (privkey_ego),
+ &pk,
+ sizeof(struct GNUNET_CRYPTO_EcdsaPrivateKey));
+ create_op =
+ GNUNET_IDENTITY_create (sh,
+ create_ego,
+ &pk,
+ &create_finished,
+ &create_op);
+ }
+ else
+ create_op =
+ GNUNET_IDENTITY_create (sh,
+ create_ego,
+ NULL,
+ &create_finished,
+ &create_op);
+ }
GNUNET_SCHEDULER_add_shutdown (&shutdown_task,
NULL);
test_finished ();
@@ -422,6 +449,11 @@ main (int argc, char *const *argv)
"NAME",
gettext_noop ("delete ego NAME "),
&delete_ego),
+ GNUNET_GETOPT_option_string ('P',
+ "privkey",
+ "PRIVATE_KEY",
+ gettext_noop ("set the private key for the identity to PRIVATE_KEY (use together with -C)"),
+ &privkey_ego),
GNUNET_GETOPT_option_flag ('d',
"display",
gettext_noop ("display all egos"),
diff --git a/src/identity/identity_api.c b/src/identity/identity_api.c
index c2fcc5075..5d17ac5d5 100644
--- a/src/identity/identity_api.c
+++ b/src/identity/identity_api.c
@@ -715,6 +715,7 @@ GNUNET_IDENTITY_set (struct GNUNET_IDENTITY_Handle *h,
*
* @param h identity service to use
* @param name desired name
+ * @param privkey desired private key or NULL to create one
* @param cont function to call with the result (will only be called once)
* @param cont_cls closure for @a cont
* @return handle to abort the operation
@@ -722,6 +723,7 @@ GNUNET_IDENTITY_set (struct GNUNET_IDENTITY_Handle *h,
struct GNUNET_IDENTITY_Operation *
GNUNET_IDENTITY_create (struct GNUNET_IDENTITY_Handle *h,
const char *name,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *privkey,
GNUNET_IDENTITY_CreateContinuation cont,
void *cont_cls)
{
@@ -746,7 +748,10 @@ GNUNET_IDENTITY_create (struct GNUNET_IDENTITY_Handle *h,
env = GNUNET_MQ_msg_extra (crm, slen, GNUNET_MESSAGE_TYPE_IDENTITY_CREATE);
crm->name_len = htons (slen);
crm->reserved = htons (0);
- GNUNET_CRYPTO_ecdsa_key_create (&crm->private_key);
+ if (NULL == privkey)
+ GNUNET_CRYPTO_ecdsa_key_create (&crm->private_key);
+ else
+ crm->private_key = *privkey;
op->pk = crm->private_key;
GNUNET_memcpy (&crm[1], name, slen);
GNUNET_MQ_send (h->mq, env);
diff --git a/src/identity/plugin_rest_identity.c b/src/identity/plugin_rest_identity.c
index ef01cc578..009a01f16 100644
--- a/src/identity/plugin_rest_identity.c
+++ b/src/identity/plugin_rest_identity.c
@@ -57,7 +57,7 @@
#define GNUNET_REST_IDENTITY_PARAM_PUBKEY "pubkey"
/**
- * Parameter public key
+ * Parameter private key
*/
#define GNUNET_REST_IDENTITY_PARAM_PRIVKEY "privkey"
@@ -990,6 +990,9 @@ ego_create (struct GNUNET_REST_RequestHandle *con_handle,
json_t *data_js;
json_error_t err;
char *egoname;
+ char *privkey;
+ struct GNUNET_CRYPTO_EcdsaPrivateKey pk;
+ struct GNUNET_CRYPTO_EcdsaPrivateKey *pk_ptr;
int json_unpack_state;
char term_data[handle->data_size + 1];
@@ -1016,8 +1019,11 @@ ego_create (struct GNUNET_REST_RequestHandle *con_handle,
return;
}
json_unpack_state = 0;
+ privkey = NULL;
json_unpack_state =
- json_unpack (data_js, "{s:s!}", GNUNET_REST_IDENTITY_PARAM_NAME, &egoname);
+ json_unpack (data_js, "{s:s, s?:s!}",
+ GNUNET_REST_IDENTITY_PARAM_NAME, &egoname,
+ GNUNET_REST_IDENTITY_PARAM_PRIVKEY, &privkey);
if (0 != json_unpack_state)
{
handle->emsg = GNUNET_strdup (GNUNET_REST_ERROR_DATA_INVALID);
@@ -1054,10 +1060,21 @@ ego_create (struct GNUNET_REST_RequestHandle *con_handle,
}
}
handle->name = GNUNET_strdup (egoname);
+ if (NULL != privkey)
+ {
+ GNUNET_STRINGS_string_to_data (privkey,
+ strlen (privkey),
+ &pk,
+ sizeof(struct GNUNET_CRYPTO_EcdsaPrivateKey));
+ pk_ptr = &pk;
+ }
+ else
+ pk_ptr = NULL;
json_decref (data_js);
handle->response_code = MHD_HTTP_CREATED;
handle->op = GNUNET_IDENTITY_create (handle->identity_handle,
handle->name,
+ pk_ptr,
&do_finished_create,
handle);
}
diff --git a/src/identity/test_identity.c b/src/identity/test_identity.c
index aaa435d4f..37eeab238 100644
--- a/src/identity/test_identity.c
+++ b/src/identity/test_identity.c
@@ -279,7 +279,7 @@ run (void *cls,
GNUNET_SCHEDULER_add_shutdown (&cleanup, NULL);
h = GNUNET_IDENTITY_connect (cfg, &notification_cb, NULL);
CHECK (NULL != h);
- op = GNUNET_IDENTITY_create (h, "test-id", &create_cb, NULL);
+ op = GNUNET_IDENTITY_create (h, "test-id", NULL, &create_cb, NULL);
}
diff --git a/src/identity/test_identity_defaults.c b/src/identity/test_identity_defaults.c
index 1dd05f1b9..53eec1252 100644
--- a/src/identity/test_identity_defaults.c
+++ b/src/identity/test_identity_defaults.c
@@ -266,7 +266,7 @@ run_set (void *cls,
GNUNET_SCHEDULER_add_shutdown (&cleanup, NULL);
h = GNUNET_IDENTITY_connect (cfg, &notification_cb, NULL);
CHECK (NULL != h);
- op = GNUNET_IDENTITY_create (h, "test-id", &create_cb, NULL);
+ op = GNUNET_IDENTITY_create (h, "test-id", NULL, &create_cb, NULL);
}
diff --git a/src/include/gnunet_identity_service.h b/src/include/gnunet_identity_service.h
index 81af671e2..f4e653598 100644
--- a/src/include/gnunet_identity_service.h
+++ b/src/include/gnunet_identity_service.h
@@ -233,6 +233,7 @@ typedef void
*
* @param id identity service to use
* @param name desired name
+ * @param privkey desired private key or NULL to create one
* @param cont function to call with the result (will only be called once)
* @param cont_cls closure for @a cont
* @return handle to abort the operation
@@ -240,6 +241,7 @@ typedef void
struct GNUNET_IDENTITY_Operation *
GNUNET_IDENTITY_create (struct GNUNET_IDENTITY_Handle *id,
const char *name,
+ const struct GNUNET_CRYPTO_EcdsaPrivateKey *privkey,
GNUNET_IDENTITY_CreateContinuation cont,
void *cont_cls);
diff --git a/src/revocation/test_revocation.c b/src/revocation/test_revocation.c
index f193d5f6c..1c2efa60f 100644
--- a/src/revocation/test_revocation.c
+++ b/src/revocation/test_revocation.c
@@ -237,10 +237,12 @@ identity_completion_cb (void *cls,
fprintf (stderr, "All peers connected @ IDENTITY ...\n");
testpeers[0].create_id_op = GNUNET_IDENTITY_create (testpeers[0].idh,
"client",
+ NULL,
&identity_create_cb,
&testpeers[0]);
testpeers[1].create_id_op = GNUNET_IDENTITY_create (testpeers[1].idh,
"toberevoked",
+ NULL,
&identity_create_cb,
&testpeers[1]);
}