xref: /openbmc/qemu/crypto/afalgpriv.h (revision b8eada54b2ad8a7d98d93d5ab4d3e888c5880097)
1f0d92b56SLongpeng(Mike) /*
2f0d92b56SLongpeng(Mike)  * QEMU Crypto af_alg support
3f0d92b56SLongpeng(Mike)  *
4f0d92b56SLongpeng(Mike)  * Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD.
5f0d92b56SLongpeng(Mike)  *
6f0d92b56SLongpeng(Mike)  * Authors:
7f0d92b56SLongpeng(Mike)  *    Longpeng(Mike) <longpeng2@huawei.com>
8f0d92b56SLongpeng(Mike)  *
9f0d92b56SLongpeng(Mike)  * This work is licensed under the terms of the GNU GPL, version 2 or
10f0d92b56SLongpeng(Mike)  * (at your option) any later version.  See the COPYING file in the
11f0d92b56SLongpeng(Mike)  * top-level directory.
12f0d92b56SLongpeng(Mike)  */
13f0d92b56SLongpeng(Mike) 
14f0d92b56SLongpeng(Mike) #ifndef QCRYPTO_AFALGPRIV_H
15f0d92b56SLongpeng(Mike) #define QCRYPTO_AFALGPRIV_H
16f0d92b56SLongpeng(Mike) 
17f0d92b56SLongpeng(Mike) #include <linux/if_alg.h>
183eedf5ccSRichard Henderson #include "crypto/cipher.h"
19f0d92b56SLongpeng(Mike) 
20f0d92b56SLongpeng(Mike) #define SALG_TYPE_LEN_MAX 14
21f0d92b56SLongpeng(Mike) #define SALG_NAME_LEN_MAX 64
22f0d92b56SLongpeng(Mike) 
2325c60df3SLongpeng(Mike) #ifndef SOL_ALG
2425c60df3SLongpeng(Mike) #define SOL_ALG 279
2525c60df3SLongpeng(Mike) #endif
2625c60df3SLongpeng(Mike) 
2725c60df3SLongpeng(Mike) #define AFALG_TYPE_CIPHER "skcipher"
289a059773SLongpeng(Mike) #define AFALG_TYPE_HASH "hash"
2925c60df3SLongpeng(Mike) 
3025c60df3SLongpeng(Mike) #define ALG_OPTYPE_LEN 4
3125c60df3SLongpeng(Mike) #define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len))
3225c60df3SLongpeng(Mike) 
33*8f525028SMarkus Armbruster typedef struct QCryptoAFAlgo QCryptoAFAlgo;
34f0d92b56SLongpeng(Mike) 
35*8f525028SMarkus Armbruster struct QCryptoAFAlgo {
363eedf5ccSRichard Henderson     QCryptoCipher base;
373eedf5ccSRichard Henderson 
38f0d92b56SLongpeng(Mike)     int tfmfd;
39f0d92b56SLongpeng(Mike)     int opfd;
40f0d92b56SLongpeng(Mike)     struct msghdr *msg;
41f0d92b56SLongpeng(Mike)     struct cmsghdr *cmsg;
42f0d92b56SLongpeng(Mike) };
43f0d92b56SLongpeng(Mike) 
44f0d92b56SLongpeng(Mike) /**
45f0d92b56SLongpeng(Mike)  * qcrypto_afalg_comm_alloc:
46f0d92b56SLongpeng(Mike)  * @type: the type of crypto operation
47f0d92b56SLongpeng(Mike)  * @name: the name of crypto operation
48f0d92b56SLongpeng(Mike)  *
49*8f525028SMarkus Armbruster  * Allocate a QCryptoAFAlgo object and bind itself to
50f0d92b56SLongpeng(Mike)  * a AF_ALG socket.
51f0d92b56SLongpeng(Mike)  *
52f0d92b56SLongpeng(Mike)  * Returns:
53*8f525028SMarkus Armbruster  *  a new QCryptoAFAlgo object, or NULL in error.
54f0d92b56SLongpeng(Mike)  */
55*8f525028SMarkus Armbruster QCryptoAFAlgo *
56f0d92b56SLongpeng(Mike) qcrypto_afalg_comm_alloc(const char *type, const char *name,
57f0d92b56SLongpeng(Mike)                          Error **errp);
58f0d92b56SLongpeng(Mike) 
59f0d92b56SLongpeng(Mike) /**
60f0d92b56SLongpeng(Mike)  * afalg_comm_free:
61*8f525028SMarkus Armbruster  * @afalg: the QCryptoAFAlgo object
62f0d92b56SLongpeng(Mike)  *
63f0d92b56SLongpeng(Mike)  * Free the @afalg.
64f0d92b56SLongpeng(Mike)  */
65*8f525028SMarkus Armbruster void qcrypto_afalg_comm_free(QCryptoAFAlgo *afalg);
66f0d92b56SLongpeng(Mike) 
67f0d92b56SLongpeng(Mike) #endif
68