Hash function for plugin features added.

This commit is contained in:
Tobias Brunner 2012-05-23 17:37:53 +02:00
parent 31c83b973e
commit a9cfd29c10
2 changed files with 68 additions and 0 deletions

View File

@ -1,4 +1,7 @@
/*
* Copyright (C) 2012 Tobias Brunner
* Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2011 Martin Willi
* Copyright (C) 2011 revosec AG
*
@ -48,6 +51,56 @@ ENUM(plugin_feature_names, FEATURE_NONE, FEATURE_CUSTOM,
"CUSTOM",
);
/**
* See header.
*/
u_int32_t plugin_feature_hash(plugin_feature_t *feature)
{
chunk_t data;
switch (feature->type)
{
case FEATURE_NONE:
case FEATURE_RNG:
case FEATURE_NONCE_GEN:
case FEATURE_DATABASE:
case FEATURE_FETCHER:
/* put these special cases in their (type-specific) buckets */
data = chunk_empty;
break;
case FEATURE_CRYPTER:
case FEATURE_AEAD:
case FEATURE_SIGNER:
case FEATURE_HASHER:
case FEATURE_PRF:
case FEATURE_DH:
case FEATURE_PRIVKEY:
case FEATURE_PRIVKEY_GEN:
case FEATURE_PUBKEY:
case FEATURE_PRIVKEY_SIGN:
case FEATURE_PUBKEY_VERIFY:
case FEATURE_PRIVKEY_DECRYPT:
case FEATURE_PUBKEY_ENCRYPT:
case FEATURE_CERT_DECODE:
case FEATURE_CERT_ENCODE:
case FEATURE_EAP_SERVER:
case FEATURE_EAP_PEER:
data = chunk_from_thing(feature->arg);
break;
case FEATURE_CUSTOM:
data = chunk_create(feature->arg.custom,
strlen(feature->arg.custom));
break;
case FEATURE_XAUTH_SERVER:
case FEATURE_XAUTH_PEER:
data = chunk_create(feature->arg.xauth,
strlen(feature->arg.xauth));
break;
}
return chunk_hash_inc(chunk_from_thing(feature->type),
chunk_hash(data));
}
/**
* See header.
*/

View File

@ -1,4 +1,7 @@
/*
* Copyright (C) 2012 Tobias Brunner
* Hochschule fuer Technik Rapperswil
*
* Copyright (C) 2011 Martin Willi
* Copyright (C) 2011 revosec AG
*
@ -303,6 +306,18 @@ struct plugin_feature_t {
*/
extern enum_name_t *plugin_feature_names;
/**
* Calculates a hash value for the given feature.
*
* Since this is intended to be used with the plugin_features_matches function
* the hash is not really unique for all types of features (e.g. RNGs are all
* mapped to the same value because they are loosely matched by said function).
*
* @param feature feature to hash
* @return hash value of the feature
*/
u_int32_t plugin_feature_hash(plugin_feature_t *feature);
/**
* Check if feature a matches to feature b.
*