diff options
author | mcpowers <none@none> | 2007-12-14 20:19:45 -0800 |
---|---|---|
committer | mcpowers <none@none> | 2007-12-14 20:19:45 -0800 |
commit | f9fbec18f5b458b560ecf45d3db8e8bd56bf6942 (patch) | |
tree | f9e626dd6ba74277192956e941fca51c2cb44a5b /usr/src/lib/pkcs11/pkcs11_softtoken/common/softSignUtil.c | |
parent | cd37da7426f0c49c14ad9a8a07638ca971477566 (diff) | |
download | illumos-gate-f9fbec18f5b458b560ecf45d3db8e8bd56bf6942.tar.gz |
PSARC 2007/446 Elliptic-Curve Cryptography for Solaris
5066901 Offer the PKCS#11 Elliptic Curve based mechanisms in Solaris
6562402 kernel software provider for Elliptic Curve mechanisms
Diffstat (limited to 'usr/src/lib/pkcs11/pkcs11_softtoken/common/softSignUtil.c')
-rw-r--r-- | usr/src/lib/pkcs11/pkcs11_softtoken/common/softSignUtil.c | 36 |
1 files changed, 29 insertions, 7 deletions
diff --git a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSignUtil.c b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSignUtil.c index 3eabed15e0..586dd76fdc 100644 --- a/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSignUtil.c +++ b/usr/src/lib/pkcs11/pkcs11_softtoken/common/softSignUtil.c @@ -19,7 +19,7 @@ * CDDL HEADER END */ /* - * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Copyright 2007 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ @@ -35,6 +35,7 @@ #include "softMAC.h" #include "softRSA.h" #include "softDSA.h" +#include "softEC.h" #include "softCrypt.h" /* @@ -90,6 +91,12 @@ soft_sign_init(soft_session_t *session_p, CK_MECHANISM_PTR pMechanism, return (soft_dsa_sign_verify_init_common(session_p, pMechanism, key_p, B_TRUE)); + case CKM_ECDSA: + case CKM_ECDSA_SHA1: + + return (soft_ecc_sign_verify_init_common(session_p, pMechanism, + key_p, B_TRUE)); + case CKM_DES_MAC_GENERAL: case CKM_DES_MAC: @@ -167,13 +174,12 @@ soft_sign(soft_session_t *session_p, CK_BYTE_PTR pData, if (pSignature != NULL) { /* Pass local buffer to avoid overflow. */ rv = soft_des_sign_verify_common(session_p, pData, - ulDataLen, signature, pulSignatureLen, B_TRUE, - B_FALSE); + ulDataLen, signature, pulSignatureLen, B_TRUE, + B_FALSE); } else { /* Pass NULL, let callee to handle it. */ rv = soft_des_sign_verify_common(session_p, pData, - ulDataLen, NULL, pulSignatureLen, B_TRUE, - B_FALSE); + ulDataLen, NULL, pulSignatureLen, B_TRUE, B_FALSE); } if ((rv == CKR_OK) && (pSignature != NULL)) @@ -206,6 +212,16 @@ soft_sign(soft_session_t *session_p, CK_BYTE_PTR pData, return (soft_dsa_digest_sign_common(session_p, pData, ulDataLen, pSignature, pulSignatureLen, B_FALSE)); + case CKM_ECDSA: + + return (soft_ecc_sign(session_p, pData, ulDataLen, + pSignature, pulSignatureLen)); + + case CKM_ECDSA_SHA1: + + return (soft_ecc_digest_sign_common(session_p, pData, ulDataLen, + pSignature, pulSignatureLen, B_FALSE)); + default: return (CKR_MECHANISM_INVALID); } @@ -267,6 +283,7 @@ soft_sign_update(soft_session_t *session_p, CK_BYTE_PTR pPart, * signing. */ case CKM_DSA_SHA1: + case CKM_ECDSA_SHA1: return (soft_digest_update(session_p, pPart, ulPartLen)); @@ -338,11 +355,11 @@ soft_sign_final(soft_session_t *session_p, CK_BYTE_PTR pSignature, if (pSignature != NULL) { /* Pass local buffer to avoid overflow. */ rv = soft_des_sign_verify_common(session_p, NULL, 0, - signature, pulSignatureLen, B_TRUE, B_TRUE); + signature, pulSignatureLen, B_TRUE, B_TRUE); } else { /* Pass NULL, let callee to handle it. */ rv = soft_des_sign_verify_common(session_p, NULL, 0, - NULL, pulSignatureLen, B_TRUE, B_TRUE); + NULL, pulSignatureLen, B_TRUE, B_TRUE); } if ((rv == CKR_OK) && (pSignature != NULL)) @@ -364,6 +381,11 @@ soft_sign_final(soft_session_t *session_p, CK_BYTE_PTR pSignature, return (soft_dsa_digest_sign_common(session_p, NULL, 0, pSignature, pulSignatureLen, B_TRUE)); + case CKM_ECDSA_SHA1: + + return (soft_ecc_digest_sign_common(session_p, NULL, 0, + pSignature, pulSignatureLen, B_TRUE)); + default: /* PKCS11: The mechanism only supports single-part operation. */ return (CKR_MECHANISM_INVALID); |