AES(Advanced Encryption Standard) Intrinsics各函数介绍

2023-11-04

AES为高级加密标准,是较流行的一种密码算法。

SIMD相关头文件包括:

//#include <ivec.h>//MMX
//#include <fvec.h>//SSE(also include ivec.h)
//#include <dvec.h>//SSE2(also include fvec.h)


#include <mmintrin.h> //MMX
#include <xmmintrin.h> //SSE(include mmintrin.h)
#include <emmintrin.h> //SSE2(include xmmintrin.h)
#include <pmmintrin.h> //SSE3(include emmintrin.h)
#include <tmmintrin.h>//SSSE3(include pmmintrin.h)
#include <smmintrin.h>//SSE4.1(include tmmintrin.h)
#include <nmmintrin.h>//SSE4.2(include smmintrin.h)
#include <wmmintrin.h>//AES(include nmmintrin.h)
#include <immintrin.h>//AVX(include wmmintrin.h)
#include <intrin.h>//(include immintrin.h)

mmintrin.h为MMX 头文件,其中__m64的定义为:

typedef union __declspec(intrin_type) _CRT_ALIGN(8) __m64
{
    unsigned __int64    m64_u64;
    float               m64_f32[2];
    __int8              m64_i8[8];
    __int16             m64_i16[4];
    __int32             m64_i32[2];    
    __int64             m64_i64;
    unsigned __int8     m64_u8[8];
    unsigned __int16    m64_u16[4];
    unsigned __int32    m64_u32[2];
} __m64;

xmmintrin.h为SSE 头文件,此头文件里包含MMX头文件,其中__m128的定义为:

typedef union __declspec(intrin_type) _CRT_ALIGN(16) __m128 {
     float               m128_f32[4];
     unsigned __int64    m128_u64[2];
     __int8              m128_i8[16];
     __int16             m128_i16[8];
     __int32             m128_i32[4];
     __int64             m128_i64[2];
     unsigned __int8     m128_u8[16];
     unsigned __int16    m128_u16[8];
     unsigned __int32    m128_u32[4];
 } __m128;

emmintrin.h为SSE2头文件,此头文件里包含SSE头文件,其中__m128i和__m128d的定义为:

typedef union __declspec(intrin_type) _CRT_ALIGN(16) __m128i {
    __int8              m128i_i8[16];
    __int16             m128i_i16[8];
    __int32             m128i_i32[4];    
    __int64             m128i_i64[2];
    unsigned __int8     m128i_u8[16];
    unsigned __int16    m128i_u16[8];
    unsigned __int32    m128i_u32[4];
    unsigned __int64    m128i_u64[2];
} __m128i;

typedef struct __declspec(intrin_type) _CRT_ALIGN(16) __m128d {
    double              m128d_f64[2];
} __m128d;

wmmintrin.h 为AES头文件,其文件中各函数的介绍:

	/*
	* Performs 1 round of AES decryption of the first m128i using 
	* the second m128i as a round key. 
	*/
	//The decrypted data. This instruction decrypts data by using an Equivalent Inverse
	//Cipher with a 128 bit key. AES decryption requires 10 iterations of decryption by
	//using a cipher key that is 128 bits. Each iteration uses this instruction, except
	//for the last iteration.The last iteration must be performed by _mm_aesdeclast_si128.
	extern __m128i _mm_aesdec_si128(__m128i v, __m128i rkey);

	/*
	* Performs the last round of AES decryption of the first m128i 
	* using the second m128i as a round key.
	*/
	//The decrypted data for v. This instruction decrypts data by using an Equivalent 
	//Inverse Cipher with a 128 bit key. AES decryption requires 10 iterations of decryption
	//and uses a cipher key that consists of 128 bits. The final iteration must be performed
	//by this instruction. The previous nine iterations use _mm_aesdec_si128.
	extern __m128i _mm_aesdeclast_si128(__m128i v, __m128i rkey);

	/*
	* Performs 1 round of AES encryption of the first m128i using 
	* the second m128i as a round key.
	*/
	//The encrypted form of the data in v. This instruction encrypts data by using an
	//Equivalent Inverse Cipher with a 128 bit key. AES encryption requires 10 
	//iterations of encryption by using a cipher key that is 128 bits. Each iteration 
	//uses this instruction, except for the last iteration. The last iteration must 
	//be performed by _mm_aesenclast_si128.
	extern __m128i _mm_aesenc_si128(__m128i v, __m128i rkey);

	/*
	* Performs the last round of AES encryption of the first m128i
	* using the second m128i as a round key.
	*/
	//The encrypted form of the data in v. This instruction encrypts data by using an 
	//Equivalent Inverse Cipher with a 128 bit key. AES encryption requires 10 iterations
	//of encryption by using a cipher key that is 128 bits. You must perform the final 
	//iteration with this instruction. The previous nine iterations use _mm_aesenc_si128.
	extern __m128i _mm_aesenclast_si128(__m128i v, __m128i rkey);

	/*
	* Performs the InverseMixColumn operation on the source m128i 
	* and stores the result into m128i destination.
	*/
	//The inverted data. To perform decryption, you should use the aesimc instruction on 
	//all the AES expanded round keys. This prepares them for decryption by using the 
	//Equivalent Inverse Cipher.
	extern __m128i _mm_aesimc_si128(__m128i v);

	/*
	* Generates a m128i round key for the input m128i 
	* AES cipher key and byte round constant. 
	* The second parameter must be a compile time constant.
	*/
	//The AES encryption key. AES encryption requires 10 iterations of encryption with 
	//a 128 bit round key. Each round of encryption requires a different key. This 
	//instruction helps generate the round keys. The round keys can be generated 
	//independently of the encryption phase.
	extern __m128i _mm_aeskeygenassist_si128(__m128i ckey, const int rcon);

	/* 
	* Performs carry-less integer multiplication of 64-bit halves 
	* of 128-bit input operands. 
	* The third parameter inducates which 64-bit haves of the input parameters 
	* v1 and v2 should be used. It must be a compile time constant.
	*/
	//The product calculated by multiplying 64 bits of v1 and 64 bits of v2.
	// This instruction performs a multiplication of two 64-bit integers.
	//The multiplication does not calculate a carry bit.详见参考文献
	extern __m128i _mm_clmulepi64_si128(__m128i v1, __m128i v2, const int imm8);

参考文献:http://msdn.microsoft.com/en-us/library/cc664767(v=vs.100).aspx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AES(Advanced Encryption Standard) Intrinsics各函数介绍 的相关文章

  • 如何将字符串str转为float数组

    麻烦点个赞 今天在学习过程中遇到了将字符串转为数组的问题 以下是解决方案 如果数据格式正确 数据已经被放到数组里了 的话直接一行代码就能解决直接改变类型就可以 你的代数据如果直接长这个样子那就直接运行下面那一行代码 import numpy
  • 第11天-审批中心

    2 工作流介绍 2 1 概念介绍 工作流 Workflow 就是通过计算机对业务流程自动化执行管理 它主要解决的是 使在多个参与者之间按照某种预定义的规则自动进行传递文档 信息或任务的过程 从而实现某个预期的业务目标 或者促使此目标的实现
  • 计算机c盘满了怎么移到d盘去,Win10电脑c盘满了怎么转移到d盘?

    许多用户在使用电脑的时候因为不良的使用习惯 经常将一些文件或者程序安装在电脑的C盘中 最终导致C盘爆满电脑卡顿 那么我们要怎么把C盘的文件转移D盘呢 下面小编就带着大家一起看看吧 操作方法 1 双击 这台电脑 打开 在这台电脑中我们就可以看
  • 蓝桥杯 巧克力

    首先这是一道贪心思想的题目 贪心思想我觉得是考 思维 模拟 的题目 正文 依据题目要求总价最少 那么我们就从价格低的巧克力开始选择 每一天放置一块巧克力 假如当前巧克力k1单价最便宜 保质期为k1 date 那么尽量把当前巧克力放置在第k1
  • 模型的显存和参数量计算

    写在前面 以此记录关于模型显存和参数量的一些理解和计算 首先是 运算量 和 参数量 两个概念 参数量 这个比较好理解 例如卷积层中的卷积核c i k k n o 其参数量就是相乘的结果 而且 无论输入图像的尺寸怎么变 YOLO实现中的mul
  • input输入框添加内部图标

    有可能在制作网页的过程中遇到各种美化表单设计 这次我们来试着做一个demo 将input输入框添加内部图标 话不多说 看一下最终效果 我们的思路是 在一个div中 加入一个div和一个input标签 小div在左侧 input放右侧 用bo
  • 工程伦理答案

    今年是在线考试 刚刚考完 来一波分享吧 目录 1 客观题 2 主观题 3 主观题第3题答案 个性化推荐服务 应该怎么做才能合情合理又合法 1 客观题 2 主观题 这一部分我还没写完呢 唉 工程伦理主观题 案例分析 任选其一 500 1000
  • 进程-CPU和MMU/环境变量/创建子进程

    进程的相关概念 1 并发 2 单道程序设计 3 多道程序设计 4 cpu mmu 5 进程控制块 6 进程状态 环境变量 1 常用的环境变量作用 2 函数 进程控制原语 1 fork函数 循环创建子进程的架构 2 exec函数 各个函数的参

随机推荐

  • 解决chrom浏览器iframe嵌套写cookie问题

    chrom浏览器iframe嵌套写cookie 1 请求地址协议 2 response头部设置 3 提供如下方式进行设置 1 后端web服务代码如下 2 nginx服务器设置 场景分析描述 chrom浏览器环境下当前网站被第三方iframe
  • gitlab合并分支_拯救狗屎代码:基于 Gitlab 的代码审查,简单实用

    code review 的目的是提高代码质量 减少开发bug 俗话说 三人行必有我师 众人拾柴火焰高 gitlab提供了code review机制 对基于gitlab的code review 直接以具体例子的形式做个实践总结 gitlab提
  • PyTorch 2.0 重磅发布:编译、编译、还是编译!

    内容一览 昨晚召开的 PyTorch Conference 2022 中 官方正式发布了 PyTorch 2 0 本文将梳理 PyTorch 2 0 与 1 x 相比的最大差异 关键词 PyTorch 2 0 编译器 机器学习 在 PyTo
  • 55. Jump Game

    贪心算法 Jump Game I Given an array of non negative integers you are initially positioned at the first index of the array Ea
  • 【2023最新版】JetBrains Space注册+桌面版安装+IDE远程开发连接JetBrains Space

    目录 一 JetBrains Space 1 官网 2 简介 3 注册 二 安装桌面版 1 下载Jetbrains toolbox 2 安装Space Desktop 安装 登录 三 IDE连接JetBrains Space 以Pychar
  • 提供计算机屏蔽电缆djypvp价格便宜,计算机屏蔽电缆-DJYPVP价格

    计算机屏蔽电缆 DJYPVP价格一 用途 选用介点常数小的高压聚乙烯绝缘 采用对绞 对屏 总屏 或三线组绞合 组屏蔽 组屏总屏 等结构形式 具有介质损耗小 传输信号能力强 抗干扰性能好等特点 能可靠传输微弱模拟信号或数字信号 可广泛地用于发
  • Java中URI 和 URL 的区别

    URI 和 URL 的区别 文章目录 URI 和 URL 的区别 1 URI 2 URL 3 总结 参考文章 https blog csdn net zcc7up article details 73551250 1 URI 表示一个 统一
  • 自己写的一个非常简洁的DDS信号发生器以及验证

    DDS其实就是输出点 直接画出波形 例子1 假设基带采样时钟是360M 如果每个完整的正弦波形用360个点画出来 构造出来的DDS波形是360M 360 1M 例子2 在同样的采样时钟之下 如果我们要DDS出一个0 5M的波形怎么办呢 其实
  • Hive性能优化全面解析

    问题导读 1 Hive表设计层面优化有哪些内容 2 语法和参数层面如何进行优化 3 如何进行Join Group By Order By COUNT DISTINCT优化 4 Hive架构层面如何优化 在工作中使用hive比较多 也写了很多
  • ES6的模块化实现(数据共享)

    组件模块化 将一些数据只能在接收了的文件中使用 在多人开发中就不会出现自己的的内容被别人改了的现象 只要导出了就可以在多个文件中使用 可以一次性导出多个数据 也可以一次接收多个数据 下面是方法 方法一 直接共享 导出 export 数据 导
  • android 签字版

    public class DrawLineLayout extends View private static final float STROKE WIDTH 5f Need to track this so the dirty regi
  • jdbc 通过rs.getString()获取数据库中的时间字段问题

    在mysql中的一张表中存在一个字段opr time为datetime类型 在JDBC 中通过rs getString opr time 来获取使会在日期后面添加 0 例如日期为 2014 06 01 12 10 20 查询出来为 2014
  • 机器学习算法——决策树3(CART决策树算法)

    CART决策树使用 基尼指数 Gini index 来选择划分属性 我们希望决策树的分支结点所包含的样本尽可能属于同一类别 即节点的纯度越来越高 数据集D的纯度可用基尼值来度量 Gini D 越小 则数据集D的纯度越高 属性a的基尼指数定义
  • 机器学习实战之Apriori

    1 关联分析 1 1 定义 关联分析是一种在大规模数据上寻找物品间隐含关系的一种任务 这种关系有2种形式 频繁项集和关联规则 1 频繁项集 frequent item sets 经常出现在一起的物品的集合 2 关联规则 associatio
  • 飞机减震器的MATLAB建模和仿真模拟

    飞机减震器的MATLAB建模和仿真模拟 飞机减震器是飞机悬挂系统中的重要组成部分 用于减少飞机在起飞 降落和飞行过程中受到的冲击和振动 在本文中 我们将使用MATLAB进行飞机减震器的建模和仿真模拟 以评估其性能和效果 建立减震器模型 首先
  • Eclipse免费下载(附安装教程)

    软件下载 软件名称 Eclipse 软件大小 750MB 安装环境 Windows 下载链接 https pan baidu com s 1OToZBbONikUYnaS1PN1kRg 提 取 码 geek 建议复制粘贴链接与提取码 安装教
  • 晶振的构造及工作原理

    咱搞硬件的 应该都使用过晶振 上次写开关电源环路的零极点的时候 忽然想到晶振是自己起振的 如果从环路的角度看 应该就是利用的环路不稳定的特性 产生自激振荡 除此之外 我又想到下面这些问题 那么我们使用晶体的时候 电路的环路的传递函数是怎么样
  • scp复制本地文件到远程服务器,scp 本地文件到远程服务器

    linux中scp命令的使用 linux远程拷贝文件命令 scp scp secure corp 1 从本地拷贝文件到远程服务器scp opt script test pl root 192 168 3 130 将本地 opt scritp
  • 量化投资学习-4:股票与美女4-美女自身赚钱的能力

    美女分几种 一种是花瓶式的美女 完全靠的是美貌 靠美貌而吸引了众人的注意力 完全把选择权交个了众人 靠众人的喜欢才有价值 当美貌褪去 众人也就跟着退去 另一种集才华与美貌于一身的美女 不光鲜外在的外貌 漂亮的K线图的走势 还有强大的内在才华
  • AES(Advanced Encryption Standard) Intrinsics各函数介绍

    AES为高级加密标准 是较流行的一种密码算法 SIMD相关头文件包括 include