# rustcrypto/rsa architecture

> Architecture diagram of the GitHub repository rustcrypto/rsa, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-29). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/rustcrypto/rsa
- Repository: https://github.com/rustcrypto/rsa

## Overview

This is RustCrypto RSA, a pure-Rust RSA cryptography library. Its main workflow creates or imports a key pair, then uses public-key encryption/private-key decryption or signing/verification APIs. The graph distinguishes OAEP and PKCS#1 v1.5 encryption from PKCS#1 v1.5 and PSS signatures, with key management and the shared RSA primitive as internal layers. README and the tree support the product capabilities; some subsystem wiring is inferred only where documented, so uncertain calls are omitted.

Main entry points: [`src/algorithms/rsa.rs`](https://github.com/rustcrypto/rsa/blob/master/src/algorithms/rsa.rs) (RSA operations), [`src/key.rs`](https://github.com/rustcrypto/rsa/blob/master/src/key.rs) (Key management), [`src/oaep/encrypting_key.rs`](https://github.com/rustcrypto/rsa/blob/master/src/oaep/encrypting_key.rs) (OAEP encrypt), [`src/oaep/decrypting_key.rs`](https://github.com/rustcrypto/rsa/blob/master/src/oaep/decrypting_key.rs) (OAEP decrypt)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_keys["RSA keys"]
  node_keyapi["Key management<br/>[key.rs]"]
  node_keygen["Prime and key generation<br/>[generate.rs]"]
  node_keytraits["Key component traits<br/>[keys.rs]"]
end

subgraph group_encryption["Encryption"]
  node_encapi["Encryption APIs<br/>[encryption.rs]"]
  node_oaepenc["OAEP encrypt<br/>[encrypting_key.rs]"]
  node_oaepdec["OAEP decrypt<br/>[decrypting_key.rs]"]
  node_oaepalg["OAEP encoding<br/>[oaep.rs]"]
  node_v15enc["PKCS1v15 encrypt<br/>[encrypting_key.rs]"]
  node_v15dec["PKCS1v15 decrypt<br/>[decrypting_key.rs]"]
  node_paddings["Padding algorithms<br/>[pad.rs]"]
end

subgraph group_signatures["Signatures"]
  node_v15sign["PKCS1v15 signing<br/>[signing_key.rs]"]
  node_v15verify["PKCS1v15 verification<br/>[verifying_key.rs]"]
  node_psssign["PSS signing<br/>[signing_key.rs]"]
  node_pssblind["Blinded PSS signing"]
  node_pssverify["PSS verification<br/>[verifying_key.rs]"]
  node_pssalg["PSS encoding<br/>[pss.rs]"]
end

subgraph group_core["Core and encoding"]
  node_rsa["RSA operations<br/>[rsa.rs]"]
  node_encoding["Key encoding<br/>[encoding.rs]"]
  node_api["Crate API<br/>[lib.rs]"]
end

node_caller(("Library caller"))
node_rng(("Random generator"))

node_caller -->|"uses"| node_api
node_api -->|"exposes"| node_keyapi
node_caller -->|"creates keys"| node_keyapi
node_keyapi -->|"generates"| node_keygen
node_rng -->|"provides randomness"| node_keygen
node_keyapi -->|"implements"| node_keytraits
node_caller -->|"encrypts with"| node_oaepenc
node_caller -->|"decrypts with"| node_oaepdec
node_caller -->|"encrypts with"| node_v15enc
node_caller -->|"decrypts with"| node_v15dec
node_oaepenc -->|"encodes"| node_oaepalg
node_oaepdec -->|"decodes"| node_oaepalg
node_v15enc -->|"pads"| node_paddings
node_v15dec -->|"unpads"| node_paddings
node_oaepenc -->|"uses public operation"| node_rsa
node_oaepdec -->|"uses private operation"| node_rsa
node_v15enc -->|"uses public operation"| node_rsa
node_v15dec -->|"uses private operation"| node_rsa
node_caller -->|"signs with"| node_v15sign
node_caller -->|"verifies with"| node_v15verify
node_caller -->|"signs with"| node_psssign
node_caller -->|"signs with"| node_pssblind
node_caller -->|"verifies with"| node_pssverify
node_v15sign -->|"signs via"| node_rsa
node_v15verify -->|"verifies via"| node_rsa
node_psssign -->|"encodes"| node_pssalg
node_pssblind -->|"encodes"| node_pssalg
node_pssverify -->|"checks encoding"| node_pssalg
node_psssign -->|"signs via"| node_rsa
node_pssblind -->|"signs via"| node_rsa
node_pssverify -->|"verifies via"| node_rsa
node_caller -->|"imports or exports keys"| node_encoding
node_encoding -->|"converts keys"| node_keyapi

click node_keyapi "https://github.com/rustcrypto/rsa/blob/master/src/key.rs"
click node_keygen "https://github.com/rustcrypto/rsa/blob/master/src/algorithms/generate.rs"
click node_keytraits "https://github.com/rustcrypto/rsa/blob/master/src/traits/keys.rs"
click node_encapi "https://github.com/rustcrypto/rsa/blob/master/src/traits/encryption.rs"
click node_oaepenc "https://github.com/rustcrypto/rsa/blob/master/src/oaep/encrypting_key.rs"
click node_oaepdec "https://github.com/rustcrypto/rsa/blob/master/src/oaep/decrypting_key.rs"
click node_oaepalg "https://github.com/rustcrypto/rsa/blob/master/src/algorithms/oaep.rs"
click node_v15enc "https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/encrypting_key.rs"
click node_v15dec "https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/decrypting_key.rs"
click node_paddings "https://github.com/rustcrypto/rsa/blob/master/src/algorithms/pad.rs"
click node_v15sign "https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/signing_key.rs"
click node_v15verify "https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/verifying_key.rs"
click node_psssign "https://github.com/rustcrypto/rsa/blob/master/src/pss/signing_key.rs"
click node_pssblind "https://github.com/rustcrypto/rsa/blob/master/src/pss/blinded_signing_key.rs"
click node_pssverify "https://github.com/rustcrypto/rsa/blob/master/src/pss/verifying_key.rs"
click node_pssalg "https://github.com/rustcrypto/rsa/blob/master/src/algorithms/pss.rs"
click node_rsa "https://github.com/rustcrypto/rsa/blob/master/src/algorithms/rsa.rs"
click node_encoding "https://github.com/rustcrypto/rsa/blob/master/src/encoding.rs"
click node_api "https://github.com/rustcrypto/rsa/blob/master/src/lib.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_keyapi,node_keygen,node_keytraits toneBlue
class node_encapi,node_oaepenc,node_oaepdec,node_oaepalg,node_v15enc,node_v15dec,node_paddings toneAmber
class node_v15sign,node_v15verify,node_psssign,node_pssblind,node_pssverify,node_pssalg toneMint
class node_rsa,node_encoding,node_api toneRose
class node_caller,node_rng toneIndigo
```

## Components

### RSA keys

- [Key management](https://github.com/rustcrypto/rsa/blob/master/src/key.rs): `src/key.rs`
- [Prime and key generation](https://github.com/rustcrypto/rsa/blob/master/src/algorithms/generate.rs): `src/algorithms/generate.rs`
- [Key component traits](https://github.com/rustcrypto/rsa/blob/master/src/traits/keys.rs): `src/traits/keys.rs`

### Encryption

- [Encryption APIs](https://github.com/rustcrypto/rsa/blob/master/src/traits/encryption.rs): `src/traits/encryption.rs`
- [OAEP encrypt](https://github.com/rustcrypto/rsa/blob/master/src/oaep/encrypting_key.rs): `src/oaep/encrypting_key.rs`
- [OAEP decrypt](https://github.com/rustcrypto/rsa/blob/master/src/oaep/decrypting_key.rs): `src/oaep/decrypting_key.rs`
- [OAEP encoding](https://github.com/rustcrypto/rsa/blob/master/src/algorithms/oaep.rs): `src/algorithms/oaep.rs`
- [PKCS1v15 encrypt](https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/encrypting_key.rs): `src/pkcs1v15/encrypting_key.rs`
- [PKCS1v15 decrypt](https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/decrypting_key.rs): `src/pkcs1v15/decrypting_key.rs`
- [Padding algorithms](https://github.com/rustcrypto/rsa/blob/master/src/algorithms/pad.rs): `src/algorithms/pad.rs`

### Signatures

- [PKCS1v15 signing](https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/signing_key.rs): `src/pkcs1v15/signing_key.rs`
- [PKCS1v15 verification](https://github.com/rustcrypto/rsa/blob/master/src/pkcs1v15/verifying_key.rs): `src/pkcs1v15/verifying_key.rs`
- [PSS signing](https://github.com/rustcrypto/rsa/blob/master/src/pss/signing_key.rs): `src/pss/signing_key.rs`
- [Blinded PSS signing](https://github.com/rustcrypto/rsa/blob/master/src/pss/blinded_signing_key.rs): `src/pss/blinded_signing_key.rs`
- [PSS verification](https://github.com/rustcrypto/rsa/blob/master/src/pss/verifying_key.rs): `src/pss/verifying_key.rs`
- [PSS encoding](https://github.com/rustcrypto/rsa/blob/master/src/algorithms/pss.rs): `src/algorithms/pss.rs`

### Core and encoding

- [RSA operations](https://github.com/rustcrypto/rsa/blob/master/src/algorithms/rsa.rs): `src/algorithms/rsa.rs`
- [Key encoding](https://github.com/rustcrypto/rsa/blob/master/src/encoding.rs): `src/encoding.rs`
- [Crate API](https://github.com/rustcrypto/rsa/blob/master/src/lib.rs): `src/lib.rs`

### Other components

- **Library caller**
- **Random generator**

## Connections

- Library caller → Crate API: uses
- Crate API → Key management: exposes
- Library caller → Key management: creates keys
- Key management → Prime and key generation: generates
- Random generator → Prime and key generation: provides randomness
- Key management → Key component traits: implements
- Library caller → OAEP encrypt: encrypts with
- Library caller → OAEP decrypt: decrypts with
- Library caller → PKCS1v15 encrypt: encrypts with
- Library caller → PKCS1v15 decrypt: decrypts with
- OAEP encrypt → OAEP encoding: encodes
- OAEP decrypt → OAEP encoding: decodes
- PKCS1v15 encrypt → Padding algorithms: pads
- PKCS1v15 decrypt → Padding algorithms: unpads
- OAEP encrypt → RSA operations: uses public operation
- OAEP decrypt → RSA operations: uses private operation
- PKCS1v15 encrypt → RSA operations: uses public operation
- PKCS1v15 decrypt → RSA operations: uses private operation
- Library caller → PKCS1v15 signing: signs with
- Library caller → PKCS1v15 verification: verifies with
- Library caller → PSS signing: signs with
- Library caller → Blinded PSS signing: signs with
- Library caller → PSS verification: verifies with
- PKCS1v15 signing → RSA operations: signs via
- PKCS1v15 verification → RSA operations: verifies via
- PSS signing → PSS encoding: encodes
- Blinded PSS signing → PSS encoding: encodes
- PSS verification → PSS encoding: checks encoding
- PSS signing → RSA operations: signs via
- Blinded PSS signing → RSA operations: signs via
- PSS verification → RSA operations: verifies via
- Library caller → Key encoding: imports or exports keys
- Key encoding → Key management: converts keys
