mirror of
https://github.com/sigp/lighthouse.git
synced 2026-05-07 00:42:42 +00:00
Store pubkey cache decompressed on disk (#5897)
* Support uncompressed keys in crypto/bls
* Use uncompressed keys in cache
* Implement DB upgrade
* Implement downgrade
* More logging on v20 upgrade
* Revert "More logging on v20 upgrade"
This reverts commit cc5789b9d3.
* Merge remote-tracking branch 'origin/unstable' into uncompressed-pubkeys
* Add a little more logging
* Merge remote-tracking branch 'origin/unstable' into uncompressed-pubkeys
This commit is contained in:
@@ -11,6 +11,9 @@ use tree_hash::TreeHash;
|
||||
/// The byte-length of a BLS public key when serialized in compressed form.
|
||||
pub const PUBLIC_KEY_BYTES_LEN: usize = 48;
|
||||
|
||||
/// The byte-length of a BLS public key when serialized in uncompressed form.
|
||||
pub const PUBLIC_KEY_UNCOMPRESSED_BYTES_LEN: usize = 96;
|
||||
|
||||
/// Represents the public key at infinity.
|
||||
pub const INFINITY_PUBLIC_KEY: [u8; PUBLIC_KEY_BYTES_LEN] = [
|
||||
0xc0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
@@ -23,8 +26,17 @@ pub trait TPublicKey: Sized + Clone {
|
||||
/// Serialize `self` as compressed bytes.
|
||||
fn serialize(&self) -> [u8; PUBLIC_KEY_BYTES_LEN];
|
||||
|
||||
/// Serialize `self` as uncompressed bytes.
|
||||
fn serialize_uncompressed(&self) -> [u8; PUBLIC_KEY_UNCOMPRESSED_BYTES_LEN];
|
||||
|
||||
/// Deserialize `self` from compressed bytes.
|
||||
fn deserialize(bytes: &[u8]) -> Result<Self, Error>;
|
||||
|
||||
/// Deserialize `self` from uncompressed bytes.
|
||||
///
|
||||
/// This function *does not* perform thorough checks of the input bytes and should only be
|
||||
/// used with bytes output from `Self::serialize_uncompressed`.
|
||||
fn deserialize_uncompressed(bytes: &[u8]) -> Result<Self, Error>;
|
||||
}
|
||||
|
||||
/// A BLS public key that is generic across some BLS point (`Pub`).
|
||||
@@ -65,6 +77,11 @@ where
|
||||
self.point.serialize()
|
||||
}
|
||||
|
||||
/// Serialize `self` as uncompressed bytes.
|
||||
pub fn serialize_uncompressed(&self) -> [u8; PUBLIC_KEY_UNCOMPRESSED_BYTES_LEN] {
|
||||
self.point.serialize_uncompressed()
|
||||
}
|
||||
|
||||
/// Deserialize `self` from compressed bytes.
|
||||
pub fn deserialize(bytes: &[u8]) -> Result<Self, Error> {
|
||||
if bytes == &INFINITY_PUBLIC_KEY[..] {
|
||||
@@ -75,6 +92,13 @@ where
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/// Deserialize `self` from compressed bytes.
|
||||
pub fn deserialize_uncompressed(bytes: &[u8]) -> Result<Self, Error> {
|
||||
Ok(Self {
|
||||
point: Pub::deserialize_uncompressed(bytes)?,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl<Pub: TPublicKey> Eq for GenericPublicKey<Pub> {}
|
||||
|
||||
Reference in New Issue
Block a user