インテル® インテグレーテッド・パフォーマンス・プリミティブ (インテル® IPP) Cryptography は、広範なセキュアで効率良い暗号化アルゴリズムの実装を提供するソフトウェア・ライブラリーです。
インテル® IPP Cryptography は、次のスイート製品の一部としてインストールされます。
また、コミュニティー・ライセンス・プログラム (英語) の下でスタンドアロン・パッケージとして利用することもできます。
インテル® IPP Cryptography は、輸出規制の対象製品であり、特別な申請プロセスにより取得する必要があります。詳細は、「インテル® IPP Cryptography ライブラリーはどこからダウンロードできますか?」 (英語) を参照してください。
インテル® IPP Cryptography をインストール後、ターゲット・プラットフォーム・アーキテクチャーに応じて適切なスクリプトを実行して、IPPCRYPTOROOT、LD_LIBRARY_PATH、および NLSPATH 環境変数を設定します。スクリプトは、<install_dir>/ippcp/bin にあります。
デフォルトでは、<install_dir> は次のとおりです。
インテル® IPP Cryptography を初めて使用される方のために、以下に簡単なアプリケーションのサンプルコードを示します。
#include "ippcp.h"
#include <stdio.h>
#define ippCPUID_MMX 0x00000001 /* インテル(R) MMX(R) テクノロジー */
#define ippCPUID_SSE 0x00000002 /* インテル(R) ストリーミング SIMD 拡張命令 (インテル(R) SSE) */
#define ippCPUID_SSE2 0x00000004 /* インテル(R) SSE2 */
#define ippCPUID_SSE3 0x00000008 /* インテル(R) SSE3 */
#define ippCPUID_SSSE3 0x00000010 /* インテル(R) SSSE3 */
#define ippCPUID_MOVBE 0x00000020 /* プロセッサーによる MOVBE 命令のサポート */
#define ippCPUID_SSE41 0x00000040 /* インテル(R) SSE4.1 */
#define ippCPUID_SSE42 0x00000080 /* インテル(R) SSE4.2 */
#define ippCPUID_AVX 0x00000100 /* インテル(R) アドバンスト・ベクトル・エクステンション (インテル(R) AVX) */
#define ippAVX_ENABLEDBYOS 0x00000200 /* OS によるインテル(R) AVX サポート */
#define ippCPUID_AES 0x00000400 /* インテル(R) AES New Instructions (インテル(R) AES-NI) */
#define ippCPUID_CLMUL 0x00000800 /* PCLMULQDQ 命令 */
#define ippCPUID_ABR 0x00001000 /* 予約済み */
#define ippCPUID_RDRAND 0x00002000 /* 乱数読み取り命令 */
#define ippCPUID_F16C 0x00004000 /* Float16 命令 */
#define ippCPUID_AVX2 0x00008000 /* インテル(R) AVX2 */
#define ippCPUID_ADCOX 0x00010000 /* ADCX および ADOX 命令 */
#define ippCPUID_RDSEED 0x00020000 /* RDSEED 命令 */
#define ippCPUID_PREFETCHW 0x00040000 /* PREFETCHW 命令 */
#define ippCPUID_SHA 0x00080000 /* インテル(R) SHA 拡張 */
#define ippCPUID_AVX512F 0x00100000 /* インテル(R) AVX-512 基本命令 */
#define ippCPUID_AVX512CD 0x00200000 /* インテル(R) AVX-512 競合検出命令 */
#define ippCPUID_AVX512ER 0x00400000 /* インテル(R) AVX-512 指数および逆数命令 */
#define ippCPUID_AVX512PF 0x00800000 /* インテル(R) AVX-512 プリフェッチ命令 */
#define ippCPUID_AVX512BW 0x01000000 /* インテル(R) AVX-512 バイトおよびワード命令 */
#define ippCPUID_AVX512DQ 0x02000000 /* インテル(R) AVX-512 ダブルワードおよびクワッドワード命令 */
#define ippCPUID_AVX512VL 0x04000000 /* インテル(R) AVX-512 ベクトル長拡張 */
#define ippCPUID_AVX512VBMI 0x08000000 /* インテル(R) AVX-512 ベクトルビット操作命令 */
#define ippCPUID_MPX 0x10000000 /* インテル(R) メモリー・プロテクション・エクステンション */
#define ippCPUID_AVX512_4FMADDPS 0x20000000 /* インテル(R) AVX-512 DL 単精度浮動小数点 */
#define ippCPUID_AVX512_4VNNIW 0x40000000 /* インテル(R) AVX-512 DL 拡張ワード変数精度 */
#define ippCPUID_KNC 0x80000000 /* インテル(R) Xeon Phi(TM) コプロセッサー */
int main(int argc, char* argv[])
{
const IppLibraryVersion *lib;
IppStatus status;
Ipp64u mask, emask;
/* インテル(R) IPP Cryptography ライブラリーのバージョン情報を取得します */
lib = ippcpGetLibVersion();
printf("%s %s\n", lib->Name, lib->Version);
/* CPU の機能と選択したライブラリー・レベルで有効な機能を取得します */
status = ippcpGetCpuFeatures( &mask );
if( ippStsNoErr == status ) {
emask = ippcpGetEnabledCpuFeatures();
printf("CPU でサポートされる機能\tインテル(R) IPP Cryptography でサポートされる機能\n");
printf("-----------------------------------------\n");
printf(" ippCPUID_MMX = ");
printf("%c\t%c\t",( mask & ippCPUID_MMX ) ? 'Y':'N',( emask & ippCPUID_MMX ) ? 'Y':'N');
printf("インテル(R) MMX(R) テクノロジー\n");
printf(" ippCPUID_SSE = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE ) ? 'Y':'N',( emask & ippCPUID_SSE ) ? 'Y':'N');
printf("インテル(R) SSE\n");
printf(" ippCPUID_SSE2 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE2 ) ? 'Y':'N',( emask & ippCPUID_SSE2 ) ? 'Y':'N');
printf("インテル(R) SSE2\n");
printf(" ippCPUID_SSE3 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE3 ) ? 'Y':'N',( emask & ippCPUID_SSE3 ) ? 'Y':'N');
printf("インテル(R) SSE3\n");
printf(" ippCPUID_SSSE3 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSSE3 ) ? 'Y':'N',( emask & ippCPUID_SSSE3 ) ? 'Y':'N');
printf("インテル(R) SSSE3\n");
printf(" ippCPUID_MOVBE = ");
printf("%c\t%c\t",( mask & ippCPUID_MOVBE ) ? 'Y':'N',( emask & ippCPUID_MOVBE ) ? 'Y':'N');
printf("プロセッサーによる MOVBE 命令のサポート\n");
printf(" ippCPUID_SSE41 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE41 ) ? 'Y':'N',( emask & ippCPUID_SSE41 ) ? 'Y':'N');
printf("インテル(R) SSE4.1\n");
printf(" ippCPUID_SSE42 = ");
printf("%c\t%c\t",( mask & ippCPUID_SSE42 ) ? 'Y':'N',( emask & ippCPUID_SSE42 ) ? 'Y':'N');
printf("インテル(R) SSE4.2\n");
printf(" ippCPUID_AVX = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX ) ? 'Y':'N',( emask & ippCPUID_AVX ) ? 'Y':'N');
printf("インテル(R) AVX 命令セット\n");
printf(" ippAVX_ENABLEDBYOS = ");
printf("%c\t%c\t",( mask & ippAVX_ENABLEDBYOS ) ? 'Y':'N',( emask & ippAVX_ENABLEDBYOS ) ? 'Y':'N');
printf("OS によるインテル(R) AVX サポート\n");
printf(" ippCPUID_AES = ");
printf("%c\t%c\t",( mask & ippCPUID_AES ) ? 'Y':'N',( emask & ippCPUID_AES ) ? 'Y':'N');
printf("インテル(R) AES 命令\n");
printf(" ippCPUID_SHA = ");
printf("%c\t%c\t",( mask & ippCPUID_SHA ) ? 'Y':'N',( emask & ippCPUID_SHA ) ? 'Y':'N');
printf("インテル(R) SHA 命令\n");
printf(" ippCPUID_CLMUL = ");
printf("%c\t%c\t",( mask & ippCPUID_CLMUL ) ? 'Y':'N',( emask & ippCPUID_CLMUL ) ? 'Y':'N');
printf("PCLMULQDQ 命令\n");
printf(" ippCPUID_RDRAND = ");
printf("%c\t%c\t",( mask & ippCPUID_RDRAND ) ? 'Y':'N',( emask & ippCPUID_RDRAND ) ? 'Y':'N');
printf("乱数読み取り命令\n");
printf(" ippCPUID_F16C = ");
printf("%c\t%c\t",( mask & ippCPUID_F16C ) ? 'Y':'N',( emask & ippCPUID_F16C ) ? 'Y':'N');
printf("Float16 命令\n");
printf(" ippCPUID_AVX2 = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX2 ) ? 'Y':'N',( emask & ippCPUID_AVX2 ) ? 'Y':'N');
printf("インテル(R) AVX2 命令セット\n");
printf(" ippCPUID_AVX512F = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX512F ) ? 'Y':'N',( emask & ippCPUID_AVX512F ) ? 'Y':'N');
printf("インテル(R) AVX-512 基本命令セット\n");
printf(" ippCPUID_AVX512CD = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX512CD ) ? 'Y':'N',( emask & ippCPUID_AVX512CD ) ? 'Y':'N');
printf("インテル(R) AVX-512 競合検出命令セット\n");
printf(" ippCPUID_AVX512ER = ");
printf("%c\t%c\t",( mask & ippCPUID_AVX512ER ) ? 'Y':'N',( emask & ippCPUID_AVX512ER ) ? 'Y':'N');
printf("インテル(R) AVX-512 指数および逆数命令セット\n");
printf(" ippCPUID_ADCOX = ");
printf("%c\t%c\t",( mask & ippCPUID_ADCOX ) ? 'Y':'N',( emask & ippCPUID_ADCOX ) ? 'Y':'N');
printf("ADCX および ADOX 命令\n");
printf(" ippCPUID_RDSEED = ");
printf("%c\t%c\t",( mask & ippCPUID_RDSEED ) ? 'Y':'N',( emask & ippCPUID_RDSEED ) ? 'Y':'N');
printf("RDSEED 命令\n");
printf(" ippCPUID_PREFETCHW = ");
printf("%c\t%c\t",( mask & ippCPUID_PREFETCHW ) ? 'Y':'N',( emask & ippCPUID_PREFETCHW ) ? 'Y':'N');
printf("PREFETCHW 命令\n");
printf(" ippCPUID_KNC = ");
printf("%c\t%c\t",( mask & ippCPUID_KNC ) ? 'Y':'N',( emask & ippCPUID_KNC ) ? 'Y':'N');
printf("インテル(R) Xeon Phi(TM) コプロセッサー命令セット\n");
}
return 0;
}
このアプリケーションは、次の 2 つのセクションで構成されています。
上記のサンプルコードをビルドする場合は、次のステップを実行します。
製品の詳細については、以下のオンラインリソースを参照してください。
ドキュメント |
説明 |
---|---|
インテル® IPP Cryptography ライブラリーの設定、開発環境、リンクモードに関する詳細なガイダンスを提供します。 |
|
インテル® IPP Cryptography 関数の詳細な説明が含まれます。 |
|
インテル® IPP 製品ページ (英語) |
サポートとオンライン・ドキュメントに関する情報を入手できます。 |
日本語の最新ドキュメントを入手できます。 |
|
最新情報を日本語で参照できます。 |
Intel、インテル、Intel ロゴ、Xeon、Intel Xeon Phi、MMX は、アメリカ合衆国および / またはその他の国における Intel Corporation またはその子会社の商標です。
* その他の社名、製品名などは、一般に各社の表示、商標または登録商標です。
© 2017-2018 Intel Corporation.
本ソフトウェアおよび関連ドキュメントは、インテルが著作権を有する著作物であり、その使用には付随する明示的なライセンス (「ライセンス」) が適用されます。ライセンスで特に明記されていない限り、インテルから書面による許可を得た場合を除き、本ソフトウェアまたは関連ドキュメントを使用、改変、複製、公表、配布、公開することはできません。
本ソフトウェアおよび関連ドキュメントは現状のまま提供され、ライセンスに明記されているものを除き、明示されているか否かにかかわらず、いかなる保証もいたしません。
最適化に関する注意事項 |
---|
インテル® コンパイラーでは、インテル® マイクロプロセッサーに限定されない最適化に関して、他社製マイクロプロセッサー用に同等の最適化を行えないことがあります。これには、インテル® ストリーミング SIMD 拡張命令 2、インテル® ストリーミング SIMD 拡張命令 3、インテル® ストリーミング SIMD 拡張命令 3 補足命令などの最適化が該当します。インテルは、他社製マイクロプロセッサーに関して、いかなる最適化の利用、機能、または効果も保証いたしません。本製品のマイクロプロセッサー依存の最適化は、インテル® マイクロプロセッサーでの使用を前提としています。インテル® マイクロアーキテクチャーに限定されない最適化のなかにも、インテル® マイクロプロセッサー用のものがあります。この注意事項で言及した命令セットの詳細については、該当する製品のユーザー・リファレンス・ガイドを参照してください。 注意事項の改訂 #20110804 |