| Crates.io | turbomcp-dpop |
| lib.rs | turbomcp-dpop |
| version | 3.0.0-beta.3 |
| created_at | 2025-08-28 01:19:44.313201+00 |
| updated_at | 2026-01-22 16:44:50.888966+00 |
| description | DPoP (RFC 9449) implementation for TurboMCP with HSM support |
| homepage | https://turbomcp.org |
| repository | https://github.com/Epistates/turbomcp |
| max_upload_size | |
| id | 1813435 |
| size | 307,284 |
RFC 9449 compliant DPoP (Demonstrating Proof-of-Possession) implementation for OAuth 2.0.
TurboMCP DPoP exclusively supports ES256 (ECDSA P-256) as of v2.2.0+. This is an intentional security decision, not a limitation.
| Criterion | ES256 (ECDSA P-256) | RSA (RS256/PS256) |
|---|---|---|
| Security | Timing-attack resistant | Vulnerable (RUSTSEC-2023-0071) |
| Key Size | 256 bits | 2048-4096 bits |
| Signature Size | 64 bytes | 256-512 bytes |
| Performance | Faster signing/verification | Slower operations |
| 2026 Compliance | Recommended by NIST | Being phased out |
RSA algorithm support was removed due to RUSTSEC-2023-0071, which affects the rsa crate's PKCS#1 v1.5 padding implementation. The vulnerability allows timing side-channel attacks that can leak private key information.
Q1 2026 Best Practices recommend:
If you're migrating from an RSA-based DPoP implementation:
use turbomcp_dpop::DpopKeyPair;
// Generate new ES256 key pair
let key_pair = DpopKeyPair::generate()?;
// Export public key for JWKS
let jwk = key_pair.public_jwk();
[dependencies]
turbomcp-dpop = "3.0.0-exp"
# With Redis storage
turbomcp-dpop = { version = "3.0.0-exp", features = ["redis-storage"] }
# With HSM support
turbomcp-dpop = { version = "3.0.0-exp", features = ["hsm"] }
default - Core DPoP functionalityredis-storage - Redis backend for nonce trackinghsm-pkcs11 - PKCS#11 HSM supporthsm-yubico - YubiHSM supporthsm - All HSM backendstest-utils - Test utilitiesMIT