The SHA software function can update the digest value based on the 512-bit data.
It is assumed that the message is already preprocessed properly for the SHA algorithm, so that the SHA software can work directly on 512-bit portions.
The SHA function entry point is located at the Boot ROM address 0x02001900 and has three parameters:
The updated digest value is put at first parameter after the function exit.
The API is:
/* Type definition for CRYA SHA function. */
typedef void (*crya_sha_process_t) (uint32_t digest_in_out[8], const uint8_t data[64], uint32_t ram_buf[64]);
/* CRYA SHA function
* \param digest_in_out[In/out]: A pointer to a digest location (digest input and output)
* \param data[In]: A pointer to a 512 bit data block
* \param ram_buf[In]: A pointer to a RAM buffer (256B needed for internal algorithm)
*/
#define crya_sha_process ((crya_sha_process_t ) (0x02001900 | 0x1))
Code example of using CRYA SHA software:
void sha256_process(uint32_t digest[8], const uint8_t data[64])
{
uint32_t ram_buf[64]; /* 256 bytes needed for message schedule table */
/* Pointer to CRYA SHA function in ROM */
static void (*crya_sha_process)(uint32_t digest_in_out[8], const uint8_t data[64],
uint32_t ram_buf[64]);
crya_sha_process = (void (*)(uint32_t *, const uint8_t *, uint32_t *))
*((uint32_t*)0x02001900);
crya_sha_process (digest, data, ram_buf);
}