P1010-Add MD5 Authentication support in Kernel2.6.35

Document created by Wes Li Employee on Jan 6, 2014Last modified by Wes Li Employee on Sep 11, 2015
Version 4Show Document
  • View in full screen mode

Hi all,

 

One of the function of this patch is to add MD5 authentication support in Kernel2.6.35.

Another is when user set a specific IPSEC encryption and authentication, it will display the information through console.

BTW, I'm using P1010RDB for verification.

Share with you guys~


1.       drivers\crypto\caam\Algapi.c

 

+          #define printf(args...)  printk(args) +          #define printf(args...)  printk(args)

.

.

.

164         switch (authsize * 8) {

165         case 96:

166         -                              if (ctx->alg_op != OP_ALG_ALGSEL_SHA1) {

167         -                                              dev_err(dev, "h/w doesn't support %d-bit ICV trunc."

168         -                                                              " length with chosen authentication algorithm",

169         -                                                              authsize * 8);

170         -                                              return -EOPNOTSUPP;

171         -                              }

172         -                              ctx->class2_alg_type = AUTH_TYPE_IPSEC_SHA1HMAC_96;

+                             if (ctx->alg_op == OP_ALG_ALGSEL_MD5){

+                                              ctx->class2_alg_type = AUTH_TYPE_IPSEC_MD5HMAC_96;

+                                             printf("AUTH_TYPE : MD5\n");

+                                             if (ctx->class1_alg_type == CIPHER_TYPE_IPSEC_AESCBC)

+                                                            printf("ALO_TYPE : AES\n");

+                                             else if (ctx->class1_alg_type == CIPHER_TYPE_IPSEC_3DESCBC)

+                                                            printf("ALO_TYPE : 3DES\n");

+                                             else if (ctx->class1_alg_type == CIPHER_TYPE_IPSEC_DESCBC)

+                                                            printf("ALO_TYPE : DES\n");

+                              }

+                              else if (ctx->alg_op == OP_ALG_ALGSEL_SHA1){

+                                             ctx->class2_alg_type = AUTH_TYPE_IPSEC_SHA1HMAC_96;

+                                             printf("AUTH_TYPE : SHA1\n");

+                             if (ctx->class1_alg_type == CIPHER_TYPE_IPSEC_AESCBC)

+                                                            printf("ALO_TYPE : AES\n");

+                             else if (ctx->class1_alg_type == CIPHER_TYPE_IPSEC_3DESCBC)

+                                                            printf("ALO_TYPE : 3DES\n");

+                             else if (ctx->class1_alg_type == CIPHER_TYPE_IPSEC_DESCBC)

+                                                            printf("ALO_TYPE : DES\n");

+                             }

+                             else {

+                                             dev_err(dev, "h/w doesn't support %d-bit ICV trunc."

+                                              " length with chosen authentication algorithm",

+                                              authsize * 8);

+                                             return -EOPNOTSUPP;

+                              }                               

                                break;

.

.

.

 

1243       static struct caam_alg_template driver_algs[] = {

1244                       /* single-pass ipsec_esp descriptor */

+             {

+                             .name = "authenc(hmac(md5),cbc(aes))",

+                             .driver_name = "authenc-hmac-md5-cbc-aes-caam",

+                             .blocksize = AES_BLOCK_SIZE,

+                             .aead = {

+                                             .setkey = aead_authenc_setkey,

+                                             .setauthsize = aead_authenc_setauthsize,

+                                             .encrypt = aead_authenc_encrypt_first,

+                                             .decrypt = aead_authenc_decrypt_first,

+                                             .givencrypt = aead_authenc_givencrypt_first,

+                                             .geniv = "<built-in>",

+                                             .ivsize = AES_BLOCK_SIZE,

+                                             .maxauthsize = MD5_DIGEST_SIZE,

+                                             },

+                             .class1_alg_type = CIPHER_TYPE_IPSEC_AESCBC,

+                             .class2_alg_type = AUTH_TYPE_IPSEC_MD5HMAC_96,

+                             .alg_op = OP_ALG_ALGSEL_MD5,

+                             },

+             {

+                             .name = "authenc(hmac(md5),cbc(des3_ede))",

+                             .driver_name = "authenc-hmac-md5-cbc-des3_ede-caam",

+                             .blocksize = DES3_EDE_BLOCK_SIZE,

+                             .aead = {

+                                             .setkey = aead_authenc_setkey,

+                                             .setauthsize = aead_authenc_setauthsize,

+                                             .encrypt = aead_authenc_encrypt_first,

+                                             .decrypt = aead_authenc_decrypt_first,

+                                             .givencrypt = aead_authenc_givencrypt_first,

+                                             .geniv = "<built-in>",

+                                             .ivsize = DES3_EDE_BLOCK_SIZE,

+                                             .maxauthsize = MD5_DIGEST_SIZE,

+                                             },

+                             .class1_alg_type = CIPHER_TYPE_IPSEC_3DESCBC,

+                             .class2_alg_type = AUTH_TYPE_IPSEC_MD5HMAC_96,

+                             .alg_op = OP_ALG_ALGSEL_MD5,

+             },

+             {

+                             .name = "authenc(hmac(md5),cbc(des))",

+                             .driver_name = "authenc-hmac-md5-cbc-des-caam",

+                             .blocksize = DES_BLOCK_SIZE,

+                             .aead = {

+                                             .setkey = aead_authenc_setkey,

+                                             .setauthsize = aead_authenc_setauthsize,

+                                             .encrypt = aead_authenc_encrypt_first,

+                                             .decrypt = aead_authenc_decrypt_first,

+                                             .givencrypt = aead_authenc_givencrypt_first,

+                                             .geniv = "<built-in>",

+                                             .ivsize = DES_BLOCK_SIZE,

+                                             .maxauthsize = MD5_DIGEST_SIZE,

+                                             },

+                             .class1_alg_type = CIPHER_TYPE_IPSEC_DESCBC,

+                             .class2_alg_type = AUTH_TYPE_IPSEC_MD5HMAC_96,

+                             .alg_op = OP_ALG_ALGSEL_MD5,

+             },

1245                       {

1246                                       .name = "authenc(hmac(sha1),cbc(aes))",

1247                                       .driver_name = "authenc-hmac-sha1-cbc-aes-caam",

.

.

 

2.       drivers\crypto\caam\compat.h

 

58           #include <crypto/algapi.h>

59           #include <crypto/aes.h>

60           #include <crypto/des.h>

61           #include <crypto/sha.h>

+             #include <crypto/md5.h>

62           #include <crypto/aead.h>

63           #include <crypto/authenc.h>

64           #include <crypto/scatterwalk.h>

Attachments

Outcomes