public static function decryptSymmetric($pass, $m)
{
$epacket = self::getEncryptedData($m);
foreach ($m as $p) {
if ($p instanceof OpenPGP_SymmetricSessionKeyPacket) {
if (strlen($p->encrypted_data) > 0) {
list($cipher, $key_bytes, $key_block_bytes) = self::getCipher($p->symmetric_algorithm);
if (!$cipher) {
continue;
}
$cipher->setKey($p->s2k->make_key($pass, $key_bytes));
$padAmount = $key_block_bytes - strlen($p->encrypted_data) % $key_block_bytes;
$data = substr($cipher->decrypt($p->encrypted_data . str_repeat("", $padAmount)), 0, strlen($p->encrypted_data));
$decrypted = self::decryptPacket($epacket, ord($data[0]), substr($data, 1));
} else {
list($cipher, $key_bytes, $key_block_bytes) = self::getCipher($p->symmetric_algorithm);
$decrypted = self::decryptPacket($epacket, $p->symmetric_algorithm, $p->s2k->make_key($pass, $key_bytes));
}
if ($decrypted) {
return $decrypted;
}
}
}
return NULL;
/* If we get here, we failed */
}