Example code to Generate Signature for the raw input message.
#include <phKeyStore.h>
#include <phCryptoASym.h>
#include <string.h>
#define CHECK_SUCCESS(x) \
if ( (x) != PH_ERR_SUCCESS ) \
{ \
printf ( "\n\n" ); \
printf ( "An error occurred: (0x%04X)\n", (x) ); \
printf ( "Pressing any key will exit the demo.\n" ); \
_getch (); \
return 0; \
}
#define KEY_ENTRIES 10
#define KEY_VERSION_PAIRS 3 * KEY_ENTRIES
#define KEY_USAGE_COUNTER 15
#define TRUE PH_ON
#define FALSE PH_OFF
#define KEY_ADDRESS 1
#define KEY_PAIR_PRIVATE_KEY 0
#define KEY_PAIR_PUBLIC_KEY 1
{
0x60, 0x0A, 0xC0, 0xBA, 0x0A, 0x5B, 0x79, 0xB6, 0x07, 0x25, 0xA9, 0xC8, 0xFF, 0xB3, 0xE7, 0x45,
0x4A, 0x7C, 0x70, 0x2D, 0xB5, 0x65, 0x3A, 0x8A, 0xA6, 0x0E, 0x2E, 0x4C, 0x25, 0x6F, 0xF0, 0x5D
};
{
0x04, 0xC4, 0x18, 0x7C, 0x26, 0xA5, 0x95, 0xB1, 0x8B, 0x37, 0x03, 0x31, 0x2D, 0x80, 0x12, 0x99,
0x9B, 0x88, 0xEB, 0x28, 0xBD, 0xB4, 0x1F, 0x30, 0x11, 0x28, 0x3D, 0xD8, 0x06, 0xEC, 0xDB, 0x09,
0x24, 0x1B, 0xA9, 0x9D, 0x61, 0x2D, 0xA5, 0x4A, 0x6E, 0xAF, 0x14, 0x0F, 0x80, 0xAB, 0x5B, 0x19,
0xE4, 0xBA, 0x66, 0x53, 0x5D, 0x12, 0xBE, 0x85, 0x3C, 0x98, 0x76, 0x7A, 0xDF, 0x7C, 0x13, 0x0C,
0x1A
};
uint8_t aMessage[] =
"ASymmetric Crypto Demonstration";
phCryptoASym_Sw_DataParams_t stCryptoASym;
CHECK_SUCCESS(
phKeyStore_Sw_Init(&stKeyStore,
sizeof(stKeyStore), aKeyEntry, KEY_ENTRIES, aKeyVersion, 2,
aKeyUsageCounter, KEY_USAGE_COUNTER), TRUE);
CHECK_SUCCESS(phCryptoASym_Sw_Init(&stCryptoASym, sizeof(stCryptoASym), &stKeyStore, aInternalBuffer, wInternalBuffSize), TRUE);
wKeyInfo = (
uint16_t) ( ( ( KEY_PAIR_PRIVATE_KEY + 1 ) << 12 ) | wKeyFormat );
aPrivateKey, (
uint16_t )
sizeof(aPrivateKey)));
wKeyInfo = (
uint16_t) ( ( ( KEY_PAIR_PUBLIC_KEY + 1 ) << 12 ) | wKeyFormat );
aPublicKey, (
uint16_t )
sizeof(aPublicKey)));
CHECK_SUCCESS(phCryptoASym_LoadKey(&stCryptoASym, PH_CRYPTOASYM_KEYMODE_EPHEMERAL, KEY_ADDRESS, KEY_PAIR_PRIVATE_KEY,
PH_CRYPTOASYM_KEY_TYPE_ECC), TRUE);
CHECK_SUCCESS(phCryptoASym_LoadKey(&stCryptoASym, PH_CRYPTOASYM_KEYMODE_EPHEMERAL, KEY_ADDRESS, KEY_PAIR_PUBLIC_KEY,
PH_CRYPTOASYM_KEY_TYPE_ECC), TRUE);
printf("\tMessage\n");
printf("\t Hex: ");
PrintData(aMessage, (wMsgLen - 1), "%02X ", "\n");
PrintASCII(aMessage, wMsgLen);
printf("\n\n");
aSignature, &wSignLen), TRUE);
printf("\tSignature\n");
printf("\t Hex: ");
PrintData(aSignature, wSignLen, "%02X ", "\n");
printf("\n");
{
printf("\t ASCII: ");
--wKeyLen;
for(wITeration = 0; wITeration < wKeyLen; wITeration++)
{
printf("%c", pBuffer[wITeration]);
if(pBuffer[wITeration] == 0x0A)
printf("\t ");
}
printf("\n");
}
void PrintData(
uint8_t* pBuffer,
uint32_t dwLength,
char* pFormat,
char* pSpecialChar)
{
for(dwIndex1 = 0; dwIndex1 < dwLength;dwIndex1++)
{
printf(pFormat, pBuffer[dwIndex1]);
dwIndex2++;
if(dwIndex2 > (dwSplit_Count - 1))
{
printf("\n\t ");
dwIndex2 = 0;
}
}
printf(pSpecialChar);
}