[asterisk-commits] tilghman: branch tilghman/tomcrypt r89423 - in /team/tilghman/tomcrypt: inclu...

SVN commits to the Asterisk project asterisk-commits at lists.digium.com
Mon Nov 19 12:17:47 CST 2007


Author: tilghman
Date: Mon Nov 19 12:17:47 2007
New Revision: 89423

URL: http://svn.digium.com/view/asterisk?view=rev&rev=89423
Log:
Doesn't all work yet, but I need these changes synched between computers

Added:
    team/tilghman/tomcrypt/include/tomcrypt   (with props)
Modified:
    team/tilghman/tomcrypt/include/asterisk/crypto.h
    team/tilghman/tomcrypt/res/res_crypto.c

Modified: team/tilghman/tomcrypt/include/asterisk/crypto.h
URL: http://svn.digium.com/view/asterisk/team/tilghman/tomcrypt/include/asterisk/crypto.h?view=diff&rev=89423&r1=89422&r2=89423
==============================================================================
--- team/tilghman/tomcrypt/include/asterisk/crypto.h (original)
+++ team/tilghman/tomcrypt/include/asterisk/crypto.h Mon Nov 19 12:17:47 2007
@@ -59,6 +59,28 @@
     struct md5_state    md5;
     void *data;
 } ltc_hash_state;
+
+/** RSA LTC_PKCS style key */
+typedef struct Rsa_key {
+    /** Type of key, PK_PRIVATE or PK_PUBLIC */
+    int type;
+    /** The public exponent */
+    void *e; 
+    /** The private exponent */
+    void *d; 
+    /** The modulus */
+    void *N; 
+    /** The p factor of N */
+    void *p; 
+    /** The q factor of N */
+    void *q; 
+    /** The 1/q mod p CRT param */
+    void *qP; 
+    /** The d mod (p - 1) CRT param */
+    void *dP; 
+    /** The d mod (q - 1) CRT param */
+    void *dQ;
+} ltc_rsa_key;
 
 /*! 
  * \brief Retrieve a key
@@ -163,6 +185,10 @@
 int ltc_sha512_process(ltc_hash_state * md, const unsigned char *in, unsigned long inlen);
 int ltc_sha512_done(ltc_hash_state * md, unsigned char *hash);
 
+/*! \brief LTC_PKCS #1 import/export */
+int ltc_rsa_export(unsigned char *out, unsigned long *outlen, int type, ltc_rsa_key *key);
+int ltc_rsa_import(const unsigned char *in, unsigned long inlen, ltc_rsa_key *key);
+
 #if defined(__cplusplus) || defined(c_plusplus)
 }
 #endif

Added: team/tilghman/tomcrypt/include/tomcrypt
URL: http://svn.digium.com/view/asterisk/team/tilghman/tomcrypt/include/tomcrypt?view=auto&rev=89423
==============================================================================
--- team/tilghman/tomcrypt/include/tomcrypt (added)
+++ team/tilghman/tomcrypt/include/tomcrypt Mon Nov 19 12:17:47 2007
@@ -1,0 +1,1 @@
+link ../main/tomcrypt/src/headers/

Propchange: team/tilghman/tomcrypt/include/tomcrypt
------------------------------------------------------------------------------
    svn:special = *

Modified: team/tilghman/tomcrypt/res/res_crypto.c
URL: http://svn.digium.com/view/asterisk/team/tilghman/tomcrypt/res/res_crypto.c?view=diff&rev=89423&r1=89422&r2=89423
==============================================================================
--- team/tilghman/tomcrypt/res/res_crypto.c (original)
+++ team/tilghman/tomcrypt/res/res_crypto.c Mon Nov 19 12:17:47 2007
@@ -51,7 +51,6 @@
 #include "asterisk/module.h"
 #include "asterisk/options.h"
 #include "asterisk/crypto.h"
-#include "asterisk/md5.h"
 #include "asterisk/cli.h"
 #include "asterisk/io.h"
 #include "asterisk/lock.h"
@@ -80,7 +79,7 @@
 	/*! Key type (AST_KEY_PUB or AST_KEY_PRIV, along with flags from above) */
 	int ktype;
 	/*! RSA structure (if successfully loaded) */
-	RSA *rsa;
+	ltc_rsa_key rsa;
 	/*! Whether we should be deleted */
 	int delme;
 	/*! FD for input (or -1 if no input allowed, or -2 if we needed input) */
@@ -158,8 +157,8 @@
 */
 static struct ast_key *try_load_key(char *dir, char *fname, int ifd, int ofd, int *not2)
 {
-	int ktype = 0, found = 0;
-	char *c = NULL, ffname[256];
+	int ktype = 0, found = 0, keyinlen;
+	char *c = NULL, ffname[256], keyin[8192];
 	unsigned char digest[16];
 	FILE *f;
 	ltc_hash_state md;
@@ -237,21 +236,15 @@
 	key->outfd = ofd;
 	/* Reset the file back to the beginning */
 	rewind(f);
-	/* Now load the key with the right method */
-	if (ktype == AST_KEY_PUBLIC)
-		key->rsa = PEM_read_RSA_PUBKEY(f, NULL, pw_cb, key);
-	else
-		key->rsa = PEM_read_RSAPrivateKey(f, NULL, pw_cb, key);
+	/* Now load the key */
+	keyinlen = read(f, keyin, sizeof(keyin));
 	fclose(f);
-	if (key->rsa) {
-		if (RSA_size(key->rsa) == 128) {
-			/* Key loaded okay */
-			key->ktype &= ~KEY_NEEDS_PASSCODE;
-			ast_verb(3, "Loaded %s key '%s'\n", key->ktype == AST_KEY_PUBLIC ? "PUBLIC" : "PRIVATE", key->name);
-			ast_debug(1, "Key '%s' loaded OK\n", key->name);
-			key->delme = 0;
-		} else
-			ast_log(LOG_NOTICE, "Key '%s' is not expected size.\n", key->name);
+	if (ltc_rsa_import(keyin, keyinlen, &key->rsa) == LTC_CRYPT_OK) {
+		/* Key loaded okay */
+		key->ktype &= ~KEY_NEEDS_PASSCODE;
+		ast_verb(3, "Loaded %s key '%s'\n", key->ktype == AST_KEY_PUBLIC ? "PUBLIC" : "PRIVATE", key->name);
+		ast_debug(1, "Key '%s' loaded OK\n", key->name);
+		key->delme = 0;
 	} else if (key->infd != -2) {
 		ast_log(LOG_WARNING, "Key load %s '%s' failed\n",key->ktype == AST_KEY_PUBLIC ? "PUBLIC" : "PRIVATE", key->name);
 		if (ofd > -1)




More information about the asterisk-commits mailing list