summaryrefslogtreecommitdiffstats
path: root/crypto/rsa.c
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2015-12-05 17:09:34 +0100
committerHerbert Xu <herbert@gondor.apana.org.au>2015-12-09 20:03:57 +0800
commit3d5b1ecdea6fb94f8c61554fcb2ba776a2d3d0e6 (patch)
tree0566eca107c60adc4d962d84dac952ec793b49ef /crypto/rsa.c
parent28a4618ad14cf17009a87d8b5718132a5d4ef852 (diff)
downloadlinux-3d5b1ecdea6fb94f8c61554fcb2ba776a2d3d0e6.tar.gz
linux-3d5b1ecdea6fb94f8c61554fcb2ba776a2d3d0e6.tar.bz2
linux-3d5b1ecdea6fb94f8c61554fcb2ba776a2d3d0e6.zip
crypto: rsa - RSA padding algorithm
This patch adds PKCS#1 v1.5 standard RSA padding as a separate template. This way an RSA cipher with padding can be obtained by instantiating "pkcs1pad(rsa)". The reason for adding this is that RSA is almost never used without this padding (or OAEP) so it will be needed for either certificate work in the kernel or the userspace, and I also hear that it is likely implemented by hardware RSA in which case hardware implementations of the whole of pkcs1pad(rsa) can be provided. Signed-off-by: Andrew Zaborowski <andrew.zaborowski@intel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'crypto/rsa.c')
-rw-r--r--crypto/rsa.c16
1 files changed, 15 insertions, 1 deletions
diff --git a/crypto/rsa.c b/crypto/rsa.c
index 58aad69a490c..77d737f52147 100644
--- a/crypto/rsa.c
+++ b/crypto/rsa.c
@@ -13,6 +13,7 @@
#include <crypto/internal/rsa.h>
#include <crypto/internal/akcipher.h>
#include <crypto/akcipher.h>
+#include <crypto/algapi.h>
/*
* RSAEP function [RFC3447 sec 5.1.1]
@@ -315,11 +316,24 @@ static struct akcipher_alg rsa = {
static int rsa_init(void)
{
- return crypto_register_akcipher(&rsa);
+ int err;
+
+ err = crypto_register_akcipher(&rsa);
+ if (err)
+ return err;
+
+ err = crypto_register_template(&rsa_pkcs1pad_tmpl);
+ if (err) {
+ crypto_unregister_akcipher(&rsa);
+ return err;
+ }
+
+ return 0;
}
static void rsa_exit(void)
{
+ crypto_unregister_template(&rsa_pkcs1pad_tmpl);
crypto_unregister_akcipher(&rsa);
}