OpenPGP_Crypt_RSA::decrypt PHP Method

decrypt() public method

public decrypt ( $packet )
    function decrypt($packet)
    {
        if (!is_object($packet)) {
            $packet = OpenPGP_Message::parse($packet);
        }
        if ($packet instanceof OpenPGP_SecretKeyPacket || $packet instanceof Crypt_RSA || $packet instanceof ArrayAccess && $packet[0] instanceof OpenPGP_SecretKeyPacket) {
            $keys = $packet;
            $message = $this->message;
        } else {
            $keys = $this->key;
            $message = $packet;
        }
        if (!$keys || !$message) {
            return NULL;
        }
        // Missing some data
        if (!$keys instanceof Crypt_RSA) {
            $keys = new self($keys);
        }
        foreach ($message as $p) {
            if ($p instanceof OpenPGP_AsymmetricSessionKeyPacket) {
                if ($keys instanceof Crypt_RSA) {
                    $sk = self::try_decrypt_session($keys, substr($p->encrypted_data, 2));
                } else {
                    if (strlen(str_replace('0', '', $p->keyid)) < 1) {
                        foreach ($keys->key as $k) {
                            $sk = self::try_decrypt_session(self::convert_private_key($k), substr($p->encrypted_data, 2));
                            if ($sk) {
                                break;
                            }
                        }
                    } else {
                        $key = $keys->private_key($p->keyid);
                        $sk = self::try_decrypt_session($key, substr($p->encrypted_data, 2));
                    }
                }
                if (!$sk) {
                    continue;
                }
                $r = OpenPGP_Crypt_Symmetric::decryptPacket(OpenPGP_Crypt_Symmetric::getEncryptedData($message), $sk[0], $sk[1]);
                if ($r) {
                    return $r;
                }
            }
        }
        return NULL;
        /* Failed */
    }

Usage Example

Example #1
0
<?php

// USAGE: php examples/deASCIIdeCrypt.php secretkey.asc password message.asc
// This will fail if the algo on key or message is not 3DES or AES
require_once dirname(__FILE__) . '/../lib/openpgp.php';
require_once dirname(__FILE__) . '/../lib/openpgp_crypt_rsa.php';
require_once dirname(__FILE__) . '/../lib/openpgp_crypt_symmetric.php';
$keyASCII = file_get_contents($argv[1]);
$msgASCII = file_get_contents($argv[3]);
$keyEncrypted = OpenPGP_Message::parse(OpenPGP::unarmor($keyASCII, 'PGP PRIVATE KEY BLOCK'));
// Try each secret key packet
foreach ($keyEncrypted as $p) {
    if (!$p instanceof OpenPGP_SecretKeyPacket) {
        continue;
    }
    $key = OpenPGP_Crypt_Symmetric::decryptSecretKey($argv[2], $p);
    $msg = OpenPGP_Message::parse(OpenPGP::unarmor($msgASCII, 'PGP MESSAGE'));
    $decryptor = new OpenPGP_Crypt_RSA($key);
    $decrypted = $decryptor->decrypt($msg);
    var_dump($decrypted);
}
All Usage Examples Of OpenPGP_Crypt_RSA::decrypt