/*
 * 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>
#include "crypto/cipher.h"

#define SALG_TYPE_LEN_MAX 14
#define SALG_NAME_LEN_MAX 64

#ifndef SOL_ALG
#define SOL_ALG 279
#endif

#define AFALG_TYPE_CIPHER "skcipher"
#define AFALG_TYPE_HASH "hash"

#define ALG_OPTYPE_LEN 4
#define ALG_MSGIV_LEN(len) (sizeof(struct af_alg_iv) + (len))

typedef struct QCryptoAFAlg QCryptoAFAlg;

struct QCryptoAFAlg {
    QCryptoCipher base;

    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
