qemu/include/crypto/hmac.h
<<
>>
Prefs
   1/*
   2 * QEMU Crypto hmac algorithms
   3 *
   4 * Copyright (c) 2016 HUAWEI TECHNOLOGIES CO., LTD.
   5 *
   6 * This work is licensed under the terms of the GNU GPL, version 2 or
   7 * (at your option) any later version.  See the COPYING file in the
   8 * top-level directory.
   9 *
  10 */
  11
  12#ifndef QCRYPTO_HMAC_H
  13#define QCRYPTO_HMAC_H
  14
  15#include "qapi/qapi-types-crypto.h"
  16
  17typedef struct QCryptoHmac QCryptoHmac;
  18struct QCryptoHmac {
  19    QCryptoHashAlgorithm alg;
  20    void *opaque;
  21    void *driver;
  22};
  23
  24/**
  25 * qcrypto_hmac_supports:
  26 * @alg: the hmac algorithm
  27 *
  28 * Determine if @alg hmac algorithm is supported by
  29 * the current configured build
  30 *
  31 * Returns:
  32 *  true if the algorithm is supported, false otherwise
  33 */
  34bool qcrypto_hmac_supports(QCryptoHashAlgorithm alg);
  35
  36/**
  37 * qcrypto_hmac_new:
  38 * @alg: the hmac algorithm
  39 * @key: the key bytes
  40 * @nkey: the length of @key
  41 * @errp: pointer to a NULL-initialized error object
  42 *
  43 * Creates a new hmac object with the algorithm @alg
  44 *
  45 * The @key parameter provides the bytes representing
  46 * the secret key to use. The @nkey parameter specifies
  47 * the length of @key in bytes
  48 *
  49 * Note: must use qcrypto_hmac_free() to release the
  50 * returned hmac object when no longer required
  51 *
  52 * Returns:
  53 *  a new hmac object, or NULL on error
  54 */
  55QCryptoHmac *qcrypto_hmac_new(QCryptoHashAlgorithm alg,
  56                              const uint8_t *key, size_t nkey,
  57                              Error **errp);
  58
  59/**
  60 * qcrypto_hmac_free:
  61 * @hmac: the hmac object
  62 *
  63 * Release the memory associated with @hmac that was
  64 * previously allocated by qcrypto_hmac_new()
  65 */
  66void qcrypto_hmac_free(QCryptoHmac *hmac);
  67
  68G_DEFINE_AUTOPTR_CLEANUP_FUNC(QCryptoHmac, qcrypto_hmac_free)
  69
  70/**
  71 * qcrypto_hmac_bytesv:
  72 * @hmac: the hmac object
  73 * @iov: the array of memory regions to hmac
  74 * @niov: the length of @iov
  75 * @result: pointer to hold output hmac
  76 * @resultlen: pointer to hold length of @result
  77 * @errp: pointer to a NULL-initialized error object
  78 *
  79 * Computes the hmac across all the memory regions
  80 * present in @iov. The @result pointer will be
  81 * filled with raw bytes representing the computed
  82 * hmac, which will have length @resultlen. The
  83 * memory pointer in @result must be released
  84 * with a call to g_free() when no longer required.
  85 *
  86 * Returns:
  87 *  0 on success, -1 on error
  88 */
  89int qcrypto_hmac_bytesv(QCryptoHmac *hmac,
  90                        const struct iovec *iov,
  91                        size_t niov,
  92                        uint8_t **result,
  93                        size_t *resultlen,
  94                        Error **errp);
  95
  96/**
  97 * qcrypto_hmac_bytes:
  98 * @hmac: the hmac object
  99 * @buf: the memory region to hmac
 100 * @len: the length of @buf
 101 * @result: pointer to hold output hmac
 102 * @resultlen: pointer to hold length of @result
 103 * @errp: pointer to a NULL-initialized error object
 104 *
 105 * Computes the hmac across all the memory region
 106 * @buf of length @len. The @result pointer will be
 107 * filled with raw bytes representing the computed
 108 * hmac, which will have length @resultlen. The
 109 * memory pointer in @result must be released
 110 * with a call to g_free() when no longer required.
 111 *
 112 * Returns:
 113 *  0 on success, -1 on error
 114 */
 115int qcrypto_hmac_bytes(QCryptoHmac *hmac,
 116                       const char *buf,
 117                       size_t len,
 118                       uint8_t **result,
 119                       size_t *resultlen,
 120                       Error **errp);
 121
 122/**
 123 * qcrypto_hmac_digestv:
 124 * @hmac: the hmac object
 125 * @iov: the array of memory regions to hmac
 126 * @niov: the length of @iov
 127 * @digest: pointer to hold output hmac
 128 * @errp: pointer to a NULL-initialized error object
 129 *
 130 * Computes the hmac across all the memory regions
 131 * present in @iov. The @digest pointer will be
 132 * filled with the printable hex digest of the computed
 133 * hmac, which will be terminated by '\0'. The
 134 * memory pointer in @digest must be released
 135 * with a call to g_free() when no longer required.
 136 *
 137 * Returns:
 138 *  0 on success, -1 on error
 139 */
 140int qcrypto_hmac_digestv(QCryptoHmac *hmac,
 141                         const struct iovec *iov,
 142                         size_t niov,
 143                         char **digest,
 144                         Error **errp);
 145
 146/**
 147 * qcrypto_hmac_digest:
 148 * @hmac: the hmac object
 149 * @buf: the memory region to hmac
 150 * @len: the length of @buf
 151 * @digest: pointer to hold output hmac
 152 * @errp: pointer to a NULL-initialized error object
 153 *
 154 * Computes the hmac across all the memory region
 155 * @buf of length @len. The @digest pointer will be
 156 * filled with the printable hex digest of the computed
 157 * hmac, which will be terminated by '\0'. The
 158 * memory pointer in @digest must be released
 159 * with a call to g_free() when no longer required.
 160 *
 161 * Returns: 0 on success, -1 on error
 162 */
 163int qcrypto_hmac_digest(QCryptoHmac *hmac,
 164                        const char *buf,
 165                        size_t len,
 166                        char **digest,
 167                        Error **errp);
 168
 169#endif
 170