Stroika Library 3.0d16
 
Loading...
Searching...
No Matches
Cryptography/Format.inl
1/*
2 * Copyright(c) Sophist Solutions, Inc. 1990-2025. All rights reserved
3 */
4#include "Stroika/Foundation/Common/GUID.h"
6
7namespace Stroika::Foundation::Cryptography {
8
9 namespace Private_ {
10 string mkArrayFmt_ (const uint8_t* start, const uint8_t* end);
11 inline string mkArrayFmt_ (const byte* start, const byte* end)
12 {
13 return mkArrayFmt_ (reinterpret_cast<const uint8_t*> (start), reinterpret_cast<const uint8_t*> (end));
14 }
15 string mkFmt_ (unsigned int n);
16 string mkFmt_ (unsigned long n);
17 string mkFmt_ (unsigned long long n);
18
19 using Characters::String;
20
21 template <size_t N>
22 inline string Format_ (const array<byte, N>& arr, const string*)
23 {
24 static_assert (N >= 1, "N >= 1");
25 return mkArrayFmt_ (Traversal::Iterator2Pointer (arr.begin ()), Traversal::Iterator2Pointer (arr.begin ()) + N);
26 }
27 template <size_t N>
28 inline string Format_ (const array<uint8_t, N>& arr, const string*)
29 {
30 static_assert (N >= 1, "N >= 1");
31 return mkArrayFmt_ (Traversal::Iterator2Pointer (arr.begin ()), Traversal::Iterator2Pointer (arr.begin ()) + N);
32 }
33 inline string Format_ (unsigned int n, const string*)
34 {
35 return mkFmt_ (n);
36 }
37 inline string Format_ (unsigned long n, const string*)
38 {
39 return mkFmt_ (n);
40 }
41 inline string Format_ (unsigned long long n, const string*)
42 {
43 return mkFmt_ (n);
44 }
45 inline string Format_ (const Memory::BLOB& b, const string*)
46 {
47 return mkArrayFmt_ (reinterpret_cast<const uint8_t*> (b.begin ()), reinterpret_cast<const uint8_t*> (b.end ()));
48 }
49 template <typename CRYTO_RESULT_TO_FORMAT_TYPE>
50 inline String Format_ (const CRYTO_RESULT_TO_FORMAT_TYPE& arr, const String*)
51 {
52 return String{Format_ (arr, static_cast<const string*> (nullptr))};
53 }
54
55 template <typename CRYTO_RESULT_TO_FORMAT_TYPE>
56 Common::GUID Format_ (const CRYTO_RESULT_TO_FORMAT_TYPE& arr, const Common::GUID*)
57 {
58 string tmp = Format_ (arr, static_cast<const string*> (nullptr));
59 std::array<uint8_t, 16> data{};
60 size_t i = 0;
61 for (auto c : tmp) {
62 data[i] += (uint8_t)c;
63 ++i;
64 if (i >= 16) {
65 i = 0;
66 }
67 }
68 return Common::GUID{data};
69 }
70
71 }
72
73 template <typename AS_RESULT_TYPE, typename CRYTO_RESULT_TO_FORMAT_TYPE>
74 inline AS_RESULT_TYPE Format (const CRYTO_RESULT_TO_FORMAT_TYPE& digestResult)
75 {
76 return Private_::Format_ (digestResult, static_cast<const AS_RESULT_TYPE*> (nullptr));
77 }
78
79}