|  | #ifndef _CRYPTO_GCM_H | 
|  | #define _CRYPTO_GCM_H | 
|  |  | 
|  | #include <linux/errno.h> | 
|  |  | 
|  | #define GCM_AES_IV_SIZE 12 | 
|  | #define GCM_RFC4106_IV_SIZE 8 | 
|  | #define GCM_RFC4543_IV_SIZE 8 | 
|  |  | 
|  | /* | 
|  | * validate authentication tag for GCM | 
|  | */ | 
|  | static inline int crypto_gcm_check_authsize(unsigned int authsize) | 
|  | { | 
|  | switch (authsize) { | 
|  | case 4: | 
|  | case 8: | 
|  | case 12: | 
|  | case 13: | 
|  | case 14: | 
|  | case 15: | 
|  | case 16: | 
|  | break; | 
|  | default: | 
|  | return -EINVAL; | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | /* | 
|  | * validate authentication tag for RFC4106 | 
|  | */ | 
|  | static inline int crypto_rfc4106_check_authsize(unsigned int authsize) | 
|  | { | 
|  | switch (authsize) { | 
|  | case 8: | 
|  | case 12: | 
|  | case 16: | 
|  | break; | 
|  | default: | 
|  | return -EINVAL; | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | /* | 
|  | * validate assoclen for RFC4106/RFC4543 | 
|  | */ | 
|  | static inline int crypto_ipsec_check_assoclen(unsigned int assoclen) | 
|  | { | 
|  | switch (assoclen) { | 
|  | case 16: | 
|  | case 20: | 
|  | break; | 
|  | default: | 
|  | return -EINVAL; | 
|  | } | 
|  |  | 
|  | return 0; | 
|  | } | 
|  | #endif |