2017-07-14 20:04:05 +02:00
|
|
|
/*
|
|
|
|
* QEMU Crypto af_alg support
|
|
|
|
*
|
|
|
|
* Copyright (c) 2017 HUAWEI TECHNOLOGIES CO., LTD.
|
|
|
|
*
|
|
|
|
* Authors:
|
|
|
|
* Longpeng(Mike) <longpeng2@huawei.com>
|
|
|
|
*
|
|
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or
|
|
|
|
* (at your option) any later version. See the COPYING file in the
|
|
|
|
* top-level directory.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef QCRYPTO_AFALGPRIV_H
|
|
|
|
#define QCRYPTO_AFALGPRIV_H
|
|
|
|
|
|
|
|
#include <linux/if_alg.h>
|
|
|
|
|
|
|
|
#define SALG_TYPE_LEN_MAX 14
|
|
|
|
#define SALG_NAME_LEN_MAX 64
|
|
|
|
|
2017-07-14 20:04:06 +02:00
|
|
|
#ifndef SOL_ALG
|
|
|
|
#define SOL_ALG 279
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define AFALG_TYPE_CIPHER "skcipher"
|
2017-07-14 20:04:07 +02:00
|
|
|
#define AFALG_TYPE_HASH "hash"
|
2017-07-14 20:04:06 +02:00
|
|
|
|
|
|
|
#define ALG_OPTYPE_LEN 4
|
|
|
|
#define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len))
|
|
|
|
|
2017-07-14 20:04:05 +02:00
|
|
|
typedef struct QCryptoAFAlg QCryptoAFAlg;
|
|
|
|
|
|
|
|
struct QCryptoAFAlg {
|
|
|
|
int tfmfd;
|
|
|
|
int opfd;
|
|
|
|
struct msghdr *msg;
|
|
|
|
struct cmsghdr *cmsg;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* qcrypto_afalg_comm_alloc:
|
|
|
|
* @type: the type of crypto operation
|
|
|
|
* @name: the name of crypto operation
|
|
|
|
*
|
|
|
|
* Allocate a QCryptoAFAlg object and bind itself to
|
|
|
|
* a AF_ALG socket.
|
|
|
|
*
|
|
|
|
* Returns:
|
|
|
|
* a new QCryptoAFAlg object, or NULL in error.
|
|
|
|
*/
|
|
|
|
QCryptoAFAlg *
|
|
|
|
qcrypto_afalg_comm_alloc(const char *type, const char *name,
|
|
|
|
Error **errp);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* afalg_comm_free:
|
|
|
|
* @afalg: the QCryptoAFAlg object
|
|
|
|
*
|
|
|
|
* Free the @afalg.
|
|
|
|
*/
|
|
|
|
void qcrypto_afalg_comm_free(QCryptoAFAlg *afalg);
|
|
|
|
|
|
|
|
#endif
|