plugin-feature: Add plugin feature for KDFs
This commit is contained in:
@@ -32,6 +32,7 @@ ENUM(plugin_feature_names, FEATURE_NONE, FEATURE_CUSTOM,
|
|||||||
"HASHER",
|
"HASHER",
|
||||||
"PRF",
|
"PRF",
|
||||||
"XOF",
|
"XOF",
|
||||||
|
"KDF",
|
||||||
"DRBG",
|
"DRBG",
|
||||||
"DH",
|
"DH",
|
||||||
"RNG",
|
"RNG",
|
||||||
@@ -93,6 +94,9 @@ uint32_t plugin_feature_hash(plugin_feature_t *feature)
|
|||||||
case FEATURE_XOF:
|
case FEATURE_XOF:
|
||||||
data = chunk_from_thing(feature->arg.xof);
|
data = chunk_from_thing(feature->arg.xof);
|
||||||
break;
|
break;
|
||||||
|
case FEATURE_KDF:
|
||||||
|
data = chunk_from_thing(feature->arg.kdf);
|
||||||
|
break;
|
||||||
case FEATURE_DRBG:
|
case FEATURE_DRBG:
|
||||||
data = chunk_from_thing(feature->arg.drbg);
|
data = chunk_from_thing(feature->arg.drbg);
|
||||||
break;
|
break;
|
||||||
@@ -171,6 +175,8 @@ bool plugin_feature_matches(plugin_feature_t *a, plugin_feature_t *b)
|
|||||||
return a->arg.prf == b->arg.prf;
|
return a->arg.prf == b->arg.prf;
|
||||||
case FEATURE_XOF:
|
case FEATURE_XOF:
|
||||||
return a->arg.xof == b->arg.xof;
|
return a->arg.xof == b->arg.xof;
|
||||||
|
case FEATURE_KDF:
|
||||||
|
return a->arg.kdf == b->arg.kdf;
|
||||||
case FEATURE_DRBG:
|
case FEATURE_DRBG:
|
||||||
return a->arg.drbg == b->arg.drbg;
|
return a->arg.drbg == b->arg.drbg;
|
||||||
case FEATURE_DH:
|
case FEATURE_DH:
|
||||||
@@ -232,6 +238,7 @@ bool plugin_feature_equals(plugin_feature_t *a, plugin_feature_t *b)
|
|||||||
case FEATURE_HASHER:
|
case FEATURE_HASHER:
|
||||||
case FEATURE_PRF:
|
case FEATURE_PRF:
|
||||||
case FEATURE_XOF:
|
case FEATURE_XOF:
|
||||||
|
case FEATURE_KDF:
|
||||||
case FEATURE_DRBG:
|
case FEATURE_DRBG:
|
||||||
case FEATURE_DH:
|
case FEATURE_DH:
|
||||||
case FEATURE_NONCE_GEN:
|
case FEATURE_NONCE_GEN:
|
||||||
@@ -327,6 +334,13 @@ char* plugin_feature_get_string(plugin_feature_t *feature)
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
break;
|
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:
|
case FEATURE_DRBG:
|
||||||
if (asprintf(&str, "%N:%N", plugin_feature_names, feature->type,
|
if (asprintf(&str, "%N:%N", plugin_feature_names, feature->type,
|
||||||
drbg_type_names, feature->arg.drbg) > 0)
|
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,
|
lib->crypto->add_xof(lib->crypto, feature->arg.xof,
|
||||||
name, reg->arg.reg.f);
|
name, reg->arg.reg.f);
|
||||||
break;
|
break;
|
||||||
|
case FEATURE_KDF:
|
||||||
|
lib->crypto->add_kdf(lib->crypto, feature->arg.kdf,
|
||||||
|
name, reg->arg.reg.f);
|
||||||
|
break;
|
||||||
case FEATURE_DRBG:
|
case FEATURE_DRBG:
|
||||||
lib->crypto->add_drbg(lib->crypto, feature->arg.drbg,
|
lib->crypto->add_drbg(lib->crypto, feature->arg.drbg,
|
||||||
name, reg->arg.reg.f);
|
name, reg->arg.reg.f);
|
||||||
@@ -612,6 +630,9 @@ bool plugin_feature_unload(plugin_t *plugin, plugin_feature_t *feature,
|
|||||||
case FEATURE_XOF:
|
case FEATURE_XOF:
|
||||||
lib->crypto->remove_xof(lib->crypto, reg->arg.reg.f);
|
lib->crypto->remove_xof(lib->crypto, reg->arg.reg.f);
|
||||||
break;
|
break;
|
||||||
|
case FEATURE_KDF:
|
||||||
|
lib->crypto->remove_kdf(lib->crypto, reg->arg.reg.f);
|
||||||
|
break;
|
||||||
case FEATURE_DRBG:
|
case FEATURE_DRBG:
|
||||||
lib->crypto->remove_drbg(lib->crypto, reg->arg.reg.f);
|
lib->crypto->remove_drbg(lib->crypto, reg->arg.reg.f);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -113,6 +113,8 @@ struct plugin_feature_t {
|
|||||||
FEATURE_PRF,
|
FEATURE_PRF,
|
||||||
/** xof_t */
|
/** xof_t */
|
||||||
FEATURE_XOF,
|
FEATURE_XOF,
|
||||||
|
/** kdf_t */
|
||||||
|
FEATURE_KDF,
|
||||||
/** drbg_t */
|
/** drbg_t */
|
||||||
FEATURE_DRBG,
|
FEATURE_DRBG,
|
||||||
/** diffie_hellman_t */
|
/** diffie_hellman_t */
|
||||||
@@ -176,8 +178,10 @@ struct plugin_feature_t {
|
|||||||
integrity_algorithm_t signer;
|
integrity_algorithm_t signer;
|
||||||
/** FEATURE_PRF */
|
/** FEATURE_PRF */
|
||||||
pseudo_random_function_t prf;
|
pseudo_random_function_t prf;
|
||||||
/** FEATURE_XOFF */
|
/** FEATURE_XOF */
|
||||||
ext_out_function_t xof;
|
ext_out_function_t xof;
|
||||||
|
/** FEATURE_KDF */
|
||||||
|
key_derivation_function_t kdf;
|
||||||
/** FEATURE_DRBG */
|
/** FEATURE_DRBG */
|
||||||
drbg_type_t drbg;
|
drbg_type_t drbg;
|
||||||
/** FEATURE_HASHER */
|
/** 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_HASHER(kind, alg) __PLUGIN_FEATURE(kind, HASHER, .hasher = alg)
|
||||||
#define _PLUGIN_FEATURE_PRF(kind, alg) __PLUGIN_FEATURE(kind, PRF, .prf = 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_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_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_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_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_HASHER(type, f) __PLUGIN_FEATURE_REGISTER(type, f)
|
||||||
#define _PLUGIN_FEATURE_REGISTER_PRF(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_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_DRBG(type, f) __PLUGIN_FEATURE_REGISTER(type, f)
|
||||||
#define _PLUGIN_FEATURE_REGISTER_DH(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)
|
#define _PLUGIN_FEATURE_REGISTER_RNG(type, f) __PLUGIN_FEATURE_REGISTER(type, f)
|
||||||
|
|||||||
Reference in New Issue
Block a user