Probe for supported AF_ALG algorithms, register dynamically

This commit is contained in:
Martin Willi
2010-12-20 10:09:20 +01:00
parent 4ee5d97d57
commit 23a737eb29
10 changed files with 212 additions and 161 deletions
@@ -44,32 +44,56 @@ struct private_af_alg_signer_t {
size_t key_size;
};
/**
* Algorithm database
*/
static struct {
integrity_algorithm_t id;
char *name;
size_t block_size;
size_t key_size;
} algs[] = {
{AUTH_HMAC_SHA1_96, "hmac(sha1)", 12, 20, },
{AUTH_HMAC_SHA1_128, "hmac(sha1)", 16, 20, },
{AUTH_HMAC_SHA1_160, "hmac(sha1)", 20, 20, },
{AUTH_HMAC_SHA2_256_96, "hmac(sha256)", 12, 32, },
{AUTH_HMAC_SHA2_256_128, "hmac(sha256)", 16, 32, },
{AUTH_HMAC_MD5_96, "hmac(md5)", 12, 16, },
{AUTH_HMAC_MD5_128, "hmac(md5)", 16, 16, },
{AUTH_HMAC_SHA2_256_256, "hmac(sha384)", 32, 32, },
{AUTH_HMAC_SHA2_384_192, "hmac(sha384)", 24, 48, },
{AUTH_HMAC_SHA2_384_384, "hmac(sha384)", 48, 48, },
{AUTH_HMAC_SHA2_512_256, "hmac(sha512)", 32, 64, },
{AUTH_AES_XCBC_96, "xcbc(aes)", 12, 16, },
{AUTH_CAMELLIA_XCBC_96, "xcbc(camellia)", 12, 16, },
};
/**
* See header.
*/
void af_alg_signer_probe()
{
af_alg_ops_t *ops;
int i;
for (i = 0; i < countof(algs); i++)
{
ops = af_alg_ops_create("hash", algs[i].name);
if (ops)
{
ops->destroy(ops);
lib->crypto->add_signer(lib->crypto, algs[i].id, "af_alg",
(signer_constructor_t)af_alg_signer_create);
}
}
}
/**
* Get the kernel algorithm string and block/key size for our identifier
*/
static size_t lookup_alg(integrity_algorithm_t algo, char **name,
size_t *key_size)
{
static struct {
integrity_algorithm_t id;
char *name;
size_t block_size;
size_t key_size;
} algs[] = {
{AUTH_HMAC_MD5_96, "hmac(md5)", 12, 16, },
{AUTH_HMAC_MD5_128, "hmac(md5)", 16, 16, },
{AUTH_HMAC_SHA1_96, "hmac(sha1)", 12, 20, },
{AUTH_HMAC_SHA1_128, "hmac(sha1)", 16, 20, },
{AUTH_HMAC_SHA1_160, "hmac(sha1)", 20, 20, },
{AUTH_HMAC_SHA2_256_96, "hmac(sha256)", 12, 32, },
{AUTH_HMAC_SHA2_256_128, "hmac(sha256)", 16, 32, },
{AUTH_HMAC_SHA2_256_256, "hmac(sha384)", 32, 32, },
{AUTH_HMAC_SHA2_384_192, "hmac(sha384)", 24, 48, },
{AUTH_HMAC_SHA2_384_384, "hmac(sha384)", 48, 48, },
{AUTH_HMAC_SHA2_512_256, "hmac(sha512)", 32, 64, },
{AUTH_AES_XCBC_96, "xcbc(aes)", 12, 16, },
{AUTH_CAMELLIA_XCBC_96, "xcbc(camellia)", 12, 16, },
};
int i;
for (i = 0; i < countof(algs); i++)