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> << 5 << 6 #include <crypto/aes.h> << 7 #include <crypto/gf128mul.h> << 8 << 9 #define GCM_AES_IV_SIZE 12 4 #define GCM_AES_IV_SIZE 12 10 #define GCM_RFC4106_IV_SIZE 8 5 #define GCM_RFC4106_IV_SIZE 8 11 #define GCM_RFC4543_IV_SIZE 8 6 #define GCM_RFC4543_IV_SIZE 8 12 << 13 /* << 14 * validate authentication tag for GCM << 15 */ << 16 static inline int crypto_gcm_check_authsize(un << 17 { << 18 switch (authsize) { << 19 case 4: << 20 case 8: << 21 case 12: << 22 case 13: << 23 case 14: << 24 case 15: << 25 case 16: << 26 break; << 27 default: << 28 return -EINVAL; << 29 } << 30 << 31 return 0; << 32 } << 33 << 34 /* << 35 * validate authentication tag for RFC4106 << 36 */ << 37 static inline int crypto_rfc4106_check_authsiz << 38 { << 39 switch (authsize) { << 40 case 8: << 41 case 12: << 42 case 16: << 43 break; << 44 default: << 45 return -EINVAL; << 46 } << 47 << 48 return 0; << 49 } << 50 << 51 /* << 52 * validate assoclen for RFC4106/RFC4543 << 53 */ << 54 static inline int crypto_ipsec_check_assoclen( << 55 { << 56 switch (assoclen) { << 57 case 16: << 58 case 20: << 59 break; << 60 default: << 61 return -EINVAL; << 62 } << 63 << 64 return 0; << 65 } << 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 7 85 #endif 8 #endif 86 9
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.