]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Remove support for MD2
authorTobias Brunner <tobias@strongswan.org>
Tue, 23 Sep 2025 12:59:37 +0000 (14:59 +0200)
committerTobias Brunner <tobias@strongswan.org>
Tue, 23 Sep 2025 13:59:35 +0000 (15:59 +0200)
No part of IKE/IPsec or X.509 uses MD2 anymore, so there really is no
reason to still support it (unlike MD4 that is used in EAP-MSCHAPv2,
MD5 that's used in EAP-MD5, or SHA-1 that's used for e.g. NAT-D hashes).

It caused test vectors to fail on systems where OpenSSL is built with
MD2 support but has it disabled at runtime.

13 files changed:
src/libstrongswan/asn1/oid.txt
src/libstrongswan/credentials/containers/pkcs12.c
src/libstrongswan/crypto/hashers/hasher.c
src/libstrongswan/crypto/hashers/hasher.h
src/libstrongswan/crypto/xofs/xof.c
src/libstrongswan/plugins/gcrypt/gcrypt_hasher.c
src/libstrongswan/plugins/openssl/openssl_plugin.c
src/libstrongswan/plugins/pkcs11/pkcs11_hasher.c
src/libstrongswan/plugins/pkcs11/pkcs11_plugin.c
src/libstrongswan/plugins/test_vectors/Makefile.am
src/libstrongswan/plugins/test_vectors/test_vectors.h
src/libstrongswan/plugins/test_vectors/test_vectors/md2.c [deleted file]
src/libstrongswan/tests/suites/test_hasher.c

index f58a44d326c6f30fc6f9b9a55721ab650ec8cbc6..b9c3189cd237e6ce6781617064b0d87a10be7dd3 100644 (file)
@@ -94,7 +94,7 @@
             0x01             "PKCS"
               0x01           "PKCS-1"
                 0x01         "rsaEncryption"                   OID_RSA_ENCRYPTION
-                0x02         "md2WithRSAEncryption"            OID_MD2_WITH_RSA
+                0x02         "md2WithRSAEncryption"
                 0x04         "md5WithRSAEncryption"            OID_MD5_WITH_RSA
                 0x05         "sha-1WithRSAEncryption"  OID_SHA1_WITH_RSA
                 0x07         "id-RSAES-OAEP"                   OID_RSAES_OAEP
                     0x05     "secretBag"
                     0x06     "safeContentsBag"
             0x02             "digestAlgorithm"
-              0x02           "md2"                                             OID_MD2
+              0x02           "md2"
               0x05           "md5"                                             OID_MD5
               0x07           "hmacWithSHA1"                            OID_HMAC_SHA1
               0x08           "hmacWithSHA224"                  OID_HMAC_SHA224
index d7389100773e4017e3edbbd2348c68c3baab08dd..be0c7503938a3af6de0b3822bb22f9e3ae557d36 100644 (file)
@@ -83,7 +83,6 @@ static bool derive_key(hash_algorithm_t hash, chunk_t unicode, chunk_t salt,
        }
        switch (hash)
        {
-               case HASH_MD2:
                case HASH_MD5:
                case HASH_SHA1:
                case HASH_SHA224:
index 2fed3b4133598c8c43fd169e6991b084392ce3c5..444a59c5f0cef2855a5d7d41f8a2779d180c2a89 100644 (file)
@@ -30,7 +30,6 @@ ENUM_BEGIN(hash_algorithm_names, HASH_SHA1, HASH_IDENTITY,
        "HASH_IDENTITY");
 ENUM_NEXT(hash_algorithm_names, HASH_UNKNOWN, HASH_SHA3_512, HASH_IDENTITY,
        "HASH_UNKNOWN",
-       "HASH_MD2",
        "HASH_MD4",
        "HASH_MD5",
        "HASH_SHA2_224",
@@ -48,7 +47,6 @@ ENUM_BEGIN(hash_algorithm_short_names, HASH_SHA1, HASH_IDENTITY,
        "identity");
 ENUM_NEXT(hash_algorithm_short_names, HASH_UNKNOWN, HASH_SHA3_512, HASH_IDENTITY,
        "unknown",
-       "md2",
        "md4",
        "md5",
        "sha224",
@@ -66,7 +64,6 @@ ENUM_BEGIN(hash_algorithm_short_names_upper, HASH_SHA1, HASH_IDENTITY,
        "IDENTITY");
 ENUM_NEXT(hash_algorithm_short_names_upper, HASH_UNKNOWN, HASH_SHA3_512, HASH_IDENTITY,
        "UNKNOWN",
-       "MD2",
        "MD4",
        "MD5",
        "SHA2_224",
@@ -91,8 +88,6 @@ size_t hasher_hash_size(hash_algorithm_t alg)
                        return HASH_SIZE_SHA384;
                case HASH_SHA512:
                        return HASH_SIZE_SHA512;
-               case HASH_MD2:
-                       return HASH_SIZE_MD2;
                case HASH_MD4:
                        return HASH_SIZE_MD4;
                case HASH_MD5:
@@ -121,9 +116,6 @@ hash_algorithm_t hasher_algorithm_from_oid(int oid)
 {
        switch (oid)
        {
-               case OID_MD2:
-               case OID_MD2_WITH_RSA:
-                       return HASH_MD2;
                case OID_MD5:
                case OID_MD5_WITH_RSA:
                        return HASH_MD5;
@@ -323,7 +315,6 @@ integrity_algorithm_t hasher_algorithm_to_integrity(hash_algorithm_t alg,
                                        return AUTH_HMAC_SHA2_512_512;
                        }
                        break;
-               case HASH_MD2:
                case HASH_MD4:
                case HASH_SHA224:
                case HASH_SHA3_224:
@@ -350,7 +341,6 @@ bool hasher_algorithm_for_ikev2(hash_algorithm_t alg)
                case HASH_SHA512:
                        return TRUE;
                case HASH_UNKNOWN:
-               case HASH_MD2:
                case HASH_MD4:
                case HASH_MD5:
                case HASH_SHA1:
@@ -373,9 +363,6 @@ int hasher_algorithm_to_oid(hash_algorithm_t alg)
 
        switch (alg)
        {
-               case HASH_MD2:
-                       oid = OID_MD2;
-                       break;
                case HASH_MD5:
                        oid = OID_MD5;
                        break;
@@ -422,8 +409,6 @@ int hasher_signature_algorithm_to_oid(hash_algorithm_t alg, key_type_t key)
                case KEY_RSA:
                        switch (alg)
                        {
-                               case HASH_MD2:
-                                       return OID_MD2_WITH_RSA;
                                case HASH_MD5:
                                        return OID_MD5_WITH_RSA;
                                case HASH_SHA1:
index ad434035dab1c4a07b8e723a5d268b2b72369578..0a4237cd93d18dd5b105a186d0620bc4eb267447 100644 (file)
@@ -45,17 +45,15 @@ enum hash_algorithm_t {
        HASH_IDENTITY           = 5,
        /* use private use range for algorithms not defined/permitted by RFC 7427 */
        HASH_UNKNOWN            = 1024,
-       HASH_MD2                        = 1025,
-       HASH_MD4                        = 1026,
-       HASH_MD5                        = 1027,
-       HASH_SHA224                     = 1028,
-       HASH_SHA3_224           = 1029,
-       HASH_SHA3_256           = 1030,
-       HASH_SHA3_384           = 1031,
-       HASH_SHA3_512           = 1032
+       HASH_MD4                        = 1025,
+       HASH_MD5                        = 1026,
+       HASH_SHA224                     = 1027,
+       HASH_SHA3_224           = 1028,
+       HASH_SHA3_256           = 1029,
+       HASH_SHA3_384           = 1030,
+       HASH_SHA3_512           = 1031
 };
 
-#define HASH_SIZE_MD2          16
 #define HASH_SIZE_MD4          16
 #define HASH_SIZE_MD5          16
 #define HASH_SIZE_SHA1         20
index 7c1eb37e42ba91b77ef28cb0875a394ac8a7ad41..f21e037a5a6779f359e64ffb719e4374ad69c907 100644 (file)
@@ -60,7 +60,6 @@ ext_out_function_t xof_mgf1_from_hash_algorithm(hash_algorithm_t alg)
                        return XOF_MGF1_SHA3_384;
                case HASH_IDENTITY:
                case HASH_UNKNOWN:
-               case HASH_MD2:
                case HASH_MD4:
                case HASH_MD5:
                        break;
index 29f86a51394cbb8cf8d348c1cc5bf5daeb16b19b..5e30ac7dc334ce4e72e9af60afa67c456892141e 100644 (file)
@@ -92,9 +92,6 @@ gcrypt_hasher_t *gcrypt_hasher_create(hash_algorithm_t algo)
 
        switch (algo)
        {
-               case HASH_MD2:
-                       gcrypt_alg = GCRY_MD_MD2;
-                       break;
                case HASH_MD4:
                        gcrypt_alg = GCRY_MD_MD4;
                        break;
index c3e1d2e1737fe193d8a39a1094cf6f4a5d330244..ef7fe8908f3b723eb8211433864952646fb359a6 100644 (file)
@@ -400,9 +400,6 @@ METHOD(plugin_t, get_features, int,
                        PLUGIN_PROVIDE(CRYPTER, ENCR_NULL, 0),
                /* hashers */
                PLUGIN_REGISTER(HASHER, openssl_hasher_create),
-#ifndef OPENSSL_NO_MD2
-                       PLUGIN_PROVIDE(HASHER, HASH_MD2),
-#endif
 #ifndef OPENSSL_NO_MD4
                        PLUGIN_PROVIDE(HASHER, HASH_MD4),
 #endif
index e5ac18ed8cfd3b957b24f7100a725a0d0909d5f9..409a05a2ab972d14617a615c3d328e40450e95a4 100644 (file)
@@ -234,7 +234,6 @@ static CK_MECHANISM_PTR algo_to_mechanism(hash_algorithm_t algo, size_t *size)
                CK_MECHANISM mechanism;
                size_t size;
        } mappings[] = {
-               {HASH_MD2,              {CKM_MD2,               NULL, 0},       HASH_SIZE_MD2},
                {HASH_MD5,              {CKM_MD5,               NULL, 0},       HASH_SIZE_MD5},
                {HASH_SHA1,             {CKM_SHA_1,             NULL, 0},       HASH_SIZE_SHA1},
                {HASH_SHA256,   {CKM_SHA256,    NULL, 0},       HASH_SIZE_SHA256},
index 5510db99f4fa5a4d40c9d4f38a86d2005978780b..aa27f1e3845c9e77ae99b78e37607d0e970f3911 100644 (file)
@@ -189,7 +189,6 @@ METHOD(plugin_t, get_features, int,
 {
        static plugin_feature_t f_hash[] = {
                PLUGIN_REGISTER(HASHER, pkcs11_hasher_create),
-                       PLUGIN_PROVIDE(HASHER, HASH_MD2),
                        PLUGIN_PROVIDE(HASHER, HASH_MD5),
                        PLUGIN_PROVIDE(HASHER, HASH_SHA1),
                        PLUGIN_PROVIDE(HASHER, HASH_SHA256),
index 6074027f7d21d76ec5f719ef5b2196e9bb068371..eaf6485abc2ae9e6be21be48639b5b76c8f2bcd3 100644 (file)
@@ -37,7 +37,6 @@ libstrongswan_test_vectors_la_SOURCES = \
        test_vectors/rc5.c \
        test_vectors/serpent_cbc.c \
        test_vectors/twofish_cbc.c \
-       test_vectors/md2.c \
        test_vectors/md4.c \
        test_vectors/md5.c \
        test_vectors/md5_hmac.c \
index bf8609cb627531e8bba9933a14579bb75ebe4c6d..85436ff74abae7d423a88157f355052ae73ca260 100644 (file)
@@ -160,13 +160,6 @@ TEST_VECTOR_SIGNER(sha512_hmac_s1)
 TEST_VECTOR_SIGNER(sha512_hmac_s2)
 TEST_VECTOR_SIGNER(sha512_hmac_s3)
 
-TEST_VECTOR_HASHER(md2_1)
-TEST_VECTOR_HASHER(md2_2)
-TEST_VECTOR_HASHER(md2_3)
-TEST_VECTOR_HASHER(md2_4)
-TEST_VECTOR_HASHER(md2_5)
-TEST_VECTOR_HASHER(md2_6)
-TEST_VECTOR_HASHER(md2_7)
 TEST_VECTOR_HASHER(md4_1)
 TEST_VECTOR_HASHER(md4_2)
 TEST_VECTOR_HASHER(md4_3)
diff --git a/src/libstrongswan/plugins/test_vectors/test_vectors/md2.c b/src/libstrongswan/plugins/test_vectors/test_vectors/md2.c
deleted file mode 100644 (file)
index b2707a1..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2009 Martin Willi
- *
- * Copyright (C) secunet Security Networks AG
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the Licenseor (at your
- * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be usefulbut
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
- * for more details.
- */
-
-#include <crypto/crypto_tester.h>
-
-/**
- * MD2 vectors from RFC 1319
- */
-hasher_test_vector_t md2_1 = {
-       .alg = HASH_MD2, .len = 0,
-       .data   = "",
-       .hash   = "\x83\x50\xe5\xa3\xe2\x4c\x15\x3d\xf2\x27\x5c\x9f\x80\x69\x27\x73"
-};
-
-hasher_test_vector_t md2_2 = {
-       .alg = HASH_MD2, .len = 1,
-       .data   = "a",
-       .hash   = "\x32\xec\x01\xec\x4a\x6d\xac\x72\xc0\xab\x96\xfb\x34\xc0\xb5\xd1"
-};
-
-hasher_test_vector_t md2_3 = {
-       .alg = HASH_MD2, .len = 3,
-       .data   = "abc",
-       .hash   = "\xda\x85\x3b\x0d\x3f\x88\xd9\x9b\x30\x28\x3a\x69\xe6\xde\xd6\xbb"
-};
-
-hasher_test_vector_t md2_4 = {
-       .alg = HASH_MD2, .len = 14,
-       .data   = "message digest",
-       .hash   = "\xab\x4f\x49\x6b\xfb\x2a\x53\x0b\x21\x9f\xf3\x30\x31\xfe\x06\xb0"
-};
-
-hasher_test_vector_t md2_5 = {
-       .alg = HASH_MD2, .len = 26,
-       .data   = "abcdefghijklmnopqrstuvwxyz",
-       .hash   = "\x4e\x8d\xdf\xf3\x65\x02\x92\xab\x5a\x41\x08\xc3\xaa\x47\x94\x0b"
-};
-
-hasher_test_vector_t md2_6 = {
-       .alg = HASH_MD2, .len = 62,
-       .data   = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
-       .hash   = "\xda\x33\xde\xf2\xa4\x2d\xf1\x39\x75\x35\x28\x46\xc3\x03\x38\xcd"
-};
-
-hasher_test_vector_t md2_7 = {
-       .alg = HASH_MD2, .len = 80,
-       .data   = "1234567890123456789012345678901234567890"
-                         "1234567890123456789012345678901234567890",
-       .hash   = "\xd5\x97\x6f\x79\xd8\x3d\x3a\x0d\xc9\x80\x6c\x3c\x66\xf3\xef\xd8"
-};
-
index c07eed8d93835693dc6b343f2dc35d18cbe333d1..3bdcc7e3d7e1001f396b56a64b8af3f503cfc3be 100644 (file)
@@ -28,41 +28,39 @@ typedef struct {
        key_type_t key;
 }hasher_oid_t;
 
+/* make sure to adjust offsets in constructor when changing this array */
 static hasher_oid_t oids[] = {
-       { OID_MD2, HASH_MD2, KEY_ANY },                                /*  0 */
-       { OID_MD5, HASH_MD5, KEY_ANY },                                /*  1 */
-       { OID_SHA1, HASH_SHA1, KEY_ANY },                              /*  2 */
-       { OID_SHA224, HASH_SHA224, KEY_ANY },                          /*  3 */
-       { OID_SHA256, HASH_SHA256, KEY_ANY },                          /*  4 */
-       { OID_SHA384, HASH_SHA384, KEY_ANY },                          /*  5 */
-       { OID_SHA512, HASH_SHA512, KEY_ANY },                          /*  6 */
-       { OID_SHA3_224, HASH_SHA3_224, KEY_ANY },                      /*  7 */
-       { OID_SHA3_256, HASH_SHA3_256, KEY_ANY },                      /*  8 */
-       { OID_SHA3_384, HASH_SHA3_384, KEY_ANY },                      /*  9 */
-       { OID_SHA3_512, HASH_SHA3_512, KEY_ANY },                      /* 10 */
-       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ANY },                        /* 11 */
-       { OID_MD2_WITH_RSA, HASH_MD2, KEY_RSA },                       /* 12 */
-       { OID_MD5_WITH_RSA, HASH_MD5, KEY_RSA },                       /* 13 */
-       { OID_SHA1_WITH_RSA, HASH_SHA1, KEY_RSA },                     /* 14 */
-       { OID_SHA224_WITH_RSA, HASH_SHA224, KEY_RSA },                 /* 15 */
-       { OID_SHA256_WITH_RSA, HASH_SHA256, KEY_RSA },                 /* 16 */
-       { OID_SHA384_WITH_RSA, HASH_SHA384, KEY_RSA },                 /* 17 */
-       { OID_SHA512_WITH_RSA, HASH_SHA512, KEY_RSA },                 /* 18 */
-       { OID_RSASSA_PKCS1V15_WITH_SHA3_224, HASH_SHA3_224, KEY_RSA }, /* 19 */
-       { OID_RSASSA_PKCS1V15_WITH_SHA3_256, HASH_SHA3_256, KEY_RSA }, /* 20 */
-       { OID_RSASSA_PKCS1V15_WITH_SHA3_384, HASH_SHA3_384, KEY_RSA }, /* 21 */
-       { OID_RSASSA_PKCS1V15_WITH_SHA3_512, HASH_SHA3_512, KEY_RSA }, /* 22 */
-       { OID_UNKNOWN, HASH_UNKNOWN, KEY_RSA },                        /* 23 */
-       { OID_ED25519, HASH_IDENTITY, KEY_ED25519 },                   /* 24 */
-       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ED25519 },                    /* 25 */
-       { OID_ED448, HASH_IDENTITY, KEY_ED448 },                       /* 26 */
-       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ED448 },                      /* 27 */
-       { OID_ECDSA_WITH_SHA1, HASH_SHA1, KEY_ECDSA },                 /* 28 */
-       { OID_ECDSA_WITH_SHA256, HASH_SHA256, KEY_ECDSA },             /* 29 */
-       { OID_ECDSA_WITH_SHA384, HASH_SHA384, KEY_ECDSA },             /* 30 */
-       { OID_ECDSA_WITH_SHA512, HASH_SHA512, KEY_ECDSA },             /* 31 */
-       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ECDSA },                      /* 32 */
-
+       { OID_MD5, HASH_MD5, KEY_ANY },                                /*  0 */
+       { OID_SHA1, HASH_SHA1, KEY_ANY },                              /*  1 */
+       { OID_SHA224, HASH_SHA224, KEY_ANY },                          /*  2 */
+       { OID_SHA256, HASH_SHA256, KEY_ANY },                          /*  3 */
+       { OID_SHA384, HASH_SHA384, KEY_ANY },                          /*  4 */
+       { OID_SHA512, HASH_SHA512, KEY_ANY },                          /*  5 */
+       { OID_SHA3_224, HASH_SHA3_224, KEY_ANY },                      /*  6 */
+       { OID_SHA3_256, HASH_SHA3_256, KEY_ANY },                      /*  7 */
+       { OID_SHA3_384, HASH_SHA3_384, KEY_ANY },                      /*  8 */
+       { OID_SHA3_512, HASH_SHA3_512, KEY_ANY },                      /*  9 */
+       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ANY },                        /* 10 */
+       { OID_MD5_WITH_RSA, HASH_MD5, KEY_RSA },                       /* 11 */
+       { OID_SHA1_WITH_RSA, HASH_SHA1, KEY_RSA },                     /* 12 */
+       { OID_SHA224_WITH_RSA, HASH_SHA224, KEY_RSA },                 /* 13 */
+       { OID_SHA256_WITH_RSA, HASH_SHA256, KEY_RSA },                 /* 14 */
+       { OID_SHA384_WITH_RSA, HASH_SHA384, KEY_RSA },                 /* 15 */
+       { OID_SHA512_WITH_RSA, HASH_SHA512, KEY_RSA },                 /* 16 */
+       { OID_RSASSA_PKCS1V15_WITH_SHA3_224, HASH_SHA3_224, KEY_RSA }, /* 17 */
+       { OID_RSASSA_PKCS1V15_WITH_SHA3_256, HASH_SHA3_256, KEY_RSA }, /* 18 */
+       { OID_RSASSA_PKCS1V15_WITH_SHA3_384, HASH_SHA3_384, KEY_RSA }, /* 19 */
+       { OID_RSASSA_PKCS1V15_WITH_SHA3_512, HASH_SHA3_512, KEY_RSA }, /* 20 */
+       { OID_UNKNOWN, HASH_UNKNOWN, KEY_RSA },                        /* 21 */
+       { OID_ED25519, HASH_IDENTITY, KEY_ED25519 },                   /* 22 */
+       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ED25519 },                    /* 23 */
+       { OID_ED448, HASH_IDENTITY, KEY_ED448 },                       /* 24 */
+       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ED448 },                      /* 25 */
+       { OID_ECDSA_WITH_SHA1, HASH_SHA1, KEY_ECDSA },                 /* 26 */
+       { OID_ECDSA_WITH_SHA256, HASH_SHA256, KEY_ECDSA },             /* 27 */
+       { OID_ECDSA_WITH_SHA384, HASH_SHA384, KEY_ECDSA },             /* 28 */
+       { OID_ECDSA_WITH_SHA512, HASH_SHA512, KEY_ECDSA },             /* 29 */
+       { OID_UNKNOWN, HASH_UNKNOWN, KEY_ECDSA },                      /* 30 */
 };
 
 START_TEST(test_hasher_from_oid)
@@ -174,32 +172,32 @@ typedef struct {
        size_t length;
 }hasher_auth_t;
 
+/* make sure to adjust offsets in constructor when changing this array */
 static hasher_auth_t auths[] = {
-       { AUTH_UNDEFINED, HASH_MD2, 0 },
-       { AUTH_UNDEFINED, HASH_MD4, 0 },
-       { AUTH_UNDEFINED, HASH_SHA224, 0 },
-       { AUTH_UNDEFINED, 9, 0 },
-       { AUTH_UNDEFINED, HASH_UNKNOWN, 0 },
-       { AUTH_HMAC_MD5_96, HASH_MD5, 12 },
-       { AUTH_HMAC_SHA1_96, HASH_SHA1, 12 },
-       { AUTH_HMAC_SHA2_256_96, HASH_SHA256, 12 },
-       { AUTH_HMAC_MD5_128, HASH_MD5, 16 },
-       { AUTH_HMAC_SHA1_128, HASH_SHA1, 16 },
-       { AUTH_HMAC_SHA2_256_128, HASH_SHA256, 16 },
-       { AUTH_HMAC_SHA1_160, HASH_SHA1, 20 },
-       { AUTH_HMAC_SHA2_384_192, HASH_SHA384, 24 },
-       { AUTH_HMAC_SHA2_256_256, HASH_SHA256, 32 },
-       { AUTH_HMAC_SHA2_512_256, HASH_SHA512, 32 },
-       { AUTH_HMAC_SHA2_384_384, HASH_SHA384, 48 },
-       { AUTH_HMAC_SHA2_512_512, HASH_SHA512, 64 },
-       { AUTH_AES_CMAC_96, HASH_UNKNOWN, 0 },
-       { AUTH_AES_128_GMAC, HASH_UNKNOWN, 0 },
-       { AUTH_AES_192_GMAC, HASH_UNKNOWN, 0 },
-       { AUTH_AES_256_GMAC, HASH_UNKNOWN, 0 },
-       { AUTH_AES_XCBC_96, HASH_UNKNOWN, 0 },
-       { AUTH_DES_MAC, HASH_UNKNOWN, 0 },
-       { AUTH_CAMELLIA_XCBC_96, HASH_UNKNOWN, 0 },
-       { 0, HASH_UNKNOWN, 0 }
+       { AUTH_UNDEFINED, HASH_MD4, 0 },             /*  0 */
+       { AUTH_UNDEFINED, HASH_SHA224, 0 },          /*  1 */
+       { AUTH_UNDEFINED, 9, 0 },                    /*  2 */
+       { AUTH_UNDEFINED, HASH_UNKNOWN, 0 },         /*  3 */
+       { AUTH_HMAC_MD5_96, HASH_MD5, 12 },          /*  4 */
+       { AUTH_HMAC_SHA1_96, HASH_SHA1, 12 },        /*  5 */
+       { AUTH_HMAC_SHA2_256_96, HASH_SHA256, 12 },  /*  6 */
+       { AUTH_HMAC_MD5_128, HASH_MD5, 16 },         /*  7 */
+       { AUTH_HMAC_SHA1_128, HASH_SHA1, 16 },       /*  8 */
+       { AUTH_HMAC_SHA2_256_128, HASH_SHA256, 16 }, /*  9 */
+       { AUTH_HMAC_SHA1_160, HASH_SHA1, 20 },       /* 10 */
+       { AUTH_HMAC_SHA2_384_192, HASH_SHA384, 24 }, /* 11 */
+       { AUTH_HMAC_SHA2_256_256, HASH_SHA256, 32 }, /* 12 */
+       { AUTH_HMAC_SHA2_512_256, HASH_SHA512, 32 }, /* 13 */
+       { AUTH_HMAC_SHA2_384_384, HASH_SHA384, 48 }, /* 14 */
+       { AUTH_HMAC_SHA2_512_512, HASH_SHA512, 64 }, /* 15 */
+       { AUTH_AES_CMAC_96, HASH_UNKNOWN, 0 },       /* 16 */
+       { AUTH_AES_128_GMAC, HASH_UNKNOWN, 0 },      /* 17 */
+       { AUTH_AES_192_GMAC, HASH_UNKNOWN, 0 },      /* 18 */
+       { AUTH_AES_256_GMAC, HASH_UNKNOWN, 0 },      /* 19 */
+       { AUTH_AES_XCBC_96, HASH_UNKNOWN, 0 },       /* 20 */
+       { AUTH_DES_MAC, HASH_UNKNOWN, 0 },           /* 21 */
+       { AUTH_CAMELLIA_XCBC_96, HASH_UNKNOWN, 0 },  /* 22 */
+       { 0, HASH_UNKNOWN, 0 }                       /* 23 */
 };
 
 START_TEST(test_hasher_from_integrity)
@@ -237,7 +235,6 @@ static hasher_ikev2_t ikev2[] = {
        { HASH_SHA384,   TRUE  },
        { HASH_SHA512,   TRUE  },
        { HASH_UNKNOWN,  FALSE },
-       { HASH_MD2,      FALSE },
        { HASH_MD4,      FALSE },
        { HASH_MD5,      FALSE },
        { HASH_SHA224,   FALSE },
@@ -262,15 +259,15 @@ Suite *hasher_suite_create()
        s = suite_create("hasher");
 
        tc = tcase_create("from_oid");
-       tcase_add_loop_test(tc, test_hasher_from_oid, 0, 28);
+       tcase_add_loop_test(tc, test_hasher_from_oid, 0, 26);
        suite_add_tcase(s, tc);
 
        tc = tcase_create("to_oid");
-       tcase_add_loop_test(tc, test_hasher_to_oid, 0, 12);
+       tcase_add_loop_test(tc, test_hasher_to_oid, 0, 11);
        suite_add_tcase(s, tc);
 
        tc = tcase_create("sig_to_oid");
-       tcase_add_loop_test(tc, test_hasher_sig_to_oid, 11, countof(oids));
+       tcase_add_loop_test(tc, test_hasher_sig_to_oid, 10, countof(oids));
        suite_add_tcase(s, tc);
 
        tc = tcase_create("from_sig_scheme");
@@ -283,11 +280,11 @@ Suite *hasher_suite_create()
        suite_add_tcase(s, tc);
 
        tc = tcase_create("from_integrity");
-       tcase_add_loop_test(tc, test_hasher_from_integrity, 4, countof(auths));
+       tcase_add_loop_test(tc, test_hasher_from_integrity, 3, countof(auths));
        suite_add_tcase(s, tc);
 
        tc = tcase_create("to_integrity");
-       tcase_add_loop_test(tc, test_hasher_to_integrity, 0, 17);
+       tcase_add_loop_test(tc, test_hasher_to_integrity, 0, 16);
        suite_add_tcase(s, tc);
 
        tc = tcase_create("for_ikev2");