[Ttssh2-commit] [7791] EVP_MD_CTX 構造体の使用をポインタ化した。

アーカイブの一覧に戻る
scmno****@osdn***** scmno****@osdn*****
2019年 6月 22日 (土) 20:13:50 JST


Revision: 7791
          https://osdn.net/projects/ttssh2/scm/svn/commits/7791
Author:   yutakapon
Date:     2019-06-22 20:13:50 +0900 (Sat, 22 Jun 2019)
Log Message:
-----------
EVP_MD_CTX  構造体の使用をポインタ化した。
チケット #36876 

Ticket Links:
------------
    https://osdn.net/projects/ttssh2/tracker/detail/36876

Modified Paths:
--------------
    branches/openssl_1_1_1_v2/ttssh2/ttxssh/kex.c
    branches/openssl_1_1_1_v2/ttssh2/ttxssh/key.c
    branches/openssl_1_1_1_v2/ttssh2/ttxssh/keyfiles.c

-------------- next part --------------
Modified: branches/openssl_1_1_1_v2/ttssh2/ttxssh/kex.c
===================================================================
--- branches/openssl_1_1_1_v2/ttssh2/ttxssh/kex.c	2019-06-22 09:40:40 UTC (rev 7790)
+++ branches/openssl_1_1_1_v2/ttssh2/ttxssh/kex.c	2019-06-22 11:13:50 UTC (rev 7791)
@@ -286,8 +286,13 @@
 {
 	buffer_t *b;
 	static unsigned char digest[EVP_MAX_MD_SIZE];
-	EVP_MD_CTX md;
+	EVP_MD_CTX *md = NULL;
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	md = EVP_MD_CTX_new();
+	if (md == NULL)
+		goto error;
+
 	b = buffer_init();
 	buffer_put_string(b, client_version_string, strlen(client_version_string));
 	buffer_put_string(b, server_version_string, strlen(server_version_string));
@@ -308,9 +313,9 @@
 	// yutaka
 	//debug_print(38, buffer_ptr(b), buffer_len(b));
 
-	EVP_DigestInit(&md, evp_md);
-	EVP_DigestUpdate(&md, buffer_ptr(b), buffer_len(b));
-	EVP_DigestFinal(&md, digest, NULL);
+	EVP_DigestInit(md, evp_md);
+	EVP_DigestUpdate(md, buffer_ptr(b), buffer_len(b));
+	EVP_DigestFinal(md, digest, NULL);
 
 	buffer_free(b);
 
@@ -318,6 +323,10 @@
 
 	*hashlen = EVP_MD_size(evp_md);
 
+error:
+	if (md)
+		EVP_MD_CTX_free(md);
+
 	return digest;
 }
 
@@ -341,8 +350,13 @@
 {
 	buffer_t *b;
 	static unsigned char digest[EVP_MAX_MD_SIZE];
-	EVP_MD_CTX md;
+	EVP_MD_CTX *md = NULL;
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	md = EVP_MD_CTX_new();
+	if (md == NULL)
+		goto error;
+
 	b = buffer_init();
 	buffer_put_string(b, client_version_string, strlen(client_version_string));
 	buffer_put_string(b, server_version_string, strlen(server_version_string));
@@ -373,9 +387,9 @@
 	// yutaka
 	//debug_print(38, buffer_ptr(b), buffer_len(b));
 
-	EVP_DigestInit(&md, evp_md);
-	EVP_DigestUpdate(&md, buffer_ptr(b), buffer_len(b));
-	EVP_DigestFinal(&md, digest, NULL);
+	EVP_DigestInit(md, evp_md);
+	EVP_DigestUpdate(md, buffer_ptr(b), buffer_len(b));
+	EVP_DigestFinal(md, digest, NULL);
 
 	buffer_free(b);
 
@@ -383,6 +397,10 @@
 
 	*hashlen = EVP_MD_size(evp_md);
 
+error:
+	if (md)
+		EVP_MD_CTX_free(md);
+
 	return digest;
 }
 
@@ -401,8 +419,13 @@
 {
 	buffer_t *b;
 	static unsigned char digest[EVP_MAX_MD_SIZE];
-	EVP_MD_CTX md;
+	EVP_MD_CTX *md = NULL;
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	md = EVP_MD_CTX_new();
+	if (md == NULL)
+		goto error;
+
 	b = buffer_init();
 	buffer_put_string(b, client_version_string, strlen(client_version_string));
 	buffer_put_string(b, server_version_string, strlen(server_version_string));
@@ -424,9 +447,9 @@
 	// yutaka
 	//debug_print(38, buffer_ptr(b), buffer_len(b));
 
-	EVP_DigestInit(&md, evp_md);
-	EVP_DigestUpdate(&md, buffer_ptr(b), buffer_len(b));
-	EVP_DigestFinal(&md, digest, NULL);
+	EVP_DigestInit(md, evp_md);
+	EVP_DigestUpdate(md, buffer_ptr(b), buffer_len(b));
+	EVP_DigestFinal(md, digest, NULL);
 
 	buffer_free(b);
 
@@ -434,6 +457,10 @@
 
 	*hashlen = EVP_MD_size(evp_md);
 
+error:
+	if (md)
+		EVP_MD_CTX_free(md);
+
 	return digest;
 }
 
@@ -466,12 +493,17 @@
                           const EVP_MD *evp_md)
 {
 	buffer_t *b;
-	EVP_MD_CTX md;
+	EVP_MD_CTX *md = NULL;
 	char c = id;
 	int have;
 	int mdsz = EVP_MD_size(evp_md);
 	u_char *digest = malloc(roundup(need, mdsz));
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	md = EVP_MD_CTX_new();
+	if (md == NULL)
+		goto skip;
+
 	if (digest == NULL)
 		goto skip;
 
@@ -482,12 +514,12 @@
 	buffer_put_bignum2(b, shared_secret);
 
 	/* K1 = HASH(K || H || "A" || session_id) */
-	EVP_DigestInit(&md, evp_md);
-	EVP_DigestUpdate(&md, buffer_ptr(b), buffer_len(b));
-	EVP_DigestUpdate(&md, hash, mdsz);
-	EVP_DigestUpdate(&md, &c, 1);
-	EVP_DigestUpdate(&md, session_id, session_id_len);
-	EVP_DigestFinal(&md, digest, NULL);
+	EVP_DigestInit(md, evp_md);
+	EVP_DigestUpdate(md, buffer_ptr(b), buffer_len(b));
+	EVP_DigestUpdate(md, hash, mdsz);
+	EVP_DigestUpdate(md, &c, 1);
+	EVP_DigestUpdate(md, session_id, session_id_len);
+	EVP_DigestFinal(md, digest, NULL);
 
 	/*
 	 * expand key:
@@ -495,15 +527,18 @@
 	 * Key = K1 || K2 || ... || Kn
 	 */
 	for (have = mdsz; need > have; have += mdsz) {
-		EVP_DigestInit(&md, evp_md);
-		EVP_DigestUpdate(&md, buffer_ptr(b), buffer_len(b));
-		EVP_DigestUpdate(&md, hash, mdsz);
-		EVP_DigestUpdate(&md, digest, have);
-		EVP_DigestFinal(&md, digest + have, NULL);
+		EVP_DigestInit(md, evp_md);
+		EVP_DigestUpdate(md, buffer_ptr(b), buffer_len(b));
+		EVP_DigestUpdate(md, hash, mdsz);
+		EVP_DigestUpdate(md, digest, have);
+		EVP_DigestFinal(md, digest + have, NULL);
 	}
 	buffer_free(b);
 
 skip:;
+	if (md)
+		EVP_MD_CTX_free(md);
+
 	return digest;
 }
 

Modified: branches/openssl_1_1_1_v2/ttssh2/ttxssh/key.c
===================================================================
--- branches/openssl_1_1_1_v2/ttssh2/ttxssh/key.c	2019-06-22 09:40:40 UTC (rev 7790)
+++ branches/openssl_1_1_1_v2/ttssh2/ttxssh/key.c	2019-06-22 11:13:50 UTC (rev 7791)
@@ -87,16 +87,24 @@
 {
 	DSA_SIG *sig;
 	const EVP_MD *evp_md = EVP_sha1();
-	EVP_MD_CTX md;
+	EVP_MD_CTX *md = NULL;
 	unsigned char digest[EVP_MAX_MD_SIZE], *sigblob;
 	unsigned int len, dlen;
-	int ret;
+	int ret = -1;
 	char *ptr;
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	md = EVP_MD_CTX_new();
+	if (md == NULL) {
+		ret = -1;
+		goto error;
+	}
+
 	OpenSSL_add_all_digests();
 
 	if (key == NULL) {
-		return -2;
+		ret = -2;
+		goto error;
 	}
 
 	ptr = signature;
@@ -110,7 +118,8 @@
 		len = get_uint32_MSBfirst(ptr);
 		ptr += 4;
 		if (strncmp("ssh-dss", ptr, len) != 0) {
-			return -3;
+			ret = -3;
+			goto error;
 		}
 		ptr += len;
 	}
@@ -122,16 +131,23 @@
 	ptr += len;
 
 	if (len != SIGBLOB_LEN) {
-		return -4;
+		ret = -4;
+		goto error;
 	}
 
 	/* parse signature */
-	if ((sig = DSA_SIG_new()) == NULL)
-		return -5;
-	if ((sig->r = BN_new()) == NULL)
-		return -6;
-	if ((sig->s = BN_new()) == NULL)
-		return -7;
+	if ((sig = DSA_SIG_new()) == NULL) {
+		ret = -5;
+		goto error;
+	}
+	if ((sig->r = BN_new()) == NULL) {
+		ret = -6;
+		goto error;
+	}
+	if ((sig->s = BN_new()) == NULL) {
+		ret = -7;
+		goto error;
+	}
 	BN_bin2bn(sigblob, INTBLOB_LEN, sig->r);
 	BN_bin2bn(sigblob+ INTBLOB_LEN, INTBLOB_LEN, sig->s);
 
@@ -145,6 +161,10 @@
 
 	DSA_SIG_free(sig);
 
+error:
+	if (md)
+		EVP_MD_CTX_free(md);
+
 	return ret;
 }
 
@@ -250,21 +270,30 @@
                    u_char *data, u_int datalen)
 {
 	const EVP_MD *evp_md;
-	EVP_MD_CTX md;
+	EVP_MD_CTX *md = NULL;
 	//	char *ktype;
 	u_char digest[EVP_MAX_MD_SIZE], *sigblob;
 	u_int len, dlen, modlen;
 //	int rlen, ret, nid;
-	int ret, nid;
+	int ret = -1, nid;
 	char *ptr;
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	md = EVP_MD_CTX_new();
+	if (md == NULL) {
+		ret = -1;
+		goto error;
+	}
+
 	OpenSSL_add_all_digests();
 
 	if (key == NULL) {
-		return -2;
+		ret = -2;
+		goto error;
 	}
 	if (BN_num_bits(key->n) < SSH_RSA_MINIMUM_MODULUS_SIZE) {
-		return -3;
+		ret = -3;
+		goto error;
 	}
 	//debug_print(41, signature, signaturelen);
 	ptr = signature;
@@ -273,7 +302,8 @@
 	len = get_uint32_MSBfirst(ptr);
 	ptr += 4;
 	if (strncmp("ssh-rsa", ptr, len) != 0) {
-		return -4;
+		ret = -4;
+		goto error;
 	}
 	ptr += len;
 
@@ -292,7 +322,8 @@
 	/* RSA_verify expects a signature of RSA_size */
 	modlen = RSA_size(key);
 	if (len > modlen) {
-		return -5;
+		ret = -5;
+		goto error;
 
 	} else if (len < modlen) {
 		u_int diff = modlen - len;
@@ -307,7 +338,8 @@
 	nid = NID_sha1;
 	if ((evp_md = EVP_get_digestbynid(nid)) == NULL) {
 		//error("ssh_rsa_verify: EVP_get_digestbynid %d failed", nid);
-		return -6;
+		ret = -6;
+		goto error;
 	}
 	EVP_DigestInit(&md, evp_md);
 	EVP_DigestUpdate(&md, data, datalen);
@@ -320,6 +352,10 @@
 	//free(sigblob);
 	//debug("ssh_rsa_verify: signature %scorrect", (ret==0) ? "in" : "");
 
+error:
+	if (md)
+		EVP_MD_CTX_free(md);
+
 	return ret;
 }
 
@@ -329,16 +365,24 @@
 {
 	ECDSA_SIG *sig;
 	const EVP_MD *evp_md;
-	EVP_MD_CTX md;
+	EVP_MD_CTX *md = NULL;
 	unsigned char digest[EVP_MAX_MD_SIZE], *sigblob;
 	unsigned int len, dlen;
-	int ret, nid = NID_undef;
+	int ret = -1, nid = NID_undef;
 	char *ptr;
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	md = EVP_MD_CTX_new();
+	if (md == NULL) {
+		ret = -1;
+		goto error;
+	}
+
 	OpenSSL_add_all_digests();
 
 	if (key == NULL) {
-		return -2;
+		ret = -2;
+		goto error;
 	}
 
 	ptr = signature;
@@ -346,7 +390,8 @@
 	len = get_uint32_MSBfirst(ptr);
 	ptr += 4;
 	if (strncmp(get_ssh_keytype_name(keytype), ptr, len) != 0) {
-		return -3;
+		ret = -3;
+		goto error;
 	}
 	ptr += len;
 
@@ -356,23 +401,31 @@
 	ptr += len;
 
 	/* parse signature */
-	if ((sig = ECDSA_SIG_new()) == NULL)
-		return -4;
-	if ((sig->r = BN_new()) == NULL)
-		return -5;
-	if ((sig->s = BN_new()) == NULL)
-		return -6;
+	if ((sig = ECDSA_SIG_new()) == NULL) {
+		ret = -4;
+		goto error;
+	}
+	if ((sig->r = BN_new()) == NULL) {
+		ret = -5;
+		goto error;
+	}
+	if ((sig->s = BN_new()) == NULL) {
+		ret = -6;
+		goto error;
+	}
 
 	buffer_get_bignum2(&sigblob, sig->r);
 	buffer_get_bignum2(&sigblob, sig->s);
 	if (sigblob != ptr) {
-		return -7;
+		ret = -7;
+		goto error;
 	}
 
 	/* hash the data */
 	nid = keytype_to_hash_nid(keytype);
 	if ((evp_md = EVP_get_digestbynid(nid)) == NULL) {
-		return -8;
+		ret = -8;
+		goto error;
 	}
 	EVP_DigestInit(&md, evp_md);
 	EVP_DigestUpdate(&md, data, datalen);
@@ -383,6 +436,10 @@
 
 	ECDSA_SIG_free(sig);
 
+error:
+	if (md)
+		EVP_MD_CTX_free(md);
+
 	return ret;
 }
 
@@ -603,7 +660,7 @@
 char* key_fingerprint_raw(Key *k, digest_algorithm dgst_alg, int *dgst_raw_length)
 {
 	const EVP_MD *md = NULL;
-	EVP_MD_CTX ctx;
+	EVP_MD_CTX *ctx = NULL;
 	char *blob = NULL;
 	char *retval = NULL;
 	int len = 0;
@@ -610,6 +667,12 @@
 	int nlen, elen;
 	RSA *rsa;
 
+	/********* OPENSSL1.1.1 NOTEST *********/
+	ctx = EVP_MD_CTX_new();
+	if (ctx == NULL) {
+		goto error;
+	}
+
 	*dgst_raw_length = 0;
 
 	switch (dgst_alg) {
@@ -664,14 +727,19 @@
 		if (retval == NULL) {
 			// TODO:
 		}
-		EVP_DigestInit(&ctx, md);
-		EVP_DigestUpdate(&ctx, blob, len);
-		EVP_DigestFinal(&ctx, retval, dgst_raw_length);
+		EVP_DigestInit(ctx, md);
+		EVP_DigestUpdate(ctx, blob, len);
+		EVP_DigestFinal(ctx, retval, dgst_raw_length);
 		SecureZeroMemory(blob, len);
 		free(blob);
 	} else {
 		//fatal("key_fingerprint_raw: blob is null");
 	}
+
+error:
+	if (ctx)
+		EVP_MD_CTX_free(ctx);
+
 	return retval;
 }
 
@@ -1461,16 +1529,23 @@
 	case KEY_RSA: // RSA
 	{
 		const EVP_MD *evp_md = EVP_sha1();
-		EVP_MD_CTX md;
+		EVP_MD_CTX *md = NULL;
 		u_char digest[EVP_MAX_MD_SIZE], *sig;
 		u_int slen, dlen, len;
 		int ok, nid = NID_sha1;
 
+		/********* OPENSSL1.1.1 NOTEST *********/
+		md = EVP_MD_CTX_new();
+		if (md == NULL)
+			goto error;
+
 		// \x83_\x83C\x83W\x83F\x83X\x83g\x92l\x82̌v\x8EZ
-		EVP_DigestInit(&md, evp_md);
-		EVP_DigestUpdate(&md, data, datalen);
-		EVP_DigestFinal(&md, digest, &dlen);
+		EVP_DigestInit(md, evp_md);
+		EVP_DigestUpdate(md, data, datalen);
+		EVP_DigestFinal(md, digest, &dlen);
 
+		EVP_MD_CTX_free(md);
+
 		slen = RSA_size(keypair->rsa);
 		sig = malloc(slen);
 		if (sig == NULL)
@@ -1519,15 +1594,22 @@
 	{
 		DSA_SIG *sig;
 		const EVP_MD *evp_md = EVP_sha1();
-		EVP_MD_CTX md;
+		EVP_MD_CTX *md = NULL;
 		u_char digest[EVP_MAX_MD_SIZE], sigblob[SIGBLOB_LEN];
 		u_int rlen, slen, len, dlen;
 
+		/********* OPENSSL1.1.1 NOTEST *********/
+		md = EVP_MD_CTX_new();
+		if (md == NULL)
+			goto error;
+
 		// \x83_\x83C\x83W\x83F\x83X\x83g\x82̌v\x8EZ
-		EVP_DigestInit(&md, evp_md);
-		EVP_DigestUpdate(&md, data, datalen);
-		EVP_DigestFinal(&md, digest, &dlen);
+		EVP_DigestInit(md, evp_md);
+		EVP_DigestUpdate(md, data, datalen);
+		EVP_DigestFinal(md, digest, &dlen);
 
+		EVP_MD_CTX_free(md);
+
 		// DSA\x93d\x8Eq\x8F\x90\x96\xBC\x82\xF0\x8Cv\x8EZ
 		sig = DSA_do_sign(digest, dlen, keypair->dsa);
 		SecureZeroMemory(digest, sizeof(digest));
@@ -1569,7 +1651,7 @@
 	{
 		ECDSA_SIG *sig;
 		const EVP_MD *evp_md;
-		EVP_MD_CTX md;
+		EVP_MD_CTX *md = NULL;
 		u_char digest[EVP_MAX_MD_SIZE];
 		u_int len, dlen, nid;
 		buffer_t *buf2 = NULL;
@@ -1578,10 +1660,18 @@
 		if ((evp_md = EVP_get_digestbynid(nid)) == NULL) {
 			goto error;
 		}
-		EVP_DigestInit(&md, evp_md);
-		EVP_DigestUpdate(&md, data, datalen);
-		EVP_DigestFinal(&md, digest, &dlen);
 
+		/********* OPENSSL1.1.1 NOTEST *********/
+		md = EVP_MD_CTX_new();
+		if (md == NULL)
+			goto error;
+
+		EVP_DigestInit(md, evp_md);
+		EVP_DigestUpdate(md, data, datalen);
+		EVP_DigestFinal(md, digest, &dlen);
+
+		EVP_MD_CTX_free(md);
+
 		sig = ECDSA_do_sign(digest, dlen, keypair->ecdsa);
 		SecureZeroMemory(digest, sizeof(digest));
 

Modified: branches/openssl_1_1_1_v2/ttssh2/ttxssh/keyfiles.c
===================================================================
--- branches/openssl_1_1_1_v2/ttssh2/ttxssh/keyfiles.c	2019-06-22 09:40:40 UTC (rev 7790)
+++ branches/openssl_1_1_1_v2/ttssh2/ttxssh/keyfiles.c	2019-06-22 11:13:50 UTC (rev 7791)
@@ -922,25 +922,36 @@
 	// decrypt prikey with aes256-cbc
 	if (strcmp(encname, "aes256-cbc") == 0) {
 		const EVP_MD *md = EVP_sha1();
-		EVP_MD_CTX ctx;
+		EVP_MD_CTX *ctx = NULL;
 		unsigned char key[40], iv[32];
 		EVP_CIPHER_CTX *cipher_ctx = NULL;
 		char *decrypted = NULL;
 
 		/********* OPENSSL1.1.1 NOTEST *********/
+		ctx = EVP_MD_CTX_new();
+		if (ctx == NULL) {
+			goto error;
+		}
+
+		/********* OPENSSL1.1.1 NOTEST *********/
 		cipher_ctx = EVP_CIPHER_CTX_new();
-		/*** TODO: OPENSSL1.1.1 ERROR CHECK ***/
+		if (ctx == NULL) {
+			EVP_MD_CTX_free(ctx);
+			goto error;
+		}
 
-		EVP_DigestInit(&ctx, md);
-		EVP_DigestUpdate(&ctx, "\0\0\0\0", 4);
-		EVP_DigestUpdate(&ctx, passphrase, strlen(passphrase));
-		EVP_DigestFinal(&ctx, key, &len);
+		EVP_DigestInit(ctx, md);
+		EVP_DigestUpdate(ctx, "\0\0\0\0", 4);
+		EVP_DigestUpdate(ctx, passphrase, strlen(passphrase));
+		EVP_DigestFinal(ctx, key, &len);
 
-		EVP_DigestInit(&ctx, md);
-		EVP_DigestUpdate(&ctx, "\0\0\0\1", 4);
-		EVP_DigestUpdate(&ctx, passphrase, strlen(passphrase));
-		EVP_DigestFinal(&ctx, key + 20, &len);
+		EVP_DigestInit(ctx, md);
+		EVP_DigestUpdate(ctx, "\0\0\0\1", 4);
+		EVP_DigestUpdate(ctx, passphrase, strlen(passphrase));
+		EVP_DigestFinal(ctx, key + 20, &len);
 
+		EVP_MD_CTX_free(ctx);
+
 		memset(iv, 0, sizeof(iv));
 
 		/********* OPENSSL1.1.1 NOTEST *********/
@@ -988,23 +999,41 @@
 		unsigned char mackey[20];
 		char header[] = "putty-private-key-file-mac-key";
 		const EVP_MD *md = EVP_sha1();
-		EVP_MD_CTX ctx;
+		EVP_MD_CTX *ctx = NULL;
 
-		EVP_DigestInit(&ctx, md);
-		EVP_DigestUpdate(&ctx, header, sizeof(header)-1);
+		/********* OPENSSL1.1.1 NOTEST *********/
+		ctx = EVP_MD_CTX_new();
+		if (ctx == NULL) {
+			goto error;
+		}
+
+		EVP_DigestInit(ctx, md);
+		EVP_DigestUpdate(ctx, header, sizeof(header)-1);
 		len = strlen(passphrase);
 		if (strcmp(encname, "aes256-cbc") == 0 && len > 0) {
-			EVP_DigestUpdate(&ctx, passphrase, len);
+			EVP_DigestUpdate(ctx, passphrase, len);
 		}
-		EVP_DigestFinal(&ctx, mackey, &len);
+		EVP_DigestFinal(ctx, mackey, &len);
+		EVP_MD_CTX_free(ctx);
 
 		//hmac_sha1_simple(mackey, sizeof(mackey), macdata->buf, macdata->len, binary);
 		{
-		EVP_MD_CTX ctx[2];
+		EVP_MD_CTX *ctx[2] = {0, 0};
 		unsigned char intermediate[20];
 		unsigned char foo[64];
 		int i;
 
+		/********* OPENSSL1.1.1 NOTEST *********/
+		ctx[0] = EVP_MD_CTX_new();
+		if (ctx[0] == NULL) {
+			goto error;
+		}
+		ctx[1] = EVP_MD_CTX_new();
+		if (ctx[1] == NULL) {
+			EVP_MD_CTX_free(ctx[0]);
+			goto error;
+		}
+
 		memset(foo, 0x36, sizeof(foo));
 		for (i = 0; i < sizeof(mackey) && i < sizeof(foo); i++) {
 			foo[i] ^= mackey[i];
@@ -1026,6 +1055,9 @@
 
 		EVP_DigestUpdate(&ctx[1], intermediate, sizeof(intermediate));
 		EVP_DigestFinal(&ctx[1], binary, &len);
+
+		EVP_MD_CTX_free(ctx[0]);
+		EVP_MD_CTX_free(ctx[1]);
 		}
 
 		memset(mackey, 0, sizeof(mackey));


Ttssh2-commit メーリングリストの案内
アーカイブの一覧に戻る