summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMiloslav Trmač <mitr@redhat.com>2010-10-05 17:22:15 +0200
committerMiloslav Trmač <mitr@redhat.com>2010-10-05 17:22:15 +0200
commit1aab511f2b436ceee221233ba36c0e5a38311b82 (patch)
treec76d5d3cd9a0e25963800ec371b2876574b7c6d1
parente007836479e345b8cb86b7a0a0b5c8995a471966 (diff)
downloadncrypto-1aab511f2b436ceee221233ba36c0e5a38311b82.tar.gz
ncrypto-1aab511f2b436ceee221233ba36c0e5a38311b82.tar.xz
ncrypto-1aab511f2b436ceee221233ba36c0e5a38311b82.zip
Mark session as finished even on failure, per PKCS#11
-rw-r--r--lib/ncrypto_local.c16
1 files changed, 7 insertions, 9 deletions
diff --git a/lib/ncrypto_local.c b/lib/ncrypto_local.c
index 08a6a18..8c686b7 100644
--- a/lib/ncrypto_local.c
+++ b/lib/ncrypto_local.c
@@ -140,6 +140,7 @@ CK_RV
ncr_digest_final (struct ncr_digest_session *sess, void *dest,
size_t *size_ptr)
{
+ int res;
g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
g_return_val_if_fail (sess->state == NDS_INITIALIZED
@@ -161,17 +162,16 @@ ncr_digest_final (struct ncr_digest_session *sess, void *dest,
g_return_val_if_fail (dest != NULL, CKR_ARGUMENTS_BAD);
- if (EVP_DigestFinal_ex (&sess->ctx, dest, NULL) == 0)
- return ckr_openssl ();
-
+ res = EVP_DigestFinal_ex (&sess->ctx, dest, NULL);
sess->state = NDS_FINISHED;
- return CKR_OK;
+ return res ? CKR_OK : ckr_openssl ();
}
CK_RV
ncr_digest (struct ncr_digest_session *sess, void *dest, size_t *dest_size_ptr,
const void *data, size_t data_size)
{
+ int res;
g_return_val_if_fail (sess != NULL, CKR_SESSION_HANDLE_INVALID);
g_return_val_if_fail (sess->state == NDS_INITIALIZED,
@@ -192,12 +192,10 @@ ncr_digest (struct ncr_digest_session *sess, void *dest, size_t *dest_size_ptr,
g_return_val_if_fail (data != NULL, CKR_ARGUMENTS_BAD);
- if (EVP_DigestUpdate(&sess->ctx, data, data_size) == 0
- || EVP_DigestFinal_ex(&sess->ctx, dest, NULL) == 0)
- return ckr_openssl ();
-
+ res = (EVP_DigestUpdate(&sess->ctx, data, data_size) != 0
+ && EVP_DigestFinal_ex(&sess->ctx, dest, NULL) != 0);
sess->state = NDS_FINISHED;
- return CKR_OK;
+ return res ? CKR_OK : ckr_openssl ();
}
CK_RV