From 4176302a03fced0b3ba90e7f910c7fb2e28153cc Mon Sep 17 00:00:00 2001 From: Adrien Beraud Date: Tue, 7 Mar 2017 15:46:24 +0100 Subject: [PATCH] crypto: add PublicKey::toString() --- include/opendht/crypto.h | 2 ++ src/crypto.cpp | 16 ++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/include/opendht/crypto.h b/include/opendht/crypto.h index 7d9c8f2f..d8c9a9c1 100644 --- a/include/opendht/crypto.h +++ b/include/opendht/crypto.h @@ -90,6 +90,8 @@ struct OPENDHT_PUBLIC PublicKey void pack(Blob& b) const; void unpack(const uint8_t* dat, size_t dat_size); + std::string toString() const; + template void msgpack_pack(Packer& p) const { diff --git a/src/crypto.cpp b/src/crypto.cpp index 80c1dc80..14337ad3 100644 --- a/src/crypto.cpp +++ b/src/crypto.cpp @@ -426,6 +426,22 @@ PublicKey::unpack(const uint8_t* data, size_t data_size) throw CryptoException(std::string("Could not read public key: ") + gnutls_strerror(err)); } +std::string +PublicKey::toString() const +{ + std::string ret; + size_t sz = ret.size(); + int err = gnutls_pubkey_export(pk, GNUTLS_X509_FMT_PEM, (void*)ret.data(), &sz); + if (err == GNUTLS_E_SHORT_MEMORY_BUFFER) { + ret.resize(sz); + int err = gnutls_pubkey_export(pk, GNUTLS_X509_FMT_PEM, (void*)ret.data(), &sz); + if (err != GNUTLS_E_SUCCESS) + throw CryptoException(std::string("Could not print public key: ") + gnutls_strerror(err)); + } else if (err != GNUTLS_E_SUCCESS) + throw CryptoException(std::string("Could not print public key: ") + gnutls_strerror(err)); + return ret; +} + void PublicKey::msgpack_unpack(msgpack::object o) {