diff --git a/c/opendht.cpp b/c/opendht.cpp index 13819c35bc9ec72b3fa12f0b160708dab6fa4c3b..fb28b7218c096ab62a0fec452aacfb881286bf04 100644 --- a/c/opendht.cpp +++ b/c/opendht.cpp @@ -118,13 +118,21 @@ dht_privatekey* dht_privatekey_generate(unsigned key_length_bits) { } dht_privatekey* dht_privatekey_import(const uint8_t* dat, size_t dat_size, const char* password) { - return reinterpret_cast<dht_privatekey*>(new dht::crypto::PrivateKey(dat, dat_size, password)); + try { + return reinterpret_cast<dht_privatekey*>(new dht::crypto::PrivateKey(dat, dat_size, password)); + } catch (const dht::crypto::CryptoException& e) { + return nullptr; + } } dht_publickey* dht_privatekey_get_publickey(const dht_privatekey* key) { return reinterpret_cast<dht_publickey*>(new dht::crypto::PublicKey(reinterpret_cast<const dht::crypto::PrivateKey*>(key)->getPublicKey())); } +void dht_privatekey_delete(dht_privatekey* pk) { + delete reinterpret_cast<dht::crypto::PrivateKey*>(pk); +} + // dht::DhtRunner dht_runner* dht_runner_new() { return reinterpret_cast<dht_runner*>(new dht::DhtRunner); diff --git a/c/opendht_c.h b/c/opendht_c.h index d388aa599cc55e2d5616b8c3e8f3236c8007e7cd..de69a013cd77542c51b2d5086336bf6f3ff8ccc2 100644 --- a/c/opendht_c.h +++ b/c/opendht_c.h @@ -63,6 +63,7 @@ typedef struct dht_privatekey dht_privatekey; OPENDHT_C_PUBLIC dht_privatekey* dht_privatekey_generate(unsigned key_length_bits); OPENDHT_C_PUBLIC dht_privatekey* dht_privatekey_import(const uint8_t* dat, size_t dat_size, const char* password); OPENDHT_C_PUBLIC dht_publickey* dht_privatekey_get_publickey(const dht_privatekey*); +OPENDHT_C_PUBLIC void dht_privatekey_delete(dht_privatekey* pk); // dht::crypto::Certificate struct OPENDHT_C_PUBLIC dht_certificate; @@ -74,11 +75,11 @@ typedef bool (*dht_value_cb)(const dht_value* value, bool expired, void* user_da typedef bool (*dht_done_cb)(bool ok, void* user_data); typedef bool (*dht_shutdown_cb)(void* user_data); -// dht::DhtRunner struct OPENDHT_C_PUBLIC dht_op_token; typedef struct dht_op_token dht_op_token; OPENDHT_C_PUBLIC void dht_op_token_delete(dht_op_token* token); +// dht::DhtRunner struct OPENDHT_C_PUBLIC dht_runner; typedef struct dht_runner dht_runner; OPENDHT_C_PUBLIC dht_runner* dht_runner_new();