예제 #1
0
 /**
  * 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;
 }