Virgil Security Crypto library  2.2.2
VirgilHash.h
1 
37 #ifndef VIRGIL_CRYPTO_FOUNDATION_VIRGIL_HASH_H
38 #define VIRGIL_CRYPTO_FOUNDATION_VIRGIL_HASH_H
39 
40 #include <string>
41 #include <memory>
42 
43 #include <virgil/crypto/VirgilByteArray.h>
44 #include <virgil/crypto/foundation/asn1/VirgilAsn1Compatible.h>
45 
46 namespace virgil { namespace crypto { namespace foundation {
47 
53 public:
57  enum class Algorithm {
58  MD5,
59  SHA1,
60  SHA224,
61  SHA256,
62  SHA384,
63  SHA512
64  };
65 
69 
75  VirgilHash();
76 
80  explicit VirgilHash(Algorithm alg);
81 
86  explicit VirgilHash(const std::string& name);
87 
92  explicit VirgilHash(const char* name);
94 
98 
103  std::string name() const;
104 
109  Algorithm algorithm() const;
110 
115  int type() const;
116 
121  size_t size() const;
123 
128 
139 
146 
150  void start();
151 
161  void update(const virgil::crypto::VirgilByteArray& data);
162 
171 
176 
188  const virgil::crypto::VirgilByteArray& data) const;
190 
197 
203 
207  void hmacReset();
208 
220 
230 
233  size_t asn1Write(
236  size_t childWrittenBytes = 0) const override;
237 
240 
241 public:
243  VirgilHash(VirgilHash&& rhs) noexcept;
244 
245  VirgilHash& operator=(VirgilHash&& rhs) noexcept;
246 
247  virtual ~VirgilHash() noexcept;
248 
249  VirgilHash(const VirgilHash& rhs);
250 
251  VirgilHash& operator=(const VirgilHash& rhs);
253 
254 private:
255  void checkState() const;
256 
257 private:
258  class Impl;
259 
260  std::unique_ptr<Impl> impl_;
261 };
262 
263 }}}
264 
265 namespace std {
272 }
273 
274 #endif /* VIRGIL_CRYPTO_FOUNDATION_VIRGIL_HASH_H */
void start()
Initialize hashing for the new message hash.
Algorithm
Enumerates possible Hash algorithms.
Definition: VirgilHash.h:57
This class provides methods for reading ASN.1 data structure.
Definition: VirgilAsn1Reader.h:53
std::string name() const
Returns name of the hash function.
virgil::crypto::VirgilByteArray hash(const virgil::crypto::VirgilByteArray &data) const
Produce hash.
This class provides interface that allow to save and restore object state in the ASN.1 structure.
Definition: VirgilAsn1Compatible.h:59
Provides hashing (message digest) algorithms.
Definition: VirgilHash.h:52
size_t asn1Write(virgil::crypto::foundation::asn1::VirgilAsn1Writer &asn1Writer, size_t childWrittenBytes=0) const override
Write object state to the writer.
Definition: VirgilHash.h:265
This class provides methods for writing ASN.1 data structure.
Definition: VirgilAsn1Writer.h:54
size_t size() const
Return size of the message digest output.
int type() const
Return underlying hash type.
VirgilHash()
Create object with undefined algorithm.
Root namespace for all Virgil Security libraries.
Definition: VirgilAsn1Compatible.h:46
void hmacUpdate(const virgil::crypto::VirgilByteArray &data)
Update / process message HMAC hash.
std::vector< unsigned char > VirgilByteArray
This type represents a sequence of bytes.
Definition: VirgilByteArray.h:54
string to_string(virgil::crypto::foundation::VirgilHash::Algorithm alg)
Returns string representation of the Hash algorithm.
void hmacReset()
Reset HMAC hashing for the new message hash.
void update(const virgil::crypto::VirgilByteArray &data)
Update / process message hash.
virgil::crypto::VirgilByteArray hmacFinish()
Return final message HMAC hash.
virgil::crypto::VirgilByteArray hmac(const virgil::crypto::VirgilByteArray &key, const virgil::crypto::VirgilByteArray &data) const
Produce HMAC hash.
void hmacStart(const virgil::crypto::VirgilByteArray &key)
Initialize HMAC hashing for the new message hash.
void asn1Read(virgil::crypto::foundation::asn1::VirgilAsn1Reader &asn1Reader) override
Read object state from the reader.
Algorithm algorithm() const
Returns algorithm of the hash function.
virgil::crypto::VirgilByteArray finish()
Return final message hash.