title: What is the ENGINE in OpenSSL and what is it used for?
body: <p>I cannot find a good explanation of what the <code>ENGINE</code> in OpenSSL is. It is used in functions like <code>EVP_PKEY_CTX_new</code>.</p>
  
  <p>I am using <code>EVP_PKEY_CTX_new</code> just before I encrypt/decrypt something using <code>EVP_PKEY_encrypt</code> and <code>EVP_PKEY_decrypt</code> but do I really need to specify the <code>ENGINE</code> parameter when calling <code>EVP_PKEY_CTX_new</code>. Everywhere I look inside the OpenSSL the parameter is specified as null.</p>
  
  <p>So my question is:
  What is the <code>ENGINE</code> in OpenSSL and what is it used for and what difference does it make when it is not specified?</p>