4#ifndef _Stroika_Foundation_Cryptography_OpenSSL_DigestAlgorithm_h_
5#define _Stroika_Foundation_Cryptography_OpenSSL_DigestAlgorithm_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#if qStroika_HasComponent_OpenSSL
10#include <openssl/evp.h>
13#include "Stroika/Foundation/Common/Common.h"
14#include "Stroika/Foundation/Common/Property.h"
15#include "Stroika/Foundation/Execution/Exceptions.h"
16#include "Stroika/Foundation/Execution/LazyInitialized.h"
17#include "Stroika/Foundation/Memory/Common.h"
26namespace Stroika::Foundation::Cryptography::Providers::OpenSSL {
28 using Characters::String;
30#if qStroika_HasComponent_OpenSSL
35 class DigestAlgorithm {
39 DigestAlgorithm (const ::EVP_MD* digester);
40 DigestAlgorithm (
const DigestAlgorithm& src);
43 nonvirtual DigestAlgorithm& operator= (
const DigestAlgorithm& src);
51 static DigestAlgorithm GetByName (
const String& digestName);
52 static optional<DigestAlgorithm> GetByNameQuietly (
const String& digestName);
55 nonvirtual
operator const ::EVP_MD* ()
const;
60 Common::ReadOnlyProperty<String> name;
63 nonvirtual
auto operator<=> (
const DigestAlgorithm& rhs)
const;
64 nonvirtual
bool operator== (
const DigestAlgorithm& rhs)
const;
72 const ::EVP_MD* fDigester_;
78 namespace DigestAlgorithms {
82 extern const Execution::LazyInitialized<DigestAlgorithm> kMD5;
87 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA1;
92 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA1_224;
93 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA1_256;
94 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA1_384;
95 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA1_512;
100 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA3_224;
101 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA3_256;
102 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA3_384;
103 extern const Execution::LazyInitialized<DigestAlgorithm> kSHA3_512;
115#include "DigestAlgorithm.inl"
STRING_TYPE ToString(FLOAT_TYPE f, const ToStringOptions &options={})