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 p2 HS_p1 = p1 HS_p2 = p2 HS_SigLen = 0 HS_dest = "" //ハッシュ HS_hProv = 0 HS_hKey = 0 HS_hHash = 0 sdim HS_HmacInfo,14 lpoke HS_HmacInfo, 0, 0x00008004 ;keyの生成 dim HS_keyBlob,350 poke HS_keyBlob,0,0x8 ;bType poke HS_keyBlob,1,2 ;bVersion lpoke HS_keyBlob,2,0 ;reserved HS_keyBlob(1) = 0x00006602 ;aiKeyAlg HS_keyBlob(2) = strlen(HS_p2) ;len memcpy 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_size if ( _CryptGetHashParam(HS_hHash, 0x0002, varptr(HS_dest), HS_size, 0) ) { } } } } //ハッシュハンドルの破棄 _CryptDestroyHash HS_hHash } //キーハンドルの破棄 _CryptDestroyKey HS_hKey } //ハンドルの破棄 _CryptReleaseContext HS_hProv, 0 } return HS_dest