/** * verify using bcmath extension */ function _verifyByBcmath($message, $sig, $sigKeys) { $p = $sigKeys['p']; $q = $sigKeys['q']; $g = $sigKeys['g']; $pubKey = $sigKeys['pub_key']; list($r_sig, $s_sig) = explode(':', $sig); $r_sig = base64_decode($r_sig); $s_sig = base64_decode($s_sig); $s1 = Security_DSA::_bindecBcmath($r_sig); $s2 = Security_DSA::_bindecBcmath($s_sig); $w = Security_DSA::_invertBcmath($s2, $q); $hash_m = Security_DSA::_hexdecBcmath(sha1($message)); $u1 = bcmod(bcmul($hash_m, $w), $q); $u2 = bcmod(bcmul($s1, $w), $q); $v = bcmod(bcmod(bcmul(bcmod(Security_DSA::_powmodBcmath($g, $u1, $p), $p), bcmod(Security_DSA::_powmodBcmath($pubKey, $u2, $p), $p)), $p), $q); return bccomp($v, $s1) == 0; }