Add HMAC
authorbdemsky <bdemsky@uci.edu>
Fri, 2 Mar 2018 16:24:33 +0000 (08:24 -0800)
committerbdemsky <bdemsky@uci.edu>
Fri, 2 Mar 2018 16:24:33 +0000 (08:24 -0800)
version2/src/C/CloudComm.cc
version2/src/C/Crypto.cc
version2/src/C/Crypto.h
version2/src/C/Mac.h
version2/src/C/pbkdf2-sha256.cc
version2/src/C/pbkdf2-sha256.h

index b91fa4ad45d0542c2eb3fc1bbbccb14ea27a34ee..d1ba7cacb099dd2cb5eac26969c692302b383366 100644 (file)
@@ -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");
index e54d541afefbf66defb124fda213e5af6a36ed81..9b1da8608d0d8fb4ae9e208c4569ea8cf78975ec 100644 (file)
@@ -11,3 +11,7 @@ AESKey::AESKey(Array<char> *password, Array<char> *salt, int iterationCount, int
 AESKey::~AESKey() {
        delete key;
 }
+
+Array<char> * AESKey::getKey() {
+       return key;
+}
index 27c5b4c3b8eebb23b0f95920bb531cbae8fd925b..8f64573eb7c8639360452df3acd6b0f3bbd4de26 100644 (file)
@@ -6,6 +6,8 @@ class AESKey {
 public:
        AESKey(Array<char> *password, Array<char> *salt, int iterationCount, int keyLength);
        ~AESKey();
+       Array<char> * getKey();
+       
 private:
        Array<char> * key;
 };
index 67543f053fb878774a8538a658c9184f2905b7e1..cb6193bbe5a342491b3f8d8b09d2392458c3d3cc 100644 (file)
@@ -1,13 +1,15 @@
 #ifndef MAC_H
 #define MAC_H
 #include "common.h"
+#include "pbkdf2-sha256.h"
 
 class Mac {
 public:
+       Mac();
        void update(Array<char> *array, int32_t offset, int32_t len);
        Array<char> *doFinal();
        void init(AESKey *key);
+ private:
+       sha2_context ctx;
 };
-
-Mac *Mac_getInstance(const char *);
 #endif
index 9e201f86addc3702fceb740291ab7925d0c7e8fb..cd8abeb015178f75442e9399e9770fd39189eb6b 100644 (file)
 #include <stdlib.h>
 #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)
  */
index 9a79572360eb3488e6aedcb9b5e1c1972628899d..183ac256e7a6181aff5c3aede57737f8cce815a8 100644 (file)
@@ -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,