Added new parameters HMAC_DIGEST_TYPE to the save capability.
authorFranck Joncourt <franck@debian.org>
Sat, 9 Mar 2013 11:39:05 +0000 (12:39 +0100)
committerFranck Joncourt <franck@debian.org>
Sat, 9 Mar 2013 11:39:05 +0000 (12:39 +0100)
client/config_init.c
lib/fko_util.c
lib/fko_util.h

index ec4bdb2..6bd9616 100644 (file)
@@ -30,7 +30,6 @@
  */
 
 /* FIXME: Finish save capability.
- *        SPAC_ICMP_TYPE and ICMP_SPA_CODE are not stored in the stanza
  */
 
 #include "fwknop_common.h"
@@ -69,6 +68,7 @@ enum
     FWKNOP_CLI_ARG_RAND_PORT,
     FWKNOP_CLI_ARG_KEY_RIJNDAEL,
     FWKNOP_CLI_ARG_KEY_RIJNDAEL_BASE64,
+    FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE,
     FWKNOP_CLI_ARG_KEY_HMAC_BASE64,
     FWKNOP_CLI_ARG_KEY_FILE,
     FWKNOP_CLI_ARG_NAT_ACCESS,
@@ -102,6 +102,7 @@ const char* fwknop_cli_key_tab[FWKNOP_CLI_ARG_NB] =
     "RAND_PORT",
     "KEY",
     "KEY_BASE64",
+    "HMAC_DIGEST_TYPE",
     "HMAC_KEY_BASE64",
     "KEY_FILE",
     "NAT_ACCESS",
@@ -736,6 +737,9 @@ add_rc_param(FILE* fhandle, uint16_t arg_ndx, fko_cli_options_t *options)
         case FWKNOP_CLI_ARG_KEY_HMAC_BASE64:
             strlcpy(val, options->hmac_key_base64, sizeof(val));
             break;
+        case FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE :
+            hmac_digest_inttostr(options->hmac_type, val, sizeof(val));
+            break;
         case FWKNOP_CLI_ARG_NAT_ACCESS :
             strlcpy(val, options->nat_access_str, sizeof(val));
             break;
@@ -1378,6 +1382,7 @@ config_init(fko_cli_options_t *options, int argc, char **argv)
                     optarg);
                     exit(EXIT_FAILURE);
                 }
+                cli_arg_bitmask |= FWKNOP_CLI_ARG_BM(FWKNOP_CLI_ARG_HMAC_DIGEST_TYPE);
                 break;
             case HMAC_KEY_LEN:
                 options->hmac_key_len = strtol_wrapper(optarg, 1,
index 1ae3f56..1052609 100644 (file)
@@ -106,6 +106,7 @@ digest_inttostr(int digest, char* digest_str, size_t digest_size)
 
     return digest_not_valid;
 }
+
 short
 hmac_digest_strtoint(const char *dt_str)
 {
@@ -123,6 +124,50 @@ hmac_digest_strtoint(const char *dt_str)
         return(-1);
 }
 
+/**
+ * \brief Return a hmac digest string according to a hmac digest integer value
+ *
+ * This function checks if the digest integer is valid, and write the digest
+ * string associated.
+ *
+ * \param digest Digest inetger value (FKO_HMAC_MD5, FKO_HMAC_SHA1 ...)
+ * \param digest_str Buffer to write the digest string
+ * \param digest_size size of the digest string buffer
+ *
+ * \return -1 if the digest integer value is not supported, 0 otherwise
+ */
+short
+hmac_digest_inttostr(int digest, char* digest_str, size_t digest_size)
+{
+    short digest_not_valid = 0;
+
+    memset(digest_str, 0, digest_size);
+
+    switch (digest)
+    {
+        case FKO_HMAC_MD5:
+            strlcpy(digest_str, "MD5", digest_size);
+            break;
+        case FKO_HMAC_SHA1:
+            strlcpy(digest_str, "SHA1", digest_size);
+            break;
+        case FKO_HMAC_SHA256:
+            strlcpy(digest_str, "SHA256", digest_size);
+            break;
+        case FKO_HMAC_SHA384:
+            strlcpy(digest_str, "SHA384", digest_size);
+            break;
+        case FKO_HMAC_SHA512:
+            strlcpy(digest_str, "SHA512", digest_size);
+            break;
+        default:
+            digest_not_valid = -1;
+            break;
+    }
+
+    return digest_not_valid;
+}
+
 /* Validate plaintext input size
 */
 int
index 2a23435..dc62942 100644 (file)
@@ -43,6 +43,7 @@ int     strtol_wrapper(const char * const str, const int min,
 short   digest_strtoint(const char *dt_str);
 short   digest_inttostr(int digest, char* digest_str, size_t digest_size);
 short   hmac_digest_strtoint(const char *dt_str);
+short   hmac_digest_inttostr(int digest, char* digest_str, size_t digest_size);
 
 size_t  strlcat(char *dst, const char *src, size_t siz);
 size_t  strlcpy(char *dst, const char *src, size_t siz);