u32 GetCertSize(u8 *cert) { u32 sign_size = 0; u32 sign_padlen = 0; GetCertSigSectionSizes(&sign_size,&sign_padlen,cert); if(!sign_size || !sign_padlen) return 0; return sizeof(u32) + sign_size + sign_padlen + sizeof(cert_hdr) + GetCertPubkSectionSize(GetCertPubkType(cert)); }
bool VerifyCert(u8 *cert, u8 *pubk) { if(!GetCertHdr(cert)) return false; u8 *signature = (cert+sizeof(u32)); u8 *data = (u8*)GetCertHdr(cert); u32 datasize = sizeof(cert_hdr) + GetCertPubkSectionSize(GetCertPubkType(cert)); return RsaSignVerify(data,datasize,signature,pubk,NULL,u8_to_u32(cert,BE),CTR_RSA_VERIFY); }
u32 GetCertSize(u8 *cert) { u32 SigSize = 0; u32 SigPadding = 0; GetCertSigSectionSizes(&SigSize,&SigPadding,cert); if(!SigSize || !SigPadding) return 0; Cert_Struct *certcore = (Cert_Struct*)(cert+4+SigSize+SigPadding); u32 PubKSectionSize = GetCertPubkSectionSize((pubk_types)u8_to_u32(certcore->KeyType,BE)); return (4+SigSize+SigPadding+sizeof(Cert_Struct)+PubKSectionSize); }
bool VerifyCert(u8 *cert, u8 *pubk) { u32 SigSize = 0; u32 SigPadding = 0; GetCertSigSectionSizes(&SigSize,&SigPadding,cert); if(!SigSize || !SigPadding) return 0; u8 *signature = (cert+4); u8 *data = (cert+4+SigSize+SigPadding); u32 datasize = sizeof(Cert_Struct) + GetCertPubkSectionSize(GetCertPubkType(cert)); int result = ctr_sig(data,datasize,signature,pubk,NULL,u8_to_u32(cert,BE),CTR_RSA_VERIFY); if(result == 0) return true; else return false; }