[Top][All Lists]
[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.
*
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r20233 - in gnunet/src: include util,
gnunet <=