Function added to convert a hash algorithm to an HMAC integrity algorithm
authorTobias Brunner <tobias@strongswan.org>
Thu, 11 Apr 2013 17:41:48 +0000 (19:41 +0200)
committerTobias Brunner <tobias@strongswan.org>
Wed, 8 May 2013 13:02:39 +0000 (15:02 +0200)
src/libstrongswan/crypto/hashers/hasher.c
src/libstrongswan/crypto/hashers/hasher.h

index dc73d52..4ed48ba 100644 (file)
@@ -180,6 +180,72 @@ hash_algorithm_t hasher_algorithm_from_integrity(integrity_algorithm_t alg,
 /*
  * Described in header.
  */
+integrity_algorithm_t hasher_algorithm_to_integrity(hash_algorithm_t alg,
+                                                                                                       size_t length)
+{
+       switch (alg)
+       {
+               case HASH_MD5:
+                       switch (length)
+                       {
+                               case 12:
+                                       return AUTH_HMAC_MD5_96;
+                               case 16:
+                                       return AUTH_HMAC_MD5_128;
+                       }
+                       break;
+               case HASH_SHA1:
+               case HASH_PREFERRED:
+                       switch (length)
+                       {
+                               case 12:
+                                       return AUTH_HMAC_SHA1_96;
+                               case 16:
+                                       return AUTH_HMAC_SHA1_128;
+                               case 20:
+                                       return AUTH_HMAC_SHA1_160;
+                       }
+                       break;
+               case HASH_SHA256:
+                       switch (length)
+                       {
+                               case 12:
+                                       return AUTH_HMAC_SHA2_256_96;
+                               case 16:
+                                       return AUTH_HMAC_SHA2_256_128;
+                               case 32:
+                                       return AUTH_HMAC_SHA2_256_256;
+                       }
+                       break;
+               case HASH_SHA384:
+                       switch (length)
+                       {
+                               case 24:
+                                       return AUTH_HMAC_SHA2_384_192;
+                               case 48:
+                                       return AUTH_HMAC_SHA2_384_384;
+
+                       }
+                       break;
+               case HASH_SHA512:
+                       switch (length)
+                       {
+                               case 32:
+                                       return AUTH_HMAC_SHA2_512_256;
+                       }
+                       break;
+               case HASH_MD2:
+               case HASH_MD4:
+               case HASH_SHA224:
+               case HASH_UNKNOWN:
+                       break;
+       }
+       return AUTH_UNDEFINED;
+}
+
+/*
+ * Described in header.
+ */
 int hasher_algorithm_to_oid(hash_algorithm_t alg)
 {
        int oid;
index 759f6a2..4e46fca 100644 (file)
@@ -154,6 +154,17 @@ hash_algorithm_t hasher_algorithm_from_integrity(integrity_algorithm_t alg,
                                                                                                 size_t *length);
 
 /**
+ * Conversion of hash algorithm to integrity algorithm (if based on a hash).
+ *
+ * @param alg                  hash algorithm
+ * @param length               length of the signature
+ * @return                             integrity algorithm, AUTH_UNDEFINED if none is known
+ *                                             based on the given hash function
+ */
+integrity_algorithm_t hasher_algorithm_to_integrity(hash_algorithm_t alg,
+                                                                                                       size_t length);
+
+/**
  * Conversion of hash algorithm into ASN.1 OID.
  *
  * @param alg                  hash algorithm