| 205 | } |
| 206 | |
| 207 | int encrypt_siv(const unsigned char *plaintext, int plaintext_len, unsigned char *aad, |
| 208 | int aad_len, const unsigned char *iv, |
| 209 | unsigned char *ciphertext, unsigned char *siv, const SivContext *context) |
| 210 | { |
| 211 | |
| 212 | if (aad_len != 24) |
| 213 | return -1; |
| 214 | |
| 215 | unsigned char header_data[24+16]; |
| 216 | |
| 217 | memcpy(header_data, aad, aad_len); |
| 218 | |
| 219 | memcpy(header_data + aad_len, iv, 16); |
| 220 | |
| 221 | size_t header_sizes[2] = { 24, 16 }; |
| 222 | |
| 223 | memcpy(ciphertext, plaintext, plaintext_len); |
| 224 | |
| 225 | if (!aes256_encrypt_siv(context, header_data, header_sizes, 2, ciphertext, plaintext_len, siv)) |
| 226 | return -1; |
| 227 | |
| 228 | return plaintext_len; |
| 229 | } |
| 230 | |
| 231 | int decrypt_siv(const unsigned char *ciphertext, int ciphertext_len, unsigned char *aad, |
| 232 | int aad_len, const unsigned char *siv, const unsigned char *iv, |
no test coverage detected