int main() { int iRetVal = 0; uint32 pu32TestData[32]; uint32 *pu32HeaderPtr; uint32 u32HeaderSize; uint32 u32TotalBytes; uint8 u8Counter; uint32 u32BytesInFifo; uint32 u32h0; uint32 u32h1; uint32 u32h2; uint32 u32h3; uint32 u32h4; memset(pu32TestData, 0x0, 256); /* * Start initializing the MDHA (the hardware module that calculates the * hash */ /* Reset the MDHA */ MCF_MDHA_MDCMR = MCF_MDHA_MDCMR_SWR; while ((MCF_MDHA_MDSR & MCF_MDHA_MDSR_RD) == 0) { /* Wait until the reset completed */ } /* The first 4 calculations no DMA and no interrupts are used */ MCF_MDHA_MDCR = MCF_MDHA_MDCR_DMAL(1) | MCF_MDHA_MDCR_ENDIAN; /* Initialise the SHA algorithm's starting registers */ MCF_MDHA_MDMR = MCF_MDHA_MDMR_INIT | MCF_MDHA_MDMR_PDATA; u32HeaderSize = 68; u32TotalBytes = 0; pu32HeaderPtr = pu32TestData; while (u32HeaderSize > 0) { /* Now fill the FIFO with the first 16 uint32's */ u8Counter = 0; u32BytesInFifo = 0; while ((u8Counter 16) && u32HeaderSize > 3) { MCF_MDHA_MDIN = *pu32HeaderPtr++; u32HeaderSize -= 4; u32BytesInFifo += 4; u8Counter++; } if ((u8Counter 16) && (u32HeaderSize > 0)) { MCF_MDHA_MDIN = *pu32HeaderPtr++; u32BytesInFifo += (uint8)u32HeaderSize; u32HeaderSize = 0; } /* Fifo Filled */ MCF_MDHA_MDDSR = u32BytesInFifo; /* GO!!!!! */ MCF_MDHA_MDCMR = MCF_MDHA_MDCMR_GO; /* Now keep polling until the hash is calculated */ while ((MCF_MDHA_MDSR & MCF_MDHA_MDSR_INT) != 1) { /* * For the time being, do nothing */ } if ((MCF_MDHA_MDSR & MCF_MDHA_MDSR_ERR) != 0) { printf("An error occurred generating the SHA-1 hash\n\r"); iRetVal = -1; u32TotalBytes = 0; } else if ((MCF_MDHA_MDSR & MCF_MDHA_MDSR_DONE) != 0) { u32TotalBytes += u32BytesInFifo; if (u32HeaderSize == 0) { u32h0 = MCF_MDHA_MDA0; u32h1 = MCF_MDHA_MDB0; u32h2 = MCF_MDHA_MDC0; u32h3 = MCF_MDHA_MDD0; u32h4 = MCF_MDHA_MDE0; if ((u32h0 == 0x46fe3f0a) && (u32h1 == 0x75b18d40) && (u32h2 == 0x6d86aca0) && (u32h3 == 0xed37bb70) && (u32h4 == 0x6ed8246b)) { printf("HASH OK\n\r"); } else { printf("HASH INCORRECT\n\r"); } } else { MCF_MDHA_MDCMR = MCF_MDHA_MDCMR_CI; } } } return iRetVal; }