SEC: implement stackinit() functions to simplify initialization and composition of...
authorrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 24 Sep 2010 15:15:31 +0000 (15:15 +0000)
committerrasky <rasky@38d2e660-2303-0410-9eaa-f027e97ec537>
Fri, 24 Sep 2010 15:15:31 +0000 (15:15 +0000)
git-svn-id: https://src.develer.com/svnoss/bertos/trunk@4303 38d2e660-2303-0410-9eaa-f027e97ec537

bertos/sec/hash/md5.c
bertos/sec/hash/md5.h
bertos/sec/hash/sha1.h
bertos/sec/mac/hmac.h
bertos/sec/mac/hmac_test.c

index f139cd6ee7ded0c235640a0073f634276af1b432..8e89907b40084979e8da6b2f77acf9c95624b3b8 100644 (file)
@@ -94,7 +94,7 @@ static void MD5_update(Hash *h, const void* vbuf, size_t len)
  * Final wrapup - pad to 64-byte boundary with the bit pattern
  * 1 0* (64-bit count of bits processed, MSB-first)
  */
-uint8_t* MD5_final(struct Hash *h)
+static uint8_t* MD5_final(struct Hash *h)
 {
        MD5_Context *ctx = (MD5_Context *)h;
     unsigned count;
index c08a912b6ee3e5acacc1a4115c1ebae9e11dd62a..a6d886df3a3ec07fd0277b1f6830d5b10c3d861f 100644 (file)
  *
  * -->
  *
- * \brief SHA-1 Hashing algorithm.
+ * \brief MD5 Hashing algorithm.
  * \author Giovanni Bajo <rasky@develer.com>
  *
- * $WIZ$ module_name = "sha1"
+ * $WIZ$ module_name = "md5"
  */
 
 #ifndef SEC_HASH_MD5_H
@@ -41,6 +41,7 @@
 
 #include <sec/hash.h>
 #include <cfg/compiler.h>
+#include <alloca.h>
 
 typedef struct
 {
@@ -53,6 +54,9 @@ typedef struct
 
 void MD5_init(MD5_Context *ctx);
 
+#define MD5_stackinit(...) \
+       ({ MD5_Context *ctx = alloca(sizeof(MD5_Context)); MD5_init(ctx , ##__VA_ARGS__); &ctx->h; })
+
 int MD5_testSetup(void);
 int MD5_testRun(void);
 int MD5_testTearDown(void);
index 734779ab3e048524b62a86cd72b5b9762b7aefe3..eff7fa70df8fb9da8e95efb93c13c181a369306c 100644 (file)
@@ -41,6 +41,7 @@
 
 #include <cfg/compiler.h>
 #include <sec/hash.h>
+#include <alloca.h>
 
 /**
  * Context for SHA1 computation.
@@ -54,6 +55,9 @@ typedef struct {
 
 void SHA1_init(SHA1_Context *context);
 
+#define SHA1_stackinit(...) \
+       ({ SHA1_Context *ctx = alloca(sizeof(SHA1_Context)); SHA1_init(ctx, ##__VA_ARGS__); &ctx->h; })
+
 int SHA1_testSetup(void);
 int SHA1_testRun(void);
 int SHA1_testTearDown(void);
index c22a695b90b5330ac8b87acabeedffece54e0124..88de9fab135ebbd13bbfaffb4f789fd9ecaafa82 100644 (file)
@@ -40,6 +40,7 @@
 
 #include <sec/mac.h>
 #include <sec/hash.h>
+#include <alloca.h>
 
 typedef struct HMAC_Context
 {
@@ -50,6 +51,9 @@ typedef struct HMAC_Context
 
 void HMAC_init(HMAC_Context* hmac, Hash *h);
 
+#define HMAC_stackinit(...) \
+       ({ HMAC_Context *ctx = alloca(sizeof(HMAC_Context)); HMAC_init(ctx, ##__VA_ARGS__); &ctx->m; })
+
 int HMAC_testSetup(void);
 int HMAC_testRun(void);
 int HMAC_testTearDown(void);
index 8b1609643e9879582981bd041a8043ca94da30d1..29b6620ec7be278555d04c62da9fc2f9e5642283 100644 (file)
@@ -151,42 +151,24 @@ const struct Test_HMAC tests_hmac_sha1[] =
    },
 };
 
-static void algo_run_tests(HMAC_Context *hmac, const struct Test_HMAC *t, int count)
+static void algo_run_tests(Mac *mac, const struct Test_HMAC *t, int count)
 {
        for (int i=0; i<count; ++i, ++t)
        {
-               mac_set_key(&hmac->m, (const uint8_t*)t->key, t->key_len);
-               mac_begin(&hmac->m);
-               mac_update(&hmac->m, (const uint8_t*)t->data, t->data_len);
-               ASSERT(memcmp(mac_final(&hmac->m), t->digest, mac_digest_len(&hmac->m)) == 0);
+               mac_set_key(mac, (const uint8_t*)t->key, t->key_len);
+               mac_begin(mac);
+               mac_update(mac, (const uint8_t*)t->data, t->data_len);
+               ASSERT(memcmp(mac_final(mac), t->digest, mac_digest_len(mac)) == 0);
        }
 }
 
 int HMAC_testRun(void)
 {
-       if (1)
-       {
-               MD5_Context md5;
-               MD5_init(&md5);
-
-               HMAC_Context hmac;
-               HMAC_init(&hmac, &md5.h);
+       algo_run_tests(HMAC_stackinit(MD5_stackinit()),
+                                  tests_hmac_md5, countof(tests_hmac_md5));
 
-               algo_run_tests(&hmac, tests_hmac_md5, countof(tests_hmac_md5));
-       }
-
-       if (1)
-       {
-               SHA1_Context sha1;
-               SHA1_init(&sha1);
-
-               HMAC_Context hmac;
-               HMAC_init(&hmac, &sha1.h);
-
-               algo_run_tests(&hmac, tests_hmac_sha1, countof(tests_hmac_sha1));
-       }
-       
-       return 0;
+       algo_run_tests(HMAC_stackinit(SHA1_stackinit()),
+                                  tests_hmac_sha1, countof(tests_hmac_sha1));
 }
 
 TEST_MAIN(HMAC);