xref: /qemu/include/crypto/xts.h (revision abff1abf)
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.1 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 
30 #define XTS_BLOCK_SIZE 16
31 
32 typedef void xts_cipher_func(const void *ctx,
33                              size_t length,
34                              uint8_t *dst,
35                              const uint8_t *src);
36 
37 /**
38  * xts_decrypt:
39  * @datactx: the cipher context for data decryption
40  * @tweakctx: the cipher context for tweak decryption
41  * @encfunc: the cipher function for encryption
42  * @decfunc: the cipher function for decryption
43  * @iv: the initialization vector tweak of XTS_BLOCK_SIZE bytes
44  * @length: the length of @dst and @src
45  * @dst: buffer to hold the decrypted plaintext
46  * @src: buffer providing the ciphertext
47  *
48  * Decrypts @src into @dst
49  */
50 void xts_decrypt(const void *datactx,
51                  const void *tweakctx,
52                  xts_cipher_func *encfunc,
53                  xts_cipher_func *decfunc,
54                  uint8_t *iv,
55                  size_t length,
56                  uint8_t *dst,
57                  const uint8_t *src);
58 
59 /**
60  * xts_decrypt:
61  * @datactx: the cipher context for data encryption
62  * @tweakctx: the cipher context for tweak encryption
63  * @encfunc: the cipher function for encryption
64  * @decfunc: the cipher function for decryption
65  * @iv: the initialization vector tweak of XTS_BLOCK_SIZE bytes
66  * @length: the length of @dst and @src
67  * @dst: buffer to hold the encrypted ciphertext
68  * @src: buffer providing the plaintext
69  *
70  * Decrypts @src into @dst
71  */
72 void xts_encrypt(const void *datactx,
73                  const void *tweakctx,
74                  xts_cipher_func *encfunc,
75                  xts_cipher_func *decfunc,
76                  uint8_t *iv,
77                  size_t length,
78                  uint8_t *dst,
79                  const uint8_t *src);
80 
81 
82 #endif /* QCRYPTO_XTS_H */
83