/****************************************************************************** * RETURN SECROIMG BLK SIZE ******************************************************************************/ uint32 sec_secro_blk_sz (void) { return sp_hacc_blk_sz(); }
/****************************************************************************** * RETURN SECROIMG MD PLAINTEXT DATA ******************************************************************************/ uint32 sec_secro_md_get_data (SECRO_USER user, uchar* buf, uint32 offset, uint32 len) { uint32 ret = SEC_OK; const uint32 cipher_len = sizeof(AND_AC_ANDRO_T) + sizeof(AND_AC_MD_T) + sizeof(AND_AC_MD2_T); osal_secro_lock(); /* ----------------- */ /* check */ /* ----------------- */ if(FALSE == bSecroExist) { ret = ERR_SECROIMG_IS_EMPTY; goto _exit; } if(len == 0) { ret = ERR_SECROIMG_INVALID_BUF_LEN; goto _exit; } if (0 != (len % sp_hacc_blk_sz())) { ret = ERR_HACC_DATA_UNALIGNED; goto _exit; } /* ------------------------ */ /* decrypt secroimg */ /* ------------------------ */ if(TRUE == sec_secro_ac()) { sp_hacc_dec((uchar*)&secroimg.m_andro, cipher_len, TRUE,HACC_USER1,TRUE); } /* ------------------------ */ /* check header */ /* ------------------------ */ if(AC_ANDRO_MAGIC != secroimg.m_andro.magic_number) { ret = ERR_SECROIMG_HACC_AP_DECRYPT_FAIL; goto _exit; } if(AC_MD_MAGIC != secroimg.m_md.magic_number) { ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; goto _exit; } if(AC_MD2_MAGIC != secroimg.m_md2.magic_number) { ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; goto _exit; } /* ------------------------ */ /* fill buffer */ /* ------------------------ */ /* only copy the data with user specified length */ switch(user) { case SECRO_MD1: mcpy(buf,secroimg.m_md.reserve+offset,len); break; case SECRO_MD2: mcpy(buf,secroimg.m_md2.reserve+offset,len); break; default: SMSG(TRUE,"[%s] MD user not supported!\n",MOD); break; } /* ------------------------ */ /* encrypt secro image */ /* ------------------------ */ if(TRUE == sec_secro_ac()) { sp_hacc_enc((uchar*)&secroimg.m_andro, cipher_len, TRUE,HACC_USER1,TRUE); } _exit: osal_secro_unlock(); return ret; }
uint32 sec_secro_md_get_data (uchar* buf, uint32 offset, uint32 len) { uint32 ret = SEC_OK; const uint32 cipher_len = sizeof(AND_AC_ANDRO_T) + sizeof(AND_AC_MD_T); /* ----------------- */ /* check */ /* ----------------- */ if(FALSE == bSecroExist) { ret = ERR_SECROIMG_IS_EMPTY; goto _exit; } if(len == 0) { ret = ERR_SECROIMG_INVALID_BUF_LEN; goto _exit; } if (0 != (len % sp_hacc_blk_sz())) { ret = ERR_HACC_DATA_UNALIGNED; goto _exit; } /* ------------------------ */ /* decrypt secroimg */ /* ------------------------ */ if(TRUE == sec_secro_ac()) { sp_hacc_dec((uchar*)&secroimg.m_andro, cipher_len, TRUE,HACC_USER1,TRUE); } /* ------------------------ */ /* check header */ /* ------------------------ */ if(AC_ANDRO_MAGIC != secroimg.m_andro.magic_number) { ret = ERR_SECROIMG_HACC_AP_DECRYPT_FAIL; goto _exit; } if(AC_MD_MAGIC != secroimg.m_md.magic_number) { ret = ERR_SECROIMG_HACC_MD_DECRYPT_FAIL; goto _exit; } /* ------------------------ */ /* fill buffer */ /* ------------------------ */ /* only copy the data with user specified length */ mcpy(buf,secroimg.m_md.reserve+offset,len); /* ------------------------ */ /* encrypt secro image */ /* ------------------------ */ if(TRUE == sec_secro_ac()) { sp_hacc_enc((uchar*)&secroimg.m_andro, cipher_len, TRUE,HACC_USER1,TRUE); } _exit: return ret; }