]> git.ipfire.org Git - thirdparty/strongswan.git/commitdiff
Probe for supported AF_ALG algorithms, register dynamically
authorMartin Willi <martin@revosec.ch>
Mon, 8 Nov 2010 13:56:23 +0000 (14:56 +0100)
committerMartin Willi <martin@revosec.ch>
Mon, 20 Dec 2010 09:09:20 +0000 (10:09 +0100)
src/libstrongswan/plugins/af_alg/af_alg_crypter.c
src/libstrongswan/plugins/af_alg/af_alg_crypter.h
src/libstrongswan/plugins/af_alg/af_alg_hasher.c
src/libstrongswan/plugins/af_alg/af_alg_hasher.h
src/libstrongswan/plugins/af_alg/af_alg_ops.c
src/libstrongswan/plugins/af_alg/af_alg_plugin.c
src/libstrongswan/plugins/af_alg/af_alg_prf.c
src/libstrongswan/plugins/af_alg/af_alg_prf.h
src/libstrongswan/plugins/af_alg/af_alg_signer.c
src/libstrongswan/plugins/af_alg/af_alg_signer.h

index ea80374f0ea00066e0da08305b026007a3dd1585..77e41e3fae7426eb7a71e5b1b7830a85b21aabc5 100644 (file)
@@ -49,47 +49,76 @@ struct private_af_alg_crypter_t {
        size_t iv_size;
 };
 
+/**
+ * Algorithm database
+ */
+static struct {
+       encryption_algorithm_t id;
+       char *name;
+       size_t block_size;
+       /* key size of the algorithm */
+       size_t key_size;
+       /* size of the keying material (key + nonce for ctr mode) */
+       size_t keymat_size;
+       size_t iv_size;
+} algs[] = {
+       {ENCR_DES,                      "cbc(des)",                                      8,      8,      8,      8,     },
+       {ENCR_3DES,                     "cbc(des3_ede)",                         8,     24,     24,      8,     },
+       {ENCR_AES_CBC,          "cbc(aes)",                                     16,     16,     16,     16,     },
+       {ENCR_AES_CBC,          "cbc(aes)",                                     16,     24,     24,     16,     },
+       {ENCR_AES_CBC,          "cbc(aes)",                                     16,     32,     32,     16,     },
+       {ENCR_AES_CTR,          "rfc3686(ctr(aes))",             1,     16,     20,      8,     },
+       {ENCR_AES_CTR,          "rfc3686(ctr(aes))",             1,     24,     28,      8,     },
+       {ENCR_AES_CTR,          "rfc3686(ctr(aes))",             1,     32,     36,      8,     },
+       {ENCR_CAMELLIA_CBC,     "cbc(camellia)",                        16,     16,     16,     16,     },
+       {ENCR_CAMELLIA_CBC,     "cbc(camellia)",                        16,     24,     24,     16,     },
+       {ENCR_CAMELLIA_CBC,     "cbc(camellia)",                        16,     32,     32,     16,     },
+       {ENCR_CAMELLIA_CTR,     "rfc3686(ctr(camellia))",        1,     16,     20,      8,     },
+       {ENCR_CAMELLIA_CTR,     "rfc3686(ctr(camellia))",        1,     24,     28,      8,     },
+       {ENCR_CAMELLIA_CTR,     "rfc3686(ctr(camellia))",        1,     32,     36,      8,     },
+       {ENCR_CAST,                     "cbc(cast5)",                            8,     16,     16,      8,     },
+       {ENCR_BLOWFISH,         "cbc(blowfish)",                         8,     16,     16,      8,     },
+       {ENCR_BLOWFISH,         "cbc(blowfish)",                         8,     24,     24,      8,     },
+       {ENCR_BLOWFISH,         "cbc(blowfish)",                         8,     32,     32,      8,     },
+       {ENCR_SERPENT_CBC,      "cbc(serpent)",                         16,     16,     16,     16,     },
+       {ENCR_SERPENT_CBC,      "cbc(serpent)",                         16,     24,     24,     16,     },
+       {ENCR_SERPENT_CBC,      "cbc(serpent)",                         16,     32,     32,     16,     },
+       {ENCR_TWOFISH_CBC,      "cbc(twofish)",                         16,     16,     16,     16,     },
+       {ENCR_TWOFISH_CBC,      "cbc(twofish)",                         16,     24,     24,     16,     },
+       {ENCR_TWOFISH_CBC,      "cbc(twofish)",                         16,     32,     32,     16,     },
+};
+
+/**
+ * See header.
+ */
+void af_alg_crypter_probe()
+{
+       encryption_algorithm_t prev = -1;
+       af_alg_ops_t *ops;
+       int i;
+
+       for (i = 0; i < countof(algs); i++)
+       {
+               if (prev != algs[i].id)
+               {
+                       ops = af_alg_ops_create("skcipher", algs[i].name);
+                       if (ops)
+                       {
+                               ops->destroy(ops);
+                               lib->crypto->add_crypter(lib->crypto, algs[i].id, "af_alg",
+                                                               (crypter_constructor_t)af_alg_crypter_create);
+                       }
+               }
+               prev = algs[i].id;
+       }
+}
+
 /**
  * Get the kernel algorithm string and block/key size for our identifier
  */
 static size_t lookup_alg(encryption_algorithm_t algo, char **name,
                                                 size_t key_size, size_t *keymat_size, size_t *iv_size)
 {
-       static struct {
-               encryption_algorithm_t id;
-               char *name;
-               size_t block_size;
-               /* key size of the algorithm */
-               size_t key_size;
-               /* size of the keying material (key + nonce for ctr mode) */
-               size_t keymat_size;
-               size_t iv_size;
-       } algs[] = {
-               {ENCR_DES,                      "cbc(des)",                                      8,      8,      8,      8,     },
-               {ENCR_3DES,                     "cbc(des3_ede)",                         8,     24,     24,      8,     },
-               {ENCR_AES_CBC,          "cbc(aes)",                                     16,     16,     16,     16,     },
-               {ENCR_AES_CBC,          "cbc(aes)",                                     16,     24,     24,     16,     },
-               {ENCR_AES_CBC,          "cbc(aes)",                                     16,     32,     32,     16,     },
-               {ENCR_AES_CTR,          "rfc3686(ctr(aes))",             1,     16,     20,      8,     },
-               {ENCR_AES_CTR,          "rfc3686(ctr(aes))",             1,     24,     28,      8,     },
-               {ENCR_AES_CTR,          "rfc3686(ctr(aes))",             1,     32,     36,      8,     },
-               {ENCR_CAMELLIA_CBC,     "cbc(camellia)",                        16,     16,     16,     16,     },
-               {ENCR_CAMELLIA_CBC,     "cbc(camellia)",                        16,     24,     24,     16,     },
-               {ENCR_CAMELLIA_CBC,     "cbc(camellia)",                        16,     32,     32,     16,     },
-               {ENCR_CAMELLIA_CTR,     "rfc3686(ctr(camellia))",        1,     16,     20,      8,     },
-               {ENCR_CAMELLIA_CTR,     "rfc3686(ctr(camellia))",        1,     24,     28,      8,     },
-               {ENCR_CAMELLIA_CTR,     "rfc3686(ctr(camellia))",        1,     32,     36,      8,     },
-               {ENCR_CAST,                     "cbc(cast5)",                            8,     16,     16,      8,     },
-               {ENCR_BLOWFISH,         "cbc(blowfish)",                         8,     16,     16,      8,     },
-               {ENCR_BLOWFISH,         "cbc(blowfish)",                         8,     24,     24,      8,     },
-               {ENCR_BLOWFISH,         "cbc(blowfish)",                         8,     32,     32,      8,     },
-               {ENCR_SERPENT_CBC,      "cbc(serpent)",                         16,     16,     16,     16,     },
-               {ENCR_SERPENT_CBC,      "cbc(serpent)",                         16,     24,     24,     16,     },
-               {ENCR_SERPENT_CBC,      "cbc(serpent)",                         16,     32,     32,     16,     },
-               {ENCR_TWOFISH_CBC,      "cbc(twofish)",                         16,     16,     16,     16,     },
-               {ENCR_TWOFISH_CBC,      "cbc(twofish)",                         16,     24,     24,     16,     },
-               {ENCR_TWOFISH_CBC,      "cbc(twofish)",                         16,     32,     32,     16,     },
-       };
        int i;
 
        for (i = 0; i < countof(algs); i++)
index 0429aa5dd7fbe6e33ec15dd47a63a152e2f88a49..711d2fc353652efa2c0d165a169e02fc5bbe0388 100644 (file)
@@ -46,4 +46,9 @@ struct af_alg_crypter_t {
 af_alg_crypter_t *af_alg_crypter_create(encryption_algorithm_t algo,
                                                                                size_t key_size);
 
+/**
+ * Probe algorithms and register af_alg_crypter_create().
+ */
+void af_alg_crypter_probe();
+
 #endif /** AF_ALG_CRYPTER_H_ @}*/
index 2627715143029bd59481e01697562a54cc71db6a..3c5d8daec7c486122c56402f8f2a3f6893ccc9ea 100644 (file)
@@ -39,24 +39,48 @@ struct private_af_alg_hasher_t {
        size_t size;
 };
 
+/**
+ * Algorithm database
+ */
+static struct {
+       hash_algorithm_t id;
+       char *name;
+       size_t size;
+} algs[] = {
+       {HASH_SHA1,                     "sha1",                 HASH_SIZE_SHA1          },
+       {HASH_MD5,                      "md5",                  HASH_SIZE_MD5           },
+       {HASH_SHA224,           "sha224",               HASH_SIZE_SHA224        },
+       {HASH_SHA256,           "sha256",               HASH_SIZE_SHA256        },
+       {HASH_SHA384,           "sha384",               HASH_SIZE_SHA384        },
+       {HASH_SHA512,           "sha512",               HASH_SIZE_SHA512        },
+       {HASH_MD4,                      "md4",                  HASH_SIZE_MD4           },
+};
+
+/**
+ * See header.
+ */
+void af_alg_hasher_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_hasher(lib->crypto, algs[i].id, "af_alg",
+                                                       (hasher_constructor_t)af_alg_hasher_create);
+               }
+       }
+}
+
 /**
  * Get the kernel algorithm string and hash size for our identifier
  */
 static size_t lookup_alg(hash_algorithm_t algo, char **name)
 {
-       static struct {
-               hash_algorithm_t id;
-               char *name;
-               size_t size;
-       } algs[] = {
-               {HASH_MD4 ,                     "md4",                  HASH_SIZE_MD4           },
-               {HASH_MD5 ,                     "md5",                  HASH_SIZE_MD5           },
-               {HASH_SHA1,                     "sha1",                 HASH_SIZE_SHA1          },
-               {HASH_SHA224,           "sha224",               HASH_SIZE_SHA224        },
-               {HASH_SHA256,           "sha256",               HASH_SIZE_SHA256        },
-               {HASH_SHA384,           "sha384",               HASH_SIZE_SHA384        },
-               {HASH_SHA512,           "sha512",               HASH_SIZE_SHA512        },
-       };
        int i;
 
        for (i = 0; i < countof(algs); i++)
index eab18932f9c6e5188f5481a7c00918c0a158237e..e0833e23a9bd0ada837d334eecea8dd0c6ac43f1 100644 (file)
@@ -44,4 +44,9 @@ struct af_alg_hasher_t {
  */
 af_alg_hasher_t *af_alg_hasher_create(hash_algorithm_t algo);
 
+/**
+ * Probe algorithms and register af_alg_hasher_create().
+ */
+void af_alg_hasher_probe();
+
 #endif /** af_alg_HASHER_H_ @}*/
index 37eeab54e27c1ca86117fe3c0ddb2831e85f6e0f..82a227d978a86e53927d03bc406489f855e68baf 100644 (file)
@@ -212,8 +212,11 @@ af_alg_ops_t *af_alg_ops_create(char *type, char *alg)
        }
        if (bind(this->tfm, (struct sockaddr*)&sa, sizeof(sa)) == -1)
        {
-               DBG1(DBG_LIB, "binding AF_ALG socket for '%s' failed: %s",
-                        sa.salg_name, strerror(errno));
+               if (errno != ENOENT)
+               {       /* fail silently if algorithm not supported */
+                       DBG1(DBG_LIB, "binding AF_ALG socket for '%s' failed: %s",
+                                sa.salg_name, strerror(errno));
+               }
                destroy(this);
                return NULL;
        }
index b8bbd26b88d7648b219e8d44aec506871264f771..54e39f1a010d1b1af8ef36c33bde2506a152be37 100644 (file)
@@ -65,83 +65,10 @@ plugin_t *af_alg_plugin_create()
                },
        );
 
-       lib->crypto->add_hasher(lib->crypto, HASH_SHA1,
-                                       (hasher_constructor_t)af_alg_hasher_create);
-       lib->crypto->add_hasher(lib->crypto, HASH_SHA224,
-                                       (hasher_constructor_t)af_alg_hasher_create);
-       lib->crypto->add_hasher(lib->crypto, HASH_SHA256,
-                                       (hasher_constructor_t)af_alg_hasher_create);
-       lib->crypto->add_hasher(lib->crypto, HASH_SHA384,
-                                       (hasher_constructor_t)af_alg_hasher_create);
-       lib->crypto->add_hasher(lib->crypto, HASH_SHA512,
-                                       (hasher_constructor_t)af_alg_hasher_create);
-       lib->crypto->add_hasher(lib->crypto, HASH_MD5,
-                                       (hasher_constructor_t)af_alg_hasher_create);
-       lib->crypto->add_hasher(lib->crypto, HASH_MD4,
-                                       (hasher_constructor_t)af_alg_hasher_create);
-
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_MD5_96,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_MD5_128,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA1_96,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA1_128,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA1_160,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA2_256_96,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA2_256_128,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA2_256_256,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA2_384_192,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA2_384_384,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_HMAC_SHA2_512_256,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_AES_XCBC_96,
-                                       (signer_constructor_t)af_alg_signer_create);
-       lib->crypto->add_signer(lib->crypto, AUTH_CAMELLIA_XCBC_96,
-                                       (signer_constructor_t)af_alg_signer_create);
-
-       lib->crypto->add_prf(lib->crypto, PRF_HMAC_MD5,
-                                       (prf_constructor_t)af_alg_prf_create);
-       lib->crypto->add_prf(lib->crypto, PRF_HMAC_SHA1,
-                                       (prf_constructor_t)af_alg_prf_create);
-       lib->crypto->add_prf(lib->crypto, PRF_HMAC_SHA2_256,
-                                       (prf_constructor_t)af_alg_prf_create);
-       lib->crypto->add_prf(lib->crypto, PRF_HMAC_SHA2_384,
-                                       (prf_constructor_t)af_alg_prf_create);
-       lib->crypto->add_prf(lib->crypto, PRF_HMAC_SHA2_512,
-                                       (prf_constructor_t)af_alg_prf_create);
-       lib->crypto->add_prf(lib->crypto, PRF_AES128_XCBC,
-                                       (prf_constructor_t)af_alg_prf_create);
-       lib->crypto->add_prf(lib->crypto, PRF_CAMELLIA128_XCBC,
-                                       (prf_constructor_t)af_alg_prf_create);
-
-       lib->crypto->add_crypter(lib->crypto, ENCR_DES,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_3DES,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_AES_CBC,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_AES_CTR,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_CAMELLIA_CBC,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_CAMELLIA_CTR,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_CAST,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_BLOWFISH,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_SERPENT_CBC,
-                                       (crypter_constructor_t)af_alg_crypter_create);
-       lib->crypto->add_crypter(lib->crypto, ENCR_TWOFISH_CBC,
-                                       (crypter_constructor_t)af_alg_crypter_create);
+       af_alg_hasher_probe();
+       af_alg_signer_probe();
+       af_alg_prf_probe();
+       af_alg_crypter_probe();
 
        return &this->public.plugin;
 }
index 8912e2457692c3106751f1d4a6286dceca94674e..e6bb9354c12f20af2707254738a8900f95adb307 100644 (file)
@@ -49,25 +49,49 @@ struct private_af_alg_prf_t {
        bool xcbc;
 };
 
+/**
+ * Algorithm database
+ */
+static struct {
+       pseudo_random_function_t id;
+       char *name;
+       size_t block_size;
+       bool xcbc;
+} algs[] = {
+       {PRF_HMAC_SHA1,                 "hmac(sha1)",           20,             FALSE,  },
+       {PRF_HMAC_SHA2_256,             "hmac(sha256)",         32,             FALSE,  },
+       {PRF_HMAC_MD5,                  "hmac(md5)",            16,             FALSE,  },
+       {PRF_HMAC_SHA2_384,             "hmac(sha384)",         48,             FALSE,  },
+       {PRF_HMAC_SHA2_512,             "hmac(sha512)",         64,             FALSE,  },
+       {PRF_AES128_XCBC,               "xcbc(aes)",            16,             TRUE,   },
+       {PRF_CAMELLIA128_XCBC,  "xcbc(camellia)",       16,             TRUE,   },
+};
+
+/**
+ * See header.
+ */
+void af_alg_prf_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_prf(lib->crypto, algs[i].id, "af_alg",
+                                                       (prf_constructor_t)af_alg_prf_create);
+               }
+       }
+}
+
 /**
  * Get the kernel algorithm string and block size for our identifier
  */
 static size_t lookup_alg(integrity_algorithm_t algo, char **name, bool *xcbc)
 {
-       static struct {
-               integrity_algorithm_t id;
-               char *name;
-               size_t block_size;
-               bool xcbc;
-       } algs[] = {
-               {PRF_HMAC_MD5,                  "hmac(md5)",            16,             FALSE,  },
-               {PRF_HMAC_SHA1,                 "hmac(sha1)",           20,             FALSE,  },
-               {PRF_HMAC_SHA2_256,             "hmac(sha256)",         32,             FALSE,  },
-               {PRF_HMAC_SHA2_384,             "hmac(sha384)",         48,             FALSE,  },
-               {PRF_HMAC_SHA2_512,             "hmac(sha512)",         64,             FALSE,  },
-               {PRF_AES128_XCBC,               "xcbc(aes)",            16,             TRUE,   },
-               {PRF_CAMELLIA128_XCBC,  "xcbc(camellia)",       16,             TRUE,   },
-       };
        int i;
 
        for (i = 0; i < countof(algs); i++)
index 01e0e857d3ef42f07d805f07dde3676158b709d0..a3dea5649b71b0a1695bb165ff8301905d2ffffe 100644 (file)
@@ -44,4 +44,9 @@ struct af_alg_prf_t {
  */
 af_alg_prf_t *af_alg_prf_create(pseudo_random_function_t algo);
 
+/**
+ * Probe algorithms and register af_alg_prf_create().
+ */
+void af_alg_prf_probe();
+
 #endif /** AF_ALG_PRF_H_ @}*/
index 7818db492165e165f698f2fef61b1d7aec515939..245675a583d247fcd544cb7e45f7fa9b1a193bab 100644 (file)
@@ -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++)
index ea5416e1fcf76a9b100acef96f60b7f6c68f6444..b1d90707fce38715beacb0c319c4872c384f3e79 100644 (file)
@@ -44,4 +44,9 @@ struct af_alg_signer_t {
  */
 af_alg_signer_t *af_alg_signer_create(integrity_algorithm_t algo);
 
+/**
+ * Probe algorithms and register af_alg_signer_create().
+ */
+void af_alg_signer_probe();
+
 #endif /** AF_ALG_SIGNER_H_ @}*/