Brian の AES ライブラリをスタティックリンクして使用する

VC++ 2010 プロジェクトに与える プロパティシートファイル

aesBrianvs2010-11-01-11.props を作った.

  • インクルードディレクトリ追加
  • ライブラリディレクトリ追加
  • 共通必須ライブラリ aes.lib と 選択的必須ライブラリ lib_asm_x86_v2c.lib をリンク
    • マクロ $(Configuration) を使用しているため,構成 Debug/Release のどちらにも適用可能
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ImportGroup Label="PropertySheets" />
  <PropertyGroup Label="UserMacros" />
  <PropertyGroup />
  <ItemDefinitionGroup>
    <ClCompile>
      <AdditionalIncludeDirectories>C:\Software\Develop\aesBrian\aes-vs2010-11-01-11</AdditionalIncludeDirectories>
    </ClCompile>
    <Link>
      <AdditionalLibraryDirectories>C:\Software\Develop\aesBrian\aes-vs2010-11-01-11\lib\Win32\$(Configuration);%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
      <AdditionalDependencies>aes.lib;lib_asm_x86_v2c.lib;%(AdditionalDependencies)</AdditionalDependencies>
    </Link>
  </ItemDefinitionGroup>
  <ItemGroup />
</Project>

テストコード

main.cpp を書いた.使用法は C:\Software\Develop\aesBrian\aes-vs2010-11-01-11\aes.txt を参照する.AES-CBC-256 で暗号化し,復号化する.復号化結果が 16 バイトでぶち切れてしまっている.「aes_encrypt_ctx brian」で検索して,http://forums.devshed.com/c-programming-42/aes-encrypt-decrypt-in-c-687368.html を読んだりして,何が問題なのか探しているところ.でも誰かに教えて欲しい.

main.cpp
#include <memory>
#include <aes.h>

/** AES 暗号化関数
int aes_cbc_encrypt(
	const unsigned char *ibuf,		// 暗号化するデータ
	unsigned char *obuf,			// 暗号化後のデータ
	int len,						// 入出力データサイズ
	unsigned char *iv,				// 初期化ベクトル
	const aes_encrypt_ctx cx[1]		// 鍵
);
*/

int main ( int argc, char ** argv )
{
	const char *key = "gjopes4gp4ejypoj5ypj5h";
	const char *iv  = "asdfghjkloiuytrewwqwea";
	const char *a   = "1234567890123456789012";
	unsigned char b[32];
	unsigned char c[32];
	::memset( b, 0, sizeof(b) );
	::memset( c, 0, sizeof(c) );

	// aesBrian 使用時に必要
	aes_init();

	// 暗号化
	aes_encrypt_ctx cxEnc[2];
	aes_encrypt_key256( (unsigned char*)key, cxEnc );
	aes_encrypt( (unsigned char*)a, b, cxEnc );

	// 復号化
	aes_decrypt_ctx cxDec[2];
	aes_decrypt_key256( (unsigned char*)key, cxDec );
	aes_decrypt( b, c, cxDec );

	return 0;
}

2011年1月26日11時30分追記

AES-CBC を使用するには別の関数を利用する必要があった.が,その関数を使用しての暗号化/復号化がまだできない.