Przeglądaj źródła

crypto: rng - Add multiple algorithm registration interface

This patch adds the helpers that allow the registration and removal
of multiple RNG algorithms.

Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Herbert Xu 10 lat temu
rodzic
commit
881cd6c570
2 zmienionych plików z 31 dodań i 0 usunięć
  1. 29 0
      crypto/rng.c
  2. 2 0
      include/crypto/internal/rng.h

+ 29 - 0
crypto/rng.c

@@ -233,5 +233,34 @@ void crypto_unregister_rng(struct rng_alg *alg)
 }
 }
 EXPORT_SYMBOL_GPL(crypto_unregister_rng);
 EXPORT_SYMBOL_GPL(crypto_unregister_rng);
 
 
+int crypto_register_rngs(struct rng_alg *algs, int count)
+{
+	int i, ret;
+
+	for (i = 0; i < count; i++) {
+		ret = crypto_register_rng(algs + i);
+		if (ret)
+			goto err;
+	}
+
+	return 0;
+
+err:
+	for (--i; i >= 0; --i)
+		crypto_unregister_rng(algs + i);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(crypto_register_rngs);
+
+void crypto_unregister_rngs(struct rng_alg *algs, int count)
+{
+	int i;
+
+	for (i = count - 1; i >= 0; --i)
+		crypto_unregister_rng(algs + i);
+}
+EXPORT_SYMBOL_GPL(crypto_unregister_rngs);
+
 MODULE_LICENSE("GPL");
 MODULE_LICENSE("GPL");
 MODULE_DESCRIPTION("Random Number Generator");
 MODULE_DESCRIPTION("Random Number Generator");

+ 2 - 0
include/crypto/internal/rng.h

@@ -20,6 +20,8 @@ extern const struct crypto_type crypto_rng_type;
 
 
 int crypto_register_rng(struct rng_alg *alg);
 int crypto_register_rng(struct rng_alg *alg);
 void crypto_unregister_rng(struct rng_alg *alg);
 void crypto_unregister_rng(struct rng_alg *alg);
+int crypto_register_rngs(struct rng_alg *algs, int count);
+void crypto_unregister_rngs(struct rng_alg *algs, int count);
 
 
 static inline void *crypto_rng_ctx(struct crypto_rng *tfm)
 static inline void *crypto_rng_ctx(struct crypto_rng *tfm)
 {
 {