camellia.c用のテストコードを掲載しておきます。

google:camellia.cと検索して出てくるhttp://info.isl.ntt.co.jp/crypt/camellia/technology.html
にてダウンロードできる
「参照コード (C, 7.8KB)」( camellia.c )
をテストするためのソースコードです。
C++なのや無駄なところや意味不明なところもありますが気にしないでください。^^;

part1 http://d.hatena.ne.jp/studiokingyo/20050918


/**
@brief camellia.cのテスト用コードです。

@auther d金魚
@note
licence : NYSL
*/



#include <windows.h>

#if 0
#include <helper/pause.hpp>
#include "dkutil_c/dkcOSIndependent.h"
#define PAUSE__() dkutil::ConsoleDebugPause()
#else
typedef unsigned char uint8;

#define PAUSE__()
#endif

#include "camellia.c"
#include <iostream>

#define KEYOBJ_MAX_SIZE 280
#define TARGET_SIZE 16

uint8 gPlanetext[16] = {
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10
};

template<size_t keysize,size_t keyobjsize,size_t buffer_size>
struct CamelliaTest{

void operator()(const uint8 *key,
const uint8 *Planetext,const uint8 *Ciphertext)
{
using namespace std;
uint8 keyobj[keyobjsize];
uint8 dest[buffer_size];
uint8 dest2[buffer_size];
memset(keyobj,0xff,sizeof(keyobj));

Camellia_Ekeygen(keysize,key,keyobj);
Camellia_Encrypt(keysize,Planetext,keyobj,dest);
if(0 != memcmp(dest,Ciphertext,sizeof(dest))){
cout << "encrypt error " << keysize << endl;
}
Camellia_Ekeygen(keysize,key,keyobj);
Camellia_Decrypt(keysize,dest,keyobj,dest2);
if(0 != memcmp(Planetext,dest2,sizeof(Planetext))){
cout << "decrypt error " << keysize << endl;
}
}
};




void key128(){
uint8 key[16] = {
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10
};

const uint8 Ciphertext[16]={
0x67,0x67,0x31,0x38,0x54,0x96,0x69,0x73,
0x08,0x57,0x06,0x56,0x48,0xea,0xbe,0x43
};
//128bit == 207まで
CamelliaTest<128,KEYOBJ_MAX_SIZE,16> tester;
tester(key,gPlanetext,Ciphertext);
}

void key192(){
uint8 key[24]={
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77
};
//192bit == 271まで
const uint8 Ciphertext[16] = {
0xb4,0x99,0x34,0x01,0xb3,0xe9,0x96,0xf8,
0x4e,0xe5,0xce,0xe7,0xd7,0x9b,0x09,0xb9
};

CamelliaTest<192,KEYOBJ_MAX_SIZE,16> tester;
tester(key,gPlanetext,Ciphertext);

}

void key256(){
uint8 key[32]={
0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef,
0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,
0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,
0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff
};
//256bit == 271まで
const uint8 Ciphertext[16] = {
0x9a,0xcc,0x23,0x7d,0xff,0x16,0xd7,0x6c,
0x20,0xef,0x7c,0x91,0x9e,0x3a,0x75,0x09
};
CamelliaTest<256,KEYOBJ_MAX_SIZE,16> tester;
tester(key,gPlanetext,Ciphertext);
}

int main(){
//sbox_create();
key128();
key192();
key256();



PAUSE__();
return 0;
}

追記:一部compare部分のサイズがバグってます。各自直してください。(無責任)