Commit eacd95c4 authored by Geoff Simmons's avatar Geoff Simmons

Redeuce code repetition for exit on failure from .encrypt().

parent fe3cd1b4
...@@ -466,8 +466,7 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric, ...@@ -466,8 +466,7 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
if (plaintext == NULL) { if (plaintext == NULL) {
VERRNOMEM(ctx, "Allocating padded plaintext in " VERRNOMEM(ctx, "Allocating padded plaintext in "
"%s.encrypt()", symmetric->vcl_name); "%s.encrypt()", symmetric->vcl_name);
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
} }
} }
else { else {
...@@ -477,21 +476,17 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric, ...@@ -477,21 +476,17 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
if ((ciphertext->priv = WS_Alloc(ctx->ws, len)) == NULL) { if ((ciphertext->priv = WS_Alloc(ctx->ws, len)) == NULL) {
VERRNOMEM(ctx, "Allocating ciphertext result in %s.encrypt", VERRNOMEM(ctx, "Allocating ciphertext result in %s.encrypt",
symmetric->vcl_name); symmetric->vcl_name);
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
} }
hd = get_symmetric_hd(ctx, symmetric, "encrypt"); hd = get_symmetric_hd(ctx, symmetric, "encrypt");
if (hd == NULL) { if (hd == NULL)
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
}
if (need_iv[symmetric->mode]) { if (need_iv[symmetric->mode]) {
if (iv == NULL) { if (iv == NULL) {
VERR(ctx, "Required initialization vector is NULL in " VERR(ctx, "Required initialization vector is NULL in "
"%s.encrypt()", symmetric->vcl_name); "%s.encrypt()", symmetric->vcl_name);
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
} }
assert(iv->len >= 0); assert(iv->len >= 0);
/* A NULL iv of length 0 is permitted. */ /* A NULL iv of length 0 is permitted. */
...@@ -502,16 +497,14 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric, ...@@ -502,16 +497,14 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
VERR(ctx, "Cannot set initialization vector in " VERR(ctx, "Cannot set initialization vector in "
"%s.encrypt(): %s/%s", symmetric->vcl_name, "%s.encrypt(): %s/%s", symmetric->vcl_name,
gcry_strsource(err), gcry_strerror(err)); gcry_strsource(err), gcry_strerror(err));
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
} }
} }
if (need_ctr[symmetric->mode]) { if (need_ctr[symmetric->mode]) {
if (ctr == NULL || ctr->priv == NULL) { if (ctr == NULL || ctr->priv == NULL) {
VERR(ctx, "Required counter vector is NULL in " VERR(ctx, "Required counter vector is NULL in "
"%s.encrypt()", symmetric->vcl_name); "%s.encrypt()", symmetric->vcl_name);
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
} }
assert(ctr->len >= 0); assert(ctr->len >= 0);
if ((err = gcry_cipher_setctr(*hd, ctr->priv, ctr->len)) if ((err = gcry_cipher_setctr(*hd, ctr->priv, ctr->len))
...@@ -519,8 +512,7 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric, ...@@ -519,8 +512,7 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
VERR(ctx, "Cannot set counter vector in %s.encrypt(): " VERR(ctx, "Cannot set counter vector in %s.encrypt(): "
"%s/%s", symmetric->vcl_name, gcry_strsource(err), "%s/%s", symmetric->vcl_name, gcry_strsource(err),
gcry_strerror(err)); gcry_strerror(err));
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
} }
} }
if ((err = gcry_cipher_encrypt(*hd, ciphertext->priv, len, plaintext, if ((err = gcry_cipher_encrypt(*hd, ciphertext->priv, len, plaintext,
...@@ -528,12 +520,15 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric, ...@@ -528,12 +520,15 @@ vmod_symmetric_encrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
!= GPG_ERR_NO_ERROR) { != GPG_ERR_NO_ERROR) {
VERR(ctx, "in %s.encrypt(): %s/%s", symmetric->vcl_name, VERR(ctx, "in %s.encrypt(): %s/%s", symmetric->vcl_name,
gcry_strsource(err), gcry_strerror(err)); gcry_strsource(err), gcry_strerror(err));
WS_Reset(ctx->ws, snap); goto fail;
return NULL;
} }
ciphertext->len = len; ciphertext->len = len;
ciphertext->free = NULL; ciphertext->free = NULL;
return ciphertext; return ciphertext;
fail:
WS_Reset(ctx->ws, snap);
return NULL;
} }
VCL_BLOB VCL_BLOB
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment