| /* |
| chronyd/chronyc - Programs for keeping computer clocks accurate. |
| |
| ********************************************************************** |
| * Copyright (C) Miroslav Lichvar 2019 |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of version 2 of the GNU General Public License as |
| * published by the Free Software Foundation. |
| * |
| * This program is distributed in the hope that it will be useful, but |
| * WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * General Public License for more details. |
| * |
| * You should have received a copy of the GNU General Public License along |
| * with this program; if not, write to the Free Software Foundation, Inc., |
| * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| * |
| ********************************************************************** |
| |
| ======================================================================= |
| |
| Header file for Synthetic Initialization Vector (SIV) ciphers. |
| |
| */ |
| |
| #ifndef GOT_SIV_H |
| #define GOT_SIV_H |
| |
| /* Maximum key length of all supported SIVs */ |
| #define SIV_MAX_KEY_LENGTH 32 |
| |
| /* Maximum difference between lengths of ciphertext and plaintext */ |
| #define SIV_MAX_TAG_LENGTH 16 |
| |
| /* Identifiers of SIV algorithms following the IANA AEAD registry */ |
| typedef enum { |
| AEAD_AES_SIV_CMAC_256 = 15, |
| AEAD_AES_SIV_CMAC_384 = 16, |
| AEAD_AES_SIV_CMAC_512 = 17, |
| AEAD_AES_128_GCM_SIV = 30, |
| AEAD_AES_256_GCM_SIV = 31, |
| } SIV_Algorithm; |
| |
| typedef struct SIV_Instance_Record *SIV_Instance; |
| |
| extern SIV_Instance SIV_CreateInstance(SIV_Algorithm algorithm); |
| |
| extern void SIV_DestroyInstance(SIV_Instance instance); |
| |
| extern int SIV_GetKeyLength(SIV_Algorithm algorithm); |
| |
| extern int SIV_SetKey(SIV_Instance instance, const unsigned char *key, int length); |
| |
| extern int SIV_GetTagLength(SIV_Instance instance); |
| |
| extern int SIV_Encrypt(SIV_Instance instance, |
| const unsigned char *nonce, int nonce_length, |
| const void *assoc, int assoc_length, |
| const void *plaintext, int plaintext_length, |
| unsigned char *ciphertext, int ciphertext_length); |
| |
| extern int SIV_Decrypt(SIV_Instance instance, |
| const unsigned char *nonce, int nonce_length, |
| const void *assoc, int assoc_length, |
| const unsigned char *ciphertext, int ciphertext_length, |
| void *plaintext, int plaintext_length); |
| |
| #endif |