1 /* 2 * QEMU Crypto XTS cipher mode 3 * 4 * Copyright (c) 2015-2016 Red Hat, Inc. 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, see <http://www.gnu.org/licenses/>. 18 * 19 * This code is originally derived from public domain / WTFPL code in 20 * LibTomCrypt crytographic library http://libtom.org. The XTS code 21 * was donated by Elliptic Semiconductor Inc (www.ellipticsemi.com) 22 * to the LibTom Projects 23 * 24 */ 25 26 #ifndef QCRYPTO_XTS_H 27 #define QCRYPTO_XTS_H 28 29 #include "qemu-common.h" 30 #include "qapi/error.h" 31 32 33 #define XTS_BLOCK_SIZE 16 34 35 typedef void xts_cipher_func(const void *ctx, 36 size_t length, 37 uint8_t *dst, 38 const uint8_t *src); 39 40 /** 41 * xts_decrypt: 42 * @datactx: the cipher context for data decryption 43 * @tweakctx: the cipher context for tweak decryption 44 * @encfunc: the cipher function for encryption 45 * @decfunc: the cipher function for decryption 46 * @iv: the initialization vector tweak of XTS_BLOCK_SIZE bytes 47 * @length: the length of @dst and @src 48 * @dst: buffer to hold the decrypted plaintext 49 * @src: buffer providing the ciphertext 50 * 51 * Decrypts @src into @dst 52 */ 53 void xts_decrypt(const void *datactx, 54 const void *tweakctx, 55 xts_cipher_func *encfunc, 56 xts_cipher_func *decfunc, 57 uint8_t *iv, 58 size_t length, 59 uint8_t *dst, 60 const uint8_t *src); 61 62 /** 63 * xts_decrypt: 64 * @datactx: the cipher context for data encryption 65 * @tweakctx: the cipher context for tweak encryption 66 * @encfunc: the cipher function for encryption 67 * @decfunc: the cipher function for decryption 68 * @iv: the initialization vector tweak of XTS_BLOCK_SIZE bytes 69 * @length: the length of @dst and @src 70 * @dst: buffer to hold the encrypted ciphertext 71 * @src: buffer providing the plaintext 72 * 73 * Decrypts @src into @dst 74 */ 75 void xts_encrypt(const void *datactx, 76 const void *tweakctx, 77 xts_cipher_func *encfunc, 78 xts_cipher_func *decfunc, 79 uint8_t *iv, 80 size_t length, 81 uint8_t *dst, 82 const uint8_t *src); 83 84 85 #endif /* QCRYPTO_XTS_H */ 86