インテル® C++ コンパイラー 19.0 デベロッパー・ガイドおよびリファレンス
キャリーなし組込み関数および AES (Advanced Encryption Standard) 組込み関数のプロトタイプは、wmmintrin.h ファイル内にあります。
これらの組込み関数を使用する場合、次のように immintrin.h ファイルをインクルードします。
#include <immintrin.h>
単一の汎用ブロック暗号化組込み関数を次に示します。
__m128i _mm_clmulepi64_si128(__m128i v1, __m128i v2, const int imm8);
v1 中の 1 つのクワッドワードと v2 中の 1 つのクワッドワードのキャリーなし乗算を実行して、結果を返します。imm8 値は、v1 および v2 中の使用するクワッドワードを特定するのに使用されます。
対応する命令: PCLMULQDQ
AES 組込み関数を次に示します。
__m128i _mm_aesdec_si128(__m128i v, __m128i rkey);
rkey からの 128 ビットのラウンドキーと v からの 128 ビットのデータ (状態) に対して、Equivalent Inverse Cipher を使用して、1 ラウンドの AES 暗号解読処理を行います。
対応する命令: AESDEC
__m128i _mm_aesdeclast_si128(__m128i v, __m128i rkey);
rkey からの 128 ビットのラウンドキーと v からの 128 ビットのデータ (状態) に対して、Equivalent Inverse Cipher を使用して、最終ラウンドの AES 暗号解読処理を行います。
対応する命令: AESDECLAST
__m128i _mm_aesenc_si128(__m128i v, __m128i rkey);
rkey からの 128 ビットのラウンドキーと v からの 128 ビットのデータ (状態) に対して、1 ラウンドの AES 暗号化処理を行います。
対応する命令: AESENC
__m128i _mm_aesenclast_si128(__m128i v, __m128i rkey);
rkey からの 128 ビットのラウンドキーと v からの 128 ビットのデータ (状態) に対して、最終ラウンドの AES 暗号化処理を行います。
対応する命令: AESENCLAST
__m128i _mm_aesimc_si128(__m128i v);
v からの 128 ビットのラウンドキーに対して InvMixColumn 変換を行い、結果を返します。
対応する命令: AESIMC
__m128i _mm_aeskeygenassist_si128(__m128i ckey, const int rcon);
ckey で指定されている 128 ビットのデータに対して、rcon で指定されている 8 ビットのラウンド定数 (RCON) を使用して、AES のラウンドキーの生成を支援し、結果を返します。
対応する命令: AESKEYGENASSIST