|
@@ -882,10 +882,10 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
|
|
{
|
|
{
|
|
struct ablkcipher_request *req = context;
|
|
struct ablkcipher_request *req = context;
|
|
struct ablkcipher_edesc *edesc;
|
|
struct ablkcipher_edesc *edesc;
|
|
-#ifdef DEBUG
|
|
|
|
struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
|
|
struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
|
|
int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
|
|
int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
|
|
|
|
|
|
|
|
+#ifdef DEBUG
|
|
dev_err(jrdev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
|
|
dev_err(jrdev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -904,6 +904,14 @@ static void ablkcipher_encrypt_done(struct device *jrdev, u32 *desc, u32 err,
|
|
#endif
|
|
#endif
|
|
|
|
|
|
ablkcipher_unmap(jrdev, edesc, req);
|
|
ablkcipher_unmap(jrdev, edesc, req);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * The crypto API expects us to set the IV (req->info) to the last
|
|
|
|
+ * ciphertext block. This is used e.g. by the CTS mode.
|
|
|
|
+ */
|
|
|
|
+ scatterwalk_map_and_copy(req->info, req->dst, req->nbytes - ivsize,
|
|
|
|
+ ivsize, 0);
|
|
|
|
+
|
|
kfree(edesc);
|
|
kfree(edesc);
|
|
|
|
|
|
ablkcipher_request_complete(req, err);
|
|
ablkcipher_request_complete(req, err);
|
|
@@ -914,10 +922,10 @@ static void ablkcipher_decrypt_done(struct device *jrdev, u32 *desc, u32 err,
|
|
{
|
|
{
|
|
struct ablkcipher_request *req = context;
|
|
struct ablkcipher_request *req = context;
|
|
struct ablkcipher_edesc *edesc;
|
|
struct ablkcipher_edesc *edesc;
|
|
-#ifdef DEBUG
|
|
|
|
struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
|
|
struct crypto_ablkcipher *ablkcipher = crypto_ablkcipher_reqtfm(req);
|
|
int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
|
|
int ivsize = crypto_ablkcipher_ivsize(ablkcipher);
|
|
|
|
|
|
|
|
+#ifdef DEBUG
|
|
dev_err(jrdev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
|
|
dev_err(jrdev, "%s %d: err 0x%x\n", __func__, __LINE__, err);
|
|
#endif
|
|
#endif
|
|
|
|
|
|
@@ -935,6 +943,14 @@ static void ablkcipher_decrypt_done(struct device *jrdev, u32 *desc, u32 err,
|
|
#endif
|
|
#endif
|
|
|
|
|
|
ablkcipher_unmap(jrdev, edesc, req);
|
|
ablkcipher_unmap(jrdev, edesc, req);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * The crypto API expects us to set the IV (req->info) to the last
|
|
|
|
+ * ciphertext block.
|
|
|
|
+ */
|
|
|
|
+ scatterwalk_map_and_copy(req->info, req->src, req->nbytes - ivsize,
|
|
|
|
+ ivsize, 0);
|
|
|
|
+
|
|
kfree(edesc);
|
|
kfree(edesc);
|
|
|
|
|
|
ablkcipher_request_complete(req, err);
|
|
ablkcipher_request_complete(req, err);
|