Client Tools for Working with Nostr in Rust.
cargo add rusted-nostr-tools
```rust use chrono::Utc; use rustednostrtools::{ eventmethods::{ geteventhash, serializeevent, signevent, validateevent, verify_signature, UnsignedEvent, }, ConvertKey, GeneratePrivateKey, GeneratePublicKey, Nip05Query, };
```
```rust
fn testgenerateprivatekey() { let key = GeneratePrivateKey::new(); asserteq!(key.hexprivatekey().len(), 64); asserteq!(key.bech32privatekey().isempty(), false); } ```
```rust
fn testgeneratepublickey() { let key = GeneratePrivateKey::new(); let pubkey = GeneratePublicKey::new(key.hexprivatekey()); asserteq!(pubkey.hexpublickey().len(), 64); asserteq!(pubkey.bech32publickey().isempty(), false); } ```
```rust
fn bech32keytohex() { let key = GeneratePrivateKey::new(); let pubkey = GeneratePublicKey::new(key.hexprivatekey()); let hexpubkey = ConvertKey::tohex(pubkey.bech32publickey()); let hexprivkey = ConvertKey::tohex(key.bech32privatekey()); asserteq!(hexpubkey, pubkey.hexpublickey()); asserteq!(hexprivkey, key.hexprivate_key()); }
fn hexkeytobech32publickey() { let key = GeneratePrivateKey::new(); let pubkey = GeneratePublicKey::new(key.hexprivatekey()); let bech32pubkey = ConvertKey::tobech32publickey(pubkey.hexpublickey()); asserteq!(bech32pubkey, pubkey.bech32public_key()); }
fn hexkeytobech32privatekey() { let key = GeneratePrivateKey::new(); let bech32privkey = ConvertKey::tobech32privatekey(key.hexprivatekey()); asserteq!(bech32privkey, key.bech32private_key()); } ```
```rust
async fn testnip05query() { let domain = "noderunner.wtf"; let nip05 = Nip05Query::new(domain).await; asserteq!(nip05.isok(), true); let nip052 = Nip05Query::new(domain).await.unwrap(); assert!(nip052.query().names.contains_key("nitesh")); } ```
```rust
fn signature() { let key = GeneratePrivateKey::new(); let binding = GeneratePublicKey::new(key.hexprivatekey()); let pubkey = binding.hexpublickey();
let content = "yo".to_string();
let event = UnsignedEvent {
pubkey: pubkey.to_string(),
created_at: Utc::now().timestamp(),
kind: 0,
tags: vec![],
content,
};
let is_valid = validate_event(&event);
assert_eq!(is_valid, true);
let serialized_event = serialize_event(&event);
assert!(serialized_event.is_ok());
let hash = get_event_hash(&event);
assert!(&hash.is_ok());
let signature = sign_event(&event, key.hex_private_key());
assert!(&signature.is_ok());
let is_verified = verify_signature(&signature.unwrap().sig, pubkey, &hash.unwrap());
assert_eq!(is_verified.is_ok(), true);
} ```