]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/crypto/omap-des.c
Merge tag 'staging-5.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux.git] / drivers / crypto / omap-des.c
index b19d7e5d55ecd9ea0a3d97180001cca43e5e63ca..4c4dbc2b377ea4f282f46446e7a821eeb8ddc58c 100644 (file)
@@ -34,6 +34,7 @@
 #include <linux/interrupt.h>
 #include <crypto/scatterwalk.h>
 #include <crypto/internal/des.h>
+#include <crypto/internal/skcipher.h>
 #include <crypto/algapi.h>
 #include <crypto/engine.h>
 
@@ -98,7 +99,7 @@ struct omap_des_reqctx {
 #define OMAP_DES_CACHE_SIZE    0
 
 struct omap_des_algs_info {
-       struct crypto_alg       *algs_list;
+       struct skcipher_alg     *algs_list;
        unsigned int            size;
        unsigned int            registered;
 };
@@ -139,7 +140,7 @@ struct omap_des_dev {
 
        struct tasklet_struct   done_task;
 
-       struct ablkcipher_request       *req;
+       struct skcipher_request *req;
        struct crypto_engine            *engine;
        /*
         * total is used by PIO mode for book keeping so introduce
@@ -261,8 +262,8 @@ static int omap_des_write_ctrl(struct omap_des_dev *dd)
                               __le32_to_cpu(dd->ctx->key[i]));
        }
 
-       if ((dd->flags & FLAGS_CBC) && dd->req->info)
-               omap_des_write_n(dd, DES_REG_IV(dd, 0), dd->req->info, 2);
+       if ((dd->flags & FLAGS_CBC) && dd->req->iv)
+               omap_des_write_n(dd, DES_REG_IV(dd, 0), (void *)dd->req->iv, 2);
 
        if (dd->flags & FLAGS_CBC)
                val |= DES_REG_CTRL_CBC;
@@ -456,8 +457,8 @@ static int omap_des_crypt_dma(struct crypto_tfm *tfm,
 
 static int omap_des_crypt_dma_start(struct omap_des_dev *dd)
 {
-       struct crypto_tfm *tfm = crypto_ablkcipher_tfm(
-                                       crypto_ablkcipher_reqtfm(dd->req));
+       struct crypto_tfm *tfm = crypto_skcipher_tfm(
+                                       crypto_skcipher_reqtfm(dd->req));
        int err;
 
        pr_debug("total: %d\n", dd->total);
@@ -491,11 +492,11 @@ static int omap_des_crypt_dma_start(struct omap_des_dev *dd)
 
 static void omap_des_finish_req(struct omap_des_dev *dd, int err)
 {
-       struct ablkcipher_request *req = dd->req;
+       struct skcipher_request *req = dd->req;
 
        pr_debug("err: %d\n", err);
 
-       crypto_finalize_ablkcipher_request(dd->engine, req, err);
+       crypto_finalize_skcipher_request(dd->engine, req, err);
 
        pm_runtime_mark_last_busy(dd->dev);
        pm_runtime_put_autosuspend(dd->dev);
@@ -514,10 +515,10 @@ static int omap_des_crypt_dma_stop(struct omap_des_dev *dd)
 }
 
 static int omap_des_handle_queue(struct omap_des_dev *dd,
-                                struct ablkcipher_request *req)
+                                struct skcipher_request *req)
 {
        if (req)
-               return crypto_transfer_ablkcipher_request_to_engine(dd->engine, req);
+               return crypto_transfer_skcipher_request_to_engine(dd->engine, req);
 
        return 0;
 }
@@ -525,9 +526,9 @@ static int omap_des_handle_queue(struct omap_des_dev *dd,
 static int omap_des_prepare_req(struct crypto_engine *engine,
                                void *areq)
 {
-       struct ablkcipher_request *req = container_of(areq, struct ablkcipher_request, base);
-       struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(
-                       crypto_ablkcipher_reqtfm(req));
+       struct skcipher_request *req = container_of(areq, struct skcipher_request, base);
+       struct omap_des_ctx *ctx = crypto_skcipher_ctx(
+                       crypto_skcipher_reqtfm(req));
        struct omap_des_dev *dd = omap_des_find_dev(ctx);
        struct omap_des_reqctx *rctx;
        int ret;
@@ -538,8 +539,8 @@ static int omap_des_prepare_req(struct crypto_engine *engine,
 
        /* assign new request to device */
        dd->req = req;
-       dd->total = req->nbytes;
-       dd->total_save = req->nbytes;
+       dd->total = req->cryptlen;
+       dd->total_save = req->cryptlen;
        dd->in_sg = req->src;
        dd->out_sg = req->dst;
        dd->orig_out = req->dst;
@@ -568,8 +569,8 @@ static int omap_des_prepare_req(struct crypto_engine *engine,
        if (dd->out_sg_len < 0)
                return dd->out_sg_len;
 
-       rctx = ablkcipher_request_ctx(req);
-       ctx = crypto_ablkcipher_ctx(crypto_ablkcipher_reqtfm(req));
+       rctx = skcipher_request_ctx(req);
+       ctx = crypto_skcipher_ctx(crypto_skcipher_reqtfm(req));
        rctx->mode &= FLAGS_MODE_MASK;
        dd->flags = (dd->flags & ~FLAGS_MODE_MASK) | rctx->mode;
 
@@ -582,9 +583,9 @@ static int omap_des_prepare_req(struct crypto_engine *engine,
 static int omap_des_crypt_req(struct crypto_engine *engine,
                              void *areq)
 {
-       struct ablkcipher_request *req = container_of(areq, struct ablkcipher_request, base);
-       struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(
-                       crypto_ablkcipher_reqtfm(req));
+       struct skcipher_request *req = container_of(areq, struct skcipher_request, base);
+       struct omap_des_ctx *ctx = crypto_skcipher_ctx(
+                       crypto_skcipher_reqtfm(req));
        struct omap_des_dev *dd = omap_des_find_dev(ctx);
 
        if (!dd)
@@ -619,18 +620,18 @@ static void omap_des_done_task(unsigned long data)
        pr_debug("exit\n");
 }
 
-static int omap_des_crypt(struct ablkcipher_request *req, unsigned long mode)
+static int omap_des_crypt(struct skcipher_request *req, unsigned long mode)
 {
-       struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(
-                       crypto_ablkcipher_reqtfm(req));
-       struct omap_des_reqctx *rctx = ablkcipher_request_ctx(req);
+       struct omap_des_ctx *ctx = crypto_skcipher_ctx(
+                       crypto_skcipher_reqtfm(req));
+       struct omap_des_reqctx *rctx = skcipher_request_ctx(req);
        struct omap_des_dev *dd;
 
-       pr_debug("nbytes: %d, enc: %d, cbc: %d\n", req->nbytes,
+       pr_debug("nbytes: %d, enc: %d, cbc: %d\n", req->cryptlen,
                 !!(mode & FLAGS_ENCRYPT),
                 !!(mode & FLAGS_CBC));
 
-       if (!IS_ALIGNED(req->nbytes, DES_BLOCK_SIZE)) {
+       if (!IS_ALIGNED(req->cryptlen, DES_BLOCK_SIZE)) {
                pr_err("request size is not exact amount of DES blocks\n");
                return -EINVAL;
        }
@@ -646,15 +647,15 @@ static int omap_des_crypt(struct ablkcipher_request *req, unsigned long mode)
 
 /* ********************** ALG API ************************************ */
 
-static int omap_des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
+static int omap_des_setkey(struct crypto_skcipher *cipher, const u8 *key,
                           unsigned int keylen)
 {
-       struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(cipher);
+       struct omap_des_ctx *ctx = crypto_skcipher_ctx(cipher);
        int err;
 
        pr_debug("enter, keylen: %d\n", keylen);
 
-       err = verify_ablkcipher_des_key(cipher, key);
+       err = verify_skcipher_des_key(cipher, key);
        if (err)
                return err;
 
@@ -664,15 +665,15 @@ static int omap_des_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
        return 0;
 }
 
-static int omap_des3_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
+static int omap_des3_setkey(struct crypto_skcipher *cipher, const u8 *key,
                            unsigned int keylen)
 {
-       struct omap_des_ctx *ctx = crypto_ablkcipher_ctx(cipher);
+       struct omap_des_ctx *ctx = crypto_skcipher_ctx(cipher);
        int err;
 
        pr_debug("enter, keylen: %d\n", keylen);
 
-       err = verify_ablkcipher_des3_key(cipher, key);
+       err = verify_skcipher_des3_key(cipher, key);
        if (err)
                return err;
 
@@ -682,22 +683,22 @@ static int omap_des3_setkey(struct crypto_ablkcipher *cipher, const u8 *key,
        return 0;
 }
 
-static int omap_des_ecb_encrypt(struct ablkcipher_request *req)
+static int omap_des_ecb_encrypt(struct skcipher_request *req)
 {
        return omap_des_crypt(req, FLAGS_ENCRYPT);
 }
 
-static int omap_des_ecb_decrypt(struct ablkcipher_request *req)
+static int omap_des_ecb_decrypt(struct skcipher_request *req)
 {
        return omap_des_crypt(req, 0);
 }
 
-static int omap_des_cbc_encrypt(struct ablkcipher_request *req)
+static int omap_des_cbc_encrypt(struct skcipher_request *req)
 {
        return omap_des_crypt(req, FLAGS_ENCRYPT | FLAGS_CBC);
 }
 
-static int omap_des_cbc_decrypt(struct ablkcipher_request *req)
+static int omap_des_cbc_decrypt(struct skcipher_request *req)
 {
        return omap_des_crypt(req, FLAGS_CBC);
 }
@@ -707,13 +708,13 @@ static int omap_des_prepare_req(struct crypto_engine *engine,
 static int omap_des_crypt_req(struct crypto_engine *engine,
                              void *areq);
 
-static int omap_des_cra_init(struct crypto_tfm *tfm)
+static int omap_des_init_tfm(struct crypto_skcipher *tfm)
 {
-       struct omap_des_ctx *ctx = crypto_tfm_ctx(tfm);
+       struct omap_des_ctx *ctx = crypto_skcipher_ctx(tfm);
 
        pr_debug("enter\n");
 
-       tfm->crt_ablkcipher.reqsize = sizeof(struct omap_des_reqctx);
+       crypto_skcipher_set_reqsize(tfm, sizeof(struct omap_des_reqctx));
 
        ctx->enginectx.op.prepare_request = omap_des_prepare_req;
        ctx->enginectx.op.unprepare_request = NULL;
@@ -722,103 +723,78 @@ static int omap_des_cra_init(struct crypto_tfm *tfm)
        return 0;
 }
 
-static void omap_des_cra_exit(struct crypto_tfm *tfm)
-{
-       pr_debug("enter\n");
-}
-
 /* ********************** ALGS ************************************ */
 
-static struct crypto_alg algs_ecb_cbc[] = {
+static struct skcipher_alg algs_ecb_cbc[] = {
 {
-       .cra_name               = "ecb(des)",
-       .cra_driver_name        = "ecb-des-omap",
-       .cra_priority           = 100,
-       .cra_flags              = CRYPTO_ALG_TYPE_ABLKCIPHER |
-                                 CRYPTO_ALG_KERN_DRIVER_ONLY |
+       .base.cra_name          = "ecb(des)",
+       .base.cra_driver_name   = "ecb-des-omap",
+       .base.cra_priority      = 100,
+       .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_ASYNC,
-       .cra_blocksize          = DES_BLOCK_SIZE,
-       .cra_ctxsize            = sizeof(struct omap_des_ctx),
-       .cra_alignmask          = 0,
-       .cra_type               = &crypto_ablkcipher_type,
-       .cra_module             = THIS_MODULE,
-       .cra_init               = omap_des_cra_init,
-       .cra_exit               = omap_des_cra_exit,
-       .cra_u.ablkcipher = {
-               .min_keysize    = DES_KEY_SIZE,
-               .max_keysize    = DES_KEY_SIZE,
-               .setkey         = omap_des_setkey,
-               .encrypt        = omap_des_ecb_encrypt,
-               .decrypt        = omap_des_ecb_decrypt,
-       }
+       .base.cra_blocksize     = DES_BLOCK_SIZE,
+       .base.cra_ctxsize       = sizeof(struct omap_des_ctx),
+       .base.cra_module        = THIS_MODULE,
+
+       .min_keysize            = DES_KEY_SIZE,
+       .max_keysize            = DES_KEY_SIZE,
+       .setkey                 = omap_des_setkey,
+       .encrypt                = omap_des_ecb_encrypt,
+       .decrypt                = omap_des_ecb_decrypt,
+       .init                   = omap_des_init_tfm,
 },
 {
-       .cra_name               = "cbc(des)",
-       .cra_driver_name        = "cbc-des-omap",
-       .cra_priority           = 100,
-       .cra_flags              = CRYPTO_ALG_TYPE_ABLKCIPHER |
-                                 CRYPTO_ALG_KERN_DRIVER_ONLY |
+       .base.cra_name          = "cbc(des)",
+       .base.cra_driver_name   = "cbc-des-omap",
+       .base.cra_priority      = 100,
+       .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_ASYNC,
-       .cra_blocksize          = DES_BLOCK_SIZE,
-       .cra_ctxsize            = sizeof(struct omap_des_ctx),
-       .cra_alignmask          = 0,
-       .cra_type               = &crypto_ablkcipher_type,
-       .cra_module             = THIS_MODULE,
-       .cra_init               = omap_des_cra_init,
-       .cra_exit               = omap_des_cra_exit,
-       .cra_u.ablkcipher = {
-               .min_keysize    = DES_KEY_SIZE,
-               .max_keysize    = DES_KEY_SIZE,
-               .ivsize         = DES_BLOCK_SIZE,
-               .setkey         = omap_des_setkey,
-               .encrypt        = omap_des_cbc_encrypt,
-               .decrypt        = omap_des_cbc_decrypt,
-       }
+       .base.cra_blocksize     = DES_BLOCK_SIZE,
+       .base.cra_ctxsize       = sizeof(struct omap_des_ctx),
+       .base.cra_module        = THIS_MODULE,
+
+       .min_keysize            = DES_KEY_SIZE,
+       .max_keysize            = DES_KEY_SIZE,
+       .ivsize                 = DES_BLOCK_SIZE,
+       .setkey                 = omap_des_setkey,
+       .encrypt                = omap_des_cbc_encrypt,
+       .decrypt                = omap_des_cbc_decrypt,
+       .init                   = omap_des_init_tfm,
 },
 {
-       .cra_name               = "ecb(des3_ede)",
-       .cra_driver_name        = "ecb-des3-omap",
-       .cra_priority           = 100,
-       .cra_flags              = CRYPTO_ALG_TYPE_ABLKCIPHER |
-                                 CRYPTO_ALG_KERN_DRIVER_ONLY |
+       .base.cra_name          = "ecb(des3_ede)",
+       .base.cra_driver_name   = "ecb-des3-omap",
+       .base.cra_priority      = 100,
+       .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_ASYNC,
-       .cra_blocksize          = DES_BLOCK_SIZE,
-       .cra_ctxsize            = sizeof(struct omap_des_ctx),
-       .cra_alignmask          = 0,
-       .cra_type               = &crypto_ablkcipher_type,
-       .cra_module             = THIS_MODULE,
-       .cra_init               = omap_des_cra_init,
-       .cra_exit               = omap_des_cra_exit,
-       .cra_u.ablkcipher = {
-               .min_keysize    = 3*DES_KEY_SIZE,
-               .max_keysize    = 3*DES_KEY_SIZE,
-               .setkey         = omap_des3_setkey,
-               .encrypt        = omap_des_ecb_encrypt,
-               .decrypt        = omap_des_ecb_decrypt,
-       }
+       .base.cra_blocksize     = DES3_EDE_BLOCK_SIZE,
+       .base.cra_ctxsize       = sizeof(struct omap_des_ctx),
+       .base.cra_module        = THIS_MODULE,
+
+       .min_keysize            = DES3_EDE_KEY_SIZE,
+       .max_keysize            = DES3_EDE_KEY_SIZE,
+       .setkey                 = omap_des3_setkey,
+       .encrypt                = omap_des_ecb_encrypt,
+       .decrypt                = omap_des_ecb_decrypt,
+       .init                   = omap_des_init_tfm,
 },
 {
-       .cra_name               = "cbc(des3_ede)",
-       .cra_driver_name        = "cbc-des3-omap",
-       .cra_priority           = 100,
-       .cra_flags              = CRYPTO_ALG_TYPE_ABLKCIPHER |
-                                 CRYPTO_ALG_KERN_DRIVER_ONLY |
+       .base.cra_name          = "cbc(des3_ede)",
+       .base.cra_driver_name   = "cbc-des3-omap",
+       .base.cra_priority      = 100,
+       .base.cra_flags         = CRYPTO_ALG_KERN_DRIVER_ONLY |
                                  CRYPTO_ALG_ASYNC,
-       .cra_blocksize          = DES_BLOCK_SIZE,
-       .cra_ctxsize            = sizeof(struct omap_des_ctx),
-       .cra_alignmask          = 0,
-       .cra_type               = &crypto_ablkcipher_type,
-       .cra_module             = THIS_MODULE,
-       .cra_init               = omap_des_cra_init,
-       .cra_exit               = omap_des_cra_exit,
-       .cra_u.ablkcipher = {
-               .min_keysize    = 3*DES_KEY_SIZE,
-               .max_keysize    = 3*DES_KEY_SIZE,
-               .ivsize         = DES_BLOCK_SIZE,
-               .setkey         = omap_des3_setkey,
-               .encrypt        = omap_des_cbc_encrypt,
-               .decrypt        = omap_des_cbc_decrypt,
-       }
+       .base.cra_blocksize     = DES3_EDE_BLOCK_SIZE,
+       .base.cra_ctxsize       = sizeof(struct omap_des_ctx),
+       .base.cra_module        = THIS_MODULE,
+
+       .min_keysize            = DES3_EDE_KEY_SIZE,
+       .max_keysize            = DES3_EDE_KEY_SIZE,
+       .ivsize                 = DES3_EDE_BLOCK_SIZE,
+       .setkey                 = omap_des3_setkey,
+       .encrypt                = omap_des_cbc_encrypt,
+       .decrypt                = omap_des_cbc_decrypt,
+       .init                   = omap_des_init_tfm,
 }
 };
 
@@ -976,7 +952,7 @@ static int omap_des_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
        struct omap_des_dev *dd;
-       struct crypto_alg *algp;
+       struct skcipher_alg *algp;
        struct resource *res;
        int err = -ENOMEM, i, j, irq = -1;
        u32 reg;
@@ -1071,9 +1047,9 @@ static int omap_des_probe(struct platform_device *pdev)
                for (j = 0; j < dd->pdata->algs_info[i].size; j++) {
                        algp = &dd->pdata->algs_info[i].algs_list[j];
 
-                       pr_debug("reg alg: %s\n", algp->cra_name);
+                       pr_debug("reg alg: %s\n", algp->base.cra_name);
 
-                       err = crypto_register_alg(algp);
+                       err = crypto_register_skcipher(algp);
                        if (err)
                                goto err_algs;
 
@@ -1086,7 +1062,7 @@ static int omap_des_probe(struct platform_device *pdev)
 err_algs:
        for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
                for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
-                       crypto_unregister_alg(
+                       crypto_unregister_skcipher(
                                        &dd->pdata->algs_info[i].algs_list[j]);
 
 err_engine:
@@ -1119,7 +1095,7 @@ static int omap_des_remove(struct platform_device *pdev)
 
        for (i = dd->pdata->algs_info_size - 1; i >= 0; i--)
                for (j = dd->pdata->algs_info[i].registered - 1; j >= 0; j--)
-                       crypto_unregister_alg(
+                       crypto_unregister_skcipher(
                                        &dd->pdata->algs_info[i].algs_list[j]);
 
        tasklet_kill(&dd->done_task);