mirror of https://github.com/FreeRDP/FreeRDP
winpr-makecert: remove dependency on OPENSSL_Applink on Windows
This commit is contained in:
parent
73c90e0505
commit
a00ef5d044
|
@ -40,7 +40,6 @@ struct _MAKECERT_CONTEXT
|
|||
int argc;
|
||||
char** argv;
|
||||
|
||||
BIO* bio;
|
||||
RSA* rsa;
|
||||
X509* x509;
|
||||
EVP_PKEY* pkey;
|
||||
|
@ -454,7 +453,9 @@ int makecert_context_set_output_file_name(MAKECERT_CONTEXT* context, char* name)
|
|||
int makecert_context_output_certificate_file(MAKECERT_CONTEXT* context, char* path)
|
||||
{
|
||||
FILE* fp;
|
||||
int status;
|
||||
int length;
|
||||
int offset;
|
||||
char* filename;
|
||||
char* fullpath;
|
||||
|
||||
|
@ -485,6 +486,9 @@ int makecert_context_output_certificate_file(MAKECERT_CONTEXT* context, char* pa
|
|||
|
||||
if (fp)
|
||||
{
|
||||
BIO* bio;
|
||||
BYTE* x509_str;
|
||||
|
||||
if (context->pfxFormat)
|
||||
{
|
||||
if (!context->password)
|
||||
|
@ -497,17 +501,136 @@ int makecert_context_output_certificate_file(MAKECERT_CONTEXT* context, char* pa
|
|||
OpenSSL_add_all_ciphers();
|
||||
OpenSSL_add_all_digests();
|
||||
|
||||
context->pkcs12 = PKCS12_create(context->password, context->default_name, context->pkey,
|
||||
context->x509, NULL, 0, 0, 0, 0, 0);
|
||||
context->pkcs12 = PKCS12_create(context->password, context->default_name,
|
||||
context->pkey, context->x509, NULL, 0, 0, 0, 0, 0);
|
||||
|
||||
i2d_PKCS12_fp(fp, context->pkcs12);
|
||||
bio = BIO_new(BIO_s_mem());
|
||||
|
||||
if (!bio)
|
||||
return -1;
|
||||
|
||||
status = i2d_PKCS12_bio(bio, context->pkcs12);
|
||||
|
||||
offset = 0;
|
||||
length = 2048;
|
||||
x509_str = (BYTE*) malloc(length);
|
||||
|
||||
status = BIO_read(bio, x509_str, length);
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
offset += status;
|
||||
|
||||
while (offset >= length)
|
||||
{
|
||||
length *= 2;
|
||||
x509_str = (BYTE*) realloc(x509_str, length);
|
||||
|
||||
status = BIO_read(bio, &x509_str[offset], length);
|
||||
|
||||
if (status < 0)
|
||||
break;
|
||||
|
||||
offset += status;
|
||||
}
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
length = offset;
|
||||
|
||||
fwrite((void*) x509_str, length, 1, fp);
|
||||
|
||||
free(x509_str);
|
||||
BIO_free(bio);
|
||||
}
|
||||
else
|
||||
{
|
||||
PEM_write_X509(fp, context->x509);
|
||||
bio = BIO_new(BIO_s_mem());
|
||||
|
||||
if (!bio)
|
||||
return -1;
|
||||
|
||||
status = PEM_write_bio_X509(bio, context->x509);
|
||||
|
||||
offset = 0;
|
||||
length = 2048;
|
||||
x509_str = (BYTE*) malloc(length);
|
||||
|
||||
status = BIO_read(bio, x509_str, length);
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
offset += status;
|
||||
|
||||
while (offset >= length)
|
||||
{
|
||||
length *= 2;
|
||||
x509_str = (BYTE*) realloc(x509_str, length);
|
||||
|
||||
status = BIO_read(bio, &x509_str[offset], length);
|
||||
|
||||
if (status < 0)
|
||||
break;
|
||||
|
||||
offset += status;
|
||||
}
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
length = offset;
|
||||
|
||||
fwrite((void*) x509_str, length, 1, fp);
|
||||
|
||||
free(x509_str);
|
||||
BIO_free(bio);
|
||||
|
||||
if (context->pemFormat)
|
||||
PEM_write_PrivateKey(fp, context->pkey, NULL, NULL, 0, NULL, NULL);
|
||||
{
|
||||
bio = BIO_new(BIO_s_mem());
|
||||
|
||||
if (!bio)
|
||||
return -1;
|
||||
|
||||
status = PEM_write_bio_PrivateKey(bio, context->pkey, NULL, NULL, 0, NULL, NULL);
|
||||
|
||||
offset = 0;
|
||||
length = 2048;
|
||||
x509_str = (BYTE*) malloc(length);
|
||||
|
||||
status = BIO_read(bio, x509_str, length);
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
offset += status;
|
||||
|
||||
while (offset >= length)
|
||||
{
|
||||
length *= 2;
|
||||
x509_str = (BYTE*) realloc(x509_str, length);
|
||||
|
||||
status = BIO_read(bio, &x509_str[offset], length);
|
||||
|
||||
if (status < 0)
|
||||
break;
|
||||
|
||||
offset += status;
|
||||
}
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
length = offset;
|
||||
|
||||
fwrite((void*) x509_str, length, 1, fp);
|
||||
|
||||
free(x509_str);
|
||||
BIO_free(bio);
|
||||
}
|
||||
}
|
||||
|
||||
fclose(fp);
|
||||
|
@ -522,7 +645,9 @@ int makecert_context_output_certificate_file(MAKECERT_CONTEXT* context, char* pa
|
|||
int makecert_context_output_private_key_file(MAKECERT_CONTEXT* context, char* path)
|
||||
{
|
||||
FILE* fp;
|
||||
int status;
|
||||
int length;
|
||||
int offset;
|
||||
char* filename;
|
||||
char* fullpath;
|
||||
|
||||
|
@ -551,7 +676,50 @@ int makecert_context_output_private_key_file(MAKECERT_CONTEXT* context, char* pa
|
|||
|
||||
if (fp)
|
||||
{
|
||||
PEM_write_PrivateKey(fp, context->pkey, NULL, NULL, 0, NULL, NULL);
|
||||
BIO* bio;
|
||||
BYTE* x509_str;
|
||||
|
||||
bio = BIO_new(BIO_s_mem());
|
||||
|
||||
if (!bio)
|
||||
return -1;
|
||||
|
||||
status = PEM_write_bio_PrivateKey(bio, context->pkey, NULL, NULL, 0, NULL, NULL);
|
||||
|
||||
offset = 0;
|
||||
length = 2048;
|
||||
x509_str = (BYTE*) malloc(length);
|
||||
|
||||
status = BIO_read(bio, x509_str, length);
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
offset += status;
|
||||
|
||||
while (offset >= length)
|
||||
{
|
||||
length *= 2;
|
||||
x509_str = (BYTE*) realloc(x509_str, length);
|
||||
|
||||
status = BIO_read(bio, &x509_str[offset], length);
|
||||
|
||||
if (status < 0)
|
||||
break;
|
||||
|
||||
offset += status;
|
||||
}
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
length = offset;
|
||||
|
||||
fwrite((void*) x509_str, length, 1, fp);
|
||||
|
||||
free(x509_str);
|
||||
BIO_free(bio);
|
||||
|
||||
fclose(fp);
|
||||
}
|
||||
|
||||
|
@ -582,9 +750,6 @@ int makecert_context_process(MAKECERT_CONTEXT* context, int argc, char** argv)
|
|||
if (!context->common_name)
|
||||
context->common_name = _strdup(context->default_name);
|
||||
|
||||
CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);
|
||||
context->bio = BIO_new_fp(stderr, BIO_NOCLOSE);
|
||||
|
||||
if (!context->pkey)
|
||||
context->pkey = EVP_PKEY_new();
|
||||
|
||||
|
@ -712,7 +877,55 @@ int makecert_context_process(MAKECERT_CONTEXT* context, int argc, char** argv)
|
|||
*/
|
||||
|
||||
if (!context->silent)
|
||||
X509_print_fp(stdout, context->x509);
|
||||
{
|
||||
BIO* bio;
|
||||
int status;
|
||||
int length;
|
||||
int offset;
|
||||
BYTE* x509_str;
|
||||
|
||||
bio = BIO_new(BIO_s_mem());
|
||||
|
||||
if (!bio)
|
||||
return -1;
|
||||
|
||||
status = X509_print(bio, context->x509);
|
||||
|
||||
offset = 0;
|
||||
length = 2048;
|
||||
x509_str = (BYTE*) malloc(length + 1);
|
||||
|
||||
status = BIO_read(bio, x509_str, length);
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
offset += status;
|
||||
|
||||
while (offset >= length)
|
||||
{
|
||||
length *= 2;
|
||||
x509_str = (BYTE*) realloc(x509_str, length + 1);
|
||||
|
||||
status = BIO_read(bio, &x509_str[offset], length);
|
||||
|
||||
if (status < 0)
|
||||
break;
|
||||
|
||||
offset += status;
|
||||
}
|
||||
|
||||
if (status < 0)
|
||||
return -1;
|
||||
|
||||
length = offset;
|
||||
x509_str[length] = '\0';
|
||||
|
||||
printf("%s", x509_str);
|
||||
|
||||
free(x509_str);
|
||||
BIO_free(bio);
|
||||
}
|
||||
|
||||
/**
|
||||
* Output certificate and private key to files
|
||||
|
@ -757,9 +970,6 @@ void makecert_context_free(MAKECERT_CONTEXT* context)
|
|||
|
||||
CRYPTO_cleanup_all_ex_data();
|
||||
|
||||
CRYPTO_mem_leaks(context->bio);
|
||||
BIO_free(context->bio);
|
||||
|
||||
free(context);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue