blob: 43aca065f0d285ed98d4d5a197bd792d52b3afa4 [file] [log] [blame]
Ulf Möller9dbc41d2000-02-03 18:22:01 +00001=pod
2
3=head1 NAME
4
Matt Caswell827d17f2016-06-20 09:28:25 +01005HMAC,
6HMAC_CTX_new,
7HMAC_CTX_reset,
8HMAC_CTX_free,
9HMAC_Init,
10HMAC_Init_ex,
11HMAC_Update,
12HMAC_Final,
13HMAC_CTX_copy,
14HMAC_CTX_set_flags,
Matt Caswell8d2b1812016-10-25 17:10:44 +010015HMAC_CTX_get_md,
16HMAC_size
Matt Caswell827d17f2016-06-20 09:28:25 +010017- HMAC message authentication code
Ulf Möller9dbc41d2000-02-03 18:22:01 +000018
19=head1 SYNOPSIS
20
21 #include <openssl/hmac.h>
22
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020023 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 Caswell3dbf8242021-12-02 11:33:49 +000027The following functions have been deprecated since OpenSSL 3.0, and can be
28hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value,
29see L<openssl_user_macros(7)>:
Paulidbde4722020-01-14 12:11:50 +100030
Richard Levitte716854d2015-11-30 23:43:59 +010031 HMAC_CTX *HMAC_CTX_new(void);
32 int HMAC_CTX_reset(HMAC_CTX *ctx);
Ben Laurieff3fa482001-12-09 21:53:31 +000033
Dr. Stephen Henson87d52462008-11-02 16:00:39 +000034 int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int key_len,
Beat Bollie9b77242017-01-20 19:58:49 +010035 const EVP_MD *md, ENGINE *impl);
pedro martellettocc638652020-06-24 17:48:00 +020036 int HMAC_Update(HMAC_CTX *ctx, const unsigned char *data, size_t len);
Dr. Stephen Henson87d52462008-11-02 16:00:39 +000037 int HMAC_Final(HMAC_CTX *ctx, unsigned char *md, unsigned int *len);
Ulf Möller9dbc41d2000-02-03 18:22:01 +000038
Richard Levitte716854d2015-11-30 23:43:59 +010039 void HMAC_CTX_free(HMAC_CTX *ctx);
Ulf Möller9dbc41d2000-02-03 18:22:01 +000040
Matt Caswell827d17f2016-06-20 09:28:25 +010041 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 Caswell8d2b1812016-10-25 17:10:44 +010045 size_t HMAC_size(const HMAC_CTX *e);
46
Matt Caswell3dbf8242021-12-02 11:33:49 +000047The following function has been deprecated since OpenSSL 1.1.0, and can be
48hidden entirely by defining B<OPENSSL_API_COMPAT> with a suitable version value,
49see L<openssl_user_macros(7)>:
Viktor Dukhovni98186eb2016-01-04 23:00:33 -050050
Viktor Dukhovni98186eb2016-01-04 23:00:33 -050051 int HMAC_Init(HMAC_CTX *ctx, const void *key, int key_len,
52 const EVP_MD *md);
Viktor Dukhovni98186eb2016-01-04 23:00:33 -050053
Ulf Möller9dbc41d2000-02-03 18:22:01 +000054=head1 DESCRIPTION
55
56HMAC is a MAC (message authentication code), i.e. a keyed hash
57function used for message authentication, which is based on a hash
58function.
59
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020060HMAC() computes the message authentication code of the I<data_len> bytes at
61I<data> using the hash function I<evp_md> and the key I<key> which is
62I<key_len> bytes long. The I<key> may also be NULL with I<key_len> being 0.
Ulf Möller9dbc41d2000-02-03 18:22:01 +000063
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020064It places the result in I<md> (which must have space for the output of
Ulf Möller9dbc41d2000-02-03 18:22:01 +000065the hash function, which is no more than B<EVP_MAX_MD_SIZE> bytes).
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020066If I<md> is NULL, the digest is placed in a static array. The size of
67the output is placed in I<md_len>, unless it is NULL. Note: passing a NULL
68value for I<md> to use the static array is not thread safe.
Ulf Möller9dbc41d2000-02-03 18:22:01 +000069
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020070I<evp_md> is a message digest such as EVP_sha1(), EVP_ripemd160() etc.
71HMAC does not support variable output length digests such as EVP_shake128() and
Matt Caswell48fdeca2019-03-26 13:32:39 +000072EVP_shake256().
Ulf Möller9dbc41d2000-02-03 18:22:01 +000073
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020074All of the functions described below are deprecated.
75Applications should instead use L<EVP_MAC_CTX_new(3)>, L<EVP_MAC_CTX_free(3)>,
76L<EVP_MAC_init(3)>, L<EVP_MAC_update(3)> and L<EVP_MAC_final(3)>
77or the 'quick' single-shot MAC function L<EVP_Q_mac(3)>.
78
Richard Levitte716854d2015-11-30 23:43:59 +010079HMAC_CTX_new() creates a new HMAC_CTX in heap memory.
Ben Laurieff3fa482001-12-09 21:53:31 +000080
Rich Salz9c0586d2019-09-27 13:17:09 -040081HMAC_CTX_reset() clears an existing B<HMAC_CTX> and associated
Richard Levitte716854d2015-11-30 23:43:59 +010082resources, making it suitable for new computations as if it was newly
83created with HMAC_CTX_new().
84
85HMAC_CTX_free() erases the key and other data from the B<HMAC_CTX>,
86releases any associated resources and finally frees the B<HMAC_CTX>
87itself.
Ben Laurieff3fa482001-12-09 21:53:31 +000088
Ulf Möller9dbc41d2000-02-03 18:22:01 +000089The following functions may be used if the message is not completely
90stored in memory:
91
Dr. Stephen Hensonbd19d1a2016-07-19 18:40:14 +010092HMAC_Init_ex() initializes or reuses a B<HMAC_CTX> structure to use the hash
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020093function I<evp_md> and key I<key>. If both are NULL, or if I<key> is NULL
94and I<evp_md> is the same as the previous call, then the
Rich Salzb3696a52017-09-02 09:35:50 -040095existing key is
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020096reused. I<ctx> must have been created with HMAC_CTX_new() before the first use
Rich Salzb3696a52017-09-02 09:35:50 -040097of an B<HMAC_CTX> in this function.
Dr. Stephen Hensonbd19d1a2016-07-19 18:40:14 +010098
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +020099If HMAC_Init_ex() is called with I<key> NULL and I<evp_md> is not the
100same as the previous digest used by I<ctx> then an error is returned
Rich Salz1a627772016-07-28 17:00:05 -0400101because reuse of an existing key with a different digest is not supported.
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000102
Rich Salzb3696a52017-09-02 09:35:50 -0400103HMAC_Init() initializes a B<HMAC_CTX> structure to use the hash
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +0200104function I<evp_md> and the key I<key> which is I<key_len> bytes
Sam Robertsdf443912019-01-31 09:55:30 -0800105long.
Rich Salzb3696a52017-09-02 09:35:50 -0400106
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000107HMAC_Update() can be called repeatedly with chunks of the message to
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +0200108be authenticated (I<len> bytes at I<data>).
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000109
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +0200110HMAC_Final() places the message authentication code in I<md>, which
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000111must have space for the hash function output.
112
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +0200113HMAC_CTX_copy() copies all of the internal state from I<sctx> into I<dctx>.
Matt Caswell827d17f2016-06-20 09:28:25 +0100114
115HMAC_CTX_set_flags() applies the specified flags to the internal EVP_MD_CTXs.
116These flags have the same meaning as for L<EVP_MD_CTX_set_flags(3)>.
117
118HMAC_CTX_get_md() returns the EVP_MD that has previously been set for the
119supplied HMAC_CTX.
120
Matt Caswell8d2b1812016-10-25 17:10:44 +0100121HMAC_size() returns the length in bytes of the underlying hash function output.
122
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000123=head1 RETURN VALUES
124
Dr. Stephen Henson87d52462008-11-02 16:00:39 +0000125HMAC() returns a pointer to the message authentication code or NULL if
126an error occurred.
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000127
Richard Levitte716854d2015-11-30 23:43:59 +0100128HMAC_CTX_new() returns a pointer to a new B<HMAC_CTX> on success or
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +0200129NULL if an error occurred.
Richard Levitte716854d2015-11-30 23:43:59 +0100130
Matt Caswell827d17f2016-06-20 09:28:25 +0100131HMAC_CTX_reset(), HMAC_Init_ex(), HMAC_Update(), HMAC_Final() and
132HMAC_CTX_copy() return 1 for success or 0 if an error occurred.
Dr. Stephen Henson87d52462008-11-02 16:00:39 +0000133
Matt Caswell827d17f2016-06-20 09:28:25 +0100134HMAC_CTX_get_md() return the EVP_MD previously set for the supplied HMAC_CTX or
135NULL if no EVP_MD has been set.
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000136
Matt Caswell8d2b1812016-10-25 17:10:44 +0100137HMAC_size() returns the length in bytes of the underlying hash function output
138or zero on error.
139
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000140=head1 CONFORMING TO
141
142RFC 2104
143
144=head1 SEE ALSO
145
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +0200146L<SHA1(3)>, EVP_Q_mac(3), L<evp(7)>
Ulf Möller9dbc41d2000-02-03 18:22:01 +0000147
148=head1 HISTORY
149
Dr. David von Oheimb0a8a6af2021-03-29 19:42:33 +0200150All functions except for HMAC() were deprecated in OpenSSL 3.0.
Paulidbde4722020-01-14 12:11:50 +1000151
Rich Salze90fc052017-07-15 09:39:45 -0400152HMAC_CTX_init() was replaced with HMAC_CTX_reset() in OpenSSL 1.1.0.
Richard Levitte716854d2015-11-30 23:43:59 +0100153
Rich Salze90fc052017-07-15 09:39:45 -0400154HMAC_CTX_cleanup() existed in OpenSSL before version 1.1.0.
Richard Levitte716854d2015-11-30 23:43:59 +0100155
Rich Salze90fc052017-07-15 09:39:45 -0400156HMAC_CTX_new(), HMAC_CTX_free() and HMAC_CTX_get_md() are new in OpenSSL 1.1.0.
Richard Levitte9b6c0072015-11-27 14:19:27 +0100157
Dr. Stephen Henson87d52462008-11-02 16:00:39 +0000158HMAC_Init_ex(), HMAC_Update() and HMAC_Final() did not return values in
Rich Salze90fc052017-07-15 09:39:45 -0400159OpenSSL before version 1.0.0.
Dr. Stephen Henson87d52462008-11-02 16:00:39 +0000160
Rich Salze2f92612016-05-18 11:44:05 -0400161=head1 COPYRIGHT
162
Matt Caswell0789c7d2021-05-20 14:22:33 +0100163Copyright 2000-2021 The OpenSSL Project Authors. All Rights Reserved.
Rich Salze2f92612016-05-18 11:44:05 -0400164
Richard Levitte4746f252018-12-06 14:04:44 +0100165Licensed under the Apache License 2.0 (the "License"). You may not use
Rich Salze2f92612016-05-18 11:44:05 -0400166this file except in compliance with the License. You can obtain a copy
167in the file LICENSE in the source distribution or at
168L<https://www.openssl.org/source/license.html>.
169
170=cut