Match Zend behavior on openssl_pkey_get_details
Zend PHP populates an extra field in the details array with some more information about the resource it is passed, while HHVM leaves this information out. Closes #815
Esse commit está contido em:
@@ -1655,6 +1655,35 @@ static const StaticString s_alias("alias");
|
||||
static const StaticString s_purposes("purposes");
|
||||
static const StaticString s_extensions("extensions");
|
||||
|
||||
static const StaticString s_rsa("rsa");
|
||||
static const StaticString s_dsa("dsa");
|
||||
static const StaticString s_dh("dh");
|
||||
|
||||
static const StaticString s_n("n");
|
||||
static const StaticString s_e("e");
|
||||
static const StaticString s_d("d");
|
||||
static const StaticString s_p("p");
|
||||
static const StaticString s_q("q");
|
||||
static const StaticString s_g("g");
|
||||
static const StaticString s_dmp1("dmp1");
|
||||
static const StaticString s_dmq1("dmq1");
|
||||
static const StaticString s_iqmp("iqmp");
|
||||
static const StaticString s_priv_key("priv_key");
|
||||
static const StaticString s_pub_key("pub_key");
|
||||
|
||||
static void add_bignum_as_string(Array &arr,
|
||||
StaticString key,
|
||||
BIGNUM *bn) {
|
||||
if (!bn) {
|
||||
return;
|
||||
}
|
||||
int num_bytes = BN_num_bytes(bn);
|
||||
unsigned char *out = (unsigned char *)smart_malloc(num_bytes);
|
||||
BN_bn2bin(bn, out);
|
||||
arr.set(key, String((const char *)out, num_bytes, CopyString));
|
||||
smart_free(out);
|
||||
}
|
||||
|
||||
Array f_openssl_pkey_get_details(CObjRef key) {
|
||||
EVP_PKEY *pkey = key.getTyped<Key>()->m_key;
|
||||
BIO *out = BIO_new(BIO_s_mem());
|
||||
@@ -1666,14 +1695,48 @@ Array f_openssl_pkey_get_details(CObjRef key) {
|
||||
ret.set(s_bits, EVP_PKEY_bits(pkey));
|
||||
ret.set(s_key, String(pbio, pbio_len, CopyString));
|
||||
long ktype = -1;
|
||||
|
||||
Array details;
|
||||
RSA *rsa = pkey->pkey.rsa;
|
||||
DSA *dsa = pkey->pkey.dsa;
|
||||
DH *dh = pkey->pkey.dh;
|
||||
switch (EVP_PKEY_type(pkey->type)) {
|
||||
case EVP_PKEY_RSA:
|
||||
case EVP_PKEY_RSA2: ktype = k_OPENSSL_KEYTYPE_RSA; break;
|
||||
case EVP_PKEY_RSA2:
|
||||
ktype = k_OPENSSL_KEYTYPE_RSA;
|
||||
assert(rsa);
|
||||
add_bignum_as_string(details, s_n, rsa->n);
|
||||
add_bignum_as_string(details, s_e, rsa->e);
|
||||
add_bignum_as_string(details, s_d, rsa->d);
|
||||
add_bignum_as_string(details, s_p, rsa->p);
|
||||
add_bignum_as_string(details, s_q, rsa->q);
|
||||
add_bignum_as_string(details, s_dmp1, rsa->dmp1);
|
||||
add_bignum_as_string(details, s_dmq1, rsa->dmq1);
|
||||
add_bignum_as_string(details, s_iqmp, rsa->iqmp);
|
||||
ret.set(s_rsa, details);
|
||||
break;
|
||||
case EVP_PKEY_DSA:
|
||||
case EVP_PKEY_DSA2:
|
||||
case EVP_PKEY_DSA3:
|
||||
case EVP_PKEY_DSA4: ktype = k_OPENSSL_KEYTYPE_DSA; break;
|
||||
case EVP_PKEY_DH: ktype = k_OPENSSL_KEYTYPE_DH; break;
|
||||
case EVP_PKEY_DSA4:
|
||||
ktype = k_OPENSSL_KEYTYPE_DSA;
|
||||
assert(dsa);
|
||||
add_bignum_as_string(details, s_p, dsa->p);
|
||||
add_bignum_as_string(details, s_q, dsa->q);
|
||||
add_bignum_as_string(details, s_g, dsa->g);
|
||||
add_bignum_as_string(details, s_priv_key, dsa->priv_key);
|
||||
add_bignum_as_string(details, s_pub_key, dsa->pub_key);
|
||||
ret.set(s_dsa, details);
|
||||
break;
|
||||
case EVP_PKEY_DH:
|
||||
ktype = k_OPENSSL_KEYTYPE_DH;
|
||||
assert(dh);
|
||||
add_bignum_as_string(details, s_p, dh->p);
|
||||
add_bignum_as_string(details, s_g, dh->g);
|
||||
add_bignum_as_string(details, s_priv_key, dh->priv_key);
|
||||
add_bignum_as_string(details, s_pub_key, dh->pub_key);
|
||||
ret.set(s_dh, details);
|
||||
break;
|
||||
#ifdef EVP_PKEY_EC
|
||||
case EVP_PKEY_EC: ktype = k_OPENSSL_KEYTYPE_EC; break;
|
||||
#endif
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<?php
|
||||
|
||||
$key = <<<EOF
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDXX/MsKEBLcLeKA1d/i7ufG1qs
|
||||
qS97xFkIRSeX3TwmHic843AfVrzoh2pZUeOvK9ZLZQpHSM7DoHMYDGD1273+FvZX
|
||||
Ypf5LiFtecfxko/Cku16zy6WAeCYVFjjlveBhwPmPCIk+qDRYeiIW05QE2XK+CuD
|
||||
nJ7sxxXIJSSgD3Jo5wIDAQAB
|
||||
-----END PUBLIC KEY-----
|
||||
EOF;
|
||||
|
||||
print $key;
|
||||
$res = openssl_pkey_get_public($key);
|
||||
var_dump(openssl_pkey_get_details($res));
|
||||
?>
|
||||
|
||||
Arquivo binário não exibido.
@@ -0,0 +1,24 @@
|
||||
<?php
|
||||
|
||||
$key = <<<EOF
|
||||
-----BEGIN PRIVATE KEY-----
|
||||
MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALxTCsLc9GVvv9Hj
|
||||
riy0tyAS4LCuQvmca0NkJYAyWO3VoJ68oic+6qqCCeJZUw0itpcuzuaF73/8AmDN
|
||||
ULjXvvHIkrjdkx0E24AUyjbqtdFyBH2BsidLyEbhBSFFwVnxtkGR1WS+BLD2UQCN
|
||||
jeMhaqfnvJ7Blb+X8UFd1qYM4BXLAgMBAAECgYAIUC4gbfqH48f27vMIXC3dR5gN
|
||||
lJO2SxZdEjWplA9i6FQ/zZnm25smTbk7+a912/ttbw6JFI5++tPsDAQtNLDkDf1r
|
||||
SIYzpj/wvbwEMj8Ezod8agRG1/Gayo/YKtKfE+rnlwnyHWPf5au7UARoXNz+9Zjg
|
||||
BiDsYaQpa0gWJOh+6QJBAO/vEvgHg2+NKeBK9gupMrjCakh/V+473jEpWP4LSoDd
|
||||
TX3KhW0eYvm/oNPbzXSmI7vRZJIKYwDPoE1DbIy3gA0CQQDI70hHox9thaS5V1nN
|
||||
VRaUEQ6T1ssZMehczJYMLS0JfkuZb+nnr8ULjjCVLJvjsBdG7Dv0hs236bLP2DVu
|
||||
Oh83AkAQGP0v0Ok7mb/+gWkCnUZ+6ORSmuCeZjvhFoIXAVDtVmu1jdnn2UsQsI+s
|
||||
xymAswjguArEVZgQ3N1HccedpU4dAkBuuXzpDPi6j5SQFZSE08iXWzbfPNO6VIgo
|
||||
6wwcNaDFxHTAXq1UYMWCcp5O9cAJnfWVvYPkYYxnNj60zf3Tee/NAkBhjaquRQ8b
|
||||
Ol3NL1UvZIzrhb8pFemgqPktS+AYgmYaOiEJEJp2NcGN1JCCR7zPsfDHo/heSY+w
|
||||
bHgjQ5gI077k
|
||||
-----END PRIVATE KEY-----
|
||||
EOF;
|
||||
|
||||
$res = openssl_pkey_get_private($key);
|
||||
var_dump(openssl_pkey_get_details($res));
|
||||
?>
|
||||
Arquivo binário não exibido.
@@ -0,0 +1,46 @@
|
||||
<?php
|
||||
|
||||
$key = <<<EOF
|
||||
-----BEGIN PUBLIC KEY-----
|
||||
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
|
||||
UtKU+GNOjOgR2xYv12w=
|
||||
-----END PUBLIC KEY-----
|
||||
EOF;
|
||||
|
||||
print $key;
|
||||
$res = openssl_pkey_get_public($key);
|
||||
var_dump(openssl_pkey_get_details($res));
|
||||
?>
|
||||
|
||||
Arquivo binário não exibido.
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
$key = <<<EOF
|
||||
-----BEGIN DSA PRIVATE KEY-----
|
||||
MIIGPgIBAAKCAgEAlCGmXKDhl32B70nEpRWN40d9DfUTaurzDiCNo8bq5dE7Yzm8
|
||||
ZEWm3JUgWYfbTbnSzw3DhAepCKew9IS03/S6UyG0PTyLofOUmE5rC3Er6QB0ezc7
|
||||
f8OhPVrPEng2GW4hR+vQMpz434AigXE5KE35Gd6K0zrc9zSvwCxVHGE7nv7r305W
|
||||
o7XVTvqyEzwviWdy+XjVog/oYoGBb1+NssVGpOLPhpWbAPiudFYs7SGvTkQOjqhJ
|
||||
4ejgj4F9CaF2LyznA1VU4xlvW/8GjhrrToSEUtB4hRiuu7hejnejrQGUKIdRTV+5
|
||||
WxeYFzoSoiaAuuV35pKHLDxa12HoDtRcNFvKDSTwz2bnAuEeNhdyCjVL2+NpKH6+
|
||||
Ofnn/fdQCS8NUyINVuSt2HyxNynBQnry4/JSROjp8gv8LDXdOSkubN4VPLsf1SLg
|
||||
KZ2R14Oei74JcYL1oPb2dEq3UHH77iwZ/Jdw+2lSngCQNxEy48dYGayGxkvg310R
|
||||
647jWPVYJzqMgvF+aNU7rYO0/x9h6C+1uAzYU5fiFkyxAiU4gvC+4jeCJistkp6H
|
||||
71DVZCoO5Eo4YVzSAWciZsVvLnZBrtxDJqG0xPUKWAnKfu/LtnznVKo1KM0mSQKc
|
||||
fhevaMtjwcWzwHTT1EZASMkNbL7Lb+6CoWbf99NmZ567KYFn7bvGNMPBEDUCFQC4
|
||||
6tXV5+5IvDf7FMWn6KYHF1Bn0QKCAgB+p8D9cZjfy8IJgnAuhLPTmhs1c6Kn87D3
|
||||
oGHToaMARloEgoaNrJ/cUoWEugbTCcVmzah0F2Ht5fBpi6ZPrGhZkU2N/Tg6nwTo
|
||||
5yfFBmwx9M+w/A9NytyY/bsUeQJ/LyfEbgKK/+201DV/t//yhJCBPPjJQvWu5bqF
|
||||
utyKLLV2wNp8D0nkxWiR6g54nYm6AYnNsLVShtfG1oDdLMusxvjlfOE5o6G3H321
|
||||
TReTcku6CNgAxki6qwcY7ap4P44bfQmZXU5WPmBrfHyoyYjuZh4CaTHoSP+yWEAB
|
||||
P3crvELK28dXDXTQrgoh8gL5ZYC7EXgc5kJ7lX++Ou7STBFIGfnPBvf/a8J5lE/6
|
||||
aUOMu8NwJohFcQ0YRIoAZm9yyfi4wZ+hW5r/zGknUU9gslCZOMDDvBB5C1Y1umLi
|
||||
kWHLgNlrFmKybxUPfUpwPA8jliwek5hg3CJjX/rvTK9y9gXqqJXNAuXLR4WBhemp
|
||||
Y2wQ0HPnTAqZgtx09Ong0DvpvukWQMcFKYkYJRi046kMsHcaSl5BcwykYka7gYzz
|
||||
9V2SP2LMRt31z6J7SV6y2Vby2e2d+j/SqsDCIzlZUIX3sCH0rkzKBhoSmYiNSE1E
|
||||
AiU+jmQDmSGKulcwtSwRMen6DDrdmAoDBtrnnFJsreodLf/nTfbTbdnAp3zNe0XR
|
||||
LblH3WwbegKCAgBbdwOR4qjLaThMNcZOHhd9PxW9A/H7XyFV5xmQKlSGXw+Dg79e
|
||||
YcQqut/lzpmeR1ECgA8aMuDwAJN4oqAk2WzLHddSlBs3rvklp9vH4g/pHu/8ZI7r
|
||||
+ijEAFe23GnIU2pqp/Jb9tUsseRYph4PqkCvTRizfKEU49GvIdkIAbCngzzS3+4y
|
||||
lYuAkZzvqeXCLw29se/2NjmlH/xd8Z0pDAn5umPgRwO5w/RkE1MiK4bQBNx4bbwF
|
||||
uZ89P0oCE33sOl/OB01Ux0ScCe3dVXVvB8q04WgF8jr3LAw98SBoCX9DKZrqEGI7
|
||||
Gbm9hy96wjvoCrvdOMV/iwY29p/5oHiVjbQwNWH1DS4uUnXMa0vrKrsOJx3ib7PP
|
||||
R2eoQNpSG2zTXMlgQzf8BVie2wS365sVysG6z0DD3MvZDbeNN7PuSJuCML6gk1gx
|
||||
H5vA0IEEV5ZmsRKiJEJNH+1wgMLoYpjoXBYrFntcnDTyadEGQ5p99ot0uaytn130
|
||||
sBIhtW+neXR2wm3BmJmHC4vo2MIcVY7n872vUqltZE4Aq1k1w5GrffRAbjSxpS7h
|
||||
Dx+FheKPHKUsHzsAcXwoelTgeu5++nYtAbjXsx93vAACjkE5o1jNvsqcPNCMvjXC
|
||||
+hcbA+1xUH+MVzyRfn0iUacE4bFiDQYwy8O7bLRS0pT4Y06M6BHbFi/XbAIVAKX9
|
||||
rNJ35snOanui1OPjE7TRtZwQ
|
||||
-----END DSA PRIVATE KEY-----
|
||||
EOF;
|
||||
|
||||
$res = openssl_pkey_get_private($key);
|
||||
var_dump(openssl_pkey_get_details($res));
|
||||
?>
|
||||
Arquivo binário não exibido.
Referência em uma Nova Issue
Bloquear um usuário