<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openssl.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rsalz</id>
	<title>OpenSSLWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openssl.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Rsalz"/>
	<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php/Special:Contributions/Rsalz"/>
	<updated>2026-05-30T13:19:45Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.13</generator>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Random_fork-safety&amp;diff=2646</id>
		<title>Random fork-safety</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Random_fork-safety&amp;diff=2646"/>
		<updated>2018-04-04T20:09:43Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;One of the most important issues in the proper cryptographic use of random numbers is that random numbers must not be reused.  Since the UNIX fork() system call duplicates the entire process state, a random number generator which does not take this issue into account will produce the same sequence of random numbers in both the parent and the child (or in multiple children), leading to cryptographic disaster (i. e. people being able to read your communications).&lt;br /&gt;
&lt;br /&gt;
'''The situation has changed greatly, starting with OpenSSL 1.1.0 which completely rewrote RNG.  The concerns below do not really apply any more.'''&lt;br /&gt;
&lt;br /&gt;
OpenSSL's default random number generator mixes in the PID, which provides a certain degree of fork safety.  However, once the PIDs wrap, new children will start to produce the same random sequence as previous children which had the same PID.  This is unlikely to happen in most common cases, but it is not impossible, which makes the issue even more insidious.&lt;br /&gt;
&lt;br /&gt;
The most comprehensive explanation of this problem is probably this blog post:&lt;br /&gt;
&lt;br /&gt;
* [http://emboss.github.io/blog/2013/08/21/openssl-prng-is-not-really-fork-safe/ OpenSSL PRNG Is Not (Really) Fork-safe - martinboßlet - Aug 21, 2013]&lt;br /&gt;
&lt;br /&gt;
However, since this issue has been &amp;quot;rediscovered&amp;quot; and discussed multiple times, here are some additional links (some are also linked from the above article)&lt;br /&gt;
&lt;br /&gt;
* [http://marc.info/?l=openssl-dev&amp;amp;m=130289811108150&amp;amp;w=2 openssl-dev: recycled pids causes PRNG to repeat - Eric Wong - Apr 15, 2011]&lt;br /&gt;
* [https://bugs.ruby-lang.org/issues/4579 Ruby bug 4579: SecureRandom + OpenSSL may repeat with fork - Apr 15, 2011]&lt;br /&gt;
* [http://www.postgresql.org/message-id/E1UKzBn-0006c2-Cy@gemulon.postgresql.org pgsql: Reset OpenSSL randomness state in each postmaster childprocess - Tom Lane - Mar 27, 2013]&lt;br /&gt;
* [https://plus.google.com/+AndroidDevelopers/posts/YxWzeNQMJS2 Google+ discussion of Android SecureRandom issue, caused by OpenSSL PID wraparound - Aug 14, 2013]&lt;br /&gt;
* [http://bugs.python.org/issue18747 Python: Re-seed OpenSSL's PRNG after fork - Aug 15, 2013]&lt;br /&gt;
* [http://jbp.io/2013/08/15/android-securerandom-guess/ Android SecureRandom vulnerability guess - Joseph Birr-Pixton - Aug 15, 2013]&lt;br /&gt;
* [http://www.mail-archive.com/openssl-users@openssl.org/msg71749.html openssl-users: DLL hell - Nico Williams - Aug 15, 2013]&lt;br /&gt;
** [http://www.mail-archive.com/openssl-dev@openssl.org/msg32867.html openssl-dev: not fork-safe if pids wrap (continuation of above openssl-users thread) - Aug 22, 2013]&lt;br /&gt;
* [http://www.mail-archive.com/openssl-dev@openssl.org/msg33003.html openssl-dev: Patch to increase rng entropy after forking - Ernst-Udo Wallenborn - Sept 18, 2013]&lt;br /&gt;
* [http://www.mail-archive.com/openssl-dev@openssl.org/msg33012.html openssl-dev: Mixing time into the pool - Ben Laurie - Sept 21, 2013]&lt;br /&gt;
** [https://github.com/openssl/openssl/commit/3cd8547a2018ada88a4303067a2aa15eadc17f39 commit mentioned in above message]&lt;br /&gt;
* [http://bugs.python.org/issue19227 Python issue 19227: test_multiprocessing_xxx hangs under Gentoo buildbots - Oct 11, 2013]&lt;br /&gt;
* [http://www.mail-archive.com/openssl-dev@openssl.org/msg33604.html openssl-dev: Reseed PRNG on PID change - Florian Weimer - Jan 15, 2014]&lt;br /&gt;
&lt;br /&gt;
== Remediations ==&lt;br /&gt;
&lt;br /&gt;
OpenSSL cannot fix the fork-safety problem because its not in a position to do so. However, there are remediations available and they are listed below.&lt;br /&gt;
&lt;br /&gt;
* Don't use &amp;lt;tt&amp;gt;RAND_bytes&amp;lt;/tt&amp;gt;&lt;br /&gt;
* Call &amp;lt;tt&amp;gt;RAND_seed&amp;lt;/tt&amp;gt; after a fork&lt;br /&gt;
* Call &amp;lt;tt&amp;gt;RAND_poll&amp;lt;/tt&amp;gt; after a fork&lt;br /&gt;
* Use a hardware based generator&lt;br /&gt;
* Practice hedging cryptography&lt;br /&gt;
&lt;br /&gt;
The first remediation is to avoid using &amp;lt;tt&amp;gt;RAND_bytes&amp;lt;/tt&amp;gt;. Instead, you can read directly from &amp;lt;tt&amp;gt;/dev/random&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;/dev/urandom&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/dev/srandom&amp;lt;/tt&amp;gt;; or use &amp;lt;tt&amp;gt;CryptGenRandom&amp;lt;/tt&amp;gt; on Windows systems. Avoiding &amp;lt;tt&amp;gt;RAND_bytes&amp;lt;/tt&amp;gt; is not practical in practice because the library will use it internally.&lt;br /&gt;
&lt;br /&gt;
The second remediation is to call &amp;lt;tt&amp;gt;RAND_seed&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;RAND_add&amp;lt;/tt&amp;gt; after a fork. Entropy can be obtained from the operating system by reading from &amp;lt;tt&amp;gt;/dev/random&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;/dev/urandom&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/dev/srandom&amp;lt;/tt&amp;gt;; or using &amp;lt;tt&amp;gt;CryptGenRandom&amp;lt;/tt&amp;gt; on Windows systems. For mobile devices with an interactive user, you could even add sensor data from the accelerometer, magnetometer and gyroscopes. This is appropriate for most programs, but might have problems in low entropy environments such as mobile devices and headless servers. Additionally, this could have problems in virtualized environments. For details, see [[Random_Numbers|Random Numbers]].&lt;br /&gt;
&lt;br /&gt;
The third remediation is to use &amp;lt;tt&amp;gt;RAND_poll&amp;lt;/tt&amp;gt; after a fork. This is used by OpenSSL to seed the generator on startup. The function always reads from &amp;lt;tt&amp;gt;/dev/urandom&amp;lt;/tt&amp;gt;, so you will have to seed the generator yourself if you want to use &amp;lt;tt&amp;gt;/dev/random&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;/dev/srandom&amp;lt;/tt&amp;gt;. This is appropriate for most programs, and recommended by a number of people familiar with the library. This method has the same potential problems as &amp;lt;tt&amp;gt;RAND_seed&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;RAND_add&amp;lt;/tt&amp;gt;. For details, see [[Random_Numbers|Random Numbers]].&lt;br /&gt;
&lt;br /&gt;
The fourth remediation is to use a hardware based generator. This is not always practical because hardware is not always present. Additionally, hardware is not usually auditable so some question its unabridged use in the post-Snowden era. For details, see [[Random_Numbers|Random Numbers]] and [[Manual:Engine(3)|OpenSSL engine(3)]] man page.&lt;br /&gt;
&lt;br /&gt;
The fifth remediation is to practice hedging cryptography. Hedging uses entropy gathered from a peer during key exchange or key agreement to add to the program's internal entropy pool (for example, the random '''R&amp;lt;sub&amp;gt;A&amp;lt;/sub&amp;gt;''' or '''R&amp;lt;sub&amp;gt;B&amp;lt;/sub&amp;gt;''' in SSL/TLS). The benefit of hedging is its resilient against fork problems, low entropy environments, and virtual machine playbacks. For details, see [http://static.usenix.org/event/hotos05/final_papers/full_papers/garfinkel/garfinkel.pdf When Virtual is Harder than Real: Resource Allocation Challenges in Virtual Machine Based IT Environments] and [http://www.isoc.org/isoc/conferences/ndss/10/pdf/15.pdf When Good Randomness Goes Bad: Virtual Machine Reset Vulnerabilities and Hedging Deployed Cryptography].&lt;br /&gt;
&lt;br /&gt;
Some of the items above recommend reading from operating system provided facilities, such as &amp;lt;tt&amp;gt;/dev/random&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;/dev/urandom&amp;lt;/tt&amp;gt;. Since the random number generator should be in good order before the fork, you should be able to add unique information to diversify the generator states between parent and child. Unique information would include the time the call was made and the process identifier. In fact, Ben Laurie [https://github.com/openssl/openssl/commit/3cd8547a2018ada88a4303067a2aa15eadc17f39 pushed a patch to use time] as the uniqueness (unfortunately, it will be years before it gains widespread adoption in the field).&lt;br /&gt;
&lt;br /&gt;
The code below can be used to add unique information to the generator after a fork. The call to &amp;lt;tt&amp;gt;time&amp;lt;/tt&amp;gt; ensures the information is unique if the PIDs wrap. The call to &amp;lt;tt&amp;gt;getpid&amp;lt;/tt&amp;gt; ensures that two forks that occur back-to-back on hardware with low resolution timers are unique. &amp;lt;tt&amp;gt;long[2]&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;long[3]&amp;lt;/tt&amp;gt; attempts to further enhance the generator's state by using random data on the stack (if present).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;long long seed[4];&lt;br /&gt;
seed[0] = (long long)time(NULL);&lt;br /&gt;
seed[1] = (long long)getpid();&lt;br /&gt;
RAND_seed(seed, sizeof(seed));&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=License&amp;diff=2618</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=License&amp;diff=2618"/>
		<updated>2017-11-30T20:56:36Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We appreciate material and works produced for the community. Documentation, patches, and sample programs help ensure the library is reliable and easy to use. To ensure the most benefit to the project and community, contributions to this wiki must be either:&lt;br /&gt;
&lt;br /&gt;
# existing material copied from a public domain source&lt;br /&gt;
# original content created by you and released under the current OpenSSL license (and any future version of it that the OpenSSL project may adopt)&lt;br /&gt;
# existing content already released under the current or future OpenSSL license.&lt;br /&gt;
&lt;br /&gt;
The current [https://openssl.org/source/license.html OpenSSL licence] is an &amp;quot;Apache style&amp;quot; license. We are moving to the Apache license soon; see our [https://www.openssl.org/blog/blog/categories/license/ blog posts].&lt;br /&gt;
&lt;br /&gt;
We do not accept patches through the Wiki.&lt;br /&gt;
&lt;br /&gt;
== Wiki Documentation ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki Usage]]&lt;br /&gt;
&lt;br /&gt;
All contributions to this wiki are considered to be released under the current OpenSSL License (and any future version of it) and contributors agree the contributed content is original, or copied from a public domain or similar free resource, or copied from OpenSSL.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
&lt;br /&gt;
Use the following copyright notice for source files, sample programs on the wiki, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;   Copyright OpenSSL &amp;lt;nowiki&amp;gt;[YEAR]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   Contents licensed under the terms of the OpenSSL license&lt;br /&gt;
   See https://www.openssl.org/source/license.html for details&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Legal]]&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=License&amp;diff=2617</id>
		<title>License</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=License&amp;diff=2617"/>
		<updated>2017-11-30T20:53:55Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We appreciate material and works produced for the community. Documentation, patches, and sample programs help ensure the library is reliable and easy to use. To ensure the most benefit to the project and community, contributions to this wiki must be either:&lt;br /&gt;
&lt;br /&gt;
# existing material copied from a public domain source&lt;br /&gt;
# original content created by you and released under the current OpenSSL license (and any future version of it that the OpenSSL project may adopt)&lt;br /&gt;
# existing content already released under the current or future OpenSSL license.&lt;br /&gt;
&lt;br /&gt;
The current [https://openssl.org/source/license.html OpenSSL licence] is an &amp;quot;Apache style&amp;quot; license. We are moving to the Apache license soon; see our [https://www.openssl.org/blog/blog/categories/license/ blog posts].&lt;br /&gt;
&lt;br /&gt;
== Source Code Patches ==&lt;br /&gt;
&lt;br /&gt;
If you contribute patches for the library source code, then the OpenSSL project will use the OpenSSL license. Not all patches will be accepted or Incorporated, and there are a variety of reasons why such changes may not be accepted and utilized by the project (not all of them readily apparent). See [[Contributions]] for a discussion of patches and potential concerns.&lt;br /&gt;
&lt;br /&gt;
== Sample Programs ==&lt;br /&gt;
&lt;br /&gt;
If you contribute original sample programs for using the library, then the OpenSSL project will use the OpenSSL license. You should place the following text at the top of the source files:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;Contents licensed under the terms of the OpenSSL license: https://www.openssl.org/source/license.html&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You must also sign a [https://www.openssl.org/policies/cla.html CLA].&lt;br /&gt;
== Man Page Documentation ==&lt;br /&gt;
&lt;br /&gt;
If you contribute original documentation for the source code, then the OpenSSL project will use the OpenSSL license. You will not need to do anything to ensure your changes are suitable for use by by the project. As with source code there are a variety of reasons why documentation may not be accepted and utilized by the project, not all of them readily apparent [note: the topic of [[contributions]] deserves a separate discussion];&lt;br /&gt;
&lt;br /&gt;
== Wiki Documentation ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Wiki Usage]]&lt;br /&gt;
&lt;br /&gt;
All contributions to this wiki are considered to be released under the current OpenSSL License (and any future version of it) and contributors agree the contributed content is original, or copied from a public domain or similar free resource, or copied from OpenSSL.&lt;br /&gt;
&lt;br /&gt;
== Copyright Notice ==&lt;br /&gt;
&lt;br /&gt;
Use the following copyright notice for source files, sample programs on the wiki, etc.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;   Copyright OpenSSL &amp;lt;nowiki&amp;gt;[YEAR]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   Contents licensed under the terms of the OpenSSL license&lt;br /&gt;
   See https://www.openssl.org/source/license.html for details&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Legal]]&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=EVP_Symmetric_Encryption_and_Decryption&amp;diff=2616</id>
		<title>EVP Symmetric Encryption and Decryption</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=EVP_Symmetric_Encryption_and_Decryption&amp;diff=2616"/>
		<updated>2017-11-30T20:44:16Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{DocInclude&lt;br /&gt;
|Name=Symmetric Encryption and Decryption&lt;br /&gt;
|Url=http://wiki.openssl.org/index.php/Manual:Evp(3)&lt;br /&gt;
|Include=evp.h}}&lt;br /&gt;
&lt;br /&gt;
The [[Libcrypto API|libcrypto]] library within OpenSSL provides functions for performing symmetric encryption and decryption operations across a wide range of algorithms and modes. This page walks you through the basics of performing a simple encryption and corresponding decryption operation.&lt;br /&gt;
&lt;br /&gt;
In order to perform encryption/decryption you need to know:&lt;br /&gt;
* Your algorithm&lt;br /&gt;
* Your mode&lt;br /&gt;
* Your key&lt;br /&gt;
* Your Initialisation Vector (IV)&lt;br /&gt;
&lt;br /&gt;
This page assumes that you know what all of these things mean. If you don't then please refer to [[Basics of Encryption]].&lt;br /&gt;
&lt;br /&gt;
==Setting it up==&lt;br /&gt;
&lt;br /&gt;
The code below sets up the program. In this example we are going to take a simple message (&amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;), and then encrypt it using a predefined key and IV. In this example the key and IV have been hard coded in - in a real situation you would never do this! Following encryption we will then decrypt the resulting ciphertext, and (hopefully!) end up with the message we first started with. This program expects two functions to be defined: &amp;quot;encrypt&amp;quot; and &amp;quot;decrypt&amp;quot;. We will define those further down the page. Note that this uses the auto-init facility in 1.1.0.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;openssl/conf.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;openssl/evp.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;openssl/err.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;string.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main (void)&lt;br /&gt;
 {&lt;br /&gt;
   /* Set up the key and iv. Do I need to say to not hard code these in a&lt;br /&gt;
    * real application? :-)&lt;br /&gt;
    */&lt;br /&gt;
 &lt;br /&gt;
   /* A 256 bit key */&lt;br /&gt;
   unsigned char *key = (unsigned char *)&amp;quot;01234567890123456789012345678901&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   /* A 128 bit IV */&lt;br /&gt;
   unsigned char *iv = (unsigned char *)&amp;quot;0123456789012345&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   /* Message to be encrypted */&lt;br /&gt;
   unsigned char *plaintext =&lt;br /&gt;
                 (unsigned char *)&amp;quot;The quick brown fox jumps over the lazy dog&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
   /* Buffer for ciphertext. Ensure the buffer is long enough for the&lt;br /&gt;
    * ciphertext which may be longer than the plaintext, dependant on the&lt;br /&gt;
    * algorithm and mode&lt;br /&gt;
    */&lt;br /&gt;
   unsigned char ciphertext[128];&lt;br /&gt;
 &lt;br /&gt;
   /* Buffer for the decrypted text */&lt;br /&gt;
   unsigned char decryptedtext[128];&lt;br /&gt;
 &lt;br /&gt;
   int decryptedtext_len, ciphertext_len;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
   /* Encrypt the plaintext */&lt;br /&gt;
   ciphertext_len = encrypt (plaintext, strlen ((char *)plaintext), key, iv,&lt;br /&gt;
                             ciphertext);&lt;br /&gt;
 &lt;br /&gt;
   /* Do something useful with the ciphertext here */&lt;br /&gt;
   printf(&amp;quot;Ciphertext is:\n&amp;quot;);&lt;br /&gt;
   BIO_dump_fp (stdout, (const char *)ciphertext, ciphertext_len);&lt;br /&gt;
 &lt;br /&gt;
   /* Decrypt the ciphertext */&lt;br /&gt;
   decryptedtext_len = decrypt(ciphertext, ciphertext_len, key, iv,&lt;br /&gt;
     decryptedtext);&lt;br /&gt;
 &lt;br /&gt;
   /* Add a NULL terminator. We are expecting printable text */&lt;br /&gt;
   decryptedtext[decryptedtext_len] = '\0';&lt;br /&gt;
 &lt;br /&gt;
   /* Show the decrypted text */&lt;br /&gt;
   printf(&amp;quot;Decrypted text is:\n&amp;quot;);&lt;br /&gt;
   printf(&amp;quot;%s\n&amp;quot;, decryptedtext);&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
The program sets up a 256 bit key and a 128 bit IV. This is appropriate for the 256-bit AES encryption that we going to be doing in CBC mode. Make sure you use the right key and IV length for the cipher you have selected, or it will go horribly wrong!! The IV should be random for CBC mode.&lt;br /&gt;
&lt;br /&gt;
We've also set up a buffer for the ciphertext to be placed in. It is important to ensure that this buffer is sufficiently large for the expected ciphertext or you may see a program crash (or potentially introduce a security vulnerability into your code). Note: The ciphertext may be longer than the plaintext (e.g. if padding is being used).&lt;br /&gt;
&lt;br /&gt;
We're also going to need a helper function to handle any errors. This will simply dump any error messages from the OpenSSL error stack to the screen, and then abort the program.&lt;br /&gt;
&lt;br /&gt;
 void handleErrors(void)&lt;br /&gt;
 {&lt;br /&gt;
   ERR_print_errors_fp(stderr);&lt;br /&gt;
   abort();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Encrypting the message==&lt;br /&gt;
&lt;br /&gt;
So now that we have set up the program we need to define the &amp;quot;encrypt&amp;quot; function. This will take as parameters the plaintext, the length of the plaintext, the key to be used, and the IV. We'll also take in a buffer to put the ciphertext in (which we assume to be long enough), and will return the length of the ciphertext that we have written.&lt;br /&gt;
&lt;br /&gt;
Encrypting consists of the following stages:&lt;br /&gt;
* Setting up a context&lt;br /&gt;
* Initialising the encryption operation&lt;br /&gt;
* Providing plaintext bytes to be encrypted&lt;br /&gt;
* Finalising the encryption operation&lt;br /&gt;
&lt;br /&gt;
During initialisation we will provide an EVP_CIPHER object. In this case we are using EVP_aes_256_cbc(), which uses the AES algorithm with a 256-bit key in [[CBC]] mode. Refer to [[EVP#Working with Algorithms and Modes]] for further details.&lt;br /&gt;
&lt;br /&gt;
 int encrypt(unsigned char *plaintext, int plaintext_len, unsigned char *key,&lt;br /&gt;
   unsigned char *iv, unsigned char *ciphertext)&lt;br /&gt;
 {&lt;br /&gt;
   EVP_CIPHER_CTX *ctx;&lt;br /&gt;
 &lt;br /&gt;
   int len;&lt;br /&gt;
 &lt;br /&gt;
   int ciphertext_len;&lt;br /&gt;
 &lt;br /&gt;
   /* Create and initialise the context */&lt;br /&gt;
   if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors();&lt;br /&gt;
 &lt;br /&gt;
   /* Initialise the encryption operation. IMPORTANT - ensure you use a key&lt;br /&gt;
    * and IV size appropriate for your cipher&lt;br /&gt;
    * In this example we are using 256 bit AES (i.e. a 256 bit key). The&lt;br /&gt;
    * IV size for *most* modes is the same as the block size. For AES this&lt;br /&gt;
    * is 128 bits */&lt;br /&gt;
   if(1 != EVP_EncryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))&lt;br /&gt;
     handleErrors();&lt;br /&gt;
 &lt;br /&gt;
   /* Provide the message to be encrypted, and obtain the encrypted output.&lt;br /&gt;
    * EVP_EncryptUpdate can be called multiple times if necessary&lt;br /&gt;
    */&lt;br /&gt;
   if(1 != EVP_EncryptUpdate(ctx, ciphertext, &amp;amp;len, plaintext, plaintext_len))&lt;br /&gt;
     handleErrors();&lt;br /&gt;
   ciphertext_len = len;&lt;br /&gt;
 &lt;br /&gt;
   /* Finalise the encryption. Further ciphertext bytes may be written at&lt;br /&gt;
    * this stage.&lt;br /&gt;
    */&lt;br /&gt;
   if(1 != EVP_EncryptFinal_ex(ctx, ciphertext + len, &amp;amp;len)) handleErrors();&lt;br /&gt;
   ciphertext_len += len;&lt;br /&gt;
 &lt;br /&gt;
   /* Clean up */&lt;br /&gt;
   EVP_CIPHER_CTX_free(ctx);&lt;br /&gt;
 &lt;br /&gt;
   return ciphertext_len;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Decrypting the Message==&lt;br /&gt;
&lt;br /&gt;
Finally we need to define the &amp;quot;decrypt&amp;quot; operation. This is very similar to encryption and consists of the following stages:&lt;br /&gt;
Decrypting consists of the following stages:&lt;br /&gt;
* Setting up a context&lt;br /&gt;
* Initialising the decryption operation&lt;br /&gt;
* Providing ciphertext bytes to be decrypted&lt;br /&gt;
* Finalising the decryption operation&lt;br /&gt;
&lt;br /&gt;
Again through the parameters we will receive the ciphertext to be decrypted, the length of the ciphertext, the key and the IV. We'll also receive a buffer to place the decrypted text into, and return the length of the plaintext we have found.&lt;br /&gt;
&lt;br /&gt;
Note that we have passed the length of the ciphertext. This is required as you cannot use functions such as &amp;quot;strlen&amp;quot; on this data - its binary! Similarly, even though in this example our plaintext really is ASCII text, OpenSSL does not know that. In spite of the name plaintext could be binary data, and therefore no NULL terminator will be put on the end (unless you encrypt the NULL as well of course).&lt;br /&gt;
&lt;br /&gt;
Here is the decrypt function:&lt;br /&gt;
&lt;br /&gt;
 int decrypt(unsigned char *ciphertext, int ciphertext_len, unsigned char *key,&lt;br /&gt;
   unsigned char *iv, unsigned char *plaintext)&lt;br /&gt;
 {&lt;br /&gt;
   EVP_CIPHER_CTX *ctx;&lt;br /&gt;
 &lt;br /&gt;
   int len;&lt;br /&gt;
 &lt;br /&gt;
   int plaintext_len;&lt;br /&gt;
 &lt;br /&gt;
   /* Create and initialise the context */&lt;br /&gt;
   if(!(ctx = EVP_CIPHER_CTX_new())) handleErrors();&lt;br /&gt;
 &lt;br /&gt;
   /* Initialise the decryption operation. IMPORTANT - ensure you use a key&lt;br /&gt;
    * and IV size appropriate for your cipher&lt;br /&gt;
    * In this example we are using 256 bit AES (i.e. a 256 bit key). The&lt;br /&gt;
    * IV size for *most* modes is the same as the block size. For AES this&lt;br /&gt;
    * is 128 bits */&lt;br /&gt;
   if(1 != EVP_DecryptInit_ex(ctx, EVP_aes_256_cbc(), NULL, key, iv))&lt;br /&gt;
     handleErrors();&lt;br /&gt;
 &lt;br /&gt;
   /* Provide the message to be decrypted, and obtain the plaintext output.&lt;br /&gt;
    * EVP_DecryptUpdate can be called multiple times if necessary&lt;br /&gt;
    */&lt;br /&gt;
   if(1 != EVP_DecryptUpdate(ctx, plaintext, &amp;amp;len, ciphertext, ciphertext_len))&lt;br /&gt;
     handleErrors();&lt;br /&gt;
   plaintext_len = len;&lt;br /&gt;
 &lt;br /&gt;
   /* Finalise the decryption. Further plaintext bytes may be written at&lt;br /&gt;
    * this stage.&lt;br /&gt;
    */&lt;br /&gt;
   if(1 != EVP_DecryptFinal_ex(ctx, plaintext + len, &amp;amp;len)) handleErrors();&lt;br /&gt;
   plaintext_len += len;&lt;br /&gt;
 &lt;br /&gt;
   /* Clean up */&lt;br /&gt;
   EVP_CIPHER_CTX_free(ctx);&lt;br /&gt;
 &lt;br /&gt;
   return plaintext_len;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Ciphertext Output==&lt;br /&gt;
&lt;br /&gt;
If all goes well you should end up with output that looks like the following:&lt;br /&gt;
 Ciphertext is:&lt;br /&gt;
 0000 - e0 6f 63 a7 11 e8 b7 aa-9f 94 40 10 7d 46 80 a1   .oc.......@.}F..&lt;br /&gt;
 0010 - 17 99 43 80 ea 31 d2 a2-99 b9 53 02 d4 39 b9 70   ..C..1....S..9.p&lt;br /&gt;
 0020 - 2c 8e 65 a9 92 36 ec 92-07 04 91 5c f1 a9 8a 44   ,.e..6.....\...D&lt;br /&gt;
 Decrypted text is:&lt;br /&gt;
 The quick brown fox jumps over the lazy dog&lt;br /&gt;
&lt;br /&gt;
For further details about symmetric encryption and decryption operations refer to the OpenSSL documentation [[Manual:EVP_EncryptInit(3)]].&lt;br /&gt;
&lt;br /&gt;
==Padding==&lt;br /&gt;
&lt;br /&gt;
OpenSSL uses PKCS padding by default. If the mode you are using allows you to change the padding, then you can change it with &amp;lt;tt&amp;gt;[http://www.openssl.org/docs/man1.0.2/crypto/EVP_CIPHER_CTX_set_padding.html EVP_CIPHER_CTX_set_padding]&amp;lt;/tt&amp;gt;. From the man page:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;EVP_CIPHER_CTX_set_padding() enables or disables padding. By default encryption operations are padded using standard block padding and the padding is checked and removed when decrypting. If the pad parameter is zero then no padding is performed, the total amount of data encrypted or decrypted must then be a multiple of the block size or an error will occur...&lt;br /&gt;
&lt;br /&gt;
PKCS padding works by adding n padding bytes of value n to make the total length of the encrypted data a multiple of the block size. Padding is always added so if the data is already a multiple of the block size n will equal the block size. For example if the block size is 8 and 11 bytes are to be encrypted then 5 padding bytes of value 5 will be added...&lt;br /&gt;
&lt;br /&gt;
If padding is disabled then the decryption operation will only succeed if the total amount of data decrypted is a multiple of the block size.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C++ Programs==&lt;br /&gt;
&lt;br /&gt;
Questions regarding how to use the EVP interfaces from a C++ program arise on occasion. Generally speaking, using the EVP interfaces from a C++ program is the same as using them from a C program.&lt;br /&gt;
&lt;br /&gt;
You can download a sample program using EVP symmetric encryption and C++11 called [[Media:Evp-encrypt-cxx.tar.gz|evp-encrypt.cxx]]. The sample uses a custom allocator to zeroize memory, C++ smart pointers to manage resources, and provides a &amp;lt;tt&amp;gt;secure_string&amp;lt;/tt&amp;gt; using &amp;lt;tt&amp;gt;basic_string&amp;lt;/tt&amp;gt; and the custom allocator. You need to use &amp;lt;tt&amp;gt;g++ -std=c++11 ...&amp;lt;/tt&amp;gt; to compile it because of &amp;lt;tt&amp;gt;std::unique_ptr&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You should also ensure you configure an build with &amp;lt;tt&amp;gt;-fexception&amp;lt;/tt&amp;gt; to ensure C++ exceptions pass as expected through C code. And you should avoid other flags, like &amp;lt;tt&amp;gt;-fno-exceptions&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;-fno-rtti&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
The program's &amp;lt;tt&amp;gt;main&amp;lt;/tt&amp;gt; simply encrypts and decrypts a string using AES-256 in CBC mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef unsigned char byte;&lt;br /&gt;
typedef std::basic_string&amp;lt;char, std::char_traits&amp;lt;char&amp;gt;, zallocator&amp;lt;char&amp;gt; &amp;gt; secure_string;&lt;br /&gt;
using EVP_CIPHER_CTX_ptr = std::unique_ptr&amp;lt;EVP_CIPHER_CTX, decltype(&amp;amp;::EVP_CIPHER_CTX_free)&amp;gt;;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char* argv[])&lt;br /&gt;
{&lt;br /&gt;
    // Load the necessary cipher&lt;br /&gt;
    EVP_add_cipher(EVP_aes_256_cbc());&lt;br /&gt;
&lt;br /&gt;
    // plaintext, ciphertext, recovered text&lt;br /&gt;
    secure_string ptext = &amp;quot;Yoda said, Do or do not. There is no try.&amp;quot;;&lt;br /&gt;
    secure_string ctext, rtext;&lt;br /&gt;
&lt;br /&gt;
    byte key[KEY_SIZE], iv[BLOCK_SIZE];&lt;br /&gt;
    gen_params(key, iv);&lt;br /&gt;
  &lt;br /&gt;
    aes_encrypt(key, iv, ptext, ctext);&lt;br /&gt;
    aes_decrypt(key, iv, ctext, rtext);&lt;br /&gt;
    &lt;br /&gt;
    OPENSSL_cleanse(key, KEY_SIZE);&lt;br /&gt;
    OPENSSL_cleanse(iv, BLOCK_SIZE);&lt;br /&gt;
&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Original message:\n&amp;quot; &amp;lt;&amp;lt; ptext &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
    std::cout &amp;lt;&amp;lt; &amp;quot;Recovered message:\n&amp;quot; &amp;lt;&amp;lt; rtext &amp;lt;&amp;lt; std::endl;&lt;br /&gt;
&lt;br /&gt;
    return 0;&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And the encryption routine is as follows. The decryption routine is similar:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;void aes_encrypt(const byte key[KEY_SIZE], const byte iv[BLOCK_SIZE], const secure_string&amp;amp; ptext, secure_string&amp;amp; ctext)&lt;br /&gt;
{&lt;br /&gt;
    EVP_CIPHER_CTX_ptr ctx(EVP_CIPHER_CTX_new(), ::EVP_CIPHER_CTX_free);&lt;br /&gt;
    int rc = EVP_EncryptInit_ex(ctx.get(), EVP_aes_256_cbc(), NULL, key, iv);&lt;br /&gt;
    if (rc != 1)&lt;br /&gt;
      throw std::runtime_error(&amp;quot;EVP_EncryptInit_ex failed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Cipher text expands upto BLOCK_SIZE&lt;br /&gt;
    ctext.resize(ptext.size()+BLOCK_SIZE);&lt;br /&gt;
    int out_len1 = (int)ctext.size();&lt;br /&gt;
&lt;br /&gt;
    rc = EVP_EncryptUpdate(ctx.get(), (byte*)&amp;amp;ctext[0], &amp;amp;out_len1, (const byte*)&amp;amp;ptext[0], (int)ptext.size());&lt;br /&gt;
    if (rc != 1)&lt;br /&gt;
      throw std::runtime_error(&amp;quot;EVP_EncryptUpdate failed&amp;quot;);&lt;br /&gt;
  &lt;br /&gt;
    int out_len2 = (int)ctext.size() - out_len1;&lt;br /&gt;
    rc = EVP_EncryptFinal_ex(ctx.get(), (byte*)&amp;amp;ctext[0]+out_len1, &amp;amp;out_len2);&lt;br /&gt;
    if (rc != 1)&lt;br /&gt;
      throw std::runtime_error(&amp;quot;EVP_EncryptFinal_ex failed&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
    // Set cipher text size now that we know it&lt;br /&gt;
    ctext.resize(out_len1 + out_len2);&lt;br /&gt;
}&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Notes on some unusual modes==&lt;br /&gt;
&lt;br /&gt;
Worthy of mention here is the [[XTS]] mode (e.g. EVP_aes_256_xts()). This works in exactly the same way as shown above, except that the &amp;quot;tweak&amp;quot; is provided in the IV parameter. A further &amp;quot;gotcha&amp;quot; is that XTS mode expects a key which is twice as long as normal. Therefore EVP_aes_256_xts() expects a key which is 512-bits long.&lt;br /&gt;
&lt;br /&gt;
Authenticated encryption modes ([[GCM]] or [[CCM]]) work in essentially the same way as shown above but require some special handling. See [[EVP Authenticated Encryption and Decryption]] for further details.&lt;br /&gt;
&lt;br /&gt;
==See also==&lt;br /&gt;
* [[EVP]]&lt;br /&gt;
* [[Libcrypto API]]&lt;br /&gt;
* [[EVP Authenticated Encryption and Decryption]]&lt;br /&gt;
* [[EVP Asymmetric Encryption and Decryption of an Envelope]]&lt;br /&gt;
* [[EVP Signing and Verifying]]&lt;br /&gt;
* [[EVP Message Digests]]&lt;br /&gt;
* [[EVP Key Agreement]]&lt;br /&gt;
* [[EVP Key and Parameter Generation]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Crypto API]]&lt;br /&gt;
[[Category:C level]]&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Android&amp;diff=2550</id>
		<title>Android</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Android&amp;diff=2550"/>
		<updated>2017-04-20T20:06:07Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Build the OpenSSL Library */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This document will provide instructions for building the OpenSSL library for Android devices. If you need the FIPS Validated Object Module and the FIPS Capable Library, see [[FIPS Library and Android]].&lt;br /&gt;
&lt;br /&gt;
==Executive Summary==&lt;br /&gt;
&lt;br /&gt;
Use the following commands to build and install the OpenSSL library for Android. Before running the commands download openssl-1.0.1g.tar.gz and [[Media:setenv-android.sh|setenv-android.sh]]; place the files in the same directory (the 'root' directory mentioned below); ensure &amp;lt;tt&amp;gt;ANDROID_NDK_ROOT&amp;lt;/tt&amp;gt; is set; and verify setenv-android.sh suites your taste. &amp;lt;tt&amp;gt;ANDROID_API&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ANDROID_TOOLCHAIN&amp;lt;/tt&amp;gt; will be set by the &amp;lt;tt&amp;gt;setenv-android.sh&amp;lt;/tt&amp;gt; script. The files can be obtained from http://www.openssl.org/source/, http://openssl.com/fips/2.0/platforms/android/, and below (see Downloads section).&lt;br /&gt;
&lt;br /&gt;
=== Prepare the OpenSSL Sources ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# From the 'root' directory&lt;br /&gt;
$ rm -rf openssl-1.0.1g/&lt;br /&gt;
$ tar xzf openssl-1.0.1g.tar.gz&lt;br /&gt;
$ chmod a+x setenv-android.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build the OpenSSL Library ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# From the 'root' directory&lt;br /&gt;
$ . ./setenv-android.sh&lt;br /&gt;
$ cd openssl-1.0.1g/&lt;br /&gt;
&lt;br /&gt;
# Perl is optional, and may fail in OpenSSL 1.1.0&lt;br /&gt;
$ perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org&lt;br /&gt;
&lt;br /&gt;
# Tune to suit your taste, visit http://wiki.openssl.org/index.php/Compilation_and_Installation&lt;br /&gt;
$ ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine \&lt;br /&gt;
     --openssldir=/usr/local/ssl/$ANDROID_API --prefix=/usr/local/ssl/$ANDROID_API&lt;br /&gt;
&lt;br /&gt;
$ make depend&lt;br /&gt;
$ make all&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install the OpenSSL Library ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;# The -E is important. Root needs some of the user's environment&lt;br /&gt;
$ sudo -E make install CC=$ANDROID_TOOLCHAIN/arm-linux-androideabi-gcc RANLIB=$ANDROID_TOOLCHAIN/arm-linux-androideabi-ranlib&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compile and Link against the Library ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;arm-linux-androideabi-gcc -I /usr/local/ssl/include my_prog.c -o my_prog.exe -L /usr/local/ssl/lib -lssl -lcrypto&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== OpenSSL Library ==&lt;br /&gt;
&lt;br /&gt;
While the Executive Summary provided the whirlwind instructions for building and installing the OpenSSL library, this sections provides detailed instructions. There are six steps to building the OpenSSL Library for use in various projects, and they are listed below. Projects range from simple NDK based command line programs to Android activities using the JNI bridge.&lt;br /&gt;
&lt;br /&gt;
# Acquire the required files&lt;br /&gt;
# Adjust the cross-compilation script&lt;br /&gt;
# Prepare the OpenSSL sources&lt;br /&gt;
# Build the OpenSSL Library&lt;br /&gt;
# Install the OpenSSL Library&lt;br /&gt;
&lt;br /&gt;
=== Acquire the Required Files ===&lt;br /&gt;
&lt;br /&gt;
First, obtain the base files from http://www.openssl.org/source/:&lt;br /&gt;
* openssl-1.0.1g.tar.gz&lt;br /&gt;
&lt;br /&gt;
Next, acquire the auxiliary files which can be obtained from below (see Downloads section) or http://openssl.com/fips/2.0/platforms/android/. You won't need all the files from the location.&lt;br /&gt;
* [[Media:setenv-android.sh|setenv-android.sh]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;openssl-1.0.1g.tar.gz&amp;lt;/tt&amp;gt; is the OpenSSL Library. &amp;lt;tt&amp;gt;setenv-android.sh&amp;lt;/tt&amp;gt; is used to set the cross-compilation environment.&lt;br /&gt;
&lt;br /&gt;
After collecting the required files, your working directory will look similar to below.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;android-openssl $ ls -l &lt;br /&gt;
-rw-r--r-- 1   4459777 Jun 15 03:32 openssl-1.0.1g.tar.gz&lt;br /&gt;
-rwxr-xr-x 1      6760 Jun 23 01:52 setenv-android.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Adjust the Cross-Compile Script ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;setenv-android.sh&amp;lt;/tt&amp;gt; is used to set the cross-compilation environment. Open the script an ensure the following match your needs. If you are using android-ndk-r8e, android-14, and &amp;lt;tt&amp;gt;ANDROID_NDK_ROOT&amp;lt;/tt&amp;gt; is set, then the script should be ready to use as-is.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;_ANDROID_NDK&amp;lt;/tt&amp;gt; – the version of the NDK. For example, android-ndk-r8e&lt;br /&gt;
* &amp;lt;tt&amp;gt;_ANDROID_ARCH&amp;lt;/tt&amp;gt; – the architecture. For example, arch-arm or arch-x86&lt;br /&gt;
* &amp;lt;tt&amp;gt;_ANDROID_EABI&amp;lt;/tt&amp;gt; – the version of the EABI tools. For example, arm-linux-androideabi-4.6, arm-linux-androideabi-4.8, x86-4.6 or x86-4.8 &lt;br /&gt;
* &amp;lt;tt&amp;gt;_ANDROID_API&amp;lt;/tt&amp;gt; – the API level. For example, android-14 or android-18&lt;br /&gt;
&lt;br /&gt;
You should also set &amp;lt;tt&amp;gt;ANDROID_SDK_ROOT&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ANDROID_NDK_ROOT&amp;lt;/tt&amp;gt;. The environmental variables are used internally by the Android platform tools and scripts. For details, see [https://groups.google.com/d/msg/android-ndk/qZjhOaynHXc/2ux2ZZdxy2MJ Recommended NDK Directory?].&lt;br /&gt;
&lt;br /&gt;
Additional environmental variables which are set by &amp;lt;tt&amp;gt;setenv-android.sh&amp;lt;/tt&amp;gt; and used by &amp;lt;tt&amp;gt;Configure&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt; include the following. You should not need to change them.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tt&amp;gt;MACHINE&amp;lt;/tt&amp;gt; – set to &amp;lt;tt&amp;gt;armv7&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;RELEASE&amp;lt;/tt&amp;gt; – set to &amp;lt;tt&amp;gt;2.6.37&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;SYSTEM&amp;lt;/tt&amp;gt; – set to &amp;lt;tt&amp;gt;android&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ARCH&amp;lt;/tt&amp;gt; – set to &amp;lt;tt&amp;gt;arm&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;CROSS_COMPILE&amp;lt;/tt&amp;gt; – set to &amp;lt;tt&amp;gt;arm-linux-androideabi-&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;ANDROID_DEV&amp;lt;/tt&amp;gt; – set to &amp;lt;tt&amp;gt;$ANDROID_NDK_ROOT/platforms/$_ANDROID_API/arch-arm/usr&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;HOSTCC&amp;lt;/tt&amp;gt; – set to &amp;lt;tt&amp;gt;gcc&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Prepare the OpenSSL Sources ===&lt;br /&gt;
&lt;br /&gt;
Remove stale versions of the OpenSSL Library, and then unpack fresh files. Also ensure the script is executable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ rm -rf openssl-1.0.1g/&lt;br /&gt;
$ tar xzf openssl-1.0.1g.tar.gz&lt;br /&gt;
$ chmod a+x setenv-android.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build the OpenSSL Library ===&lt;br /&gt;
&lt;br /&gt;
This section of the document will guide you through the creation of the the OpenSSL Library. The OpenSSL Library (and Makefile.org) needs its install rule modified. The install rule includes the all target, which causes items to be built during install. A bug in the process when running as root results in an empty signature for the shared object (the signature is a string of zeros).&lt;br /&gt;
&lt;br /&gt;
To build the OpenSSL Library, you must issue &amp;lt;tt&amp;gt;config&amp;lt;/tt&amp;gt;, but other options are up to you. Some suggested options for configure include: shared, no-ssl2, no-ssl3, no-comp, no-hw, and no-engine. &amp;lt;tt&amp;gt;shared&amp;lt;/tt&amp;gt; will build and install both the shared object and static archive. You should specify --openssldir to ensure the build system installs the android version of the library in a distinct location (other than &amp;lt;tt&amp;gt;/usr/local/ssl&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Begin building the OpenSSL library by setting the cross-compilation environment. Note the leading '.' when running the &amp;lt;tt&amp;gt;setenv-android.sh&amp;lt;/tt&amp;gt; script. If you have any errors from the script, then you should fix them before proceeding.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ . ./setenv-android.sh&lt;br /&gt;
$ cd openssl-1.0.1g/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you receive a meesage &amp;quot;&amp;lt;tt&amp;gt;Error: FIPS_SIG does not specify incore module, please edit this script&amp;lt;/tt&amp;gt;, then its safe to ignore it. &amp;lt;tt&amp;gt;setenv-android.sh&amp;lt;/tt&amp;gt; is used to build both the FIPS Capable OpenSSL library and the non-FIPS version of the library. &amp;lt;tt&amp;gt;FIPS_SIG&amp;lt;/tt&amp;gt; is '''not''' needed in this configuration.&lt;br /&gt;
&lt;br /&gt;
Next, fix the makefile and run configure. A user on Stack Overflow reports this [http://stackoverflow.com/q/39640180/608639 fails under OpenSSL 1.1.0]. If so skip it because its not essential to the cross-compile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ perl -pi -e 's/install: all install_docs install_sw/install: install_docs install_sw/g' Makefile.org&lt;br /&gt;
$ ./config shared no-ssl2 no-ssl3 no-comp no-hw no-engine --openssldir=/usr/local/ssl/android-14/&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then run make depend and make all:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ make depend&lt;br /&gt;
$ make all&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After make completes, verify libcrypto.a and libssl.a were built for the embedded architecture.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ find . -name libcrypto.a&lt;br /&gt;
./libcrypto.a&lt;br /&gt;
$ readelf -h ./libcrypto.a | grep -i 'class\|machine' | head -2&lt;br /&gt;
  Class:                   ELF32&lt;br /&gt;
  Machine:                 ARM&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Install the OpenSSL Library ===&lt;br /&gt;
&lt;br /&gt;
Finally, install the library. The makefile's install rule uses both CC and RANLIB, so you will need to fully specify the command variables on the command line (during install, sudo drops the user's path). You must also use sudo's -E option; otherwise ANDROID_TOOLCHAIN will be empty and tools such as arm-linux-androideabi-gcc and arm-linux-androideabi-ranlib will not be found.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ sudo -E make install CC=$ANDROID_TOOLCHAIN/arm-linux-androideabi-gcc RANLIB=$ANDROID_TOOLCHAIN/arm-linux-androideabi-ranlib&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Compile and Link against the Library ===&lt;br /&gt;
&lt;br /&gt;
[[#Install_the_OpenSSL_Library_2|Install the OpenSSL Library]] placed the cross-compiled library in &amp;lt;tt&amp;gt;/usr/local/ssl&amp;lt;/tt&amp;gt;. To link against it, you must perform the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;arm-linux-androideabi-gcc -I /usr/local/ssl/include my_prog.c -o my_prog.exe -L /usr/local/ssl/lib -lssl -lcrypto&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The above only tells you how to specify the OpenSSL library. You will still need to include system headers and libraries, or use &amp;lt;tt&amp;gt;--sysroot&amp;lt;/tt&amp;gt; to supply the information.&lt;br /&gt;
&lt;br /&gt;
== Testing the OpenSSL Library ==&lt;br /&gt;
&lt;br /&gt;
Testing the installation consists of building a sample program, installing it with adb, and then running the program using a remote shell. Both the static and dynamic version of the OpenSSL library can be tested. Instructions for testing the OpenSSL library are given at [[FIPS Library and Android]]. The same basic steps apply.&lt;br /&gt;
&lt;br /&gt;
== Wrapper Shared Objects ==&lt;br /&gt;
&lt;br /&gt;
Using OpenSSL on Android often involves JNI and the platform's version of OpenSSL or BoringSSL. The platform likely loaded the system's version of &amp;lt;tt&amp;gt;libssl.so&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;libcrypto.so&amp;lt;/tt&amp;gt; at boot during Zygote initialization. Due to issues with the loader and symbol resolution, customary &amp;lt;tt&amp;gt;LD_LIBRARY_PATH&amp;lt;/tt&amp;gt; tricks do not work for most applications. And changing the build to output different library names, like &amp;lt;tt&amp;gt;libmyssl.so&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;libmycrypto.so&amp;lt;/tt&amp;gt;, to avoid clashes does not work either.&lt;br /&gt;
&lt;br /&gt;
The solution to the namespace and symbol resolution problems is to wrap the '''''static''''' version of the OpenSSL library in a separate '''''dynamic''''' library or shared object provided by you. To do so, write a small C wrapper library with references to functions you need from the OpenSSL library. You don't need to wrap all the functions.&lt;br /&gt;
&lt;br /&gt;
Your &amp;lt;tt&amp;gt;wrapper.c&amp;lt;/tt&amp;gt; might look as follows (also see GCC's [http://gcc.gnu.org/wiki/Visibility Visibility page]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#if __GNUC__ &amp;gt;= 4&lt;br /&gt;
    #define DLL_PUBLIC __attribute__ ((visibility (&amp;quot;default&amp;quot;)))&lt;br /&gt;
    #define DLL_LOCAL  __attribute__ ((visibility (&amp;quot;hidden&amp;quot;)))&lt;br /&gt;
#else&lt;br /&gt;
    #define DLL_PUBLIC&lt;br /&gt;
    #define DLL_LOCAL&lt;br /&gt;
#endif&lt;br /&gt;
    &lt;br /&gt;
DLL_PUBLIC void My_OpenSSL_add_all_algorithms() {&lt;br /&gt;
   &lt;br /&gt;
    return (void)OpenSSL_add_all_algorithms();&lt;br /&gt;
}&lt;br /&gt;
    &lt;br /&gt;
DLL_PUBLIC void My_SSL_load_error_strings() {&lt;br /&gt;
&lt;br /&gt;
    return (void)SSL_load_error_strings();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
...&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then, compile the source file into a shared object. A typical command line might look as follows.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;$ export OPENSSL_ANDROID = /usr/local/ssl/android-14&lt;br /&gt;
$ $(CC) wrapper.c -fPIC -shared -I$(OPENSSL_ANDROID)/include -fvisibility=hidden -Wl,--exclude-libs,ALL \&lt;br /&gt;
-Wl,-Bstatic -lcrypto -lssl -L$(OPENSSL_ANDROID)/lib -o wrapper.so -Wl,-Bdynamic&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;-fvisibility=hidden&amp;lt;/tt&amp;gt; works as you expect, and &amp;lt;tt&amp;gt;-Wl,--exclude-libs,ALL&amp;lt;/tt&amp;gt; means your library does not re-export other linked library symbols. Only the functions marked with &amp;lt;tt&amp;gt;DLL_PUBLIC&amp;lt;/tt&amp;gt; will be exported and callable through JNI. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;-Wl,-Bstatic&amp;lt;/tt&amp;gt; tells the linker to use the static version of the OpenSSL library for the Library. After it and the &amp;lt;tt&amp;gt;-Wl,-Bdynamic&amp;lt;/tt&amp;gt; tells the linker to use dynamic linking for anything else it might need, like &amp;lt;tt&amp;gt;libc&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Then use your shared object in place of OpenSSL.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
The following lists some miscellaneous items we are aware.&lt;br /&gt;
&lt;br /&gt;
=== Position Independent Code ===&lt;br /&gt;
&lt;br /&gt;
The NDK supplies headers for each major platform - for example, API 18, API 14, API 9, API 8, and API 5. If you are building for Android 4.2 (API 17), Android 4.1 (API 16) and Android 4.0 (API 14), then you would use the NDK's API 14 (android-14 platform).&lt;br /&gt;
&lt;br /&gt;
Specify the full library name when calling Java's System.load. That is, call System.load(“libcrypto.so.1.0.0”). Also note that some Android routines expect the prefix of “lib” and suffix of “so”, so you might have to rename the library.&lt;br /&gt;
&lt;br /&gt;
Some versions of the Android Java system loader will load the system's version of the OpenSSL library, even though you built and included a copy with your application. In this case, you might need to write a wrapper shared object and link to the static version of the OpenSSL library. See, for example, ''[https://groups.google.com/forum/#!topic/android-ndk/rAf5tt4UEug &amp;quot;Unable to find native library&amp;quot; error in Native Activity app]''.&lt;br /&gt;
&lt;br /&gt;
If you compile with -fPIE and -pie, then you will core dump unless using Android 4.1 and above. Logcat shows the linker (/system/bin/linker) is the problem.&lt;br /&gt;
&amp;lt;pre&amp;gt;shell@android: $ ./fips_hmac.exe -v fips_hmac.exe&lt;br /&gt;
[2] + Stopped (signal)     ./fips_hmac.exe -v fips_hmac.exe&lt;br /&gt;
[1] - Segmentation fault   ./fips_hmac.exe -v fips_hmac.exe&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When building the OpenSSL library for Android, take care to specify &amp;lt;tt&amp;gt;-mfloat-abi=softfp&amp;lt;/tt&amp;gt;. If you specify &amp;lt;tt&amp;gt;-mfloat-abi=hard&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;-mhard-float&amp;lt;/tt&amp;gt; (even if the hardware support a floating point unit), then the entropy estimate passed through the Java VM to &amp;lt;tt&amp;gt;RAND_add&amp;lt;/tt&amp;gt; will always be 0.0f. See [https://groups.google.com/d/msg/android-ndk/NbUq9FDDZOo/TJJsAS6nM7wJ Hard-float and JNI] for details.&lt;br /&gt;
&lt;br /&gt;
=== Static Library Linking ===&lt;br /&gt;
&lt;br /&gt;
Using &amp;lt;tt&amp;gt;-Bstatic&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;-Bshared&amp;lt;/tt&amp;gt; can cause link problems on occasion. For example, see [http://stackoverflow.com/questions/22667953/error-when-trying-to-compile-wrapper-for-openssl-library-libcrypto-a Android: error when trying to compile wrapper for openssl library libcrypto.a]. To avoid the problem with the linker, specify the full path to the static archive (for example, &amp;lt;tt&amp;gt;/usr/local/ssl/android-14/lib/libcrypto.a&amp;lt;/tt&amp;gt;). If you suspect the wrong OpenSSL library is being linked, then use the fully qualified archive path.&lt;br /&gt;
&lt;br /&gt;
== Downloads ==&lt;br /&gt;
&lt;br /&gt;
[[Media:setenv-android.sh|setenv-android.sh]] - script to set Android cross-compile environment.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2497</id>
		<title>Use of Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2497"/>
		<updated>2016-11-06T19:04:46Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Making pull requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This is a superset of the information at http://www.openssl.org/source/repos.html&lt;br /&gt;
&lt;br /&gt;
== Background information about using the Git distributed version control system ==&lt;br /&gt;
&lt;br /&gt;
This page provides examples for some of the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; commands used when accessing OpenSSL source code, but does not provide complete coverage.&lt;br /&gt;
&lt;br /&gt;
* Refer to the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; man ages and http://git-scm.com/ for more complete instructions on using the command.&lt;br /&gt;
* Refer to https://github.com/ for more complete instructions on interacting with Github.&lt;br /&gt;
&lt;br /&gt;
== Use of Git with OpenSSL source tree ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL group hosts its own Git repository at openssl.org, and this contains the master copy of OpenSSL.  You can browse this at https://git.openssl.org/gitweb/?p=openssl.git;a=tree, or get a clone (checkout) of it with the command &amp;lt;tt&amp;gt;git clone git://git.openssl.org/openssl.git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Contributors to OpenSSL should make use of the Github copy of this repository at https://github.com/openssl/openssl.  Github makes it easy to maintain your own fork of OpenSSL for developing your contributions, as well as making a &amp;quot;pull request&amp;quot; to share fixes with the OpenSSL team when finished.  Changes in the master Git repository are represented in the Github copy within minutes.&lt;br /&gt;
&lt;br /&gt;
You can view existing pull requests against any of the branches at https://github.com/openssl/openssl/pulls&lt;br /&gt;
&lt;br /&gt;
=== Getting a copy of the OpenSSL source tree ===&lt;br /&gt;
&lt;br /&gt;
If you want to quickly make a copy of the OpenSSL source tree and you do not plan to publish any changes for use by others, just create a clone on your own machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Refer to Github documentation for instructions on other means of cloning the source tree.)&lt;br /&gt;
&lt;br /&gt;
If you plan to make changes to the sources that you will share with others, including contributing changes to OpenSSL, it is recommended that you create a fork of the OpenSSL tree using your own Github id.  You can use this to share changes with others whether or not you intend to submit changes to the OpenSSL team.  Refer to the documentation at https://help.github.com/articles/fork-a-repo, in particular the discussion about how to track changes in the real OpenSSL repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Branches ===&lt;br /&gt;
&lt;br /&gt;
The Git repositories contain multiple branches, representing development levels of OpenSSL as well as current and upcoming stable branches.  An easy way to see the available branches is with the branch selector at https://github.com/openssl/openssl.  The branches which are of most interest to most users are&lt;br /&gt;
&lt;br /&gt;
* master (development)&lt;br /&gt;
* OpenSSL_1_1_0-stable&lt;br /&gt;
* OpenSSL_1_0_2-stable&lt;br /&gt;
&lt;br /&gt;
In order to access the code for a branch other than master, clone the Git repository then use the &amp;lt;tt&amp;gt;git checkout ''branchname''&amp;lt;/tt&amp;gt; command to switch to a different branch.  Consider using separate checkouts for each branch you are working in, with appropriate names for each, such as in the following example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL-master&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_1_0-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_1_0-stable)&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_2-stable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you've created your own fork of OpenSSL, replace the URL on the &amp;lt;tt&amp;gt;git clone&amp;lt;/tt&amp;gt; command with the one for your fork.  Also, you'll need to follow the instructions at https://help.github.com/articles/fork-a-repo for picking up changes from the master repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Making pull requests ===&lt;br /&gt;
&lt;br /&gt;
After developing and testing changes to OpenSSL in your checkout (clone), push them to your fork of OpenSSL (&amp;lt;tt&amp;gt;git push&amp;lt;/tt&amp;gt;), then use the Github interface to submit a pull request to the master OpenSSL repository for the particular revision(s).&lt;br /&gt;
&lt;br /&gt;
Anyone can comment on PR's, and suggest changes.  Before a PR is accepted, it must be approved by two OpenSSL team members.&lt;br /&gt;
&lt;br /&gt;
== Use of Git with the OpenSSL web site ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL web site is also maintained in git, and can be browsed at https://git.openssl.org/gitweb/?p=openssl-web.git;a=tree.&lt;br /&gt;
&lt;br /&gt;
Unlike the source code, the OpenSSL web site repository is not copied to Github.  You can only interact with it via git.openssl.org, so it is not possible to submit pull requests.&lt;br /&gt;
&lt;br /&gt;
Check it out as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.openssl.org/openssl-web.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to submit corrections to the web site, create a patch as described above.&lt;br /&gt;
&lt;br /&gt;
Only the master branch of the web site repository is used.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2496</id>
		<title>Use of Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2496"/>
		<updated>2016-11-06T19:04:35Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Making patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This is a superset of the information at http://www.openssl.org/source/repos.html&lt;br /&gt;
&lt;br /&gt;
== Background information about using the Git distributed version control system ==&lt;br /&gt;
&lt;br /&gt;
This page provides examples for some of the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; commands used when accessing OpenSSL source code, but does not provide complete coverage.&lt;br /&gt;
&lt;br /&gt;
* Refer to the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; man ages and http://git-scm.com/ for more complete instructions on using the command.&lt;br /&gt;
* Refer to https://github.com/ for more complete instructions on interacting with Github.&lt;br /&gt;
&lt;br /&gt;
== Use of Git with OpenSSL source tree ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL group hosts its own Git repository at openssl.org, and this contains the master copy of OpenSSL.  You can browse this at https://git.openssl.org/gitweb/?p=openssl.git;a=tree, or get a clone (checkout) of it with the command &amp;lt;tt&amp;gt;git clone git://git.openssl.org/openssl.git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Contributors to OpenSSL should make use of the Github copy of this repository at https://github.com/openssl/openssl.  Github makes it easy to maintain your own fork of OpenSSL for developing your contributions, as well as making a &amp;quot;pull request&amp;quot; to share fixes with the OpenSSL team when finished.  Changes in the master Git repository are represented in the Github copy within minutes.&lt;br /&gt;
&lt;br /&gt;
You can view existing pull requests against any of the branches at https://github.com/openssl/openssl/pulls&lt;br /&gt;
&lt;br /&gt;
=== Getting a copy of the OpenSSL source tree ===&lt;br /&gt;
&lt;br /&gt;
If you want to quickly make a copy of the OpenSSL source tree and you do not plan to publish any changes for use by others, just create a clone on your own machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Refer to Github documentation for instructions on other means of cloning the source tree.)&lt;br /&gt;
&lt;br /&gt;
If you plan to make changes to the sources that you will share with others, including contributing changes to OpenSSL, it is recommended that you create a fork of the OpenSSL tree using your own Github id.  You can use this to share changes with others whether or not you intend to submit changes to the OpenSSL team.  Refer to the documentation at https://help.github.com/articles/fork-a-repo, in particular the discussion about how to track changes in the real OpenSSL repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Branches ===&lt;br /&gt;
&lt;br /&gt;
The Git repositories contain multiple branches, representing development levels of OpenSSL as well as current and upcoming stable branches.  An easy way to see the available branches is with the branch selector at https://github.com/openssl/openssl.  The branches which are of most interest to most users are&lt;br /&gt;
&lt;br /&gt;
* master (development)&lt;br /&gt;
* OpenSSL_1_1_0-stable&lt;br /&gt;
* OpenSSL_1_0_2-stable&lt;br /&gt;
&lt;br /&gt;
In order to access the code for a branch other than master, clone the Git repository then use the &amp;lt;tt&amp;gt;git checkout ''branchname''&amp;lt;/tt&amp;gt; command to switch to a different branch.  Consider using separate checkouts for each branch you are working in, with appropriate names for each, such as in the following example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL-master&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_1_0-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_1_0-stable)&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_2-stable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you've created your own fork of OpenSSL, replace the URL on the &amp;lt;tt&amp;gt;git clone&amp;lt;/tt&amp;gt; command with the one for your fork.  Also, you'll need to follow the instructions at https://help.github.com/articles/fork-a-repo for picking up changes from the master repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Making pull requests ===&lt;br /&gt;
&lt;br /&gt;
After developing and testing changes to OpenSSL in your checkout (clone), push them to your fork of OpenSSL (&amp;lt;tt&amp;gt;git push&amp;lt;/tt&amp;gt;), then use the Github interface to submit a pull request to the master OpenSSL repository for the particular revision(s).&lt;br /&gt;
&lt;br /&gt;
== Use of Git with the OpenSSL web site ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL web site is also maintained in git, and can be browsed at https://git.openssl.org/gitweb/?p=openssl-web.git;a=tree.&lt;br /&gt;
&lt;br /&gt;
Unlike the source code, the OpenSSL web site repository is not copied to Github.  You can only interact with it via git.openssl.org, so it is not possible to submit pull requests.&lt;br /&gt;
&lt;br /&gt;
Check it out as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.openssl.org/openssl-web.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to submit corrections to the web site, create a patch as described above.&lt;br /&gt;
&lt;br /&gt;
Only the master branch of the web site repository is used.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2495</id>
		<title>Use of Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2495"/>
		<updated>2016-11-06T19:03:43Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This is a superset of the information at http://www.openssl.org/source/repos.html&lt;br /&gt;
&lt;br /&gt;
== Background information about using the Git distributed version control system ==&lt;br /&gt;
&lt;br /&gt;
This page provides examples for some of the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; commands used when accessing OpenSSL source code, but does not provide complete coverage.&lt;br /&gt;
&lt;br /&gt;
* Refer to the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; man ages and http://git-scm.com/ for more complete instructions on using the command.&lt;br /&gt;
* Refer to https://github.com/ for more complete instructions on interacting with Github.&lt;br /&gt;
&lt;br /&gt;
== Use of Git with OpenSSL source tree ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL group hosts its own Git repository at openssl.org, and this contains the master copy of OpenSSL.  You can browse this at https://git.openssl.org/gitweb/?p=openssl.git;a=tree, or get a clone (checkout) of it with the command &amp;lt;tt&amp;gt;git clone git://git.openssl.org/openssl.git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Contributors to OpenSSL should make use of the Github copy of this repository at https://github.com/openssl/openssl.  Github makes it easy to maintain your own fork of OpenSSL for developing your contributions, as well as making a &amp;quot;pull request&amp;quot; to share fixes with the OpenSSL team when finished.  Changes in the master Git repository are represented in the Github copy within minutes.&lt;br /&gt;
&lt;br /&gt;
You can view existing pull requests against any of the branches at https://github.com/openssl/openssl/pulls&lt;br /&gt;
&lt;br /&gt;
=== Getting a copy of the OpenSSL source tree ===&lt;br /&gt;
&lt;br /&gt;
If you want to quickly make a copy of the OpenSSL source tree and you do not plan to publish any changes for use by others, just create a clone on your own machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Refer to Github documentation for instructions on other means of cloning the source tree.)&lt;br /&gt;
&lt;br /&gt;
If you plan to make changes to the sources that you will share with others, including contributing changes to OpenSSL, it is recommended that you create a fork of the OpenSSL tree using your own Github id.  You can use this to share changes with others whether or not you intend to submit changes to the OpenSSL team.  Refer to the documentation at https://help.github.com/articles/fork-a-repo, in particular the discussion about how to track changes in the real OpenSSL repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Branches ===&lt;br /&gt;
&lt;br /&gt;
The Git repositories contain multiple branches, representing development levels of OpenSSL as well as current and upcoming stable branches.  An easy way to see the available branches is with the branch selector at https://github.com/openssl/openssl.  The branches which are of most interest to most users are&lt;br /&gt;
&lt;br /&gt;
* master (development)&lt;br /&gt;
* OpenSSL_1_1_0-stable&lt;br /&gt;
* OpenSSL_1_0_2-stable&lt;br /&gt;
&lt;br /&gt;
In order to access the code for a branch other than master, clone the Git repository then use the &amp;lt;tt&amp;gt;git checkout ''branchname''&amp;lt;/tt&amp;gt; command to switch to a different branch.  Consider using separate checkouts for each branch you are working in, with appropriate names for each, such as in the following example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL-master&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_1_0-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_1_0-stable)&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_2-stable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you've created your own fork of OpenSSL, replace the URL on the &amp;lt;tt&amp;gt;git clone&amp;lt;/tt&amp;gt; command with the one for your fork.  Also, you'll need to follow the instructions at https://help.github.com/articles/fork-a-repo for picking up changes from the master repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Making patches ===&lt;br /&gt;
&lt;br /&gt;
Please use the standard GitHub pull request (PR) mechanism to make patches.&lt;br /&gt;
&lt;br /&gt;
Anyone can comment on PR's, and suggest changes.  Before a PR is accepted, it must be approved by two OpenSSL team members.&lt;br /&gt;
&lt;br /&gt;
=== Making pull requests ===&lt;br /&gt;
&lt;br /&gt;
After developing and testing changes to OpenSSL in your checkout (clone), push them to your fork of OpenSSL (&amp;lt;tt&amp;gt;git push&amp;lt;/tt&amp;gt;), then use the Github interface to submit a pull request to the master OpenSSL repository for the particular revision(s).&lt;br /&gt;
&lt;br /&gt;
== Use of Git with the OpenSSL web site ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL web site is also maintained in git, and can be browsed at https://git.openssl.org/gitweb/?p=openssl-web.git;a=tree.&lt;br /&gt;
&lt;br /&gt;
Unlike the source code, the OpenSSL web site repository is not copied to Github.  You can only interact with it via git.openssl.org, so it is not possible to submit pull requests.&lt;br /&gt;
&lt;br /&gt;
Check it out as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.openssl.org/openssl-web.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to submit corrections to the web site, create a patch as described above.&lt;br /&gt;
&lt;br /&gt;
Only the master branch of the web site repository is used.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2494</id>
		<title>Use of Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2494"/>
		<updated>2016-11-06T19:02:04Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Pull Requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This is a superset of the information at http://www.openssl.org/source/repos.html&lt;br /&gt;
&lt;br /&gt;
== Background information about using the Git distributed version control system ==&lt;br /&gt;
&lt;br /&gt;
This page provides examples for some of the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; commands used when accessing OpenSSL source code, but does not provide complete coverage.&lt;br /&gt;
&lt;br /&gt;
* Refer to the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; man ages and http://git-scm.com/ for more complete instructions on using the command.&lt;br /&gt;
* Refer to https://github.com/ for more complete instructions on interacting with Github.&lt;br /&gt;
&lt;br /&gt;
== Use of Git with OpenSSL source tree ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL group hosts its own Git repository at openssl.org, and this contains the master copy of OpenSSL.  You can browse this at https://git.openssl.org/gitweb/?p=openssl.git;a=tree, or get a clone (checkout) of it with the command &amp;lt;tt&amp;gt;git clone git://git.openssl.org/openssl.git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Contributors to OpenSSL should make use of the Github copy of this repository at https://github.com/openssl/openssl.  Github makes it easy to maintain your own fork of OpenSSL for developing your contributions, as well as making a &amp;quot;pull request&amp;quot; to share fixes with the OpenSSL team when finished.  Changes in the master Git repository are represented in the Github copy within minutes.&lt;br /&gt;
&lt;br /&gt;
You can view existing pull requests against any of the branches at https://github.com/openssl/openssl/pulls&lt;br /&gt;
&lt;br /&gt;
=== Getting a copy of the OpenSSL source tree ===&lt;br /&gt;
&lt;br /&gt;
If you want to quickly make a copy of the OpenSSL source tree and you do not plan to publish any changes for use by others, just create a clone on your own machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Refer to Github documentation for instructions on other means of cloning the source tree.)&lt;br /&gt;
&lt;br /&gt;
If you plan to make changes to the sources that you will share with others, including contributing changes to OpenSSL, it is recommended that you create a fork of the OpenSSL tree using your own Github id.  You can use this to share changes with others whether or not you intend to submit changes to the OpenSSL team.  Refer to the documentation at https://help.github.com/articles/fork-a-repo, in particular the discussion about how to track changes in the real OpenSSL repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Branches ===&lt;br /&gt;
&lt;br /&gt;
The Git repositories contain multiple branches, representing development levels of OpenSSL as well as current and upcoming stable branches.  An easy way to see the available branches is with the branch selector at https://github.com/openssl/openssl.  The branches which are of most interest to most users are&lt;br /&gt;
&lt;br /&gt;
* master (development)&lt;br /&gt;
* OpenSSL_1_0_2-stable (for the not-yet-released 1.0.2 series)&lt;br /&gt;
* OpenSSL_1_0_1-stable&lt;br /&gt;
* OpenSSL_1_0_0-stable&lt;br /&gt;
&lt;br /&gt;
In order to access the code for a branch other than master, clone the Git repository then use the &amp;lt;tt&amp;gt;git checkout ''branchname''&amp;lt;/tt&amp;gt; command to switch to a different branch.  Consider using separate checkouts for each branch you are working in, with appropriate names for each, such as in the following example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL-master&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_2-stable)&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_1-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_1-stable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you've created your own fork of OpenSSL, replace the URL on the &amp;lt;tt&amp;gt;git clone&amp;lt;/tt&amp;gt; command with the one for your fork.  Also, you'll need to follow the instructions at https://help.github.com/articles/fork-a-repo for picking up changes from the master repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Making patches ===&lt;br /&gt;
&lt;br /&gt;
Please use the standard GitHub pull request (PR) mechanism to make patches.&lt;br /&gt;
&lt;br /&gt;
Anyone can comment on PR's, and suggest changes.  Before a PR is accepted, it must be approved by two OpenSSL team members.&lt;br /&gt;
&lt;br /&gt;
=== Making pull requests ===&lt;br /&gt;
&lt;br /&gt;
After developing and testing changes to OpenSSL in your checkout (clone), push them to your fork of OpenSSL (&amp;lt;tt&amp;gt;git push&amp;lt;/tt&amp;gt;), then use the Github interface to submit a pull request to the master OpenSSL repository for the particular revision(s).&lt;br /&gt;
&lt;br /&gt;
== Use of Git with the OpenSSL web site ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL web site is also maintained in git, and can be browsed at https://git.openssl.org/gitweb/?p=openssl-web.git;a=tree.&lt;br /&gt;
&lt;br /&gt;
Unlike the source code, the OpenSSL web site repository is not copied to Github.  You can only interact with it via git.openssl.org, so it is not possible to submit pull requests.&lt;br /&gt;
&lt;br /&gt;
Check it out as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.openssl.org/openssl-web.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to submit corrections to the web site, create a patch as described above.&lt;br /&gt;
&lt;br /&gt;
Only the master branch of the web site repository is used.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2493</id>
		<title>Use of Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2493"/>
		<updated>2016-11-06T19:01:45Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Making patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This is a superset of the information at http://www.openssl.org/source/repos.html&lt;br /&gt;
&lt;br /&gt;
== Background information about using the Git distributed version control system ==&lt;br /&gt;
&lt;br /&gt;
This page provides examples for some of the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; commands used when accessing OpenSSL source code, but does not provide complete coverage.&lt;br /&gt;
&lt;br /&gt;
* Refer to the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; man ages and http://git-scm.com/ for more complete instructions on using the command.&lt;br /&gt;
* Refer to https://github.com/ for more complete instructions on interacting with Github.&lt;br /&gt;
&lt;br /&gt;
== Use of Git with OpenSSL source tree ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL group hosts its own Git repository at openssl.org, and this contains the master copy of OpenSSL.  You can browse this at https://git.openssl.org/gitweb/?p=openssl.git;a=tree, or get a clone (checkout) of it with the command &amp;lt;tt&amp;gt;git clone git://git.openssl.org/openssl.git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Contributors to OpenSSL should make use of the Github copy of this repository at https://github.com/openssl/openssl.  Github makes it easy to maintain your own fork of OpenSSL for developing your contributions, as well as making a &amp;quot;pull request&amp;quot; to share fixes with the OpenSSL team when finished.  Changes in the master Git repository are represented in the Github copy within minutes.&lt;br /&gt;
&lt;br /&gt;
You can view existing pull requests against any of the branches at https://github.com/openssl/openssl/pulls&lt;br /&gt;
&lt;br /&gt;
=== Getting a copy of the OpenSSL source tree ===&lt;br /&gt;
&lt;br /&gt;
If you want to quickly make a copy of the OpenSSL source tree and you do not plan to publish any changes for use by others, just create a clone on your own machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Refer to Github documentation for instructions on other means of cloning the source tree.)&lt;br /&gt;
&lt;br /&gt;
If you plan to make changes to the sources that you will share with others, including contributing changes to OpenSSL, it is recommended that you create a fork of the OpenSSL tree using your own Github id.  You can use this to share changes with others whether or not you intend to submit changes to the OpenSSL team.  Refer to the documentation at https://help.github.com/articles/fork-a-repo, in particular the discussion about how to track changes in the real OpenSSL repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Branches ===&lt;br /&gt;
&lt;br /&gt;
The Git repositories contain multiple branches, representing development levels of OpenSSL as well as current and upcoming stable branches.  An easy way to see the available branches is with the branch selector at https://github.com/openssl/openssl.  The branches which are of most interest to most users are&lt;br /&gt;
&lt;br /&gt;
* master (development)&lt;br /&gt;
* OpenSSL_1_0_2-stable (for the not-yet-released 1.0.2 series)&lt;br /&gt;
* OpenSSL_1_0_1-stable&lt;br /&gt;
* OpenSSL_1_0_0-stable&lt;br /&gt;
&lt;br /&gt;
In order to access the code for a branch other than master, clone the Git repository then use the &amp;lt;tt&amp;gt;git checkout ''branchname''&amp;lt;/tt&amp;gt; command to switch to a different branch.  Consider using separate checkouts for each branch you are working in, with appropriate names for each, such as in the following example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL-master&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_2-stable)&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_1-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_1-stable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you've created your own fork of OpenSSL, replace the URL on the &amp;lt;tt&amp;gt;git clone&amp;lt;/tt&amp;gt; command with the one for your fork.  Also, you'll need to follow the instructions at https://help.github.com/articles/fork-a-repo for picking up changes from the master repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Making patches ===&lt;br /&gt;
&lt;br /&gt;
Please use the standard GitHub pull request (PR) mechanism to make patches.&lt;br /&gt;
&lt;br /&gt;
Anyone can comment on PR's, and suggest changes.  Before a PR is accepted, it must be approved by two OpenSSL team members.&lt;br /&gt;
&lt;br /&gt;
=== Pull Requests ===&lt;br /&gt;
&lt;br /&gt;
You can also suggest changes by making pull requests on GitHub.  If you do this, please still open a ticket by emailing rt@openssl.org and reference the github pull request number in the description so that we can more easily keep track of it.&lt;br /&gt;
&lt;br /&gt;
=== Making pull requests ===&lt;br /&gt;
&lt;br /&gt;
After developing and testing changes to OpenSSL in your checkout (clone), push them to your fork of OpenSSL (&amp;lt;tt&amp;gt;git push&amp;lt;/tt&amp;gt;), then use the Github interface to submit a pull request to the master OpenSSL repository for the particular revision(s).&lt;br /&gt;
&lt;br /&gt;
== Use of Git with the OpenSSL web site ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL web site is also maintained in git, and can be browsed at https://git.openssl.org/gitweb/?p=openssl-web.git;a=tree.&lt;br /&gt;
&lt;br /&gt;
Unlike the source code, the OpenSSL web site repository is not copied to Github.  You can only interact with it via git.openssl.org, so it is not possible to submit pull requests.&lt;br /&gt;
&lt;br /&gt;
Check it out as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.openssl.org/openssl-web.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to submit corrections to the web site, create a patch as described above.&lt;br /&gt;
&lt;br /&gt;
Only the master branch of the web site repository is used.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=File:Setenv-android.sh&amp;diff=2450</id>
		<title>File:Setenv-android.sh</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=File:Setenv-android.sh&amp;diff=2450"/>
		<updated>2016-09-01T16:57:26Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: Rsalz uploaded a new version of &amp;amp;quot;File:Setenv-android.sh&amp;amp;quot;: Address RT4666&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Script to set Android cross-compile environment&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2448</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2448"/>
		<updated>2016-08-24T19:48:42Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the OpenSSL wiki.  The main site is https://www.openssl.org . If this is your first visit or to get an account please see the [[Welcome]] page. Your participation and [[Contributions]] are valued.&lt;br /&gt;
&lt;br /&gt;
This wiki is intended as a place for collecting, organizing, and refining useful information about OpenSSL that is currently strewn among multiple locations and formats.&lt;br /&gt;
&lt;br /&gt;
== OpenSSL Quick Links ==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;TABLE border=0&amp;gt;&lt;br /&gt;
     &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[OpenSSL Overview]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Compilation and Installation]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Internals]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Mailing Lists]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libcrypto API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libssl API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Examples]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Documentation Index|Index of all API functions]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[License]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Command Line Utilities]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Related Links]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Binaries]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[SSL and TLS Protocols]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[1.1 API Changes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
  &amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Administrivia ==&lt;br /&gt;
Site guidelines, legal and admininstrative issues.&lt;br /&gt;
:* [[Basic rules]], [[Commercial Product Disclaimer]], [[Contributions]], [[Copyright]], [[License]]&lt;br /&gt;
:* Using This Wiki&lt;br /&gt;
:: [http://meta.wikimedia.org/wiki/Help:Contents Wiki User's Guide], [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list], [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ], [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Mailing List]&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
This section contains the automagically generated man pages from the OpenSSL git repository, and similar &amp;quot;man&amp;quot; style reference documentation. The man pages are automatically imported from the OpenSSL git repository and local wiki modifications are submitted as patches.&lt;br /&gt;
:* OpenSSL Manual Pages&lt;br /&gt;
::* [[Manual:Openssl(1)]], [[Manual:Ssl(3)]], [[Manual:Crypto(3)]], [[Documentation Index]]&lt;br /&gt;
:: If you wish to edit any of the Manual page content please refer to the [[Guidelines for Manual Page Authors]] page.&lt;br /&gt;
:* [[API]], [[Libcrypto API]], [[Libssl API]]&lt;br /&gt;
:* [[FIPS mode()]], [[FIPS_mode_set()]]&lt;br /&gt;
&lt;br /&gt;
== Usage and Programming ==&lt;br /&gt;
This section has discussions of practical issues in using OpenSSL&lt;br /&gt;
:* Building from Source&lt;br /&gt;
:: Where to find it, the different versions, how to build and install it.&lt;br /&gt;
:* [[OpenSSL Overview]]&lt;br /&gt;
:* [[Versioning]]&lt;br /&gt;
:* [[Compilation and Installation]]&lt;br /&gt;
:* [[EVP]]&lt;br /&gt;
:: Programming techniques and example code&lt;br /&gt;
:: Use of EVP is preferred for most applications and circumstances&lt;br /&gt;
::* [[EVP Asymmetric Encryption and Decryption of an Envelope]]&lt;br /&gt;
::* [[EVP Authenticated Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Symmetric Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Key and Parameter Generation]]&lt;br /&gt;
::* [[EVP Key Agreement]]&lt;br /&gt;
::* [[EVP Message Digests]]&lt;br /&gt;
::* [[EVP Key Derivation]]&lt;br /&gt;
::* [[EVP Signing and Verifying|EVP Signing and Verifying (including MAC codes)]]&lt;br /&gt;
:* [[STACK API]]&lt;br /&gt;
:* Low Level APIs&lt;br /&gt;
::[[Creating an OpenSSL Engine to use indigenous ECDH ECDSA and HASH Algorithms]]&lt;br /&gt;
:: More specialized non-EVP usage&lt;br /&gt;
::* [[Diffie-Hellman parameters]]&lt;br /&gt;
:* [[FIPS Mode]]&lt;br /&gt;
:* [[Simple TLS Server]]&lt;br /&gt;
&lt;br /&gt;
== Concepts and Theory ==&lt;br /&gt;
Discussions of basic cryptographic theory and concepts&lt;br /&gt;
Discussions of common operational issues&lt;br /&gt;
:* [[Base64]]&lt;br /&gt;
:* [http://wiki.openssl.org/index.php/Category:FIPS_140 FIPS 140-2]&lt;br /&gt;
:* [[Random Numbers]]&lt;br /&gt;
:* [[Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Cryptography]]&lt;br /&gt;
&lt;br /&gt;
== Security Advisories ==&lt;br /&gt;
:* [https://www.openssl.org/about/secpolicy.html OpenSSL Security Policy]&lt;br /&gt;
:* [https://www.openssl.org/news/vulnerabilities.html OpenSSL Vulnerabilities List]&lt;br /&gt;
:* [[Security_Advisories|Security Advisories Additional Information]]&lt;br /&gt;
&lt;br /&gt;
== Feedback and Contributions ==&lt;br /&gt;
:* [https://www.openssl.org/support/faq.html#BUILD18 How to notify us of suspected security vulnerabilities]&lt;br /&gt;
:* [https://www.openssl.org/community/#bugs How to report bugs, other than for suspected vulnerabilities]&lt;br /&gt;
:* [[Contributions|General background on source and documentation contributions - '''must read''']]&lt;br /&gt;
:* Contributing code fixes, other than for suspected vulnerabilities, as well as fixes and other improvements to manual pages:&lt;br /&gt;
::* If you are unsure as to whether a feature will be useful for the general OpenSSL community please discuss it on the [https://www.openssl.org/support/community.html openssl-dev mailing list] first.  Someone may be already working on the same thing or there may be a good reason as to why that feature isn't implemented.&lt;br /&gt;
::* Follow the [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|instructions for accessing source code]] in the appropriate branches. Note that manual pages and the FAQ are maintained with the source code.&lt;br /&gt;
::* Submit a pull request for each separate fix (also documented [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|there]])&lt;br /&gt;
::* Submit a bug report (see second bullet, above) and reference the pull request. Or you can attach the patch to the ticket.&lt;br /&gt;
:* Contributing fixes and other improvements to the web site&lt;br /&gt;
::* Follow the [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|instructions for accessing web site sources]]&lt;br /&gt;
::* Create a patch (also documented [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|there]])&lt;br /&gt;
::* Submit a bug report and add the patch as an attachment&lt;br /&gt;
:* [[Developing For OpenSSL]]&lt;br /&gt;
:* [[KnownPatches|Known patches not part of OpenSSL]]&lt;br /&gt;
:* [[Welcome|Contributing to this wiki]]&lt;br /&gt;
&lt;br /&gt;
== Internals and Development ==&lt;br /&gt;
This section is for internal details of primary interest to OpenSSL maintainers and power users&lt;br /&gt;
:* [[Code reformatting]]&lt;br /&gt;
&lt;br /&gt;
:* [[Internals]]&lt;br /&gt;
:* [[Code Quality]]&lt;br /&gt;
:* [[Static and Dynamic Analysis]]&lt;br /&gt;
:* [[OCB|OCB Licence details]]&lt;br /&gt;
:* [[Defect and Feature Review Process]]&lt;br /&gt;
:* [[Unit Testing]] (includes other automated testing information)&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=OpenSSL_1.1.0_Changes&amp;diff=2409</id>
		<title>OpenSSL 1.1.0 Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=OpenSSL_1.1.0_Changes&amp;diff=2409"/>
		<updated>2016-06-27T20:24:24Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a parent page for discussion about API changes being done for OpenSSL version 1.1&lt;br /&gt;
&lt;br /&gt;
The overall goal of this project is to make most data structures opaque to applications.  This provides us with a number of benefits:&lt;br /&gt;
* We can add fields without breaking [[Binary_Compatibility|binary compatibility]]&lt;br /&gt;
* Applications are more robust and can be more assured about correctness&lt;br /&gt;
* It helps us determine which (new) accessors and settors, for example, are needed&lt;br /&gt;
&lt;br /&gt;
Please add sub-pages to discuss particular parts of the library as work progresses.&lt;br /&gt;
&lt;br /&gt;
== Major Changes so far ==&lt;br /&gt;
&lt;br /&gt;
* All structures in libssl public header files have been removed so that they are &amp;quot;opaque&amp;quot; to library users. You should use the provided accessor functions instead&lt;br /&gt;
* The old DES API has been removed&lt;br /&gt;
* bn, a sub library in libcrypto, has been made opaque&lt;br /&gt;
* Access to deprecated functions/macros has been removed by default. To enable access you must do two things. 1) Build OpenSSL with deprecation support (pass &amp;quot;enable-deprecated&amp;quot; as an argument to config) 2) Applications must define &amp;quot;OPENSSL_USE_DEPRECATED&amp;quot; before including OpenSSL header files&lt;br /&gt;
* HMAC_Init and HMAC_cleanup were previously stated in the docs and header files as being deprecated - but were not flagged in previous versions with OPENSSL_NO_DEPRECATED. This has been corrected in 1.1.0. Access to these functions/macros will be off by default in 1.1.0 as per the note above about deprecation.&lt;br /&gt;
&lt;br /&gt;
== OPENSSL_API_COMPAT ==&lt;br /&gt;
&lt;br /&gt;
Various functions get deprecated as other interfaces get added, but are still available in a default build.&lt;br /&gt;
The include files support setting the OPENSSL_API_COMPAT define that will hide functions that are deprecated in the selected version.&lt;br /&gt;
To select the 1.1.0 version use -DOPENSSL_API_COMPAT=0x10100000L.&lt;br /&gt;
&lt;br /&gt;
== Backward compatibility ==&lt;br /&gt;
&lt;br /&gt;
Since some structures have become opaque you can't directly access the member any more.  You might need to create backward compatible macros or functions if you still want to support older versions of OpenSSL.  A suggested way of doing that is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #if OPENSSL_VERSION_NUMBER &amp;lt; 0x10100000L&lt;br /&gt;
 #define OBJ_get0_data(o) ((o)-&amp;gt;data)&lt;br /&gt;
 #define OBJ_length(o) ((o)-&amp;gt;length)&lt;br /&gt;
 #endif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Adding forward-compatible code to older versions ==&lt;br /&gt;
&lt;br /&gt;
Application code now has to use pointers, and cannot allocate objects directly on the stack. One way to do this is to add in missing&lt;br /&gt;
constructors like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #if OPENSSL_VERSION_NUMBER &amp;lt; 0x10100000L&lt;br /&gt;
 HMAC_CTX *HMAC_CTX_new(void)&lt;br /&gt;
 {&lt;br /&gt;
    HMAC_CTX *ctx = OPENSSL_malloc(sizeof(*ctx));&lt;br /&gt;
    if (ctx != NULL) {&lt;br /&gt;
        if (!HMAC_CTX_reset(ctx)) {&lt;br /&gt;
            HMAC_CTX_free(ctx);&lt;br /&gt;
            return NULL;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return ctx;&lt;br /&gt;
 }&lt;br /&gt;
 void HMAC_CTX_free(HMAC_CTX *ctx)&lt;br /&gt;
 {&lt;br /&gt;
    if (ctx != NULL) {&lt;br /&gt;
        hmac_ctx_cleanup(ctx);&lt;br /&gt;
        EVP_MD_CTX_free(ctx-&amp;gt;i_ctx);&lt;br /&gt;
        EVP_MD_CTX_free(ctx-&amp;gt;o_ctx);&lt;br /&gt;
        EVP_MD_CTX_free(ctx-&amp;gt;md_ctx);&lt;br /&gt;
        OPENSSL_free(ctx);&lt;br /&gt;
    }&lt;br /&gt;
 }&lt;br /&gt;
 #endif&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In other words, look at the 1.1 code and add the missing functions into your source.&lt;br /&gt;
&lt;br /&gt;
== Things that Broke in Qt ==&lt;br /&gt;
&lt;br /&gt;
Here's what's broken in the dev branch of Qt when building openssl master as of 6 Feb 2015.&lt;br /&gt;
&lt;br /&gt;
* DH - we were directly accessing p and q to set the DH params to primes embedded in Qt. We can probably replace this with SSL_CTX_set_dh_auto(ctx, 1). Another option suggested by Steve Henson is to save the DHparams we're using at the moment then use d2i_DHparams to load them in. This is compatible with openssl versions that don't have the dh_auto option.&lt;br /&gt;
&lt;br /&gt;
* ctx-&amp;gt;cert_store - we were directly accessing the cert_store field of SSL_CTX. We can probably replace this with X509_STORE *SSL_CTX_get_cert_store(SSL_CTX *ctx) [Fixed in dev]&lt;br /&gt;
&lt;br /&gt;
* session-&amp;gt;tlsext_tick_lifetime_hint - we were directly accessing the lifetime hint of the session. [A new API to access this field has been added]&lt;br /&gt;
&lt;br /&gt;
* cipher-&amp;gt;valid - we were directly accessing the valid field of SSL_CIPHER. No replacement found. [This turned out not to be needed and so will be removed].&lt;br /&gt;
&lt;br /&gt;
== Things that Broke in Curl ==&lt;br /&gt;
&lt;br /&gt;
* SSL_SESSION-&amp;gt;ssl_version. Replaced with SSL_version(SSL *)&lt;br /&gt;
&lt;br /&gt;
== Things that Broke in wget ==&lt;br /&gt;
&lt;br /&gt;
* SSL-&amp;gt;state. Replaced with SSL_state(SSL *)&lt;br /&gt;
&lt;br /&gt;
== Things that Broke in Apache Traffic Manager ==&lt;br /&gt;
&lt;br /&gt;
* Setting SSL-&amp;gt;rbio without setting SSL-&amp;gt;wbio. New function introduction in 1.1.0 to handle this: SSL_set_rbio()&lt;br /&gt;
&lt;br /&gt;
== Things that Broke in OpenConnect ==&lt;br /&gt;
&lt;br /&gt;
In order to simulate &amp;quot;resume&amp;quot; of a DTLS session which never really existed but which was actually negotiated over the VPN control connection, [http://git.infradead.org/users/dwmw2/openconnect.git/blob/fa5cea08:/dtls.c#l147 this code] in the [http://www.infradead.org/openconnect/ OpenConnect VPN client] needs to set the following fields in a new &amp;lt;tt&amp;gt;SSL_SESSION&amp;lt;/tt&amp;gt;:&lt;br /&gt;
* &amp;lt;tt&amp;gt;-&amp;gt;ssl_version&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;-&amp;gt;cipher{,_id}&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;-&amp;gt;master_key{,_length}&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;-&amp;gt;session_id{,_length}&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This was fixed with [http://git.infradead.org/users/dwmw2/openconnect.git/commitdiff/5abb133f this OpenConnect commit] which makes it create the ASN.1 representation of the session and import it with &amp;lt;tt&amp;gt;d2i_SSL_SESSION()&amp;lt;/tt&amp;gt;. This is done conditionally in the above patch because it depends on the [http://git.openssl.org/gitweb/?p=openssl.git;a=commitdiff;h=af674d4e20a82c2a98767b837072d7093c70b1cf fix in openssl HEAD] for &amp;lt;tt&amp;gt;d2i_SSL_SESSION()&amp;lt;/tt&amp;gt; to make it cope with &amp;lt;tt&amp;gt;DTLS1_BAD_VER&amp;lt;/tt&amp;gt; &amp;lt;i&amp;gt;([http://rt.openssl.org/Ticket/Display.html?id=3704 RT#3704])&amp;lt;/i&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Other simpler things which broke:&lt;br /&gt;
* &amp;lt;tt&amp;gt;SSL_CIPHER-&amp;gt;id&amp;lt;/tt&amp;gt;. Replaced with &amp;lt;tt&amp;gt;SSL_CIPHER_get_id()&amp;lt;/tt&amp;gt;&lt;br /&gt;
* &amp;lt;tt&amp;gt;SSL_CTX-&amp;gt;extra_certs&amp;lt;/tt&amp;gt;. Replaced with &amp;lt;tt&amp;gt;SSL_CTX_get_extra_chain_certs_only()&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Things that Broke in TianoCore/EDKII ==&lt;br /&gt;
&lt;br /&gt;
EDKII is the reference implementation of UEFI firmware.&lt;br /&gt;
&lt;br /&gt;
* Various implicit inclusions of &amp;lt;tt&amp;gt;&amp;amp;lt;openssl/bn.h&amp;amp;gt;&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;&amp;amp;lt;openssl/rsa.h&amp;amp;gt;&amp;lt;/tt&amp;gt; needed to be made explicit. ''[http://git.infradead.org/users/dwmw2/edk2.git/commitdiff/8d7d32c1 (commit)]''&lt;br /&gt;
* &amp;lt;tt&amp;gt;X509_NAME-&amp;gt;bytes-&amp;gt;{data,length}&amp;lt;/tt&amp;gt;. Replaced with &amp;lt;tt&amp;gt;i2d_X509_NAME()&amp;lt;/tt&amp;gt; ''[http://git.infradead.org/users/dwmw2/edk2.git/commitdiff/e192c51b (commit)]''&lt;br /&gt;
* &amp;lt;tt&amp;gt;X509_ATTRIBUTE-&amp;gt;{object,value}&amp;lt;/tt&amp;gt;. Replaced with &amp;lt;tt&amp;gt;X509_ATTRIBUTE_get0_object()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;X509_ATTRIBUTE_get0_type()&amp;lt;/tt&amp;gt; ''[http://git.infradead.org/users/dwmw2/edk2.git/commitdiff/1bd8ee96 (commit)]''&lt;br /&gt;
* &amp;lt;tt&amp;gt;ASN1_OBJECT-&amp;gt;{length,data}&amp;lt;/tt&amp;gt;. Replaced with &amp;lt;tt&amp;gt;OBJ_get0_data()&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;OBJ_length()&amp;lt;/tt&amp;gt;. With backward-compatibility &amp;lt;tt&amp;gt;#define&amp;lt;/tt&amp;gt; of same. ''[http://git.infradead.org/users/dwmw2/edk2.git/commitdiff/6a7a36edc (commit)]''&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Examples&amp;diff=2334</id>
		<title>Examples</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Examples&amp;diff=2334"/>
		<updated>2015-12-15T18:15:12Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Each topic containing code or script example should be tagged with Category:Examples.&lt;br /&gt;
So to find all example please select [[:Category:Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;br /&gt;
&lt;br /&gt;
'''Atomic intrinsics'''&lt;br /&gt;
&lt;br /&gt;
We (or at least rsalz) want to use atomic intrinsics for OpenSSL's ref-counting in version 1.1&lt;br /&gt;
&lt;br /&gt;
Please post links and/or snippets here on how to do it for various platforms.&lt;br /&gt;
&lt;br /&gt;
Note that we are only interested the platforms we support, and that many were removed in 1.1&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Examples&amp;diff=2333</id>
		<title>Examples</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Examples&amp;diff=2333"/>
		<updated>2015-12-15T18:14:32Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Each topic containing code or script example should be tagged with Category:Examples.&lt;br /&gt;
So to find all example please select [[:Category:Examples]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;br /&gt;
&lt;br /&gt;
Atomic intrinsics&lt;br /&gt;
&lt;br /&gt;
We (or at least rsalz) want to use atomic intrinsics for OpenSSL's ref-counting in version 1.1&lt;br /&gt;
&lt;br /&gt;
Please post links and/or snippets here on how to do it for various platforms.&lt;br /&gt;
&lt;br /&gt;
Note that we are only interested the platforms we support, and that many were removed in 1.1&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Developing_For_OpenSSL&amp;diff=2246</id>
		<title>Developing For OpenSSL</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Developing_For_OpenSSL&amp;diff=2246"/>
		<updated>2015-07-29T20:04:55Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Periodically people ask us how to join the OpenSSL development team. This page is an attempt to answer that question.&lt;br /&gt;
&lt;br /&gt;
Firstly it is important to understand that OpenSSL is complex. It is both a fully featured cryptography library as well as an SSL/TLS library. In addition the command line tools provide a wide array of capabilities. It can take quite a while to become proficient in coding in the internals. It is also clearly security sensitive. For those reasons joining the main development team is by invitation only. Most of the current development team have had an association with OpenSSL of one sort or another for a long time. Some have been on the project since the beginning, whilst many others joined later. For those joining later, without exception, everyone had a number of years of experience working with OpenSSL before they joined the team itself. The list of current development team members is available here: https://www.openssl.org/about/&lt;br /&gt;
&lt;br /&gt;
However, there are still a number of ways to contribute to the project without joining the development team. We welcome such contributions:&lt;br /&gt;
&lt;br /&gt;
* A good place to start is the openssl-users and openssl-dev mailing lists. The first of these forums will give you the opportunity to help out other users of OpenSSL, and learn from other experts in its use. The latter will give you an insight into some of the development issues that the team is tackling - and in particular issues being raised through the RT bug tracking system and responses to those issues.&lt;br /&gt;
&lt;br /&gt;
* We are always looking for good people to help us build up the information held within this wiki. Documentation is one area where we are keen to improve things, and this wiki is an important location for people to come to. Information on how to get an account is available on the [[Welcome]] page.&lt;br /&gt;
&lt;br /&gt;
* Bug fixes and enhancements to the code and documentation, can be submitted as RT tickets or pull requests.  See the README for details.  If using GitHub pull requests, please create a ticket with the PR number so that we can easily track it.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2245</id>
		<title>Use of Git</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Use_of_Git&amp;diff=2245"/>
		<updated>2015-07-29T20:02:55Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Making patches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Note: This is a superset of the information at http://www.openssl.org/source/repos.html&lt;br /&gt;
&lt;br /&gt;
== Background information about using the Git distributed version control system ==&lt;br /&gt;
&lt;br /&gt;
This page provides examples for some of the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; commands used when accessing OpenSSL source code, but does not provide complete coverage.&lt;br /&gt;
&lt;br /&gt;
* Refer to the &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; man ages and http://git-scm.com/ for more complete instructions on using the command.&lt;br /&gt;
* Refer to https://github.com/ for more complete instructions on interacting with Github.&lt;br /&gt;
&lt;br /&gt;
== Use of Git with OpenSSL source tree ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL group hosts its own Git repository at openssl.org, and this contains the master copy of OpenSSL.  You can browse this at https://git.openssl.org/gitweb/?p=openssl.git;a=tree, or get a clone (checkout) of it with the command &amp;lt;tt&amp;gt;git clone git://git.openssl.org/openssl.git&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Contributors to OpenSSL should make use of the Github copy of this repository at https://github.com/openssl/openssl.  Github makes it easy to maintain your own fork of OpenSSL for developing your contributions, as well as making a &amp;quot;pull request&amp;quot; to share fixes with the OpenSSL team when finished.  Changes in the master Git repository are represented in the Github copy within minutes.&lt;br /&gt;
&lt;br /&gt;
You can view existing pull requests against any of the branches at https://github.com/openssl/openssl/pulls&lt;br /&gt;
&lt;br /&gt;
=== Getting a copy of the OpenSSL source tree ===&lt;br /&gt;
&lt;br /&gt;
If you want to quickly make a copy of the OpenSSL source tree and you do not plan to publish any changes for use by others, just create a clone on your own machine.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(Refer to Github documentation for instructions on other means of cloning the source tree.)&lt;br /&gt;
&lt;br /&gt;
If you plan to make changes to the sources that you will share with others, including contributing changes to OpenSSL, it is recommended that you create a fork of the OpenSSL tree using your own Github id.  You can use this to share changes with others whether or not you intend to submit changes to the OpenSSL team.  Refer to the documentation at https://help.github.com/articles/fork-a-repo, in particular the discussion about how to track changes in the real OpenSSL repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Branches ===&lt;br /&gt;
&lt;br /&gt;
The Git repositories contain multiple branches, representing development levels of OpenSSL as well as current and upcoming stable branches.  An easy way to see the available branches is with the branch selector at https://github.com/openssl/openssl.  The branches which are of most interest to most users are&lt;br /&gt;
&lt;br /&gt;
* master (development)&lt;br /&gt;
* OpenSSL_1_0_2-stable (for the not-yet-released 1.0.2 series)&lt;br /&gt;
* OpenSSL_1_0_1-stable&lt;br /&gt;
* OpenSSL_1_0_0-stable&lt;br /&gt;
&lt;br /&gt;
In order to access the code for a branch other than master, clone the Git repository then use the &amp;lt;tt&amp;gt;git checkout ''branchname''&amp;lt;/tt&amp;gt; command to switch to a different branch.  Consider using separate checkouts for each branch you are working in, with appropriate names for each, such as in the following example.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL-master&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_2-stable)&lt;br /&gt;
$ git clone https://github.com/openssl/openssl.git OpenSSL_1_0_1-stable&lt;br /&gt;
$ (cd OpenSSL_1_0_2-stable &amp;amp;&amp;amp; git checkout OpenSSL_1_0_1-stable)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you've created your own fork of OpenSSL, replace the URL on the &amp;lt;tt&amp;gt;git clone&amp;lt;/tt&amp;gt; command with the one for your fork.  Also, you'll need to follow the instructions at https://help.github.com/articles/fork-a-repo for picking up changes from the master repository that you forked.&lt;br /&gt;
&lt;br /&gt;
=== Making patches ===&lt;br /&gt;
&lt;br /&gt;
Patches posted to OpenSSL development mailing lists or to the [https://www.openssl.org/support/rt.html OpenSSL Request Tracker] should be in Git &amp;lt;tt&amp;gt;format-patch&amp;lt;/tt&amp;gt; format if at all practical, since that is easier for OpenSSL committers to apply since it contains author details.&lt;br /&gt;
&lt;br /&gt;
The [http://git-scm.com/docs/git-format-patch &amp;lt;tt&amp;gt;git format-patch&amp;lt;/tt&amp;gt;] documentation describes a lot of options.  Here is an example of the most basic use.&lt;br /&gt;
&lt;br /&gt;
:* You've been working on a particular OpenSSL branch within a Git clone of the source tree, and have made a couple of commits which you'd like to submit.&lt;br /&gt;
:* Print the log for those two commits and one more, the one before your commits:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git log -3&lt;br /&gt;
commit 46983b73e04b448cb6cd9ea180044753174dec6d&lt;br /&gt;
Author: Jeff Trawick &amp;lt;trawick@gmail.com&amp;gt;&lt;br /&gt;
Date:   Fri Apr 25 20:25:19 2014 -0400&lt;br /&gt;
&lt;br /&gt;
    spellcheck&lt;br /&gt;
&lt;br /&gt;
commit 1e20bdf6bad38d9766e6cf3e64d903a99f1d9a6b&lt;br /&gt;
Author: Jeff Trawick &amp;lt;trawick@gmail.com&amp;gt;&lt;br /&gt;
Date:   Fri Apr 25 14:07:07 2014 -0400&lt;br /&gt;
&lt;br /&gt;
    silly wording change&lt;br /&gt;
&lt;br /&gt;
commit 3e124d66c8b66a48a824387b10768411a348f518&lt;br /&gt;
Author: Steve Marquess &amp;lt;marquess@opensslfoundation.com&amp;gt;&lt;br /&gt;
Date:   Thu Apr 24 07:13:05 2014 -0400&lt;br /&gt;
&lt;br /&gt;
    Add new sponsors&lt;br /&gt;
    (cherry picked from commit 351f0a124bffaa94d2a8abdec2e7dde5ae9c457d)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
:* Create a patch from changes '''after''' the third commit (&amp;lt;tt&amp;gt;3e124d66c8b66a48a824387b10768411a348f518&amp;lt;/tt&amp;gt;), and pipe it to a file instead of letting &amp;lt;tt&amp;gt;git&amp;lt;/tt&amp;gt; create a bunch of &amp;lt;tt&amp;gt;.patch&amp;lt;/tt&amp;gt; files in the current directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git format-patch 3e124d66c8b66a48a824387b10768411a348f518 --stdout &amp;gt;/tmp/FixWording.txt&lt;br /&gt;
$ cat /tmp/FixWording.txt &lt;br /&gt;
From 1e20bdf6bad38d9766e6cf3e64d903a99f1d9a6b Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: Jeff Trawick &amp;lt;trawick@gmail.com&amp;gt;&lt;br /&gt;
Date: Fri, 25 Apr 2014 14:07:07 -0400&lt;br /&gt;
Subject: [PATCH 1/2] silly wording change&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 apps/s_client.c | 2 +-&lt;br /&gt;
 1 file changed, 1 insertion(+), 1 deletion(-)&lt;br /&gt;
&lt;br /&gt;
diff --git a/apps/s_client.c b/apps/s_client.c&lt;br /&gt;
index 01f4f34..eeb2e77 100644&lt;br /&gt;
--- a/apps/s_client.c&lt;br /&gt;
+++ b/apps/s_client.c&lt;br /&gt;
@@ -323,7 +323,7 @@ static void sc_usage(void)&lt;br /&gt;
 	BIO_printf(bio_err,&amp;quot;\n&amp;quot;);&lt;br /&gt;
 	BIO_printf(bio_err,&amp;quot; -host host     - use -connect instead\n&amp;quot;);&lt;br /&gt;
 	BIO_printf(bio_err,&amp;quot; -port port     - use -connect instead\n&amp;quot;);&lt;br /&gt;
-	BIO_printf(bio_err,&amp;quot; -connect host:port - who to connect to (default is %s:%s)\n&amp;quot;,SSL_HOST_NAME,PORT_STR);&lt;br /&gt;
+	BIO_printf(bio_err,&amp;quot; -connect host:port - what to connect to (default is %s:%s)\n&amp;quot;,SSL_HOST_NAME,PORT_STR);&lt;br /&gt;
 	BIO_printf(bio_err,&amp;quot; -checkhost host - check peer certificate matches \&amp;quot;host\&amp;quot;\n&amp;quot;);&lt;br /&gt;
 	BIO_printf(bio_err,&amp;quot; -checkemail email - check peer certificate matches \&amp;quot;email\&amp;quot;\n&amp;quot;);&lt;br /&gt;
 	BIO_printf(bio_err,&amp;quot; -checkip ipaddr - check peer certificate matches \&amp;quot;ipaddr\&amp;quot;\n&amp;quot;);&lt;br /&gt;
-- &lt;br /&gt;
1.8.3.2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
From 46983b73e04b448cb6cd9ea180044753174dec6d Mon Sep 17 00:00:00 2001&lt;br /&gt;
From: Jeff Trawick &amp;lt;trawick@gmail.com&amp;gt;&lt;br /&gt;
Date: Fri, 25 Apr 2014 20:25:19 -0400&lt;br /&gt;
Subject: [PATCH 2/2] spellcheck&lt;br /&gt;
&lt;br /&gt;
---&lt;br /&gt;
 PROBLEMS | 6 +++---&lt;br /&gt;
 1 file changed, 3 insertions(+), 3 deletions(-)&lt;br /&gt;
&lt;br /&gt;
diff --git a/PROBLEMS b/PROBLEMS&lt;br /&gt;
index 3eaab01..86f1e6e 100644&lt;br /&gt;
--- a/PROBLEMS&lt;br /&gt;
+++ b/PROBLEMS&lt;br /&gt;
@@ -41,13 +41,13 @@ passing -Wl,-search_paths_first, but it's unknown if the flag was&lt;br /&gt;
 supported from the initial MacOS X release.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
-* Parallell make leads to errors&lt;br /&gt;
+* Parallel make leads to errors&lt;br /&gt;
 &lt;br /&gt;
-While running tests, running a parallell make is a bad idea.  Many test&lt;br /&gt;
+While running tests, running a parallel make is a bad idea.  Many test&lt;br /&gt;
 scripts use the same name for output and input files, which means different&lt;br /&gt;
 will interfere with each other and lead to test failure.&lt;br /&gt;
 &lt;br /&gt;
-The solution is simple for now: don't run parallell make when testing.&lt;br /&gt;
+The solution is simple for now: don't run parallel make when testing.&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
 * Bugs in gcc triggered&lt;br /&gt;
-- &lt;br /&gt;
1.8.3.2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Plan B, if you can't get &amp;lt;tt&amp;gt;git format-patch&amp;lt;/tt&amp;gt; to work for some reason, is to create another, unmodified clone of the OpenSSL code, switch it to the branch you're working in, then use &amp;lt;tt&amp;gt;diff -ru&amp;lt;/tt&amp;gt; as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ diff -ru OpenSSL_1_0_2-stable-original OpenSSL_1_0_2-stable &amp;gt; /tmp/FixSClientUsage.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(These two directories were created with &amp;lt;tt&amp;gt;git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;git clone https://github.com/openssl/openssl.git OpenSSL_1_0_2-stable-original&amp;lt;/tt&amp;gt;, and each was switched to the desired branch with &amp;lt;tt&amp;gt;git checkout OpenSSL_1_0_2-stable&amp;lt;/tt&amp;gt;.)&lt;br /&gt;
&lt;br /&gt;
Double check that only the desired changes are in the patch file.  Otherwise, you probably weren't testing with the most recent OpenSSL changes.&lt;br /&gt;
&lt;br /&gt;
Open a ticket using the request tracker and attach your patch file.&lt;br /&gt;
If you create your ticket via email, send the patch as an attachment, not as the body of your message.&lt;br /&gt;
&lt;br /&gt;
=== Pull Requests ===&lt;br /&gt;
&lt;br /&gt;
You can also suggest changes by making pull requests on GitHub.  If you do this, please open a ticket and reference the PR number&lt;br /&gt;
so that we can more easily keep track of it.&lt;br /&gt;
&lt;br /&gt;
=== Making pull requests ===&lt;br /&gt;
&lt;br /&gt;
After developing and testing changes to OpenSSL in your checkout (clone), push them to your fork of OpenSSL (&amp;lt;tt&amp;gt;git push&amp;lt;/tt&amp;gt;), then use the Github interface to submit a pull request to the master OpenSSL repository for the particular revision(s).&lt;br /&gt;
&lt;br /&gt;
== Use of Git with the OpenSSL web site ==&lt;br /&gt;
&lt;br /&gt;
The OpenSSL web site is also maintained in git, and can be browsed at https://git.openssl.org/gitweb/?p=openssl-web.git;a=tree.&lt;br /&gt;
&lt;br /&gt;
Unlike the source code, the OpenSSL web site repository is not copied to Github.  You can only interact with it via git.openssl.org, so it is not possible to submit pull requests.&lt;br /&gt;
&lt;br /&gt;
Check it out as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ git clone git://git.openssl.org/openssl-web.git&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order to submit corrections to the web site, create a patch as described above.&lt;br /&gt;
&lt;br /&gt;
Only the master branch of the web site repository is used.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2244</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2244"/>
		<updated>2015-07-29T19:56:12Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Feedback and Contributions */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If this is your first visit or to get an account please see the [[Welcome]] page. Your participation and [[Contributions]] are valued.&lt;br /&gt;
&lt;br /&gt;
This wiki is intended as a place for collecting, organizing, and refining useful information about OpenSSL that is currently strewn among multiple locations and formats.&lt;br /&gt;
&lt;br /&gt;
== OpenSSL Quick Links ==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;TABLE border=0&amp;gt;&lt;br /&gt;
     &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[OpenSSL Overview]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Compilation and Installation]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Internals]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Mailing Lists]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libcrypto API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libssl API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Examples]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Documentation Index|Index of all API functions]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[License]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Command Line Utilities]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Related Links]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[SSL and TLS Protocols]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[1.1 API Changes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Administrivia ==&lt;br /&gt;
Site guidelines, legal and admininstrative issues.&lt;br /&gt;
:* [[Basic rules]], [[Commercial Product Disclaimer]], [[Contributions]], [[Copyright]], [[License]]&lt;br /&gt;
:* Using This Wiki&lt;br /&gt;
:: [http://meta.wikimedia.org/wiki/Help:Contents Wiki User's Guide], [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list], [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ], [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Mailing List]&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
This section contains the automagically generated man pages from the OpenSSL git repository, and similar &amp;quot;man&amp;quot; style reference documentation. The man pages are automatically imported from the OpenSSL git repository and local wiki modifications are submitted as patches.&lt;br /&gt;
:* OpenSSL Manual Pages&lt;br /&gt;
::* [[Manual:Openssl(1)]], [[Manual:Ssl(3)]], [[Manual:Crypto(3)]], [[Documentation Index]]&lt;br /&gt;
:: If you wish to edit any of the Manual page content please refer to the [[Guidelines for Manual Page Authors]] page.&lt;br /&gt;
:* [[API]], [[Libcrypto API]], [[Libssl API]]&lt;br /&gt;
:* [[FIPS mode()]], [[FIPS_mode_set()]]&lt;br /&gt;
&lt;br /&gt;
== Usage and Programming ==&lt;br /&gt;
This section has discussions of practical issues in using OpenSSL&lt;br /&gt;
:* Building from Source&lt;br /&gt;
:: Where to find it, the different versions, how to build and install it.&lt;br /&gt;
:* [[OpenSSL Overview]]&lt;br /&gt;
:* [[Versioning]]&lt;br /&gt;
:* [[Compilation and Installation]]&lt;br /&gt;
:* [[EVP]]&lt;br /&gt;
:: Programming techniques and example code&lt;br /&gt;
:: Use of EVP is preferred for most applications and circumstances&lt;br /&gt;
::* [[EVP Asymmetric Encryption and Decryption of an Envelope]]&lt;br /&gt;
::* [[EVP Authenticated Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Symmetric Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Key and Parameter Generation]]&lt;br /&gt;
::* [[EVP Key Agreement]]&lt;br /&gt;
::* [[EVP Message Digests]]&lt;br /&gt;
::* [[EVP Key Derivation]]&lt;br /&gt;
::* [[EVP Signing and Verifying|EVP Signing and Verifying (including MAC codes)]]&lt;br /&gt;
:* [[STACK API]]&lt;br /&gt;
:* Low Level APIs&lt;br /&gt;
:: More specialized non-EVP usage&lt;br /&gt;
::* [[Diffie-Hellman parameters]]&lt;br /&gt;
:* [[FIPS Mode]]&lt;br /&gt;
:* [[Simple TLS Server]]&lt;br /&gt;
&lt;br /&gt;
== Concepts and Theory ==&lt;br /&gt;
Discussions of basic cryptographic theory and concepts&lt;br /&gt;
Discussions of common operational issues&lt;br /&gt;
:* [[Base64]]&lt;br /&gt;
:* [http://wiki.openssl.org/index.php/Category:FIPS_140 FIPS 140-2]&lt;br /&gt;
:* [[Random Numbers]]&lt;br /&gt;
:* [[Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Cryptography]]&lt;br /&gt;
&lt;br /&gt;
== Security Advisories ==&lt;br /&gt;
:* [https://www.openssl.org/about/secpolicy.html OpenSSL Security Policy]&lt;br /&gt;
:* [https://www.openssl.org/news/vulnerabilities.html OpenSSL Vulnerabilities List]&lt;br /&gt;
:* [[Security_Advisories|Security Advisories Additional Information]]&lt;br /&gt;
&lt;br /&gt;
== Feedback and Contributions ==&lt;br /&gt;
:* [https://www.openssl.org/support/faq.html#BUILD18 How to notify us of suspected security vulnerabilities]&lt;br /&gt;
:* [https://www.openssl.org/support/rt.html How to report bugs and patches, other than for suspected vulnerabilities]&lt;br /&gt;
:* [[Contributions|General background on source and documentation contributions - '''must read''']]&lt;br /&gt;
:* Contributing code fixes, other than for suspected vulnerabilities, as well as fixes and other improvements to manual pages:&lt;br /&gt;
::* If you are unsure as to whether a feature will be useful for the general OpenSSL community please discuss it on the [https://www.openssl.org/support/community.html openssl-dev mailing list] first.  Someone may be already working on the same thing or there may be a good reason as to why that feature isn't implemented.&lt;br /&gt;
::* Follow the [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|instructions for accessing source code]] in the appropriate branches. Note that manual pages and the FAQ are maintained with the source code.&lt;br /&gt;
::* Submit a pull request for each separate fix (also documented [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|there]])&lt;br /&gt;
::* Submit a bug report (see second bullet, above) and reference the pull request. Or you can attach the patch to the ticket.&lt;br /&gt;
:* Contributing fixes and other improvements to the web site&lt;br /&gt;
::* Follow the [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|instructions for accessing web site sources]]&lt;br /&gt;
::* Create a patch (also documented [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|there]])&lt;br /&gt;
::* Submit a bug report and add the patch as an attachment&lt;br /&gt;
:* [[Developing For OpenSSL]]&lt;br /&gt;
:* [[KnownPatches|Known patches not part of OpenSSL]]&lt;br /&gt;
:* [[Welcome|Contributing to this wiki]]&lt;br /&gt;
&lt;br /&gt;
== Internals and Development ==&lt;br /&gt;
This section is for internal details of primary interest to OpenSSL maintainers and power users&lt;br /&gt;
:* [[Code reformatting]]&lt;br /&gt;
&lt;br /&gt;
:* [[Internals]]&lt;br /&gt;
:* [[Code Quality]]&lt;br /&gt;
:* [[Static and Dynamic Analysis]]&lt;br /&gt;
:* [[OCB|OCB Licence details]]&lt;br /&gt;
:* [[Defect and Feature Review Process]]&lt;br /&gt;
:* [[Unit Testing]] (includes other automated testing information)&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Code_reformatting&amp;diff=2187</id>
		<title>Code reformatting</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Code_reformatting&amp;diff=2187"/>
		<updated>2015-03-18T15:30:22Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: Created page with &amp;quot; == Code Reformatting ==  We recently (early 2015) reformatted all the OpenSSL code, in all release branches.  As a result the code is consistent and, to almost everyone, easi...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Code Reformatting ==&lt;br /&gt;
&lt;br /&gt;
We recently (early 2015) reformatted all the OpenSSL code, in all release branches.&lt;br /&gt;
&lt;br /&gt;
As a result the code is consistent and, to almost everyone, easier to read.&lt;br /&gt;
&lt;br /&gt;
The style policy is at [[https://openssl.org/about/codingstyle.txt]]&lt;br /&gt;
&lt;br /&gt;
Matt wrote a couple of blog entries about the reformatting: [[https://www.openssl.org/blog/blog/2015/01/05/source-code-reformat/]] and [[https://www.openssl.org/blog/blog/2015/02/11/code-reformat-finished/]].&lt;br /&gt;
&lt;br /&gt;
If you have a smaller number of local patches, you might find this recipe useful to upgrade:&lt;br /&gt;
&lt;br /&gt;
* Take the original release you are currently using.  Reformat it according to the second blog entry.  Don't worry too much about minor failures or inconsistencies.  Save that.&lt;br /&gt;
&lt;br /&gt;
* Take your patched release.  Reformat it according to the second blog entry.  Don't worry too much about minor failures or inconsistencies.  Save that.&lt;br /&gt;
&lt;br /&gt;
* Run a diff between the two releases.  You should, for the most part, have just your patches, reformatted.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2186</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2186"/>
		<updated>2015-03-18T15:25:12Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* Internals and Development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If this is your first visit or to get an account please see the [[Welcome]] page. Your participation and [[Contributions]] are valued.&lt;br /&gt;
&lt;br /&gt;
This wiki is intended as a place for collecting, organizing, and refining useful information about OpenSSL that is currently strewn among multiple locations and formats.&lt;br /&gt;
&lt;br /&gt;
== OpenSSL Quick Links ==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;TABLE border=0&amp;gt;&lt;br /&gt;
     &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[OpenSSL Overview]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Compilation and Installation]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Internals]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Mailing Lists]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libcrypto API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libssl API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Examples]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Documentation Index|Index of all API functions]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[License]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Command Line Utilities]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Related Links]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[SSL and TLS Protocols]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[1.1 API Changes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Administrivia ==&lt;br /&gt;
Site guidelines, legal and admininstrative issues.&lt;br /&gt;
:* [[Basic rules]], [[Commercial Product Disclaimer]], [[Contributions]], [[Copyright]], [[License]]&lt;br /&gt;
:* Using This Wiki&lt;br /&gt;
:: [http://meta.wikimedia.org/wiki/Help:Contents Wiki User's Guide], [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list], [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ], [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Mailing List]&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
This section contains the automagically generated man pages from the OpenSSL git repository, and similar &amp;quot;man&amp;quot; style reference documentation. The man pages are automatically imported from the OpenSSL git repository and local wiki modifications are submitted as patches.&lt;br /&gt;
:* OpenSSL Manual Pages&lt;br /&gt;
::* [[Manual:Openssl(1)]], [[Manual:Ssl(3)]], [[Manual:Crypto(3)]], [[Documentation Index]]&lt;br /&gt;
:: If you wish to edit any of the Manual page content please refer to the [[Guidelines for Manual Page Authors]] page.&lt;br /&gt;
:* [[API]], [[Libcrypto API]], [[Libssl API]]&lt;br /&gt;
:* [[FIPS mode()]], [[FIPS_mode_set()]]&lt;br /&gt;
&lt;br /&gt;
== Usage and Programming ==&lt;br /&gt;
This section has discussions of practical issues in using OpenSSL&lt;br /&gt;
:* Building from Source&lt;br /&gt;
:: Where to find it, the different versions, how to build and install it.&lt;br /&gt;
:* [[OpenSSL Overview]]&lt;br /&gt;
:* [[Versioning]]&lt;br /&gt;
:* [[Compilation and Installation]]&lt;br /&gt;
:* [[EVP]]&lt;br /&gt;
:: Programming techniques and example code&lt;br /&gt;
:: Use of EVP is preferred for most applications and circumstances&lt;br /&gt;
::* [[EVP Asymmetric Encryption and Decryption of an Envelope]]&lt;br /&gt;
::* [[EVP Authenticated Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Symmetric Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Key and Parameter Generation]]&lt;br /&gt;
::* [[EVP Key Agreement]]&lt;br /&gt;
::* [[EVP Message Digests]]&lt;br /&gt;
::* [[EVP Key Derivation]]&lt;br /&gt;
::* [[EVP Signing and Verifying|EVP Signing and Verifying (including MAC codes)]]&lt;br /&gt;
:* [[STACK API]]&lt;br /&gt;
:* Low Level APIs&lt;br /&gt;
:: More specialized non-EVP usage&lt;br /&gt;
::* [[Diffie-Hellman parameters]]&lt;br /&gt;
:* [[FIPS Mode]]&lt;br /&gt;
&lt;br /&gt;
== Concepts and Theory ==&lt;br /&gt;
Discussions of basic cryptographic theory and concepts&lt;br /&gt;
Discussions of common operational issues&lt;br /&gt;
:* [[Base64]]&lt;br /&gt;
:* [http://wiki.openssl.org/index.php/Category:FIPS_140 FIPS 140-2]&lt;br /&gt;
:* [[Random Numbers]]&lt;br /&gt;
:* [[Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Cryptography]]&lt;br /&gt;
&lt;br /&gt;
== Security Advisories ==&lt;br /&gt;
:* [https://www.openssl.org/about/secpolicy.html OpenSSL Security Policy]&lt;br /&gt;
:* [https://www.openssl.org/news/vulnerabilities.html OpenSSL Vulnerabilities List]&lt;br /&gt;
:* [[Security_Advisories|Security Advisories Additional Information]]&lt;br /&gt;
&lt;br /&gt;
== Feedback and Contributions ==&lt;br /&gt;
:* [https://www.openssl.org/support/faq.html#BUILD18 Notification of suspected security vulnerabilities]&lt;br /&gt;
:* [https://www.openssl.org/support/rt.html Contributing bug reports, other than for suspected vulnerabilities]&lt;br /&gt;
:* [[Contributions|General background on source and documentation contributions - '''must read''']]&lt;br /&gt;
:* Contributing code fixes, other than for suspected vulnerabilities, as well as fixes and other improvements to manual pages&lt;br /&gt;
::* Follow the [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|instructions for accessing source code]] in the appropriate branches&lt;br /&gt;
:::* Note that manual pages and the FAQ are maintained with the source code.&lt;br /&gt;
::* If you are unsure as to whether a feature will be useful for the general OpenSSL community please discuss it on the [https://www.openssl.org/support/community.html openssl-dev mailing list] first.  Someone may be already working on the same thing or there may be a good reason as to why that feature isn't implemented.&lt;br /&gt;
::* Submit a pull request for each separate fix (also documented [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|there]])&lt;br /&gt;
::* Submit a bug report for the issue and reference the pull request&lt;br /&gt;
:* Contributing fixes and other improvements to the web site&lt;br /&gt;
::* Follow the [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|instructions for accessing web site sources]]&lt;br /&gt;
::* Create a patch (also documented [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|there]])&lt;br /&gt;
::* Submit a bug report and add the patch as an attachment&lt;br /&gt;
:* [[KnownPatches|Known patches not part of OpenSSL]]&lt;br /&gt;
:* [[Welcome|Contributing to this wiki]]&lt;br /&gt;
&lt;br /&gt;
== Internals and Development ==&lt;br /&gt;
This section is for internal details of primary interest to OpenSSL maintainers and power users&lt;br /&gt;
:* [[Code reformatting]]&lt;br /&gt;
:* [[Developing For OpenSSL]]&lt;br /&gt;
:* [[Internals]]&lt;br /&gt;
:* [[Code Quality]]&lt;br /&gt;
:* [[Static and Dynamic Analysis]]&lt;br /&gt;
:* [[OCB|OCB Licence details]]&lt;br /&gt;
:* [[Defect and Feature Review Process]]&lt;br /&gt;
:* [[Unit Testing]] (includes other automated testing information)&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=OpenSSL_1.1.0_Changes&amp;diff=2154</id>
		<title>OpenSSL 1.1.0 Changes</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=OpenSSL_1.1.0_Changes&amp;diff=2154"/>
		<updated>2015-02-03T21:58:10Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: Creation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a parent page for discussion about API changes being done for OpenSSL version 1.1&lt;br /&gt;
&lt;br /&gt;
The overall goal of this project is to make most data structures opaque to applications.  This provides us with a number of benefits:&lt;br /&gt;
* We can add fields without breaking binary compatibility&lt;br /&gt;
* Applications are more robust and can be more assured about correctness&lt;br /&gt;
* It helps us determine which (new) accessors and settors, for example, are needed&lt;br /&gt;
&lt;br /&gt;
Please add sub-pages to discuss particular parts of the library has work progresses.&lt;br /&gt;
&lt;br /&gt;
So far, the SSL library has mostly been made opaque. The old DES API has been removed.&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
	<entry>
		<id>https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2153</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="https://wiki.openssl.org/index.php?title=Main_Page&amp;diff=2153"/>
		<updated>2015-02-03T21:52:28Z</updated>

		<summary type="html">&lt;p&gt;Rsalz: /* OpenSSL Quick Links */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If this is your first visit or to get an account please see the [[Welcome]] page. Your participation and [[Contributions]] are valued.&lt;br /&gt;
&lt;br /&gt;
This wiki is intended as a place for collecting, organizing, and refining useful information about OpenSSL that is currently strewn among multiple locations and formats.&lt;br /&gt;
&lt;br /&gt;
== OpenSSL Quick Links ==&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;TABLE border=0&amp;gt;&lt;br /&gt;
     &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[OpenSSL Overview]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Compilation and Installation]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Internals]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Mailing Lists]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libcrypto API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[libssl API]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Examples]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Documentation Index|Index of all API functions]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[License]] &amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Command Line Utilities]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Related Links]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[SSL and TLS Protocols]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
      &amp;lt;TR&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[1.1 API Changes]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
        &amp;lt;TD&amp;gt;[[Image:HTAB.png]][[Image:HTAB.png]]&amp;lt;/TD&amp;gt;&lt;br /&gt;
      &amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/TABLE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Administrivia ==&lt;br /&gt;
Site guidelines, legal and admininstrative issues.&lt;br /&gt;
:* [[Basic rules]], [[Commercial Product Disclaimer]], [[Contributions]], [[Copyright]], [[License]]&lt;br /&gt;
:* Using This Wiki&lt;br /&gt;
:: [http://meta.wikimedia.org/wiki/Help:Contents Wiki User's Guide], [http://www.mediawiki.org/wiki/Manual:Configuration_settings Configuration settings list], [http://www.mediawiki.org/wiki/Manual:FAQ MediaWiki FAQ], [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce MediaWiki Mailing List]&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
This section contains the automagically generated man pages from the OpenSSL git repository, and similar &amp;quot;man&amp;quot; style reference documentation. The man pages are automatically imported from the OpenSSL git repository and local wiki modifications are submitted as patches.&lt;br /&gt;
:* OpenSSL Manual Pages&lt;br /&gt;
::* [[Manual:Openssl(1)]], [[Manual:Ssl(3)]], [[Manual:Crypto(3)]], [[Documentation Index]]&lt;br /&gt;
:: If you wish to edit any of the Manual page content please refer to the [[Guidelines for Manual Page Authors]] page.&lt;br /&gt;
:* [[API]], [[Libcrypto API]], [[Libssl API]]&lt;br /&gt;
:* [[FIPS mode()]], [[FIPS_mode_set()]]&lt;br /&gt;
&lt;br /&gt;
== Usage and Programming ==&lt;br /&gt;
This section has discussions of practical issues in using OpenSSL&lt;br /&gt;
:* Building from Source&lt;br /&gt;
:: Where to find it, the different versions, how to build and install it.&lt;br /&gt;
:* [[OpenSSL Overview]]&lt;br /&gt;
:* [[Versioning]]&lt;br /&gt;
:* [[Compilation and Installation]]&lt;br /&gt;
:* [[EVP]]&lt;br /&gt;
:: Programming techniques and example code&lt;br /&gt;
:: Use of EVP is preferred for most applications and circumstances&lt;br /&gt;
::* [[EVP Asymmetric Encryption and Decryption of an Envelope]]&lt;br /&gt;
::* [[EVP Authenticated Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Symmetric Encryption and Decryption]]&lt;br /&gt;
::* [[EVP Key and Parameter Generation]]&lt;br /&gt;
::* [[EVP Key Agreement]]&lt;br /&gt;
::* [[EVP Message Digests]]&lt;br /&gt;
::* [[EVP Key Derivation]]&lt;br /&gt;
::* [[EVP Signing and Verifying|EVP Signing and Verifying (including MAC codes)]]&lt;br /&gt;
:* [[STACK API]]&lt;br /&gt;
:* Low Level APIs&lt;br /&gt;
:: More specialized non-EVP usage&lt;br /&gt;
::* [[Diffie-Hellman parameters]]&lt;br /&gt;
:* [[FIPS Mode]]&lt;br /&gt;
&lt;br /&gt;
== Concepts and Theory ==&lt;br /&gt;
Discussions of basic cryptographic theory and concepts&lt;br /&gt;
Discussions of common operational issues&lt;br /&gt;
:* [[Base64]]&lt;br /&gt;
:* [http://wiki.openssl.org/index.php/Category:FIPS_140 FIPS 140-2]&lt;br /&gt;
:* [[Random Numbers]]&lt;br /&gt;
:* [[Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Diffie Hellman]]&lt;br /&gt;
:* [[Elliptic Curve Cryptography]]&lt;br /&gt;
&lt;br /&gt;
== Security Advisories ==&lt;br /&gt;
:* [https://www.openssl.org/about/secpolicy.html OpenSSL Security Policy]&lt;br /&gt;
:* [https://www.openssl.org/news/vulnerabilities.html OpenSSL Vulnerabilities List]&lt;br /&gt;
:* [[Security_Advisories|Security Advisories Additional Information]]&lt;br /&gt;
&lt;br /&gt;
== Feedback and Contributions ==&lt;br /&gt;
:* [https://www.openssl.org/support/faq.html#BUILD18 Notification of suspected security vulnerabilities]&lt;br /&gt;
:* [https://www.openssl.org/support/rt.html Contributing bug reports, other than for suspected vulnerabilities]&lt;br /&gt;
:* [[Contributions|General background on source and documentation contributions - '''must read''']]&lt;br /&gt;
:* Contributing code fixes, other than for suspected vulnerabilities, as well as fixes and other improvements to manual pages&lt;br /&gt;
::* Follow the [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|instructions for accessing source code]] in the appropriate branches&lt;br /&gt;
:::* Note that manual pages and the FAQ are maintained with the source code.&lt;br /&gt;
::* If you are unsure as to whether a feature will be useful for the general OpenSSL community please discuss it on the [https://www.openssl.org/support/community.html openssl-dev mailing list] first.  Someone may be already working on the same thing or there may be a good reason as to why that feature isn't implemented.&lt;br /&gt;
::* Submit a pull request for each separate fix (also documented [[Use of Git#Use_of_Git_with_OpenSSL_source_tree|there]])&lt;br /&gt;
::* Submit a bug report for the issue and reference the pull request&lt;br /&gt;
:* Contributing fixes and other improvements to the web site&lt;br /&gt;
::* Follow the [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|instructions for accessing web site sources]]&lt;br /&gt;
::* Create a patch (also documented [[Use_of_Git#Use_of_Git_with_the_OpenSSL_web_site|there]])&lt;br /&gt;
::* Submit a bug report and add the patch as an attachment&lt;br /&gt;
:* [[KnownPatches|Known patches not part of OpenSSL]]&lt;br /&gt;
:* [[Welcome|Contributing to this wiki]]&lt;br /&gt;
&lt;br /&gt;
== Internals and Development ==&lt;br /&gt;
This section is for internal details of primary interest to OpenSSL maintainers and power users&lt;br /&gt;
:* [[Developing For OpenSSL]]&lt;br /&gt;
:* [[Internals]]&lt;br /&gt;
:* [[Code Quality]]&lt;br /&gt;
:* [[Static and Dynamic Analysis]]&lt;br /&gt;
:* [[OCB|OCB Licence details]]&lt;br /&gt;
:* [[Defect and Feature Review Process]]&lt;br /&gt;
:* [[Unit Testing]] (includes other automated testing information)&lt;/div&gt;</summary>
		<author><name>Rsalz</name></author>
	</entry>
</feed>