mech_rsa.c revision ab8176c2544f70ca46c1ce370963d426561222b3
/*
* The Initial Developer of the Original Code is International
* Business Machines Corporation. Portions created by IBM
* Corporation are Copyright (C) 2005 International Business
* Machines Corporation. All Rights Reserved.
*
* it under the terms of the Common Public License as published by
* IBM Corporation; either version 1 of the License, or (at your option)
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Common Public License for more details.
*
* You should have received a copy of the Common Public License
* along with this program; if not, a copy can be viewed at
*/
/* (C) COPYRIGHT International Business Machines Corp. 2001, 2002, 2005 */
/*
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#include "tpmtok_int.h"
extern CK_RV
{
return (rc);
}
static CK_RV
{
return (CKR_FUNCTION_FAILED);
} else
if (keyclass != CKO_PUBLIC_KEY) {
return (CKR_FUNCTION_FAILED);
}
return (rc);
}
static CK_RV
return (CKR_FUNCTION_FAILED);
}
else
// this had better be a private key
//
if (keyclass != CKO_PRIVATE_KEY) {
return (CKR_FUNCTION_FAILED);
}
return (rc);
}
static CK_RV
return (CKR_FUNCTION_FAILED);
} else {
}
if (keyclass != CKO_PRIVATE_KEY) {
return (CKR_FUNCTION_FAILED);
}
return (rc);
}
static CK_RV
return (CKR_FUNCTION_FAILED);
}
else
if (keyclass != CKO_PUBLIC_KEY) {
return (CKR_FUNCTION_FAILED);
}
return (rc);
}
/*ARGSUSED*/
{
return (rc);
}
return (CKR_FUNCTION_FAILED);
} else {
}
if (length_only == TRUE) {
return (CKR_OK);
}
if (*out_data_len < modulus_bytes) {
return (CKR_BUFFER_TOO_SMALL);
}
return (rc);
}
/*ARGSUSED*/
{
return (rc);
}
return (CKR_FUNCTION_FAILED);
else
if (in_data_len != modulus_bytes) {
return (CKR_ENCRYPTED_DATA_LEN_RANGE);
}
if (length_only == TRUE) {
return (CKR_OK);
}
if (rc == CKR_DATA_LEN_RANGE) {
return (CKR_ENCRYPTED_DATA_LEN_RANGE);
}
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
}
return (rc);
}
return (CKR_FUNCTION_FAILED);
else
if (length_only == TRUE) {
return (CKR_OK);
}
if (*out_data_len < modulus_bytes) {
return (CKR_BUFFER_TOO_SMALL);
}
return (rc);
}
/*ARGSUSED*/
{
return (rc);
}
return (CKR_FUNCTION_FAILED);
}
else
// check input data length restrictions
//
if (sig_len != modulus_bytes) {
return (CKR_SIGNATURE_LEN_RANGE);
}
// verify is a public key operation --> encrypt
//
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
}
return (rc);
}
return (CKR_FUNCTION_FAILED);
}
else
if (sig_len != modulus_bytes) {
return (CKR_SIGNATURE_LEN_RANGE);
}
if (length_only == TRUE) {
return (CKR_OK);
}
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
}
oid = ber_AlgMd5;
} else {
oid = ber_AlgSha1;
}
goto error;
}
goto error;
goto error;
}
goto error;
sign_mech.ulParameterLen = 0;
goto error;
(void) digest_mgr_cleanup(&digest_ctx);
(void) sign_mgr_cleanup(&sign_ctx);
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
else
&digest_mech);
goto error;
}
}
goto error;
}
return (CKR_OK);
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
}
oid = ber_AlgMd5;
} else {
oid = ber_AlgSha1;
}
goto done;
}
goto done;
}
goto done;
(oid_len + octet_str_len));
goto done;
}
goto done;
}
done:
(void) digest_mgr_cleanup(&digest_ctx);
(void) sign_mgr_cleanup(&verify_ctx);
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
}
else
&digest_mech);
goto error;
}
goto error;
return (CKR_OK);
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
}
oid = ber_AlgMd5;
} else {
oid = ber_AlgSha1;
}
goto done;
}
goto done;
}
goto done;
}
sign_mech.ulParameterLen = 0;
goto done;
}
(void) sign_mgr_cleanup(&sign_ctx);
return (rc);
}
done:
(void) sign_mgr_cleanup(&sign_ctx);
return (rc);
}
{
return (CKR_FUNCTION_FAILED);
}
oid = ber_AlgMd5;
} else {
oid = ber_AlgSha1;
}
goto done;
}
goto done;
}
goto done;
}
goto done;
}
done:
(void) verify_mgr_cleanup(&verify_ctx);
return (rc);
}