On Thu, 9 Oct 2014 17:54:10 +0300 Tudor Ambarus <tudor.ambarus@xxxxxxxxxxxxx> wrote: > +static int rfc4106_set_sh_desc(struct crypto_aead *aead) ... > + /* > + * Job Descriptor and Shared Descriptors > + * must all fit into the 64-word Descriptor h/w Buffer > + */ > + if (DESC_RFC4106_DEC_LEN + DESC_JOB_IO_LEN + > + ctx->enckeylen <= CAAM_DESC_BYTES_MAX) > + key_fit_inline = true; we need to reset encrypt descriptor's keys_fit_inline setting to false before doing this. Also, the singular of "keys_fit_inline" is "key_fits_inline", but I'd prefer we not gratuitously rename the variable from the rest of the driver's keys_fit_inline for consistency's sake, thanks. > + /* > + * Job Descriptor and Shared Descriptors > + * must all fit into the 64-word Descriptor h/w Buffer > + */ > + if (DESC_RFC4106_GIVENC_LEN + DESC_JOB_IO_LEN + > + ctx->split_key_pad_len + ctx->enckeylen <= > + CAAM_DESC_BYTES_MAX) > + key_fit_inline = true; we need to reset the variable here too. > +static int rfc4106_setauthsize(struct crypto_aead *authenc, > + unsigned int authsize) > +{ > + struct caam_ctx *ctx = crypto_aead_ctx(authenc); > + > + switch (authsize) { > + case 8: > + case 12: > + case 16: > + break; > + default: > + return -EINVAL; > + } the h/w can handle more authsizes than that, so we shouldn't be blocking it from doing so here. > @@ -2601,6 +2986,23 @@ static struct caam_alg_template driver_algs[] = { > OP_ALG_AAI_HMAC_PRECOMP, > .alg_op = OP_ALG_ALGSEL_SHA512 | OP_ALG_AAI_HMAC, > }, > + { > + .name = "rfc4106(gcm(aes))", > + .driver_name = "rfc4106-gcm-aes-caam", > + .blocksize = 1, > + .type = CRYPTO_ALG_TYPE_AEAD, > + .template_aead = { > + .setkey = rfc4106_setkey, > + .setauthsize = rfc4106_setauthsize, > + .encrypt = aead_encrypt, > + .decrypt = aead_decrypt, > + .givencrypt = aead_givencrypt, > + .geniv = "<built-in>", > + .ivsize = 8, > + .maxauthsize = 16, AES_BLOCK_SIZE Thanks, Kim -- 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