苹果签名

iphoneqm
首页 > 苹果签名 > 正文内容

Do everything if needed

admin6个月前 (12-19)苹果签名131

  mbedtls下载路径:github/ARMmbed/mbedtls

Do everything if needed

  写本帖时的最新tag: github/ARMmbed/mbedtls/releases/tag/v2.23.0

  交叉编译:

  先在shell里设置好编译器: export CC=....(gcc的全路径)

  然后执行编译命令:make

  最后在library目录下找到.a文件,我们可以链接使用的静态库,将其链接进我们的系统。

  我在君正X1000平台上链接mbedtls时,提示找不到 read,write,close等几个与文件操作的函数,就自己实现了几个空函数给它链接,因为我用不到文件操作的功能,我只需要使用它来实现固件升级时固件的合法性验证。基本思路是编译好固件后,对其签名,生成的签名结果数据加在固件最后面,升级时,MCU端收到所有数据(反正这个芯片内存足够大)后,按固定长度(签名结果是定长的)计算固件的hash值,将hash值与签名结果传给mbedtls相关的函数进行验证。

  如果内存不够大,不足以装下固件,可能需要在flash上划分一片区域来临时存放即将升级的固件。收到固件时一边写入FLASH,一边计算hash值。当所有固件都接收完,用最终的hash值与签名结果验证通过后再烧写到正确的位置。这个只是一个想法,并没有真正实现。

  固件中验证的代码:

  int make_hash( char * buffer ,int bufLen, char * hash, int hashLen)

  {

  int ret = -1;

  mbedtls_md_context_t ctx;

  const mbedtls_md_info_t *md_info=mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 );

  if( md_info == NULL )

  goto cleanup;

  mbedtls_md_init( &ctx );

  ret = mbedtls_md_setup( &ctx, md_info, 0 );

  if( ret != 0 )

  goto cleanup;

  ret = mbedtls_md_starts( &ctx );

  if( ret != 0 )

  goto cleanup;

  ret = mbedtls_md_update(&ctx, buffer, bufLen );

  if( ret != 0 )

  goto cleanup;

  ret = mbedtls_md_finish( &ctx, hash );

  cleanup:

  mbedtls_md_free( &ctx );

  return( ret );

  }

  int checkFWValidity( uint8_t * buffer, uint32_t length )

  {

  int fwLen = length - KEY_SIZE;

  uint8_t * signature = buffer+ fwLen;

  int ret=0;

  char hash[64];

  mbedtls_rsa_context rsa;

  mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V21, 0 );

  ret=mbedtls_mpi_read_string(&rsa.N,16,pubKey);

  ret=mbedtls_mpi_read_string(&rsa.E,16,keyEValue);

  rsa.len = ( mbedtls_mpi_bitlen( &rsa.N ) + 7 ) >> 3;

  ret= make_hash(buffer, fwLen, hash, sizeof(hash) );

  ret = mbedtls_rsa_pkcs1_verify( &rsa, NULL,NULL,MBEDTLS_RSA_PUBLIC, MBEDTLS_MD_SHA256,0x20, hash,signature );

  mbedtls_md_hmac_finish(NULL,NULL);

  return ret;

  }

  其中 pubKey和keyEValue是我们使用的public key相关的信息,保存在全局变量里即可。这个函数需要的public key不是pem格式的数据,具体叫什么格式我也没有明白。

  PC上需要运行的命令:

  交叉编译的同时可以编译一个X86版本的mbedtls, 与签名及验证相关的程序在programspkey目录中,将其中的

  运行gen_key,生成 keyfile.key

  运行:blogs/ceblog/p/key_app_writer mode=private filename=keyfile.key output_mode=public output_file=public.key 得到public key

  运行: blogs/ceblog/p/key_app_writer mode=public filename=public.key output_mode=public

  将其输出保存下来,大概内容如下(省略号代表的是很长的字符串)

  N: CBDB69551C.....08E5

  E: 010001

  N:开头的第一行为pubKey的内容(去掉N:)

  E:开头的第二行为keyEValue的内容(同理去掉E:)

  private key要保存好,以后用它来做签名

  签名的命令: rsa_sign_pss keyfile.key file(要签名的文件)

  签名的结果自动写入file.sig文件中,可以使用命令 cat file file.sig > signed

  将源文件和签名结果合并写入到一个新文件:signed中。

  在君正X1000上,支持mbedtls之后,固件大小增加了100K,如果想要减少,应该可以通过修改config.h来实现。

扫描二维码推送至手机访问。

版权声明:本文由MDM苹果签名,IPA签名,苹果企业签名,苹果超级签,ios企业签名,iphoneqm.com发布,如需转载请注明出处。

转载请注明出处https://www.iphoneqm.com/iphoneqm/623.html

分享给朋友:

相关文章

苹果超级签名和TF签名哪个好?播报文章

苹果超级签名和TF签名哪个好?播报文章

  目前开发者打包IPA文件后,如果没办法上架苹果商店,那么苹果企业签名、超级签名和TF签名是主要的选择。不过很多人都被企业签名坑过,觉得超级签名和TF签名可能会比较稳定一些,那么超级签名和TF签名有...

网上下载项目真机遇到的问题Apple Development“ in the build settings editor, or switch to manual

网上下载项目真机遇到的问题Apple Development“ in the build settings editor, or switch to manual

  Showing All Messages   ChooseLocation has conflicting provisioning settings. ChooseLocation is...

什么是苹果TF签名?为什么可以永不掉签?

什么是苹果TF签名?为什么可以永不掉签?

  iOS TF 签名是分发新模式 Test Flight,苹果官方认可,零风险,分发再无忧 远离企业签名频繁掉签,告别超级签名高价钱。微导流开发者服务平台目前已经更新这个服务,欢迎大家了解使用。...

中国美术学院2023年本科招生初试 (网络远程考试)考生须知

中国美术学院2023年本科招生初试 (网络远程考试)考生须知

  为统筹做好2023年本科考试招生,依据《中国美术学院2023年本科招生简章》,现将中国美术学院2023年本科招生初试(网络远程考试)考生须知公布如下:   【考前准备】   一、考前纸...

【笔记】行测——常识判断之公文常识总结与归纳

【笔记】行测——常识判断之公文常识总结与归纳

  (一)公文的概念   公文,也称公务文件,是在社会活动中直接形成和使用的具有规范体式和法定效用、表达社会集团意志的信息记录。广义公文包括:通用公文(法定公文)、专用公文和事务文书。狭义公文包...

越狱自动签名软件_解疑答惑丨证书、签名、掉签等问题。

越狱自动签名软件_解疑答惑丨证书、签名、掉签等问题。

  今天讲的是证书这一块的问题,为什么要写这个,因为一旦企业证书掉签,很多人就会在各个群求一个越狱工具在线安装地址。说实话遇到这种问题都不知道怎么回答,去解释吧话太多,说没有吧显得很敷衍。所以就有了写...

现在,非常期待与您的又一次邂逅

我们努力让每一次邂逅总能超越期待