aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjospaeth <spaethj@in.tum.de>2020-07-13 18:43:29 +0200
committerjospaeth <spaethj@in.tum.de>2020-07-13 18:43:29 +0200
commit9916fbea6c32518329ff95f07e6b9818490f9eae (patch)
tree8fd3c4e33fae4f8b1c1518153366cfeaeebfab44 /src
parent33bb7ee2507c9b72f366eae9c6c2136c3c6badb5 (diff)
downloadgnunet-9916fbea6c32518329ff95f07e6b9818490f9eae.tar.gz
gnunet-9916fbea6c32518329ff95f07e6b9818490f9eae.zip
add crypto method for ecdsa privkey from string
Diffstat (limited to 'src')
-rw-r--r--src/include/gnunet_crypto_lib.h17
-rw-r--r--src/util/crypto_ecc.c35
2 files changed, 50 insertions, 2 deletions
diff --git a/src/include/gnunet_crypto_lib.h b/src/include/gnunet_crypto_lib.h
index 320701643..dd9ff3da5 100644
--- a/src/include/gnunet_crypto_lib.h
+++ b/src/include/gnunet_crypto_lib.h
@@ -1177,6 +1177,21 @@ GNUNET_CRYPTO_eddsa_public_key_to_string (
1177 1177
1178 1178
1179/** 1179/**
1180 * Convert a string representing a private key to a private key.
1181 *
1182 * @param enc encoded private key
1183 * @param enclen number of bytes in @a enc (without 0-terminator)
1184 * @param priv where to store the private key
1185 * @return #GNUNET_OK on success
1186 */
1187int
1188GNUNET_CRYPTO_ecdsa_private_key_from_string (
1189 const char *enc,
1190 size_t enclen,
1191 struct GNUNET_CRYPTO_EcdsaPrivateKey *pub);
1192
1193
1194/**
1180 * Convert a string representing a public key to a public key. 1195 * Convert a string representing a public key to a public key.
1181 * 1196 *
1182 * @param enc encoded public key 1197 * @param enc encoded public key
@@ -1194,7 +1209,7 @@ GNUNET_CRYPTO_ecdsa_public_key_from_string (
1194/** 1209/**
1195 * Convert a string representing a private key to a private key. 1210 * Convert a string representing a private key to a private key.
1196 * 1211 *
1197 * @param enc encoded public key 1212 * @param enc encoded private key
1198 * @param enclen number of bytes in @a enc (without 0-terminator) 1213 * @param enclen number of bytes in @a enc (without 0-terminator)
1199 * @param priv where to store the private key 1214 * @param priv where to store the private key
1200 * @return #GNUNET_OK on success 1215 * @return #GNUNET_OK on success
diff --git a/src/util/crypto_ecc.c b/src/util/crypto_ecc.c
index e1608ae55..3db5b19ab 100644
--- a/src/util/crypto_ecc.c
+++ b/src/util/crypto_ecc.c
@@ -388,6 +388,39 @@ GNUNET_CRYPTO_ecdsa_public_key_from_string (
388 388
389 389
390/** 390/**
391 * Convert a string representing a private key to a private key.
392 *
393 * @param enc encoded private key
394 * @param enclen number of bytes in @a enc (without 0-terminator)
395 * @param priv where to store the private key
396 * @return #GNUNET_OK on success
397 */
398int
399GNUNET_CRYPTO_ecdsa_private_key_from_string (
400 const char *enc,
401 size_t enclen,
402 struct GNUNET_CRYPTO_EcdsaPrivateKey *priv)
403{
404 size_t keylen = (sizeof(struct GNUNET_CRYPTO_EcdsaPrivateKey)) * 8;
405
406 if (keylen % 5 > 0)
407 keylen += 5 - keylen % 5;
408 keylen /= 5;
409 if (enclen != keylen)
410 return GNUNET_SYSERR;
411
412 if (GNUNET_OK !=
413 GNUNET_STRINGS_string_to_data (enc,
414 enclen,
415 priv,
416 sizeof(
417 struct GNUNET_CRYPTO_EcdsaPrivateKey)))
418 return GNUNET_SYSERR;
419 return GNUNET_OK;
420}
421
422
423/**
391 * Convert a string representing a public key to a public key. 424 * Convert a string representing a public key to a public key.
392 * 425 *
393 * @param enc encoded public key 426 * @param enc encoded public key
@@ -423,7 +456,7 @@ GNUNET_CRYPTO_eddsa_public_key_from_string (
423/** 456/**
424 * Convert a string representing a private key to a private key. 457 * Convert a string representing a private key to a private key.
425 * 458 *
426 * @param enc encoded public key 459 * @param enc encoded private key
427 * @param enclen number of bytes in @a enc (without 0-terminator) 460 * @param enclen number of bytes in @a enc (without 0-terminator)
428 * @param priv where to store the private key 461 * @param priv where to store the private key
429 * @return #GNUNET_OK on success 462 * @return #GNUNET_OK on success