やっぱりそーすふぉーぢどっとねっとだね^^

最近、SHA224,384系のプログラムをチマチマと組んでいた・・・ら、
http://sourceforge.net/projects/sha/
既にライセンスが緩いフリーのライブラリはあるようで・・・。(´Д⊂グスン
私の苦労っていったい・・・
という事で格言欲しい機能があったらsourceforge.netで探せ
以上!

で、例によって暗号化系リンク集
SHA draft ??
http://www.securitytechnet.com/resource/ietf/ind-draft/draft-nesser-otp-sha-256-384-512-00.txt
ハッシュアルゴリズム一覧
http://www.aladdin.co.jp/etoken/algorithms.html
http://www.wani.net/bak/crypt/hash.htm
WikiPediaでのMD5の紹介 (問題点も指摘している)
http://ja.wikipedia.org/wiki/MD5
RIPEMDのソース
http://www.geocities.co.jp/SiliconValley-Oakland/8878/lab19/lab19.html
マニアックなフィンガープリントアルゴリズム

  • PANAMA
  • TIGER
  • DSS (Digital Signature Standard)

Fast Project
http://www10.plala.or.jp/fastp/
http://hp.vector.co.jp/authors/VA033110/
なんか、かなり沢山のシグネチャ生成アルゴリズムがすでに作られているらしい。
さらにアセンブラ・・・・。
私の苦労っていったい・・・。(´Д⊂グスン
ぶっちゃけ、このDLL使ってアプリケーション作った方が幸せって奴だろう・・・。

と、言うことで、FastHash.dllのラッパーでも

このソースコードのライセンスはNYSLです。


#include "FastHashDll.h"

namespace dkutil{

class FastHashDllManager{
static const char *fasthash_func_name[];
///DLLを管理するクラス
DLLManager mgr;
///fasthashの関数をロード
bool LoadFastHashFunction(const char *filename,DLLManager &d){
if(NULL==filename){
return false;
}
if(false==d.reset(filename)){
return false;
}
for(int i=0;fasthash_func_name[i] != NULL;i++)
{
if(false==d.load_function(fasthash_func_name[i])){
return false;
}
}
# define FHLOAD(s) m##s = (s##_Type)d.find(#s)
FHLOAD(CreateHashEngineObject);
FHLOAD(CreateHashValueObject);
FHLOAD(CloseHashEngineHandle);
FHLOAD(CloseHashValueHandle);
FHLOAD(ComputeHash);
FHLOAD(ModifyHash);
FHLOAD(InitHashValue);
FHLOAD(GetHashValue);
FHLOAD(GetHashValueFromEngine);
FHLOAD(GetHashType);
FHLOAD(GetAllHashTypeNum);
FHLOAD(EnumHashType);
FHLOAD(GetHashTypeInfo);
FHLOAD(HashValueToHashString);
FHLOAD(GetDllVersion);
FHLOAD(GetDllVersionString);
# undef FHLOAD

return true;
}
public:
typedef HHASH_ENGINE (WINAPI *CreateHashEngineObject_Type)(
DWORD dwHashType);
typedef HHASH_VALUE (WINAPI *CreateHashValueObject_Type)(
HHASH_ENGINE hEngine);
typedef BOOL (WINAPI *CloseHashEngineHandle_Type)(
HHASH_ENGINE hEngine);
typedef BOOL (WINAPI *CloseHashValueHandle_Type)(
HHASH_VALUE hValue);
typedef BOOL (WINAPI *ComputeHash_Type)(
HHASH_ENGINE hEngine, LPCVOID lpBuffer,
DWORD dwNumberOfBytesToCompute);
typedef BOOL (WINAPI *ModifyHash_Type)(
HHASH_ENGINE hEngine, DWORD dwRemove, DWORD dwAdd);
typedef BOOL (WINAPI *InitHashValue_Type)(
HHASH_ENGINE hEngine);
typedef DWORD (WINAPI *GetHashValue_Type)(
HHASH_VALUE hValue, LPVOID lpBuffer, DWORD dwHashType);
typedef DWORD (WINAPI *GetHashValueFromEngine_Type)(
HHASH_ENGINE hEngine, LPVOID lpBuffer, DWORD dwHashType);
typedef DWORD (WINAPI *GetHashType_Type)(
HHASH_ENGINE hEngine);
typedef DWORD (WINAPI *GetAllHashTypeNum_Type)(VOID);
typedef BOOL (WINAPI *EnumHashType_Type)(
DWORD dwIndex, LPTSTR lpName, LPDWORD lpdwHashType,
LPDWORD lpdwHashValueSize);
typedef BOOL (WINAPI *GetHashTypeInfo_Type)(
DWORD dwHashType, LPTSTR lpName, LPDWORD lpdwHashValueSize);
typedef VOID (WINAPI *HashValueToHashString_Type)(
LPTSTR lpString, LPCVOID lpValue, DWORD dwHashSize, BOOL bSmallString);
typedef BOOL (WINAPI *GetDllVersion_Type)(
LPDWORD lpMajorVersion, LPDWORD lpMinorVersion);
typedef BOOL (WINAPI *GetDllVersionString_Type)(LPTSTR lpBuffer);
private:
CreateHashEngineObject_Type mCreateHashEngineObject;
CreateHashValueObject_Type mCreateHashValueObject;
CloseHashEngineHandle_Type mCloseHashEngineHandle;
CloseHashValueHandle_Type mCloseHashValueHandle;
ComputeHash_Type mComputeHash;
ModifyHash_Type mModifyHash;
InitHashValue_Type mInitHashValue;
GetHashValue_Type mGetHashValue;
GetHashValueFromEngine_Type mGetHashValueFromEngine;
GetHashType_Type mGetHashType;
GetAllHashTypeNum_Type mGetAllHashTypeNum;
EnumHashType_Type mEnumHashType;
GetHashTypeInfo_Type mGetHashTypeInfo;
HashValueToHashString_Type mHashValueToHashString;
GetDllVersion_Type mGetDllVersion;
GetDllVersionString_Type mGetDllVersionString;

bool mInited;

public:
FastHashDllManager(parm_string dllname){
reset(dllname);
}
~FastHashDllManager(){}

bool reset(parm_string dllname){
mInited = LoadFastHashFunction(dllname.c_str(),mgr);
return mInited;
}
void *find(parm_string function_name){
return mgr.find(function_name.c_str());
}
bool empty()const{
return !mInited;
}
HHASH_ENGINE CreateHashEngineObject(DWORD dwHashType){
return mCreateHashEngineObject(dwHashType);
}
HHASH_VALUE CreateHashValueObject(HHASH_ENGINE hEngine){
return mCreateHashValueObject(hEngine);
}
BOOL CloseHashEngineHandle(HHASH_ENGINE hEngine){
return mCloseHashEngineHandle(hEngine);
}
BOOL CloseHashValueHandle(HHASH_VALUE hValue){
return mCloseHashValueHandle(hValue);
}
BOOL ComputeHash(HHASH_ENGINE hEngine, LPCVOID lpBuffer,
DWORD dwNumberOfBytesToCompute){
return mComputeHash(hEngine,lpBuffer,
dwNumberOfBytesToCompute);
}
BOOL ModifyHash(HHASH_ENGINE hEngine, DWORD dwRemove,
DWORD dwAdd){
return mModifyHash(hEngine,dwRemove,dwAdd);
}
BOOL InitHashValue(HHASH_ENGINE hEngine){
return mInitHashValue(hEngine);
}
DWORD GetHashValue(HHASH_VALUE hValue, LPVOID lpBuffer,
DWORD dwHashType){
return mGetHashValue(hValue,lpBuffer,dwHashType);
}
DWORD GetHashValueFromEngine(HHASH_ENGINE hEngine,
LPVOID lpBuffer, DWORD dwHashType){
return mGetHashValueFromEngine(hEngine,
lpBuffer,dwHashType);
}
DWORD GetHashType(HHASH_ENGINE hEngine){
return mGetHashType(hEngine);
}
DWORD GetAllHashTypeNum(VOID){
return mGetAllHashTypeNum();
}
BOOL EnumHashType(DWORD dwIndex, LPTSTR lpName,
LPDWORD lpdwHashType,
LPDWORD lpdwHashValueSize){
return mEnumHashType(dwIndex,lpName,
lpdwHashType,lpdwHashValueSize);
}
BOOL GetHashTypeInfo(DWORD dwHashType, LPTSTR lpName,
LPDWORD lpdwHashValueSize){
return mGetHashTypeInfo(dwHashType,lpName,lpdwHashValueSize);
}
VOID HashValueToHashString(LPTSTR lpString, LPCVOID lpValue,
DWORD dwHashSize, BOOL bSmallString){
mHashValueToHashString(lpString,lpValue,
dwHashSize,bSmallString);
}
BOOL GetDllVersion(LPDWORD lpMajorVersion,
LPDWORD lpMinorVersion){
return mGetDllVersion(lpMajorVersion,lpMinorVersion);
}

BOOL GetDllVersionString(LPTSTR lpBuffer){
return mGetDllVersionString(lpBuffer);
}

};

const char *FastHashDllManager::fasthash_func_name[]={
"CreateHashEngineObject",
"CreateHashValueObject",
"CloseHashEngineHandle",
"CloseHashValueHandle",
"ComputeHash",
"ModifyHash",
"InitHashValue",
"GetHashValue",
"GetHashValueFromEngine",
"GetHashType",
"GetAllHashTypeNum",
"EnumHashType",
"GetHashTypeInfo",
"HashValueToHashString",
"GetDllVersion",
"GetDllVersionString",
NULL
};

}//end of dkutil namespace