Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions bin/ream/assets/lean/config.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
GENESIS_TIME: 1704085200
NUM_VALIDATORS: 3
GENESIS_VALIDATORS:
- 0x1c7fc215c289710fb3f7bd1770ffa9514eafa94a7c4c13596da1fe6b47d1ee058f245138d6ee5315b7f5660bf73475199b046843
- 0xeedf39399a2b7860a4167d13a60fdf223767f10f8dd657033b20b25f831af36029154f6d31b5b708f404ff5cf1db492b16a8af1d
- 0xf2d5c9236d81573cdd8512522f2fd82acdd79157574a1b6f487b670bae1d0a669bb104629558071590ce9a434f05ef3cf3ff9564
- 0x605065094422b9525f864d75d7dad0610f08b604513d112d5513e324f772411accb191097ea55e21733d221360b4407776b6e079
- 0x9661f8676e93b542deea3d6585cfb91c7f98b44c2a2bd225dc1fd44d0ad4d940b551aa10bcc5f50fb543b9135cbbc8247dfb6244
- 0xba43383d5dd7ff449468f47cfece54501fec7b77609cd6312e379d01d414df232b1742090d4e8202f95ebf47c57bf4148c98dc21
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@ num_active_epochs: 262144
num_validators: 3
validators:
- index: 0
pubkey_hex: 0x1c7fc215c289710fb3f7bd1770ffa9514eafa94a7c4c13596da1fe6b47d1ee058f245138d6ee5315b7f5660bf73475199b046843
pubkey_hex: 0x605065094422b9525f864d75d7dad0610f08b604513d112d5513e324f772411accb191097ea55e21733d221360b4407776b6e079
privkey_file: validator_0_sk.json
- index: 1
pubkey_hex: 0xeedf39399a2b7860a4167d13a60fdf223767f10f8dd657033b20b25f831af36029154f6d31b5b708f404ff5cf1db492b16a8af1d
pubkey_hex: 0x9661f8676e93b542deea3d6585cfb91c7f98b44c2a2bd225dc1fd44d0ad4d940b551aa10bcc5f50fb543b9135cbbc8247dfb6244
privkey_file: validator_1_sk.json
- index: 2
pubkey_hex: 0xf2d5c9236d81573cdd8512522f2fd82acdd79157574a1b6f487b670bae1d0a669bb104629558071590ce9a434f05ef3cf3ff9564
pubkey_hex: 0xba43383d5dd7ff449468f47cfece54501fec7b77609cd6312e379d01d414df232b1742090d4e8202f95ebf47c57bf4148c98dc21
privkey_file: validator_2_sk.json
2 changes: 1 addition & 1 deletion bin/ream/assets/lean/hash-sig-keys/validator_0_sk.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion bin/ream/assets/lean/hash-sig-keys/validator_1_sk.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion bin/ream/assets/lean/hash-sig-keys/validator_2_sk.json

Large diffs are not rendered by default.

54 changes: 37 additions & 17 deletions crates/crypto/post_quantum/src/leansig/public_key.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
use alloy_primitives::FixedBytes;
use alloy_primitives::{
FixedBytes,
hex::{self, ToHexExt},
};
use anyhow::anyhow;
use leansig::{serialization::Serializable, signature::SignatureScheme};
use serde::{Deserialize, Serialize};
use serde::{Deserialize, Deserializer, Serialize};
use ssz_derive::{Decode, Encode};
use tree_hash_derive::TreeHash;

Expand All @@ -25,21 +28,7 @@ pub type LeanSigPublicKey = <LeanSigScheme as SignatureScheme>::PublicKey;
///
/// NOTE 2: We might use caching here (e.g., `OnceCell`) if serialization/deserialization becomes a
/// bottleneck.
#[derive(
Debug,
PartialEq,
Clone,
Encode,
Decode,
TreeHash,
Default,
Eq,
Hash,
Copy,
Deserialize,
Serialize,
)]
#[serde(transparent)]
#[derive(Debug, PartialEq, Clone, Encode, Decode, TreeHash, Default, Eq, Hash, Copy)]
pub struct PublicKey {
pub inner: FixedBytes<52>,
}
Expand Down Expand Up @@ -68,3 +57,34 @@ impl PublicKey {
.map_err(|err| anyhow!("Failed to decode LeanSigPublicKey from SSZ: {err:?}"))
}
}

impl Serialize for PublicKey {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
serializer.serialize_str(&format!(
"0x{}",
self.as_lean_sig()
.map_err(serde::ser::Error::custom)?
.to_bytes()
.encode_hex()
))
}
}

impl<'de> Deserialize<'de> for PublicKey {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: Deserializer<'de>,
{
let result: String = Deserialize::deserialize(deserializer)?;
let result = hex::decode(&result).map_err(serde::de::Error::custom)?;
Self::from_lean_sig(
LeanSigPublicKey::from_bytes(&result)
.map_err(|err| anyhow!("Convert to error, with error trait implemented {err:?}"))
.map_err(serde::de::Error::custom)?,
)
.map_err(serde::de::Error::custom)
}
}
Loading