4 个版本

0.0.3 2021年10月4日
0.0.2 2021年5月11日
0.0.1 2021年3月9日
0.0.0 2021年3月5日

#27 in #diem

Download history 11/week @ 2024-03-11 16/week @ 2024-03-18 17/week @ 2024-03-25 47/week @ 2024-04-01 7/week @ 2024-04-08 8/week @ 2024-04-15 17/week @ 2024-04-22 8/week @ 2024-04-29 16/week @ 2024-05-06 15/week @ 2024-05-13 10/week @ 2024-05-20 6/week @ 2024-05-27 12/week @ 2024-06-03 16/week @ 2024-06-10 7/week @ 2024-06-17 20/week @ 2024-06-24

每月 55 下载次数
6 crate 中使用(2 个直接使用)

Apache-2.0

29KB
581

加密操作 derive 宏

此 crate 包含四种类型的 derive 宏

  • SilentDebugSilentDisplay 宏旨在用于私钥类型,并省略其输入以保密。
  • Deref 宏有助于为新类型生成规范实例。
  • diem_crypto::traits 的 derive 宏,即 ValidCryptoMaterialPublicKeyPrivateKeyVerifyingKeySigningKeySignature,旨在在实现这些 trait 的类型的简单联合上生成。
  • 用于diem_crypto::hash::CryptoHasher的派生宏,它定义了在diem_crypto::hash中描述的领域分隔哈希结构(详情见那里)。这个派生宏唯一的区别在于它会自动为你选择一个唯一的盐,使用Serde名称。对于一个容器Foo,这通常等价于
    define_hasher! {
     (
          FooHasher,
          FOO_HASHER,
          b"Foo"
      )
    }
    

签名特质的联合,详细说明

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

以下宏在以下两个条件下让你可以简单地定义这种类型的联合

  • 枚举的变体标记具有相同的名称,即如果SignatureUnion的BLS变体是SignatureUnion::BLS(BLS12381Signature),那么BLS的PublicKeyUnion变体也必须是PublicKeyUnion::BLS,
  • 您为每个三个联合指定关联类型PrivateKeyTypeSignatureTypePublicKeyTypePrivateKeyTypeVerifyingKeyMaterialPublicKeyMaterial关联类型提供值,PublicKeyTypeSigningKeyMaterialPrivateKeyMaterial关联类型提供值,而SignatureTypeSignatureMaterial关联类型提供值。

示例

# #[macro_use] extern crate crypto-derive;
use diem_crypto::{
    hash::HashValue,
    bls12381::{BLS12381PrivateKey, BLS12381PublicKey, BLS12381Signature},
    ed25519::{Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature},
};
use diem_crypto_derive::{
    SilentDebug, PrivateKey, PublicKey, Signature, SigningKey, ValidCryptoMaterial, VerifyingKey,
};

/// Generic public key enum
#[derive(
    Debug, Clone, PartialEq, Eq, Hash, ValidCryptoMaterial, 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, ValidCryptoMaterial, 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
~34K SLoC