| RSA BSAFE Crypto-C |
Cryptographic Components for C |
| Search |
/* $Id: alginfoutil.c,v 1.6 2004/12/03 02:08:34 sparki Exp $ */
/*
* Copyright (C) 1998-2004 RSA Security Inc.
*
* This file shall only be used to demonstrate how to interface to an
* RSA Security Inc. licensed development product.
*
* You have a royalty-free right to use, reproduce and distribute this
* demonstration file, provided that you agree that RSA Security Inc.
* has no warranty, implied or otherwise, or liability for this
* demonstration file (including any modified version). This software
* is provided "as is" without warranties or representations of any
* kind. RSA Security disclaims all conditions and warranties, statutory
* and otherwise, both express and implied, with respect to the software,
* its quality and performance, including but not limited to, all
* implied warranties of merchantability, fitness for a particular
* purpose, title and noninfringement of third party rights. Without
* limiting the foregoing, RSA Security does not warrant that the
* software is error-free or that errors in the product will be
* corrected. You agree that RSA Security shall not be liable for any
* direct, indirect, incidental, special, consequential, punitive or
* other damages whatsoever resulting from your use of this software
* or any modified version.
*
*
*/
#include "alginfoutil.h"
#include "demoutil.h" /* in samples/common/include */
/* This function will take an algorithmFlag that is returned from
* B_DecodeAlgorithmBER and print out what type of KI or AI should
* be used for this algorithm */
void RSA_PrintBERInfo(unsigned int algorithmFlag)
{
RSA_PrintMessage ("The BER Encoding is of type: ");
switch (algorithmFlag) {
case BSAFE_KI_RSAPublicBER:
RSA_PrintMessage ("KI_RSAPublicBER\n");
break;
case BSAFE_KI_PKCS_RSAPrivateBER:
RSA_PrintMessage ("KI_PKCS_RSAPrivateBER\n");
break;
case BSAFE_KI_DSAPublicX957BER:
RSA_PrintMessage ("KI_DSAPublicBER\n");
break;
case BSAFE_KI_DSAPublicBER:
RSA_PrintMessage ("KI_DSAPublicX957BER\n");
break;
case BSAFE_KI_DSAPrivateX957BER:
RSA_PrintMessage ("KI_DSAPrivateBER\n");
break;
case BSAFE_KI_DSAPrivateBER:
RSA_PrintMessage ("KI_DSAPrivateX957BER\n");
break;
case BSAFE_AI_PKCS_RSAPubOrPrivateBER:
RSA_PrintMessage ("AI_PKCS_RSAPublicBER or AI_PKCS_RSAPrivateBER\n");
break;
case BSAFE_AI_PKCS_OAEP_RSAPrivateBER:
RSA_PrintMessage ("AI_PKCS_OAEP_RSAPrivateBER\n");
break;
case BSAFE_AI_PKCS_OAEP_RSAPublicBER:
RSA_PrintMessage ("AI_PKCS_OAEP_RSAPublicBER\n");
break;
case BSAFE_AI_PKCS_OAEP_RSARecodeBER:
RSA_PrintMessage ("AI_PKCS_OAEPRecodeBER\n");
break;
case BSAFE_AI_MD2WithRSAEncryptionBER:
RSA_PrintMessage ("AI_MD2WithRSAEncryptionBER\n");
break;
case BSAFE_AI_MD5WithRSAEncryptionBER:
RSA_PrintMessage ("AI_MD5WithRSAEncryptionBER\n");
break;
case BSAFE_AI_SHA1WithRSAEncryptionBER:
RSA_PrintMessage ("AI_SHA1WithRSAEncryptionBER\n");
break;
case BSAFE_AI_SHA256WithRSAEncryptionBER:
RSA_PrintMessage ("AI_SHA256WithRSAEncryptionBER\n");
break;
case BSAFE_AI_SHA384WithRSAEncryptionBER:
RSA_PrintMessage ("AI_SHA384WithRSAEncryptionBER\n");
break;
case BSAFE_AI_SHA512WithRSAEncryptionBER:
RSA_PrintMessage ("AI_SHA512WithRSAEncryptionBER\n");
break;
case BSAFE_AI_DSAWithSHA1_BER:
RSA_PrintMessage ("AI_DSAWithSHA1_BER\n");
break;
case BSAFE_AI_DHKeyAgreeBER:
RSA_PrintMessage ("AI_DHKeyAgreeBER\n");
break;
case BSAFE_AI_RC4_BER:
RSA_PrintMessage ("AI_RC4_BER\n");
break;
case BSAFE_AI_RC4WithMAC_BER:
RSA_PrintMessage ("AI_RC4WithMAC_BER\n");
break;
case BSAFE_AI_DES_CBCPadBER:
RSA_PrintMessage ("AI_DES_CBCPadBER\n");
break;
case BSAFE_AI_DES_EDE3_CBCPadBER:
RSA_PrintMessage ("AI_DES_EDE3_CBCPadBER\n");
break;
case BSAFE_AI_DESX_CBCPadBER:
RSA_PrintMessage ("AI_DESX_CBCPadBER\n");
break;
case BSAFE_AI_RC2_CBCPadBER:
RSA_PrintMessage ("AI_RC2_CBCPadBER\n");
break;
case BSAFE_AI_RC5_CBCPadBER:
RSA_PrintMessage ("AI_RC5_CBCPadBER\n");
break;
case BSAFE_AI_AES128_CBCPadBER:
RSA_PrintMessage ("AI_AES128_CBCPadBER\n");
break;
case BSAFE_AI_AES192_CBCPadBER:
RSA_PrintMessage ("AI_AES192_CBCPadBER\n");
break;
case BSAFE_AI_AES256_CBCPadBER:
RSA_PrintMessage ("AI_AES256_CBCPadBER\n");
break;
case BSAFE_AI_AES128_ECB_BER:
RSA_PrintMessage ("AI_AES128_ECB_BER\n");
break;
case BSAFE_AI_AES192_ECB_BER:
RSA_PrintMessage ("AI_AES192_ECB_BER\n");
break;
case BSAFE_AI_AES256_ECB_BER:
RSA_PrintMessage ("AI_AES256_ECB_BER\n");
break;
case BSAFE_AI_AES128_CFB_BER:
RSA_PrintMessage ("AI_AES128_CFB_BER\n");
break;
case BSAFE_AI_AES192_CFB_BER:
RSA_PrintMessage ("AI_AES192_CFB_BER\n");
break;
case BSAFE_AI_AES256_CFB_BER:
RSA_PrintMessage ("AI_AES256_CFB_BER\n");
break;
case BSAFE_AI_MD2WithDES_CBCPadBER:
RSA_PrintMessage ("AI_MD2WithDES_CBCPadBER\n");
break;
case BSAFE_AI_MD5WithDES_CBCPadBER:
RSA_PrintMessage ("AI_MD5WithDES_CBCPadBER\n");
break;
case BSAFE_AI_SHA1WithDES_CBCPadBER:
RSA_PrintMessage ("AI_SHA1WithDES_CBCPadBER\n");
break;
case BSAFE_AI_MD2WithRC2_CBCPadBER:
RSA_PrintMessage ("AI_MD2WithRC2_CBCPadBER\n");
break;
case BSAFE_AI_MD5WithRC2_CBCPadBER:
RSA_PrintMessage ("AI_MD5WithRC2_CBCPadBER\n");
break;
case BSAFE_AI_MD5WithXOR_BER:
RSA_PrintMessage ("AI_MD5WithXOR_BER\n");
break;
case BSAFE_AI_MD2_BER:
RSA_PrintMessage ("AI_MD2_BER\n");
break;
case BSAFE_AI_MD5_BER:
RSA_PrintMessage ("AI_MD5_BER\n");
break;
case BSAFE_AI_SHA1_BER:
RSA_PrintMessage ("AI_SHA1_BER\n");
break;
case BSAFE_AI_SHA256_BER:
RSA_PrintMessage ("AI_SHA256_BER\n");
break;
case BSAFE_AI_SHA384_BER:
RSA_PrintMessage ("AI_SHA384_BER\n");
break;
case BSAFE_AI_SHA512_BER:
RSA_PrintMessage ("AI_SHA512_BER\n");
break;
default:
RSA_PrintMessage ("Unknown key or algorithm info type\n");
}
}
/* This function will take an algorithmFlag that is returned from
* B_DecodeAlgorithmBER and set an algorithm object with the proper
* AI. The B_ALGORITHM_OBJ should be already created. */
int RSA_SetAlgorithmObject(B_ALGORITHM_OBJ *algObject,
unsigned int algorithmFlag, ITEM *encodingItem)
{
ITEM BERinfo = {NULL, 0};
BERinfo.len = encodingItem->len;
BERinfo.data = (unsigned char *)T_malloc (BERinfo.len);
T_memcpy (BERinfo.data, encodingItem->data, BERinfo.len);
switch (algorithmFlag) {
case BSAFE_AI_PKCS_RSAPubOrPrivateBER:
/* Ignore this case */
return RSA_DEMO_E_INVALID_PARAMETER;
case BSAFE_AI_PKCS_OAEP_RSAPrivateBER:
return B_SetAlgorithmInfo (*algObject, AI_PKCS_OAEP_RSAPrivateBER, (POINTER)&BERinfo);
case BSAFE_AI_PKCS_OAEP_RSAPublicBER:
return B_SetAlgorithmInfo (*algObject, AI_PKCS_OAEP_RSAPublicBER, (POINTER)&BERinfo);
case BSAFE_AI_PKCS_OAEP_RSARecodeBER:
return B_SetAlgorithmInfo (*algObject, AI_PKCS_OAEPRecodeBER, (POINTER)&BERinfo);;
case BSAFE_AI_MD2WithRSAEncryptionBER:
return B_SetAlgorithmInfo (*algObject, AI_MD2WithRSAEncryptionBER, (POINTER)&BERinfo);
case BSAFE_AI_MD5WithRSAEncryptionBER:
return B_SetAlgorithmInfo (*algObject, AI_MD5WithRSAEncryptionBER, (POINTER)&BERinfo);
case BSAFE_AI_SHA1WithRSAEncryptionBER:
return B_SetAlgorithmInfo (*algObject, AI_SHA1WithRSAEncryptionBER, (POINTER)&BERinfo);
case BSAFE_AI_SHA256WithRSAEncryptionBER:
return B_SetAlgorithmInfo (*algObject, AI_SHA256WithRSAEncryptionBER, (POINTER)&BERinfo);
case BSAFE_AI_SHA384WithRSAEncryptionBER:
return B_SetAlgorithmInfo (*algObject, AI_SHA384WithRSAEncryptionBER, (POINTER)&BERinfo);
case BSAFE_AI_SHA512WithRSAEncryptionBER:
return B_SetAlgorithmInfo (*algObject, AI_SHA512WithRSAEncryptionBER, (POINTER)&BERinfo);
case BSAFE_AI_DSAWithSHA1_BER:
return B_SetAlgorithmInfo (*algObject, AI_DSAWithSHA1_BER, (POINTER)&BERinfo);
case BSAFE_AI_DHKeyAgreeBER:
return B_SetAlgorithmInfo (*algObject, AI_DHKeyAgreeBER, (POINTER)&BERinfo);
case BSAFE_AI_RC4_BER:
return B_SetAlgorithmInfo (*algObject, AI_RC4_BER, (POINTER) &BERinfo);
case BSAFE_AI_RC4WithMAC_BER:
return B_SetAlgorithmInfo (*algObject, AI_RC4WithMAC_BER, (POINTER)&BERinfo);
case BSAFE_AI_DES_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_DES_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_DES_EDE3_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_DES_EDE3_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_DESX_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_DESX_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_RC2_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_RC2_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_RC5_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_RC5_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_AES128_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_AES128_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_AES192_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_AES192_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_AES256_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_AES256_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_AES128_ECB_BER:
return B_SetAlgorithmInfo (*algObject, AI_AES128_ECB_BER, (POINTER)&BERinfo);
case BSAFE_AI_AES192_ECB_BER:
return B_SetAlgorithmInfo (*algObject, AI_AES192_ECB_BER, (POINTER)&BERinfo);
case BSAFE_AI_AES256_ECB_BER:
return B_SetAlgorithmInfo (*algObject, AI_AES256_ECB_BER, (POINTER)&BERinfo);
case BSAFE_AI_AES128_CFB_BER:
return B_SetAlgorithmInfo (*algObject, AI_AES128_CFB_BER, (POINTER)&BERinfo);
case BSAFE_AI_AES192_CFB_BER:
return B_SetAlgorithmInfo (*algObject, AI_AES192_CFB_BER, (POINTER)&BERinfo);
case BSAFE_AI_AES256_CFB_BER:
return B_SetAlgorithmInfo (*algObject, AI_AES256_CFB_BER, (POINTER)&BERinfo);
case BSAFE_AI_MD2WithDES_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_MD2WithDES_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_MD5WithDES_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_MD5WithDES_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_SHA1WithDES_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_SHA1WithDES_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_MD2WithRC2_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_MD2WithRC2_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_MD5WithRC2_CBCPadBER:
return B_SetAlgorithmInfo (*algObject, AI_MD5WithRC2_CBCPadBER, (POINTER)&BERinfo);
case BSAFE_AI_MD5WithXOR_BER:
return B_SetAlgorithmInfo (*algObject, AI_MD5WithXOR_BER, (POINTER)&BERinfo);
case BSAFE_AI_MD2_BER:
return B_SetAlgorithmInfo (*algObject, AI_MD2_BER, (POINTER)&BERinfo);
case BSAFE_AI_MD5_BER:
return B_SetAlgorithmInfo (*algObject, AI_MD5_BER, (POINTER)&BERinfo);
case BSAFE_AI_SHA1_BER:
return B_SetAlgorithmInfo (*algObject, AI_SHA1_BER, (POINTER)&BERinfo);
case BSAFE_AI_SHA256_BER:
return B_SetAlgorithmInfo (*algObject, AI_SHA256_BER, (POINTER)&BERinfo);
case BSAFE_AI_SHA384_BER:
return B_SetAlgorithmInfo (*algObject, AI_SHA384_BER, (POINTER)&BERinfo);
case BSAFE_AI_SHA512_BER:
return B_SetAlgorithmInfo (*algObject, AI_SHA512_BER, (POINTER)&BERinfo);
default:
return RSA_DEMO_E_INVALID_PARAMETER;
}
}
/* This function will take an algorithmFlag that is returned from
* B_DecodeAlgorithmBER and set a key object with the proper KI.
* The B_KEY_OBJ should be already created. */
int RSA_SetKeyObject(B_KEY_OBJ *keyObject, unsigned int keyFlag,
ITEM *encodingItem)
{
ITEM BERinfo = {NULL, 0};
BERinfo.len = encodingItem->len;
BERinfo.data = (unsigned char *)T_malloc (BERinfo.len);
T_memcpy (BERinfo.data, encodingItem->data, BERinfo.len);
switch (keyFlag) {
case BSAFE_KI_RSAPublicBER:
return B_SetKeyInfo (*keyObject, KI_RSAPublicBER, (POINTER)&BERinfo);
case BSAFE_KI_PKCS_RSAPrivateBER:
return B_SetKeyInfo (*keyObject, KI_PKCS_RSAPrivateBER, (POINTER)&BERinfo);
case BSAFE_KI_DSAPublicX957BER:
return B_SetKeyInfo (*keyObject, KI_DSAPublicBER, (POINTER)&BERinfo);
case BSAFE_KI_DSAPublicBER:
return B_SetKeyInfo (*keyObject, KI_DSAPublicX957BER, (POINTER)&BERinfo);
case BSAFE_KI_DSAPrivateX957BER:
return B_SetKeyInfo (*keyObject, KI_DSAPrivateBER, (POINTER)&BERinfo);
case BSAFE_KI_DSAPrivateBER:
return B_SetKeyInfo (*keyObject, KI_DSAPrivateX957BER, (POINTER)&BERinfo);
default:
return RSA_DEMO_E_INVALID_PARAMETER;
}
}