Match Zend behavior for openssl_pkey_get_{public,private}
We weren't treating array(key, passphrase) correctly. Closes #815
Esse commit está contido em:
@@ -181,6 +181,22 @@ public:
|
||||
*/
|
||||
static Object Get(CVarRef var, bool public_key,
|
||||
const char *passphrase = NULL) {
|
||||
if (var.is(KindOfArray)) {
|
||||
Array arr = var.toArray();
|
||||
if (!arr.exists(int64_t(0)) || !arr.exists(int64_t(1))) {
|
||||
raise_warning("key array must be of the form "
|
||||
"array(0 => key, 1 => phrase)");
|
||||
return Object();
|
||||
}
|
||||
|
||||
String zphrase = arr[1].toString();
|
||||
return GetHelper(arr[0], public_key, zphrase.data());
|
||||
}
|
||||
return GetHelper(var, public_key, passphrase);
|
||||
}
|
||||
|
||||
static Object GetHelper(CVarRef var, bool public_key,
|
||||
const char *passphrase) {
|
||||
Object ocert;
|
||||
EVP_PKEY *key = NULL;
|
||||
|
||||
@@ -217,17 +233,6 @@ public:
|
||||
BIO_free(in);
|
||||
}
|
||||
} else {
|
||||
String zphrase;
|
||||
if (var.is(KindOfArray)) {
|
||||
Array arr = var.toArray();
|
||||
if (!arr.exists(int64_t(0)) || !arr.exists(int64_t(1))) {
|
||||
raise_warning("key array must be of the form "
|
||||
"array(0 => key, 1 => phrase)");
|
||||
return Object();
|
||||
}
|
||||
zphrase = arr[1].toString();
|
||||
passphrase = zphrase.data();
|
||||
}
|
||||
/* we want the private key */
|
||||
BIO *in = Certificate::ReadData(var);
|
||||
if (in == NULL) return Object();
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<?php
|
||||
$_privateKeyString = <<<PK
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
Proc-Type: 4,ENCRYPTED
|
||||
DEK-Info: DES-EDE3-CBC,692C329D4C517E8C
|
||||
|
||||
xmv90bzhJPFudKQQcMtOTirYthJC/At4u9F6IzaRMcUDS/f9MhJ6OPkxs37lsXfE
|
||||
R/gRcw5fhoJNSCQLEPgNzZy11F46KAF9eVlFmBb92I5zHsGKtWIZaKkK8nthCJFU
|
||||
w/FucpOF/i80PTN+QEaESeGEhr/ND5jAS10v756Bn0lrXz3QK/W7lIKzAP0f+gx/
|
||||
P0V1NcMLATubmc5ryGEO/xJU9nzyEg4Ps+b4ITxM/DKOUewerWnmNVA/U1qiiYUL
|
||||
DVwvjeLkgCzX9ggJnoqnM2ItWYeZ1e2IAeNa/skh1qyKxV5spat6DflY7L/+s0KQ
|
||||
e1xIaYHYLOzmBqphF+gBu0Zr6C9xNeSdYeZGL8GxHhzrQzlA+zDFRySAav9uFBko
|
||||
BM298Bl+3qtdm2QBzMxmrwqhY5fup9Nt2934zCqxQ1oY/dkTIaGOdEejXcUBIKnA
|
||||
tpWumSqjMPiBVY/S5lQGCbLLU/4+2HpAfzqeg3IDjFgtvDysrnPPbCUMKrG1OfFi
|
||||
PymDODUWbCvpy0a9KeC1b+oJL8TWaJwSx85137csvRbMqVExRB+NoKGj06cZlxgr
|
||||
ewfRvQhbtUWP2gSNdFzzvrxrTEPd5Bw3J4V60uFKOqXfamfNrdPB35YazQ3CSqMU
|
||||
eV8Al8BnmcT4mba3twR9EPIpcxc9x8sOVSfyksuZUx4C9o4lduAQhuP45LC7ghlr
|
||||
hyWCfwOG+U1wF92pcXPX2+lfTb1i0TGGydLgFbdJbC69ZSQVC04DFjwuBIzNQupq
|
||||
6E/G3hatYaKK2GImNUyf2lXowpXifjPX2tdg+Bor7fA=
|
||||
-----END RSA PRIVATE KEY-----
|
||||
PK;
|
||||
|
||||
$_publicKeyString = <<<PK
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC01FK995TLzyCJdyfH1yKVJwJ+
|
||||
sSxpKMLiRHfk39SPFEoePqCQ0PCiisvekx9gJNW2xpg2Ecx/8XQRq2Gq/1AymJQ0
|
||||
wNPRgnCo0pi+eSjx8DJ+bWlvWVstxH93QgZPywQegS0VdGEkYD+70dl0jykRwQJ3
|
||||
W/noSOyMhVl694yFbwIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
PK;
|
||||
|
||||
$_passPhrase = 'test';
|
||||
$publicKey = openssl_pkey_get_public(array($_publicKeyString, $_passPhrase));
|
||||
$privateKey = openssl_pkey_get_private(array($_privateKeyString, $_passPhrase));
|
||||
var_dump(openssl_public_encrypt($_passPhrase, $crypted, $publicKey));
|
||||
var_dump(openssl_private_decrypt($crypted, $decrypted, $privateKey));
|
||||
@@ -0,0 +1,2 @@
|
||||
bool(true)
|
||||
bool(true)
|
||||
Referência em uma Nova Issue
Bloquear um usuário