Am Mittwoch, 9. September 2015, 09:15:20 schrieb Tadeusz Struk: Hi Tadeusz, >Setkey function has been split into set_priv_key and set_pub_key. >Akcipher requests takes sgl for src and dst instead of void *. >Users of the API need to be disabled so that the build works fine >after this patch. >They will be enabled in subsequent patches. > >Signed-off-by: Tadeusz Struk <tadeusz.struk@xxxxxxxxx> >--- > crypto/Makefile | 5 -- > crypto/testmgr.c | 4 + > drivers/crypto/qat/qat_common/Makefile | 2 - > include/crypto/akcipher.h | 99 >++++++++++++++++++++++---------- 4 files changed, 71 insertions(+), 39 >deletions(-) > >diff --git a/crypto/Makefile b/crypto/Makefile >index e2c5981..65e91da 100644 >--- a/crypto/Makefile >+++ b/crypto/Makefile >@@ -34,11 +34,6 @@ obj-$(CONFIG_CRYPTO_AKCIPHER2) += akcipher.o > $(obj)/rsakey-asn1.o: $(obj)/rsakey-asn1.c $(obj)/rsakey-asn1.h > clean-files += rsakey-asn1.c rsakey-asn1.h > >-rsa_generic-y := rsakey-asn1.o >-rsa_generic-y += rsa.o >-rsa_generic-y += rsa_helper.o >-obj-$(CONFIG_CRYPTO_RSA) += rsa_generic.o >- > cryptomgr-y := algboss.o testmgr.o > > obj-$(CONFIG_CRYPTO_MANAGER2) += cryptomgr.o >diff --git a/crypto/testmgr.c b/crypto/testmgr.c >index 35c2de1..2f2b66e 100644 >--- a/crypto/testmgr.c >+++ b/crypto/testmgr.c >@@ -1835,6 +1835,7 @@ static int alg_test_drbg(const struct alg_test_desc >*desc, const char *driver, > > } > >+#if 0 > static int do_test_rsa(struct crypto_akcipher *tfm, > struct akcipher_testvec *vecs) > { >@@ -1975,6 +1976,7 @@ static int alg_test_akcipher(const struct alg_test_desc >*desc, crypto_free_akcipher(tfm); > return err; > } >+#endif Just to check: is the ifdef 0 intentional? > > static int alg_test_null(const struct alg_test_desc *desc, > const char *driver, u32 type, u32 mask) >@@ -3611,7 +3613,7 @@ static const struct alg_test_desc alg_test_descs[] = { > } > }, { > .alg = "rsa", >- .test = alg_test_akcipher, >+ .test = alg_test_null, > .fips_allowed = 1, > .suite = { > .akcipher = { >diff --git a/drivers/crypto/qat/qat_common/Makefile >b/drivers/crypto/qat/qat_common/Makefile index df20a9d..ba5abdb 100644 >--- a/drivers/crypto/qat/qat_common/Makefile >+++ b/drivers/crypto/qat/qat_common/Makefile >@@ -13,8 +13,6 @@ intel_qat-objs := adf_cfg.o \ > adf_hw_arbiter.o \ > qat_crypto.o \ > qat_algs.o \ >- qat_rsakey-asn1.o \ >- qat_asym_algs.o \ > qat_uclo.o \ > qat_hal.o > >diff --git a/include/crypto/akcipher.h b/include/crypto/akcipher.h >index 69d163e..7380e25 100644 >--- a/include/crypto/akcipher.h >+++ b/include/crypto/akcipher.h >@@ -13,28 +13,25 @@ > #ifndef _CRYPTO_AKCIPHER_H > #define _CRYPTO_AKCIPHER_H > #include <linux/crypto.h> >+#include <linux/scatterlist.h> > > /** > * struct akcipher_request - public key request > * > * @base: Common attributes for async crypto requests >- * @src: Pointer to memory containing the input parameters >- * The format of the parameter(s) is expeted to be Octet String >- * @dst: Pointer to memory whare the result will be stored >- * @src_len: Size of the input parameter >- * @dst_len: Size of the output buffer. It needs to be at leaset >- * as big as the expected result depending on the operation >- * After operation it will be updated with the acctual size of the >- * result. In case of error, where the dst_len was insufficient, >+ * @src: Source data >+ * @dst: Destination data >+ * @out_len: Size of the result. After operation it will be updated with >+ * the acctual size of the data stored in the dst. >+ * In case of error, where the dst sgl size was insufficient, > * it will be updated to the size required for the operation. > * @__ctx: Start of private context data > */ > struct akcipher_request { > struct crypto_async_request base; >- void *src; >- void *dst; >- unsigned int src_len; >- unsigned int dst_len; >+ struct scatterlist *src; >+ struct scatterlist *dst; >+ unsigned int out_len; > void *__ctx[] CRYPTO_MINALIGN_ATTR; > }; > >@@ -67,8 +64,13 @@ struct crypto_akcipher { > * algorithm. In case of error, where the dst_len was insufficient, > * the req->dst_len will be updated to the size required for the > * operation >- * @setkey: Function invokes the algorithm specific set key function, which >- * knows how to decode and interpret the BER encoded key >+ * @set_pub_key: Function invokes the algorithm specific set public key >+ * function, which knows how to decode and interpret >+ * the BER encoded public key >+ * @set_priv_key: Function invokes the algorithm specific set private key >+ * function, which knows how to decode and interpret >+ * the BER encoded private key >+ * @get_len: Function returns minimum dest buffer size for a given key. > * @init: Initialize the cryptographic transformation object. > * This function is used to initialize the cryptographic > * transformation object. This function is called only once at >@@ -89,8 +91,11 @@ struct akcipher_alg { > int (*verify)(struct akcipher_request *req); > int (*encrypt)(struct akcipher_request *req); > int (*decrypt)(struct akcipher_request *req); >- int (*setkey)(struct crypto_akcipher *tfm, const void *key, >- unsigned int keylen); >+ int (*set_pub_key)(struct crypto_akcipher *tfm, const void *key, >+ unsigned int keylen); >+ int (*set_priv_key)(struct crypto_akcipher *tfm, const void *key, >+ unsigned int keylen); >+ int (*get_len)(struct crypto_akcipher *tfm); > int (*init)(struct crypto_akcipher *tfm); > void (*exit)(struct crypto_akcipher *tfm); > >@@ -229,21 +234,31 @@ static inline void akcipher_request_set_callback(struct >akcipher_request *req, * Sets parameters required by crypto operation > * > * @req: public key request >- * @src: ptr to input parameter >- * @dst: ptr of output parameter >- * @src_len: size of the input buffer >- * @dst_len: size of the output buffer. It will be updated by the >- * implementation to reflect the acctual size of the result >+ * @src: ptr to input scatter list >+ * @dst: ptr to output scatter list > */ > static inline void akcipher_request_set_crypt(struct akcipher_request *req, >- void *src, void *dst, >- unsigned int src_len, >- unsigned int dst_len) >+ struct scatterlist *src, >+ struct scatterlist *dst) > { > req->src = src; > req->dst = dst; >- req->src_len = src_len; >- req->dst_len = dst_len; >+} >+ >+/** >+ * crypto_akcipher_get_len() -- Get minimum len for output buffer >+ * >+ * Function returns minimum dest buffer size for a given key >+ * >+ * @tfm: AKCIPHER tfm handle allocated with crypto_alloc_akcipher() >+ * >+ * Return: minimum len for output buffer or error code in key hasn't been >set + */ >+static inline int crypto_akcipher_get_len(struct crypto_akcipher *tfm) >+{ >+ struct akcipher_alg *alg = crypto_akcipher_alg(tfm); >+ >+ return alg->get_len(tfm); > } > > /** >@@ -319,22 +334,44 @@ static inline int crypto_akcipher_verify(struct >akcipher_request *req) } > > /** >- * crypto_akcipher_setkey() -- Invoke public key setkey operation >+ * crypto_akcipher_set_pub_key() -- Invoke set public key operation >+ * >+ * Function invokes the algorithm specific set key function, which knows >+ * how to decode and interpret the encoded key >+ * >+ * @tfm: tfm handle >+ * @key: BER encoded public key DER encoded? >+ * @keylen: length of the key >+ * >+ * Return: zero on success; error code in case of error >+ */ >+static inline int crypto_akcipher_set_pub_key(struct crypto_akcipher *tfm, >+ const void *key, >+ unsigned int keylen) >+{ >+ struct akcipher_alg *alg = crypto_akcipher_alg(tfm); >+ >+ return alg->set_pub_key(tfm, key, keylen); >+} >+ >+/** >+ * crypto_akcipher_set_priv_key() -- Invoke set private key operation > * > * Function invokes the algorithm specific set key function, which knows > * how to decode and interpret the encoded key > * > * @tfm: tfm handle >- * @key: BER encoded private or public key >+ * @key: BER encoded private key DER encoded? > * @keylen: length of the key > * > * Return: zero on success; error code in case of error > */ >-static inline int crypto_akcipher_setkey(struct crypto_akcipher *tfm, void >*key, - unsigned int keylen) >+static inline int crypto_akcipher_set_priv_key(struct crypto_akcipher *tfm, >+ const void *key, >+ unsigned int keylen) > { > struct akcipher_alg *alg = crypto_akcipher_alg(tfm); > >- return alg->setkey(tfm, key, keylen); >+ return alg->set_priv_key(tfm, key, keylen); > } > #endif > >-- >To unsubscribe from this list: send the line "unsubscribe linux-crypto" in >the body of a message to majordomo@xxxxxxxxxxxxxxx >More majordomo info at http://vger.kernel.org/majordomo-info.html Ciao Stephan -- To unsubscribe from this list: send the line "unsubscribe linux-crypto" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html