Skip to content
Snippets Groups Projects
Commit 193a64f0 authored by Éloïs's avatar Éloïs
Browse files

feat(dbs): add methods to_raw_string & verify_sig for peer v1

parent 4f26e9e6
No related branches found
No related tags found
No related merge requests found
Pipeline #12382 passed
......@@ -19,11 +19,35 @@ use crate::*;
pub struct PeerCardDbV1 {
pub version: u32,
pub currency: String,
pub pubkey: String,
pub blockstamp: String,
pub pubkey: PublicKey,
pub blockstamp: Blockstamp,
pub endpoints: Vec<String>,
pub status: String,
pub signature: String,
pub signature: Signature,
pub status: bool,
}
impl PeerCardDbV1 {
pub fn to_raw_string(&self) -> String {
format!(
"{}{}\n",
self.to_raw_unsigned_string(),
self.signature.to_base64(),
)
}
fn to_raw_unsigned_string(&self) -> String {
format!(
"Version: {}\nType: Peer\nCurrency: {}\nPublicKey: {}\nBlock: {}\nEndpoints:\n{}\n",
self.version,
self.currency,
self.pubkey.to_base58(),
self.blockstamp,
self.endpoints.join("\n"),
)
}
pub fn verify_sig(&self) -> Result<(), dubp::crypto::keys::SigError> {
self.pubkey
.verify(self.to_raw_unsigned_string().as_bytes(), &self.signature)
}
}
impl AsBytes for PeerCardDbV1 {
......@@ -56,3 +80,34 @@ impl ExplorableValue for PeerCardDbV1 {
serde_json::to_value(self).map_err(|e| KvError::DeserError(e.into()))
}
}
#[cfg(test)]
mod tests {
use super::*;
use unwrap::unwrap;
#[test]
fn test_old_peer_sig() {
let peer = PeerCardDbV1 {
version: 10,
currency: "g1".to_owned(),
pubkey: unwrap!(PublicKey::from_base58("8iVdpXqFLCxGyPqgVx5YbFSkmWKkceXveRd2yvBKeARL")),
blockstamp: unwrap!(Blockstamp::from_str("423354-00000033A87209DC21BD643088ED8AD52464A80C04BE3F8FBFA4291A9999BE50")),
endpoints: vec![
"BMAS g1.duniter.org 443".to_owned(),
"BASIC_MERKLED_API 91.121.157.13 10901".to_owned(),
"WS2P e66254bf g1.duniter.org 443 ws2p".to_owned()
],
signature: unwrap!(Signature::from_base64("qr6Cnr/Qsgw/clbt0LbdkaFaUwhdgBJw5Fzpn8EhI9zM5/rGbVF6kqiB5pRJxf17XtI45qQ7H7SBbl8X2kAtCA==")),
status: true,
};
let peer_raw = peer.to_raw_unsigned_string();
assert_eq!(
&peer_raw,
"Version: 10\nType: Peer\nCurrency: g1\nPublicKey: 8iVdpXqFLCxGyPqgVx5YbFSkmWKkceXveRd2yvBKeARL\nBlock: 423354-00000033A87209DC21BD643088ED8AD52464A80C04BE3F8FBFA4291A9999BE50\nEndpoints:\nBMAS g1.duniter.org 443\nBASIC_MERKLED_API 91.121.157.13 10901\nWS2P e66254bf g1.duniter.org 443 ws2p\n",
);
assert!(peer.verify_sig().is_ok());
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment