23 个版本 (14 个重大更新)

0.15.0 2024年5月9日
0.14.0 2023年10月5日
0.13.1 2023年2月15日
0.12.0 2022年9月12日
0.1.0 2016年12月12日

430加密学

Download history 191/week @ 2024-05-04 107/week @ 2024-05-11 131/week @ 2024-05-18 124/week @ 2024-05-25 126/week @ 2024-06-01 81/week @ 2024-06-08 63/week @ 2024-06-15 119/week @ 2024-06-22 102/week @ 2024-06-29 14/week @ 2024-07-06 147/week @ 2024-07-13 95/week @ 2024-07-20 290/week @ 2024-07-27 98/week @ 2024-08-03 155/week @ 2024-08-10 30/week @ 2024-08-17

583 每月下载量
13 个 crate 中使用(通过 ruma

MIT 许可证

575KB
12K SLoC

ruma-signatures

crates.io page docs.rs page license: MIT

ruma-signatures 为根据 Matrix 规范创建数字签名提供功能。


lib.rs:

根据 Matrix 规范的数字签名。

数字签名由 Matrix 家服务器用于验证 Matrix 系统中事件的真实性,以及家服务器之间的联盟请求。每个家服务器都有一个或多个签名密钥对(有时称为“验证密钥”),它使用这些密钥对签名所有事件和联盟请求。Matrix 客户端和其他 Matrix 家服务器可以向家服务器请求其公钥,并使用这些密钥验证签名数据。

每个签名密钥对都有一个标识符,该标识符由它所使用的数字签名算法的名称和一个“版本”字符串组成,用冒号分隔。版本是一个任意标识符,用于区分同一家服务器使用相同算法的密钥对。

任意 JSON 对象以及 Matrix 事件的 JSON 表示都可以进行签名。在这两种情况下,签名都存储在 JSON 对象本身的 signatures 键下。事件还必须包含其内容的哈希值,这些哈希值同样存储在经过哈希的 JSON 对象的 hashes 键下。

在 JSON 表示中,签名和哈希都以 base64 编码的字符串形式出现,使用标准字符集,不带填充。

签名和哈希

要签名任意 JSON 对象,请使用 sign_json 函数。请参阅此函数的文档以获取更多详细信息和使用示例。

签署事件比签署任意JSON过程更复杂,因为事件可以删除,即使后来从事件中删除数据,签名也需要保持有效。Homeservers需要在与其他Homeservers交换之前,生成事件内容的哈希并签署事件。尽管签署事件的哈希和签名算法比签署任意JSON更复杂,但ruma-signatures用户界面的接口是相同的。要哈希和签署事件,请使用hash_and_sign_event函数。请参阅此函数的文档以获取更多详细信息和使用示例。

验证签名和哈希

当Homeserver通过联邦从另一个Homeserver接收数据时,需要通过验证它们的签名来验证数据的真实性和完整性。

要验证任意JSON上的签名,请使用verify_json函数。要验证事件上的签名和哈希,请使用verify_event函数。请参阅这些函数的文档以获取更多详细信息和使用示例。

依赖项

~11–15MB
~296K SLoC