From: Tobias Brunner Date: Fri, 11 Feb 2022 10:57:34 +0000 (+0100) Subject: plugin-feature: Add plugin feature for KDFs X-Git-Tag: 5.9.6rc1~2^2~25 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=71ba9698844f3c2964a23b680d195acd5ac3418c;p=thirdparty%2Fstrongswan.git plugin-feature: Add plugin feature for KDFs --- diff --git a/src/libstrongswan/plugins/plugin_feature.c b/src/libstrongswan/plugins/plugin_feature.c index 0649801e0d..8fb10fbc27 100644 --- a/src/libstrongswan/plugins/plugin_feature.c +++ b/src/libstrongswan/plugins/plugin_feature.c @@ -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; diff --git a/src/libstrongswan/plugins/plugin_feature.h b/src/libstrongswan/plugins/plugin_feature.h index 2692de2ceb..b2080c05c7 100644 --- a/src/libstrongswan/plugins/plugin_feature.h +++ b/src/libstrongswan/plugins/plugin_feature.h @@ -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)