upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDanConwayDev <DanConwayDev@protonmail.com>2026-01-21 16:05:02 +0000
committerDanConwayDev <DanConwayDev@protonmail.com>2026-01-21 16:05:02 +0000
commit22c9ccd8f17815c960e797a545ab3cb1385ffcf8 (patch)
tree7a166bc829223763906848a6108c783f216d0a88 /src
parent68cca2e28a5edc9b8da72f483980818e4a13fb52 (diff)
fix: use hex format for pubkey in NIP-11 document
The NIP-11 specification requires the pubkey field to be a 64-character hex string, but we were incorrectly using npub (bech32) format. Changes: - Add Config::relay_owner_pubkey_hex() method to get hex format - Update NIP-11 document to use hex format instead of npub - Update test to verify 64-char hex string instead of npub format Fixes nak relay command error: 'must be a hex string of 64 characters'
Diffstat (limited to 'src')
-rw-r--r--src/config.rs8
-rw-r--r--src/http/nip11.rs7
2 files changed, 11 insertions, 4 deletions
diff --git a/src/config.rs b/src/config.rs
index 4b1e8d9..271a340 100644
--- a/src/config.rs
+++ b/src/config.rs
@@ -574,7 +574,13 @@ impl Config {
574 Keys::parse(nsec).context("Invalid relay_owner_nsec") 574 Keys::parse(nsec).context("Invalid relay_owner_nsec")
575 } 575 }
576 576
577 /// Get the relay owner's public key (npub format) for NIP-11 577 /// Get the relay owner's public key (hex format) for NIP-11
578 pub fn relay_owner_pubkey_hex(&self) -> Result<String> {
579 let keys = self.relay_owner_keys()?;
580 Ok(keys.public_key().to_hex())
581 }
582
583 /// Get the relay owner's public key (npub format)
578 pub fn relay_owner_npub(&self) -> Result<String> { 584 pub fn relay_owner_npub(&self) -> Result<String> {
579 let keys = self.relay_owner_keys()?; 585 let keys = self.relay_owner_keys()?;
580 Ok(keys.public_key().to_bech32()?) 586 Ok(keys.public_key().to_bech32()?)
diff --git a/src/http/nip11.rs b/src/http/nip11.rs
index 7c58175..f7af3c2 100644
--- a/src/http/nip11.rs
+++ b/src/http/nip11.rs
@@ -100,7 +100,7 @@ impl RelayInformationDocument {
100 Self { 100 Self {
101 name: config.relay_name(), 101 name: config.relay_name(),
102 description: config.relay_description.clone(), 102 description: config.relay_description.clone(),
103 pubkey: config.relay_owner_npub().ok(), 103 pubkey: config.relay_owner_pubkey_hex().ok(),
104 contact: None, // Could be added to config if needed 104 contact: None, // Could be added to config if needed
105 supported_nips: vec![ 105 supported_nips: vec![
106 1, // NIP-01: Basic protocol flow 106 1, // NIP-01: Basic protocol flow
@@ -145,10 +145,11 @@ mod tests {
145 assert_eq!(doc.name, "Test Relay"); 145 assert_eq!(doc.name, "Test Relay");
146 assert_eq!(doc.description, "A test relay"); 146 assert_eq!(doc.description, "A test relay");
147 147
148 // Verify pubkey is present and is a valid npub 148 // Verify pubkey is present and is a valid hex string (64 chars)
149 assert!(doc.pubkey.is_some()); 149 assert!(doc.pubkey.is_some());
150 let pubkey = doc.pubkey.unwrap(); 150 let pubkey = doc.pubkey.unwrap();
151 assert!(pubkey.starts_with("npub1")); 151 assert_eq!(pubkey.len(), 64);
152 assert!(pubkey.chars().all(|c| c.is_ascii_hexdigit()));
152 153
153 assert!(doc.supported_nips.contains(&1)); 154 assert!(doc.supported_nips.contains(&1));
154 assert!(doc.supported_nips.contains(&11)); 155 assert!(doc.supported_nips.contains(&11));