gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r20233 - in gnunet/src: include util


From: gnunet
Subject: [GNUnet-SVN] r20233 - in gnunet/src: include util
Date: Sun, 4 Mar 2012 15:07:23 +0100

Author: grothoff
Date: 2012-03-04 15:07:23 +0100 (Sun, 04 Mar 2012)
New Revision: 20233

Modified:
   gnunet/src/include/gnunet_crypto_lib.h
   gnunet/src/util/crypto_hash.c
   gnunet/src/util/crypto_rsa.c
Log:
-adding conversion of public key to string and back

Modified: gnunet/src/include/gnunet_crypto_lib.h
===================================================================
--- gnunet/src/include/gnunet_crypto_lib.h      2012-03-04 13:51:40 UTC (rev 
20232)
+++ gnunet/src/include/gnunet_crypto_lib.h      2012-03-04 14:07:23 UTC (rev 
20233)
@@ -86,7 +86,7 @@
 
 
 /**
- * Length of an RSA KEY (d,e,len), 2048 bit (=256 octests) key d, 2 byte e
+ * Length of an RSA KEY (n,e,len), 2048 bit (=256 octests) key n, 2 byte e
  */
 #define GNUNET_CRYPTO_RSA_KEY_LENGTH 258
 
@@ -761,7 +761,32 @@
 struct GNUNET_CRYPTO_RsaPrivateKey *
 GNUNET_CRYPTO_rsa_key_create (void);
 
+
 /**
+ * Convert a public key to a string.
+ *
+ * @param pub key to convert
+ * @return string representing  'pub'
+ */
+char *
+GNUNET_CRYPTO_rsa_public_key_to_string (struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *pub);
+
+
+/**
+ * Convert a string representing a public key to a public key.
+ *
+ * @param enc encoded public key
+ * @param enclen number of bytes in enc (without 0-terminator)
+ * @param pub where to store the public key
+ * @return GNUNET_OK on success
+ */
+int
+GNUNET_CRYPTO_rsa_public_key_from_string (const char *enc, 
+                                         size_t enclen,
+                                         struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *pub);
+
+
+/**
  * Encode the private key in a format suitable for
  * storing it into a file.
  * @returns encoding of the private key.

Modified: gnunet/src/util/crypto_hash.c
===================================================================
--- gnunet/src/util/crypto_hash.c       2012-03-04 13:51:40 UTC (rev 20232)
+++ gnunet/src/util/crypto_hash.c       2012-03-04 14:07:23 UTC (rev 20233)
@@ -264,7 +264,7 @@
  * Convert binary data to ASCII encoding.  The ASCII encoding is rather
  * GNUnet specific.  It was chosen such that it only uses characters
  * in [0-9A-V], can be produced without complex arithmetics and uses a
- * small number of characters.  The GNUnet encoding uses 103 characters.
+ * small number of characters.  
  * Does not append 0-terminator, but returns a pointer to the place where
  * it should be placed, if needed.
  *

Modified: gnunet/src/util/crypto_rsa.c
===================================================================
--- gnunet/src/util/crypto_rsa.c        2012-03-04 13:51:40 UTC (rev 20232)
+++ gnunet/src/util/crypto_rsa.c        2012-03-04 14:07:23 UTC (rev 20233)
@@ -215,6 +215,70 @@
 
 
 /**
+ * Convert a public key to a string.
+ *
+ * @param pub key to convert
+ * @return string representing  'pub'
+ */
+char *
+GNUNET_CRYPTO_rsa_public_key_to_string (struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *pub)
+{
+  char *pubkeybuf;
+  size_t keylen = (sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)) * 
8;
+  char *end;
+
+  if (keylen % 5 > 0)
+    keylen += 5 - keylen % 5;
+  keylen /= 5;
+  pubkeybuf = GNUNET_malloc (keylen + 1);
+  end = GNUNET_CRYPTO_data_to_string ((unsigned char *) &pub, 
+                                     sizeof (struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded), 
+                                     pubkeybuf, 
+                                     keylen);
+  if (NULL == end)
+    {
+      GNUNET_free (pubkeybuf);
+      return NULL;
+    }
+  *end = '\0';
+  return pubkeybuf;
+}
+
+
+/**
+ * Convert a string representing a public key to a public key.
+ *
+ * @param enc encoded public key
+ * @param enclen number of bytes in enc (without 0-terminator)
+ * @param pub where to store the public key
+ * @return GNUNET_OK on success
+ */
+int
+GNUNET_CRYPTO_rsa_public_key_from_string (const char *enc, 
+                                         size_t enclen,
+                                         struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *pub)
+{
+  size_t keylen = (sizeof (struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)) * 
8;
+
+  if (keylen % 5 > 0)
+    keylen += 5 - keylen % 5;
+  keylen /= 5;
+  if (enclen != keylen)
+    return GNUNET_SYSERR;
+
+  if (GNUNET_OK != GNUNET_CRYPTO_string_to_data (enc, enclen,
+                                                (unsigned char*) pub,
+                                                sizeof (struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)))
+    return GNUNET_SYSERR;
+  if ( (ntohs (pub->len) != sizeof (struct 
GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded)) ||
+       (ntohs (pub->padding) != 0) ||
+       (ntohs (pub->sizen) != GNUNET_CRYPTO_RSA_DATA_ENCODING_LENGTH) )
+    return GNUNET_SYSERR;
+  return GNUNET_OK;
+}
+
+
+/**
  * Internal: publicKey => RSA-Key.
  *
  * Note that the return type is not actually a private
@@ -271,6 +335,7 @@
   return ret;
 }
 
+
 /**
  * Encode the private key in a format suitable for
  * storing it into a file.
@@ -359,6 +424,7 @@
   return retval;
 }
 
+
 /**
  * Decode the private key from the file-format back
  * to the "normal", internal format.
@@ -797,6 +863,7 @@
   return GNUNET_OK;
 }
 
+
 /**
  * Decrypt a given block with the hostkey.
  *




reply via email to

[Prev in Thread] Current Thread [Next in Thread]