4 个版本
0.0.1-sol5 | 2020年5月1日 |
---|---|
0.0.1-sol4 | 2019年10月25日 |
0.0.0 | 2019年8月6日 |
0.0.0-sol9 |
|
0.0.0-sol15 | 2019年7月27日 |
#32 in #libra
每月下载 130 次
在 23 个crate中使用(直接使用 2 个)23 个crate
19KB
367 行
此crate包含三种类型的 derive 宏
- 宏
SilentDebug
和SilentDisplay 用于私有密钥类型,并省略其输入以提高保密性。
- 宏
Deref
帮助从新类型中推导规范实例。 - 为
solana_libra_crypto::traits
提供的 derive 宏,例如ValidKey
、PublicKey
、PrivateKey
、VerifyingKey
、SigningKey
和Signature
,旨在从实现这些特质的简单类型联合中推导。
签名特质联合的细节
这些类型通常在需要运行时接受多个签名和验证方案的替代方案时(例如:BLS 或 EdDSA,见下文)发挥作用。在这种情况下,可以声明三个枚举类型的三元组,每个类型描述这些替代方案之一的“求和类型”(coproduct)。这实际上是一种签名方案(它具有规范的签名、签名和验证密钥类型,并通过平凡的调度验证所有预期属性)。
以下宏在两个条件下允许您以平凡的方式定义此类联合
- 枚举的变体标签具有相同的名称,即如果 BLS 变体为
SignatureUnion
是SignatureUnion::BLS(BLS12381Signature)
,则PublicKeyUnion
的 BLS 变体也必须是PublicKeyUnion::BLS
, - 为这三个联合体分别指定关联类型
PrivateKeyType
、SignatureType
和PublicKeyType
。PrivateKeyType
提供与VerifyingKeyMaterial
和PublicKeyMaterial
关联类型相关的值,PublicKeyType
提供与SigningKeyMaterial
和PrivateKeyMaterial
关联类型相关的值,而SignatureType
提供与SignatureMaterial
关联类型相关的值。
示例
# #[macro_use] extern crate solana_libra_crypto_derive;
use solana_libra_crypto::{
hash::HashValue,
bls12381::{BLS12381PrivateKey, BLS12381PublicKey, BLS12381Signature},
ed25519::{Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature},
};
use solana_libra_crypto_derive::{
SilentDebug, PrivateKey, PublicKey, Signature, SigningKey, ValidKey, VerifyingKey,
};
# fn main() {
/// Generic public key enum
#[derive(
Debug, Clone, PartialEq, Eq, Hash, ValidKey, PublicKey, VerifyingKey,
)]
#[PrivateKeyType = "GenericPrivateKey"]
#[SignatureType = "GenericSignature"]
pub enum GenericPublicKey {
/// Ed25519 public key
Ed(Ed25519PublicKey),
/// BLS12-381 public key
BLS(BLS12381PublicKey),
}
/// Generic private key enum
#[derive(SilentDebug, ValidKey, PrivateKey, SigningKey)]
#[PublicKeyType = "GenericPublicKey"]
#[SignatureType = "GenericSignature"]
pub enum GenericPrivateKey {
/// Ed25519 private key
Ed(Ed25519PrivateKey),
/// BLS12-381 private key
BLS(BLS12381PrivateKey),
}
/// Generic signature enum
#[allow(clippy::large_enum_variant)]
#[derive(Clone, Debug, PartialEq, Eq, Hash, Signature)]
#[PrivateKeyType = "GenericPrivateKey"]
#[PublicKeyType = "GenericPublicKey"]
pub enum GenericSignature {
/// Ed25519 signature
Ed(Ed25519Signature),
/// BLS12-381 signature
BLS(BLS12381Signature),
}
# }
依赖关系
~1.5MB
~35K SLoC