Commit 3f9cbef7 authored by Geoff Simmons's avatar Geoff Simmons

Reduce code repetition in failure exit from decrypt().

parent 44df0ec9
Pipeline #205 skipped
......@@ -472,9 +472,7 @@ vmod_symmetric_decrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
if (iv == NULL) {
VERR(ctx, "Required initialization vector is NULL in "
"%s.decrypt()", symmetric->vcl_name);
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
goto fail;
}
assert(iv->len >= 0);
/* A NULL iv of length 0 is permitted. */
......@@ -485,18 +483,14 @@ vmod_symmetric_decrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
VERR(ctx, "Cannot set initialization vector in "
"%s.decrypt(): %s/%s", symmetric->vcl_name,
gcry_strsource(err), gcry_strerror(err));
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
goto fail;
}
}
if (need_ctr[symmetric->mode]) {
if (ctr == NULL || ctr->priv == NULL) {
VERR(ctx, "Required counter vector is NULL in "
"%s.decrypt()", symmetric->vcl_name);
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
goto fail;
}
assert(ctr->len >= 0);
if ((err = gcry_cipher_setctr(hd, ctr->priv, ctr->len))
......@@ -504,9 +498,7 @@ vmod_symmetric_decrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
VERR(ctx, "Cannot set counter vector in %s.decrypt(): "
"%s/%s", symmetric->vcl_name, gcry_strsource(err),
gcry_strerror(err));
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
goto fail;
}
}
if ((err = gcry_cipher_decrypt(hd, plaintext->priv, ciphertext->len,
......@@ -514,9 +506,7 @@ vmod_symmetric_decrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
!= GPG_ERR_NO_ERROR) {
VERR(ctx, "in %s.decrypt(): %s/%s", symmetric->vcl_name,
gcry_strsource(err), gcry_strerror(err));
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
goto fail;
}
plaintext->len = ciphertext->len;
if (symmetric->padding != NONE) {
......@@ -525,9 +515,7 @@ vmod_symmetric_decrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
"plaintext length %d is not a multiple of block "
"length %d", symmetric->vcl_name, plaintext->len,
symmetric->blocklen);
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
goto fail;
}
plaintext->len =
(unpadlenf[symmetric->padding])(plaintext->priv,
......@@ -536,14 +524,17 @@ vmod_symmetric_decrypt(VRT_CTX, struct vmod_gcrypt_symmetric *symmetric,
if (plaintext->len < 0) {
VERR(ctx, "in %s.decrypt(): incorrect padding",
symmetric->vcl_name);
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
goto fail;
}
}
WS_Release(ctx->ws, plaintext->len);
plaintext->free = NULL;
return plaintext;
fail:
WS_Release(ctx->ws, 0);
WS_Reset(ctx->ws, snap);
return NULL;
}
/* Function random */
......
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