60 lines
2.1 KiB
Markdown
60 lines
2.1 KiB
Markdown
# **M**ethanium **T**ransport **P**rotocol
|
|
|
|
**MTP** is a **m**odular **t**ransport **p**rotocol by Methanium.
|
|
|
|
## Crates
|
|
- Common
|
|
- Crypto
|
|
- TypeMap
|
|
- Registry
|
|
- Codec
|
|
- Transport
|
|
- Host
|
|
- Client
|
|
|
|
## Registry & TypeMaps
|
|
A TypeMap maps Communication-Types to a byte, and Data-Types to 2 bytes.
|
|
A Communication- or Data-Type is a String to be used Plain in the code, while the Byte is transmitted.
|
|
|
|
The Registries map a TypeMap to a specific version of MTP.
|
|
|
|
## Codec
|
|
The Codec crate handles encoding and decoding of MTP packets using Communication Types and Data Types from the Registry.
|
|
The Codec has these Data Values:
|
|
- Container
|
|
- Encrypted Container
|
|
- Signed Integer
|
|
- Unsigned Integer
|
|
- Boolean
|
|
- Signed Float
|
|
- String
|
|
- Array
|
|
- Binary (List of Bytes)
|
|
|
|
The Codec uses the Crypto crate to encrypt and decrypt Encrypted Containers.
|
|
|
|
## Transport
|
|
The Transport crate wraps QUIC.
|
|
|
|
## Host & Client
|
|
The host creates a quic Server that listens for incoming connections.
|
|
The host also manages the registry and versions to allow for backwards compatibility with clients.
|
|
|
|
The client connects to a quic Server and uses a registry to communicate with the host.
|
|
|
|
The Client may be Outdated while the Host is updated.
|
|
|
|
## Common
|
|
Common Handles Logging and Error Handling. Personal information reported to Common will be anonmized.
|
|
|
|
## Crypto Stack
|
|
| Crate | Audited? | Notes |
|
|
| ---------------- | -------- | ------------------------------------------------ |
|
|
| ml-dsa | No | NIST vectors pass; regression bug fixed Jan 2026 |
|
|
| ed25519-dalek | Yes | Used by Signal, Diem |
|
|
| chacha20poly1305 | Yes | NCC Group audit, Dec 2019 |
|
|
| aes-gcm | Yes | NCC Group audit, Dec 2019 |
|
|
| hkdf | No | Simple construction; well-reviewed |
|
|
| sha2 | No | Standard construction; widely reviewed |
|
|
| zeroize | No | Simple; widely used |
|
|
| mlkem-tls | No | mlkem-rs backend unaudited |
|