rusted-nostr-tools

Client Tools for Working with Nostr in Rust.

Installation

cargo add rusted-nostr-tools

Import

```rust use chrono::Utc; use rustednostrtools::{ eventmethods::{ geteventhash, serializeevent, signevent, validateevent, verify_signature, UnsignedEvent, }, ConvertKey, GeneratePrivateKey, GeneratePublicKey, Nip05Query, };

```

Generate Private Key

```rust

[test]

fn testgenerateprivatekey() { let key = GeneratePrivateKey::new(); asserteq!(key.hexprivatekey().len(), 64); asserteq!(key.bech32privatekey().isempty(), false); } ```

Generate Public Key

```rust

[test]

fn testgeneratepublickey() { let key = GeneratePrivateKey::new(); let pubkey = GeneratePublicKey::new(key.hexprivatekey()); asserteq!(pubkey.hexpublickey().len(), 64); asserteq!(pubkey.bech32publickey().isempty(), false); } ```

Convert Keys between Hex and Bech32

```rust

[test]

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()); }

[test]

fn hexkeytobech32publickey() { let key = GeneratePrivateKey::new(); let pubkey = GeneratePublicKey::new(key.hexprivatekey()); let bech32pubkey = ConvertKey::tobech32publickey(pubkey.hexpublickey()); asserteq!(bech32pubkey, pubkey.bech32public_key()); }

[test]

fn hexkeytobech32privatekey() { let key = GeneratePrivateKey::new(); let bech32privkey = ConvertKey::tobech32privatekey(key.hexprivatekey()); asserteq!(bech32privkey, key.bech32private_key()); } ```

Nip05Query

```rust

[tokio::test]

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")); } ```

Validate, Serialize, Get Event Hash, Sign and Verify Event

```rust

[test]

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);

} ```