Skip to content

Instantly share code, notes, and snippets.

@CalebCurry
Created January 20, 2024 14:59
Show Gist options
  • Save CalebCurry/81333903de4e1bac043da20d3b90cf89 to your computer and use it in GitHub Desktop.
Save CalebCurry/81333903de4e1bac043da20d3b90cf89 to your computer and use it in GitHub Desktop.
basic example of serializing a message, signing it, and verifying it
[package]
name = "signatures"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
bls-signatures = "0.15.0"
rand = "0.8.5"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0.111"
use bls_signatures::PrivateKey;
use rand::thread_rng;
use serde::{Deserialize, Serialize};
#[derive(Deserialize, Serialize)]
struct Transaction {
from: String,
to: String,
amount: i128,
}
fn main() {
let private = PrivateKey::generate(&mut thread_rng());
let private2 = PrivateKey::generate(&mut thread_rng());
let public = private.public_key();
//println!("{private:?}, {public:?}");
let message = Transaction {
amount: 100,
from: String::from("Test"),
to: String::from("You"),
};
let serialized_message = serde_json::to_string(&message).unwrap();
let sig = private.sign(&serialized_message);
let verification = public.verify(sig, &serialized_message);
println!("Is the message authentic? {}", verification);
let deserialized_message: Transaction = serde_json::from_str(&serialized_message).unwrap();
println!("{}", deserialized_message.amount);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment