Horde_Pgp_Crypt_DSA::verify PHP Method

verify() public method

DSA verify.
public verify ( string $message, string $hash_alg, phpseclib\Math\BigInteger $r, phpseclib\Math\BigInteger $s ) : boolean
$message string Message.
$hash_alg string Hash algorithm.
$r phpseclib\Math\BigInteger r.
$s phpseclib\Math\BigInteger s.
return boolean True if verified.
    public function verify($message, $hash_alg, $r, $s)
    {
        $hash = new Crypt\Hash($hash_alg);
        $hash_m = new BigInteger($hash->hash($message), 256);
        $g = new BigInteger($this->_key->key['g'], 256);
        $p = new BigInteger($this->_key->key['p'], 256);
        $q = new BigInteger($this->_key->key['q'], 256);
        $y = new BigInteger($this->_key->key['y'], 256);
        $w = $s->modInverse($q);
        $hash_m_mul = $hash_m->multiply($w);
        $u1_base = $hash_m_mul->divide($q);
        $u1 = $u1_base[1];
        $r_mul = $r->multiply($w);
        $u2_base = $r_mul->divide($q);
        $u2 = $u2_base[1];
        $g_pow = $g->modPow($u1, $p);
        $y_pow = $y->modPow($u2, $p);
        $g_pow_mul = $g_pow->multiply($y_pow);
        $g_pow_mul_mod_base = $g_pow_mul->divide($p);
        $g_pow_mul_mod = $g_pow_mul_mod_base[1];
        $v_base = $g_pow_mul_mod->divide($q);
        $v = $v_base[1];
        return $v->compare($r) == 0;
    }

Usage Example

Example #1
0
 /**
  */
 public function verify($msg, $key)
 {
     $verify = new OpenPGP_Crypt_RSA($key->message);
     $pkey = $verify->key();
     switch ($pkey->algorithm) {
         case 1:
         case 2:
         case 3:
             // RSA
             return $verify->verify($msg->message);
         case 17:
             // DSA
             $dsa = new Horde_Pgp_Crypt_DSA($pkey);
             $verifier = function ($m, $s) use($dsa) {
                 return $dsa->verify($m, Horde_String::lower($s->hash_algorithm_name()), new Math_BigInteger($s->data[0], 256), new Math_BigInteger($s->data[1], 256));
             };
             return $msg->message->verified_signatures(array('DSA' => array('MD5' => $verifier, 'SHA1' => $verifier, 'SHA224' => $verifier, 'SHA256' => $verifier, 'SHA384' => $verifier, 'SHA512' => $verifier)));
     }
     throw new RuntimeException();
 }