2017-08-22 15:08:08 +07:00
|
|
|
#ifndef _CRYPTO_GCM_H
|
|
|
|
#define _CRYPTO_GCM_H
|
|
|
|
|
2019-07-31 20:05:54 +07:00
|
|
|
#include <linux/errno.h>
|
|
|
|
|
2017-08-22 15:08:08 +07:00
|
|
|
#define GCM_AES_IV_SIZE 12
|
|
|
|
#define GCM_RFC4106_IV_SIZE 8
|
|
|
|
#define GCM_RFC4543_IV_SIZE 8
|
|
|
|
|
2019-07-31 20:05:54 +07:00
|
|
|
/*
|
|
|
|
* 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;
|
|
|
|
}
|
2017-08-22 15:08:08 +07:00
|
|
|
#endif
|