]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
dh-speed: Use method call order compatible with KEMs
authorTobias Brunner <tobias@strongswan.org>
Tue, 8 Oct 2024 14:36:47 +0000 (16:36 +0200)
committerTobias Brunner <tobias@strongswan.org>
Fri, 22 Nov 2024 13:03:16 +0000 (14:03 +0100)
Also prints the speed of the derivation (or decapsulation) for the
initiator.

scripts/dh_speed.c

index 3196c7675758179ff88b0d6383f360f091a74a61..875f92b21d4c9080fe12410b7a813bcab24ae3bc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2023 Tobias Brunner
+ * Copyright (C) 2023-2024 Tobias Brunner
  * Copyright (C) 2009 Martin Willi
  *
  * Copyright (C) secunet Security Networks AG
@@ -56,13 +56,14 @@ static void run_test(key_exchange_method_t method, int rounds)
                                method);
                return;
        }
-       assert(r[0]->get_public_key(r[0], &rpublic[0]));
        for (round = 1; round < rounds; round++)
        {
                r[round] = lib->crypto->create_ke(lib->crypto, method);
-               assert(r[round]->get_public_key(r[round], &rpublic[round]));
        }
 
+       /* make sure to use the method call order documented in the
+        * key_exchange_t header file */
+
        printf("%N:\t", key_exchange_method_names, method);
 
        start_timing(&timing);
@@ -73,12 +74,14 @@ static void run_test(key_exchange_method_t method, int rounds)
        }
        printf("A = g^a/s: %8.1f", rounds / end_timing(&timing));
 
+       start_timing(&timing);
        for (round = 0; round < rounds; round++)
        {
                assert(r[round]->set_public_key(r[round], lpublic[round]));
+               assert(r[round]->get_public_key(r[round], &rpublic[round]));
                assert(r[round]->get_shared_secret(r[round], &rsecret[round]));
-               chunk_free(&lpublic[round]);
        }
+       printf(" | S = A^b/s: %8.1f", rounds / end_timing(&timing));
 
        start_timing(&timing);
        for (round = 0; round < rounds; round++)
@@ -93,6 +96,7 @@ static void run_test(key_exchange_method_t method, int rounds)
                assert(chunk_equals(rsecret[round], lsecret[round]));
                chunk_free(&lsecret[round]);
                chunk_free(&rsecret[round]);
+               chunk_free(&lpublic[round]);
                chunk_free(&rpublic[round]);
                l[round]->destroy(l[round]);
                r[round]->destroy(r[round]);