Make function to test if an encryption algorithm is an AEAD alg public
authorMartin Willi <martin@revosec.ch>
Tue, 17 Aug 2010 15:27:21 +0000 (17:27 +0200)
committerMartin Willi <martin@revosec.ch>
Thu, 19 Aug 2010 17:02:16 +0000 (19:02 +0200)
src/libcharon/config/proposal.c
src/libstrongswan/crypto/crypters/crypter.c
src/libstrongswan/crypto/crypters/crypter.h

index e19ee97..0dc29f5 100644 (file)
@@ -254,28 +254,6 @@ static void strip_dh(private_proposal_t *this)
 }
 
 /**
- * Returns true if the given alg is an authenticated encryption algorithm
- */
-static bool is_authenticated_encryption(u_int16_t alg)
-{
-       switch(alg)
-       {
-               case ENCR_AES_CCM_ICV8:
-               case ENCR_AES_CCM_ICV12:
-               case ENCR_AES_CCM_ICV16:
-               case ENCR_AES_GCM_ICV8:
-               case ENCR_AES_GCM_ICV12:
-               case ENCR_AES_GCM_ICV16:
-               case ENCR_CAMELLIA_CCM_ICV8:
-               case ENCR_CAMELLIA_CCM_ICV12:
-               case ENCR_CAMELLIA_CCM_ICV16:
-               case ENCR_NULL_AUTH_AES_GMAC:
-                       return TRUE;
-       }
-       return FALSE;
-}
-
-/**
  * Find a matching alg/keysize in two linked lists
  */
 static bool select_algo(linked_list_t *first, linked_list_t *second, bool priv,
@@ -366,7 +344,7 @@ static proposal_t *select_proposal(private_proposal_t *this,
                return NULL;
        }
        /* select integrity algorithm */
-       if (!is_authenticated_encryption(algo))
+       if (!encryption_algorithm_is_aead(algo))
        {
                if (select_algo(this->integrity_algos, other->integrity_algos, private,
                                                &add, &algo, &key_size))
@@ -565,7 +543,7 @@ static void check_proposal(private_proposal_t *this)
        e = this->encryption_algos->create_enumerator(this->encryption_algos);
        while (e->enumerate(e, &alg))
        {
-               if (!is_authenticated_encryption(alg->algorithm))
+               if (!encryption_algorithm_is_aead(alg->algorithm))
                {
                        all_aead = FALSE;
                        break;
index ebd35a8..0730c70 100644 (file)
@@ -159,4 +159,25 @@ int encryption_algorithm_to_oid(encryption_algorithm_t alg, size_t key_size)
        return oid;
 }
 
-
+/*
+ * Described in header.
+ */
+bool encryption_algorithm_is_aead(encryption_algorithm_t alg)
+{
+       switch (alg)
+       {
+               case ENCR_AES_CCM_ICV8:
+               case ENCR_AES_CCM_ICV12:
+               case ENCR_AES_CCM_ICV16:
+               case ENCR_AES_GCM_ICV8:
+               case ENCR_AES_GCM_ICV12:
+               case ENCR_AES_GCM_ICV16:
+               case ENCR_NULL_AUTH_AES_GMAC:
+               case ENCR_CAMELLIA_CCM_ICV8:
+               case ENCR_CAMELLIA_CCM_ICV12:
+               case ENCR_CAMELLIA_CCM_ICV16:
+                       return TRUE;
+               default:
+                       return FALSE;
+       }
+}
index 6596d46..3bf0396 100644 (file)
@@ -170,4 +170,12 @@ encryption_algorithm_t encryption_algorithm_from_oid(int oid, size_t *key_size);
  */
 int encryption_algorithm_to_oid(encryption_algorithm_t alg, size_t key_size);
 
+/**
+ * Check if an encryption algorithm identifier is an AEAD algorithm.
+ *
+ * @param alg                  algorithm identifier
+ * @return                             TRUE if it is an AEAD algorithm
+ */
+bool encryption_algorithm_is_aead(encryption_algorithm_t alg);
+
 #endif /** CRYPTER_H_ @}*/