Danger

This is a “Hazardous Materials” module. You should ONLY use it if you’re 100% absolutely sure that you know what you’re doing because this module is full of land mines, dragons, and dinosaurs with laser guns.

# Asymmetric algorithms

Asymmetric cryptography is a branch of cryptography where a secret key can be divided into two parts, a public key and a private key. The public key can be given to anyone, trusted or not, while the private key must be kept secret (just like the key in symmetric cryptography).

Asymmetric cryptography has two primary use cases: authentication and confidentiality. Using asymmetric cryptography, messages can be signed with a private key, and then anyone with the public key is able to verify that the message was created by someone possessing the corresponding private key. This can be combined with a proof of identity system to know what entity (person or group) actually owns that private key, providing authentication.

Encryption with asymmetric cryptography works in a slightly different way from symmetric encryption. Someone with the public key is able to encrypt a message, providing confidentiality, and then only the person in possession of the private key is able to decrypt it.

- Ed25519 signing
- X25519 key exchange
- Ed448 signing
- X448 key exchange
- Elliptic curve cryptography
- RSA
- Diffie-Hellman key exchange
- DSA
- Key Serialization
- Asymmetric Utilities

## Common types

Asymmetric key types do not inherit from a common base class. The following union type aliases can be used instead to reference a multitude of key types.

cryptography.hazmat.primitives.asymmetric.types.PublicKeyTypes

  New in version 40.0.0.

  Type alias: A union of all public key types supported: `DHPublicKey`, `RSAPublicKey`, `DSAPublicKey`, `EllipticCurvePublicKey`, `Ed25519PublicKey`, `Ed448PublicKey`, `X25519PublicKey`, `X448PublicKey`.

cryptography.hazmat.primitives.asymmetric.types.PrivateKeyTypes

  New in version 40.0.0.

  Type alias: A union of all private key types supported: `DHPrivateKey`, `RSAPrivateKey`, `DSAPrivateKey`, `EllipticCurvePrivateKey`, `Ed25519PrivateKey`, `Ed448PrivateKey`, `X25519PrivateKey`, `X448PrivateKey`.

cryptography.hazmat.primitives.asymmetric.types.CertificatePublicKeyTypes

  New in version 40.0.0.

  Type alias: A union of all public key types supported for X.509 certificates: `RSAPublicKey`, `DSAPublicKey`, `EllipticCurvePublicKey`, `Ed25519PublicKey`, `Ed448PublicKey`, `X25519PublicKey`, `X448PublicKey`.

cryptography.hazmat.primitives.asymmetric.types.CertificateIssuerPublicKeyTypes

  New in version 40.0.0.

  Type alias: A union of all public key types that can sign other X.509 certificates as an issuer. x448/x25519 can be a public key, but cannot be used in signing, so they are not allowed in these contexts.

  Allowed: `RSAPublicKey`, `DSAPublicKey`, `EllipticCurvePublicKey`, `Ed25519PublicKey`, `Ed448PublicKey`.

cryptography.hazmat.primitives.asymmetric.types.CertificateIssuerPrivateKeyTypes

  New in version 40.0.0.

  Type alias: A union of all private key types that can sign other X.509 certificates as an issuer. x448/x25519 can be a public key, but cannot be used in signing, so they are not allowed in these contexts.

  Allowed: `RSAPrivateKey`, `DSAPrivateKey`, `EllipticCurvePrivateKey`, `Ed25519PrivateKey`, `Ed448PrivateKey`.