First round if refactoring to clean up header dependencies.
authorDamien Stuart <dstuart@dstuart.org>
Sat, 2 Mar 2013 22:03:20 +0000 (17:03 -0500)
committerDamien Stuart <dstuart@dstuart.org>
Sat, 2 Mar 2013 22:03:20 +0000 (17:03 -0500)
27 files changed:
client/fwknop.c
client/fwknop_common.h
client/utils.h
common/common.h
configure.ac
lib/base64.c
lib/base64.h
lib/cipher_funcs.c
lib/cipher_funcs.h
lib/digest.c
lib/digest.h
lib/fko.h
lib/fko_common.h
lib/fko_context.h
lib/fko_encryption.c
lib/fko_hmac.c
lib/fko_util.c
lib/fko_util.h
lib/gpgme_funcs.h
lib/md5.h
lib/rijndael.c
lib/rijndael.h
lib/sha1.h
lib/sha2.h
server/access.c
server/incoming_spa.c
server/utils.h

index e77c76d..861a76a 100644 (file)
  *
  *****************************************************************************
 */
+#include "fko.h"
 #include "fwknop.h"
 #include "config_init.h"
 #include "spa_comm.h"
 #include "utils.h"
 #include "getpasswd.h"
+
+#include "digest.h"
+#include "rijndael.h"
+
 #include <sys/stat.h>
 #include <fcntl.h>
 
+
 /* prototypes
 */
 static void get_keys(fko_ctx_t ctx, fko_cli_options_t *options,
@@ -61,13 +67,14 @@ static void clean_exit(fko_ctx_t ctx, fko_cli_options_t *opts,
 int
 main(int argc, char **argv)
 {
-    fko_ctx_t           ctx = NULL, ctx2 = NULL;
+    fko_ctx_t           ctx = NULL;
+    fko_ctx_t           ctx2 = NULL;
     int                 res;
     char               *spa_data, *version;
     char                access_buf[MAX_LINE_LEN] = {0};
     char                key[MAX_KEY_LEN+1]       = {0};
     char                hmac_key[MAX_KEY_LEN+1]  = {0};
-    int                 key_len = 0, hmac_key_len = 0;
+    int                 key_len = 0, hmac_key_len = 0, enc_mode;
     FILE               *key_gen_file_ptr = NULL;
 
     fko_cli_options_t   options;
@@ -402,6 +409,17 @@ main(int argc, char **argv)
             return(EXIT_FAILURE);
         }
 
+        /* Pull the encryption mode.
+        */
+        res = fko_get_spa_encryption_mode(ctx, &enc_mode);
+        if(res != FKO_SUCCESS)
+        {
+            errmsg("fko_get_spa_encryption_mode", res);
+            fko_destroy(ctx);
+            fko_destroy(ctx2);
+            return(EXIT_FAILURE);
+        }
+
         /* If gpg-home-dir is specified, we have to defer decrypting if we
          * use the fko_new_with_data() function because we need to set the
          * gpg home dir after the context is created, but before we attempt
@@ -411,7 +429,7 @@ main(int argc, char **argv)
          * options, then decode it.
         */
         res = fko_new_with_data(&ctx2, spa_data, NULL,
-            0, ctx->encryption_mode, hmac_key, hmac_key_len);
+            0, enc_mode, hmac_key, hmac_key_len);
         if(res != FKO_SUCCESS)
         {
             errmsg("fko_new_with_data", res);
@@ -420,7 +438,7 @@ main(int argc, char **argv)
             return(EXIT_FAILURE);
         }
 
-        res = fko_set_spa_encryption_mode(ctx2, ctx->encryption_mode);
+        res = fko_set_spa_encryption_mode(ctx2, enc_mode);
         if(res != FKO_SUCCESS)
         {
             errmsg("fko_set_spa_encryption_mode", res);
@@ -919,7 +937,7 @@ get_keys(fko_ctx_t ctx, fko_cli_options_t *options,
     {
         *hmac_key_len = fko_base64_decode(options->hmac_key_base64,
             (unsigned char *) options->hmac_key);
-        memcpy(hmac_key, options->hmac_key, SHA256_BLOCK_LEN);
+        memcpy(hmac_key, options->hmac_key, *hmac_key_len);
         use_hmac = 1;
     }
     else if (options->use_hmac)
index 01915f1..4367ae8 100644 (file)
@@ -32,6 +32,7 @@
 #define FWKNOP_COMMON_H
 
 #include "common.h"
+#include "fko_limits.h"
 
 /* My Name and Version
 */
index 20a7512..b3156fe 100644 (file)
@@ -42,7 +42,4 @@ int is_base64(const unsigned char *buf, const unsigned short int len);
 int set_file_perms(const char *file);
 int verify_file_perms_ownership(const char *file);
 
-size_t strlcat(char *dst, const char *src, size_t siz);
-size_t strlcpy(char *dst, const char *src, size_t siz);
-
 #endif  /* UTILS_H */
index 96ad4c4..f1205db 100644 (file)
 
 #include "fko.h"
 #include "fko_limits.h"
+#include "fko_util.h"
 
 /* Get our program version from VERSION (defined in config.h).
 */
index 79d352a..a45a031 100644 (file)
@@ -11,7 +11,7 @@ AC_PREREQ(2.62)
 
 dnl Define our name, version and email.
 m4_define(my_package,   [fwknop])
-m4_define(my_version,   [2.0.4])
+m4_define(my_version,   [2.5.0b])
 m4_define(my_bug_email, [dstuart@dstuart.org])
 
 AC_INIT(my_package, my_version, my_bug_email)
index 9ae8fb8..4dc50e7 100644 (file)
@@ -31,6 +31,7 @@
  *****************************************************************************
 */
 #include "base64.h"
+#include "fko_common.h"
 
 static unsigned char map2[] =
 {
index 85ab1f6..5c449f7 100644 (file)
@@ -31,8 +31,6 @@
 #ifndef BASE64_H
 #define BASE64_H 1
 
-#include "fko_common.h"
-
 /* Prototypes
 */
 int b64_encode(unsigned char *in, char *out, int in_len);
index 09fad5b..2ea3aa1 100644 (file)
@@ -39,6 +39,7 @@
   #include <sys/time.h>
 #endif
 
+#include "fko_common.h"
 #include "cipher_funcs.h"
 #include "digest.h"
 
index 06d1835..151d440 100644 (file)
@@ -31,7 +31,7 @@
 #ifndef CIPHER_FUNCS_H
 #define CIPHER_FUNCS_H 1
 
-#include "fko_common.h"
+#include "fko.h"
 #include "rijndael.h"
 #include "gpgme_funcs.h"
 
index 5eaaf85..4987d8c 100644 (file)
  *
  *****************************************************************************
 */
+#include "fko_common.h"
 #include "digest.h"
 #include "base64.h"
 
+
 /* Convert a raw digest into its hex string representation.
 */
 static void
index 4716209..b948ac2 100644 (file)
@@ -31,8 +31,6 @@
 #ifndef DIGEST_H
 #define DIGEST_H 1
 
-#include "fko_common.h"
-
 #include "md5.h"
 #include "sha1.h"
 #include "sha2.h"
 */
 #define MD_HEX_SIZE(x) x * 2
 
-/* Predefined base64 encoded digest sizes.
-*/
-#define MD5_B64_LEN      22
-#define SHA1_B64_LEN     27
-#define SHA256_B64_LEN   43
-#define SHA384_B64_LEN   64
-#define SHA512_B64_LEN   86
-
 void md5(unsigned char* out, unsigned char* in, size_t size);
 void md5_hex(char* out, unsigned char* in, size_t size);
 void md5_base64(char* out, unsigned char* in, size_t size);
index b3efe88..4ef7eb3 100644 (file)
--- a/lib/fko.h
+++ b/lib/fko.h
@@ -33,9 +33,6 @@
 
 #include <time.h>
 
-#include "rijndael.h"   /* For encryption modes */
-#include "digest.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -111,12 +108,12 @@ typedef enum {
 */
 typedef enum {
     FKO_ENC_MODE_UNKNOWN = 0,
-    FKO_ENC_MODE_ECB  = MODE_ECB,
-    FKO_ENC_MODE_CBC  = MODE_CBC,
-    FKO_ENC_MODE_CFB  = MODE_CFB,
-    FKO_ENC_MODE_PCBC = MODE_PCBC,
-    FKO_ENC_MODE_OFB  = MODE_OFB,
-    FKO_ENC_MODE_CTR  = MODE_CTR,
+    FKO_ENC_MODE_ECB, //  = MODE_ECB,
+    FKO_ENC_MODE_CBC, //  = MODE_CBC,
+    FKO_ENC_MODE_CFB, //  = MODE_CFB,
+    FKO_ENC_MODE_PCBC, // = MODE_PCBC,
+    FKO_ENC_MODE_OFB, //  = MODE_OFB,
+    FKO_ENC_MODE_CTR, //  = MODE_CTR,
     FKO_ENC_MODE_ASYMMETRIC,  /* placeholder when GPG is used */
     FKO_ENC_MODE_CBC_LEGACY_IV,  /* for the old zero-padding strategy */
     FKO_LAST_ENC_MODE /* Always leave this as the last one */
index fdf3bb9..000cbfe 100644 (file)
   #define END_C_DECLS
 #endif /* __cplusplus */
 
-/* Pull in gpgme.h if we have it.
-*/
-#if HAVE_LIBGPGME
-  #include <gpgme.h>
-#endif
-
 #include "fko_util.h"
 #include "fko_limits.h"
 #include "fko_state.h"
index e1401de..fe248bd 100644 (file)
 #include "fko_common.h"
 
 #if HAVE_LIBGPGME
+  #include <gpgme.h>
+#endif
+#if HAVE_LIBGPGME
 /* Stucture to hold a list of the gpg signature information
  * we are interested in.
 */
index 0a7d1e6..3d2db7e 100644 (file)
@@ -32,6 +32,7 @@
 #include "fko.h"
 #include "cipher_funcs.h"
 #include "base64.h"
+#include "digest.h"
 
 #if HAVE_LIBGPGME
   #include "gpgme_funcs.h"
@@ -54,8 +55,21 @@ _rijndael_encrypt(fko_ctx_t ctx, const char *enc_key, const int enc_key_len)
     if (! is_valid_encoded_msg_len(ctx->encoded_msg_len))
         return(FKO_ERROR_INVALID_DATA);
 
-    if (! is_valid_digest_len(ctx->digest_len))
-        return(FKO_ERROR_INVALID_DATA);
+    switch(ctx->digest_len)
+    {
+        case MD5_B64_LEN:
+            break;
+        case SHA1_B64_LEN:
+            break;
+        case SHA256_B64_LEN:
+            break;
+        case SHA384_B64_LEN:
+            break;
+        case SHA512_B64_LEN:
+            break;
+        default:
+            return(FKO_ERROR_INVALID_DATA);
+    }
 
     pt_len = ctx->encoded_msg_len + ctx->digest_len + RIJNDAEL_BLOCKSIZE + 2;
 
@@ -217,8 +231,21 @@ gpg_encrypt(fko_ctx_t ctx, const char *enc_key)
     if (! is_valid_encoded_msg_len(ctx->encoded_msg_len))
         return(FKO_ERROR_INVALID_DATA);
 
-    if (! is_valid_digest_len(ctx->digest_len))
-        return(FKO_ERROR_INVALID_DATA);
+    switch(ctx->digest_len)
+    {
+        case MD5_B64_LEN:
+            break;
+        case SHA1_B64_LEN:
+            break;
+        case SHA256_B64_LEN:
+            break;
+        case SHA384_B64_LEN:
+            break;
+        case SHA512_B64_LEN:
+            break;
+        default:
+            return(FKO_ERROR_INVALID_DATA);
+    }
 
     /* First make sure we have a recipient key set.
     */
index 3280938..ec90d44 100644 (file)
@@ -174,8 +174,21 @@ int fko_calculate_hmac(fko_ctx_t ctx,
 
     free(hmac_base64);
 
-    if(! is_valid_digest_len(ctx->msg_hmac_len))
-        return(FKO_ERROR_INVALID_DATA);
+    switch(ctx->msg_hmac_len)
+    {
+        case MD5_B64_LEN:
+            break;
+        case SHA1_B64_LEN:
+            break;
+        case SHA256_B64_LEN:
+            break;
+        case SHA384_B64_LEN:
+            break;
+        case SHA512_B64_LEN:
+            break;
+        default:
+            return(FKO_ERROR_INVALID_DATA);
+    }
 
     return FKO_SUCCESS;
 }
index e1ad989..712feee 100644 (file)
@@ -30,6 +30,7 @@
 */
 #include "fko_common.h"
 #include "fko.h"
+#include "fko_util.h"
 #include <errno.h>
 
 /* Validate encoded message length
@@ -54,30 +55,6 @@ is_valid_pt_msg_len(const int len)
     return(1);
 }
 
-/* Validate digest length
-*/
-int
-is_valid_digest_len(const int len)
-{
-    switch(len)
-    {
-        case MD5_B64_LEN:
-            break;
-        case SHA1_B64_LEN:
-            break;
-        case SHA256_B64_LEN:
-            break;
-        case SHA384_B64_LEN:
-            break;
-        case SHA512_B64_LEN:
-            break;
-        default:
-            return(0);
-    }
-
-    return(1);
-}
-
 int
 strtol_wrapper(const char * const str, const int min,
     const int max, const int exit_upon_err, int *err)
index e0017b2..5072181 100644 (file)
@@ -31,8 +31,6 @@
 #ifndef FKO_UTIL_H
 #define FKO_UTIL_H 1
 
-#include "fko_common.h"
-
 /* Function prototypes
 */
 int is_valid_encoded_msg_len(const int len);
index 557a968..c8e3071 100644 (file)
 #ifndef GPGME_FUNCS_H
 #define GPGME_FUNCS_H 1
 
-#include "fko_common.h"
+#if HAVE_LIBGPGME
+  #include <gpgme.h>
+#endif
+
 #include "fko.h"
 
 int gpgme_encrypt(fko_ctx_t ctx, unsigned char *in, size_t len, const char *pw, unsigned char **out, size_t *out_len);
index e9113e8..b6acb99 100644 (file)
--- a/lib/md5.h
+++ b/lib/md5.h
 #ifndef MD5_H
 #define MD5_H 1
 
-#include "fko_common.h"
+#include "common.h"
 
 #define MD5_DIGEST_LEN 16
+#define MD5_B64_LEN    22
 
 typedef struct _MD5Context {
         uint32_t buf[4];
index 2d6e450..9fb4954 100644 (file)
@@ -28,6 +28,7 @@
  *
  *****************************************************************************
 */
+#include "fko_common.h"
 #include "rijndael.h"
 #include <stdlib.h>
 #include <string.h>
index 691ce82..3837de8 100644 (file)
  * 128, 192, or 256 bits, designed by Joan Daemen and Vincent Rijmen.  See
  * http://www.esat.kuleuven.ac.be/~rijmen/rijndael/ for details.
  */
-
 #ifndef RIJNDAEL_H
 #define RIJNDAEL_H 1
 
-#include "fko_common.h"
+#include "common.h"
 
 /* Other block sizes and key lengths are possible, but in the context of
  * the ssh protocols, 256 bits is the default.
index 85e5bbc..dfa1e88 100644 (file)
@@ -32,7 +32,7 @@
 #ifndef SHA1_H
 #define SHA1_H 1
 
-#include "fko_common.h"
+#include "common.h"
 
 #ifdef WIN32
   #define BYTEORDER 1234
@@ -46,6 +46,7 @@
 
 #define SHA1_BLOCKSIZE      64
 #define SHA1_DIGEST_LEN     20
+#define SHA1_B64_LEN        27
 
 typedef struct {
     uint32_t    digest[8];
index ee4a286..17801ba 100644 (file)
@@ -43,7 +43,7 @@
 extern "C" {
 #endif
 
-#include "fko_common.h"
+#include "common.h"
 
 /*
  * Import u_intXX_t size_t type definitions from system headers.  You
@@ -70,12 +70,15 @@ extern "C" {
 #define SHA256_BLOCK_LEN        64
 #define SHA256_DIGEST_LEN       32
 #define SHA256_DIGEST_STR_LEN   (SHA256_DIGEST_LEN * 2 + 1)
+#define SHA256_B64_LEN          43
 #define SHA384_BLOCK_LEN        128
 #define SHA384_DIGEST_LEN       48
 #define SHA384_DIGEST_STR_LEN   (SHA384_DIGEST_LEN * 2 + 1)
+#define SHA384_B64_LEN          64
 #define SHA512_BLOCK_LEN        128
 #define SHA512_DIGEST_LEN       64
 #define SHA512_DIGEST_STR_LEN   (SHA512_DIGEST_LEN * 2 + 1)
+#define SHA512_B64_LEN          86
 
 
 /*** SHA-256/384/512 Context Structures *******************************/
index bf2726f..d2d95e5 100644 (file)
@@ -40,6 +40,7 @@
 #include "access.h"
 #include "utils.h"
 #include "log_msg.h"
+#include "rijndael.h"
 
 /* Add an access string entry
 */
index fa8b304..bec5916 100644 (file)
@@ -43,6 +43,7 @@
 #include "fw_util.h"
 #include "fwknopd_errors.h"
 #include "replay_cache.h"
+#include "rijndael.h"
 
 /* Validate and in some cases preprocess/reformat the SPA data.  Return an
  * error code value if there is any indication the data is not valid spa data.
index 1d4942e..5ab8c6b 100644 (file)
@@ -64,7 +64,4 @@ int is_base64(const unsigned char *buf, const unsigned short int len);
 int is_valid_dir(const char *path);
 int verify_file_perms_ownership(const char *file);
 
-size_t strlcat(char *dst, const char *src, size_t siz);
-size_t strlcpy(char *dst, const char *src, size_t siz);
-
 #endif  /* UTILS_H */