diff --git a/Configure b/Configure\r
-index 4a715dc..eb61eda 100755\r
+index 4a715dc..b4a4781 100755\r
--- a/Configure\r
+++ b/Configure\r
-@@ -1082,7 +1082,7 @@ if (defined($disabled{"tls1"}))\r
+@@ -605,6 +605,9 @@ my %table=(\r
+ # with itself, Applink is never engaged and can as well be omitted.\r
+ "mingw64", "gcc:-mno-cygwin -DL_ENDIAN -O3 -Wall -DWIN32_LEAN_AND_MEAN -DUNICODE -D_UNICODE::-D_MT:MINGW64:-lws2_32 -lgdi32 -lcrypt32:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:${x86_64_asm}:mingw64:win32:cygwin-shared:-D_WINDLL:-mno-cygwin:.dll.a",\r
+ \r
++# UEFI\r
++"UEFI", "cc:-DL_ENDIAN -O:::UEFI::::",\r
++\r
+ # UWIN \r
+ "UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",\r
+ \r
+@@ -1082,7 +1085,7 @@ if (defined($disabled{"tls1"}))\r
}\r
\r
if (defined($disabled{"ec"}) || defined($disabled{"dsa"})\r
\r
# define M_ASN1_New(arg,func) \\r
if (((arg)=func()) == NULL) return(NULL)\r
+diff --git a/crypto/asn1/n_pkey.c b/crypto/asn1/n_pkey.c\r
+index d5a5514..bede55c 100644\r
+--- a/crypto/asn1/n_pkey.c\r
++++ b/crypto/asn1/n_pkey.c\r
+@@ -193,7 +193,12 @@ int i2d_RSA_NET(const RSA *a, unsigned char **pp,\r
+ OPENSSL_cleanse(pkey->private_key->data, rsalen);\r
+ \r
+ if (cb == NULL)\r
++#ifndef OPENSSL_NO_UI\r
+ cb = EVP_read_pw_string;\r
++#else\r
++ i = 1;\r
++ else\r
++#endif\r
+ i = cb((char *)buf, 256, "Enter Private Key password:", 1);\r
+ if (i != 0) {\r
+ ASN1err(ASN1_F_I2D_RSA_NET, ASN1_R_BAD_PASSWORD_READ);\r
+@@ -264,7 +269,11 @@ RSA *d2i_RSA_NET(RSA **a, const unsigned char **pp, long length,\r
+ goto err;\r
+ }\r
+ if (cb == NULL)\r
++#ifndef OPENSSL_NO_UI\r
+ cb = EVP_read_pw_string;\r
++#else\r
++ goto err;\r
++#endif\r
+ if ((ret = d2i_RSA_NET_2(a, enckey->enckey->digest, cb, sgckey)) == NULL)\r
+ goto err;\r
+ \r
diff --git a/crypto/bn/bn_prime.c b/crypto/bn/bn_prime.c\r
index 1d25687..e933ead 100644\r
--- a/crypto/bn/bn_prime.c\r
\r
/*\r
* Borland C seems too stupid to be able to shift and do longs in the\r
+diff --git a/crypto/evp/evp.h b/crypto/evp/evp.h\r
+index 39ab793..ad1e350 100644\r
+--- a/crypto/evp/evp.h\r
++++ b/crypto/evp/evp.h\r
+@@ -602,11 +602,13 @@ int EVP_MD_CTX_copy(EVP_MD_CTX *out, const EVP_MD_CTX *in);\r
+ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type);\r
+ int EVP_DigestFinal(EVP_MD_CTX *ctx, unsigned char *md, unsigned int *s);\r
+ \r
++#ifndef OPENSSL_NO_UI\r
+ int EVP_read_pw_string(char *buf, int length, const char *prompt, int verify);\r
+ int EVP_read_pw_string_min(char *buf, int minlen, int maxlen,\r
+ const char *prompt, int verify);\r
+ void EVP_set_pw_prompt(const char *prompt);\r
+ char *EVP_get_pw_prompt(void);\r
++#endif\r
+ \r
+ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,\r
+ const unsigned char *salt, const unsigned char *data,\r
+diff --git a/crypto/evp/evp_key.c b/crypto/evp/evp_key.c\r
+index 5be9e33..63c8866 100644\r
+--- a/crypto/evp/evp_key.c\r
++++ b/crypto/evp/evp_key.c\r
+@@ -63,6 +63,7 @@\r
+ #include <openssl/evp.h>\r
+ #include <openssl/ui.h>\r
+ \r
++#ifndef OPENSSL_NO_UI\r
+ /* should be init to zeros. */\r
+ static char prompt_string[80];\r
+ \r
+@@ -117,6 +118,7 @@ int EVP_read_pw_string_min(char *buf, int min, int len, const char *prompt,\r
+ OPENSSL_cleanse(buff, BUFSIZ);\r
+ return ret;\r
+ }\r
++#endif /* OPENSSL_NO_UI */\r
+ \r
+ int EVP_BytesToKey(const EVP_CIPHER *type, const EVP_MD *md,\r
+ const unsigned char *salt, const unsigned char *data,\r
diff --git a/crypto/opensslconf.h.in b/crypto/opensslconf.h.in\r
-index 7a1c85d..a5f51a7 100644\r
+index 7a1c85d..7162c0f 100644\r
--- a/crypto/opensslconf.h.in\r
+++ b/crypto/opensslconf.h.in\r
@@ -1,5 +1,15 @@\r
/* Generate 80386 code? */\r
#undef I386_ONLY\r
\r
+@@ -56,7 +66,7 @@\r
+ #endif\r
+ #endif\r
+ \r
+-#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H)\r
++#if defined(HEADER_BN_H) && !defined(CONFIG_HEADER_BN_H) && !defined(OPENSSL_SYSNAME_UEFI)\r
+ #define CONFIG_HEADER_BN_H\r
+ #undef BN_LLONG\r
+ \r
diff --git a/crypto/pem/pem.h b/crypto/pem/pem.h\r
index d3b23fc..87b0b6a 100644\r
--- a/crypto/pem/pem.h\r
EVP_PKEY *PEM_read_bio_Parameters(BIO *bp, EVP_PKEY **x);\r
int PEM_write_bio_Parameters(BIO *bp, EVP_PKEY *x);\r
\r
+diff --git a/crypto/pem/pem_lib.c b/crypto/pem/pem_lib.c\r
+index a29821a..5525efd 100644\r
+--- a/crypto/pem/pem_lib.c\r
++++ b/crypto/pem/pem_lib.c\r
+@@ -84,7 +84,7 @@ int pem_check_suffix(const char *pem_str, const char *suffix);\r
+ \r
+ int PEM_def_callback(char *buf, int num, int w, void *key)\r
+ {\r
+-#ifdef OPENSSL_NO_FP_API\r
++#if defined(OPENSSL_NO_FP_API) || defined(OPENSSL_NO_UI)\r
+ /*\r
+ * We should not ever call the default callback routine from windows.\r
+ */\r
diff --git a/crypto/pem/pem_pk8.c b/crypto/pem/pem_pk8.c\r
index 5747c73..fe465cc 100644\r
--- a/crypto/pem/pem_pk8.c\r
+ BIO_free_all(tmpmem);\r
+ return ret;\r
}\r
+diff --git a/crypto/rand/rand_egd.c b/crypto/rand/rand_egd.c\r
+index 737aebf..f23f348 100644\r
+--- a/crypto/rand/rand_egd.c\r
++++ b/crypto/rand/rand_egd.c\r
+@@ -95,7 +95,7 @@\r
+ * RAND_egd() is a wrapper for RAND_egd_bytes() with numbytes=255.\r
+ */\r
+ \r
+-#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) || defined(OPENSSL_SYS_VOS) || defined(OPENSSL_SYS_BEOS)\r
++#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS) || defined(OPENSSL_SYS_MSDOS) || defined(OPENSSL_SYS_VXWORKS) || defined(OPENSSL_SYS_NETWARE) || defined(OPENSSL_SYS_VOS) || defined(OPENSSL_SYS_BEOS) || defined(OPENSSL_SYS_UEFI)\r
+ int RAND_query_egd_bytes(const char *path, unsigned char *buf, int bytes)\r
+ {\r
+ return (-1);\r
diff --git a/crypto/rand/rand_unix.c b/crypto/rand/rand_unix.c\r
index 266111e..f60fac6 100644\r
--- a/crypto/rand/rand_unix.c\r