Merge git://git.kernel.org/pub/scm/linux/kernel/git/herbert/crypto-2.6
[pandora-kernel.git] / crypto / api.c
index d5944f9..798526d 100644 (file)
@@ -285,13 +285,6 @@ static int crypto_init_ops(struct crypto_tfm *tfm, u32 type, u32 mask)
        switch (crypto_tfm_alg_type(tfm)) {
        case CRYPTO_ALG_TYPE_CIPHER:
                return crypto_init_cipher_ops(tfm);
-               
-       case CRYPTO_ALG_TYPE_DIGEST:
-               if ((mask & CRYPTO_ALG_TYPE_HASH_MASK) !=
-                   CRYPTO_ALG_TYPE_HASH_MASK)
-                       return crypto_init_digest_ops_async(tfm);
-               else
-                       return crypto_init_digest_ops(tfm);
 
        case CRYPTO_ALG_TYPE_COMPRESS:
                return crypto_init_compress_ops(tfm);
@@ -318,11 +311,7 @@ static void crypto_exit_ops(struct crypto_tfm *tfm)
        case CRYPTO_ALG_TYPE_CIPHER:
                crypto_exit_cipher_ops(tfm);
                break;
-               
-       case CRYPTO_ALG_TYPE_DIGEST:
-               crypto_exit_digest_ops(tfm);
-               break;
-               
+
        case CRYPTO_ALG_TYPE_COMPRESS:
                crypto_exit_compress_ops(tfm);
                break;
@@ -349,11 +338,7 @@ static unsigned int crypto_ctxsize(struct crypto_alg *alg, u32 type, u32 mask)
        case CRYPTO_ALG_TYPE_CIPHER:
                len += crypto_cipher_ctxsize(alg);
                break;
-               
-       case CRYPTO_ALG_TYPE_DIGEST:
-               len += crypto_digest_ctxsize(alg);
-               break;
-               
+
        case CRYPTO_ALG_TYPE_COMPRESS:
                len += crypto_compress_ctxsize(alg);
                break;
@@ -472,7 +457,7 @@ void *crypto_create_tfm(struct crypto_alg *alg,
        int err = -ENOMEM;
 
        tfmsize = frontend->tfmsize;
-       total = tfmsize + sizeof(*tfm) + frontend->extsize(alg, frontend);
+       total = tfmsize + sizeof(*tfm) + frontend->extsize(alg);
 
        mem = kzalloc(total, GFP_KERNEL);
        if (mem == NULL)
@@ -481,7 +466,7 @@ void *crypto_create_tfm(struct crypto_alg *alg,
        tfm = (struct crypto_tfm *)(mem + tfmsize);
        tfm->__crt_alg = alg;
 
-       err = frontend->init_tfm(tfm, frontend);
+       err = frontend->init_tfm(tfm);
        if (err)
                goto out_free_tfm;
 
@@ -503,6 +488,27 @@ out:
 }
 EXPORT_SYMBOL_GPL(crypto_create_tfm);
 
+struct crypto_alg *crypto_find_alg(const char *alg_name,
+                                  const struct crypto_type *frontend,
+                                  u32 type, u32 mask)
+{
+       struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask) =
+               crypto_alg_mod_lookup;
+
+       if (frontend) {
+               type &= frontend->maskclear;
+               mask &= frontend->maskclear;
+               type |= frontend->type;
+               mask |= frontend->maskset;
+
+               if (frontend->lookup)
+                       lookup = frontend->lookup;
+       }
+
+       return lookup(alg_name, type, mask);
+}
+EXPORT_SYMBOL_GPL(crypto_find_alg);
+
 /*
  *     crypto_alloc_tfm - Locate algorithm and allocate transform
  *     @alg_name: Name of algorithm
@@ -526,21 +532,13 @@ EXPORT_SYMBOL_GPL(crypto_create_tfm);
 void *crypto_alloc_tfm(const char *alg_name,
                       const struct crypto_type *frontend, u32 type, u32 mask)
 {
-       struct crypto_alg *(*lookup)(const char *name, u32 type, u32 mask);
        void *tfm;
        int err;
 
-       type &= frontend->maskclear;
-       mask &= frontend->maskclear;
-       type |= frontend->type;
-       mask |= frontend->maskset;
-
-       lookup = frontend->lookup ?: crypto_alg_mod_lookup;
-
        for (;;) {
                struct crypto_alg *alg;
 
-               alg = lookup(alg_name, type, mask);
+               alg = crypto_find_alg(alg_name, frontend, type, mask);
                if (IS_ERR(alg)) {
                        err = PTR_ERR(alg);
                        goto err;