CSPのデフォルトのキーコンテナが存在しない場合は、TsubuyakiSoupのHMAC_SHA1()が失敗してしまい、結果的にツイッターの認証ができない状態になるので直してみた。CryptAcquireContext()が失敗したら、CRYPT_NEWKEYSETしてるだけです。 関連→ 認証できない不具合修正&API 1.1 対応化 http://codetter.com/?p=910
CSPのデフォルトのキーコンテナが存在しない場合は、TsubuyakiSoupのHMAC_SHA1()が失敗してしまい、結果的にツイッターの認証ができない状態になるので直してみた。CryptAcquireContext()が失敗したら、CRYPT_NEWKEYSETしてるだけです。 関連→ 認証できない不具合修正&API 1.1 対応化 http://codetter.com/?p=910
#defcfunc HMAC_SHA1 str p1, str p2HS_p1 = p1HS_p2 = p2HS_SigLen = 0HS_dest = ""//ハッシュHS_hProv = 0HS_hKey = 0HS_hHash = 0sdim HS_HmacInfo,14lpoke HS_HmacInfo, 0, 0x00008004;keyの生成dim HS_keyBlob,350poke HS_keyBlob,0,0x8 ;bTypepoke HS_keyBlob,1,2 ;bVersionlpoke HS_keyBlob,2,0 ;reservedHS_keyBlob(1) = 0x00006602 ;aiKeyAlgHS_keyBlob(2) = strlen(HS_p2) ;lenmemcpy HS_keyBlob, HS_p2, HS_keyBlob(2), 12, 0//コンテキストの取得res = _CryptAcquireContext(HS_hProv, 0, 0, 1, 0)if ( res == 0 ){// ない場合は新しく作るres = _CryptAcquireContext(HS_hProv, 0, 0, 1, 8/*CRYPT_NEWKEYSET*/)}if ( res ) {//キーのインポートif ( _CryptImportKey(HS_hProv, HS_keyBlob, (12+HS_keyBlob(2)), 0, 0x00000100, HS_hKey) ) {//ハッシュ初期化if ( _CryptCreateHash(HS_hProv, 0x00008009, HS_hKey, 0, HS_hHash) ) {//ハッシュパラメータの設定if ( _CryptSetHashParam(HS_hHash, 0x0005, HS_HmacInfo, 0) ) {//ハッシュに書き込みif ( _CryptHashData(HS_hHash, HS_p1, strlen(HS_p1), 0) ) {//ハッシュ取得if ( _CryptGetHashParam(HS_hHash, 0x0002, 0, HS_size, 0) ) {sdim HS_dest, HS_sizeif ( _CryptGetHashParam(HS_hHash, 0x0002, varptr(HS_dest), HS_size, 0) ) {}}}}//ハッシュハンドルの破棄_CryptDestroyHash HS_hHash}//キーハンドルの破棄_CryptDestroyKey HS_hKey}//ハンドルの破棄_CryptReleaseContext HS_hProv, 0}return HS_dest