duckstation

duckstation, but archived from the revision just before upstream changed it to a proprietary software project, this version is the libre one
git clone https://git.neptards.moe/u3shit/duckstation.git
Log | Files | Refs | README | LICENSE

hmac.h (2865B)


      1 /*
      2  * Copyright (C) 2012 Martin Storsjo
      3  *
      4  * This file is part of FFmpeg.
      5  *
      6  * FFmpeg 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  * FFmpeg 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 FFmpeg; if not, write to the Free Software
     18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
     19  */
     20 
     21 #ifndef AVUTIL_HMAC_H
     22 #define AVUTIL_HMAC_H
     23 
     24 #include <stdint.h>
     25 
     26 /**
     27  * @defgroup lavu_hmac HMAC
     28  * @ingroup lavu_crypto
     29  * @{
     30  */
     31 
     32 enum AVHMACType {
     33     AV_HMAC_MD5,
     34     AV_HMAC_SHA1,
     35     AV_HMAC_SHA224,
     36     AV_HMAC_SHA256,
     37     AV_HMAC_SHA384,
     38     AV_HMAC_SHA512,
     39 };
     40 
     41 typedef struct AVHMAC AVHMAC;
     42 
     43 /**
     44  * Allocate an AVHMAC context.
     45  * @param type The hash function used for the HMAC.
     46  */
     47 AVHMAC *av_hmac_alloc(enum AVHMACType type);
     48 
     49 /**
     50  * Free an AVHMAC context.
     51  * @param ctx The context to free, may be NULL
     52  */
     53 void av_hmac_free(AVHMAC *ctx);
     54 
     55 /**
     56  * Initialize an AVHMAC context with an authentication key.
     57  * @param ctx    The HMAC context
     58  * @param key    The authentication key
     59  * @param keylen The length of the key, in bytes
     60  */
     61 void av_hmac_init(AVHMAC *ctx, const uint8_t *key, unsigned int keylen);
     62 
     63 /**
     64  * Hash data with the HMAC.
     65  * @param ctx  The HMAC context
     66  * @param data The data to hash
     67  * @param len  The length of the data, in bytes
     68  */
     69 void av_hmac_update(AVHMAC *ctx, const uint8_t *data, unsigned int len);
     70 
     71 /**
     72  * Finish hashing and output the HMAC digest.
     73  * @param ctx    The HMAC context
     74  * @param out    The output buffer to write the digest into
     75  * @param outlen The length of the out buffer, in bytes
     76  * @return       The number of bytes written to out, or a negative error code.
     77  */
     78 int av_hmac_final(AVHMAC *ctx, uint8_t *out, unsigned int outlen);
     79 
     80 /**
     81  * Hash an array of data with a key.
     82  * @param ctx    The HMAC context
     83  * @param data   The data to hash
     84  * @param len    The length of the data, in bytes
     85  * @param key    The authentication key
     86  * @param keylen The length of the key, in bytes
     87  * @param out    The output buffer to write the digest into
     88  * @param outlen The length of the out buffer, in bytes
     89  * @return       The number of bytes written to out, or a negative error code.
     90  */
     91 int av_hmac_calc(AVHMAC *ctx, const uint8_t *data, unsigned int len,
     92                  const uint8_t *key, unsigned int keylen,
     93                  uint8_t *out, unsigned int outlen);
     94 
     95 /**
     96  * @}
     97  */
     98 
     99 #endif /* AVUTIL_HMAC_H */