0.2.7 |
|
---|---|
0.2.6 |
|
0.2.2 |
|
0.1.7 |
|
0.1.0 |
|
132 在 #aptos 中排名
每月下载量 28
用于 105 个 crate(10 个直接使用)
29KB
581 行
加密操作的 derive 宏
此 crate 包含四种类型的 derive 宏
SilentDebug
和SilentDisplay
宏旨在用于私钥类型,并省略其输入以保密。Deref
宏有助于为新类型推导规范实例。- 为
aptos_crypto::traits
定制的 derive 宏,即ValidCryptoMaterial
,PublicKey
,PrivateKey
,VerifyingKey
,SigningKey
和Signature
,旨在在实现这些 trait 的类型的简单联合上生成。 - 为
aptos_crypto::hash::CryptoHasher
定制的 derive 宏,它定义了在aptos_crypto::hash
中描述的域分离哈希结构(详情请参考那里)。此 derive 宏的唯一不同之处在于它会自动为您选择一个唯一的盐,使用 Serde 名称。对于容器Foo
,这通常相当于define_hasher! { ( FooHasher, FOO_HASHER, b"Foo" ) }
签名 trait 的联合,详细说明
这些类型通常在需要运行时接受多种签名和验证方案的替代方案时发挥作用(例如BLS或EdDSA,见下文)。在这种情况下,可以声明一组三个枚举类型,每个类型都描述了这些替代方案的“求和类型”(并积)。这实际上是一种签名方案(它具有规范签名、签名和验证密钥类型,并通过简单分派验证所有预期的属性)。
下面的宏允许你在两个条件下轻松定义此类联合:
- 枚举的变体标签具有相同的名称,即如果
SignatureUnion
的BLS变体为SignatureUnion::BLS(BLS12381Signature)
,那么PublicKeyUnion
的BLS变体也必须是PublicKeyUnion::BLS
, - 为每个三个联合指定关联的类型
PrivateKeyType
、SignatureType
和PublicKeyType
。PrivateKeyType
为VerifyingKeyMaterial
和PublicKeyMaterial
关联类型提供值,PublicKeyType
为SigningKeyMaterial
和PrivateKeyMaterial
关联类型提供值,SignatureType
为SignatureMaterial
关联类型提供值。
示例
# #[macro_use] extern crate crypto-derive;
use aptos_crypto::{
hash::HashValue,
bls12381::{BLS12381PrivateKey, BLS12381PublicKey, BLS12381Signature},
ed25519::{Ed25519PrivateKey, Ed25519PublicKey, Ed25519Signature},
};
use aptos_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
约35K SLoC