/** * verify using gmp extendsions */ function _verifyByGmp($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); $p = gmp_init($p); $q = gmp_init($q); $g = gmp_init($g); $pubKey = gmp_init($pubKey); $s1 = Security_DSA::_bindecGmp($r_sig); $s2 = Security_DSA::_bindecGmp($s_sig); $w = gmp_invert($s2, $q); $hash_m = gmp_init('0x' . sha1($message)); $u1 = gmp_mod(gmp_mul($hash_m, $w), $q); $u2 = gmp_mod(gmp_mul($s1, $w), $q); $v = gmp_mod(gmp_mod(gmp_mul(gmp_powm($g, $u1, $p), gmp_powm($pubKey, $u2, $p)), $p), $q); return gmp_cmp($v, $s1) == 0; }