8.1. When to Use Public Key Cryptography8.2. Diffie-Hellman8.2.1. The Basics8.2.2. Generating and Exchanging Parameters8.2.3. Computing Shared Secrets8.2.4. Practical Applications8.3. Digital Signature Algorithm (DSA)8.3.1. The Basics8.3.2. Generating Parameters and Keys8.3.3. Signing and Verifying 8.3.4. Practical Applications8.4. RSA8.4.1. The Basics8.4.2. Generating Keys8.4.3. Data Encryption, Key Agreement, and Key Transport8.4.4. Signing and Verifying8.4.5. Practical Applications8.5. The EVP Public Key Interface8.5.1. Signing and Verifying8.5.2. Encrypting and Decrypting8.6. Encoding and Decoding Objects8.6.1. Writing and Reading DER-Encoded Objects8.6.2. Writing and Reading PEM-Encoded Objects