ENUM(plugin_feature_names, FEATURE_NONE, FEATURE_CUSTOM,
"NONE",
"CRYPTER",
+ "AEAD",
"SIGNER",
"HASHER",
"PRF",
case FEATURE_CRYPTER:
return a->crypter.alg == b->crypter.alg &&
a->crypter.key_size == b->crypter.key_size;
+ case FEATURE_AEAD:
+ return a->aead.alg == b->aead.alg &&
+ a->aead.key_size == b->aead.key_size;
case FEATURE_SIGNER:
return a->signer == b->signer;
case FEATURE_HASHER:
return str;
}
break;
+ case FEATURE_AEAD:
+ if (asprintf(&str, "%N:%N-%d", plugin_feature_names, feature->type,
+ encryption_algorithm_names, feature->aead.alg,
+ feature->aead.key_size) > 0)
+ {
+ return str;
+ }
+ break;
case FEATURE_SIGNER:
if (asprintf(&str, "%N:%N", plugin_feature_names, feature->type,
integrity_algorithm_names, feature->signer) > 0)
FEATURE_NONE,
/** crypter_t */
FEATURE_CRYPTER,
+ /** aead_t */
+ FEATURE_AEAD,
/** signer_t */
FEATURE_SIGNER,
/** hasher_t */
encryption_algorithm_t alg;
size_t key_size;
} crypter;
+ /** FEATURE_AEAD */
+ struct {
+ encryption_algorithm_t alg;
+ size_t key_size;
+ } aead;
/** FEATURE_SIGNER */
integrity_algorithm_t signer;
/** FEATURE_PRF */
#define __PLUGIN_FEATURE(kind, type, ...) (plugin_feature_t){ FEATURE_##kind, FEATURE_##type, { __VA_ARGS__ }}
#define _PLUGIN_FEATURE_CRYPTER(kind, alg, size) __PLUGIN_FEATURE(kind, CRYPTER, .crypter = { alg, size })
+#define _PLUGIN_FEATURE_AEAD(kind, alg, size) __PLUGIN_FEATURE(kind, AEAD, .aead = { alg, size })
#define _PLUGIN_FEATURE_SIGNER(kind, alg) __PLUGIN_FEATURE(kind, SIGNER, .signer = 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_REGISTER(type, _f) (plugin_feature_t){ FEATURE_REGISTER, FEATURE_##type, .reg.f = _f }
#define __PLUGIN_FEATURE_REGISTER_BUILDER(type, _f, _final) (plugin_feature_t){ FEATURE_REGISTER, FEATURE_##type, .reg = {.f = _f, .final = _final, }}
#define _PLUGIN_FEATURE_REGISTER_CRYPTER(type, f) __PLUGIN_FEATURE_REGISTER(type, f)
+#define _PLUGIN_FEATURE_REGISTER_AEAD(type, f) __PLUGIN_FEATURE_REGISTER(type, f)
#define _PLUGIN_FEATURE_REGISTER_SIGNER(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)