sign() public method

DSA sign.
public sign ( string $message, string $hash_alg ) : array
$message string Message.
$hash_alg string Hash algorithm.
return array r,s key
Example #1
0
 /**
  */
 public function sign($text, $key, $mode, $opts = array())
 {
     $rsa = new OpenPGP_Crypt_RSA($key->message);
     $pkey = $rsa->key();
     $text = $this->_getMessageOb($text)->packets[0];
     switch ($pkey->algorithm) {
         case 1:
         case 2:
         case 3:
             // RSA
             $hash = $opts['sign_hash'] ?: 'SHA256';
             $result = $rsa->sign($text, $hash);
             break;
         case 17:
             // DSA; use SHA1 by default, since that is what DSA/DSS was
             // designed for.
             $hash = $opts['sign_hash'] ?: 'SHA1';
             $sig = new OpenPGP_SignaturePacket($text, 'DSA', $hash);
             $sig->hashed_subpackets[] = new OpenPGP_SignaturePacket_IssuerPacket(substr($pkey->fingerprint, -16));
             $dsa = new Horde_Pgp_Crypt_DSA($pkey);
             $sig->sign_data(array('DSA' => array($hash => function ($data) use($dsa, $hash) {
                 return $dsa->sign($data, $hash);
             })));
             $result = new OpenPGP_Message(array($sig, $text));
             break;
     }
     switch ($mode) {
         case 'clear':
             $sm = new Horde_Pgp_Element_SignedMessage(new OpenPGP_Message(array($result[1], $result[0])));
             $sm->headers['Hash'] = $hash;
             return $sm;
         case 'detach':
             foreach ($result as $val) {
                 if ($val instanceof OpenPGP_SignaturePacket) {
                     return new Horde_Pgp_Element_Signature(new OpenPGP_Message(array($val)));
                 }
             }
             break;
         case 'message':
             return new Horde_Pgp_Element_Message($this->_compressMessageOb($result, $opts['compress']));
     }
 }