From: bdemsky Date: Fri, 2 Mar 2018 16:24:33 +0000 (-0800) Subject: Add HMAC X-Git-Url: http://plrg.eecs.uci.edu/git/?p=iotcloud.git;a=commitdiff_plain;h=ae6d8d36583fe41457d67d92186891ba9030e547;ds=sidebyside Add HMAC --- diff --git a/version2/src/C/CloudComm.cc b/version2/src/C/CloudComm.cc index b91fa4a..d1ba7ca 100644 --- a/version2/src/C/CloudComm.cc +++ b/version2/src/C/CloudComm.cc @@ -97,7 +97,7 @@ void CloudComm::initCrypt() { try { key = initKey(); password = NULL;// drop password - mac = Mac_getInstance("HmacSHA256"); + mac = new Mac(); mac->init(key); } catch (Exception *e) { throw new Error("Failed To Initialize Ciphers"); diff --git a/version2/src/C/Crypto.cc b/version2/src/C/Crypto.cc index e54d541..9b1da86 100644 --- a/version2/src/C/Crypto.cc +++ b/version2/src/C/Crypto.cc @@ -11,3 +11,7 @@ AESKey::AESKey(Array *password, Array *salt, int iterationCount, int AESKey::~AESKey() { delete key; } + +Array * AESKey::getKey() { + return key; +} diff --git a/version2/src/C/Crypto.h b/version2/src/C/Crypto.h index 27c5b4c..8f64573 100644 --- a/version2/src/C/Crypto.h +++ b/version2/src/C/Crypto.h @@ -6,6 +6,8 @@ class AESKey { public: AESKey(Array *password, Array *salt, int iterationCount, int keyLength); ~AESKey(); + Array * getKey(); + private: Array * key; }; diff --git a/version2/src/C/Mac.h b/version2/src/C/Mac.h index 67543f0..cb6193b 100644 --- a/version2/src/C/Mac.h +++ b/version2/src/C/Mac.h @@ -1,13 +1,15 @@ #ifndef MAC_H #define MAC_H #include "common.h" +#include "pbkdf2-sha256.h" class Mac { public: + Mac(); void update(Array *array, int32_t offset, int32_t len); Array *doFinal(); void init(AESKey *key); + private: + sha2_context ctx; }; - -Mac *Mac_getInstance(const char *); #endif diff --git a/version2/src/C/pbkdf2-sha256.cc b/version2/src/C/pbkdf2-sha256.cc index 9e201f8..cd8abeb 100644 --- a/version2/src/C/pbkdf2-sha256.cc +++ b/version2/src/C/pbkdf2-sha256.cc @@ -33,16 +33,6 @@ #include #include "pbkdf2-sha256.h" -typedef struct { - unsigned long total[2]; /*!< number of bytes processed */ - unsigned long state[8]; /*!< intermediate digest state */ - unsigned char buffer[64]; /*!< data block being processed */ - - unsigned char ipad[64]; /*!< HMAC: inner padding */ - unsigned char opad[64]; /*!< HMAC: outer padding */ - int is224; /*!< 0 => SHA-256, else SHA-224 */ -} sha2_context; - /* * 32-bit integer manipulation macros (big endian) */ diff --git a/version2/src/C/pbkdf2-sha256.h b/version2/src/C/pbkdf2-sha256.h index 9a79572..183ac25 100644 --- a/version2/src/C/pbkdf2-sha256.h +++ b/version2/src/C/pbkdf2-sha256.h @@ -1,6 +1,25 @@ #ifndef PBKDF2_SHA256_H #define PBKDF2_SHA256_H +typedef struct { + unsigned long total[2]; /*!< number of bytes processed */ + unsigned long state[8]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ + + unsigned char ipad[64]; /*!< HMAC: inner padding */ + unsigned char opad[64]; /*!< HMAC: outer padding */ + int is224; /*!< 0 => SHA-256, else SHA-224 */ +} sha2_context; + +void sha2_starts( sha2_context *ctx, int is224 ); +void sha2_update( sha2_context *ctx, const unsigned char *input, size_t ilen ); +void sha2_finish( sha2_context *ctx, unsigned char output[32] ); + +void sha2_hmac_starts( sha2_context *ctx, const unsigned char *key, size_t keylen, int is224 ); +void sha2_hmac_update( sha2_context *ctx, const unsigned char *input, size_t ilen ); +void sha2_hmac_finish( sha2_context *ctx, unsigned char output[32] ); + + void PKCS5_PBKDF2_HMAC(unsigned char *password, size_t plen, unsigned char *salt, size_t slen, const unsigned long iteration_count, const unsigned long key_length,