1 #ifndef _CRYPTO_GCM_H 1 #ifndef _CRYPTO_GCM_H 2 #define _CRYPTO_GCM_H 2 #define _CRYPTO_GCM_H 3 3 4 #include <linux/errno.h> 4 #include <linux/errno.h> 5 5 6 #include <crypto/aes.h> << 7 #include <crypto/gf128mul.h> << 8 << 9 #define GCM_AES_IV_SIZE 12 6 #define GCM_AES_IV_SIZE 12 10 #define GCM_RFC4106_IV_SIZE 8 7 #define GCM_RFC4106_IV_SIZE 8 11 #define GCM_RFC4543_IV_SIZE 8 8 #define GCM_RFC4543_IV_SIZE 8 12 9 13 /* 10 /* 14 * validate authentication tag for GCM 11 * validate authentication tag for GCM 15 */ 12 */ 16 static inline int crypto_gcm_check_authsize(un 13 static inline int crypto_gcm_check_authsize(unsigned int authsize) 17 { 14 { 18 switch (authsize) { 15 switch (authsize) { 19 case 4: 16 case 4: 20 case 8: 17 case 8: 21 case 12: 18 case 12: 22 case 13: 19 case 13: 23 case 14: 20 case 14: 24 case 15: 21 case 15: 25 case 16: 22 case 16: 26 break; 23 break; 27 default: 24 default: 28 return -EINVAL; 25 return -EINVAL; 29 } 26 } 30 27 31 return 0; 28 return 0; 32 } 29 } 33 30 34 /* 31 /* 35 * validate authentication tag for RFC4106 32 * validate authentication tag for RFC4106 36 */ 33 */ 37 static inline int crypto_rfc4106_check_authsiz 34 static inline int crypto_rfc4106_check_authsize(unsigned int authsize) 38 { 35 { 39 switch (authsize) { 36 switch (authsize) { 40 case 8: 37 case 8: 41 case 12: 38 case 12: 42 case 16: 39 case 16: 43 break; 40 break; 44 default: 41 default: 45 return -EINVAL; 42 return -EINVAL; 46 } 43 } 47 44 48 return 0; 45 return 0; 49 } 46 } 50 47 51 /* 48 /* 52 * validate assoclen for RFC4106/RFC4543 49 * validate assoclen for RFC4106/RFC4543 53 */ 50 */ 54 static inline int crypto_ipsec_check_assoclen( 51 static inline int crypto_ipsec_check_assoclen(unsigned int assoclen) 55 { 52 { 56 switch (assoclen) { 53 switch (assoclen) { 57 case 16: 54 case 16: 58 case 20: 55 case 20: 59 break; 56 break; 60 default: 57 default: 61 return -EINVAL; 58 return -EINVAL; 62 } 59 } 63 60 64 return 0; 61 return 0; 65 } 62 } 66 << 67 struct aesgcm_ctx { << 68 be128 ghash_key; << 69 struct crypto_aes_ctx aes_ctx; << 70 unsigned int authsize; << 71 }; << 72 << 73 int aesgcm_expandkey(struct aesgcm_ctx *ctx, c << 74 unsigned int keysize, uns << 75 << 76 void aesgcm_encrypt(const struct aesgcm_ctx *c << 77 int crypt_len, const u8 *a << 78 const u8 iv[GCM_AES_IV_SIZ << 79 << 80 bool __must_check aesgcm_decrypt(const struct << 81 const u8 *src << 82 int assoc_len << 83 const u8 *aut << 84 << 85 #endif 63 #endif 86 64
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.