1.10.2011

Building Crypto++ 5.6.1

Crypto++ 5.6.1のビルド

POPサーバに接続するためのパスワードを暗号化したいので

Crypto++を導入することにする。

http://cryptopp.com/

Readme を見る限り、3種類のコンパイルができるらしい。

On Windows, Crypto++ can be compiled into 3 forms: a static library

including all algorithms, a DLL with only FIPS Approved algorithms, and

a static library with only algorithms not in the DLL.

簡単に言えば、

 (a) スタティックライブラリ<全部入り>

 (b) DLL<一部>

 (c) スタティックライブラリ<b以外>

となるだろうか。

以下は、Windows Vista + VC++ 2010 Express環境におけるビルド手順の一例である。

(準備)

1. Crypto++ 5.6.1 をダウンロードし、適当な場所へ展開。

 (ここでは「E:\lib\cryptopp」とする)

2. 最新の Microsoft Windows SDK をインストール

http://msdn.microsoft.com/en-us/windowsserver/bb980924.aspx

※VC++ Express Edition(+Vista?) だとヘッダファイルが足りない模様なので追加する(※1)

https://jira.secondlife.com/browse/SNOW-728?page=com.atlassian.jira.plugin.system.issuetabpanels:changehistory-tabpanel

3. winres.h を参照可能な場所へコピー

 サンプル用のヘッダファイルをコピー

 %PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Samples\winui\tsf\tsfapp\winres.h

 ※とりあえず「E:\lib\cryptopp」直下へ

(ビルド)

1. cryptest.sln を開く

 ・アプリケーションの選択が出たので 「VC++ Express 10」 を選択

 変換処理でいくつか警告が出るも問題なし

 ※「VC++ Express 2010」では変換エラーとなってしまうので注意

2. 構成を「Debug」-「Win32」にしてソリューション全体をビルド

 作成されたファイル:

E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.dll   ⇒ (b)

E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.exp

E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.lib   ⇒ (c)

E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.mac.done

E:\lib\cryptopp\Win32\DLL_Output\Debug\cryptopp.pdb

E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.exe

E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.exp

E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.ilk

E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.lib

E:\lib\cryptopp\Win32\DLL_Output\Debug\dlltest.pdb

E:\lib\cryptopp\Win32\DLL_Output\Debug\vc80.pdb

E:\lib\cryptopp\Win32\Output\Debug\cryptest.exe

E:\lib\cryptopp\Win32\Output\Debug\cryptest.ilk

E:\lib\cryptopp\Win32\Output\Debug\cryptest.pdb

E:\lib\cryptopp\Win32\Output\Debug\cryptlib.lib   ⇒ (a)

E:\lib\cryptopp\Win32\Output\Debug\vc80.idb

E:\lib\cryptopp\Win32\Output\Debug\vc80.pdb

 ※lib ファイルを他の場所に移動する場合は、一緒に pdb ファイルも移動しないと

  リンカーエラー LNK4099 が出る

3. 同様に「Release」-「Win32」にしてソリューション全体をビルド

 作成されたファイル:

E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.dll   ⇒ (b)

E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.exp

E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.lib   ⇒ (c)

E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.mac.done

E:\lib\cryptopp\Win32\DLL_Output\Release\cryptopp.pdb

E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.exe

E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.exp

E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.lib

E:\lib\cryptopp\Win32\DLL_Output\Release\dlltest.pdb

E:\lib\cryptopp\Win32\DLL_Output\Release\vc80.pdb

E:\lib\cryptopp\Win32\Output\Release\cryptest.exe

E:\lib\cryptopp\Win32\Output\Release\cryptest.pdb

E:\lib\cryptopp\Win32\Output\Release\cryptlib.lib   ⇒ (a)

E:\lib\cryptopp\Win32\Output\Release\vc80.pdb

 (b) 適当なPATH(環境変数)の通る場所へ保存

(スタティックライブラリとしての利用)

1. 自分のプロジェクトで、プロジェクト - 追加 - 既存の項目から

 構成に合わせた場所の「cryptolib.lib」を追加

 (E:\lib\cryptopp\Win32\Output\[Debug|Release]\cryptlib.lib)

 ※#pragma comment によってライブラリの使い分けも可能?

2. オプションの「C++」-「コード生成」-「ランタイム ライブラリ」が

 「マルチスレッド(/MT)」か「マルチスレッド デバッグ(/MTd)」であることを確認

 (さもなければ、リンカーによる大量のLNK2005エラーに

  見舞われることとなる)

3. 使いたいヘッダファイルをインクルード(一例) ※2

 #include <cryptopp/aes.h>

 #include <cryptopp/dh.h>

 #include <cryptopp/modes.h>

 #include <cryptopp/osrng.h>

 ※E:\lib がインクルードディレクトリに設定されている前提

(DLLとしての利用)

1. ライブラリ ディレクトリに「cryptopp.lib」のある場所を追加

 (E:\lib\cryptopp\Win32\DLL_Output\[Debug|Release]\cryptopp.lib)

2. dll.h をインクルード

 #include <cryptopp/dll.h>

参考:Crypto++R Holds the Key to Encrypting Your C++ Application Data

http://www.codeguru.com/cpp/w-p/win32/security/article.php/c11953

※1 最初に出たエラー

エラー  1  fatal error RC1015: cannot open include file 'winres.h'.  e:\lib\cryptopp\cryptopp.rc  10

エラー  2  fatal error LNK1181: 入力ファイル '.\win32\dll_output\debug\cryptopp.lib' を開けません。  dlltest

※2 コンパイルで warning が大量に出るので抑止(それでも#4505が1個でる)

 #pragma warning(push)

 #pragma warning(disable: 4083 100 127 189 244 505 512 615)

 #include <cryptopp/xxxxxxxx.h>

 #pragma warning(pop)

0 件のコメント:

コメントを投稿