Add deprecated functions for tcpdump.

This reduces the delta for getting Android to compile and avoids having
Android carry around diffs to upstream versions of tcpdump.

Change-Id: I7f4cbb22b7a0f246bbebe960ca2139f0f42e14a0
Reviewed-on: https://boringssl-review.googlesource.com/1830
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/crypto/cipher/cipher.c b/crypto/cipher/cipher.c
index cdb8f43..fd613a6 100644
--- a/crypto/cipher/cipher.c
+++ b/crypto/cipher/cipher.c
@@ -56,8 +56,9 @@
 
 #include <openssl/cipher.h>
 
-#include <string.h>
 #include <assert.h>
+#include <string.h>
+#include <strings.h>
 
 #include <openssl/err.h>
 #include <openssl/mem.h>
@@ -93,14 +94,6 @@
   return ctx;
 }
 
-int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
-                   const unsigned char *key, const unsigned char *iv, int enc) {
-  if (cipher) {
-    EVP_CIPHER_CTX_init(ctx);
-  }
-  return EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, enc);
-}
-
 int EVP_CIPHER_CTX_cleanup(EVP_CIPHER_CTX *c) {
   if (c->cipher != NULL && c->cipher->cleanup && !c->cipher->cleanup(c)) {
     return 0;
@@ -613,3 +606,50 @@
 uint32_t EVP_CIPHER_mode(const EVP_CIPHER *cipher) {
   return cipher->flags & EVP_CIPH_MODE_MASK;
 }
+
+int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
+                   const uint8_t *key, const uint8_t *iv, int enc) {
+  if (cipher) {
+    EVP_CIPHER_CTX_init(ctx);
+  }
+  return EVP_CipherInit_ex(ctx, cipher, NULL, key, iv, enc);
+}
+
+int EVP_EncryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
+                    const uint8_t *key, const uint8_t *iv) {
+  return EVP_CipherInit(ctx, cipher, key, iv, 1);
+}
+
+int EVP_DecryptInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
+                    const uint8_t *key, const uint8_t *iv) {
+  return EVP_CipherInit(ctx, cipher, key, iv, 0);
+}
+
+int EVP_add_cipher_alias(const char *a, const char *b) {
+  return 1;
+}
+
+const EVP_CIPHER *EVP_get_cipherbyname(const char *name) {
+  if (strcasecmp(name, "rc4") == 0) {
+    return EVP_rc4();
+  } else if (strcasecmp(name, "des-cbc") == 0) {
+    return EVP_des_cbc();
+  } else if (strcasecmp(name, "3des-cbc") == 0 ||
+             strcasecmp(name, "3des") == 0) {
+    return EVP_des_ede3_cbc();
+  } else if (strcasecmp(name, "aes-128-cbc") == 0) {
+    return EVP_aes_128_cbc();
+  } else if (strcasecmp(name, "aes-256-cbc") == 0) {
+    return EVP_aes_256_cbc();
+  } else if (strcasecmp(name, "aes-128-ctr") == 0) {
+    return EVP_aes_128_ctr();
+  } else if (strcasecmp(name, "aes-256-ctr") == 0) {
+    return EVP_aes_256_ctr();
+  } else if (strcasecmp(name, "aes-128-ecb") == 0) {
+    return EVP_aes_128_ecb();
+  } else if (strcasecmp(name, "aes-256-ecb") == 0) {
+    return EVP_aes_256_ecb();
+  }
+
+  return NULL;
+}
diff --git a/include/openssl/cipher.h b/include/openssl/cipher.h
index 4eae33b..021c682 100644
--- a/include/openssl/cipher.h
+++ b/include/openssl/cipher.h
@@ -356,6 +356,32 @@
 #define EVP_CIPH_CUSTOM_COPY 0x1000
 
 
+/* Deprecated functions */
+
+/* EVP_CipherInit acts like EVP_CipherInit_ex except that |EVP_CIPHER_CTX_init|
+ * is called on |cipher| first, if |cipher| is not NULL. */
+OPENSSL_EXPORT int EVP_CipherInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
+                                  const uint8_t *key, const uint8_t *iv,
+                                  int enc);
+
+/* EVP_EncryptInit calls |EVP_CipherInit| with |enc| equal to one. */
+OPENSSL_EXPORT int EVP_EncryptInit(EVP_CIPHER_CTX *ctx,
+                                   const EVP_CIPHER *cipher, const uint8_t *key,
+                                   const uint8_t *iv);
+
+/* EVP_DecryptInit calls |EVP_CipherInit| with |enc| equal to zero. */
+OPENSSL_EXPORT int EVP_DecryptInit(EVP_CIPHER_CTX *ctx,
+                                   const EVP_CIPHER *cipher, const uint8_t *key,
+                                   const uint8_t *iv);
+
+/* EVP_add_cipher_alias does nothing and returns one. */
+OPENSSL_EXPORT int EVP_add_cipher_alias(const char *a, const char *b);
+
+/* EVP_get_cipherbyname returns an |EVP_CIPHER| given a human readable name in
+ * |name|, or NULL if the name is unknown. */
+OPENSSL_EXPORT const EVP_CIPHER *EVP_get_cipherbyname(const char *name);
+
+
 /* Private functions. */
 
 /* EVP_CIPH_NO_PADDING disables padding in block ciphers. */