通用消息模块
dkd的Python项目详细描述
道可道——消息模块(python)
这个document引入了一个公共的消息模块,用于分散式即时消息传递。
版权所有©2018-2019 Albert Moky
0。信封
消息信封
/* example */{sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083}
1。内容
/* example */{type:0x01,// message typesn:412968873,// serial number (message ID in conversation)text:"Hey guy!"}
消息内容类型
enum{DIMContentType_Unknown=0x00,DIMContentType_Text=0x01,DIMContentType_File=0x10,DIMContentType_Image=0x12,// photoDIMContentType_Audio=0x14,// voiceDIMContentType_Video=0x16,DIMContentType_Page=0x20,// web page// quote an exists message and reply it with textDIMContentType_Quote=0x37,// system commandDIMContentType_Command=0x88,// top-secret message forward by proxy (Service Provider)DIMContentType_Forward=0xFF};
2。消息
当用户要发送消息时,客户端需要两个步骤才能发送消息:
- 加密即时消息到安全消息;
- 将secure消息签名到reliable消息。
因此,当客户端收到消息时,需要两个步骤来提取内容:
- 验证可靠消息到安全消息;
- 解密安全消息到即时消息。
MessageTransforming~~~~~~~~~~~~~~~~~~~~InstantMessage<-->SecureMessage<-->ReliableMessage+-------------++------------++--------------+|sender||sender||sender||receiver||receiver||receiver||time||time||time||||||||content||data||data|+-------------+|key/keys||key/keys|+------------+|signature|+--------------+Algorithm:data=password.encrypt(content)key=receiver.public_key.encrypt(password)signature=sender.private_key.sign(data)
即时消息
/* example */{//-------- head (envelope) --------sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083,//-------- body (content) ---------content:{type:0x01,// message typesn:412968873,// serial number (ID)text:"Hey guy!"}}
内容->;json字符串:{"sn":412968873,"text":"Hey guy!","type":1}
安全消息
/** * Algorithm: * string = json(content); * PW = random(); * data = encrpyt(string, PW); // Symmetric * key = encrypt(PW, receiver.PK); // Asymmetric */{//-------- head (envelope) --------sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083,//-------- body (content) ---------data:"9cjCKG99ULCCxbL2mkc/MgF1saeRqJaCc+S12+HCqmsuF7TWK61EwTQWZSKskUeF",key:"WH/wAcu+HfpaLq+vRblNnYufkyjTm4FgYyzW3wBDeRtXs1TeDmRxKVu7nQI/sdIALGLXrY+O5mlRfhU8f8TuIBilZUlX/eIUpL4uSDYKVLaRG9pOcrCHKevjUpId9x/8KBEiMIL5LB0Vo7sKrvrqosCnIgNfHbXMKvMzwcqZEU8="}
可靠消息
/** * Algorithm: * signature = sign(data, sender.SK); */{//-------- head (envelope) --------sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083,//-------- body (content) ---------data:"9cjCKG99ULCCxbL2mkc/MgF1saeRqJaCc+S12+HCqmsuF7TWK61EwTQWZSKskUeF",key:"WH/wAcu+HfpaLq+vRblNnYufkyjTm4FgYyzW3wBDeRtXs1TeDmRxKVu7nQI/sdIALGLXrY+O5mlRfhU8f8TuIBilZUlX/eIUpL4uSDYKVLaRG9pOcrCHKevjUpId9x/8KBEiMIL5LB0Vo7sKrvrqosCnIgNfHbXMKvMzwcqZEU8=",signature:"Yo+hchWsQlWHtc8iMGS7jpn/i9pOLNq0E3dTNsx80QdBboTLeKoJYAg/lI+kZL+g7oWJYpD4qKemOwzI+9pxdMuZmPycG+0/VM3HVSMcguEOqOH9SElp/fYVnm4aSjAJk2vBpARzMT0aRNp/jTFLawmMDuIlgWhBfXvH7bT7rDI="}
(所有数据都使用base64编码算法作为默认值)
推荐PyPI第三方库
{"sn":412968873,"text":"Hey guy!","type":1}
/** * Algorithm: * signature = sign(data, sender.SK); */{//-------- head (envelope) --------sender:"moki@4WDfe3zZ4T7opFSi3iDAKiuTnUHjxmXekk",receiver:"hulk@4YeVEN3aUnvC1DNUufCq1bs9zoBSJTzVEj",time:1545405083,//-------- body (content) ---------data:"9cjCKG99ULCCxbL2mkc/MgF1saeRqJaCc+S12+HCqmsuF7TWK61EwTQWZSKskUeF",key:"WH/wAcu+HfpaLq+vRblNnYufkyjTm4FgYyzW3wBDeRtXs1TeDmRxKVu7nQI/sdIALGLXrY+O5mlRfhU8f8TuIBilZUlX/eIUpL4uSDYKVLaRG9pOcrCHKevjUpId9x/8KBEiMIL5LB0Vo7sKrvrqosCnIgNfHbXMKvMzwcqZEU8=",signature:"Yo+hchWsQlWHtc8iMGS7jpn/i9pOLNq0E3dTNsx80QdBboTLeKoJYAg/lI+kZL+g7oWJYpD4qKemOwzI+9pxdMuZmPycG+0/VM3HVSMcguEOqOH9SElp/fYVnm4aSjAJk2vBpARzMT0aRNp/jTFLawmMDuIlgWhBfXvH7bT7rDI="}
(所有数据都使用base64编码算法作为默认值)