]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
plugin-feature: Add plugin feature for KDFs
authorTobias Brunner <tobias@strongswan.org>
Fri, 11 Feb 2022 10:57:34 +0000 (11:57 +0100)
committerTobias Brunner <tobias@strongswan.org>
Thu, 14 Apr 2022 16:54:24 +0000 (18:54 +0200)
src/libstrongswan/plugins/plugin_feature.c
src/libstrongswan/plugins/plugin_feature.h

index 0649801e0df40acc468e0806ac9797f0980c2dbc..8fb10fbc27cf1b60285774f66ce2e935374f22ed 100644 (file)
@@ -32,6 +32,7 @@ ENUM(plugin_feature_names, FEATURE_NONE, FEATURE_CUSTOM,
        "HASHER",
        "PRF",
        "XOF",
+       "KDF",
        "DRBG",
        "DH",
        "RNG",
@@ -93,6 +94,9 @@ uint32_t plugin_feature_hash(plugin_feature_t *feature)
                case FEATURE_XOF:
                        data = chunk_from_thing(feature->arg.xof);
                        break;
+               case FEATURE_KDF:
+                       data = chunk_from_thing(feature->arg.kdf);
+                       break;
                case FEATURE_DRBG:
                        data = chunk_from_thing(feature->arg.drbg);
                        break;
@@ -171,6 +175,8 @@ bool plugin_feature_matches(plugin_feature_t *a, plugin_feature_t *b)
                                return a->arg.prf == b->arg.prf;
                        case FEATURE_XOF:
                                return a->arg.xof == b->arg.xof;
+                       case FEATURE_KDF:
+                               return a->arg.kdf == b->arg.kdf;
                        case FEATURE_DRBG:
                                return a->arg.drbg == b->arg.drbg;
                        case FEATURE_DH:
@@ -232,6 +238,7 @@ bool plugin_feature_equals(plugin_feature_t *a, plugin_feature_t *b)
                        case FEATURE_HASHER:
                        case FEATURE_PRF:
                        case FEATURE_XOF:
+                       case FEATURE_KDF:
                        case FEATURE_DRBG:
                        case FEATURE_DH:
                        case FEATURE_NONCE_GEN:
@@ -327,6 +334,13 @@ char* plugin_feature_get_string(plugin_feature_t *feature)
                                return str;
                        }
                        break;
+               case FEATURE_KDF:
+                       if (asprintf(&str, "%N:%N", plugin_feature_names, feature->type,
+                                       key_derivation_function_names, feature->arg.kdf) > 0)
+                       {
+                               return str;
+                       }
+                       break;
                case FEATURE_DRBG:
                        if (asprintf(&str, "%N:%N", plugin_feature_names, feature->type,
                                        drbg_type_names, feature->arg.drbg) > 0)
@@ -509,6 +523,10 @@ bool plugin_feature_load(plugin_t *plugin, plugin_feature_t *feature,
                        lib->crypto->add_xof(lib->crypto, feature->arg.xof,
                                                                name, reg->arg.reg.f);
                        break;
+               case FEATURE_KDF:
+                       lib->crypto->add_kdf(lib->crypto, feature->arg.kdf,
+                                                               name, reg->arg.reg.f);
+                       break;
                case FEATURE_DRBG:
                        lib->crypto->add_drbg(lib->crypto, feature->arg.drbg,
                                                                name, reg->arg.reg.f);
@@ -612,6 +630,9 @@ bool plugin_feature_unload(plugin_t *plugin, plugin_feature_t *feature,
                case FEATURE_XOF:
                        lib->crypto->remove_xof(lib->crypto, reg->arg.reg.f);
                        break;
+               case FEATURE_KDF:
+                       lib->crypto->remove_kdf(lib->crypto, reg->arg.reg.f);
+                       break;
                case FEATURE_DRBG:
                        lib->crypto->remove_drbg(lib->crypto, reg->arg.reg.f);
                        break;
index 2692de2ceb12fc2b687b608d812f7e300f04b851..b2080c05c7121de16464065762cb58c5661a49cb 100644 (file)
@@ -113,6 +113,8 @@ struct plugin_feature_t {
                FEATURE_PRF,
                /** xof_t */
                FEATURE_XOF,
+               /** kdf_t */
+               FEATURE_KDF,
                /** drbg_t */
                FEATURE_DRBG,
                /** diffie_hellman_t */
@@ -176,8 +178,10 @@ struct plugin_feature_t {
                integrity_algorithm_t signer;
                /** FEATURE_PRF */
                pseudo_random_function_t prf;
-               /** FEATURE_XOFF */
+               /** FEATURE_XOF */
                ext_out_function_t xof;
+               /** FEATURE_KDF */
+               key_derivation_function_t kdf;
                /** FEATURE_DRBG */
                drbg_type_t drbg;
                /** FEATURE_HASHER */
@@ -288,6 +292,7 @@ struct plugin_feature_t {
 #define _PLUGIN_FEATURE_HASHER(kind, alg)                                      __PLUGIN_FEATURE(kind, HASHER, .hasher = alg)
 #define _PLUGIN_FEATURE_PRF(kind, alg)                                         __PLUGIN_FEATURE(kind, PRF, .prf = alg)
 #define _PLUGIN_FEATURE_XOF(kind, alg)                                         __PLUGIN_FEATURE(kind, XOF, .xof = alg)
+#define _PLUGIN_FEATURE_KDF(kind, alg)                                         __PLUGIN_FEATURE(kind, KDF, .kdf = alg)
 #define _PLUGIN_FEATURE_DRBG(kind, type)                                       __PLUGIN_FEATURE(kind, DRBG, .drbg = type)
 #define _PLUGIN_FEATURE_DH(kind, group)                                                __PLUGIN_FEATURE(kind, DH, .dh_group = group)
 #define _PLUGIN_FEATURE_RNG(kind, quality)                                     __PLUGIN_FEATURE(kind, RNG, .rng_quality = quality)
@@ -322,6 +327,7 @@ struct plugin_feature_t {
 #define _PLUGIN_FEATURE_REGISTER_HASHER(type, f)                       __PLUGIN_FEATURE_REGISTER(type, f)
 #define _PLUGIN_FEATURE_REGISTER_PRF(type, f)                          __PLUGIN_FEATURE_REGISTER(type, f)
 #define _PLUGIN_FEATURE_REGISTER_XOF(type, f)                          __PLUGIN_FEATURE_REGISTER(type, f)
+#define _PLUGIN_FEATURE_REGISTER_KDF(type, f)                          __PLUGIN_FEATURE_REGISTER(type, f)
 #define _PLUGIN_FEATURE_REGISTER_DRBG(type, f)                         __PLUGIN_FEATURE_REGISTER(type, f)
 #define _PLUGIN_FEATURE_REGISTER_DH(type, f)                           __PLUGIN_FEATURE_REGISTER(type, f)
 #define _PLUGIN_FEATURE_REGISTER_RNG(type, f)                          __PLUGIN_FEATURE_REGISTER(type, f)