Author: TSURUOKA Naoya (tsuruoka@labs.cybozu.co.jp)
Author: Benjamin Krämer (benjamin.kraemer@alien-scripts.de)
Author: Michael Slusarz (slusarz@horde.org)
Example #1
0
 /**
  * Encrypt data.
  *
  * @param string $text  Plaintext.
  *
  * @return array  Array of MPI values (c1, c2).
  */
 public function encrypt($text)
 {
     $p_len = strlen($this->_key->key['p']);
     $length = $p_len - 11;
     if ($length <= 0) {
         return false;
     }
     $g = new Math_BigInteger($this->_key->key['g'], 256);
     $p = new Math_BigInteger($this->_key->key['p'], 256);
     $y = new Math_BigInteger($this->_key->key['y'], 256);
     $out = array();
     foreach (str_split($text, $length) as $m) {
         // EME-PKCS1-v1_5 encoding
         $psLen = $p_len - strlen($m) - 3;
         $ps = '';
         while (($psLen2 = strlen($ps)) != $psLen) {
             $tmp = crypt_random_string($psLen - $psLen2);
             $ps .= str_replace("", '', $tmp);
         }
         $em = new Math_BigInteger(chr(0) . chr(2) . $ps . chr(0) . $m, 256);
         // End EME-PKCS1-v1_5 encoding
         $k = Horde_Pgp_Crypt_DSA::randomNumber($p);
         $c1 = $g->modPow($k, $p);
         $c2_base = $y->modPow($k, $p)->multiply($em)->divide($p);
         $c2 = $c2_base[1];
         $out[] = str_pad($c1->toBytes(), $p_len, chr(0), STR_PAD_LEFT);
         $out[] = str_pad($c2->toBytes(), $p_len, chr(0), STR_PAD_LEFT);
     }
     return $out;
 }
Example #2
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();
 }