TsubuyakiSoup.as 認証できない不具合修正 その2

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

  • hk1v
  • 2013/8/23 15:57
#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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX