[CRYPTO] api: Allow algorithm lookup by type

This patch also adds the infrastructure to pick an algorithm based on
their type.  For example, this allows you to select the encryption
algorithm "aes", instead of any algorithm registered under the name
"aes".  For now this is only accessible internally.  Eventually it
will be made available through crypto_alloc_tfm.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: David S. Miller <davem@davemloft.net>
diff --git a/crypto/cryptomgr.c b/crypto/cryptomgr.c
index e0ebe1b..ae54942 100644
--- a/crypto/cryptomgr.c
+++ b/crypto/cryptomgr.c
@@ -31,6 +31,8 @@
 	} alg;
 
 	struct {
+		u32 type;
+		u32 mask;
 		char name[CRYPTO_MAX_ALG_NAME];
 	} larval;
 
@@ -62,7 +64,8 @@
 	return;
 
 err:
-	crypto_larval_error(param->larval.name);
+	crypto_larval_error(param->larval.name, param->larval.type,
+			    param->larval.mask);
 	goto out;
 }
 
@@ -101,6 +104,8 @@
 	param->alg.data.name[len] = 0;
 
 	memcpy(param->larval.name, larval->alg.cra_name, CRYPTO_MAX_ALG_NAME);
+	param->larval.type = larval->alg.cra_flags;
+	param->larval.mask = larval->mask;
 
 	INIT_WORK(&param->work, cryptomgr_probe, param);
 	schedule_work(&param->work);