Package: sqlcipher
Version: 3.2.0-1.1+b2
Followup-For: Bug #828555

Sqlcipher 3.4.0 was released but still subject to openssl 1.1 incompatibility.

Besides the fact that some 3.2 debian patches don't apply to 3.4, I managed
to rebuild the latter with the attached patch.


-- System Information:
Debian Release: stretch/sid
  APT prefers testing
  APT policy: (990, 'testing'), (500, 'unstable'), (500, 'stable'), (1, 
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.8.10 (SMP w/4 CPU cores; PREEMPT)
Locale: LANG=pt_BR.UTF-8, LC_CTYPE=pt_BR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Init: systemd (via /run/systemd/system)

Versions of packages sqlcipher depends on:
ii  libc6          2.24-5
ii  libreadline7   7.0-1
ii  libsqlcipher0  3.2.0-1.1+b2
ii  libtinfo5      6.0+20160917-1

sqlcipher recommends no packages.

Versions of packages sqlcipher suggests:
pn  sqlite3-doc  <none>

-- no debconf information
--- a/src/crypto_openssl.c
+++ b/src/crypto_openssl.c
@@ -155,14 +155,24 @@
 }
 
 static int sqlcipher_openssl_hmac(void *ctx, unsigned char *hmac_key, int key_sz, unsigned char *in, int in_sz, unsigned char *in2, int in2_sz, unsigned char *out) {
-  HMAC_CTX hctx;
   unsigned int outlen;
+#if OPENSSL_VERSION_NUMBER >= 0x10100001L
+  HMAC_CTX *hctx;
+  hctx = HMAC_CTX_new();
+  HMAC_Init_ex(hctx, hmac_key, key_sz, EVP_sha1(), NULL);
+  HMAC_Update(hctx, in, in_sz);
+  HMAC_Update(hctx, in2, in2_sz);
+  HMAC_Final(hctx, out, &outlen);
+  HMAC_CTX_free(hctx);
+#else
+  HMAC_CTX hctx;
   HMAC_CTX_init(&hctx);
   HMAC_Init_ex(&hctx, hmac_key, key_sz, EVP_sha1(), NULL);
   HMAC_Update(&hctx, in, in_sz);
   HMAC_Update(&hctx, in2, in2_sz);
   HMAC_Final(&hctx, out, &outlen);
   HMAC_CTX_cleanup(&hctx);
+#endif
   return SQLITE_OK; 
 }
 
@@ -172,9 +182,23 @@
 }
 
 static int sqlcipher_openssl_cipher(void *ctx, int mode, unsigned char *key, int key_sz, unsigned char *iv, unsigned char *in, int in_sz, unsigned char *out) {
-  EVP_CIPHER_CTX ectx;
   int tmp_csz, csz;
  
+#if OPENSSL_VERSION_NUMBER >= 0x10100001L
+  EVP_CIPHER_CTX *ectx;
+  ectx = EVP_CIPHER_CTX_new();
+  EVP_CipherInit(ectx, ((openssl_ctx *)ctx)->evp_cipher, NULL, NULL, mode);
+  EVP_CIPHER_CTX_set_padding(ectx, 0); // no padding
+  EVP_CipherInit(ectx, NULL, key, iv, mode);
+  EVP_CipherUpdate(ectx, out, &tmp_csz, in, in_sz);
+  csz = tmp_csz;  
+  out += tmp_csz;
+  EVP_CipherFinal(ectx, out, &tmp_csz);
+  csz += tmp_csz;
+  EVP_CIPHER_CTX_free(ectx);
+
+#else
+  EVP_CIPHER_CTX ectx;
   EVP_CipherInit(&ectx, ((openssl_ctx *)ctx)->evp_cipher, NULL, NULL, mode);
   EVP_CIPHER_CTX_set_padding(&ectx, 0); // no padding
   EVP_CipherInit(&ectx, NULL, key, iv, mode);
@@ -184,7 +208,9 @@
   EVP_CipherFinal(&ectx, out, &tmp_csz);
   csz += tmp_csz;
   EVP_CIPHER_CTX_cleanup(&ectx);
+#endif
   assert(in_sz == csz);
+  
   return SQLITE_OK; 
 }
 

Reply via email to