Report the symbol name of a failed test vector
authorMartin Willi <martin@revosec.ch>
Thu, 12 Aug 2010 20:46:00 +0000 (22:46 +0200)
committerMartin Willi <martin@revosec.ch>
Fri, 13 Aug 2010 15:11:53 +0000 (17:11 +0200)
src/libstrongswan/crypto/crypto_tester.c

index 76cc1cf..6d3521a 100644 (file)
@@ -13,6 +13,9 @@
  * for more details.
  */
 
+#define _GNU_SOURCE
+#include <dlfcn.h>
+
 #include "crypto_tester.h"
 
 #include <debug.h>
@@ -67,6 +70,22 @@ struct private_crypto_tester_t {
 };
 
 /**
+ * Get the name of a test vector, if available
+ */
+static const char* get_name(void *sym)
+{
+#ifdef HAVE_DLADDR
+       Dl_info dli;
+
+       if (dladdr(sym, &dli))
+       {
+               return dli.dli_sname;
+       }
+#endif
+       return "unknown";
+}
+
+/**
  * Implementation of crypto_tester_t.test_crypter
  */
 static bool test_crypter(private_crypto_tester_t *this,
@@ -136,8 +155,8 @@ static bool test_crypter(private_crypto_tester_t *this,
                crypter->destroy(crypter);
                if (failed)
                {
-                       DBG1(DBG_LIB, "disabled %N: test vector %u failed",
-                                encryption_algorithm_names, alg, tested);
+                       DBG1(DBG_LIB, "disabled %N: %s test vector failed",
+                                encryption_algorithm_names, alg, get_name(vector));
                        break;
                }
        }
@@ -240,8 +259,8 @@ static bool test_signer(private_crypto_tester_t *this,
                signer->destroy(signer);
                if (failed)
                {
-                       DBG1(DBG_LIB, "disabled %N: test vector %u failed",
-                                integrity_algorithm_names, alg, tested);
+                       DBG1(DBG_LIB, "disabled %N: %s test vector failed",
+                                integrity_algorithm_names, alg, get_name(vector));
                        break;
                }
        }
@@ -330,8 +349,8 @@ static bool test_hasher(private_crypto_tester_t *this, hash_algorithm_t alg,
                hasher->destroy(hasher);
                if (failed)
                {
-                       DBG1(DBG_LIB, "disabled %N: test vector %u failed",
-                                hash_algorithm_names, alg, tested);
+                       DBG1(DBG_LIB, "disabled %N: %s test vector failed",
+                                hash_algorithm_names, alg, get_name(vector));
                        break;
                }
        }
@@ -431,8 +450,8 @@ static bool test_prf(private_crypto_tester_t *this,
                prf->destroy(prf);
                if (failed)
                {
-                       DBG1(DBG_LIB, "disabled %N: test vector %u failed",
-                                pseudo_random_function_names, alg, tested);
+                       DBG1(DBG_LIB, "disabled %N: %s test vector failed",
+                                pseudo_random_function_names, alg, get_name(vector));
                        break;
                }
        }
@@ -515,8 +534,8 @@ static bool test_rng(private_crypto_tester_t *this, rng_quality_t quality,
                rng->destroy(rng);
                if (failed)
                {
-                       DBG1(DBG_LIB, "disabled %N: test vector %u failed",
-                                rng_quality_names, quality, tested);
+                       DBG1(DBG_LIB, "disabled %N: %s test vector failed",
+                                rng_quality_names, quality, get_name(vector));
                        break;
                }
        }