# 隐私计算平台开放算法协议
## 背景
本仓库用于存放隐私计算平台开放算法协议接口,旨在将算法接口通过程序化设计语言 Protobuf 更加全面、精确地表述出来,帮助隐私计算平台开发者更好地实施互联互通改造,促进隐私计算算法的互联互通。
协议文档地址:[https://www.secretflow.org.cn/docs/interconnection/](https://www.secretflow.org.cn/docs/interconnection/)
本仓库接口符合北京金融科技产业联盟(简称:金科联盟)隐私计算跨平台互联互通团体标准、信通院牵头隐私计算联盟互联互通团体标准要求,其中握手协商部分两个标准略有差异:
- 金科联盟标准定义了完整的隐私计算平台框架,算法组件运行所需的配置全部由管理层的工作流配置模块(原名 DAG&CONF 模块)下发,因此不再需要握手协议
- 隐私计算联盟标准并未对算法组件之外的其它模块做过多假设,因此所有算法均有握手协商过程,从而提升开放算法独立部署、运行的可行性
隐语采用可选的握手协商过程,从而同时兼容两大标准。至于开放算法的协议主体在两联盟的标准中一致。
<table>
<tr>
<td></td>
<td>金科联盟标准</td>
<td>隐私计算联盟标准</td>
<td>本仓库</td>
<tr>
<tr>
<td>算法运行参数</td>
<td>由管理层工作流配置模块下发</td>
<td>参与方运行握手协商协议自行对齐参数</td>
<td>定义了完整的握手协商接口,如对方采用金科联盟方式,可跳过此部分接口</td>
<tr>
<tr>
<td>算法协议主体</td>
<td colspan="2" style="text-align: center;">协议流程、接口一致</td>
<td>定义了完整的协议主体运行所需接口</td>
<tr>
</table>
### 相关仓库
| 仓库 | 说明 |
|---------------------------------------------------------------------------------|------------------------------------|
| [InterOp](https://github.com/secretflow/interop) | 金科联盟互联互通研究成果官方仓库 |
| [caict-ppca/privacy-computing](https://github.com/caict-ppca/privacy-computing) | 隐私计算联盟互联互通研究成果官方仓库 |
| [interconnection](https://github.com/secretflow/interconnection) (本仓库) | 隐语收集、定义的互联互通开放算法协议接口、文档 |
| [interconnection-impl](https://github.com/secretflow/interconnection-impl) | 互联互通开放算法协议的参考实现,支持 Python & C++ 语言 |
注: 仓库排名不分先后
## Interconnection 仓库结构
```
.
├── PPCA # 存放隐私计算联盟归口的标准协议文件副本
├── docs # 文档网站的网页源代码
└── interconnection # 所有接口文件
├── common # 通用的接口定义
├── handshake # 所有握手协议相关接口
│ ├── algos # 算法层的握手协议接口
│ ├── op # 安全算子层的握手协议接口
│ └── protocol_family # 密码协议层的握手协议接口
├── legacy # 目前已经废弃的接口文件
├── link # 传输层接口
├── runtime # 算法运行主体所用的接口
└── service # 访问第三方公共基础服务所用的接口
```
当前已经定义的互联互通协议(接口)有:
- [ECDH-PSI 协议](./PPCA/open-protocols/ECDH-PSI.pdf)
- [SS-LR 协议](./PPCA/open-protocols/SS-LR.pdf)
- [SGB 协议](./PPCA/open-protocols/SGB.pdf)
注:本仓库收集、存放的互联互通接口仅为金科联盟、隐私计算联盟标准的子集,完整的接口、文档请参考各联盟的官方仓库。
## 握手协议设计范式
隐私计算联盟所有算法协议都包含握手协议和算法主体两部分,其中握手协议用于对齐算法版本、算法运行所需参数等,并遵循一些统一的范式:
1. 所有算法都复用同一套握手协议,即所有算法的握手请求都用的是 `interconnection/handshake/entry.proto` 中定义的 `HandshakeRequest`,所有算法的握手协商结果都使用 `HandshakeResponse` 格式。
2. 对于多个参与方的算法,我们为每个参与方赋予一个编号,称为 rank,rank 的数值从 0 开始依次递增。
3. 握手协议执行时,由非 0 参与方向 rank-0 发送 `HandshakeRequest`,rank-0 汇总所有参与方的请求后,得出一组公共参数,依次发送 `HandshakeResponse`,如果参数协商失败,则依次发送错误消息。
4. `HandshakeRequest` 中每一类具体的参数项,其命名风格一般为 XxxProposal,`HandshakeResponse` 中选定的参数项,其命名风格一般为 XxxResult。
5. 对于某些连续数值型参数,例如深度学习中的 learning_rate 等,我们假设无论参数选择几对功能无影响,对方都应该支持,这一类参数不需要协商,而是由 rank-0 选定一个数值,在 `HandshakeResponse` 中发给大家。
6. 对于一些可枚举的功能性参数,`HandshakeRequest` 用一个列表表示,表示发送者支持列表所列的功能;并且这个列表是有序的,表示发送者更加偏爱列表中靠前的参数。例如 ECDH-PSI 中的椭圆曲线(EC)类型,假如请求列表是 `[SM2, CURVE25519]`,则表示发送者同时支持 SM2 和 CURVE25519,如果其他参与方也同时支持这两种 EC,则协商者应当优先选择 SM2, 因为 SM2 排在前面。当然,如果多个参数方发送的列表顺序是矛盾的,协商者会优先满足大多数参与方的偏爱。
## 算法协议与传输层关系
算法协议中提到的 proto 一般并不直接用于 RPC 框架,而是用作跨语言、跨版本的序列化、反序列化工具使用。传输层只负责传输裸的二进制 buffer,不感知具体的 proto 格式,下图是一个示例:
```
┌─────────────┐ ┌─────────────┐
│ Algorithm │ │ Algorithm │
└──────┬──────┘ └──────▲──────┘
│Serialize │
│proto │Deserialize
│to buffer │buffer
┌──────▼──────┐ ┌──────┴──────┐
│ Transport │ buffer │ Transport │
│ layer ├────────────────►│ layer │
└─────────────┘ http(s)/rpc └─────────────┘
```
示例图:
1. 左侧的算法将 proto 序列化成 buffer,提交给传输层
2. 左侧传输层通过网络将数据发送到右侧传输层模块
3. 右侧算法获取传输层中的 buffer,反序列化成 proto
Raw data
{
"_id": null,
"home_page": "https://github.com/secretflow/interconnection",
"name": "interconnection",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": null,
"author": "SecretFlow Team",
"author_email": "secretflow-contact@service.alipay.com",
"download_url": null,
"platform": null,
"description": "# \u9690\u79c1\u8ba1\u7b97\u5e73\u53f0\u5f00\u653e\u7b97\u6cd5\u534f\u8bae\n\n## \u80cc\u666f\n\n\u672c\u4ed3\u5e93\u7528\u4e8e\u5b58\u653e\u9690\u79c1\u8ba1\u7b97\u5e73\u53f0\u5f00\u653e\u7b97\u6cd5\u534f\u8bae\u63a5\u53e3\uff0c\u65e8\u5728\u5c06\u7b97\u6cd5\u63a5\u53e3\u901a\u8fc7\u7a0b\u5e8f\u5316\u8bbe\u8ba1\u8bed\u8a00 Protobuf \u66f4\u52a0\u5168\u9762\u3001\u7cbe\u786e\u5730\u8868\u8ff0\u51fa\u6765\uff0c\u5e2e\u52a9\u9690\u79c1\u8ba1\u7b97\u5e73\u53f0\u5f00\u53d1\u8005\u66f4\u597d\u5730\u5b9e\u65bd\u4e92\u8054\u4e92\u901a\u6539\u9020\uff0c\u4fc3\u8fdb\u9690\u79c1\u8ba1\u7b97\u7b97\u6cd5\u7684\u4e92\u8054\u4e92\u901a\u3002\n\n\u534f\u8bae\u6587\u6863\u5730\u5740\uff1a[https://www.secretflow.org.cn/docs/interconnection/](https://www.secretflow.org.cn/docs/interconnection/)\n\n\u672c\u4ed3\u5e93\u63a5\u53e3\u7b26\u5408\u5317\u4eac\u91d1\u878d\u79d1\u6280\u4ea7\u4e1a\u8054\u76df\uff08\u7b80\u79f0\uff1a\u91d1\u79d1\u8054\u76df\uff09\u9690\u79c1\u8ba1\u7b97\u8de8\u5e73\u53f0\u4e92\u8054\u4e92\u901a\u56e2\u4f53\u6807\u51c6\u3001\u4fe1\u901a\u9662\u7275\u5934\u9690\u79c1\u8ba1\u7b97\u8054\u76df\u4e92\u8054\u4e92\u901a\u56e2\u4f53\u6807\u51c6\u8981\u6c42\uff0c\u5176\u4e2d\u63e1\u624b\u534f\u5546\u90e8\u5206\u4e24\u4e2a\u6807\u51c6\u7565\u6709\u5dee\u5f02\uff1a\n\n- \u91d1\u79d1\u8054\u76df\u6807\u51c6\u5b9a\u4e49\u4e86\u5b8c\u6574\u7684\u9690\u79c1\u8ba1\u7b97\u5e73\u53f0\u6846\u67b6\uff0c\u7b97\u6cd5\u7ec4\u4ef6\u8fd0\u884c\u6240\u9700\u7684\u914d\u7f6e\u5168\u90e8\u7531\u7ba1\u7406\u5c42\u7684\u5de5\u4f5c\u6d41\u914d\u7f6e\u6a21\u5757\uff08\u539f\u540d DAG&CONF \u6a21\u5757\uff09\u4e0b\u53d1\uff0c\u56e0\u6b64\u4e0d\u518d\u9700\u8981\u63e1\u624b\u534f\u8bae\n- \u9690\u79c1\u8ba1\u7b97\u8054\u76df\u6807\u51c6\u5e76\u672a\u5bf9\u7b97\u6cd5\u7ec4\u4ef6\u4e4b\u5916\u7684\u5176\u5b83\u6a21\u5757\u505a\u8fc7\u591a\u5047\u8bbe\uff0c\u56e0\u6b64\u6240\u6709\u7b97\u6cd5\u5747\u6709\u63e1\u624b\u534f\u5546\u8fc7\u7a0b\uff0c\u4ece\u800c\u63d0\u5347\u5f00\u653e\u7b97\u6cd5\u72ec\u7acb\u90e8\u7f72\u3001\u8fd0\u884c\u7684\u53ef\u884c\u6027\n\n\u9690\u8bed\u91c7\u7528\u53ef\u9009\u7684\u63e1\u624b\u534f\u5546\u8fc7\u7a0b\uff0c\u4ece\u800c\u540c\u65f6\u517c\u5bb9\u4e24\u5927\u6807\u51c6\u3002\u81f3\u4e8e\u5f00\u653e\u7b97\u6cd5\u7684\u534f\u8bae\u4e3b\u4f53\u5728\u4e24\u8054\u76df\u7684\u6807\u51c6\u4e2d\u4e00\u81f4\u3002\n\n<table>\n <tr>\n <td></td>\n <td>\u91d1\u79d1\u8054\u76df\u6807\u51c6</td>\n <td>\u9690\u79c1\u8ba1\u7b97\u8054\u76df\u6807\u51c6</td>\n <td>\u672c\u4ed3\u5e93</td>\n <tr>\n <tr>\n <td>\u7b97\u6cd5\u8fd0\u884c\u53c2\u6570</td>\n <td>\u7531\u7ba1\u7406\u5c42\u5de5\u4f5c\u6d41\u914d\u7f6e\u6a21\u5757\u4e0b\u53d1</td>\n <td>\u53c2\u4e0e\u65b9\u8fd0\u884c\u63e1\u624b\u534f\u5546\u534f\u8bae\u81ea\u884c\u5bf9\u9f50\u53c2\u6570</td>\n <td>\u5b9a\u4e49\u4e86\u5b8c\u6574\u7684\u63e1\u624b\u534f\u5546\u63a5\u53e3\uff0c\u5982\u5bf9\u65b9\u91c7\u7528\u91d1\u79d1\u8054\u76df\u65b9\u5f0f\uff0c\u53ef\u8df3\u8fc7\u6b64\u90e8\u5206\u63a5\u53e3</td>\n <tr>\n <tr>\n <td>\u7b97\u6cd5\u534f\u8bae\u4e3b\u4f53</td>\n <td colspan=\"2\" style=\"text-align: center;\">\u534f\u8bae\u6d41\u7a0b\u3001\u63a5\u53e3\u4e00\u81f4</td>\n <td>\u5b9a\u4e49\u4e86\u5b8c\u6574\u7684\u534f\u8bae\u4e3b\u4f53\u8fd0\u884c\u6240\u9700\u63a5\u53e3</td>\n <tr>\n</table>\n\n### \u76f8\u5173\u4ed3\u5e93\n\n| \u4ed3\u5e93 | \u8bf4\u660e |\n|---------------------------------------------------------------------------------|------------------------------------|\n| [InterOp](https://github.com/secretflow/interop) | \u91d1\u79d1\u8054\u76df\u4e92\u8054\u4e92\u901a\u7814\u7a76\u6210\u679c\u5b98\u65b9\u4ed3\u5e93 |\n| [caict-ppca/privacy-computing](https://github.com/caict-ppca/privacy-computing) | \u9690\u79c1\u8ba1\u7b97\u8054\u76df\u4e92\u8054\u4e92\u901a\u7814\u7a76\u6210\u679c\u5b98\u65b9\u4ed3\u5e93 |\n| [interconnection](https://github.com/secretflow/interconnection) (\u672c\u4ed3\u5e93\uff09 | \u9690\u8bed\u6536\u96c6\u3001\u5b9a\u4e49\u7684\u4e92\u8054\u4e92\u901a\u5f00\u653e\u7b97\u6cd5\u534f\u8bae\u63a5\u53e3\u3001\u6587\u6863 |\n| [interconnection-impl](https://github.com/secretflow/interconnection-impl) | \u4e92\u8054\u4e92\u901a\u5f00\u653e\u7b97\u6cd5\u534f\u8bae\u7684\u53c2\u8003\u5b9e\u73b0\uff0c\u652f\u6301 Python & C++ \u8bed\u8a00 |\n\n\u6ce8: \u4ed3\u5e93\u6392\u540d\u4e0d\u5206\u5148\u540e\n\n## Interconnection \u4ed3\u5e93\u7ed3\u6784\n\n```\n.\n\u251c\u2500\u2500 PPCA # \u5b58\u653e\u9690\u79c1\u8ba1\u7b97\u8054\u76df\u5f52\u53e3\u7684\u6807\u51c6\u534f\u8bae\u6587\u4ef6\u526f\u672c\n\u251c\u2500\u2500 docs # \u6587\u6863\u7f51\u7ad9\u7684\u7f51\u9875\u6e90\u4ee3\u7801\n\u2514\u2500\u2500 interconnection # \u6240\u6709\u63a5\u53e3\u6587\u4ef6\n \u251c\u2500\u2500 common # \u901a\u7528\u7684\u63a5\u53e3\u5b9a\u4e49\n \u251c\u2500\u2500 handshake # \u6240\u6709\u63e1\u624b\u534f\u8bae\u76f8\u5173\u63a5\u53e3\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 algos # \u7b97\u6cd5\u5c42\u7684\u63e1\u624b\u534f\u8bae\u63a5\u53e3\n \u2502\u00a0\u00a0 \u251c\u2500\u2500 op # \u5b89\u5168\u7b97\u5b50\u5c42\u7684\u63e1\u624b\u534f\u8bae\u63a5\u53e3\n \u2502\u00a0\u00a0 \u2514\u2500\u2500 protocol_family # \u5bc6\u7801\u534f\u8bae\u5c42\u7684\u63e1\u624b\u534f\u8bae\u63a5\u53e3\n \u251c\u2500\u2500 legacy # \u76ee\u524d\u5df2\u7ecf\u5e9f\u5f03\u7684\u63a5\u53e3\u6587\u4ef6\n \u251c\u2500\u2500 link # \u4f20\u8f93\u5c42\u63a5\u53e3\n \u251c\u2500\u2500 runtime # \u7b97\u6cd5\u8fd0\u884c\u4e3b\u4f53\u6240\u7528\u7684\u63a5\u53e3\n \u2514\u2500\u2500 service # \u8bbf\u95ee\u7b2c\u4e09\u65b9\u516c\u5171\u57fa\u7840\u670d\u52a1\u6240\u7528\u7684\u63a5\u53e3\n\n```\n\n\u5f53\u524d\u5df2\u7ecf\u5b9a\u4e49\u7684\u4e92\u8054\u4e92\u901a\u534f\u8bae\uff08\u63a5\u53e3\uff09\u6709:\n\n- [ECDH-PSI \u534f\u8bae](./PPCA/open-protocols/ECDH-PSI.pdf)\n- [SS-LR \u534f\u8bae](./PPCA/open-protocols/SS-LR.pdf)\n- [SGB \u534f\u8bae](./PPCA/open-protocols/SGB.pdf)\n\n\u6ce8\uff1a\u672c\u4ed3\u5e93\u6536\u96c6\u3001\u5b58\u653e\u7684\u4e92\u8054\u4e92\u901a\u63a5\u53e3\u4ec5\u4e3a\u91d1\u79d1\u8054\u76df\u3001\u9690\u79c1\u8ba1\u7b97\u8054\u76df\u6807\u51c6\u7684\u5b50\u96c6\uff0c\u5b8c\u6574\u7684\u63a5\u53e3\u3001\u6587\u6863\u8bf7\u53c2\u8003\u5404\u8054\u76df\u7684\u5b98\u65b9\u4ed3\u5e93\u3002\n\n## \u63e1\u624b\u534f\u8bae\u8bbe\u8ba1\u8303\u5f0f\n\n\u9690\u79c1\u8ba1\u7b97\u8054\u76df\u6240\u6709\u7b97\u6cd5\u534f\u8bae\u90fd\u5305\u542b\u63e1\u624b\u534f\u8bae\u548c\u7b97\u6cd5\u4e3b\u4f53\u4e24\u90e8\u5206\uff0c\u5176\u4e2d\u63e1\u624b\u534f\u8bae\u7528\u4e8e\u5bf9\u9f50\u7b97\u6cd5\u7248\u672c\u3001\u7b97\u6cd5\u8fd0\u884c\u6240\u9700\u53c2\u6570\u7b49\uff0c\u5e76\u9075\u5faa\u4e00\u4e9b\u7edf\u4e00\u7684\u8303\u5f0f\uff1a\n\n1. \u6240\u6709\u7b97\u6cd5\u90fd\u590d\u7528\u540c\u4e00\u5957\u63e1\u624b\u534f\u8bae\uff0c\u5373\u6240\u6709\u7b97\u6cd5\u7684\u63e1\u624b\u8bf7\u6c42\u90fd\u7528\u7684\u662f `interconnection/handshake/entry.proto` \u4e2d\u5b9a\u4e49\u7684 `HandshakeRequest`\uff0c\u6240\u6709\u7b97\u6cd5\u7684\u63e1\u624b\u534f\u5546\u7ed3\u679c\u90fd\u4f7f\u7528 `HandshakeResponse` \u683c\u5f0f\u3002\n2. \u5bf9\u4e8e\u591a\u4e2a\u53c2\u4e0e\u65b9\u7684\u7b97\u6cd5\uff0c\u6211\u4eec\u4e3a\u6bcf\u4e2a\u53c2\u4e0e\u65b9\u8d4b\u4e88\u4e00\u4e2a\u7f16\u53f7\uff0c\u79f0\u4e3a rank\uff0crank \u7684\u6570\u503c\u4ece 0 \u5f00\u59cb\u4f9d\u6b21\u9012\u589e\u3002\n3. \u63e1\u624b\u534f\u8bae\u6267\u884c\u65f6\uff0c\u7531\u975e 0 \u53c2\u4e0e\u65b9\u5411 rank-0 \u53d1\u9001 `HandshakeRequest`\uff0crank-0 \u6c47\u603b\u6240\u6709\u53c2\u4e0e\u65b9\u7684\u8bf7\u6c42\u540e\uff0c\u5f97\u51fa\u4e00\u7ec4\u516c\u5171\u53c2\u6570\uff0c\u4f9d\u6b21\u53d1\u9001 `HandshakeResponse`\uff0c\u5982\u679c\u53c2\u6570\u534f\u5546\u5931\u8d25\uff0c\u5219\u4f9d\u6b21\u53d1\u9001\u9519\u8bef\u6d88\u606f\u3002\n4. `HandshakeRequest` \u4e2d\u6bcf\u4e00\u7c7b\u5177\u4f53\u7684\u53c2\u6570\u9879\uff0c\u5176\u547d\u540d\u98ce\u683c\u4e00\u822c\u4e3a XxxProposal\uff0c`HandshakeResponse` \u4e2d\u9009\u5b9a\u7684\u53c2\u6570\u9879\uff0c\u5176\u547d\u540d\u98ce\u683c\u4e00\u822c\u4e3a XxxResult\u3002\n5. \u5bf9\u4e8e\u67d0\u4e9b\u8fde\u7eed\u6570\u503c\u578b\u53c2\u6570\uff0c\u4f8b\u5982\u6df1\u5ea6\u5b66\u4e60\u4e2d\u7684 learning_rate \u7b49\uff0c\u6211\u4eec\u5047\u8bbe\u65e0\u8bba\u53c2\u6570\u9009\u62e9\u51e0\u5bf9\u529f\u80fd\u65e0\u5f71\u54cd\uff0c\u5bf9\u65b9\u90fd\u5e94\u8be5\u652f\u6301\uff0c\u8fd9\u4e00\u7c7b\u53c2\u6570\u4e0d\u9700\u8981\u534f\u5546\uff0c\u800c\u662f\u7531 rank-0 \u9009\u5b9a\u4e00\u4e2a\u6570\u503c\uff0c\u5728 `HandshakeResponse` \u4e2d\u53d1\u7ed9\u5927\u5bb6\u3002\n6. \u5bf9\u4e8e\u4e00\u4e9b\u53ef\u679a\u4e3e\u7684\u529f\u80fd\u6027\u53c2\u6570\uff0c`HandshakeRequest` \u7528\u4e00\u4e2a\u5217\u8868\u8868\u793a\uff0c\u8868\u793a\u53d1\u9001\u8005\u652f\u6301\u5217\u8868\u6240\u5217\u7684\u529f\u80fd\uff1b\u5e76\u4e14\u8fd9\u4e2a\u5217\u8868\u662f\u6709\u5e8f\u7684\uff0c\u8868\u793a\u53d1\u9001\u8005\u66f4\u52a0\u504f\u7231\u5217\u8868\u4e2d\u9760\u524d\u7684\u53c2\u6570\u3002\u4f8b\u5982 ECDH-PSI \u4e2d\u7684\u692d\u5706\u66f2\u7ebf(EC)\u7c7b\u578b\uff0c\u5047\u5982\u8bf7\u6c42\u5217\u8868\u662f `[SM2, CURVE25519]`\uff0c\u5219\u8868\u793a\u53d1\u9001\u8005\u540c\u65f6\u652f\u6301 SM2 \u548c CURVE25519\uff0c\u5982\u679c\u5176\u4ed6\u53c2\u4e0e\u65b9\u4e5f\u540c\u65f6\u652f\u6301\u8fd9\u4e24\u79cd EC\uff0c\u5219\u534f\u5546\u8005\u5e94\u5f53\u4f18\u5148\u9009\u62e9 SM2, \u56e0\u4e3a SM2 \u6392\u5728\u524d\u9762\u3002\u5f53\u7136\uff0c\u5982\u679c\u591a\u4e2a\u53c2\u6570\u65b9\u53d1\u9001\u7684\u5217\u8868\u987a\u5e8f\u662f\u77db\u76fe\u7684\uff0c\u534f\u5546\u8005\u4f1a\u4f18\u5148\u6ee1\u8db3\u5927\u591a\u6570\u53c2\u4e0e\u65b9\u7684\u504f\u7231\u3002\n\n\n## \u7b97\u6cd5\u534f\u8bae\u4e0e\u4f20\u8f93\u5c42\u5173\u7cfb\n\n\u7b97\u6cd5\u534f\u8bae\u4e2d\u63d0\u5230\u7684 proto \u4e00\u822c\u5e76\u4e0d\u76f4\u63a5\u7528\u4e8e RPC \u6846\u67b6\uff0c\u800c\u662f\u7528\u4f5c\u8de8\u8bed\u8a00\u3001\u8de8\u7248\u672c\u7684\u5e8f\u5217\u5316\u3001\u53cd\u5e8f\u5217\u5316\u5de5\u5177\u4f7f\u7528\u3002\u4f20\u8f93\u5c42\u53ea\u8d1f\u8d23\u4f20\u8f93\u88f8\u7684\u4e8c\u8fdb\u5236 buffer\uff0c\u4e0d\u611f\u77e5\u5177\u4f53\u7684 proto \u683c\u5f0f\uff0c\u4e0b\u56fe\u662f\u4e00\u4e2a\u793a\u4f8b\uff1a\n\n```\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Algorithm \u2502 \u2502 Algorithm \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u252c\u2500\u2500\u2500\u2500\u2500\u2500\u2518 \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u25b2\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n \u2502Serialize \u2502\n \u2502proto \u2502Deserialize\n \u2502to buffer \u2502buffer\n \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u25bc\u2500\u2500\u2500\u2500\u2500\u2500\u2510 \u250c\u2500\u2500\u2500\u2500\u2500\u2500\u2534\u2500\u2500\u2500\u2500\u2500\u2500\u2510\n \u2502 Transport \u2502 buffer \u2502 Transport \u2502\n \u2502 layer \u251c\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u25ba\u2502 layer \u2502\n \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518 http(s)/rpc \u2514\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2518\n```\n\n\u793a\u4f8b\u56fe\uff1a\n\n1. \u5de6\u4fa7\u7684\u7b97\u6cd5\u5c06 proto \u5e8f\u5217\u5316\u6210 buffer\uff0c\u63d0\u4ea4\u7ed9\u4f20\u8f93\u5c42\n2. \u5de6\u4fa7\u4f20\u8f93\u5c42\u901a\u8fc7\u7f51\u7edc\u5c06\u6570\u636e\u53d1\u9001\u5230\u53f3\u4fa7\u4f20\u8f93\u5c42\u6a21\u5757\n3. \u53f3\u4fa7\u7b97\u6cd5\u83b7\u53d6\u4f20\u8f93\u5c42\u4e2d\u7684 buffer\uff0c\u53cd\u5e8f\u5217\u5316\u6210 proto\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "Interconnection aims to define standard interconnection protocols for multi-layers in privacy-preserving computing.",
"version": "0.2.0.dev0",
"project_urls": {
"Homepage": "https://github.com/secretflow/interconnection"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7580ad75f728f9df64be915e98a374a182067d897263ee769fd2c1b8cf30deb0",
"md5": "5be9f942181f7f98db3794a130c8247b",
"sha256": "d64e6dff498e9c3f781c200f1033c83b56ff5a5d344f79822bd04c040c15ce07"
},
"downloads": -1,
"filename": "interconnection-0.2.0.dev0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5be9f942181f7f98db3794a130c8247b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 23749,
"upload_time": "2024-03-20T08:32:30",
"upload_time_iso_8601": "2024-03-20T08:32:30.945812Z",
"url": "https://files.pythonhosted.org/packages/75/80/ad75f728f9df64be915e98a374a182067d897263ee769fd2c1b8cf30deb0/interconnection-0.2.0.dev0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-03-20 08:32:30",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "secretflow",
"github_project": "interconnection",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"circle": true,
"requirements": [],
"lcname": "interconnection"
}