Nuevo módulo nat.zig con: - NatPmpClient: cliente NAT-PMP (RFC 6886) con detección de gateway, obtención de IP externa y mapeo de puertos UDP/TCP - UpnpClient: cliente UPnP IGD con SSDP discovery, SOAP control, AddPortMapping y DeletePortMapping - NatManager: interfaz unificada que intenta ambos protocolos Tests incluidos para inicialización y tipos básicos. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
4.8 KiB
4.8 KiB
zcatp2p - Protocolo P2P para comunicación directa entre empresas
Descripción
Librería Zig para comunicación P2P segura entre instancias de Simifactu. Permite intercambio directo de documentos (facturas, certificados) entre empresas sin necesidad de email ni servicios cloud.
Objetivos
- Seguridad: E2E cifrado con TLS 1.3 + ChaCha20-Poly1305
- Descentralizado: Sin servidor central obligatorio
- Sin dependencias externas: Implementación completa en Zig puro
- Compatible con NAT: STUN + relay para atravesar firewalls
Arquitectura
┌─────────────────────────────────────────────────────────┐
│ zcatp2p Library │
├─────────────────────────────────────────────────────────┤
│ API Layer │
│ ├── p2p.init() / p2p.deinit() │
│ ├── p2p.connect(device_id) │
│ ├── p2p.send(data) │
│ └── p2p.receive() -> data │
├─────────────────────────────────────────────────────────┤
│ Protocol Layer │
│ ├── Message framing (Header + Payload) │
│ ├── Compression (LZ4) │
│ └── Encryption (ChaCha20-Poly1305) │
├─────────────────────────────────────────────────────────┤
│ Connection Layer │
│ ├── TLS 1.3 handshake │
│ ├── Certificate-based identity │
│ └── Connection multiplexing │
├─────────────────────────────────────────────────────────┤
│ Discovery Layer │
│ ├── Local: UDP broadcast/multicast │
│ ├── Global: HTTPS announce/query │
│ └── Cache de direcciones conocidas │
├─────────────────────────────────────────────────────────┤
│ NAT Traversal Layer │
│ ├── STUN client │
│ ├── UPnP/NAT-PMP port mapping │
│ └── Relay fallback │
└─────────────────────────────────────────────────────────┘
Estructura de archivos
zcatp2p/
├── CLAUDE.md # Este archivo
├── PROTOCOL.md # Especificación detallada del protocolo
├── API.md # Documentación de la API
├── build.zig # Build system
└── src/
├── main.zig # Exports públicos
├── identity.zig # Device ID, certificados
├── crypto.zig # ChaCha20-Poly1305, SHA256, etc.
├── tls.zig # TLS 1.3 implementation
├── http.zig # HTTP/1.1 client
├── protocol.zig # Message framing
├── discovery.zig # Local + global discovery
├── stun.zig # STUN client
├── relay.zig # Relay protocol
├── nat.zig # UPnP IGD / NAT-PMP port mapping
└── connection.zig # Connection management
Referencias
- Syncthing BEP (Block Exchange Protocol):
/mnt/cello2/arno/re/recode/referencias/syncthing/ - RFC 5389 (STUN)
- RFC 8446 (TLS 1.3)
- RFC 8439 (ChaCha20-Poly1305)
Estado
- Especificación del protocolo (PROTOCOL.md)
- API design (API.md)
- Implementación crypto (SHA256, ChaCha20-Poly1305)
- Implementación TLS 1.3 (X25519, HKDF, handshake)
- Implementación discovery local (UDP broadcast)
- Implementación STUN client
- Implementación relay client
- Tests unitarios (36 tests)
- Discovery global (HTTPS API)
- UPnP/NAT-PMP port mapping
- Integración completa de red
Comandos
# Ejecutar tests
zig build test
# Compilar ejemplo
zig build run