Merge pull request #4321 from haydenroche5/libimobiledevice

Make changes to support libimobiledevice.
This commit is contained in:
John Safranek
2021-08-24 17:19:26 -07:00
committed by GitHub
6 changed files with 67 additions and 34 deletions

View File

@@ -39,6 +39,7 @@ EXTRA_DIST += \
certs/server-keyPkcs8Enc.pem \ certs/server-keyPkcs8Enc.pem \
certs/server-keyPkcs8Enc.der \ certs/server-keyPkcs8Enc.der \
certs/server-keyPkcs8.pem \ certs/server-keyPkcs8.pem \
certs/server-pub-key.pem \
certs/server-revoked-cert.pem \ certs/server-revoked-cert.pem \
certs/server-revoked-key.pem \ certs/server-revoked-key.pem \
certs/wolfssl-website-ca.pem \ certs/wolfssl-website-ca.pem \

9
certs/server-pub-key.pem Normal file
View File

@@ -0,0 +1,9 @@
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwJUI4VdB8nFtt9JFQScB
ZcZFrvK8JDC4lc4vTtb2HIi8fJ/7qGd//lycUXX3isoH5zUvj+G9e8AvfKtkqBf8
yl17uuAh5XIuby6G2JVz2qwbU7lfP9cZDSVP4WNjUYsLZD+tQ7ilHFw0s64AoGPF
9n8LWWh4c6aMGKkCba/DGQEuuBDjxsxAtGmjRjNph27Euxem8+jdrXO8ey8htf1m
UQy9VLPhbV8cvCNz0QkDiRTSELlkwyrQoZZKvOHUGlvHoMDBY3gPRDcwMpaAMiOV
oXe6E9KXc+JdJclqDcM5YKS0sGlCQgnp2Ai8MyCzWCKnquvE4eZhg8XSlt/Z0E+t
1wIDAQAB
-----END RSA PUBLIC KEY-----

View File

@@ -670,7 +670,7 @@ exit_chain:
if (front != NULL && front->infoCb != NULL) { if (front != NULL && front->infoCb != NULL) {
ret = (int)front->infoCb(front, ret = (int)front->infoCb(front,
WOLFSSL_BIO_CB_WRITE | WOLFSSL_BIO_CB_RETURN, WOLFSSL_BIO_CB_WRITE | WOLFSSL_BIO_CB_RETURN,
(const char*)data, 0, 0, ret); (const char*)data, len, 0, ret);
} }
if (frmt != NULL) { if (frmt != NULL) {

View File

@@ -28758,6 +28758,12 @@ static void test_wolfSSL_PEM_bio_RSAKey(void)
BIO_free(bio); BIO_free(bio);
RSA_free(rsa); RSA_free(rsa);
/* Ensure that keys beginning with BEGIN RSA PUBLIC KEY can be read, too. */
AssertNotNull(bio = BIO_new_file("./certs/server-pub-key.pem", "rb"));
AssertNotNull((rsa = PEM_read_bio_RSA_PUBKEY(bio, NULL, NULL, NULL)));
BIO_free(bio);
RSA_free(rsa);
#ifdef HAVE_ECC #ifdef HAVE_ECC
/* ensure that non-rsa keys do not work */ /* ensure that non-rsa keys do not work */
AssertNotNull(bio = BIO_new_file(eccKeyFile, "rb")); /* ecc key */ AssertNotNull(bio = BIO_new_file(eccKeyFile, "rb")); /* ecc key */

View File

@@ -18190,6 +18190,8 @@ wcchar BEGIN_X509_CRL = "-----BEGIN X509 CRL-----";
wcchar END_X509_CRL = "-----END X509 CRL-----"; wcchar END_X509_CRL = "-----END X509 CRL-----";
wcchar BEGIN_RSA_PRIV = "-----BEGIN RSA PRIVATE KEY-----"; wcchar BEGIN_RSA_PRIV = "-----BEGIN RSA PRIVATE KEY-----";
wcchar END_RSA_PRIV = "-----END RSA PRIVATE KEY-----"; wcchar END_RSA_PRIV = "-----END RSA PRIVATE KEY-----";
wcchar BEGIN_RSA_PUB = "-----BEGIN RSA PUBLIC KEY-----";
wcchar END_RSA_PUB = "-----END RSA PUBLIC KEY-----";
wcchar BEGIN_PRIV_KEY = "-----BEGIN PRIVATE KEY-----"; wcchar BEGIN_PRIV_KEY = "-----BEGIN PRIVATE KEY-----";
wcchar END_PRIV_KEY = "-----END PRIVATE KEY-----"; wcchar END_PRIV_KEY = "-----END PRIVATE KEY-----";
wcchar BEGIN_ENC_PRIV_KEY = "-----BEGIN ENCRYPTED PRIVATE KEY-----"; wcchar BEGIN_ENC_PRIV_KEY = "-----BEGIN ENCRYPTED PRIVATE KEY-----";
@@ -18724,42 +18726,57 @@ int PemToDer(const unsigned char* buff, long longSz, int type,
if (headerEnd) { if (headerEnd) {
break; break;
} else }
if (type == PRIVATEKEY_TYPE) { if (type == PRIVATEKEY_TYPE) {
if (header == BEGIN_RSA_PRIV) { if (header == BEGIN_RSA_PRIV) {
header = BEGIN_PRIV_KEY; footer = END_PRIV_KEY; header = BEGIN_PRIV_KEY;
} else footer = END_PRIV_KEY;
if (header == BEGIN_PRIV_KEY) { }
header = BEGIN_ENC_PRIV_KEY; footer = END_ENC_PRIV_KEY; else if (header == BEGIN_PRIV_KEY) {
} else header = BEGIN_ENC_PRIV_KEY;
footer = END_ENC_PRIV_KEY;
}
#ifdef HAVE_ECC
else if (header == BEGIN_ENC_PRIV_KEY) {
header = BEGIN_EC_PRIV;
footer = END_EC_PRIV;
}
else if (header == BEGIN_EC_PRIV) {
header = BEGIN_DSA_PRIV;
footer = END_DSA_PRIV;
}
#endif
#if defined(HAVE_ED25519) || defined(HAVE_ED448)
#ifdef HAVE_ECC #ifdef HAVE_ECC
if (header == BEGIN_ENC_PRIV_KEY) { else if (header == BEGIN_DSA_PRIV) {
header = BEGIN_EC_PRIV; footer = END_EC_PRIV; #else
} else else if (header == BEGIN_ENC_PRIV_KEY) {
if (header == BEGIN_EC_PRIV) {
header = BEGIN_DSA_PRIV; footer = END_DSA_PRIV;
} else
#endif #endif
#if defined(HAVE_ED25519) || defined(HAVE_ED448) header = BEGIN_EDDSA_PRIV;
#ifdef HAVE_ECC footer = END_EDDSA_PRIV;
if (header == BEGIN_DSA_PRIV) }
#else #endif
if (header == BEGIN_ENC_PRIV_KEY) else {
#endif
{
header = BEGIN_EDDSA_PRIV; footer = END_EDDSA_PRIV;
} else
#endif
{
break; break;
} }
} else }
else if (type == PUBLICKEY_TYPE) {
if (header == BEGIN_PUB_KEY) {
header = BEGIN_RSA_PUB;
footer = END_RSA_PUB;
}
else {
break;
}
}
#ifdef HAVE_CRL #ifdef HAVE_CRL
if ((type == CRL_TYPE) && (header != BEGIN_X509_CRL)) { else if ((type == CRL_TYPE) && (header != BEGIN_X509_CRL)) {
header = BEGIN_X509_CRL; footer = END_X509_CRL; header = BEGIN_X509_CRL;
} else footer = END_X509_CRL;
}
#endif #endif
{ else {
break; break;
} }
} }

View File

@@ -7442,18 +7442,18 @@ int wolfSSL_EVP_PKEY_assign_RSA(EVP_PKEY* pkey, WOLFSSL_RSA* key)
pkey->rsa = key; pkey->rsa = key;
pkey->ownRsa = 1; pkey->ownRsa = 1;
/* try and populate public pkey_sz and pkey.ptr */ /* try and populate pkey_sz and pkey.ptr */
if (key->internal) { if (key->internal) {
RsaKey* rsa = (RsaKey*)key->internal; RsaKey* rsa = (RsaKey*)key->internal;
int ret = wc_RsaPublicKeyDerSize(rsa, 1); int ret = wc_RsaKeyToDer(rsa, NULL, 0);
if (ret > 0) { if (ret > 0) {
int derSz = ret; int derSz = ret;
char* derBuf = (char*)XMALLOC(derSz, NULL, DYNAMIC_TYPE_TMP_BUFFER); byte* derBuf = (byte*)XMALLOC(derSz, NULL, DYNAMIC_TYPE_TMP_BUFFER);
if (derBuf) { if (derBuf) {
ret = wc_RsaKeyToPublicDer(rsa, (byte*)derBuf, derSz); ret = wc_RsaKeyToDer(rsa, derBuf, derSz);
if (ret >= 0) { if (ret >= 0) {
pkey->pkey_sz = ret; pkey->pkey_sz = ret;
pkey->pkey.ptr = derBuf; pkey->pkey.ptr = (char*)derBuf;
} }
else { /* failure - okay to ignore */ else { /* failure - okay to ignore */
XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER); XFREE(derBuf, NULL, DYNAMIC_TYPE_TMP_BUFFER);