cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

hash.h (6268B)


      1/*
      2 * QEMU Crypto hash algorithms
      3 *
      4 * Copyright (c) 2015 Red Hat, Inc.
      5 *
      6 * This library is free software; you can redistribute it and/or
      7 * modify it under the terms of the GNU Lesser General Public
      8 * License as published by the Free Software Foundation; either
      9 * version 2.1 of the License, or (at your option) any later version.
     10 *
     11 * This library is distributed in the hope that it will be useful,
     12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
     13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     14 * Lesser General Public License for more details.
     15 *
     16 * You should have received a copy of the GNU Lesser General Public
     17 * License along with this library; if not, see <http://www.gnu.org/licenses/>.
     18 *
     19 */
     20
     21#ifndef QCRYPTO_HASH_H
     22#define QCRYPTO_HASH_H
     23
     24#include "qapi/qapi-types-crypto.h"
     25
     26/* See also "QCryptoHashAlgorithm" defined in qapi/crypto.json */
     27
     28/**
     29 * qcrypto_hash_supports:
     30 * @alg: the hash algorithm
     31 *
     32 * Determine if @alg hash algorithm is supported by the
     33 * current configured build.
     34 *
     35 * Returns: true if the algorithm is supported, false otherwise
     36 */
     37gboolean qcrypto_hash_supports(QCryptoHashAlgorithm alg);
     38
     39
     40/**
     41 * qcrypto_hash_digest_len:
     42 * @alg: the hash algorithm
     43 *
     44 * Determine the size of the hash digest in bytes
     45 *
     46 * Returns: the digest length in bytes
     47 */
     48size_t qcrypto_hash_digest_len(QCryptoHashAlgorithm alg);
     49
     50/**
     51 * qcrypto_hash_bytesv:
     52 * @alg: the hash algorithm
     53 * @iov: the array of memory regions to hash
     54 * @niov: the length of @iov
     55 * @result: pointer to hold output hash
     56 * @resultlen: pointer to hold length of @result
     57 * @errp: pointer to a NULL-initialized error object
     58 *
     59 * Computes the hash across all the memory regions
     60 * present in @iov. The @result pointer will be
     61 * filled with raw bytes representing the computed
     62 * hash, which will have length @resultlen. The
     63 * memory pointer in @result must be released
     64 * with a call to g_free() when no longer required.
     65 *
     66 * Returns: 0 on success, -1 on error
     67 */
     68int qcrypto_hash_bytesv(QCryptoHashAlgorithm alg,
     69                        const struct iovec *iov,
     70                        size_t niov,
     71                        uint8_t **result,
     72                        size_t *resultlen,
     73                        Error **errp);
     74
     75/**
     76 * qcrypto_hash_bytes:
     77 * @alg: the hash algorithm
     78 * @buf: the memory region to hash
     79 * @len: the length of @buf
     80 * @result: pointer to hold output hash
     81 * @resultlen: pointer to hold length of @result
     82 * @errp: pointer to a NULL-initialized error object
     83 *
     84 * Computes the hash across all the memory region
     85 * @buf of length @len. The @result pointer will be
     86 * filled with raw bytes representing the computed
     87 * hash, which will have length @resultlen. The
     88 * memory pointer in @result must be released
     89 * with a call to g_free() when no longer required.
     90 *
     91 * Returns: 0 on success, -1 on error
     92 */
     93int qcrypto_hash_bytes(QCryptoHashAlgorithm alg,
     94                       const char *buf,
     95                       size_t len,
     96                       uint8_t **result,
     97                       size_t *resultlen,
     98                       Error **errp);
     99
    100/**
    101 * qcrypto_hash_digestv:
    102 * @alg: the hash algorithm
    103 * @iov: the array of memory regions to hash
    104 * @niov: the length of @iov
    105 * @digest: pointer to hold output hash
    106 * @errp: pointer to a NULL-initialized error object
    107 *
    108 * Computes the hash across all the memory regions
    109 * present in @iov. The @digest pointer will be
    110 * filled with the printable hex digest of the computed
    111 * hash, which will be terminated by '\0'. The
    112 * memory pointer in @digest must be released
    113 * with a call to g_free() when no longer required.
    114 *
    115 * Returns: 0 on success, -1 on error
    116 */
    117int qcrypto_hash_digestv(QCryptoHashAlgorithm alg,
    118                         const struct iovec *iov,
    119                         size_t niov,
    120                         char **digest,
    121                         Error **errp);
    122
    123/**
    124 * qcrypto_hash_digest:
    125 * @alg: the hash algorithm
    126 * @buf: the memory region to hash
    127 * @len: the length of @buf
    128 * @digest: pointer to hold output hash
    129 * @errp: pointer to a NULL-initialized error object
    130 *
    131 * Computes the hash across all the memory region
    132 * @buf of length @len. The @digest pointer will be
    133 * filled with the printable hex digest of the computed
    134 * hash, which will be terminated by '\0'. The
    135 * memory pointer in @digest must be released
    136 * with a call to g_free() when no longer required.
    137 *
    138 * Returns: 0 on success, -1 on error
    139 */
    140int qcrypto_hash_digest(QCryptoHashAlgorithm alg,
    141                        const char *buf,
    142                        size_t len,
    143                        char **digest,
    144                        Error **errp);
    145
    146/**
    147 * qcrypto_hash_base64v:
    148 * @alg: the hash algorithm
    149 * @iov: the array of memory regions to hash
    150 * @niov: the length of @iov
    151 * @base64: pointer to hold output hash
    152 * @errp: pointer to a NULL-initialized error object
    153 *
    154 * Computes the hash across all the memory regions
    155 * present in @iov. The @base64 pointer will be
    156 * filled with the base64 encoding of the computed
    157 * hash, which will be terminated by '\0'. The
    158 * memory pointer in @base64 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_hash_base64v(QCryptoHashAlgorithm alg,
    164                         const struct iovec *iov,
    165                         size_t niov,
    166                         char **base64,
    167                         Error **errp);
    168
    169/**
    170 * qcrypto_hash_base64:
    171 * @alg: the hash algorithm
    172 * @buf: the memory region to hash
    173 * @len: the length of @buf
    174 * @base64: pointer to hold output hash
    175 * @errp: pointer to a NULL-initialized error object
    176 *
    177 * Computes the hash across all the memory region
    178 * @buf of length @len. The @base64 pointer will be
    179 * filled with the base64 encoding of the computed
    180 * hash, which will be terminated by '\0'. The
    181 * memory pointer in @base64 must be released
    182 * with a call to g_free() when no longer required.
    183 *
    184 * Returns: 0 on success, -1 on error
    185 */
    186int qcrypto_hash_base64(QCryptoHashAlgorithm alg,
    187                        const char *buf,
    188                        size_t len,
    189                        char **base64,
    190                        Error **errp);
    191
    192#endif /* QCRYPTO_HASH_H */