* @category Horde
* @copyright 2002-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Crypt
*/
class Horde_Crypt_Smime extends Horde_Crypt
{
/**
* Constructor.
*
* @param array $params Configuration parameters:
* - temp: (string) Location of temporary directory.
*/
public function __construct($params = array())
{
parent::__construct($params);
}
/**
* Verify a passphrase for a given private key.
*
* @param string $private_key The user's private key.
* @param string $passphrase The user's passphrase.
*
* @return boolean Returns true on valid passphrase, false on invalid
* passphrase.
*/
public function verifyPassphrase($private_key, $passphrase)
{
$res = is_null($passphrase)
? openssl_pkey_get_private($private_key)
: openssl_pkey_get_private($private_key, $passphrase);
return is_resource($res);
}
/**
* Encrypt text using S/MIME.
*
* @param string $text The text to be encrypted.
* @param array $params The parameters needed for encryption.
* See the individual _encrypt*() functions for
* the parameter requirements.
*
* @return string The encrypted message.
* @throws Horde_Crypt_Exception
*/
public function encrypt($text, $params = array())
{
/* Check for availability of OpenSSL PHP extension. */
$this->checkForOpenSSL();
if (isset($params['type'])) {
if ($params['type'] === 'message') {
return $this->_encryptMessage($text, $params);
} elseif ($params['type'] === 'signature') {
return $this->_encryptSignature($text, $params);
}
}
}
/**
* Decrypt text via S/MIME.
*
* @param string $text The text to be smime decrypted.
* @param array $params The parameters needed for decryption.
* See the individual _decrypt*() functions for
* the parameter requirements.
*
* @return string The decrypted message.
* @throws Horde_Crypt_Exception
*/
public function decrypt($text, $params = array())
{
/* Check for availability of OpenSSL PHP extension. */
$this->checkForOpenSSL();
if (isset($params['type'])) {
if ($params['type'] === 'message') {
return $this->_decryptMessage($text, $params);
} elseif (($params['type'] === 'signature') ||
($params['type'] === 'detached-signature')) {
return $this->_decryptSignature($text, $params);
}
}
}
/**
* Verify a signature using via S/MIME.
*
* @param string $text The multipart/signed data to be verified.
* @param mixed $certs Either a single or array of root certificates.
*
* @return stdClass Object with the following elements:
*
* cert - (string) The certificate of the signer stored in the message (in
* PEM format).
* email - (string) The email of the signing person.
* msg - (string) Status string.
* verify - (boolean) True if certificate was verified.
*
* @throws Horde_Crypt_Exception
*/
public function verify($text, $certs)
{
/* Check for availability of OpenSSL PHP extension. */
$this->checkForOpenSSL();
/* Create temp files for input/output. */
$input = $this->_createTempFile('horde-smime');
$output = $this->_createTempFile('horde-smime');
/* Write text to file */
file_put_contents($input, $text);
unset($text);
$root_certs = array();
if (!is_array($certs)) {
$certs = array($certs);
}
foreach ($certs as $file) {
if (file_exists($file)) {
$root_certs[] = $file;
}
}
$ob = new stdClass;
if (!empty($root_certs) &&
(openssl_pkcs7_verify($input, 0, $output, $root_certs) === true)) {
/* Message verified */
$ob->msg = Horde_Crypt_Translation::t("Message verified successfully.");
$ob->verify = true;
} else {
/* Try again without verfying the signer's cert */
$result = openssl_pkcs7_verify($input, PKCS7_NOVERIFY, $output);
if ($result === -1) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Verification failed - an unknown error has occurred."));
} elseif ($result === false) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Verification failed - this message may have been tampered with."));
}
$ob->msg = Horde_Crypt_Translation::t("Message verified successfully but the signer's certificate could not be verified.");
$ob->verify = false;
}
$ob->cert = file_get_contents($output);
$ob->email = $this->getEmailFromKey($ob->cert);
return $ob;
}
/**
* Extract the contents from signed S/MIME data.
*
* @param string $data The signed S/MIME data.
* @param string $sslpath The path to the OpenSSL binary. @deprecated and
* not used, just for backwards-compatibility.
*
* @return string The contents embedded in the signed data.
* @throws Horde_Crypt_Exception
*/
public function extractSignedContents($data, $sslpath = null)
{
/* Check for availability of OpenSSL PHP extension. */
$this->checkForOpenSSL();
/* Create temp files for input/output/certs. */
$input = $this->_createTempFile('horde-smime');
$output = $this->_createTempFile('horde-smime');
$certs = $this->_createTempFile('horde-smime');
/* Write text to file. */
file_put_contents($input, $data);
unset($data);
/* Unfortunatelly the openssl_pkcs7_verify method does not behave as
* explained in openssl extensions documentation, it does not return
* content if no certs specified. Therefore, we need to use double
* verification which the first one tries to extract certificats then
* the second to extract content. */
if (openssl_pkcs7_verify($input, PKCS7_NOVERIFY, $certs) === true &&
openssl_pkcs7_verify($input, PKCS7_NOVERIFY, $certs, array(), $certs, $output) === true) {
$ret = file_get_contents($output);
if ($ret) {
return $ret;
}
}
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("OpenSSL error: Could not extract data from signed S/MIME part."));
}
/**
* Sign a MIME part using S/MIME. This produces S/MIME Version 3.2
* compatible data (see RFC 5751 [3.4]).
*
* @param Horde_Mime_Part $mime_part The object to sign.
* @param array $params The parameters required for signing.
*
* @return Horde_Mime_Part A signed MIME part object.
* @throws Horde_Crypt_Exception
*/
public function signMIMEPart($mime_part, $params)
{
/* Sign the part as a message */
$message = $this->encrypt(
$mime_part->toString(array(
'headers' => true,
'canonical' => true
)),
$params
);
/* Break the result into its components */
$mime_message = Horde_Mime_Part::parseMessage(
$message,
array('forcemime' => true)
);
$smime_sign = $mime_message->getPart('2');
$smime_sign->setDescription(
Horde_Crypt_Translation::t("S/MIME Signature")
);
$smime_sign->setTransferEncoding('base64', array('send' => true));
$smime_part = new Horde_Mime_Part();
$smime_part->setType('multipart/signed');
$smime_part->setContents(
"This is a cryptographically signed message in MIME format.\n"
);
$smime_part->setContentTypeParameter(
'protocol',
'application/pkcs7-signature'
);
$smime_part->setContentTypeParameter(
'micalg', $mime_message->getContentTypeParameter('micalg')
);
$smime_part->addPart($mime_part);
$smime_part->addPart($smime_sign);
return $smime_part;
}
/**
* Encrypt a MIME part using S/MIME. This produces S/MIME Version 3.2
* compatible data (see RFC 5751 [3.3]).
*
* @param Horde_Mime_Part $mime_part The object to encrypt.
* @param array $params The parameters required for
* encryption.
*
* @return Horde_Mime_Part An encrypted MIME part object.
* @throws Horde_Crypt_Exception
*/
public function encryptMIMEPart($mime_part, $params = array())
{
/* Sign the part as a message */
$message = $this->encrypt(
$mime_part->toString(array(
'headers' => true,
'canonical' => true
)),
$params
);
$msg = new Horde_Mime_Part();
$msg->setCharset($this->_params['email_charset']);
$msg->setHeaderCharset('UTF-8');
$msg->setDescription(
Horde_Crypt_Translation::t("S/MIME Encrypted Message")
);
$msg->setDisposition('inline');
$msg->setType('application/pkcs7-mime');
$msg->setContentTypeParameter('smime-type', 'enveloped-data');
$msg->setContents(
substr($message, strpos($message, "\n\n") + 2),
array('encoding' => 'base64')
);
return $msg;
}
/**
* Encrypt a message in S/MIME format using a public key.
*
* @param string $text The text to be encrypted.
* @param array $params The parameters needed for encryption.
* - type: (string) [REQUIRED] 'message'.
* - pubkey: (mixed) [REQUIRED] Public key/cert or array of public
* keys/certs.
*
* @return string The encrypted message.
* @throws Horde_Crypt_Exception
*/
protected function _encryptMessage($text, $params)
{
/* Check for required parameters. */
if (!isset($params['pubkey'])) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t(
"A public S/MIME key is required to encrypt a message."
));
}
/* Create temp files for input/output. */
$input = $this->_createTempFile('horde-smime');
$output = $this->_createTempFile('horde-smime');
/* Store message in file. */
file_put_contents($input, $text);
unset($text);
/* Encrypt the document. */
$ciphers = array(
// SHOULD- support (RFC 5751 [2.7])
OPENSSL_CIPHER_3DES
);
if (defined('OPENSSL_CIPHER_AES_128_CBC')) {
// MUST support (RFC 5751 [2.7])
array_unshift($ciphers, OPENSSL_CIPHER_AES_128_CBC);
// SHOULD+ support (RFC 5751 [2.7])
array_unshift($ciphers, OPENSSL_CIPHER_AES_192_CBC);
array_unshift($ciphers, OPENSSL_CIPHER_AES_256_CBC);
}
foreach ($ciphers as $val) {
$success = openssl_pkcs7_encrypt(
$input,
$output,
$params['pubkey'],
array(),
0,
$val
);
if ($success && ($result = file_get_contents($output))) {
return $this->_fixContentType($result, 'message');
}
}
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t(
"Could not S/MIME encrypt message."
));
}
/**
* Sign a message in S/MIME format using a private key.
*
* @param string $text The text to be signed.
* @param array $params The (string) parameters needed for signing:
* - 'certs': Additional signing certs (Optional)
* - 'passphrase': Passphrase for key (REQUIRED)
* - 'privkey': Private key (REQUIRED)
* - 'pubkey': Public key (REQUIRED)
* - 'sigtype': Determine the signature type to use. (Optional):
* - 'cleartext': Make a clear text signature
* - 'detach': Make a detached signature (DEFAULT)
* - 'type': 'signature' (REQUIRED)
*
* @return string The signed message.
* @throws Horde_Crypt_Exception
*/
protected function _encryptSignature($text, $params)
{
/* Check for required parameters. */
if (!isset($params['pubkey']) ||
!isset($params['privkey']) ||
!array_key_exists('passphrase', $params)) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("A public S/MIME key, private S/MIME key, and passphrase are required to sign a message."));
}
/* Create temp files for input/output/certificates. */
$input = $this->_createTempFile('horde-smime');
$output = $this->_createTempFile('horde-smime');
$certs = $this->_createTempFile('horde-smime');
/* Store message in temporary file. */
file_put_contents($input, $text);
unset($text);
/* Store additional certs in temporary file. */
if (!empty($params['certs'])) {
file_put_contents($certs, $params['certs']);
}
/* Determine the signature type to use. */
$flags = (isset($params['sigtype']) && ($params['sigtype'] == 'cleartext'))
? PKCS7_TEXT
: PKCS7_DETACHED;
$privkey = (is_null($params['passphrase'])) ? $params['privkey'] : array($params['privkey'], $params['passphrase']);
if (empty($params['certs'])) {
$res = openssl_pkcs7_sign($input, $output, $params['pubkey'], $privkey, array(), $flags);
} else {
$res = openssl_pkcs7_sign($input, $output, $params['pubkey'], $privkey, array(), $flags, $certs);
}
if (!$res) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Could not S/MIME sign message."));
}
/* Output from openssl_pkcs7_sign may contain both \n and \r\n EOLs.
* Canonicalize to \r\n. */
$fp = fopen($output, 'r');
stream_filter_register('horde_eol', 'Horde_Stream_Filter_Eol');
stream_filter_append($fp, 'horde_eol');
$data = stream_get_contents($fp);
fclose($fp);
return $this->_fixContentType($data, 'signature');
}
/**
* Decrypt an S/MIME encrypted message using a private/public keypair
* and a passhprase.
*
* @param string $text The text to be decrypted.
* @param array $params The parameters needed for decryption.
*
* Parameters:
* ===========
* 'type' => 'message' (REQUIRED)
* 'pubkey' => public key. (REQUIRED)
* 'privkey' => private key. (REQUIRED)
* 'passphrase' => Passphrase for Key. (REQUIRED)
*
*
* @return string The decrypted message.
* @throws Horde_Crypt_Exception
*/
protected function _decryptMessage($text, $params)
{
/* Check for required parameters. */
if (!isset($params['pubkey']) ||
!isset($params['privkey']) ||
!array_key_exists('passphrase', $params)) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("A public S/MIME key, private S/MIME key, and passphrase are required to decrypt a message."));
}
/* Create temp files for input/output. */
$input = $this->_createTempFile('horde-smime');
$output = $this->_createTempFile('horde-smime');
/* Store message in file. */
file_put_contents($input, $text);
unset($text);
$privkey = is_null($params['passphrase'])
? $params['privkey']
: array($params['privkey'], $params['passphrase']);
if (openssl_pkcs7_decrypt($input, $output, $params['pubkey'], $privkey)) {
return file_get_contents($output);
}
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Could not decrypt S/MIME data."));
}
/**
* Sign and Encrypt a MIME part using S/MIME.
*
* @param Horde_Mime_Part $mime_part The object to sign and encrypt.
* @param array $sign_params The parameters required for
* signing. @see _encryptSignature().
* @param array $encrypt_params The parameters required for
* encryption.
* @see _encryptMessage().
*
* @return mixed A Horde_Mime_Part object that is signed and encrypted.
* @throws Horde_Crypt_Exception
*/
public function signAndEncryptMIMEPart($mime_part, $sign_params = array(),
$encrypt_params = array())
{
$part = $this->signMIMEPart($mime_part, $sign_params);
return $this->encryptMIMEPart($part, $encrypt_params);
}
/**
* Convert a PEM format certificate to readable HTML version.
*
* @param string $cert PEM format certificate.
*
* @return string HTML detailing the certificate.
*/
public function certToHTML($cert)
{
$fieldnames = array(
/* Common Fields */
'description' => Horde_Crypt_Translation::t("Description"),
'emailAddress' => Horde_Crypt_Translation::t("Email Address"),
'commonName' => Horde_Crypt_Translation::t("Common Name"),
'organizationName' => Horde_Crypt_Translation::t("Organisation"),
'organizationalUnitName' => Horde_Crypt_Translation::t("Organisational Unit"),
'countryName' => Horde_Crypt_Translation::t("Country"),
'stateOrProvinceName' => Horde_Crypt_Translation::t("State or Province"),
'localityName' => Horde_Crypt_Translation::t("Location"),
'streetAddress' => Horde_Crypt_Translation::t("Street Address"),
'telephoneNumber' => Horde_Crypt_Translation::t("Telephone Number"),
'surname' => Horde_Crypt_Translation::t("Surname"),
'givenName' => Horde_Crypt_Translation::t("Given Name"),
/* X590v3 Extensions */
'extendedKeyUsage' => Horde_Crypt_Translation::t("Extended Key Usage"),
'basicConstraints' => Horde_Crypt_Translation::t("Basic Constraints"),
'subjectAltName' => Horde_Crypt_Translation::t("Subject Alternative Name"),
'subjectKeyIdentifier' => Horde_Crypt_Translation::t("Subject Key Identifier"),
'certificatePolicies' => Horde_Crypt_Translation::t("Certificate Policies"),
'crlDistributionPoints' => Horde_Crypt_Translation::t("CRL Distribution Points"),
'keyUsage' => Horde_Crypt_Translation::t("Key Usage")
);
$details = $this->parseCert($cert);
$text = '';
/* Subject (a/k/a Certificate Owner) */
$text .= '' . Horde_Crypt_Translation::t("Certificate Owner")
. ':';
foreach ($details['subject'] as $key => $value) {
$text .= sprintf(
"\n %s: %s",
htmlspecialchars(
isset($fieldnames[$key]) ? $fieldnames[$key] : $key
),
htmlspecialchars($value)
);
}
$text .= "\n";
/* Issuer */
$text .=
'' . Horde_Crypt_Translation::t("Issuer") . ':';
foreach ($details['issuer'] as $key => $value) {
$text .= sprintf(
"\n %s: %s",
htmlspecialchars(
isset($fieldnames[$key]) ? $fieldnames[$key] : $key
),
htmlspecialchars($value)
);
}
$text .= "\n";
/* Dates */
$text .=
'' . Horde_Crypt_Translation::t("Validity") . ':'
. sprintf(
"\n %s: %s",
Horde_Crypt_Translation::t("Not Before"),
strftime(
'%x %X', $details['validity']['notbefore']->getTimestamp()
)
)
. sprintf(
"\n %s: %s",
Horde_Crypt_Translation::t("Not After"),
strftime(
'%x %X', $details['validity']['notafter']->getTimestamp()
)
);
/* X509v3 extensions */
if (!empty($details['extensions'])) {
$text .= "\n" . ''
. Horde_Crypt_Translation::t("X509v3 extensions")
. ':';
foreach ($details['extensions'] as $key => $value) {
$value = $this->_implodeValues($value);
$text .= sprintf(
"\n %s:\n%s",
htmlspecialchars(
isset($fieldnames[$key]) ? $fieldnames[$key] : $key
),
$value
);
}
}
$text .= "\n";
/* Certificate Details */
$text .= '' . Horde_Crypt_Translation::t("Certificate Details")
. ':'
. sprintf(
"\n %s: %d",
Horde_Crypt_Translation::t("Version"),
$details['version']
)
. sprintf(
"\n %s: %d",
Horde_Crypt_Translation::t("Serial Number"),
$details['serialNumber']
);
return $text . '
';
}
/**
* Formats a multi-value cert field.
*
* @param array|string $values A cert field value.
* @param integer $indent The indention level.
*
* @return string The formatted cert field value(s).
*/
protected function _implodeValues($values)
{
if (!is_array($values)) {
$values = explode("\n", trim($values));
}
foreach ($values as &$value) {
$value = str_repeat(' ', 4) . htmlspecialchars($value);
}
return implode("\n", $values);
}
/**
* Extract the contents of a PEM format certificate to an array.
*
* @param string $cert PEM format certificate.
*
* @return array All extractable information about the certificate.
*/
public function parseCert($cert)
{
$data = openssl_x509_parse($cert, false);
if (!$data) {
throw new Horde_Crypt_Exception(sprintf(Horde_Crypt_Translation::t("Error parsing S/MIME certficate: %s"), openssl_error_string()));
}
$details = array(
'extensions' => $data['extensions'],
'issuer' => $data['issuer'],
'serialNumber' => $data['serialNumber'],
'subject' => $data['subject'],
'validity' => array(
'notafter' => new DateTime('@' . $data['validTo_time_t']),
'notbefore' => new DateTime('@' . $data['validFrom_time_t'])
),
'version' => $data['version']
);
// Add additional fields for BC purposes.
$details['certificate'] = $details;
$bc_changes = array(
'emailAddress' => 'Email',
'commonName' => 'CommonName',
'organizationName' => 'Organisation',
'organizationalUnitName' => 'OrganisationalUnit',
'countryName' => 'Country',
'stateOrProvinceName' => 'StateOrProvince',
'localityName' => 'Location',
'streetAddress' => 'StreetAddress',
'telephoneNumber' => 'TelephoneNumber',
'surname' => 'Surname',
'givenName' => 'GivenName'
);
foreach (array('issuer', 'subject') as $val) {
foreach (array_keys($details[$val]) as $key) {
if (isset($bc_changes[$key])) {
$details['certificate'][$val][$bc_changes[$key]] = $details[$val][$key];
unset($details['certificate'][$val][$key]);
}
}
}
return $details;
}
/**
* Decrypt an S/MIME signed message using a public key.
*
* @param string $text The text to be verified.
* @param array $params The parameters needed for verification.
*
* @return string The verification message.
* @throws Horde_Crypt_Exception
*/
protected function _decryptSignature($text, $params)
{
throw new Horde_Crypt_Exception('_decryptSignature() ' . Horde_Crypt_Translation::t("not yet implemented"));
}
/**
* Check for the presence of the OpenSSL extension to PHP.
*
* @throws Horde_Crypt_Exception
*/
public function checkForOpenSSL()
{
if (!Horde_Util::extensionExists('openssl')) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("The openssl module is required for the Horde_Crypt_Smime:: class."));
}
}
/**
* Extract the email address from a public key.
*
* @param string $key The public key.
*
* @return mixed Returns the first email address found, or null if
* there are none.
*/
public function getEmailFromKey($key)
{
$key_info = openssl_x509_parse($key);
if (!is_array($key_info)) {
return null;
}
if (isset($key_info['subject'])) {
if (isset($key_info['subject']['Email'])) {
return $key_info['subject']['Email'];
} elseif (isset($key_info['subject']['emailAddress'])) {
return $key_info['subject']['emailAddress'];
}
}
// Check subjectAltName per http://www.ietf.org/rfc/rfc3850.txt
if (isset($key_info['extensions']['subjectAltName'])) {
$names = preg_split('/\s*,\s*/', $key_info['extensions']['subjectAltName'], -1, PREG_SPLIT_NO_EMPTY);
foreach ($names as $name) {
if (strpos($name, ':') === false) {
continue;
}
list($kind, $value) = explode(':', $name, 2);
if (Horde_String::lower($kind) == 'email') {
return $value;
}
}
}
return null;
}
/**
* Convert a PKCS 12 encrypted certificate package into a private key,
* public key, and any additional keys.
*
* @param string $pkcs12 The PKCS 12 data.
* @param array $params The parameters needed for parsing.
*
* Parameters:
* ===========
* 'sslpath' => The path to the OpenSSL binary. (REQUIRED)
* 'password' => The password to use to decrypt the data. (Optional)
* 'newpassword' => The password to use to encrypt the private key.
* (Optional)
*
*
* @return stdClass An object.
* 'private' - The private key in PEM format.
* 'public' - The public key in PEM format.
* 'certs' - An array of additional certs.
* @throws Horde_Crypt_Exception
*/
public function parsePKCS12Data($pkcs12, $params)
{
/* Check for availability of OpenSSL PHP extension. */
$this->checkForOpenSSL();
if (!isset($params['sslpath'])) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("No path to the OpenSSL binary provided. The OpenSSL binary is necessary to work with PKCS 12 data."));
}
$sslpath = escapeshellcmd($params['sslpath']);
/* Create temp files for input/output. */
$input = $this->_createTempFile('horde-smime');
$output = $this->_createTempFile('horde-smime');
$ob = new stdClass;
/* Write text to file */
file_put_contents($input, $pkcs12);
unset($pkcs12);
/* Extract the private key from the file first. */
$cmdline = $sslpath . ' pkcs12 -in ' . $input . ' -out ' . $output . ' -nocerts';
if (isset($params['password'])) {
$cmdline .= ' -passin stdin';
if (!empty($params['newpassword'])) {
$cmdline .= ' -passout stdin';
} else {
$cmdline .= ' -nodes';
}
} else {
$cmdline .= ' -nodes';
}
if ($fd = popen($cmdline, 'w')) {
fwrite($fd, $params['password'] . "\n");
if (!empty($params['newpassword'])) {
fwrite($fd, $params['newpassword'] . "\n");
}
pclose($fd);
} else {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Error while talking to smime binary."));
}
$ob->private = trim(file_get_contents($output));
if (empty($ob->private)) {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Password incorrect"));
}
/* Extract the client public key next. */
$cmdline = $sslpath . ' pkcs12 -in ' . $input . ' -out ' . $output . ' -nokeys -clcerts';
if (isset($params['password'])) {
$cmdline .= ' -passin stdin';
}
if ($fd = popen($cmdline, 'w')) {
fwrite($fd, $params['password'] . "\n");
pclose($fd);
} else {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Error while talking to smime binary."));
}
$ob->public = trim(file_get_contents($output));
/* Extract the CA public key next. */
$cmdline = $sslpath . ' pkcs12 -in ' . $input . ' -out ' . $output . ' -nokeys -cacerts';
if (isset($params['password'])) {
$cmdline .= ' -passin stdin';
}
if ($fd = popen($cmdline, 'w')) {
fwrite($fd, $params['password'] . "\n");
pclose($fd);
} else {
throw new Horde_Crypt_Exception(Horde_Crypt_Translation::t("Error while talking to smime binary."));
}
$ob->certs = trim(file_get_contents($output));
return $ob;
}
/**
* The Content-Type parameters PHP's openssl_pkcs7_* functions return are
* deprecated. Fix these headers to the correct ones (see RFC 2311).
*
* @param string $text The PKCS7 data.
* @param string $type Is this 'message' or 'signature' data?
*
* @return string The PKCS7 data with the correct Content-Type parameter.
*/
protected function _fixContentType($text, $type)
{
if ($type == 'message') {
$from = 'application/x-pkcs7-mime';
$to = 'application/pkcs7-mime';
} else {
$from = 'application/x-pkcs7-signature';
$to = 'application/pkcs7-signature';
}
return str_replace('Content-Type: ' . $from, 'Content-Type: ' . $to, $text);
}
/**
* Create a temporary file that will be deleted at the end of this
* process.
*
* @param string $descrip Description string to use in filename.
* @param boolean $delete Delete the file automatically?
*
* @return string Filename of a temporary file.
*/
protected function _createTempFile($descrip = 'horde-crypt', $delete = true)
{
return Horde_Util::getTempFile($descrip, $delete, $this->_params['temp'], true);
}
}
Horde_Crypt-2.7.11/lib/Horde/Crypt/Translation.php 0000664 0001750 0001750 00000001745 13166634055 020067 0 ustar jan jan
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Crypt
*/
/**
* Horde_Crypt_Translation is the translation wrapper class for Horde_Crypt.
*
* @author Jan Schneider
* @category Horde
* @copyright 2010-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Crypt
*/
class Horde_Crypt_Translation extends Horde_Translation_Autodetect
{
/**
* The translation domain
*
* @var string
*/
protected static $_domain = 'Horde_Crypt';
/**
* The absolute PEAR path to the translations for the default gettext handler.
*
* @var string
*/
protected static $_pearDirectory = '@data_dir@';
}
Horde_Crypt-2.7.11/lib/Horde/Crypt.php 0000664 0001750 0001750 00000006206 13166634055 015566 0 ustar jan jan
* @category Horde
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Crypt
*/
/**
* Provides an API for various cryptographic systems used by Horde
* applications.
*
* @author Michael Slusarz
* @category Horde
* @copyright 2002-2017 Horde LLC
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @package Crypt
*/
class Horde_Crypt
{
/**
* Configuration parameters.
*
* @var array
*/
protected $_params = array();
/**
* Attempts to return a concrete Horde_Crypt instance based on $driver.
*
* @param string $driver Either a driver name, or the full class name to
* use (class must extend Horde_Crypt).
* @param array $params A hash containing any additional configuration
* or parameters a subclass might need.
*
* @return Horde_Crypt The newly created concrete instance.
* @throws Horde_Crypt_Exception
*/
public static function factory($driver, $params = array())
{
/* Return a base Horde_Crypt object if no driver is specified. */
if (empty($driver) || (strcasecmp($driver, 'none') == 0)) {
return new Horde_Crypt();
}
/* Base drivers (in Crypt/ directory). */
$class = __CLASS__ . '_' . Horde_String::ucfirst(basename($driver));
if (class_exists($class)) {
return new $class($params);
}
/* Explicit class name, */
$class = $driver;
if (class_exists($class)) {
return new $class($params);
}
throw new Horde_Crypt_Exception(
__CLASS__ . ': Class definition of ' . $driver . ' not found.'
);
}
/**
* Constructor.
*
* @param array $params Configuration parameters:
* - email_charset: (string) The default email charset.
*/
public function __construct(array $params = array())
{
$this->_params = array_merge(array(
'email_charset' => null,
), $params);
}
/**
* Encrypt the requested data.
* This method should be provided by all classes that extend Horde_Crypt.
*
* @param string $data The data to encrypt.
* @param array $params An array of arguments needed to encrypt the data.
*
* @return array The encrypted data.
*/
public function encrypt($data, $params = array())
{
return $data;
}
/**
* Decrypt the requested data.
* This method should be provided by all classes that extend Horde_Crypt.
*
* @param string $data The data to decrypt.
* @param array $params An array of arguments needed to decrypt the data.
*
* @return array The decrypted data.
* @throws Horde_Crypt_Exception
*/
public function decrypt($data, $params = array())
{
return $data;
}
}
Horde_Crypt-2.7.11/locale/ar/LC_MESSAGES/Horde_Crypt.mo 0000664 0001750 0001750 00000000705 13166634055 020350 0 ustar jan jan 4 L ` a f B l
Name Never Project-Id-Version: Horde_Crypt
Report-Msgid-Bugs-To: dev@lists.horde.org
POT-Creation-Date: 2010-10-13 01:27+0200
PO-Revision-Date: 2010-10-13 01:27+0200
Last-Translator: Automatically generated
Language-Team: i18n@lists.horde.org
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
الاسم أبداً Horde_Crypt-2.7.11/locale/ar/LC_MESSAGES/Horde_Crypt.po 0000664 0001750 0001750 00000021375 13166634055 020361 0 ustar jan jan # Arabic translations for Horde_Crypt module.
# Copyright 2010-2017 Horde LLC (http://www.horde.org/)
# This file is distributed under the same license as the Horde_Crypt module.
# Automatically generated, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Horde_Crypt\n"
"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
"POT-Creation-Date: 2010-10-13 01:27+0200\n"
"PO-Revision-Date: 2010-10-13 01:27+0200\n"
"Last-Translator: Automatically generated\n"
"Language-Team: i18n@lists.horde.org\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/Horde/Crypt/Smime.php:614
#, php-format
msgid "%s Fingerprint"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1240
msgid "A passphrase is required to decrypt a message."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1307
msgid "A public PGP key is required to verify a signed message."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1164
msgid ""
"A public PGP key, private PGP key, and passphrase are required to sign a "
"message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:311
msgid "A public S/MIME key is required to encrypt a message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:422
msgid ""
"A public S/MIME key, private S/MIME key, and passphrase are required to "
"decrypt a message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:360
msgid ""
"A public S/MIME key, private S/MIME key, and passphrase are required to sign "
"a message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:506
msgid "CRL Distribution Points"
msgstr ""
#: lib/Horde/Crypt/Smime.php:609
msgid "Certificate Details"
msgstr ""
#: lib/Horde/Crypt/Smime.php:520
msgid "Certificate Owner"
msgstr ""
#: lib/Horde/Crypt/Smime.php:505
msgid "Certificate Policies"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:426
#, fuzzy
msgid "Comment"
msgstr "الأوامر:"
#: lib/Horde/Crypt/Smime.php:475
msgid "Common Name"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:939
#, fuzzy
msgid "Connection refused to the public keyserver."
msgstr "حصل خطأ خلال الإتصال بمخدم الـ FTP."
#: lib/Horde/Crypt/Pgp.php:950
#, php-format
msgid "Connection refused to the public keyserver. Reason: %s (%s)"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1132
msgid "Could not PGP encrypt message: "
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1201
msgid "Could not PGP sign message: "
msgstr ""
#: lib/Horde/Crypt/Smime.php:330
msgid "Could not S/MIME encrypt message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:391
msgid "Could not S/MIME sign message."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1276
#, fuzzy
msgid "Could not decrypt PGP data: "
msgstr "لا إمكانية لنسخ %s إلى %s"
#: lib/Horde/Crypt/Smime.php:440
msgid "Could not decrypt S/MIME data."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:659
msgid "Could not determine the recipient's e-mail address."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:759 lib/Horde/Crypt/Pgp.php:848
msgid "Could not obtain public key from the keyserver."
msgstr ""
#: lib/Horde/Crypt/Smime.php:478
msgid "Country"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:426
#, fuzzy
msgid "E-Mail"
msgstr "البريد"
#: lib/Horde/Crypt/Smime.php:474
#, fuzzy
msgid "Email Address"
msgstr "عنوان بريدك الإلكتروني:"
#: lib/Horde/Crypt/Pgp.php:1584 lib/Horde/Crypt/Pgp.php:1592
msgid "Error while talking to pgp binary."
msgstr ""
#: lib/Horde/Crypt/Smime.php:1251 lib/Horde/Crypt/Smime.php:1269
#: lib/Horde/Crypt/Smime.php:1284
msgid "Error while talking to smime binary."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:425
msgid "Expiration Date"
msgstr ""
#: lib/Horde/Crypt/Smime.php:586
msgid "Exponent"
msgstr ""
#: lib/Horde/Crypt/Smime.php:484
msgid "Given Name"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:426
msgid "Hash-Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:534
msgid "Issuer"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
msgid "Key Creation"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:427
msgid "Key Fingerprint"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:427
msgid "Key ID"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:425
msgid "Key Length"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
msgid "Key Type"
msgstr ""
#: lib/Horde/Crypt/Smime.php:507
#, fuzzy
msgid "Key Usage"
msgstr "حجم الاستخدام:"
#: lib/Horde/Crypt/Pgp.php:782
msgid "Key already exists on the public keyserver."
msgstr ""
#: lib/Horde/Crypt/Smime.php:480
msgid "Location"
msgstr ""
#: lib/Horde/Crypt/Smime.php:189
msgid ""
"Message Verified Successfully but the signer's certificate could not be "
"verified."
msgstr ""
#: lib/Horde/Crypt/Smime.php:583
msgid "Modulus"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
msgid "Name"
msgstr "الاسم"
#: lib/Horde/Crypt/Smime.php:490
msgid "Netscape Base URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:492
msgid "Netscape CA Revocation URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:494
msgid "Netscape CA policy URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:493
msgid "Netscape Renewal URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:491
msgid "Netscape Revocation URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:495
msgid "Netscape SSL server name"
msgstr ""
#: lib/Horde/Crypt/Smime.php:496
msgid "Netscape certificate comment"
msgstr ""
#: lib/Horde/Crypt/Smime.php:489
msgid "Netscape certificate type"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:449
msgid "Never"
msgstr "أبداً"
#: lib/Horde/Crypt/Smime.php:1217
msgid ""
"No path to the OpenSSL binary provided. The OpenSSL binary is necessary to "
"work with PKCS 12 data."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:451 lib/Horde/Crypt/Pgp.php:452
msgid "None"
msgstr ""
#: lib/Horde/Crypt/Smime.php:549
msgid "Not After"
msgstr ""
#: lib/Horde/Crypt/Smime.php:548
msgid "Not Before"
msgstr ""
#: lib/Horde/Crypt/Smime.php:231
msgid "OpenSSL error: Could not extract data from signed S/MIME part."
msgstr ""
#: lib/Horde/Crypt/Smime.php:476
msgid "Organisation"
msgstr ""
#: lib/Horde/Crypt/Smime.php:477
msgid "Organisational Unit"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1406
msgid "PGP Digital Signature"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1450
msgid "PGP Encrypted Data"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1511
msgid "PGP Public Key"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1493
msgid "PGP Signed/Encrypted Data"
msgstr ""
#: lib/Horde/Crypt/Smime.php:1256
#, fuzzy
msgid "Password incorrect"
msgstr "كلمة المرور"
#: lib/Horde/Crypt/Pgp.php:447
msgid "Private Key"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:447
msgid "Public Key"
msgstr ""
#: lib/Horde/Crypt/Smime.php:554
msgid "Public Key Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:553
msgid "Public Key Info"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:225
msgid "Public/Private keypair not generated successfully."
msgstr ""
#: lib/Horde/Crypt/Smime.php:572
#, php-format
msgid "RSA Public Key (%d bit)"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:227
msgid "Returned error message:"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1644
msgid "Revocation key not generated successfully."
msgstr ""
#: lib/Horde/Crypt/Smime.php:252
msgid "S/MIME Cryptographic Signature"
msgstr ""
#: lib/Horde/Crypt/Smime.php:283
msgid "S/MIME Encrypted Message"
msgstr ""
#: lib/Horde/Crypt/Smime.php:611
msgid "Serial Number"
msgstr ""
#: lib/Horde/Crypt/Smime.php:622
msgid "Signature"
msgstr ""
#: lib/Horde/Crypt/Smime.php:621
msgid "Signature Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:479
msgid "State or Province"
msgstr ""
#: lib/Horde/Crypt/Smime.php:481
#, fuzzy
msgid "Street Address"
msgstr "عنوان المنزل"
#: lib/Horde/Crypt/Smime.php:483
#, fuzzy
msgid "Surname"
msgstr "الاسم"
#: lib/Horde/Crypt/Smime.php:482
msgid "Telephone Number"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1311
msgid ""
"The detached PGP signature block is required to verify the signed message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:1146
msgid "The openssl module is required for the Horde_Crypt_Smime:: class."
msgstr ""
#: lib/Horde/Crypt/Smime.php:512
msgid "Unable to extract certificate details"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:453 lib/Horde/Crypt/Pgp.php:454
#: lib/Horde/Crypt/Pgp.php:455
msgid "Unknown"
msgstr ""
#: lib/Horde/Crypt/Smime.php:596 lib/Horde/Crypt/Smime.php:844
#: lib/Horde/Crypt/Smime.php:850
msgid "Unsupported Extension"
msgstr ""
#: lib/Horde/Crypt/Smime.php:547
msgid "Validity"
msgstr ""
#: lib/Horde/Crypt/Smime.php:191
msgid "Verification failed - an unknown error has occurred."
msgstr ""
#: lib/Horde/Crypt/Smime.php:193
msgid "Verification failed - this message may have been tampered with."
msgstr ""
#: lib/Horde/Crypt/Smime.php:610
msgid "Version"
msgstr ""
#: lib/Horde/Crypt/Smime.php:502
msgid "X509v3 Basic Constraints"
msgstr ""
#: lib/Horde/Crypt/Smime.php:501
msgid "X509v3 Extended Key Usage"
msgstr ""
#: lib/Horde/Crypt/Smime.php:503
msgid "X509v3 Subject Alternative Name"
msgstr ""
#: lib/Horde/Crypt/Smime.php:504
msgid "X509v3 Subject Key Identifier"
msgstr ""
#: lib/Horde/Crypt/Smime.php:592
msgid "X509v3 extensions"
msgstr ""
#: lib/Horde/Crypt/Smime.php:1135
msgid "not yet implemented"
msgstr ""
Horde_Crypt-2.7.11/locale/bg/LC_MESSAGES/Horde_Crypt.mo 0000664 0001750 0001750 00000004115 13166634055 020335 0 ustar jan jan
0 8 1 Q j + 3 /
L + Z 2 J ? B O ^ L @ k { T f ] n
A public PGP key is required to verify a signed message. A public PGP key, private PGP key, and passphrase are required to sign a message. Connection refused to the public keyserver. Could not determine the recipient's e-mail address. Could not obtain public key from the keyserver. Email Address Key already exists on the public keyserver. Name Never Public/Private keypair not generated successfully. The detached PGP signature block is required to verify the signed message. Verification failed - this message may have been tampered with. Project-Id-Version: Horde_Crypt
Report-Msgid-Bugs-To: dev@lists.horde.org
POT-Creation-Date: 2010-10-13 01:27+0200
PO-Revision-Date: 2010-10-13 01:27+0200
Last-Translator: Automatically generated
Language-Team: i18n@lists.horde.org
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
За да проверите подписано писмо е необходим PGP ключ. За да подпишете писмо са необходими: публичен ключ, личен ключ и ключова фраза. Достъпа до публичния сървър беше отказан. Некоректен email адрес на получателя. Грешка при получаването на публичния ключ от ключ-сървъра. Еmail адрес Ключа вече съществува в публичния ключсървър. Име Никога Ключова двойка публичен/частен ключ не беше генерирана. Прикрепеният PGP подпис е необходим за да се провери подписаното писмо. Грешка при проверката - това писмо може да е било подправено. Horde_Crypt-2.7.11/locale/bg/LC_MESSAGES/Horde_Crypt.po 0000664 0001750 0001750 00000026101 13166634055 020337 0 ustar jan jan # Bulgarian translations for Horde_Crypt module.
# Copyright 2010-2017 Horde LLC (http://www.horde.org/)
# This file is distributed under the same license as the Horde_Crypt module.
# Automatically generated, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Horde_Crypt\n"
"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
"POT-Creation-Date: 2010-10-13 01:27+0200\n"
"PO-Revision-Date: 2010-10-13 01:27+0200\n"
"Last-Translator: Automatically generated\n"
"Language-Team: i18n@lists.horde.org\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/Horde/Crypt/Smime.php:614
#, php-format
msgid "%s Fingerprint"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1240
#, fuzzy
msgid "A passphrase is required to decrypt a message."
msgstr "За да криптирате писмо е необходим публичен PGP ключ."
#: lib/Horde/Crypt/Pgp.php:1307
msgid "A public PGP key is required to verify a signed message."
msgstr "За да проверите подписано писмо е необходим PGP ключ."
#: lib/Horde/Crypt/Pgp.php:1164
msgid ""
"A public PGP key, private PGP key, and passphrase are required to sign a "
"message."
msgstr ""
"За да подпишете писмо са необходими: публичен ключ, личен ключ и ключова "
"фраза."
#: lib/Horde/Crypt/Smime.php:311
#, fuzzy
msgid "A public S/MIME key is required to encrypt a message."
msgstr "За да криптирате писмо е необходим публичен SMIME ключ."
#: lib/Horde/Crypt/Smime.php:422
#, fuzzy
msgid ""
"A public S/MIME key, private S/MIME key, and passphrase are required to "
"decrypt a message."
msgstr ""
"За да декриптирате писмо са необходими: публичен SMIME ключ, личен SMIME "
"ключ и ключова фраза."
#: lib/Horde/Crypt/Smime.php:360
#, fuzzy
msgid ""
"A public S/MIME key, private S/MIME key, and passphrase are required to sign "
"a message."
msgstr ""
"За да подпишете писмо са необходими: публичен SMIME ключ, личен SMIME ключ и "
"ключова фраза."
#: lib/Horde/Crypt/Smime.php:506
msgid "CRL Distribution Points"
msgstr ""
#: lib/Horde/Crypt/Smime.php:609
msgid "Certificate Details"
msgstr ""
#: lib/Horde/Crypt/Smime.php:520
msgid "Certificate Owner"
msgstr ""
#: lib/Horde/Crypt/Smime.php:505
msgid "Certificate Policies"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:426
#, fuzzy
msgid "Comment"
msgstr "Команди:"
#: lib/Horde/Crypt/Smime.php:475
msgid "Common Name"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:939
msgid "Connection refused to the public keyserver."
msgstr "Достъпа до публичния сървър беше отказан."
#: lib/Horde/Crypt/Pgp.php:950
#, fuzzy, php-format
msgid "Connection refused to the public keyserver. Reason: %s (%s)"
msgstr "Достъпа до публичния сървър беше отказан."
#: lib/Horde/Crypt/Pgp.php:1132
#, fuzzy
msgid "Could not PGP encrypt message: "
msgstr "Грешка при PGP криптирането на писмо."
#: lib/Horde/Crypt/Pgp.php:1201
#, fuzzy
msgid "Could not PGP sign message: "
msgstr "Грешка при PGP подписването на писмо."
#: lib/Horde/Crypt/Smime.php:330
#, fuzzy
msgid "Could not S/MIME encrypt message."
msgstr "Грешка при SMIME криптирането на писмо."
#: lib/Horde/Crypt/Smime.php:391
#, fuzzy
msgid "Could not S/MIME sign message."
msgstr "Грешка при SMIME подписването на писмо."
#: lib/Horde/Crypt/Pgp.php:1276
#, fuzzy
msgid "Could not decrypt PGP data: "
msgstr "Грешка при декриптирането на PGP данни."
#: lib/Horde/Crypt/Smime.php:440
#, fuzzy
msgid "Could not decrypt S/MIME data."
msgstr "Грешка при декриптирането на SMIME данни."
#: lib/Horde/Crypt/Pgp.php:659
msgid "Could not determine the recipient's e-mail address."
msgstr "Некоректен email адрес на получателя."
#: lib/Horde/Crypt/Pgp.php:759 lib/Horde/Crypt/Pgp.php:848
msgid "Could not obtain public key from the keyserver."
msgstr "Грешка при получаването на публичния ключ от ключ-сървъра."
#: lib/Horde/Crypt/Smime.php:478
msgid "Country"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:426
#, fuzzy
msgid "E-Mail"
msgstr "Поща"
#: lib/Horde/Crypt/Smime.php:474
msgid "Email Address"
msgstr "Еmail адрес"
#: lib/Horde/Crypt/Pgp.php:1584 lib/Horde/Crypt/Pgp.php:1592
msgid "Error while talking to pgp binary."
msgstr ""
#: lib/Horde/Crypt/Smime.php:1251 lib/Horde/Crypt/Smime.php:1269
#: lib/Horde/Crypt/Smime.php:1284
msgid "Error while talking to smime binary."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:425
msgid "Expiration Date"
msgstr ""
#: lib/Horde/Crypt/Smime.php:586
msgid "Exponent"
msgstr ""
#: lib/Horde/Crypt/Smime.php:484
#, fuzzy
msgid "Given Name"
msgstr "Име на файл"
#: lib/Horde/Crypt/Pgp.php:426
msgid "Hash-Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:534
msgid "Issuer"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
msgid "Key Creation"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:427
msgid "Key Fingerprint"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:427
msgid "Key ID"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:425
msgid "Key Length"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
#, fuzzy
msgid "Key Type"
msgstr "Mime тип"
#: lib/Horde/Crypt/Smime.php:507
#, fuzzy
msgid "Key Usage"
msgstr "Използване::"
#: lib/Horde/Crypt/Pgp.php:782
msgid "Key already exists on the public keyserver."
msgstr "Ключа вече съществува в публичния ключсървър."
#: lib/Horde/Crypt/Smime.php:480
msgid "Location"
msgstr ""
#: lib/Horde/Crypt/Smime.php:189
#, fuzzy
msgid ""
"Message Verified Successfully but the signer's certificate could not be "
"verified."
msgstr ""
"Писмото беше проверено успешно, но сертификата на подписа не беше потвърден."
#: lib/Horde/Crypt/Smime.php:583
msgid "Modulus"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
msgid "Name"
msgstr "Име"
#: lib/Horde/Crypt/Smime.php:490
msgid "Netscape Base URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:492
msgid "Netscape CA Revocation URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:494
msgid "Netscape CA policy URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:493
msgid "Netscape Renewal URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:491
msgid "Netscape Revocation URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:495
msgid "Netscape SSL server name"
msgstr ""
#: lib/Horde/Crypt/Smime.php:496
msgid "Netscape certificate comment"
msgstr ""
#: lib/Horde/Crypt/Smime.php:489
msgid "Netscape certificate type"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:449
msgid "Never"
msgstr "Никога"
#: lib/Horde/Crypt/Smime.php:1217
msgid ""
"No path to the OpenSSL binary provided. The OpenSSL binary is necessary to "
"work with PKCS 12 data."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:451 lib/Horde/Crypt/Pgp.php:452
msgid "None"
msgstr ""
#: lib/Horde/Crypt/Smime.php:549
msgid "Not After"
msgstr ""
#: lib/Horde/Crypt/Smime.php:548
msgid "Not Before"
msgstr ""
#: lib/Horde/Crypt/Smime.php:231
msgid "OpenSSL error: Could not extract data from signed S/MIME part."
msgstr ""
#: lib/Horde/Crypt/Smime.php:476
#, fuzzy
msgid "Organisation"
msgstr "Администриране"
#: lib/Horde/Crypt/Smime.php:477
msgid "Organisational Unit"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1406
msgid "PGP Digital Signature"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1450
msgid "PGP Encrypted Data"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1511
msgid "PGP Public Key"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1493
msgid "PGP Signed/Encrypted Data"
msgstr ""
#: lib/Horde/Crypt/Smime.php:1256
#, fuzzy
msgid "Password incorrect"
msgstr "Парола: "
#: lib/Horde/Crypt/Pgp.php:447
msgid "Private Key"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:447
msgid "Public Key"
msgstr ""
#: lib/Horde/Crypt/Smime.php:554
msgid "Public Key Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:553
msgid "Public Key Info"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:225
msgid "Public/Private keypair not generated successfully."
msgstr "Ключова двойка публичен/частен ключ не беше генерирана."
#: lib/Horde/Crypt/Smime.php:572
#, php-format
msgid "RSA Public Key (%d bit)"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:227
msgid "Returned error message:"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1644
#, fuzzy
msgid "Revocation key not generated successfully."
msgstr "Ключова двойка публичен/частен ключ не беше генерирана."
#: lib/Horde/Crypt/Smime.php:252
msgid "S/MIME Cryptographic Signature"
msgstr ""
#: lib/Horde/Crypt/Smime.php:283
#, fuzzy
msgid "S/MIME Encrypted Message"
msgstr "Грешка при SMIME криптирането на писмо."
#: lib/Horde/Crypt/Smime.php:611
msgid "Serial Number"
msgstr ""
#: lib/Horde/Crypt/Smime.php:622
msgid "Signature"
msgstr ""
#: lib/Horde/Crypt/Smime.php:621
msgid "Signature Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:479
msgid "State or Province"
msgstr ""
#: lib/Horde/Crypt/Smime.php:481
#, fuzzy
msgid "Street Address"
msgstr "Домашен адрес"
#: lib/Horde/Crypt/Smime.php:483
#, fuzzy
msgid "Surname"
msgstr "без име"
#: lib/Horde/Crypt/Smime.php:482
msgid "Telephone Number"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1311
msgid ""
"The detached PGP signature block is required to verify the signed message."
msgstr ""
"Прикрепеният PGP подпис е необходим за да се провери подписаното писмо."
#: lib/Horde/Crypt/Smime.php:1146
#, fuzzy
msgid "The openssl module is required for the Horde_Crypt_Smime:: class."
msgstr "Модулът OpenSSL е необходим за Crypt_smime:: class."
#: lib/Horde/Crypt/Smime.php:512
msgid "Unable to extract certificate details"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:453 lib/Horde/Crypt/Pgp.php:454
#: lib/Horde/Crypt/Pgp.php:455
msgid "Unknown"
msgstr ""
#: lib/Horde/Crypt/Smime.php:596 lib/Horde/Crypt/Smime.php:844
#: lib/Horde/Crypt/Smime.php:850
msgid "Unsupported Extension"
msgstr ""
#: lib/Horde/Crypt/Smime.php:547
msgid "Validity"
msgstr ""
#: lib/Horde/Crypt/Smime.php:191
msgid "Verification failed - an unknown error has occurred."
msgstr ""
#: lib/Horde/Crypt/Smime.php:193
msgid "Verification failed - this message may have been tampered with."
msgstr "Грешка при проверката - това писмо може да е било подправено."
#: lib/Horde/Crypt/Smime.php:610
#, fuzzy
msgid "Version"
msgstr "Права"
#: lib/Horde/Crypt/Smime.php:502
msgid "X509v3 Basic Constraints"
msgstr ""
#: lib/Horde/Crypt/Smime.php:501
msgid "X509v3 Extended Key Usage"
msgstr ""
#: lib/Horde/Crypt/Smime.php:503
msgid "X509v3 Subject Alternative Name"
msgstr ""
#: lib/Horde/Crypt/Smime.php:504
msgid "X509v3 Subject Key Identifier"
msgstr ""
#: lib/Horde/Crypt/Smime.php:592
msgid "X509v3 extensions"
msgstr ""
#: lib/Horde/Crypt/Smime.php:1135
msgid "not yet implemented"
msgstr ""
Horde_Crypt-2.7.11/locale/bs/LC_MESSAGES/Horde_Crypt.mo 0000664 0001750 0001750 00000001150 13166634055 020345 0 ustar jan jan T
B 1 > G K R
Z Email Address Location Name Never None Serial Number Project-Id-Version: Horde_Crypt
Report-Msgid-Bugs-To: dev@lists.horde.org
POT-Creation-Date: 2010-10-13 01:27+0200
PO-Revision-Date: 2010-10-13 01:27+0200
Last-Translator: Automatically generated
Language-Team: i18n@lists.horde.org
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Email adresa Lokacija Ime Nikada Nijedan Serijski broj Horde_Crypt-2.7.11/locale/bs/LC_MESSAGES/Horde_Crypt.po 0000664 0001750 0001750 00000021705 13166634055 020360 0 ustar jan jan # Bosnian translations for Horde_Crypt module.
# Copyright 2010-2017 Horde LLC (http://www.horde.org/)
# This file is distributed under the same license as the Horde_Crypt module.
# Automatically generated, 2010.
#
msgid ""
msgstr ""
"Project-Id-Version: Horde_Crypt\n"
"Report-Msgid-Bugs-To: dev@lists.horde.org\n"
"POT-Creation-Date: 2010-10-13 01:27+0200\n"
"PO-Revision-Date: 2010-10-13 01:27+0200\n"
"Last-Translator: Automatically generated\n"
"Language-Team: i18n@lists.horde.org\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: lib/Horde/Crypt/Smime.php:614
#, php-format
msgid "%s Fingerprint"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1240
msgid "A passphrase is required to decrypt a message."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1307
msgid "A public PGP key is required to verify a signed message."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1164
msgid ""
"A public PGP key, private PGP key, and passphrase are required to sign a "
"message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:311
msgid "A public S/MIME key is required to encrypt a message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:422
msgid ""
"A public S/MIME key, private S/MIME key, and passphrase are required to "
"decrypt a message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:360
msgid ""
"A public S/MIME key, private S/MIME key, and passphrase are required to sign "
"a message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:506
msgid "CRL Distribution Points"
msgstr ""
#: lib/Horde/Crypt/Smime.php:609
msgid "Certificate Details"
msgstr ""
#: lib/Horde/Crypt/Smime.php:520
msgid "Certificate Owner"
msgstr ""
#: lib/Horde/Crypt/Smime.php:505
msgid "Certificate Policies"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:426
msgid "Comment"
msgstr ""
#: lib/Horde/Crypt/Smime.php:475
#, fuzzy
msgid "Common Name"
msgstr "Vaše ime"
#: lib/Horde/Crypt/Pgp.php:939
msgid "Connection refused to the public keyserver."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:950
#, php-format
msgid "Connection refused to the public keyserver. Reason: %s (%s)"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1132
msgid "Could not PGP encrypt message: "
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1201
msgid "Could not PGP sign message: "
msgstr ""
#: lib/Horde/Crypt/Smime.php:330
msgid "Could not S/MIME encrypt message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:391
msgid "Could not S/MIME sign message."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1276
#, fuzzy
msgid "Could not decrypt PGP data: "
msgstr "Nije bilo moguce obrisati poruke od %s: %s"
#: lib/Horde/Crypt/Smime.php:440
msgid "Could not decrypt S/MIME data."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:659
#, fuzzy
msgid "Could not determine the recipient's e-mail address."
msgstr "Nedozvoljena slova u email adresi."
#: lib/Horde/Crypt/Pgp.php:759 lib/Horde/Crypt/Pgp.php:848
msgid "Could not obtain public key from the keyserver."
msgstr ""
#: lib/Horde/Crypt/Smime.php:478
msgid "Country"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:426
#, fuzzy
msgid "E-Mail"
msgstr "Sanduce"
#: lib/Horde/Crypt/Smime.php:474
msgid "Email Address"
msgstr "Email adresa"
#: lib/Horde/Crypt/Pgp.php:1584 lib/Horde/Crypt/Pgp.php:1592
msgid "Error while talking to pgp binary."
msgstr ""
#: lib/Horde/Crypt/Smime.php:1251 lib/Horde/Crypt/Smime.php:1269
#: lib/Horde/Crypt/Smime.php:1284
msgid "Error while talking to smime binary."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:425
msgid "Expiration Date"
msgstr ""
#: lib/Horde/Crypt/Smime.php:586
msgid "Exponent"
msgstr ""
#: lib/Horde/Crypt/Smime.php:484
#, fuzzy
msgid "Given Name"
msgstr "Ime datoteke"
#: lib/Horde/Crypt/Pgp.php:426
msgid "Hash-Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:534
msgid "Issuer"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
msgid "Key Creation"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:427
msgid "Key Fingerprint"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:427
msgid "Key ID"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:425
msgid "Key Length"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:424
#, fuzzy
msgid "Key Type"
msgstr "Mime tip"
#: lib/Horde/Crypt/Smime.php:507
#, fuzzy
msgid "Key Usage"
msgstr "Poruka"
#: lib/Horde/Crypt/Pgp.php:782
msgid "Key already exists on the public keyserver."
msgstr ""
#: lib/Horde/Crypt/Smime.php:480
msgid "Location"
msgstr "Lokacija"
#: lib/Horde/Crypt/Smime.php:189
msgid ""
"Message Verified Successfully but the signer's certificate could not be "
"verified."
msgstr ""
#: lib/Horde/Crypt/Smime.php:583
#, fuzzy
msgid "Modulus"
msgstr "Prebaci"
#: lib/Horde/Crypt/Pgp.php:424
msgid "Name"
msgstr "Ime"
#: lib/Horde/Crypt/Smime.php:490
msgid "Netscape Base URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:492
msgid "Netscape CA Revocation URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:494
msgid "Netscape CA policy URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:493
msgid "Netscape Renewal URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:491
msgid "Netscape Revocation URL"
msgstr ""
#: lib/Horde/Crypt/Smime.php:495
msgid "Netscape SSL server name"
msgstr ""
#: lib/Horde/Crypt/Smime.php:496
msgid "Netscape certificate comment"
msgstr ""
#: lib/Horde/Crypt/Smime.php:489
msgid "Netscape certificate type"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:449
msgid "Never"
msgstr "Nikada"
#: lib/Horde/Crypt/Smime.php:1217
msgid ""
"No path to the OpenSSL binary provided. The OpenSSL binary is necessary to "
"work with PKCS 12 data."
msgstr ""
#: lib/Horde/Crypt/Pgp.php:451 lib/Horde/Crypt/Pgp.php:452
msgid "None"
msgstr "Nijedan"
#: lib/Horde/Crypt/Smime.php:549
#, fuzzy
msgid "Not After"
msgstr "Not Draft"
#: lib/Horde/Crypt/Smime.php:548
#, fuzzy
msgid "Not Before"
msgstr "Not Draft"
#: lib/Horde/Crypt/Smime.php:231
msgid "OpenSSL error: Could not extract data from signed S/MIME part."
msgstr ""
#: lib/Horde/Crypt/Smime.php:476
#, fuzzy
msgid "Organisation"
msgstr "Registracija korisnika"
#: lib/Horde/Crypt/Smime.php:477
msgid "Organisational Unit"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1406
#, fuzzy
msgid "PGP Digital Signature"
msgstr "Zatamni potpise?"
#: lib/Horde/Crypt/Pgp.php:1450
msgid "PGP Encrypted Data"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1511
msgid "PGP Public Key"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:1493
msgid "PGP Signed/Encrypted Data"
msgstr ""
#: lib/Horde/Crypt/Smime.php:1256
#, fuzzy
msgid "Password incorrect"
msgstr "Password"
#: lib/Horde/Crypt/Pgp.php:447
msgid "Private Key"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:447
msgid "Public Key"
msgstr ""
#: lib/Horde/Crypt/Smime.php:554
msgid "Public Key Algorithm"
msgstr ""
#: lib/Horde/Crypt/Smime.php:553
msgid "Public Key Info"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:225
msgid "Public/Private keypair not generated successfully."
msgstr ""
#: lib/Horde/Crypt/Smime.php:572
#, php-format
msgid "RSA Public Key (%d bit)"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:227
#, fuzzy
msgid "Returned error message:"
msgstr "Čitanje poruka"
#: lib/Horde/Crypt/Pgp.php:1644
msgid "Revocation key not generated successfully."
msgstr ""
#: lib/Horde/Crypt/Smime.php:252
msgid "S/MIME Cryptographic Signature"
msgstr ""
#: lib/Horde/Crypt/Smime.php:283
msgid "S/MIME Encrypted Message"
msgstr ""
#: lib/Horde/Crypt/Smime.php:611
msgid "Serial Number"
msgstr "Serijski broj"
#: lib/Horde/Crypt/Smime.php:622
#, fuzzy
msgid "Signature"
msgstr "Vaš potpis:"
#: lib/Horde/Crypt/Smime.php:621
#, fuzzy
msgid "Signature Algorithm"
msgstr "Vaš potpis:"
#: lib/Horde/Crypt/Smime.php:479
msgid "State or Province"
msgstr ""
#: lib/Horde/Crypt/Smime.php:481
#, fuzzy
msgid "Street Address"
msgstr "Od adrese"
#: lib/Horde/Crypt/Smime.php:483
#, fuzzy
msgid "Surname"
msgstr "Username"
#: lib/Horde/Crypt/Smime.php:482
#, fuzzy
msgid "Telephone Number"
msgstr "Serijski broj"
#: lib/Horde/Crypt/Pgp.php:1311
msgid ""
"The detached PGP signature block is required to verify the signed message."
msgstr ""
#: lib/Horde/Crypt/Smime.php:1146
msgid "The openssl module is required for the Horde_Crypt_Smime:: class."
msgstr ""
#: lib/Horde/Crypt/Smime.php:512
msgid "Unable to extract certificate details"
msgstr ""
#: lib/Horde/Crypt/Pgp.php:453 lib/Horde/Crypt/Pgp.php:454
#: lib/Horde/Crypt/Pgp.php:455
msgid "Unknown"
msgstr ""
#: lib/Horde/Crypt/Smime.php:596 lib/Horde/Crypt/Smime.php:844
#: lib/Horde/Crypt/Smime.php:850
msgid "Unsupported Extension"
msgstr ""
#: lib/Horde/Crypt/Smime.php:547
msgid "Validity"
msgstr ""
#: lib/Horde/Crypt/Smime.php:191
#, fuzzy
msgid "Verification failed - an unknown error has occurred."
msgstr "Došlo je do fatalne greške"
#: lib/Horde/Crypt/Smime.php:193
msgid "Verification failed - this message may have been tampered with."
msgstr ""
#: lib/Horde/Crypt/Smime.php:610
#, fuzzy
msgid "Version"
msgstr "Lično"
#: lib/Horde/Crypt/Smime.php:502
msgid "X509v3 Basic Constraints"
msgstr ""
#: lib/Horde/Crypt/Smime.php:501
msgid "X509v3 Extended Key Usage"
msgstr ""
#: lib/Horde/Crypt/Smime.php:503
msgid "X509v3 Subject Alternative Name"
msgstr ""
#: lib/Horde/Crypt/Smime.php:504
msgid "X509v3 Subject Key Identifier"
msgstr ""
#: lib/Horde/Crypt/Smime.php:592
msgid "X509v3 extensions"
msgstr ""
#: lib/Horde/Crypt/Smime.php:1135
#, fuzzy
msgid "not yet implemented"
msgstr "Ne izbrisana"
Horde_Crypt-2.7.11/locale/ca/LC_MESSAGES/Horde_Crypt.mo 0000664 0001750 0001750 00000016000 13166634055 020324 0 ustar jan jan V | x y 8 Q Z W n ! + - ; Y ! 3 / )
Y
a
h
v
+
Q r z & @ b F
>
#
9
L
[
u
2
.
G U _ s J % & < ? E B $ g D | c l % i 0 G d n ; x I ( ( ' ) P @ z > ( : C O a i {
8 d p w { # $ $ 6 [ { m K
R ` u
! A > #
3 : P N 2
G H P m ' U L ) 0 O 1 > 3 K : I R D
5 ' $ 2 7 4 + A <