Beispiel #1
0
void
GenerateHash(unsigned int uiConfig,unsigned char *puiKey1,unsigned char *puiData,
             unsigned char *puiResult,unsigned int uiDataLength)
{

    //
    // Step1: Reset the Module
    // Step2: Enable Interrupts
    // Step3: Wait for Context Ready Inteerupt
    // Step4: Set the Configuration Parameters (Hash Algorithm)
    // Step5: Set Key depends on Algorithm
    // Step7: Start Hash Generation
    //
    MAP_PRCMPeripheralReset(PRCM_DTHE);
    //
    // Clear the flags
    //
    g_bContextReadyFlag = false;
    g_bInputReadyFlag = false;
    //
    // Enable interrupts.
    //
    MAP_SHAMD5IntEnable(SHAMD5_BASE, SHAMD5_INT_CONTEXT_READY |
                        SHAMD5_INT_PARTHASH_READY |
                        SHAMD5_INT_INPUT_READY |
                        SHAMD5_INT_OUTPUT_READY);
    //
    // Wait for the context ready flag.
    //
    while(!g_bContextReadyFlag)
    {
    }
    //
    // Configure the SHA/MD5 module.
    //
    MAP_SHAMD5ConfigSet(SHAMD5_BASE, uiConfig);
    //
    // If Keyed Hashing is used, Set Key and start Hash Generation
    //
    if(uiHMAC)
    {
        MAP_SHAMD5HMACKeySet(SHAMD5_BASE, puiKey1);
        MAP_SHAMD5HMACProcess(SHAMD5_BASE,
                              puiData,
                              uiDataLength,
                              puiResult);

    }
    else
    {
        //
        // Perform the hashing operation
        //
        MAP_SHAMD5DataProcess(SHAMD5_BASE, puiData, uiDataLength,
                              puiResult);

    }

}
Beispiel #2
0
void HASH_SHAMD5Start (uint32_t algo, uint32_t blocklen) {
    // wait until the context is ready
    while ((HWREG(SHAMD5_BASE + SHAMD5_O_IRQSTATUS) & SHAMD5_INT_CONTEXT_READY) == 0);

    // Configure the SHA/MD5 module algorithm
    MAP_SHAMD5ConfigSet(SHAMD5_BASE, algo);

    // if not a multiple of 64 bytes, close the hash
    if (blocklen % 64) {
        HWREG(SHAMD5_BASE + SHAMD5_O_MODE) |= SHAMD5_MODE_CLOSE_HASH;
    }

    // set the lenght
    HWREG(SHAMD5_BASE + SHAMD5_O_LENGTH) = blocklen;
}