Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 1 | =pod |
| 2 | |
| 3 | =head1 NAME |
| 4 | |
Matt Caswell | 827d17f | 2016-06-20 09:28:25 +0100 | [diff] [blame] | 5 | HMAC, |
| 6 | HMAC_CTX_new, |
| 7 | HMAC_CTX_reset, |
| 8 | HMAC_CTX_free, |
| 9 | HMAC_Init, |
| 10 | HMAC_Init_ex, |
| 11 | HMAC_Update, |
| 12 | HMAC_Final, |
| 13 | HMAC_CTX_copy, |
| 14 | HMAC_CTX_set_flags, |
Matt Caswell | 8d2b181 | 2016-10-25 17:10:44 +0100 | [diff] [blame] | 15 | HMAC_CTX_get_md, |
| 16 | HMAC_size |
Matt Caswell | 827d17f | 2016-06-20 09:28:25 +0100 | [diff] [blame] | 17 | - HMAC message authentication code |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 18 | |
| 19 | =head1 SYNOPSIS |
| 20 | |
| 21 | #include <openssl/hmac.h> |
| 22 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 23 | unsigned char *HMAC(const EVP_MD *evp_md, const void *key, int key_len, |
| 24 | const unsigned char *data, size_t data_len, |
| 25 | unsigned char *md, unsigned int *md_len); |
| 26 | |
Matt Caswell | 3dbf824 | 2021-12-02 11:33:49 +0000 | [diff] [blame] | 27 | The following functions have been deprecated since OpenSSL 3.0, and can be |
| 28 | hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value, |
| 29 | see L<openssl_user_macros(7)>: |
Pauli | dbde472 | 2020-01-14 12:11:50 +1000 | [diff] [blame] | 30 | |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 31 | HMAC_CTX *HMAC_CTX_new(void); |
| 32 | int HMAC_CTX_reset(HMAC_CTX *ctx); |
Ben Laurie | ff3fa48 | 2001-12-09 21:53:31 +0000 | [diff] [blame] | 33 | |
Dr. Stephen Henson | 87d5246 | 2008-11-02 16:00:39 +0000 | [diff] [blame] | 34 | int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int key_len, |
Beat Bolli | e9b7724 | 2017-01-20 19:58:49 +0100 | [diff] [blame] | 35 | const EVP_MD *md, ENGINE *impl); |
pedro martelletto | cc63865 | 2020-06-24 17:48:00 +0200 | [diff] [blame] | 36 | int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len); |
Dr. Stephen Henson | 87d5246 | 2008-11-02 16:00:39 +0000 | [diff] [blame] | 37 | int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len); |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 38 | |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 39 | void HMAC_CTX_free(HMAC_CTX *ctx); |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 40 | |
Matt Caswell | 827d17f | 2016-06-20 09:28:25 +0100 | [diff] [blame] | 41 | int HMAC_CTX_copy(HMAC_CTX *dctx, HMAC_CTX *sctx); |
| 42 | void HMAC_CTX_set_flags(HMAC_CTX *ctx, unsigned long flags); |
| 43 | const EVP_MD *HMAC_CTX_get_md(const HMAC_CTX *ctx); |
| 44 | |
Matt Caswell | 8d2b181 | 2016-10-25 17:10:44 +0100 | [diff] [blame] | 45 | size_t HMAC_size(const HMAC_CTX *e); |
| 46 | |
Matt Caswell | 3dbf824 | 2021-12-02 11:33:49 +0000 | [diff] [blame] | 47 | The following function has been deprecated since OpenSSL 1.1.0, and can be |
| 48 | hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value, |
| 49 | see L<openssl_user_macros(7)>: |
Viktor Dukhovni | 98186eb | 2016-01-04 23:00:33 -0500 | [diff] [blame] | 50 | |
Viktor Dukhovni | 98186eb | 2016-01-04 23:00:33 -0500 | [diff] [blame] | 51 | int HMAC_Init(HMAC_CTX *ctx, const void *key, int key_len, |
| 52 | const EVP_MD *md); |
Viktor Dukhovni | 98186eb | 2016-01-04 23:00:33 -0500 | [diff] [blame] | 53 | |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 54 | =head1 DESCRIPTION |
| 55 | |
| 56 | HMAC is a MAC (message authentication code), i.e. a keyed hash |
| 57 | function used for message authentication, which is based on a hash |
| 58 | function. |
| 59 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 60 | HMAC() computes the message authentication code of the I<data_len> bytes at |
| 61 | I<data> using the hash function I<evp_md> and the key I<key> which is |
| 62 | I<key_len> bytes long. The I<key> may also be NULL with I<key_len> being 0. |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 63 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 64 | It places the result in I<md> (which must have space for the output of |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 65 | the hash function, which is no more than B<EVP_MAX_MD_SIZE> bytes). |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 66 | If I<md> is NULL, the digest is placed in a static array. The size of |
| 67 | the output is placed in I<md_len>, unless it is NULL. Note: passing a NULL |
| 68 | value for I<md> to use the static array is not thread safe. |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 69 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 70 | I<evp_md> is a message digest such as EVP_sha1(), EVP_ripemd160() etc. |
| 71 | HMAC does not support variable output length digests such as EVP_shake128() and |
Matt Caswell | 48fdeca | 2019-03-26 13:32:39 +0000 | [diff] [blame] | 72 | EVP_shake256(). |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 73 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 74 | All of the functions described below are deprecated. |
| 75 | Applications should instead use L<EVP_MAC_CTX_new(3)>, L<EVP_MAC_CTX_free(3)>, |
| 76 | L<EVP_MAC_init(3)>, L<EVP_MAC_update(3)> and L<EVP_MAC_final(3)> |
| 77 | or the 'quick' single-shot MAC function L<EVP_Q_mac(3)>. |
| 78 | |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 79 | HMAC_CTX_new() creates a new HMAC_CTX in heap memory. |
Ben Laurie | ff3fa48 | 2001-12-09 21:53:31 +0000 | [diff] [blame] | 80 | |
Rich Salz | 9c0586d | 2019-09-27 13:17:09 -0400 | [diff] [blame] | 81 | HMAC_CTX_reset() clears an existing B<HMAC_CTX> and associated |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 82 | resources, making it suitable for new computations as if it was newly |
| 83 | created with HMAC_CTX_new(). |
| 84 | |
| 85 | HMAC_CTX_free() erases the key and other data from the B<HMAC_CTX>, |
| 86 | releases any associated resources and finally frees the B<HMAC_CTX> |
| 87 | itself. |
Ben Laurie | ff3fa48 | 2001-12-09 21:53:31 +0000 | [diff] [blame] | 88 | |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 89 | The following functions may be used if the message is not completely |
| 90 | stored in memory: |
| 91 | |
Dr. Stephen Henson | bd19d1a | 2016-07-19 18:40:14 +0100 | [diff] [blame] | 92 | HMAC_Init_ex() initializes or reuses a B<HMAC_CTX> structure to use the hash |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 93 | function I<evp_md> and key I<key>. If both are NULL, or if I<key> is NULL |
| 94 | and I<evp_md> is the same as the previous call, then the |
Rich Salz | b3696a5 | 2017-09-02 09:35:50 -0400 | [diff] [blame] | 95 | existing key is |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 96 | reused. I<ctx> must have been created with HMAC_CTX_new() before the first use |
Rich Salz | b3696a5 | 2017-09-02 09:35:50 -0400 | [diff] [blame] | 97 | of an B<HMAC_CTX> in this function. |
Dr. Stephen Henson | bd19d1a | 2016-07-19 18:40:14 +0100 | [diff] [blame] | 98 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 99 | If HMAC_Init_ex() is called with I<key> NULL and I<evp_md> is not the |
| 100 | same as the previous digest used by I<ctx> then an error is returned |
Rich Salz | 1a62777 | 2016-07-28 17:00:05 -0400 | [diff] [blame] | 101 | because reuse of an existing key with a different digest is not supported. |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 102 | |
Rich Salz | b3696a5 | 2017-09-02 09:35:50 -0400 | [diff] [blame] | 103 | HMAC_Init() initializes a B<HMAC_CTX> structure to use the hash |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 104 | function I<evp_md> and the key I<key> which is I<key_len> bytes |
Sam Roberts | df44391 | 2019-01-31 09:55:30 -0800 | [diff] [blame] | 105 | long. |
Rich Salz | b3696a5 | 2017-09-02 09:35:50 -0400 | [diff] [blame] | 106 | |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 107 | HMAC_Update() can be called repeatedly with chunks of the message to |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 108 | be authenticated (I<len> bytes at I<data>). |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 109 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 110 | HMAC_Final() places the message authentication code in I<md>, which |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 111 | must have space for the hash function output. |
| 112 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 113 | HMAC_CTX_copy() copies all of the internal state from I<sctx> into I<dctx>. |
Matt Caswell | 827d17f | 2016-06-20 09:28:25 +0100 | [diff] [blame] | 114 | |
| 115 | HMAC_CTX_set_flags() applies the specified flags to the internal EVP_MD_CTXs. |
| 116 | These flags have the same meaning as for L<EVP_MD_CTX_set_flags(3)>. |
| 117 | |
| 118 | HMAC_CTX_get_md() returns the EVP_MD that has previously been set for the |
| 119 | supplied HMAC_CTX. |
| 120 | |
Matt Caswell | 8d2b181 | 2016-10-25 17:10:44 +0100 | [diff] [blame] | 121 | HMAC_size() returns the length in bytes of the underlying hash function output. |
| 122 | |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 123 | =head1 RETURN VALUES |
| 124 | |
Dr. Stephen Henson | 87d5246 | 2008-11-02 16:00:39 +0000 | [diff] [blame] | 125 | HMAC() returns a pointer to the message authentication code or NULL if |
| 126 | an error occurred. |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 127 | |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 128 | HMAC_CTX_new() returns a pointer to a new B<HMAC_CTX> on success or |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 129 | NULL if an error occurred. |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 130 | |
Matt Caswell | 827d17f | 2016-06-20 09:28:25 +0100 | [diff] [blame] | 131 | HMAC_CTX_reset(), HMAC_Init_ex(), HMAC_Update(), HMAC_Final() and |
| 132 | HMAC_CTX_copy() return 1 for success or 0 if an error occurred. |
Dr. Stephen Henson | 87d5246 | 2008-11-02 16:00:39 +0000 | [diff] [blame] | 133 | |
Matt Caswell | 827d17f | 2016-06-20 09:28:25 +0100 | [diff] [blame] | 134 | HMAC_CTX_get_md() return the EVP_MD previously set for the supplied HMAC_CTX or |
| 135 | NULL if no EVP_MD has been set. |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 136 | |
Matt Caswell | 8d2b181 | 2016-10-25 17:10:44 +0100 | [diff] [blame] | 137 | HMAC_size() returns the length in bytes of the underlying hash function output |
| 138 | or zero on error. |
| 139 | |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 140 | =head1 CONFORMING TO |
| 141 | |
| 142 | RFC 2104 |
| 143 | |
| 144 | =head1 SEE ALSO |
| 145 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 146 | L<SHA1(3)>, EVP_Q_mac(3), L<evp(7)> |
Ulf Möller | 9dbc41d | 2000-02-03 18:22:01 +0000 | [diff] [blame] | 147 | |
| 148 | =head1 HISTORY |
| 149 | |
Dr. David von Oheimb | 0a8a6af | 2021-03-29 19:42:33 +0200 | [diff] [blame] | 150 | All functions except for HMAC() were deprecated in OpenSSL 3.0. |
Pauli | dbde472 | 2020-01-14 12:11:50 +1000 | [diff] [blame] | 151 | |
Rich Salz | e90fc05 | 2017-07-15 09:39:45 -0400 | [diff] [blame] | 152 | HMAC_CTX_init() was replaced with HMAC_CTX_reset() in OpenSSL 1.1.0. |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 153 | |
Rich Salz | e90fc05 | 2017-07-15 09:39:45 -0400 | [diff] [blame] | 154 | HMAC_CTX_cleanup() existed in OpenSSL before version 1.1.0. |
Richard Levitte | 716854d | 2015-11-30 23:43:59 +0100 | [diff] [blame] | 155 | |
Rich Salz | e90fc05 | 2017-07-15 09:39:45 -0400 | [diff] [blame] | 156 | HMAC_CTX_new(), HMAC_CTX_free() and HMAC_CTX_get_md() are new in OpenSSL 1.1.0. |
Richard Levitte | 9b6c007 | 2015-11-27 14:19:27 +0100 | [diff] [blame] | 157 | |
Dr. Stephen Henson | 87d5246 | 2008-11-02 16:00:39 +0000 | [diff] [blame] | 158 | HMAC_Init_ex(), HMAC_Update() and HMAC_Final() did not return values in |
Rich Salz | e90fc05 | 2017-07-15 09:39:45 -0400 | [diff] [blame] | 159 | OpenSSL before version 1.0.0. |
Dr. Stephen Henson | 87d5246 | 2008-11-02 16:00:39 +0000 | [diff] [blame] | 160 | |
Rich Salz | e2f9261 | 2016-05-18 11:44:05 -0400 | [diff] [blame] | 161 | =head1 COPYRIGHT |
| 162 | |
Matt Caswell | 0789c7d | 2021-05-20 14:22:33 +0100 | [diff] [blame] | 163 | Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved. |
Rich Salz | e2f9261 | 2016-05-18 11:44:05 -0400 | [diff] [blame] | 164 | |
Richard Levitte | 4746f25 | 2018-12-06 14:04:44 +0100 | [diff] [blame] | 165 | Licensed under the Apache License 2.0 (the "License"). You may not use |
Rich Salz | e2f9261 | 2016-05-18 11:44:05 -0400 | [diff] [blame] | 166 | this file except in compliance with the License. You can obtain a copy |
| 167 | in the file LICENSE in the source distribution or at |
| 168 | L<https://www.openssl.org/source/license.html>. |
| 169 | |
| 170 | =cut |