1、optee中Symmetric ciphers、HASH、RNG等算法的注册模型

1.1、aes_desc 结构模型

(1)、如果开启硬件加速(如ARM Cryptography Extension), 则编译和使用下面结构体

(optee_os/core/lib/libtomcrypt/aes_accel.c)const struct ltc_cipher_descriptor aes_desc = {.name = "aes",.ID = 6,.min_key_length = 16,.max_key_length = 32,.block_length = 16,.default_rounds = 10,.setup = rijndael_setup,.ecb_encrypt = rijndael_ecb_encrypt,.ecb_decrypt = rijndael_ecb_decrypt,.done = rijndael_done,.keysize = rijndael_keysize,.accel_ecb_encrypt = aes_ecb_encrypt_nblocks,.accel_ecb_decrypt = aes_ecb_decrypt_nblocks,.accel_cbc_encrypt = aes_cbc_encrypt_nblocks,.accel_cbc_decrypt = aes_cbc_decrypt_nblocks,.accel_ctr_encrypt = aes_ctr_encrypt_nblocks,.accel_xts_encrypt = aes_xts_encrypt_nblocks,.accel_xts_decrypt = aes_xts_decrypt_nblocks,
};

(2)、如果没有开启硬件加速, 则编译和使用下面结构体,采取纯软的实现方法

(optee_os/core/lib/libtomcrypt/src/ciphers/aes/aes.c)const struct ltc_cipher_descriptor aes_desc =
{"aes",6,16, 32, 16, 10,SETUP, ECB_ENC, ECB_DEC, ECB_TEST, ECB_DONE, ECB_KS,NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};

(3)、有关ltc_cipher_descriptor 结构体的描述,如下:

(optee_os/core/lib/libtomcrypt/src/headers/tomcrypt_cipher.h)extern const struct ltc_cipher_descriptor {/** name of cipher */const char *name;/** internal ID */unsigned char ID;/** min keysize (octets) */int  min_key_length,/** max keysize (octets) */max_key_length,/** block size (octets) */block_length,/** default number of rounds */default_rounds;/** Setup the cipher@param key         The input symmetric key@param keylen      The length of the input key (octets)@param num_rounds  The requested number of rounds (0==default)@param skey        [out] The destination of the scheduled key@return CRYPT_OK if successful*/int  (*setup)(const unsigned char *key, int keylen, int num_rounds, symmetric_key *skey);

(4)、硬件加速(如ARM Cryptography Extension)底层算法的实现

  • aes_ecb_encrypt_nblocks
  • aes_ecb_decrypt_nblocks
  • aes_cbc_encrypt_nblocks
  • aes_cbc_decrypt_nblocks
  • aes_ctr_encrypt_nblocks
  • aes_xts_encrypt_nblocks
  • aes_xts_decrypt_nblocks

ARM-CE底层算法的实现,都在aes_modes_armv8a_ce_a64.S文件中,最终调用的是AESD、AESE等ARM-CE指令

(optee_os/core/arch/arm/crypto/aes_modes_armv8a_ce_a64.S)FUNC ce_aes_cbc_encrypt , :ld1      {v4.16b}, [x5]          /* get iv */enc_prepare w3, x2, x6.Lcbcencloop4x:subs       w4, w4, #4bmi       .Lcbcenc1xld1       {v0.16b-v3.16b}, [x1], #64  /* get 4 pt blocks */eor        v0.16b, v0.16b, v4.16b      /* ..and xor with iv */encrypt_block    v0, w3, x2, x6, w7eor       v1.16b, v1.16b, v0.16bencrypt_block v1, w3, x2, x6, w7eor       v2.16b, v2.16b, v1.16bencrypt_block v2, w3, x2, x6, w7eor       v3.16b, v3.16b, v2.16bencrypt_block v3, w3, x2, x6, w7st1       {v0.16b-v3.16b}, [x0], #64mov       v4.16b, v3.16bb     .Lcbcencloop4x
.Lcbcenc1x:adds     w4, w4, #4beq       .Lcbcencout
.Lcbcencloop:ld1        {v0.16b}, [x1], #16     /* get next pt block */eor      v4.16b, v4.16b, v0.16b      /* ..and xor with iv */encrypt_block    v4, w3, x2, x6, w7st1       {v4.16b}, [x0], #16subs     w4, w4, #1bne       .Lcbcencloop
.Lcbcencout:st1     {v4.16b}, [x5]          /* return iv */ret
END_FUNC ce_aes_cbc_encrypt

(5)、不开启硬件加速,纯软算法的实现

(optee_os/core/lib/libtomcrypt/src/ciphers/aes/aes.c)65  #define SETUP    rijndael_enc_setup
66  #define ECB_ENC  rijndael_enc_ecb_encrypt
67  #define ECB_KS   rijndael_enc_keysize
68  #define ECB_DONE rijndael_enc_done

具体的实现都在如下路径,其实就是使用C语言实现的算法

(optee_os/core/lib/libtomcrypt/src/ciphers/aes/aes.c)#ifdef LTC_CLEAN_STACK
static int _rijndael_ecb_encrypt(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey)
#else
int ECB_ENC(const unsigned char *pt, unsigned char *ct, const symmetric_key *skey)
#endif
{ulong32 s0, s1, s2, s3, t0, t1, t2, t3;const ulong32 *rk;int Nr, r;LTC_ARGCHK(pt != NULL);LTC_ARGCHK(ct != NULL);LTC_ARGCHK(skey != NULL);Nr = skey->rijndael.Nr;if (Nr < 2 || Nr > 16)return CRYPT_INVALID_ROUNDS;rk = skey->rijndael.eK;/** map byte array block to cipher state* and add initial round key:*/LOAD32H(s0, pt      ); s0 ^= rk[0];LOAD32H(s1, pt  +  4); s1 ^= rk[1];LOAD32H(s2, pt  +  8); s2 ^= rk[2];LOAD32H(s3, pt  + 12); s3 ^= rk[3];#ifdef LTC_SMALL_CODEfor (r = 0; ; r++) {rk += 4;t0 =Te0(LTC_BYTE(s0, 3)) ^Te1(LTC_BYTE(s1, 2)) ^Te2(LTC_BYTE(s2, 1)) ^Te3(LTC_BYTE(s3, 0)) ^rk[0];t1 =Te0(LTC_BYTE(s1, 3)) ^Te1(LTC_BYTE(s2, 2)) ^Te2(LTC_BYTE(s3, 1)) ^Te3(LTC_BYTE(s0, 0)) ^rk[1];t2 =Te0(LTC_BYTE(s2, 3)) ^Te1(LTC_BYTE(s3, 2)) ^Te2(LTC_BYTE(s0, 1)) ^Te3(LTC_BYTE(s1, 0)) ^rk[2];t3 =Te0(LTC_BYTE(s3, 3)) ^Te1(LTC_BYTE(s0, 2)) ^Te2(LTC_BYTE(s1, 1)) ^Te3(LTC_BYTE(s2, 0)) ^rk[3];if (r == Nr-2) {break;}s0 = t0; s1 = t1; s2 = t2; s3 = t3;}rk += 4;#else
....
#endif

(5)、aes加解密算法的调用

optee中的密码学算法注册模型相关推荐

  1. 转:PHP中的密码学算法及其应用

    原始出处:www.smatrix.org 信息来源:邪恶八进制信息安全团队(www.eviloctal.com)文章作者:fleshwound Author:fleshwound From:Secur ...

  2. DSP 中的基础算法和模型的详细解析

    查看全文 http://www.taodudu.cc/news/show-2989078.html 相关文章: 唐端荣|DSP投放引擎的设计与实现 dsp 精准投放_招商加盟行业如何精准获客 DSP投 ...

  3. DSP基础算法与模型研究

    DSP基础算法与模型研究 (转载请保留原文链接 http://www.techinads.com/archives/41 authored by 江申_Johnson) 美国有一家很优秀的DSP公司- ...

  4. 【杂谈】有三AI秋季划火热进行中,如何深入学习模型优化,人脸算法,图像质量等研究方向...

    文/编辑 | 言有三 这是我们最后一次CV季划,关于春季划和夏季划的说明,大家可以阅读往期文章. 这个春天,有三最后一月的学习"季划"招生 最后24小时,有三AI夏季划报名即将截止 ...

  5. 隐马尔可夫模型中的Viterbi算法zz

    隐马尔可夫模型中的Viterbi算法zz 这篇文章简单描述一下Viterbi算法--一年之前我听过它的名字,直到两周之前才花了一点时间研究了个皮毛,在这里做个简单检讨.先用一句话来简单描述一下:给出一 ...

  6. ML:机器学习算法中—因子模型(多变量)、时序模型/时间序列模型(主要以单变量)算法对比的简介、带有时序性的因子模型概述、案例应用之详细攻略

    ML:机器学习算法中-因子模型(多变量).时序模型/时间序列模型(主要以单变量)算法对比的简介.带有时序性的因子模型概述.案例应用之详细攻略 目录 因子模型和时序模型/时间序列模型算法的简介 1.因子 ...

  7. 机器学习中算法与模型的区别

    点击上方,选择星标或置顶,每天给你送干货! 阅读大概需要7分钟 跟随小博主,每天进步一丢丢 Datawhale干货 来自:Datawhale 作者:Sambodhi,海边的拾遗者 导读 机器学习涉及到 ...

  8. 35. OP-TEE中基本算法接口调用实现

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  9. 区块链中的密码学系列之SHA256算法(三)

    1. 前言 SHA系列算法是一种密码散列函数,由美国国家安全局设计,并由美国国家标准技术研究所(NIST)发布为联邦数据处理标准(FIPS).现在已经被破解. 我们本文主要研究SHA256算法. 2. ...

最新文章

  1. P3165 [CQOI2014]排序机械臂
  2. 用 Mars Remote API 轻松分布式执行 Python 函数
  3. beast单元库的总结
  4. 信息学奥赛一本通 1316:【例4.6】数的计数(Noip2001) | 1914:【01NOIP普及组】数的计数 | 洛谷 P1028 [NOIP2001 普及组] 数的计算
  5. 《Spring源码深度解析》 PDF
  6. mysql alter event_MYSQL ALTER EVENT介绍
  7. Python parser中的nargs
  8. 【青岛站】SWAT模型高阶应用暨无资料地区建模、不确定分析与气候变化、土地利用对面源污染影响模型改进及案例分析研讨
  9. linux多线程调度设置
  10. oracle 排序性能优化,Oracle优化之: 利用索引的有序性减少排序
  11. 在线产品经理实习 任务三:给搜狐新闻24小时热点做一份产品说明文档
  12. 关于加强销售费用管理的探讨
  13. ISO14229 理解(一)
  14. 《红楼梦》之金陵十二钗vs韩国明星
  15. 【JVM · GC】垃圾回收器
  16. http://www.dewen.net.cn/q/17095/SQL:用一条SQL语句统计出符合条件的内容
  17. 高数_第1章空间解析几何与向量代数__向量
  18. python微信消息定时_python微信定时消息
  19. 怎么批量取消Excel文件中的上下标
  20. 蓝牙GPS运动检测bean

热门文章

  1. access2003安装包百度云_《逗比羊电影》_逗比羊电影最新版下载
  2. linux创建mysql视图,MySQL视图入门浅析
  3. ML:机器学习中与模型相关的一些常见的判断逻辑(根据自调整阈值计算阳性率)
  4. 成功解决NVIDIA安装程序无法继续  Ths OCH driver package is not conmtibIe with the currently uistalled version of
  5. 成功解决利用pandas输出DataFrame格式数据表时没有最左边的索引编号(我去,这个问题折腾了我半个多小时)
  6. Py之portalocker:portalocker的简介、安装、使用方法之详细攻略
  7. BigData:绘制2018年福布斯中国富豪榜人名坐标地图(解决多个人名显示在同一个家乡地点)
  8. Hacker:编写高级语言脚本可破解各个云盘的下载速度限制
  9. CV之IC: 图像描述(Image Captioning) 的简介、使用方法、案例应用之详细攻略
  10. 发表国外期刊注意事项