|
|
@@ -207,7 +207,9 @@ __archive_nettle_md5final(archive_md5_ctx *ctx, void *md)
|
|
|
static int
|
|
|
__archive_openssl_md5init(archive_md5_ctx *ctx)
|
|
|
{
|
|
|
- EVP_DigestInit(ctx, EVP_md5());
|
|
|
+ if ((*ctx = EVP_MD_CTX_new()) == NULL)
|
|
|
+ return (ARCHIVE_FAILED);
|
|
|
+ EVP_DigestInit(*ctx, EVP_md5());
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -215,7 +217,7 @@ static int
|
|
|
__archive_openssl_md5update(archive_md5_ctx *ctx, const void *indata,
|
|
|
size_t insize)
|
|
|
{
|
|
|
- EVP_DigestUpdate(ctx, indata, insize);
|
|
|
+ EVP_DigestUpdate(*ctx, indata, insize);
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -226,8 +228,11 @@ __archive_openssl_md5final(archive_md5_ctx *ctx, void *md)
|
|
|
* this is meant to cope with that. Real fix is probably to fix
|
|
|
* archive_write_set_format_xar.c
|
|
|
*/
|
|
|
- if (ctx->digest)
|
|
|
- EVP_DigestFinal(ctx, md, NULL);
|
|
|
+ if (*ctx) {
|
|
|
+ EVP_DigestFinal(*ctx, md, NULL);
|
|
|
+ EVP_MD_CTX_free(*ctx);
|
|
|
+ *ctx = NULL;
|
|
|
+ }
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -359,7 +364,9 @@ __archive_nettle_ripemd160final(archive_rmd160_ctx *ctx, void *md)
|
|
|
static int
|
|
|
__archive_openssl_ripemd160init(archive_rmd160_ctx *ctx)
|
|
|
{
|
|
|
- EVP_DigestInit(ctx, EVP_ripemd160());
|
|
|
+ if ((*ctx = EVP_MD_CTX_new()) == NULL)
|
|
|
+ return (ARCHIVE_FAILED);
|
|
|
+ EVP_DigestInit(*ctx, EVP_ripemd160());
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -367,14 +374,18 @@ static int
|
|
|
__archive_openssl_ripemd160update(archive_rmd160_ctx *ctx, const void *indata,
|
|
|
size_t insize)
|
|
|
{
|
|
|
- EVP_DigestUpdate(ctx, indata, insize);
|
|
|
+ EVP_DigestUpdate(*ctx, indata, insize);
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
__archive_openssl_ripemd160final(archive_rmd160_ctx *ctx, void *md)
|
|
|
{
|
|
|
- EVP_DigestFinal(ctx, md, NULL);
|
|
|
+ if (*ctx) {
|
|
|
+ EVP_DigestFinal(*ctx, md, NULL);
|
|
|
+ EVP_MD_CTX_free(*ctx);
|
|
|
+ *ctx = NULL;
|
|
|
+ }
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -509,7 +520,9 @@ __archive_nettle_sha1final(archive_sha1_ctx *ctx, void *md)
|
|
|
static int
|
|
|
__archive_openssl_sha1init(archive_sha1_ctx *ctx)
|
|
|
{
|
|
|
- EVP_DigestInit(ctx, EVP_sha1());
|
|
|
+ if ((*ctx = EVP_MD_CTX_new()) == NULL)
|
|
|
+ return (ARCHIVE_FAILED);
|
|
|
+ EVP_DigestInit(*ctx, EVP_sha1());
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -517,7 +530,7 @@ static int
|
|
|
__archive_openssl_sha1update(archive_sha1_ctx *ctx, const void *indata,
|
|
|
size_t insize)
|
|
|
{
|
|
|
- EVP_DigestUpdate(ctx, indata, insize);
|
|
|
+ EVP_DigestUpdate(*ctx, indata, insize);
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -528,8 +541,11 @@ __archive_openssl_sha1final(archive_sha1_ctx *ctx, void *md)
|
|
|
* this is meant to cope with that. Real fix is probably to fix
|
|
|
* archive_write_set_format_xar.c
|
|
|
*/
|
|
|
- if (ctx->digest)
|
|
|
- EVP_DigestFinal(ctx, md, NULL);
|
|
|
+ if (*ctx) {
|
|
|
+ EVP_DigestFinal(*ctx, md, NULL);
|
|
|
+ EVP_MD_CTX_free(*ctx);
|
|
|
+ *ctx = NULL;
|
|
|
+ }
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -733,7 +749,9 @@ __archive_nettle_sha256final(archive_sha256_ctx *ctx, void *md)
|
|
|
static int
|
|
|
__archive_openssl_sha256init(archive_sha256_ctx *ctx)
|
|
|
{
|
|
|
- EVP_DigestInit(ctx, EVP_sha256());
|
|
|
+ if ((*ctx = EVP_MD_CTX_new()) == NULL)
|
|
|
+ return (ARCHIVE_FAILED);
|
|
|
+ EVP_DigestInit(*ctx, EVP_sha256());
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -741,14 +759,18 @@ static int
|
|
|
__archive_openssl_sha256update(archive_sha256_ctx *ctx, const void *indata,
|
|
|
size_t insize)
|
|
|
{
|
|
|
- EVP_DigestUpdate(ctx, indata, insize);
|
|
|
+ EVP_DigestUpdate(*ctx, indata, insize);
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
__archive_openssl_sha256final(archive_sha256_ctx *ctx, void *md)
|
|
|
{
|
|
|
- EVP_DigestFinal(ctx, md, NULL);
|
|
|
+ if (*ctx) {
|
|
|
+ EVP_DigestFinal(*ctx, md, NULL);
|
|
|
+ EVP_MD_CTX_free(*ctx);
|
|
|
+ *ctx = NULL;
|
|
|
+ }
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -928,7 +950,9 @@ __archive_nettle_sha384final(archive_sha384_ctx *ctx, void *md)
|
|
|
static int
|
|
|
__archive_openssl_sha384init(archive_sha384_ctx *ctx)
|
|
|
{
|
|
|
- EVP_DigestInit(ctx, EVP_sha384());
|
|
|
+ if ((*ctx = EVP_MD_CTX_new()) == NULL)
|
|
|
+ return (ARCHIVE_FAILED);
|
|
|
+ EVP_DigestInit(*ctx, EVP_sha384());
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -936,14 +960,18 @@ static int
|
|
|
__archive_openssl_sha384update(archive_sha384_ctx *ctx, const void *indata,
|
|
|
size_t insize)
|
|
|
{
|
|
|
- EVP_DigestUpdate(ctx, indata, insize);
|
|
|
+ EVP_DigestUpdate(*ctx, indata, insize);
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
__archive_openssl_sha384final(archive_sha384_ctx *ctx, void *md)
|
|
|
{
|
|
|
- EVP_DigestFinal(ctx, md, NULL);
|
|
|
+ if (*ctx) {
|
|
|
+ EVP_DigestFinal(*ctx, md, NULL);
|
|
|
+ EVP_MD_CTX_free(*ctx);
|
|
|
+ *ctx = NULL;
|
|
|
+ }
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -1147,7 +1175,9 @@ __archive_nettle_sha512final(archive_sha512_ctx *ctx, void *md)
|
|
|
static int
|
|
|
__archive_openssl_sha512init(archive_sha512_ctx *ctx)
|
|
|
{
|
|
|
- EVP_DigestInit(ctx, EVP_sha512());
|
|
|
+ if ((*ctx = EVP_MD_CTX_new()) == NULL)
|
|
|
+ return (ARCHIVE_FAILED);
|
|
|
+ EVP_DigestInit(*ctx, EVP_sha512());
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
@@ -1155,14 +1185,18 @@ static int
|
|
|
__archive_openssl_sha512update(archive_sha512_ctx *ctx, const void *indata,
|
|
|
size_t insize)
|
|
|
{
|
|
|
- EVP_DigestUpdate(ctx, indata, insize);
|
|
|
+ EVP_DigestUpdate(*ctx, indata, insize);
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|
|
|
static int
|
|
|
__archive_openssl_sha512final(archive_sha512_ctx *ctx, void *md)
|
|
|
{
|
|
|
- EVP_DigestFinal(ctx, md, NULL);
|
|
|
+ if (*ctx) {
|
|
|
+ EVP_DigestFinal(*ctx, md, NULL);
|
|
|
+ EVP_MD_CTX_free(*ctx);
|
|
|
+ *ctx = NULL;
|
|
|
+ }
|
|
|
return (ARCHIVE_OK);
|
|
|
}
|
|
|
|