HashEngine.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * HashEngine.h
8  *
9  ****/
10 
11 #pragma once
12 
13 #include "HashApi.h"
14 
15 namespace Crypto
16 {
20 #define CRYPTO_HASH_ENGINE(class_, name_, hashsize_, statesize_, blocksize_) \
21  class class_##Engine \
22  { \
23  public: \
24  static constexpr const char* name = #name_; \
25  static constexpr size_t hashsize = hashsize_; \
26  static constexpr size_t statesize = statesize_; \
27  static constexpr size_t blocksize = blocksize_; \
28  \
29  void init() \
30  { \
31  CRYPTO_NAME(name_, init)(&ctx); \
32  } \
33  \
34  void update(const void* data, size_t size) \
35  { \
36  CRYPTO_NAME(name_, update)(&ctx, static_cast<const uint8_t*>(data), size); \
37  } \
38  \
39  void final(uint8_t* hash) \
40  { \
41  CRYPTO_NAME(name_, final)(hash, &ctx); \
42  } \
43  \
44  uint64_t get_state(void* state) \
45  { \
46  return CRYPTO_NAME(name_, get_state)(&ctx, state); \
47  } \
48  \
49  void set_state(const void* state, uint64_t count) \
50  { \
51  CRYPTO_NAME(name_, set_state)(&ctx, state, count); \
52  } \
53  \
54  private: \
55  CRYPTO_CTX(name_) ctx; \
56  };
57 
58 /*
59  * Engine definitions
60  */
61 
68 
69 } // namespace Crypto
#define MD5_STATESIZE
Definition: HashApi.h:47
#define MD5_SIZE
Definition: HashApi.h:46
HashContext< Sha512Engine > Sha512
Definition: HashContext.h:141
#define SHA512_SIZE
Definition: HashApi.h:226
#define SHA384_BLOCKSIZE
Definition: HashApi.h:201
#define SHA384_STATESIZE
Definition: HashApi.h:200
#define SHA224_SIZE
Definition: HashApi.h:157
void sha1(unsigned char h[SHA1_SIZE], const void *_sha1_restrict p, size_t n)
CRYPTO_HASH_ENGINE(Md5, md5, MD5_SIZE, MD5_STATESIZE, MD5_BLOCKSIZE)
#define MD5_BLOCKSIZE
Definition: HashApi.h:48
#define SHA256_BLOCKSIZE
Definition: HashApi.h:179
#define SHA256_STATESIZE
Definition: HashApi.h:178
#define SHA1_BLOCKSIZE
Definition: HashApi.h:104
HashContext< Sha384Engine > Sha384
Definition: HashContext.h:140
#define SHA224_BLOCKSIZE
Definition: HashApi.h:159
#define SHA384_SIZE
Definition: HashApi.h:199
#define SHA512_STATESIZE
Definition: HashApi.h:227
#define SHA1_STATESIZE
Definition: HashApi.h:103
HashContext< Sha224Engine > Sha224
Definition: HashContext.h:138
#define SHA1_SIZE
Definition: aw-sha1.h:34
#define SHA256_SIZE
Definition: HashApi.h:177
Definition: Blob.h:15
HashContext< Sha1Engine > Sha1
Definition: HashContext.h:137
HashContext< Md5Engine > Md5
Definition: HashContext.h:136
HashContext< Sha256Engine > Sha256
Definition: HashContext.h:139
#define SHA512_BLOCKSIZE
Definition: HashApi.h:228
#define SHA224_STATESIZE
Definition: HashApi.h:158