add OpenSSL-1.1.0-pre2 compatibility

Closes #70
diff --git a/src/openssl.c b/src/openssl.c
index b1ff40f..bb10752 100644
--- a/src/openssl.c
+++ b/src/openssl.c
@@ -177,8 +177,13 @@
                      _libssh2_cipher_type(algo),
                      unsigned char *iv, unsigned char *secret, int encrypt)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+    *h = EVP_CIPHER_CTX_new();
+    return !EVP_CipherInit(*h, algo(), secret, iv, encrypt);
+#else
     EVP_CIPHER_CTX_init(h);
     return !EVP_CipherInit(h, algo(), secret, iv, encrypt);
+#endif
 }
 
 int
@@ -191,7 +196,11 @@
     (void) algo;
     (void) encrypt;
 
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+    ret = EVP_Cipher(*ctx, buf, block, blocksize);
+#else
     ret = EVP_Cipher(ctx, buf, block, blocksize);
+#endif
     if (ret == 1) {
         memcpy(block, buf, blocksize);
     }
@@ -222,7 +231,7 @@
     const EVP_CIPHER *aes_cipher;
     (void) enc;
 
-    switch (ctx->key_len) {
+    switch (EVP_CIPHER_CTX_key_length(ctx)) {
     case 16:
         aes_cipher = EVP_aes_128_ecb();
         break;
@@ -240,14 +249,22 @@
     if (c == NULL)
         return 0;
 
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+    c->aes_ctx = EVP_CIPHER_CTX_new();
+#else
     c->aes_ctx = malloc(sizeof(EVP_CIPHER_CTX));
+#endif
     if (c->aes_ctx == NULL) {
         free(c);
         return 0;
     }
 
     if (EVP_EncryptInit(c->aes_ctx, aes_cipher, key, NULL) != 1) {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+        EVP_CIPHER_CTX_free(c->aes_ctx);
+#else
         free(c->aes_ctx);
+#endif
         free(c);
         return 0;
     }
@@ -312,8 +329,12 @@
     }
 
     if (c->aes_ctx != NULL) {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+        EVP_CIPHER_CTX_free(c->aes_ctx);
+#else
         _libssh2_cipher_dtor(c->aes_ctx);
         free(c->aes_ctx);
+#endif
     }
 
     free(c);
@@ -322,14 +343,25 @@
 }
 
 static const EVP_CIPHER *
-make_ctr_evp (size_t keylen, EVP_CIPHER *aes_ctr_cipher)
+make_ctr_evp (size_t keylen, EVP_CIPHER *aes_ctr_cipher, int type)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+    aes_ctr_cipher = EVP_CIPHER_meth_new(type, 16, keylen);
+    if (aes_ctr_cipher) {
+        EVP_CIPHER_meth_set_iv_length(aes_ctr_cipher, 16);
+        EVP_CIPHER_meth_set_init(aes_ctr_cipher, aes_ctr_init);
+        EVP_CIPHER_meth_set_do_cipher(aes_ctr_cipher, aes_ctr_do_cipher);
+        EVP_CIPHER_meth_set_cleanup(aes_ctr_cipher, aes_ctr_cleanup);
+    }
+#else
+    aes_ctr_cipher->nid = type;
     aes_ctr_cipher->block_size = 16;
     aes_ctr_cipher->key_len = keylen;
     aes_ctr_cipher->iv_len = 16;
     aes_ctr_cipher->init = aes_ctr_init;
     aes_ctr_cipher->do_cipher = aes_ctr_do_cipher;
     aes_ctr_cipher->cleanup = aes_ctr_cleanup;
+#endif
 
     return aes_ctr_cipher;
 }
@@ -337,25 +369,43 @@
 const EVP_CIPHER *
 _libssh2_EVP_aes_128_ctr(void)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+    static EVP_CIPHER * aes_ctr_cipher;
+    return !aes_ctr_cipher?
+        make_ctr_evp (16, aes_ctr_cipher, NID_aes_128_ctr) : aes_ctr_cipher;
+#else
     static EVP_CIPHER aes_ctr_cipher;
     return !aes_ctr_cipher.key_len?
-        make_ctr_evp (16, &aes_ctr_cipher) : &aes_ctr_cipher;
+        make_ctr_evp (16, &aes_ctr_cipher, 0) : &aes_ctr_cipher;
+#endif
 }
 
 const EVP_CIPHER *
 _libssh2_EVP_aes_192_ctr(void)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+    static EVP_CIPHER * aes_ctr_cipher;
+    return !aes_ctr_cipher?
+        make_ctr_evp (24, aes_ctr_cipher, NID_aes_192_ctr) : aes_ctr_cipher;
+#else
     static EVP_CIPHER aes_ctr_cipher;
     return !aes_ctr_cipher.key_len?
-        make_ctr_evp (24, &aes_ctr_cipher) : &aes_ctr_cipher;
+        make_ctr_evp (24, &aes_ctr_cipher, 0) : &aes_ctr_cipher;
+#endif
 }
 
 const EVP_CIPHER *
 _libssh2_EVP_aes_256_ctr(void)
 {
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+    static EVP_CIPHER * aes_ctr_cipher;
+    return !aes_ctr_cipher?
+        make_ctr_evp (32, aes_ctr_cipher, NID_aes_256_ctr) : aes_ctr_cipher;
+#else
     static EVP_CIPHER aes_ctr_cipher;
     return !aes_ctr_cipher.key_len?
-        make_ctr_evp (32, &aes_ctr_cipher) : &aes_ctr_cipher;
+        make_ctr_evp (32, &aes_ctr_cipher, 0) : &aes_ctr_cipher;
+#endif
 }
 
 void _libssh2_init_aes_ctr(void)
diff --git a/src/openssl.h b/src/openssl.h
index fe5fe45..d2adbdf 100644
--- a/src/openssl.h
+++ b/src/openssl.h
@@ -236,7 +236,11 @@
 #define _libssh2_dsa_free(dsactx) DSA_free(dsactx)
 
 #define _libssh2_cipher_type(name) const EVP_CIPHER *(*name)(void)
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#define _libssh2_cipher_ctx EVP_CIPHER_CTX *
+#else
 #define _libssh2_cipher_ctx EVP_CIPHER_CTX
+#endif
 
 #define _libssh2_cipher_aes256 EVP_aes_256_cbc
 #define _libssh2_cipher_aes192 EVP_aes_192_cbc
@@ -255,7 +259,11 @@
 #define _libssh2_cipher_cast5 EVP_cast5_cbc
 #define _libssh2_cipher_3des EVP_des_ede3_cbc
 
+#if OPENSSL_VERSION_NUMBER >= 0x10100000L
+#define _libssh2_cipher_dtor(ctx) EVP_CIPHER_CTX_reset(*(ctx))
+#else
 #define _libssh2_cipher_dtor(ctx) EVP_CIPHER_CTX_cleanup(ctx)
+#endif
 
 #define _libssh2_bn BIGNUM
 #define _libssh2_bn_ctx BN_CTX