Skip to content

Commit c68b967

Browse files
authored
Merge pull request #17 from troian/digest_to_str
feat: digest to_string
2 parents 42d4c34 + f3da064 commit c68b967

File tree

4 files changed

+22
-13
lines changed

4 files changed

+22
-13
lines changed

CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,10 @@ set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation d
2323
set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files")
2424

2525
find_package(OpenSSL REQUIRED)
26-
if (NOT WIN32)
26+
if (NOT WIN32 AND NOT JsonCPP_FOUND)
2727
find_package(PkgConfig REQUIRED)
2828
pkg_check_modules(JsonCPP REQUIRED jsoncpp)
29-
endif (NOT WIN32)
29+
endif ()
3030

3131
include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR})
3232
include_directories(SYSTEM ${JsonCPP_INCLUDE_DIRS})

include/export/josepp/digest.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class digest final {
3939

4040
uint8_t *data();
4141

42+
std::string to_string() const;
43+
4244
public:
4345
static const EVP_MD *md(digest::type t) {
4446
switch (t) {

include/export/josepp/tools.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
#pragma once
2424

2525
#include <json/json.h>
26-
#include <json/value.h>
2726

2827
#include <string>
2928

src/digest.cpp

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,18 @@
2020
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
2121
// SOFTWARE.
2222

23+
#include <sstream>
24+
#include <iomanip>
25+
2326
#include <josepp/digest.hpp>
2427

2528
#include <openssl/sha.h>
2629

2730
namespace jose {
2831

29-
digest::digest(digest::type type, const uint8_t *in_data, size_t in_size) :
30-
_size(SHA256_DIGEST_LENGTH)
31-
, _data(nullptr)
32-
{
32+
digest::digest(digest::type type, const uint8_t *in_data, size_t in_size)
33+
: _size(SHA256_DIGEST_LENGTH)
34+
, _data(nullptr) {
3335
try {
3436
_data = std::shared_ptr<uint8_t>(new uint8_t[SHA512_DIGEST_LENGTH], std::default_delete<uint8_t[]>());
3537
} catch (...) {
@@ -90,19 +92,25 @@ digest::digest(digest::type type, const uint8_t *in_data, size_t in_size) :
9092
}
9193
}
9294

93-
digest::~digest()
94-
{
95+
digest::~digest() {
9596
std::memset(_data.get(), 0, _size);
9697
}
9798

98-
size_t digest::size() const
99-
{
99+
size_t digest::size() const {
100100
return _size;
101101
}
102102

103-
uint8_t *digest::data()
104-
{
103+
uint8_t *digest::data() {
105104
return _data.get();
106105
}
107106

107+
std::string digest::to_string() const {
108+
std::stringstream s;
109+
for (size_t i = 0; i < size() / 2; ++i) {
110+
s << std::hex << std::setfill('0') << std::setw(2) << (_data.get()[i * 2] << 8 | _data.get()[(i * 2) + 1]);
111+
}
112+
113+
return s.str();
114+
}
115+
108116
} // namespace jose

0 commit comments

Comments
 (0)