"HASHER",
"PRF",
"XOF",
+ "KDF",
"DRBG",
"DH",
"RNG",
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;
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:
case FEATURE_HASHER:
case FEATURE_PRF:
case FEATURE_XOF:
+ case FEATURE_KDF:
case FEATURE_DRBG:
case FEATURE_DH:
case FEATURE_NONCE_GEN:
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)
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);
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;
FEATURE_PRF,
/** xof_t */
FEATURE_XOF,
+ /** kdf_t */
+ FEATURE_KDF,
/** drbg_t */
FEATURE_DRBG,
/** diffie_hellman_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 */
#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)
#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)