# Project name
Selective-Decryption Distributed Key Management (SDDKM)
One-liner to describe what the project is about.
Privacy-preserving selective decryption of on-chain ciphertexts using MPC and coSNARKs, with on-chain proof verification.
## Project description.
SDDKM enables multiple share managers to jointly decrypt only authorized ciphertexts without revealing the secret key to anyone, including themselves. Key shares are generated via threshold techniques, decryption is executed inside an MPC session, and a Circom-based circuit proves Paillier-style correct decryption. Proofs are collaboratively produced (coSNARK) and verified by a smart contract. The core mechanism is released as an open-source library so other applications can integrate selective decryption with verifiable on-chain outcomes.
## Technologies used
- Rust (core library, backend CLI/API)
- Circom + snarkjs (ZK circuits and tooling)
- coCircom/coSNARK (collaborative proof generation)
- Solidity + Foundry (on-chain verifier and tests)
- Flutter (minimal demo UI)
- Docker (dev environment)
## Basic architecture
- Frontend/Backend: accepts ciphertext and metadata, triggers MPC session and proof generation
- MPC (Share Managers): performs threshold reconstruction internally to decrypt target ciphertext; produces shared witness
- Circom circuit: enforces Paillier decryption correctness and hash commit to plaintext; binds proof to circuitVersion and sessionID
- Smart contract: verifies proof and emits events with public inputs
- sddkm-lib: reusable library exposing encrypt/selective_decrypt_prove/verify interfaces
## Source code
https://github.com/pepetoma/Selective-Decryption-Distributed-Key-Management-Scheme