feat: generate secret key

Adds generate_secret_key & get_public_key_from_secret_key functions.
Adds generate_secret_key & get_public_key_from_secret_key functions examples to README.md.
Fix list error on Android.
Bump package version to 0.7.0.
This commit is contained in:
coreyphillips
2024-09-29 15:12:44 -04:00
parent ab9ba2360b
commit 2fec48a4ad
16 changed files with 284 additions and 30 deletions

View File

@@ -1,5 +1,8 @@
use pkarr::Keypair;
/**
* Get a keypair from a secret key
*/
pub fn get_keypair_from_secret_key(secret_key: &str) -> Result<Keypair, String> {
let bytes = match hex::decode(&secret_key) {
Ok(bytes) => bytes,
@@ -14,4 +17,18 @@ pub fn get_keypair_from_secret_key(secret_key: &str) -> Result<Keypair, String>
};
Ok(Keypair::from_secret_key(&secret_key_bytes))
}
/**
* Get the secret key from a keypair
*/
pub fn get_secret_key_from_keypair(keypair: &Keypair) -> String {
hex::encode(keypair.secret_key())
}
/**
* Generate a new keypair
*/
pub fn generate_keypair() -> Keypair {
Keypair::random()
}

View File

@@ -46,6 +46,45 @@ static TOKIO_RUNTIME: Lazy<Arc<Runtime>> = Lazy::new(|| {
)
});
#[uniffi::export]
pub fn generate_secret_key() -> Vec<String> {
let keypair = generate_keypair();
let secret_key = get_secret_key_from_keypair(&keypair);
let public_key = keypair.public_key();
let uri = public_key.to_uri_string();
let json_obj = json!({
"secret_key": secret_key,
"public_key": public_key.to_string(),
"uri": uri,
});
let json_str = match serde_json::to_string(&json_obj) {
Ok(json) => json,
Err(e) => return create_response_vector(true, format!("Failed to serialize JSON: {}", e)),
};
create_response_vector(false, json_str)
}
#[uniffi::export]
pub fn get_public_key_from_secret_key(secret_key: String) -> Vec<String> {
let keypair = match get_keypair_from_secret_key(&secret_key) {
Ok(keypair) => keypair,
Err(error) => return create_response_vector(true, error),
};
let public_key = keypair.public_key();
let uri = public_key.to_uri_string();
let json_obj = json!({
"public_key": public_key.to_string(),
"uri": uri,
});
let json_str = match serde_json::to_string(&json_obj) {
Ok(json) => json,
Err(e) => return create_response_vector(true, format!("Failed to serialize JSON: {}", e)),
};
create_response_vector(false, json_str)
}
#[uniffi::export]
pub fn publish_https(record_name: String, target: String, secret_key: String) -> Vec<String> {
let client = PKARR_CLIENT.clone();