Standards related to OpenSSL
============================

This is a work in progress.  These are documents that describe things that
are implemented (in whole or at least great parts) in OpenSSL.

To search for RFCs, you can start at https://www.ietf.org/rfc.html

To search for internet-drafts, you can start at https://www.ietf.org/id-info/

Many PKCS standards are now RFC's; PKCS#11 is now at Oasis and can be
found at https://www.oasis-open.org/committees/tc_home.php?wg_abbrev=pkcs11


Implemented
-----------

PKCS#8: Private-Key Information Syntax Standard

PKCS#12: Personal Information Exchange Syntax Standard, version 1.0.

1319 The MD2 Message-Digest Algorithm

1320 The MD4 Message-Digest Algorithm

1321 The MD5 Message-Digest Algorithm

2246 The TLS Protocol Version 1

2268 A Description of the RC2(r) Encryption Algorithm

2315 PKCS 7: Cryptographic Message Syntax Version 1.5

2560 X.509 Internet Public Key Infrastructure Online Certificate
     Status Protocol - OCSP

2898 PKCS #5: Password-Based Cryptography Specification Version 2.0

2986 PKCS #10: Certification Request Syntax Specification Version 1.7

3161 Internet X.509 Public Key Infrastructure, Time-Stamp Protocol (TSP)

3174 US Secure Hash Algorithm 1 (SHA1)

3268 Advanced Encryption Standard (AES) Ciphersuites for Transport
     Layer Security (TLS)

3279 Algorithms and Identifiers for the Internet X.509 Public Key
     Infrastructure Certificate and Certificate Revocation List (CRL)
     Profile

3280 Internet X.509 Public Key Infrastructure Certificate and
     Certificate Revocation List (CRL) Profile

3447 Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography
     Specifications Version 2.1

3713 A Description of the Camellia Encryption Algorithm

3820 Internet X.509 Public Key Infrastructure (PKI) Proxy Certificate
     Profile

4132 Addition of Camellia Cipher Suites to Transport Layer Security
     (TLS)

4162 Addition of SEED Cipher Suites to Transport Layer Security (TLS)

4269 The SEED Encryption Algorithm


Related
-------

These are documents that are close to OpenSSL, for example the
STARTTLS documents.

1421 Privacy Enhancement for Internet Electronic Mail: Part I: Message
     Encryption and Authentication Procedures

1422 Privacy Enhancement for Internet Electronic Mail: Part II:
     Certificate-Based Key Management

1423 Privacy Enhancement for Internet Electronic Mail: Part III:
     Algorithms, Modes, and Identifiers

1424 Privacy Enhancement for Internet Electronic Mail: Part IV: Key
     Certification and Related Services

2025 The Simple Public-Key GSS-API Mechanism (SPKM)

2510 Internet X.509 Public Key Infrastructure Certificate Management
     Protocols

2511 Internet X.509 Certificate Request Message Format

2527 Internet X.509 Public Key Infrastructure Certificate Policy and
     Certification Practices Framework

2538 Storing Certificates in the Domain Name System (DNS)

2539 Storage of Diffie-Hellman Keys in the Domain Name System (DNS)

2559 Internet X.509 Public Key Infrastructure Operational Protocols -
     LDAPv2

2585 Internet X.509 Public Key Infrastructure Operational Protocols:
     FTP and HTTP

2587 Internet X.509 Public Key Infrastructure LDAPv2 Schema

2595 Using TLS with IMAP, POP3 and ACAP

2631 Diffie-Hellman Key Agreement Method

2632 S/MIME Version 3 Certificate Handling

2716 PPP EAP TLS Authentication Protocol

2797 Certificate Management Messages over CMS

2817 Upgrading to TLS Within HTTP/1.1

2818 HTTP Over TLS

2984 Use of the CAST-128 Encryption Algorithm in CMS

2985 PKCS #9: Selected Object Classes and Attribute Types Version 2.0

3029 Internet X.509 Public Key Infrastructure Data Validation and
     Certification Server Protocols

3039 Internet X.509 Public Key Infrastructure Qualified Certificates
     Profile

3058 Use of the IDEA Encryption Algorithm in CMS

3161 Internet X.509 Public Key Infrastructure Time-Stamp Protocol
     (TSP)

3185 Reuse of CMS Content Encryption Keys

3207 SMTP Service Extension for Secure SMTP over Transport Layer
     Security

3217 Triple-DES and RC2 Key Wrapping

3274 Compressed Data Content Type for Cryptographic Message Syntax
     (CMS)

3278 Use of Elliptic Curve Cryptography (ECC) Algorithms in
     Cryptographic Message Syntax (CMS)

3281 An Internet Attribute Certificate Profile for Authorization

3369 Cryptographic Message Syntax (CMS)

3370 Cryptographic Message Syntax (CMS) Algorithms

3394 Advanced Encryption Standard (AES) Key Wrap Algorithm

3436 Transport Layer Security over Stream Control Transmission
     Protocol

3657 Use of the Camellia Encryption Algorithm in Cryptographic 
     Message Syntax (CMS)
