aboutsummaryrefslogtreecommitdiff
path: root/openssl-1.1.0h/crypto/x509/x509_r2x.c
diff options
context:
space:
mode:
authorWojtek Kosior <wk@koszkonutek-tmp.pl.eu.org>2021-04-30 00:33:56 +0200
committerWojtek Kosior <wk@koszkonutek-tmp.pl.eu.org>2021-04-30 00:33:56 +0200
commitaa4d426b4d3527d7e166df1a05058c9a4a0f6683 (patch)
tree4ff17ce8b89a2321b9d0ed4bcfc37c447bcb6820 /openssl-1.1.0h/crypto/x509/x509_r2x.c
downloadsmtps-and-pop3s-console-program-master.tar.gz
smtps-and-pop3s-console-program-master.zip
initial/final commitHEADmaster
Diffstat (limited to 'openssl-1.1.0h/crypto/x509/x509_r2x.c')
-rw-r--r--openssl-1.1.0h/crypto/x509/x509_r2x.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/openssl-1.1.0h/crypto/x509/x509_r2x.c b/openssl-1.1.0h/crypto/x509/x509_r2x.c
new file mode 100644
index 0000000..3d72787
--- /dev/null
+++ b/openssl-1.1.0h/crypto/x509/x509_r2x.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
+ *
+ * Licensed under the OpenSSL license (the "License"). You may not use
+ * this file except in compliance with the License. You can obtain a copy
+ * in the file LICENSE in the source distribution or at
+ * https://www.openssl.org/source/license.html
+ */
+
+#include <stdio.h>
+#include "internal/cryptlib.h"
+#include <openssl/bn.h>
+#include <openssl/evp.h>
+#include <openssl/asn1.h>
+#include <openssl/x509.h>
+#include "internal/x509_int.h"
+#include <openssl/objects.h>
+#include <openssl/buffer.h>
+
+X509 *X509_REQ_to_X509(X509_REQ *r, int days, EVP_PKEY *pkey)
+{
+ X509 *ret = NULL;
+ X509_CINF *xi = NULL;
+ X509_NAME *xn;
+ EVP_PKEY *pubkey = NULL;
+
+ if ((ret = X509_new()) == NULL) {
+ X509err(X509_F_X509_REQ_TO_X509, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ /* duplicate the request */
+ xi = &ret->cert_info;
+
+ if (sk_X509_ATTRIBUTE_num(r->req_info.attributes) != 0) {
+ if ((xi->version = ASN1_INTEGER_new()) == NULL)
+ goto err;
+ if (!ASN1_INTEGER_set(xi->version, 2))
+ goto err;
+/*- xi->extensions=ri->attributes; <- bad, should not ever be done
+ ri->attributes=NULL; */
+ }
+
+ xn = X509_REQ_get_subject_name(r);
+ if (X509_set_subject_name(ret, xn) == 0)
+ goto err;
+ if (X509_set_issuer_name(ret, xn) == 0)
+ goto err;
+
+ if (X509_gmtime_adj(xi->validity.notBefore, 0) == NULL)
+ goto err;
+ if (X509_gmtime_adj(xi->validity.notAfter, (long)60 * 60 * 24 * days) ==
+ NULL)
+ goto err;
+
+ pubkey = X509_REQ_get0_pubkey(r);
+ if (pubkey == NULL || !X509_set_pubkey(ret, pubkey))
+ goto err;
+
+ if (!X509_sign(ret, pkey, EVP_md5()))
+ goto err;
+ return ret;
+
+ err:
+ X509_free(ret);
+ return NULL;
+}