qemu

FORK: QEMU emulator
git clone https://git.neptards.moe/neptards/qemu.git
Log | Files | Refs | Submodules | LICENSE

hmac.h (4977B)


      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 
     17 typedef struct QCryptoHmac QCryptoHmac;
     18 struct 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  */
     34 bool 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  */
     55 QCryptoHmac *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  */
     66 void qcrypto_hmac_free(QCryptoHmac *hmac);
     67 
     68 G_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  */
     89 int 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  */
    115 int 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  */
    140 int 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  */
    163 int qcrypto_hmac_digest(QCryptoHmac *hmac,
    164                         const char *buf,
    165                         size_t len,
    166                         char **digest,
    167                         Error **errp);
    168 
    169 #endif