[Forensics-changes] [afflib] 01/02: Imported Upstream version 3.7.10
Joao Eriberto Mota Filho
eriberto at moszumanska.debian.org
Sun Oct 9 00:40:43 UTC 2016
This is an automated email from the git hooks/post-receive script.
eriberto pushed a commit to branch debian
in repository afflib.
commit b387421077f7bbda9fc9f12265eb395c7fd37060
Author: Joao Eriberto Mota Filho <eriberto at debian.org>
Date: Sat Oct 8 21:40:29 2016 -0300
Imported Upstream version 3.7.10
---
configure.ac | 2 +-
lib/aftest.cpp | 33 +++++++++------
lib/crypto.cpp | 114 ++++++++++++++++++++++++++++++++--------------------
tools/aff_bom.cpp | 28 ++++++++-----
tools/affverify.cpp | 32 ++++++++++-----
tools/hashextent.h | 19 ++++++---
win32/affconfig.h | 2 +-
7 files changed, 145 insertions(+), 85 deletions(-)
diff --git a/configure.ac b/configure.ac
index 54e89ee..7de2900 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,7 +4,7 @@
# See http://autotoolset.sourceforge.net/tutorial.html
# and http://www.openismus.com/documents/linux/automake/automake.shtml
-AC_INIT([AFFLIB],[3.7.8],[https://github.com/sshock/AFFLIBv3])
+AC_INIT([AFFLIB],[3.7.10],[https://github.com/sshock/AFFLIBv3])
AM_INIT_AUTOMAKE
AM_MAINTAINER_MODE
diff --git a/lib/aftest.cpp b/lib/aftest.cpp
index c568e6c..ef733c9 100644
--- a/lib/aftest.cpp
+++ b/lib/aftest.cpp
@@ -38,6 +38,11 @@ const char *tempdir = "/tmp/";
#define MIN(x,y) ((x)<(y)?(x):(y))
#endif
+/* Support OpenSSL before 1.1.0 */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#define EVP_MD_CTX_new EVP_MD_CTX_create
+#define EVP_MD_CTX_free EVP_MD_CTX_destroy
+#endif
const char *filename(char *buf,int buflen,const char *base)
{
@@ -769,12 +774,12 @@ void rsatest()
return;
}
- EVP_MD_CTX md;
+ EVP_MD_CTX *md = EVP_MD_CTX_new();
EVP_PKEY *pkey = PEM_read_bio_PrivateKey(bp,0,0,0);
- EVP_SignInit(&md,sha256);
- EVP_SignUpdate(&md,ptext,sizeof(ptext));
- EVP_SignFinal(&md,sig,&siglen,pkey);
+ EVP_SignInit(md,sha256);
+ EVP_SignUpdate(md,ptext,sizeof(ptext));
+ EVP_SignFinal(md,sig,&siglen,pkey);
/* let's try to verify it */
bp = BIO_new_file("signing_cert.pem","r");
@@ -789,23 +794,25 @@ void rsatest()
printf("pubkey=%p\n",pubkey);
- EVP_VerifyInit(&md,sha256);
- EVP_VerifyUpdate(&md,ptext,sizeof(ptext));
- int r = EVP_VerifyFinal(&md,sig,siglen,pubkey);
+ EVP_VerifyInit(md,sha256);
+ EVP_VerifyUpdate(md,ptext,sizeof(ptext));
+ int r = EVP_VerifyFinal(md,sig,siglen,pubkey);
printf("r=%d\n",r);
printf("do it again...\n");
- EVP_VerifyInit(&md,sha256);
- EVP_VerifyUpdate(&md,ptext,sizeof(ptext));
- r = EVP_VerifyFinal(&md,sig,siglen,pubkey);
+ EVP_VerifyInit(md,sha256);
+ EVP_VerifyUpdate(md,ptext,sizeof(ptext));
+ r = EVP_VerifyFinal(md,sig,siglen,pubkey);
printf("r=%d\n",r);
printf("make a tiny change...\n");
ptext[0]='f';
- EVP_VerifyInit(&md,sha256);
- EVP_VerifyUpdate(&md,ptext,sizeof(ptext));
- r = EVP_VerifyFinal(&md,sig,siglen,pubkey);
+ EVP_VerifyInit(md,sha256);
+ EVP_VerifyUpdate(md,ptext,sizeof(ptext));
+ r = EVP_VerifyFinal(md,sig,siglen,pubkey);
printf("r=%d\n",r);
+
+ EVP_MD_CTX_free(md);
}
void xmlseg(BIO *bp,AFFILE *af,const char *segname)
diff --git a/lib/crypto.cpp b/lib/crypto.cpp
index 9cc13bf..42dce9a 100644
--- a/lib/crypto.cpp
+++ b/lib/crypto.cpp
@@ -25,8 +25,11 @@ using namespace std;
#include <cstring>
#endif
-
-
+/* Support OpenSSL before 1.1.0 */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#define EVP_MD_CTX_new EVP_MD_CTX_create
+#define EVP_MD_CTX_free EVP_MD_CTX_destroy
+#endif
/****************************************************************
@@ -82,10 +85,14 @@ int af_SHA256(const unsigned char *data,size_t datalen,unsigned char md[32])
if(!sha256) return -1;
uint32_t sha256_buflen = 32;
- EVP_MD_CTX ctx;
- EVP_DigestInit(&ctx,sha256);
- EVP_DigestUpdate(&ctx,data,datalen);
- if(EVP_DigestFinal(&ctx,md,&sha256_buflen)!=1) return -1; // EVP_DigestFinal returns 1 for success
+ EVP_MD_CTX *ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx,sha256);
+ EVP_DigestUpdate(ctx,data,datalen);
+ if(EVP_DigestFinal(ctx,md,&sha256_buflen)!=1){ // EVP_DigestFinal returns 1 for success
+ EVP_MD_CTX_free(ctx);
+ return -1;
+ }
+ EVP_MD_CTX_free(ctx);
return 0;
}
@@ -387,22 +394,23 @@ static int check_keys(EVP_PKEY *privkey,EVP_PKEY *pubkey)
const EVP_MD *sha256 = EVP_get_digestbyname("SHA256");
if(!sha256) return -1; // no SHA256.
- EVP_MD_CTX md; /* EVP message digest */
-
+ EVP_MD_CTX *md = EVP_MD_CTX_new(); /* EVP message digest */
/* make the plaintext message */
memset(ptext,0,sizeof(ptext));
strcpy(ptext,"Test Message");
- EVP_SignInit(&md,sha256);
- EVP_SignUpdate(&md,ptext,sizeof(ptext));
- EVP_SignFinal(&md,sig,&siglen,privkey);
+ EVP_SignInit(md,sha256);
+ EVP_SignUpdate(md,ptext,sizeof(ptext));
+ EVP_SignFinal(md,sig,&siglen,privkey);
/* Verify the message */
- EVP_VerifyInit(&md,sha256);
- EVP_VerifyUpdate(&md,ptext,sizeof(ptext));
- if(EVP_VerifyFinal(&md,sig,siglen,pubkey)!=1){
+ EVP_VerifyInit(md,sha256);
+ EVP_VerifyUpdate(md,ptext,sizeof(ptext));
+ if(EVP_VerifyFinal(md,sig,siglen,pubkey)!=1){
+ EVP_MD_CTX_free(md);
return -3;
}
+ EVP_MD_CTX_free(md);
return 0;
}
@@ -494,12 +502,13 @@ int af_sign_seg3(AFFILE *af,const char *segname,
unsigned char sig[1024]; /* signature; bigger than needed */
uint32_t siglen = sizeof(sig); /* length of signature */
- EVP_MD_CTX md; /* EVP message digest */
- EVP_SignInit(&md,sha256);
- EVP_SignUpdate(&md,(const unsigned char *)segname,strlen(segname)+1);
- EVP_SignUpdate(&md,(const unsigned char *)&arg_net,sizeof(arg_net));
- EVP_SignUpdate(&md,data,datalen);
- EVP_SignFinal(&md,sig,&siglen,af->crypto->sign_privkey);
+ EVP_MD_CTX *md = EVP_MD_CTX_new(); /* EVP message digest */
+ EVP_SignInit(md,sha256);
+ EVP_SignUpdate(md,(const unsigned char *)segname,strlen(segname)+1);
+ EVP_SignUpdate(md,(const unsigned char *)&arg_net,sizeof(arg_net));
+ EVP_SignUpdate(md,data,datalen);
+ EVP_SignFinal(md,sig,&siglen,af->crypto->sign_privkey);
+ EVP_MD_CTX_free(md);
return (*af->v->update_seg)(af,signed_segname,signmode,sig,siglen);
}
@@ -618,12 +627,13 @@ int af_hash_verify_seg2(AFFILE *af,const char *segname,u_char *sigbuf_,size_t si
uint8_t sigbuf[1024];
uint32_t sigbuf_len = sizeof(sigbuf);
uint32_t arg_net = htonl(arg);
- EVP_MD_CTX md; /* EVP message digest */
- EVP_DigestInit(&md,sha256);
- EVP_DigestUpdate(&md,(const unsigned char *)segname,strlen(segname)+1);
- EVP_DigestUpdate(&md,(const unsigned char *)&arg_net,sizeof(arg_net));
- EVP_DigestUpdate(&md,segbuf,seglen);
- EVP_DigestFinal(&md,sigbuf,&sigbuf_len);
+ EVP_MD_CTX *md = EVP_MD_CTX_new(); /* EVP message digest */
+ EVP_DigestInit(md,sha256);
+ EVP_DigestUpdate(md,(const unsigned char *)segname,strlen(segname)+1);
+ EVP_DigestUpdate(md,(const unsigned char *)&arg_net,sizeof(arg_net));
+ EVP_DigestUpdate(md,segbuf,seglen);
+ EVP_DigestFinal(md,sigbuf,&sigbuf_len);
+ EVP_MD_CTX_free(md);
int r = memcmp(sigbuf,sigbuf_,sigbuf_len);
if(sigbuf_len != sigbuf_len_) r = -1; // doesn't match
free(segbuf);
@@ -677,12 +687,13 @@ int af_sig_verify_seg2(AFFILE *af,const char *segname,EVP_PKEY * /*pubkey*/,u_ch
/* Verify the signature*/
uint32_t arg_net = htonl(arg);
- EVP_MD_CTX md; /* EVP message digest */
- EVP_VerifyInit(&md,sha256);
- EVP_VerifyUpdate(&md,(const unsigned char *)segname,strlen(segname)+1);
- EVP_VerifyUpdate(&md,(const unsigned char *)&arg_net,sizeof(arg_net));
- EVP_VerifyUpdate(&md,segbuf,seglen);
- int r = EVP_VerifyFinal(&md,sigbuf,sigbuf_len,af->crypto->sign_pubkey);
+ EVP_MD_CTX *md = EVP_MD_CTX_new(); /* EVP message digest */
+ EVP_VerifyInit(md,sha256);
+ EVP_VerifyUpdate(md,(const unsigned char *)segname,strlen(segname)+1);
+ EVP_VerifyUpdate(md,(const unsigned char *)&arg_net,sizeof(arg_net));
+ EVP_VerifyUpdate(md,segbuf,seglen);
+ EVP_MD_CTX_free(md);
+ int r = EVP_VerifyFinal(md,sigbuf,sigbuf_len,af->crypto->sign_pubkey);
free(segbuf);
if(r==1) return 0; // verifies
@@ -803,7 +814,7 @@ int af_seal_affkey_using_certificates(AFFILE *af,const char *certfiles[],int nu
unsigned char affkey_copy[32];
memcpy(affkey_copy,affkey,32);
- EVP_CIPHER_CTX cipher_ctx;
+ EVP_CIPHER_CTX *cipher_ctx = EVP_CIPHER_CTX_new();
/* IV */
unsigned char iv[EVP_MAX_IV_LENGTH];
@@ -822,15 +833,26 @@ int af_seal_affkey_using_certificates(AFFILE *af,const char *certfiles[],int nu
int encrypted_bytes = 0;
memset(encrypted_affkey,0,sizeof(encrypted_affkey));
- r = EVP_SealInit(&cipher_ctx,EVP_aes_256_cbc(),ek_array,&ek_size,&iv[0],&seal_pubkey,1);
- if(r!=1) return -10; // bad
+ r = EVP_SealInit(cipher_ctx,EVP_aes_256_cbc(),ek_array,&ek_size,&iv[0],&seal_pubkey,1);
+ if(r!=1){
+ EVP_CIPHER_CTX_free(cipher_ctx);
+ return -10; // bad
+ }
- r = EVP_SealUpdate(&cipher_ctx,encrypted_affkey,&encrypted_bytes,affkey_copy,sizeof(affkey_copy));
- if(r!=1) return -11; // bad
+ r = EVP_SealUpdate(cipher_ctx,encrypted_affkey,&encrypted_bytes,affkey_copy,sizeof(affkey_copy));
+ if(r!=1){
+ EVP_CIPHER_CTX_free(cipher_ctx);
+ return -11; // bad
+ }
int total_encrypted_bytes = encrypted_bytes;
- r = EVP_SealFinal(&cipher_ctx,encrypted_affkey+total_encrypted_bytes,&encrypted_bytes);
- if(r!=1) return -12;
+ r = EVP_SealFinal(cipher_ctx,encrypted_affkey+total_encrypted_bytes,&encrypted_bytes);
+ if(r!=1){
+ EVP_CIPHER_CTX_free(cipher_ctx);
+ return -12;
+ }
+
+ EVP_CIPHER_CTX_free(cipher_ctx);
total_encrypted_bytes += encrypted_bytes;
@@ -926,20 +948,23 @@ int af_get_affkey_using_keyfile(AFFILE *af, const char *private_keyfile,u_char a
unsigned char *encrypted_affkey = buf+int3+EVP_MAX_IV_LENGTH+ek_size;
/* Now let's see if we can decode it*/
- EVP_CIPHER_CTX cipher_ctx;
- int r = EVP_OpenInit(&cipher_ctx,EVP_aes_256_cbc(),ek,ek_size,iv,seal_privkey);
+ EVP_CIPHER_CTX *cipher_ctx = EVP_CIPHER_CTX_new();
+ int r = EVP_OpenInit(cipher_ctx,EVP_aes_256_cbc(),ek,ek_size,iv,seal_privkey);
if(r==1){
/* allocate a buffer for the decrypted data */
decrypted = (unsigned char *)malloc(total_encrypted_bytes);
- if(!decrypted) return -1; // shouldn't fail
+ if(!decrypted){
+ EVP_CIPHER_CTX_free(cipher_ctx);
+ return -1; // shouldn't fail
+ }
int decrypted_len;
- r = EVP_OpenUpdate(&cipher_ctx,decrypted,&decrypted_len,encrypted_affkey,total_encrypted_bytes);
+ r = EVP_OpenUpdate(cipher_ctx,decrypted,&decrypted_len,encrypted_affkey,total_encrypted_bytes);
if(r==1){
/* OpenSSL requires that we call EVP_OpenFinal to finish the decryption */
unsigned char *decrypted2 = decrypted+decrypted_len; // where the decryption continues
int decrypted2_len = 0;
- r = EVP_OpenFinal(&cipher_ctx,decrypted2,&decrypted2_len);
+ r = EVP_OpenFinal(cipher_ctx,decrypted2,&decrypted2_len);
if(r==1){
memcpy(affkey,decrypted,32);
ret = 0; // successful return
@@ -948,6 +973,7 @@ int af_get_affkey_using_keyfile(AFFILE *af, const char *private_keyfile,u_char a
memset(decrypted,0,total_encrypted_bytes); // overwrite our temp buffer
free(decrypted);
}
+ EVP_CIPHER_CTX_free(cipher_ctx);
}
next:;
free(buf);
diff --git a/tools/aff_bom.cpp b/tools/aff_bom.cpp
index 72d7b46..efd00e8 100644
--- a/tools/aff_bom.cpp
+++ b/tools/aff_bom.cpp
@@ -35,6 +35,12 @@
#include <readline/readline.h>
#endif
+/* Support OpenSSL before 1.1.0 */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#define EVP_MD_CTX_new EVP_MD_CTX_create
+#define EVP_MD_CTX_free EVP_MD_CTX_destroy
+#endif
+
using namespace std;
int parse_chain(const string &name)
@@ -188,10 +194,11 @@ void aff_bom::close()
unsigned char sig[1024];
u_int siglen = sizeof(sig);
- EVP_MD_CTX md;
- EVP_SignInit(&md,sha256);
- EVP_SignUpdate(&md,xbuf,xlen);
- EVP_SignFinal(&md,sig,&siglen,privkey);
+ EVP_MD_CTX *md = EVP_MD_CTX_new();
+ EVP_SignInit(md,sha256);
+ EVP_SignUpdate(md,xbuf,xlen);
+ EVP_SignFinal(md,sig,&siglen,privkey);
+ EVP_MD_CTX_free(md);
/* Write the signature in base64 encoding... */
BIO *b64 = BIO_new(BIO_f_base64());
@@ -224,12 +231,13 @@ void aff_bom::make_hash(u_char seghash[SHA256_SIZE], uint32_t arg,const char *se
if(sha256){
unsigned int seghash_len = SHA256_SIZE;
uint32_t arg_net = htonl(arg);
- EVP_MD_CTX md; /* EVP message digest */
- EVP_DigestInit(&md,sha256);
- EVP_DigestUpdate(&md,(const unsigned char *)segname,strlen(segname)+1);
- EVP_DigestUpdate(&md,(const unsigned char *)&arg_net,sizeof(arg_net));
- EVP_DigestUpdate(&md,segbuf,segsize);
- EVP_DigestFinal(&md,seghash,&seghash_len);
+ EVP_MD_CTX *md = EVP_MD_CTX_new(); /* EVP message digest */
+ EVP_DigestInit(md,sha256);
+ EVP_DigestUpdate(md,(const unsigned char *)segname,strlen(segname)+1);
+ EVP_DigestUpdate(md,(const unsigned char *)&arg_net,sizeof(arg_net));
+ EVP_DigestUpdate(md,segbuf,segsize);
+ EVP_DigestFinal(md,seghash,&seghash_len);
+ EVP_MD_CTX_free(md);
}
}
diff --git a/tools/affverify.cpp b/tools/affverify.cpp
index b89d53d..1568ee6 100644
--- a/tools/affverify.cpp
+++ b/tools/affverify.cpp
@@ -27,6 +27,12 @@
#include <openssl/pem.h>
#include <openssl/x509.h>
+/* Support OpenSSL before 1.1.0 */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#define EVP_MD_CTX_new EVP_MD_CTX_create
+#define EVP_MD_CTX_free EVP_MD_CTX_destroy
+#endif
+
using namespace std;
using namespace aff;
@@ -248,10 +254,11 @@ int verify_bom_signature(AFFILE *af,const char *buf)
}
/* Try to verify it */
- EVP_MD_CTX md;
- EVP_VerifyInit(&md,sha256);
- EVP_VerifyUpdate(&md,buf,sig_start-buf);
- int r = EVP_VerifyFinal(&md,sigbuf,sigbuf_len,X509_get_pubkey(cert));
+ EVP_MD_CTX *md = EVP_MD_CTX_new();
+ EVP_VerifyInit(md,sha256);
+ EVP_VerifyUpdate(md,buf,sig_start-buf);
+ int r = EVP_VerifyFinal(md,sigbuf,sigbuf_len,X509_get_pubkey(cert));
+ EVP_MD_CTX_free(md);
if(r!=1){
printf("BAD SIGNATURE ON BOM\n");
return -1;
@@ -430,16 +437,17 @@ int hash_verify(AFFILE *af)
size_t md5_len =sizeof(md5_buf);
const EVP_MD *md5_evp = 0;
const EVP_MD *sha1_evp = 0;
- EVP_MD_CTX md5,sha1;
+ EVP_MD_CTX *md5 = EVP_MD_CTX_new();
+ EVP_MD_CTX *sha1 = EVP_MD_CTX_new();
if(af_get_seg(af,AF_SHA1,0,sha1_buf,&sha1_len)==0){
printf("SHA1 stored in file: %s\n",af_hexbuf(hexbuf,sizeof(hexbuf),sha1_buf,sha1_len,0));
sha1_evp = EVP_get_digestbyname("sha1");
- EVP_DigestInit(&sha1,sha1_evp);
+ EVP_DigestInit(sha1,sha1_evp);
}
if(af_get_seg(af,AF_MD5,0,md5_buf,&md5_len)==0){
printf("MD5 stored in file: %s\n",af_hexbuf(hexbuf,sizeof(hexbuf),md5_buf,md5_len,0));
md5_evp = EVP_get_digestbyname("md5");
- EVP_DigestInit(&md5,md5_evp);
+ EVP_DigestInit(md5,md5_evp);
}
/* Might as well read this puppy */
u_char *buf = (u_char *)malloc(af_get_pagesize(af));
@@ -457,8 +465,8 @@ int hash_verify(AFFILE *af)
t.eta_text(frac).c_str());
readsize = af_read(af,buf,af_get_pagesize(af));
if(readsize<1) break;
- if(md5_evp) EVP_DigestUpdate(&md5,buf,readsize);
- if(sha1_evp) EVP_DigestUpdate(&sha1,buf,readsize);
+ if(md5_evp) EVP_DigestUpdate(md5,buf,readsize);
+ if(sha1_evp) EVP_DigestUpdate(sha1,buf,readsize);
total_read += readsize;
} while(total_read < af_get_imagesize(af));
@@ -468,7 +476,7 @@ int hash_verify(AFFILE *af)
unsigned char sha1_calc[32];
unsigned int sha1_calc_len = sizeof(sha1_calc);
- EVP_DigestFinal(&sha1,sha1_calc,(unsigned int *)&sha1_calc_len);
+ EVP_DigestFinal(sha1,sha1_calc,(unsigned int *)&sha1_calc_len);
printf("Calculated SHA1: %s ",af_hexbuf(hexbuf,sizeof(hexbuf),sha1_calc,sha1_calc_len,0));
if(memcmp(sha1_buf,sha1_calc,sha1_len)==0){
printf("VERIFIES\n");
@@ -481,7 +489,7 @@ int hash_verify(AFFILE *af)
unsigned char md5_calc[32];
unsigned int md5_calc_len = sizeof(md5_calc);
- EVP_DigestFinal(&md5,md5_calc,(unsigned int *)&md5_calc_len);
+ EVP_DigestFinal(md5,md5_calc,(unsigned int *)&md5_calc_len);
printf("Calculated MD5: %s ",af_hexbuf(hexbuf,sizeof(hexbuf),md5_calc,md5_calc_len,0));
if(memcmp(md5_buf,md5_calc,md5_len)==0){
printf("VERIFIES\n");
@@ -490,6 +498,8 @@ int hash_verify(AFFILE *af)
}
}
+ EVP_MD_CTX_free(md5);
+ EVP_MD_CTX_free(sha1);
af_close(af);
return 0;
}
diff --git a/tools/hashextent.h b/tools/hashextent.h
index 9d30f4c..4fff444 100644
--- a/tools/hashextent.h
+++ b/tools/hashextent.h
@@ -18,6 +18,11 @@
#include <set>
#include <algorithm>
+/* Support OpenSSL before 1.1.0 */
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#define EVP_MD_CTX_new EVP_MD_CTX_create
+#define EVP_MD_CTX_free EVP_MD_CTX_destroy
+#endif
using std::string;
using std::ostream;
@@ -95,25 +100,29 @@ public:
*/
int compute_digest(AFFILE *af,string digestToUse){
const EVP_MD *md = EVP_get_digestbyname(digestToUse.c_str());
- EVP_MD_CTX ctx;
if(!md) return -1; // digest not available
- EVP_DigestInit(&ctx,md);
if(af_seek(af,start,0)!=start) return -1; // can't seek
+ EVP_MD_CTX *ctx = EVP_MD_CTX_new();
+ EVP_DigestInit(ctx,md);
uint64_t bytes_read = 0;
while(bytes_read < this->bytes){
u_char buf[65536];
int to_read = (this->bytes-bytes_read) < sizeof(buf) ? (this->bytes-bytes_read) : sizeof(buf);
- if(af_read(af,buf,to_read)!=to_read) return -1; // error reading
+ if(af_read(af,buf,to_read)!=to_read){
+ EVP_MD_CTX_free(ctx);
+ return -1; // error reading
+ }
/* compute the hash */
- EVP_DigestUpdate(&ctx,buf,to_read);
+ EVP_DigestUpdate(ctx,buf,to_read);
bytes_read += to_read;
}
/* Compute the results */
if(digest!=0) free(digest);
u_int digest_bytes = 1024;
digest = (u_char *)malloc(digest_bytes); // big enough for any conceivable digest
- EVP_DigestFinal(&ctx,digest,&digest_bytes);
+ EVP_DigestFinal(ctx,digest,&digest_bytes);
+ EVP_MD_CTX_free(ctx);
digest_bits_ = digest_bytes*8;
digest_name = digestToUse;
hexdigest = bin2hex(digest,digest_bits_/8);
diff --git a/win32/affconfig.h b/win32/affconfig.h
index 65ac991..8318c33 100644
--- a/win32/affconfig.h
+++ b/win32/affconfig.h
@@ -1,6 +1,6 @@
#include <windows.h>
-#define PACKAGE_VERSION "3.7.8"
+#define PACKAGE_VERSION "3.7.10"
#undef USE_LIBEWF
#undef USE_QEMU
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/forensics/afflib.git
More information about the forensics-changes
mailing list