苹果签名

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

Do everything if needed

admin2年前 (2024-12-19)苹果签名473

  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://iphoneqm.com/iphoneqm/623.html

分享给朋友:

相关文章

微店聊天MAC  1.0.0 最新版

微店聊天MAC 1.0.0 最新版

  微店聊天MAC最新版是一款便捷实用的聊天沟通软件,微店聊天MAC最新版软件还拥有实时的消息沟通,支持联系人搜索和截图,有了它让你和微店商家沟通更加方便,微店聊天MAC版适用于微店卖家以及买家,再也...

麻吉宝软件签名过期是什么意思?签名过期解决方法一览

麻吉宝软件签名过期是什么意思?签名过期解决方法一览

  最近朋友圈有一款热门的阿里产品,许多朋友都获得邀请码进入内测,但是有些朋友在下载APP的时候,却发现不能进行下载或提示签名过期,那么这个究竟是为什么呢?下面就让小编为大家介绍一下吧。   麻...

布谷直播源码一对一聊天交友苹果超级签名源码语音直播使用微信扫描二维码分享朋友圈,成交更快更简单!

布谷直播源码一对一聊天交友苹果超级签名源码语音直播使用微信扫描二维码分享朋友圈,成交更快更简单!

  ios超级签名系统源码+App分发平台源码:现在苹果管控非常严,企业签一般一两天就掉了,重签非常麻烦!超级签名,不同于传统的企业签,稳定不掉。省去手动获取UDID的繁琐。不用重新信任设备。不用上架...

苹果微信分身签名过期

苹果微信分身签名过期

  1、下载安装爱思助手PC版 V7.22或以上版本并连接电脑,点击上方“刷机越狱-一键越狱”进入越狱界面;   2、在“一键越狱”界面点击“iOS10-10.2越狱”按钮,点击之后会在设备上安...

原创苹果企业签名的具体操作步骤

原创苹果企业签名的具体操作步骤

  对于签名这个行业,有企业签、超级签、个人签还有TF签名,今天具体还是介绍一下企业签名是怎么操作的,一起来看看吧!   一、什么是企业签名?   众所周知,苹果开发者账号分三种:个人开发者账...

JEECG BOOT 下拉搜索 报 Sign签名校验失败!

JEECG BOOT 下拉搜索 报 Sign签名校验失败!

  Java平台模块系统是Java 9中引入的一个新特性,它可以更好地管理Java应用程序的依赖关系,提高应用程序的可扩展性和安全性。模块系统可以将Java应用程序的代码组织为独立的模块,每个模块都有...

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

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

  • 高效满意
    高效满意

    专业的技术团队

  • 性能稳定
    性能稳定

    响应速度快,放心有保障

  • 用户体验
    用户体验

    响应式布局,兼容各种设备

  • 持续更新
    持续更新

    不断升级维护,更好服务用户