]> err.no Git - linux-2.6/blobdiff - arch/s390/crypto/aes_s390.c
[CRYPTO] s390: Added missing driver name and priority
[linux-2.6] / arch / s390 / crypto / aes_s390.c
index 7a1033d8e00fe202ed15245b610f1455baf53f61..220300e760d8a85a52b9003524c24cf48f636794 100644 (file)
@@ -37,10 +37,11 @@ struct s390_aes_ctx {
        int key_len;
 };
 
-static int aes_set_key(void *ctx, const u8 *in_key, unsigned int key_len,
-                      u32 *flags)
+static int aes_set_key(struct crypto_tfm *tfm, const u8 *in_key,
+                      unsigned int key_len)
 {
-       struct s390_aes_ctx *sctx = ctx;
+       struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm);
+       u32 *flags = &tfm->crt_flags;
 
        switch (key_len) {
        case 16:
@@ -70,9 +71,9 @@ fail:
        return -EINVAL;
 }
 
-static void aes_encrypt(void *ctx, u8 *out, const u8 *in)
+static void aes_encrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
 {
-       const struct s390_aes_ctx *sctx = ctx;
+       const struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm);
 
        switch (sctx->key_len) {
        case 16:
@@ -90,9 +91,9 @@ static void aes_encrypt(void *ctx, u8 *out, const u8 *in)
        }
 }
 
-static void aes_decrypt(void *ctx, u8 *out, const u8 *in)
+static void aes_decrypt(struct crypto_tfm *tfm, u8 *out, const u8 *in)
 {
-       const struct s390_aes_ctx *sctx = ctx;
+       const struct s390_aes_ctx *sctx = crypto_tfm_ctx(tfm);
 
        switch (sctx->key_len) {
        case 16:
@@ -114,85 +115,115 @@ static unsigned int aes_encrypt_ecb(const struct cipher_desc *desc, u8 *out,
                                    const u8 *in, unsigned int nbytes)
 {
        struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
+       int ret;
+
+       /* only use complete blocks */
+       nbytes &= ~(AES_BLOCK_SIZE - 1);
 
        switch (sctx->key_len) {
        case 16:
-               crypt_s390_km(KM_AES_128_ENCRYPT, &sctx->key, out, in, nbytes);
+               ret = crypt_s390_km(KM_AES_128_ENCRYPT, &sctx->key, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 24:
-               crypt_s390_km(KM_AES_192_ENCRYPT, &sctx->key, out, in, nbytes);
+               ret = crypt_s390_km(KM_AES_192_ENCRYPT, &sctx->key, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 32:
-               crypt_s390_km(KM_AES_256_ENCRYPT, &sctx->key, out, in, nbytes);
+               ret = crypt_s390_km(KM_AES_256_ENCRYPT, &sctx->key, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        }
-       return nbytes & ~(AES_BLOCK_SIZE - 1);
+       return nbytes;
 }
 
 static unsigned int aes_decrypt_ecb(const struct cipher_desc *desc, u8 *out,
                                    const u8 *in, unsigned int nbytes)
 {
        struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
+       int ret;
+
+       /* only use complete blocks */
+       nbytes &= ~(AES_BLOCK_SIZE - 1);
 
        switch (sctx->key_len) {
        case 16:
-               crypt_s390_km(KM_AES_128_DECRYPT, &sctx->key, out, in, nbytes);
+               ret = crypt_s390_km(KM_AES_128_DECRYPT, &sctx->key, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 24:
-               crypt_s390_km(KM_AES_192_DECRYPT, &sctx->key, out, in, nbytes);
+               ret = crypt_s390_km(KM_AES_192_DECRYPT, &sctx->key, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 32:
-               crypt_s390_km(KM_AES_256_DECRYPT, &sctx->key, out, in, nbytes);
+               ret = crypt_s390_km(KM_AES_256_DECRYPT, &sctx->key, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        }
-       return nbytes & ~(AES_BLOCK_SIZE - 1);
+       return nbytes;
 }
 
 static unsigned int aes_encrypt_cbc(const struct cipher_desc *desc, u8 *out,
                                    const u8 *in, unsigned int nbytes)
 {
        struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
+       int ret;
+
+       /* only use complete blocks */
+       nbytes &= ~(AES_BLOCK_SIZE - 1);
 
        memcpy(&sctx->iv, desc->info, AES_BLOCK_SIZE);
        switch (sctx->key_len) {
        case 16:
-               crypt_s390_kmc(KMC_AES_128_ENCRYPT, &sctx->iv, out, in, nbytes);
+               ret = crypt_s390_kmc(KMC_AES_128_ENCRYPT, &sctx->iv, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 24:
-               crypt_s390_kmc(KMC_AES_192_ENCRYPT, &sctx->iv, out, in, nbytes);
+               ret = crypt_s390_kmc(KMC_AES_192_ENCRYPT, &sctx->iv, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 32:
-               crypt_s390_kmc(KMC_AES_256_ENCRYPT, &sctx->iv, out, in, nbytes);
+               ret = crypt_s390_kmc(KMC_AES_256_ENCRYPT, &sctx->iv, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        }
        memcpy(desc->info, &sctx->iv, AES_BLOCK_SIZE);
 
-       return nbytes & ~(AES_BLOCK_SIZE - 1);
+       return nbytes;
 }
 
 static unsigned int aes_decrypt_cbc(const struct cipher_desc *desc, u8 *out,
                                    const u8 *in, unsigned int nbytes)
 {
        struct s390_aes_ctx *sctx = crypto_tfm_ctx(desc->tfm);
+       int ret;
+
+       /* only use complete blocks */
+       nbytes &= ~(AES_BLOCK_SIZE - 1);
 
        memcpy(&sctx->iv, desc->info, AES_BLOCK_SIZE);
        switch (sctx->key_len) {
        case 16:
-               crypt_s390_kmc(KMC_AES_128_DECRYPT, &sctx->iv, out, in, nbytes);
+               ret = crypt_s390_kmc(KMC_AES_128_DECRYPT, &sctx->iv, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 24:
-               crypt_s390_kmc(KMC_AES_192_DECRYPT, &sctx->iv, out, in, nbytes);
+               ret = crypt_s390_kmc(KMC_AES_192_DECRYPT, &sctx->iv, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        case 32:
-               crypt_s390_kmc(KMC_AES_256_DECRYPT, &sctx->iv, out, in, nbytes);
+               ret = crypt_s390_kmc(KMC_AES_256_DECRYPT, &sctx->iv, out, in, nbytes);
+               BUG_ON((ret < 0) || (ret != nbytes));
                break;
        }
-       return nbytes & ~(AES_BLOCK_SIZE - 1);
+       return nbytes;
 }
 
 
 static struct crypto_alg aes_alg = {
        .cra_name               =       "aes",
+       .cra_driver_name        =       "aes-s390",
+       .cra_priority           =       CRYPT_S390_PRIORITY,
        .cra_flags              =       CRYPTO_ALG_TYPE_CIPHER,
        .cra_blocksize          =       AES_BLOCK_SIZE,
        .cra_ctxsize            =       sizeof(struct s390_aes_ctx),