18c2ecf20Sopenharmony_ci#ifndef _CRYPTO_GCM_H 28c2ecf20Sopenharmony_ci#define _CRYPTO_GCM_H 38c2ecf20Sopenharmony_ci 48c2ecf20Sopenharmony_ci#include <linux/errno.h> 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#define GCM_AES_IV_SIZE 12 78c2ecf20Sopenharmony_ci#define GCM_RFC4106_IV_SIZE 8 88c2ecf20Sopenharmony_ci#define GCM_RFC4543_IV_SIZE 8 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci/* 118c2ecf20Sopenharmony_ci * validate authentication tag for GCM 128c2ecf20Sopenharmony_ci */ 138c2ecf20Sopenharmony_cistatic inline int crypto_gcm_check_authsize(unsigned int authsize) 148c2ecf20Sopenharmony_ci{ 158c2ecf20Sopenharmony_ci switch (authsize) { 168c2ecf20Sopenharmony_ci case 4: 178c2ecf20Sopenharmony_ci case 8: 188c2ecf20Sopenharmony_ci case 12: 198c2ecf20Sopenharmony_ci case 13: 208c2ecf20Sopenharmony_ci case 14: 218c2ecf20Sopenharmony_ci case 15: 228c2ecf20Sopenharmony_ci case 16: 238c2ecf20Sopenharmony_ci break; 248c2ecf20Sopenharmony_ci default: 258c2ecf20Sopenharmony_ci return -EINVAL; 268c2ecf20Sopenharmony_ci } 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci return 0; 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_ci/* 328c2ecf20Sopenharmony_ci * validate authentication tag for RFC4106 338c2ecf20Sopenharmony_ci */ 348c2ecf20Sopenharmony_cistatic inline int crypto_rfc4106_check_authsize(unsigned int authsize) 358c2ecf20Sopenharmony_ci{ 368c2ecf20Sopenharmony_ci switch (authsize) { 378c2ecf20Sopenharmony_ci case 8: 388c2ecf20Sopenharmony_ci case 12: 398c2ecf20Sopenharmony_ci case 16: 408c2ecf20Sopenharmony_ci break; 418c2ecf20Sopenharmony_ci default: 428c2ecf20Sopenharmony_ci return -EINVAL; 438c2ecf20Sopenharmony_ci } 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci return 0; 468c2ecf20Sopenharmony_ci} 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci/* 498c2ecf20Sopenharmony_ci * validate assoclen for RFC4106/RFC4543 508c2ecf20Sopenharmony_ci */ 518c2ecf20Sopenharmony_cistatic inline int crypto_ipsec_check_assoclen(unsigned int assoclen) 528c2ecf20Sopenharmony_ci{ 538c2ecf20Sopenharmony_ci switch (assoclen) { 548c2ecf20Sopenharmony_ci case 16: 558c2ecf20Sopenharmony_ci case 20: 568c2ecf20Sopenharmony_ci break; 578c2ecf20Sopenharmony_ci default: 588c2ecf20Sopenharmony_ci return -EINVAL; 598c2ecf20Sopenharmony_ci } 608c2ecf20Sopenharmony_ci 618c2ecf20Sopenharmony_ci return 0; 628c2ecf20Sopenharmony_ci} 638c2ecf20Sopenharmony_ci#endif 64