diff options
author | Miloslav Trmač <mitr@redhat.com> | 2010-10-05 17:22:15 +0200 |
---|---|---|
committer | Miloslav Trmač <mitr@redhat.com> | 2010-10-05 17:22:15 +0200 |
commit | 1aab511f2b436ceee221233ba36c0e5a38311b82 (patch) | |
tree | c76d5d3cd9a0e25963800ec371b2876574b7c6d1 | |
parent | e007836479e345b8cb86b7a0a0b5c8995a471966 (diff) | |
download | ncrypto-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.c | 16 |
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 |