summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man3pm/Digest::SHA.3pm
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/mageia-cauldron/man3pm/Digest::SHA.3pm')
-rw-r--r--upstream/mageia-cauldron/man3pm/Digest::SHA.3pm653
1 files changed, 653 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/Digest::SHA.3pm b/upstream/mageia-cauldron/man3pm/Digest::SHA.3pm
new file mode 100644
index 00000000..7cf26609
--- /dev/null
+++ b/upstream/mageia-cauldron/man3pm/Digest::SHA.3pm
@@ -0,0 +1,653 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "Digest::SHA 3pm"
+.TH Digest::SHA 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+Digest::SHA \- Perl extension for SHA\-1/224/256/384/512
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+In programs:
+.PP
+.Vb 1
+\& # Functional interface
+\&
+\& use Digest::SHA qw(sha1 sha1_hex sha1_base64 ...);
+\&
+\& $digest = sha1($data);
+\& $digest = sha1_hex($data);
+\& $digest = sha1_base64($data);
+\&
+\& $digest = sha256($data);
+\& $digest = sha384_hex($data);
+\& $digest = sha512_base64($data);
+\&
+\& # Object\-oriented
+\&
+\& use Digest::SHA;
+\&
+\& $sha = Digest::SHA\->new($alg);
+\&
+\& $sha\->add($data); # feed data into stream
+\&
+\& $sha\->addfile(*F);
+\& $sha\->addfile($filename);
+\&
+\& $sha\->add_bits($bits);
+\& $sha\->add_bits($data, $nbits);
+\&
+\& $sha_copy = $sha\->clone; # make copy of digest object
+\& $state = $sha\->getstate; # save current state to string
+\& $sha\->putstate($state); # restore previous $state
+\&
+\& $digest = $sha\->digest; # compute digest
+\& $digest = $sha\->hexdigest;
+\& $digest = $sha\->b64digest;
+.Ve
+.PP
+From the command line:
+.PP
+.Vb 1
+\& $ shasum files
+\&
+\& $ shasum \-\-help
+.Ve
+.SH "SYNOPSIS (HMAC-SHA)"
+.IX Header "SYNOPSIS (HMAC-SHA)"
+.Vb 1
+\& # Functional interface only
+\&
+\& use Digest::SHA qw(hmac_sha1 hmac_sha1_hex ...);
+\&
+\& $digest = hmac_sha1($data, $key);
+\& $digest = hmac_sha224_hex($data, $key);
+\& $digest = hmac_sha256_base64($data, $key);
+.Ve
+.SH ABSTRACT
+.IX Header "ABSTRACT"
+Digest::SHA is a complete implementation of the NIST Secure Hash Standard.
+It gives Perl programmers a convenient way to calculate SHA\-1, SHA\-224,
+SHA\-256, SHA\-384, SHA\-512, SHA\-512/224, and SHA\-512/256 message digests.
+The module can handle all types of input, including partial-byte data.
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+Digest::SHA is written in C for speed. If your platform lacks a
+C compiler, you can install the functionally equivalent (but much
+slower) Digest::SHA::PurePerl module.
+.PP
+The programming interface is easy to use: it's the same one found
+in CPAN's Digest module. So, if your applications currently
+use Digest::MD5 and you'd prefer the stronger security of SHA,
+it's a simple matter to convert them.
+.PP
+The interface provides two ways to calculate digests: all-at-once,
+or in stages. To illustrate, the following short program computes
+the SHA\-256 digest of "hello world" using each approach:
+.PP
+.Vb 1
+\& use Digest::SHA qw(sha256_hex);
+\&
+\& $data = "hello world";
+\& @frags = split(//, $data);
+\&
+\& # all\-at\-once (Functional style)
+\& $digest1 = sha256_hex($data);
+\&
+\& # in\-stages (OOP style)
+\& $state = Digest::SHA\->new(256);
+\& for (@frags) { $state\->add($_) }
+\& $digest2 = $state\->hexdigest;
+\&
+\& print $digest1 eq $digest2 ?
+\& "whew!\en" : "oops!\en";
+.Ve
+.PP
+To calculate the digest of an n\-bit message where \fIn\fR is not a
+multiple of 8, use the \fR\f(BIadd_bits()\fR\fI\fR method. For example, consider
+the 446\-bit message consisting of the bit-string "110" repeated
+148 times, followed by "11". Here's how to display its SHA\-1
+digest:
+.PP
+.Vb 4
+\& use Digest::SHA;
+\& $bits = "110" x 148 . "11";
+\& $sha = Digest::SHA\->new(1)\->add_bits($bits);
+\& print $sha\->hexdigest, "\en";
+.Ve
+.PP
+Note that for larger bit-strings, it's more efficient to use the
+two-argument version \fIadd_bits($data, \fR\f(CI$nbits\fR\fI)\fR, where \fR\f(CI$data\fR\fI\fR is
+in the customary packed binary format used for Perl strings.
+.PP
+The module also lets you save intermediate SHA states to a string. The
+\&\fR\f(BIgetstate()\fR\fI\fR method generates portable, human-readable text describing
+the current state of computation. You can subsequently restore that
+state with \fI\fR\f(BIputstate()\fR\fI\fR to resume where the calculation left off.
+.PP
+To see what a state description looks like, just run the following:
+.PP
+.Vb 2
+\& use Digest::SHA;
+\& print Digest::SHA\->new\->add("Shaw" x 1962)\->getstate;
+.Ve
+.PP
+As an added convenience, the Digest::SHA module offers routines to
+calculate keyed hashes using the HMAC\-SHA\-1/224/256/384/512
+algorithms. These services exist in functional form only, and
+mimic the style and behavior of the \fR\f(BIsha()\fR\fI\fR, \fI\fR\f(BIsha_hex()\fR\fI\fR, and
+\&\fI\fR\f(BIsha_base64()\fR\fI\fR functions.
+.PP
+.Vb 1
+\& # Test vector from draft\-ietf\-ipsec\-ciph\-sha\-256\-01.txt
+\&
+\& use Digest::SHA qw(hmac_sha256_hex);
+\& print hmac_sha256_hex("Hi There", chr(0x0b) x 32), "\en";
+.Ve
+.SH "UNICODE AND SIDE EFFECTS"
+.IX Header "UNICODE AND SIDE EFFECTS"
+Perl supports Unicode strings as of version 5.6. Such strings may
+contain wide characters, namely, characters whose ordinal values are
+greater than 255. This can cause problems for digest algorithms such
+as SHA that are specified to operate on sequences of bytes.
+.PP
+The rule by which Digest::SHA handles a Unicode string is easy
+to state, but potentially confusing to grasp: the string is interpreted
+as a sequence of byte values, where each byte value is equal to the
+ordinal value (viz. code point) of its corresponding Unicode character.
+That way, the Unicode string 'abc' has exactly the same digest value as
+the ordinary string 'abc'.
+.PP
+Since a wide character does not fit into a byte, the Digest::SHA
+routines croak if they encounter one. Whereas if a Unicode string
+contains no wide characters, the module accepts it quite happily.
+The following code illustrates the two cases:
+.PP
+.Vb 2
+\& $str1 = pack(\*(AqU*\*(Aq, (0..255));
+\& print sha1_hex($str1); # ok
+\&
+\& $str2 = pack(\*(AqU*\*(Aq, (0..256));
+\& print sha1_hex($str2); # croaks
+.Ve
+.PP
+Be aware that the digest routines silently convert UTF\-8 input into its
+equivalent byte sequence in the native encoding (cf. utf8::downgrade).
+This side effect influences only the way Perl stores the data internally,
+but otherwise leaves the actual value of the data intact.
+.SH "NIST STATEMENT ON SHA\-1"
+.IX Header "NIST STATEMENT ON SHA-1"
+NIST acknowledges that the work of Prof. Xiaoyun Wang constitutes a
+practical collision attack on SHA\-1. Therefore, NIST encourages the
+rapid adoption of the SHA\-2 hash functions (e.g. SHA\-256) for applications
+requiring strong collision resistance, such as digital signatures.
+.PP
+ref. <http://csrc.nist.gov/groups/ST/hash/statement.html>
+.SH "PADDING OF BASE64 DIGESTS"
+.IX Header "PADDING OF BASE64 DIGESTS"
+By convention, CPAN Digest modules do \fBnot\fR pad their Base64 output.
+Problems can occur when feeding such digests to other software that
+expects properly padded Base64 encodings.
+.PP
+For the time being, any necessary padding must be done by the user.
+Fortunately, this is a simple operation: if the length of a Base64\-encoded
+digest isn't a multiple of 4, simply append "=" characters to the end
+of the digest until it is:
+.PP
+.Vb 3
+\& while (length($b64_digest) % 4) {
+\& $b64_digest .= \*(Aq=\*(Aq;
+\& }
+.Ve
+.PP
+To illustrate, \fIsha256_base64("abc")\fR is computed to be
+.PP
+.Vb 1
+\& ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0
+.Ve
+.PP
+which has a length of 43. So, the properly padded version is
+.PP
+.Vb 1
+\& ungWv48Bz+pBQUDeXa4iI7ADYaOWF3qctBD/YfIAFa0=
+.Ve
+.SH EXPORT
+.IX Header "EXPORT"
+None by default.
+.SH "EXPORTABLE FUNCTIONS"
+.IX Header "EXPORTABLE FUNCTIONS"
+Provided your C compiler supports a 64\-bit type (e.g. the \fIlong
+long\fR of C99, or \fI_\|_int64\fR used by Microsoft C/C++), all of these
+functions will be available for use. Otherwise, you won't be able
+to perform the SHA\-384 and SHA\-512 transforms, both of which require
+64\-bit operations.
+.PP
+\&\fIFunctional style\fR
+.IP "\fBsha1($data, ...)\fR" 4
+.IX Item "sha1($data, ...)"
+.PD 0
+.IP "\fBsha224($data, ...)\fR" 4
+.IX Item "sha224($data, ...)"
+.IP "\fBsha256($data, ...)\fR" 4
+.IX Item "sha256($data, ...)"
+.IP "\fBsha384($data, ...)\fR" 4
+.IX Item "sha384($data, ...)"
+.IP "\fBsha512($data, ...)\fR" 4
+.IX Item "sha512($data, ...)"
+.IP "\fBsha512224($data, ...)\fR" 4
+.IX Item "sha512224($data, ...)"
+.IP "\fBsha512256($data, ...)\fR" 4
+.IX Item "sha512256($data, ...)"
+.PD
+Logically joins the arguments into a single string, and returns
+its SHA\-1/224/256/384/512 digest encoded as a binary string.
+.IP "\fBsha1_hex($data, ...)\fR" 4
+.IX Item "sha1_hex($data, ...)"
+.PD 0
+.IP "\fBsha224_hex($data, ...)\fR" 4
+.IX Item "sha224_hex($data, ...)"
+.IP "\fBsha256_hex($data, ...)\fR" 4
+.IX Item "sha256_hex($data, ...)"
+.IP "\fBsha384_hex($data, ...)\fR" 4
+.IX Item "sha384_hex($data, ...)"
+.IP "\fBsha512_hex($data, ...)\fR" 4
+.IX Item "sha512_hex($data, ...)"
+.IP "\fBsha512224_hex($data, ...)\fR" 4
+.IX Item "sha512224_hex($data, ...)"
+.IP "\fBsha512256_hex($data, ...)\fR" 4
+.IX Item "sha512256_hex($data, ...)"
+.PD
+Logically joins the arguments into a single string, and returns
+its SHA\-1/224/256/384/512 digest encoded as a hexadecimal string.
+.IP "\fBsha1_base64($data, ...)\fR" 4
+.IX Item "sha1_base64($data, ...)"
+.PD 0
+.IP "\fBsha224_base64($data, ...)\fR" 4
+.IX Item "sha224_base64($data, ...)"
+.IP "\fBsha256_base64($data, ...)\fR" 4
+.IX Item "sha256_base64($data, ...)"
+.IP "\fBsha384_base64($data, ...)\fR" 4
+.IX Item "sha384_base64($data, ...)"
+.IP "\fBsha512_base64($data, ...)\fR" 4
+.IX Item "sha512_base64($data, ...)"
+.IP "\fBsha512224_base64($data, ...)\fR" 4
+.IX Item "sha512224_base64($data, ...)"
+.IP "\fBsha512256_base64($data, ...)\fR" 4
+.IX Item "sha512256_base64($data, ...)"
+.PD
+Logically joins the arguments into a single string, and returns
+its SHA\-1/224/256/384/512 digest encoded as a Base64 string.
+.Sp
+It's important to note that the resulting string does \fBnot\fR contain
+the padding characters typical of Base64 encodings. This omission is
+deliberate, and is done to maintain compatibility with the family of
+CPAN Digest modules. See "PADDING OF BASE64 DIGESTS" for details.
+.PP
+\&\fIOOP style\fR
+.IP \fBnew($alg)\fR 4
+.IX Item "new($alg)"
+Returns a new Digest::SHA object. Allowed values for \fR\f(CI$alg\fR\fI\fR are 1,
+224, 256, 384, 512, 512224, or 512256. It's also possible to use
+common string representations of the algorithm (e.g. "sha256",
+"SHA\-384"). If the argument is missing, SHA\-1 will be used by
+default.
+.Sp
+Invoking \fInew\fR as an instance method will reset the object to the
+initial state associated with \fR\f(CI$alg\fR\fI\fR. If the argument is missing,
+the object will continue using the same algorithm that was selected
+at creation.
+.IP \fBreset($alg)\fR 4
+.IX Item "reset($alg)"
+This method has exactly the same effect as \fInew($alg)\fR. In fact,
+\&\fIreset\fR is just an alias for \fInew\fR.
+.IP \fBhashsize\fR 4
+.IX Item "hashsize"
+Returns the number of digest bits for this object. The values are
+160, 224, 256, 384, 512, 224, and 256 for SHA\-1, SHA\-224, SHA\-256,
+SHA\-384, SHA\-512, SHA\-512/224 and SHA\-512/256, respectively.
+.IP \fBalgorithm\fR 4
+.IX Item "algorithm"
+Returns the digest algorithm for this object. The values are 1,
+224, 256, 384, 512, 512224, and 512256 for SHA\-1, SHA\-224, SHA\-256,
+SHA\-384, SHA\-512, SHA\-512/224, and SHA\-512/256, respectively.
+.IP \fBclone\fR 4
+.IX Item "clone"
+Returns a duplicate copy of the object.
+.IP "\fBadd($data, ...)\fR" 4
+.IX Item "add($data, ...)"
+Logically joins the arguments into a single string, and uses it to
+update the current digest state. In other words, the following
+statements have the same effect:
+.Sp
+.Vb 4
+\& $sha\->add("a"); $sha\->add("b"); $sha\->add("c");
+\& $sha\->add("a")\->add("b")\->add("c");
+\& $sha\->add("a", "b", "c");
+\& $sha\->add("abc");
+.Ve
+.Sp
+The return value is the updated object itself.
+.ie n .IP "\fBadd_bits($data, \fR\fB$nbits\fR\fB)\fR" 4
+.el .IP "\fBadd_bits($data, \fR\f(CB$nbits\fR\fB)\fR" 4
+.IX Item "add_bits($data, $nbits)"
+.PD 0
+.IP \fBadd_bits($bits)\fR 4
+.IX Item "add_bits($bits)"
+.PD
+Updates the current digest state by appending bits to it. The
+return value is the updated object itself.
+.Sp
+The first form causes the most-significant \fR\f(CI$nbits\fR\fI\fR of \fI\fR\f(CI$data\fR\fI\fR
+to be appended to the stream. The \fI\fR\f(CI$data\fR\fI\fR argument is in the
+customary binary format used for Perl strings.
+.Sp
+The second form takes an ASCII string of "0" and "1" characters as
+its argument. It's equivalent to
+.Sp
+.Vb 1
+\& $sha\->add_bits(pack("B*", $bits), length($bits));
+.Ve
+.Sp
+So, the following two statements do the same thing:
+.Sp
+.Vb 2
+\& $sha\->add_bits("111100001010");
+\& $sha\->add_bits("\exF0\exA0", 12);
+.Ve
+.Sp
+Note that SHA\-1 and SHA\-2 use \fImost-significant-bit ordering\fR
+for their internal state. This means that
+.Sp
+.Vb 1
+\& $sha3\->add_bits("110");
+.Ve
+.Sp
+is equivalent to
+.Sp
+.Vb 1
+\& $sha3\->add_bits("1")\->add_bits("1")\->add_bits("0");
+.Ve
+.IP \fBaddfile(*FILE)\fR 4
+.IX Item "addfile(*FILE)"
+Reads from \fIFILE\fR until EOF, and appends that data to the current
+state. The return value is the updated object itself.
+.ie n .IP "\fBaddfile($filename [, \fR\fB$mode\fR\fB])\fR" 4
+.el .IP "\fBaddfile($filename [, \fR\f(CB$mode\fR\fB])\fR" 4
+.IX Item "addfile($filename [, $mode])"
+Reads the contents of \fR\f(CI$filename\fR\fI\fR, and appends that data to the current
+state. The return value is the updated object itself.
+.Sp
+By default, \fR\f(CI$filename\fR\fI\fR is simply opened and read; no special modes
+or I/O disciplines are used. To change this, set the optional \fI\fR\f(CI$mode\fR\fI\fR
+argument to one of the following values:
+.Sp
+.Vb 1
+\& "b" read file in binary mode
+\&
+\& "U" use universal newlines
+\&
+\& "0" use BITS mode
+.Ve
+.Sp
+The "U" mode is modeled on Python's "Universal Newlines" concept, whereby
+DOS and Mac OS line terminators are converted internally to UNIX newlines
+before processing. This ensures consistent digest values when working
+simultaneously across multiple file systems. \fBThe "U" mode influences
+only text files\fR, namely those passing Perl's \fI\-T\fR test; binary files
+are processed with no translation whatsoever.
+.Sp
+The BITS mode ("0") interprets the contents of \fR\f(CI$filename\fR\fI\fR as a logical
+stream of bits, where each ASCII '0' or '1' character represents a 0 or
+1 bit, respectively. All other characters are ignored. This provides
+a convenient way to calculate the digest values of partial-byte data
+by using files, rather than having to write separate programs employing
+the \fIadd_bits\fR method.
+.IP \fBgetstate\fR 4
+.IX Item "getstate"
+Returns a string containing a portable, human-readable representation
+of the current SHA state.
+.IP \fBputstate($str)\fR 4
+.IX Item "putstate($str)"
+Returns a Digest::SHA object representing the SHA state contained
+in \fR\f(CI$str\fR\fI\fR. The format of \fI\fR\f(CI$str\fR\fI\fR matches the format of the output
+produced by method \fIgetstate\fR. If called as a class method, a new
+object is created; if called as an instance method, the object is reset
+to the state contained in \fI\fR\f(CI$str\fR\fI\fR.
+.IP \fBdump($filename)\fR 4
+.IX Item "dump($filename)"
+Writes the output of \fIgetstate\fR to \fR\f(CI$filename\fR\fI\fR. If the argument is
+missing, or equal to the empty string, the state information will be
+written to STDOUT.
+.IP \fBload($filename)\fR 4
+.IX Item "load($filename)"
+Returns a Digest::SHA object that results from calling \fIputstate\fR on
+the contents of \fR\f(CI$filename\fR\fI\fR. If the argument is missing, or equal to
+the empty string, the state information will be read from STDIN.
+.IP \fBdigest\fR 4
+.IX Item "digest"
+Returns the digest encoded as a binary string.
+.Sp
+Note that the \fIdigest\fR method is a read-once operation. Once it
+has been performed, the Digest::SHA object is automatically reset
+in preparation for calculating another digest value. Call
+\&\fR\f(CI$sha\fR\fI\->clone\->digest\fR if it's necessary to preserve the
+original digest state.
+.IP \fBhexdigest\fR 4
+.IX Item "hexdigest"
+Returns the digest encoded as a hexadecimal string.
+.Sp
+Like \fIdigest\fR, this method is a read-once operation. Call
+\&\fR\f(CI$sha\fR\fI\->clone\->hexdigest\fR if it's necessary to preserve
+the original digest state.
+.IP \fBb64digest\fR 4
+.IX Item "b64digest"
+Returns the digest encoded as a Base64 string.
+.Sp
+Like \fIdigest\fR, this method is a read-once operation. Call
+\&\fR\f(CI$sha\fR\fI\->clone\->b64digest\fR if it's necessary to preserve
+the original digest state.
+.Sp
+It's important to note that the resulting string does \fBnot\fR contain
+the padding characters typical of Base64 encodings. This omission is
+deliberate, and is done to maintain compatibility with the family of
+CPAN Digest modules. See "PADDING OF BASE64 DIGESTS" for details.
+.PP
+\&\fIHMAC\-SHA\-1/224/256/384/512\fR
+.ie n .IP "\fBhmac_sha1($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha1($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha1($data, $key)"
+.PD 0
+.ie n .IP "\fBhmac_sha224($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha224($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha224($data, $key)"
+.ie n .IP "\fBhmac_sha256($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha256($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha256($data, $key)"
+.ie n .IP "\fBhmac_sha384($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha384($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha384($data, $key)"
+.ie n .IP "\fBhmac_sha512($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512($data, $key)"
+.ie n .IP "\fBhmac_sha512224($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512224($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512224($data, $key)"
+.ie n .IP "\fBhmac_sha512256($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512256($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512256($data, $key)"
+.PD
+Returns the HMAC\-SHA\-1/224/256/384/512 digest of \fR\f(CI$data\fR\fI\fR/\fI\fR\f(CI$key\fR\fI\fR,
+with the result encoded as a binary string. Multiple \fI\fR\f(CI$data\fR\fI\fR
+arguments are allowed, provided that \fI\fR\f(CI$key\fR\fI\fR is the last argument
+in the list.
+.ie n .IP "\fBhmac_sha1_hex($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha1_hex($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha1_hex($data, $key)"
+.PD 0
+.ie n .IP "\fBhmac_sha224_hex($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha224_hex($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha224_hex($data, $key)"
+.ie n .IP "\fBhmac_sha256_hex($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha256_hex($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha256_hex($data, $key)"
+.ie n .IP "\fBhmac_sha384_hex($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha384_hex($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha384_hex($data, $key)"
+.ie n .IP "\fBhmac_sha512_hex($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512_hex($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512_hex($data, $key)"
+.ie n .IP "\fBhmac_sha512224_hex($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512224_hex($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512224_hex($data, $key)"
+.ie n .IP "\fBhmac_sha512256_hex($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512256_hex($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512256_hex($data, $key)"
+.PD
+Returns the HMAC\-SHA\-1/224/256/384/512 digest of \fR\f(CI$data\fR\fI\fR/\fI\fR\f(CI$key\fR\fI\fR,
+with the result encoded as a hexadecimal string. Multiple \fI\fR\f(CI$data\fR\fI\fR
+arguments are allowed, provided that \fI\fR\f(CI$key\fR\fI\fR is the last argument
+in the list.
+.ie n .IP "\fBhmac_sha1_base64($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha1_base64($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha1_base64($data, $key)"
+.PD 0
+.ie n .IP "\fBhmac_sha224_base64($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha224_base64($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha224_base64($data, $key)"
+.ie n .IP "\fBhmac_sha256_base64($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha256_base64($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha256_base64($data, $key)"
+.ie n .IP "\fBhmac_sha384_base64($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha384_base64($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha384_base64($data, $key)"
+.ie n .IP "\fBhmac_sha512_base64($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512_base64($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512_base64($data, $key)"
+.ie n .IP "\fBhmac_sha512224_base64($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512224_base64($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512224_base64($data, $key)"
+.ie n .IP "\fBhmac_sha512256_base64($data, \fR\fB$key\fR\fB)\fR" 4
+.el .IP "\fBhmac_sha512256_base64($data, \fR\f(CB$key\fR\fB)\fR" 4
+.IX Item "hmac_sha512256_base64($data, $key)"
+.PD
+Returns the HMAC\-SHA\-1/224/256/384/512 digest of \fR\f(CI$data\fR\fI\fR/\fI\fR\f(CI$key\fR\fI\fR,
+with the result encoded as a Base64 string. Multiple \fI\fR\f(CI$data\fR\fI\fR
+arguments are allowed, provided that \fI\fR\f(CI$key\fR\fI\fR is the last argument
+in the list.
+.Sp
+It's important to note that the resulting string does \fBnot\fR contain
+the padding characters typical of Base64 encodings. This omission is
+deliberate, and is done to maintain compatibility with the family of
+CPAN Digest modules. See "PADDING OF BASE64 DIGESTS" for details.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+Digest, Digest::SHA::PurePerl
+.PP
+The Secure Hash Standard (Draft FIPS PUB 180\-4) can be found at:
+.PP
+<http://csrc.nist.gov/publications/drafts/fips180\-4/Draft\-FIPS180\-4_Feb2011.pdf>
+.PP
+The Keyed-Hash Message Authentication Code (HMAC):
+.PP
+<http://csrc.nist.gov/publications/fips/fips198/fips\-198a.pdf>
+.SH AUTHOR
+.IX Header "AUTHOR"
+.Vb 1
+\& Mark Shelor <mshelor@cpan.org>
+.Ve
+.SH ACKNOWLEDGMENTS
+.IX Header "ACKNOWLEDGMENTS"
+The author is particularly grateful to
+.PP
+.Vb 10
+\& Gisle Aas
+\& H. Merijn Brand
+\& Sean Burke
+\& Chris Carey
+\& Alexandr Ciornii
+\& Chris David
+\& Jim Doble
+\& Thomas Drugeon
+\& Julius Duque
+\& Jeffrey Friedl
+\& Robert Gilmour
+\& Brian Gladman
+\& Jarkko Hietaniemi
+\& Adam Kennedy
+\& Mark Lawrence
+\& Andy Lester
+\& Alex Muntada
+\& Steve Peters
+\& Chris Skiscim
+\& Martin Thurn
+\& Gunnar Wolf
+\& Adam Woodbury
+.Ve
+.PP
+"who by trained skill rescued life from such great billows and such thick
+darkness and moored it in so perfect a calm and in so brilliant a light"
+\&\- Lucretius
+.SH "COPYRIGHT AND LICENSE"
+.IX Header "COPYRIGHT AND LICENSE"
+Copyright (C) 2003\-2022 Mark Shelor
+.PP
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.
+.PP
+perlartistic