4 个版本

0.0.1-sol52020年5月1日
0.0.1-sol42019年10月25日
0.0.0 2019年8月6日
0.0.0-sol9 2019年7月26日
0.0.0-sol152019年7月27日

#32 in #libra

Download history 59/week @ 2024-03-24 108/week @ 2024-03-31 41/week @ 2024-04-07 46/week @ 2024-04-14 58/week @ 2024-04-21 56/week @ 2024-04-28 42/week @ 2024-05-05 53/week @ 2024-05-12 49/week @ 2024-05-19 53/week @ 2024-05-26 39/week @ 2024-06-02 26/week @ 2024-06-09 49/week @ 2024-06-16 48/week @ 2024-06-23 12/week @ 2024-06-30 19/week @ 2024-07-07

每月下载 130
23 个crate中使用(直接使用 2 个)23 个crate

Apache-2.0

19KB
367

此crate包含三种类型的 derive 宏

  • SilentDebugSilentDisplay 用于私有密钥类型,并省略其输入以提高保密性。
  • Deref 帮助从新类型中推导规范实例。
  • solana_libra_crypto::traits 提供的 derive 宏,例如 ValidKeyPublicKeyPrivateKeyVerifyingKeySigningKeySignature,旨在从实现这些特质的简单类型联合中推导。

签名特质联合的细节

这些类型通常在需要运行时接受多个签名和验证方案的替代方案时(例如:BLS 或 EdDSA,见下文)发挥作用。在这种情况下,可以声明三个枚举类型的三元组,每个类型描述这些替代方案之一的“求和类型”(coproduct)。这实际上是一种签名方案(它具有规范的签名、签名和验证密钥类型,并通过平凡的调度验证所有预期属性)。

以下宏在两个条件下允许您以平凡的方式定义此类联合

  • 枚举的变体标签具有相同的名称,即如果 BLS 变体为 SignatureUnionSignatureUnion::BLS(BLS12381Signature),则 PublicKeyUnion 的 BLS 变体也必须是 PublicKeyUnion::BLS,
  • 为这三个联合体分别指定关联类型 PrivateKeyTypeSignatureTypePublicKeyTypePrivateKeyType 提供与 VerifyingKeyMaterialPublicKeyMaterial 关联类型相关的值,PublicKeyType 提供与 SigningKeyMaterialPrivateKeyMaterial 关联类型相关的值,而 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