[or-cvs] Backport to OpenSSL version 0.9.5

Nick Mathewson nickm at seul.org
Tue Sep 3 19:16:04 UTC 2002


Update of /home/or/cvsroot/src/common
In directory moria.seul.org:/tmp/cvs-serv4510/src/common

Modified Files:
	crypto.c 
Log Message:
Backport to OpenSSL version 0.9.5

Index: crypto.c
===================================================================
RCS file: /home/or/cvsroot/src/common/crypto.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- crypto.c	3 Sep 2002 18:44:23 -0000	1.4
+++ crypto.c	3 Sep 2002 19:16:02 -0000	1.5
@@ -9,6 +9,7 @@
 #include <openssl/pem.h>
 #include <openssl/evp.h>
 #include <openssl/rand.h>
+#include <openssl/opensslv.h>
 
 #include <stdlib.h>
 #include <assert.h>
@@ -17,6 +18,24 @@
 #include "config.h"
 #include "log.h"
 
+#if OPENSSL_VERSION_NUMBER < 0x00905000l
+#error "We require openssl >= 0.9.5"
+#elif OPENSSL_VERSION_NUMBER < 0x00906000l
+#define OPENSSL_095
+#endif
+
+/*
+ * Certain functions that return a success code in OpenSSL 0.9.6 return void
+ * (and don't indicate errors) in OpenSSL version 0.9.5.
+ *
+ * [OpenSSL 0.9.5 matters, because it ships with Redhat 6.2.]
+ */
+#ifdef OPENSSL_095
+#define RETURN_SSL_OUTCOME(exp) (exp); return 0
+#else
+#define RETURN_SSL_OUTCOME(exp) return !(exp)
+#endif
+
 int crypto_global_init() 
 {
   ERR_load_crypto_strings();
@@ -478,11 +497,11 @@
 
   switch(env->type) {
     case CRYPTO_CIPHER_IDENTITY:
-      return !(EVP_EncryptInit((EVP_CIPHER_CTX *)env->aux, EVP_enc_null(), env->key, env->iv));
+      RETURN_SSL_OUTCOME(EVP_EncryptInit((EVP_CIPHER_CTX *)env->aux, EVP_enc_null(), env->key, env->iv));
     case CRYPTO_CIPHER_DES:
-      return !(EVP_EncryptInit((EVP_CIPHER_CTX *)env->aux, EVP_des_ofb(), env->key, env->iv));
+      RETURN_SSL_OUTCOME(EVP_EncryptInit((EVP_CIPHER_CTX *)env->aux, EVP_des_ofb(), env->key, env->iv));
     case CRYPTO_CIPHER_RC4:
-      return !(EVP_EncryptInit((EVP_CIPHER_CTX *)env->aux, EVP_rc4(), env->key, env->iv));
+      RETURN_SSL_OUTCOME(EVP_EncryptInit((EVP_CIPHER_CTX *)env->aux, EVP_rc4(), env->key, env->iv));
     default:
       return -1;
   }
@@ -496,11 +515,11 @@
   
   switch(env->type) {
     case CRYPTO_CIPHER_IDENTITY:
-    return !(EVP_DecryptInit((EVP_CIPHER_CTX *)env->aux, EVP_enc_null(), env->key, env->iv));
+      RETURN_SSL_OUTCOME(EVP_DecryptInit((EVP_CIPHER_CTX *)env->aux, EVP_enc_null(), env->key, env->iv));
     case CRYPTO_CIPHER_DES:
-    return !(EVP_DecryptInit((EVP_CIPHER_CTX *)env->aux, EVP_des_ofb(), env->key, env->iv));
+      RETURN_SSL_OUTCOME(EVP_DecryptInit((EVP_CIPHER_CTX *)env->aux, EVP_des_ofb(), env->key, env->iv));
     case CRYPTO_CIPHER_RC4:
-    return !(EVP_DecryptInit((EVP_CIPHER_CTX *)env->aux, EVP_rc4(), env->key, env->iv));
+      RETURN_SSL_OUTCOME(EVP_DecryptInit((EVP_CIPHER_CTX *)env->aux, EVP_rc4(), env->key, env->iv));
     default:
     return -1;
   }
@@ -514,7 +533,7 @@
   
   assert(env && from && to);
   
-  return !(EVP_EncryptUpdate((EVP_CIPHER_CTX *)env->aux, to, &tolen, from, fromlen));
+  RETURN_SSL_OUTCOME(EVP_EncryptUpdate((EVP_CIPHER_CTX *)env->aux, to, &tolen, from, fromlen));
 }
 
 int crypto_cipher_decrypt(crypto_cipher_env_t *env, unsigned char *from, unsigned int fromlen, unsigned char *to)
@@ -523,7 +542,7 @@
   
   assert(env && from && to);
   
-  return !(EVP_DecryptUpdate((EVP_CIPHER_CTX *)env->aux, to, &tolen, from, fromlen));
+  RETURN_SSL_OUTCOME(EVP_DecryptUpdate((EVP_CIPHER_CTX *)env->aux, to, &tolen, from, fromlen));
 }
 
 /* SHA-1 */



More information about the tor-commits mailing list