Signal
- signalapp
- Signal-Server
- AGPLv3, Java
- Signal-Android
- GPLv3, Java, Kotlin
- Signal-iOS
- AGPLv3, Swift, ObjC
- Signal-Desktop
- AGPLv3, Typescript, Electron
- libsignal
- AGPLv3, Rust, Java, Switf, TypeScript
- Signal-Server
- Signal Protocol
- E2E 加密
- 群组消息单独加密
- Double Ratchet
- used by WhatsApp, Facebook Messenger, Google Allo, Signal
- Double Ratchet
- Diffie-Hellman key exchange
- out-of-order messages, message resynchronization, message authentication
- used by Signal, WhatsApp, Wire
Server
- Signal-Server
- AGPLv3, Java
- Dropwizard, resilience4j, curve25519-java, Bouncy Castle, Jedis, Lettuce,
Liquibase, libphonenumber - grpc, websocket, graphql
- mockito, wiremock, assertj
- com.eatthepath.pushy
- Redis Pub/Sub
- Redis Lua 定义脚本
- Cache - DynamoDB + Redis
- 旧的 DB messagedb.xml
- 参考
- What I've learned from Signal server source code
- resources/lua/insert_item.lua
- messageId=counter++
- ZADD Queue messageId Message
- HSET Meta guid messageId
- EXPIRE Queue 90 days
- EXPIRE Meta 90 days
- resources/lua/insert_item.lua
- What I've learned from Signal server source code
proto
enum PubSubType {
UNKNOWN = 0;
QUERY_DB = 1;
DELIVER = 2;
KEEPALIVE = 3;
CLOSE = 4;
CONNECTED = 5;
}