diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
commit | fc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch) | |
tree | ce1e3bce06471410239a6f41282e328770aa404a /upstream/archlinux/man3/Digest::MD5.3perl | |
parent | Initial commit. (diff) | |
download | manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip |
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/archlinux/man3/Digest::MD5.3perl')
-rw-r--r-- | upstream/archlinux/man3/Digest::MD5.3perl | 401 |
1 files changed, 401 insertions, 0 deletions
diff --git a/upstream/archlinux/man3/Digest::MD5.3perl b/upstream/archlinux/man3/Digest::MD5.3perl new file mode 100644 index 00000000..993bef41 --- /dev/null +++ b/upstream/archlinux/man3/Digest::MD5.3perl @@ -0,0 +1,401 @@ +.\" -*- 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::MD5 3perl" +.TH Digest::MD5 3perl 2024-02-11 "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::MD5 \- Perl interface to the MD5 Algorithm +.SH SYNOPSIS +.IX Header "SYNOPSIS" +.Vb 2 +\& # Functional style +\& use Digest::MD5 qw(md5 md5_hex md5_base64); +\& +\& $digest = md5($data); +\& $digest = md5_hex($data); +\& $digest = md5_base64($data); +\& +\& # OO style +\& use Digest::MD5; +\& +\& $ctx = Digest::MD5\->new; +\& +\& $ctx\->add($data); +\& $ctx\->addfile($file_handle); +\& +\& $digest = $ctx\->digest; +\& $digest = $ctx\->hexdigest; +\& $digest = $ctx\->b64digest; +.Ve +.SH DESCRIPTION +.IX Header "DESCRIPTION" +The \f(CW\*(C`Digest::MD5\*(C'\fR module allows you to use the RSA Data Security +Inc. MD5 Message Digest algorithm from within Perl programs. The +algorithm takes as input a message of arbitrary length and produces as +output a 128\-bit "fingerprint" or "message digest" of the input. +.PP +Note that the MD5 algorithm is not as strong as it used to be. It has +since 2005 been easy to generate different messages that produce the +same MD5 digest. It still seems hard to generate messages that +produce a given digest, but it is probably wise to move to stronger +algorithms for applications that depend on the digest to uniquely identify +a message. +.PP +The \f(CW\*(C`Digest::MD5\*(C'\fR module provide a procedural interface for simple +use, as well as an object oriented interface that can handle messages +of arbitrary length and which can read files directly. +.SH FUNCTIONS +.IX Header "FUNCTIONS" +The following functions are provided by the \f(CW\*(C`Digest::MD5\*(C'\fR module. +None of these functions are exported by default. +.IP md5($data,...) 4 +.IX Item "md5($data,...)" +This function will concatenate all arguments, calculate the MD5 digest +of this "message", and return it in binary form. The returned string +will be 16 bytes long. +.Sp +The result of md5("a", "b", "c") will be exactly the same as the +result of md5("abc"). +.IP md5_hex($data,...) 4 +.IX Item "md5_hex($data,...)" +Same as \fBmd5()\fR, but will return the digest in hexadecimal form. The +length of the returned string will be 32 and it will only contain +characters from this set: '0'..'9' and 'a'..'f'. +.IP md5_base64($data,...) 4 +.IX Item "md5_base64($data,...)" +Same as \fBmd5()\fR, but will return the digest as a base64 encoded string. +The length of the returned string will be 22 and it will only contain +characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' and +\&'/'. +.Sp +Note that the base64 encoded string returned is not padded to be a +multiple of 4 bytes long. If you want interoperability with other +base64 encoded md5 digests you might want to append the redundant +string "==" to the result. +.SH METHODS +.IX Header "METHODS" +The object oriented interface to \f(CW\*(C`Digest::MD5\*(C'\fR is described in this +section. After a \f(CW\*(C`Digest::MD5\*(C'\fR object has been created, you will add +data to it and finally ask for the digest in a suitable format. A +single object can be used to calculate multiple digests. +.PP +The following methods are provided: +.ie n .IP "$md5 = Digest::MD5\->new" 4 +.el .IP "\f(CW$md5\fR = Digest::MD5\->new" 4 +.IX Item "$md5 = Digest::MD5->new" +The constructor returns a new \f(CW\*(C`Digest::MD5\*(C'\fR object which encapsulate +the state of the MD5 message-digest algorithm. +.Sp +If called as an instance method (i.e. \f(CW$md5\fR\->new) it will just reset the +state the object to the state of a newly created object. No new +object is created in this case. +.ie n .IP $md5\->reset 4 +.el .IP \f(CW$md5\fR\->reset 4 +.IX Item "$md5->reset" +This is just an alias for \f(CW$md5\fR\->new. +.ie n .IP $md5\->clone 4 +.el .IP \f(CW$md5\fR\->clone 4 +.IX Item "$md5->clone" +This a copy of the \f(CW$md5\fR object. It is useful when you do not want to +destroy the digests state, but need an intermediate value of the +digest, e.g. when calculating digests iteratively on a continuous data +stream. Example: +.Sp +.Vb 5 +\& my $md5 = Digest::MD5\->new; +\& while (<>) { +\& $md5\->add($_); +\& print "Line $.: ", $md5\->clone\->hexdigest, "\en"; +\& } +.Ve +.ie n .IP $md5\->add($data,...) 4 +.el .IP \f(CW$md5\fR\->add($data,...) 4 +.IX Item "$md5->add($data,...)" +The \f(CW$data\fR provided as argument are appended to the message we +calculate the digest for. The return value is the \f(CW$md5\fR object itself. +.Sp +All these lines will have the same effect on the state of the \f(CW$md5\fR +object: +.Sp +.Vb 4 +\& $md5\->add("a"); $md5\->add("b"); $md5\->add("c"); +\& $md5\->add("a")\->add("b")\->add("c"); +\& $md5\->add("a", "b", "c"); +\& $md5\->add("abc"); +.Ve +.ie n .IP $md5\->addfile($io_handle) 4 +.el .IP \f(CW$md5\fR\->addfile($io_handle) 4 +.IX Item "$md5->addfile($io_handle)" +The \f(CW$io_handle\fR will be read until EOF and its content appended to the +message we calculate the digest for. The return value is the \f(CW$md5\fR +object itself. +.Sp +The \fBaddfile()\fR method will \fBcroak()\fR if it fails reading data for some +reason. If it croaks it is unpredictable what the state of the \f(CW$md5\fR +object will be in. The \fBaddfile()\fR method might have been able to read +the file partially before it failed. It is probably wise to discard +or reset the \f(CW$md5\fR object if this occurs. +.Sp +In most cases you want to make sure that the \f(CW$io_handle\fR is in +\&\f(CW\*(C`binmode\*(C'\fR before you pass it as argument to the \fBaddfile()\fR method. +.ie n .IP "$md5\->add_bits($data, $nbits)" 4 +.el .IP "\f(CW$md5\fR\->add_bits($data, \f(CW$nbits\fR)" 4 +.IX Item "$md5->add_bits($data, $nbits)" +.PD 0 +.ie n .IP $md5\->add_bits($bitstring) 4 +.el .IP \f(CW$md5\fR\->add_bits($bitstring) 4 +.IX Item "$md5->add_bits($bitstring)" +.PD +Since the MD5 algorithm is byte oriented you might only add bits as +multiples of 8, so you probably want to just use \fBadd()\fR instead. The +\&\fBadd_bits()\fR method is provided for compatibility with other digest +implementations. See Digest for description of the arguments +that \fBadd_bits()\fR take. +.ie n .IP $md5\->digest 4 +.el .IP \f(CW$md5\fR\->digest 4 +.IX Item "$md5->digest" +Return the binary digest for the message. The returned string will be +16 bytes long. +.Sp +Note that the \f(CW\*(C`digest\*(C'\fR operation is effectively a destructive, +read-once operation. Once it has been performed, the \f(CW\*(C`Digest::MD5\*(C'\fR +object is automatically \f(CW\*(C`reset\*(C'\fR and can be used to calculate another +digest value. Call \f(CW$md5\fR\->clone\->digest if you want to calculate the +digest without resetting the digest state. +.ie n .IP $md5\->hexdigest 4 +.el .IP \f(CW$md5\fR\->hexdigest 4 +.IX Item "$md5->hexdigest" +Same as \f(CW$md5\fR\->digest, but will return the digest in hexadecimal +form. The length of the returned string will be 32 and it will only +contain characters from this set: '0'..'9' and 'a'..'f'. +.ie n .IP $md5\->b64digest 4 +.el .IP \f(CW$md5\fR\->b64digest 4 +.IX Item "$md5->b64digest" +Same as \f(CW$md5\fR\->digest, but will return the digest as a base64 encoded +string. The length of the returned string will be 22 and it will only +contain characters from this set: 'A'..'Z', 'a'..'z', '0'..'9', '+' +and '/'. +.Sp +The base64 encoded string returned is not padded to be a multiple of 4 +bytes long. If you want interoperability with other base64 encoded +md5 digests you might want to append the string "==" to the result. +.ie n .IP "@ctx = $md5\->context" 4 +.el .IP "\f(CW@ctx\fR = \f(CW$md5\fR\->context" 4 +.IX Item "@ctx = $md5->context" +.PD 0 +.ie n .IP $md5\->context(@ctx) 4 +.el .IP \f(CW$md5\fR\->context(@ctx) 4 +.IX Item "$md5->context(@ctx)" +.PD +Saves or restores the internal state. +When called with no arguments, returns a list: +number of blocks processed, +a 16\-byte internal state buffer, +then optionally up to 63 bytes of unprocessed data if there are any. +When passed those same arguments, restores the state. +This is only useful for specialised operations. +.SH EXAMPLES +.IX Header "EXAMPLES" +The simplest way to use this library is to import the \fBmd5_hex()\fR +function (or one of its cousins): +.PP +.Vb 2 +\& use Digest::MD5 qw(md5_hex); +\& print "Digest is ", md5_hex("foobarbaz"), "\en"; +.Ve +.PP +The above example would print out the message: +.PP +.Vb 1 +\& Digest is 6df23dc03f9b54cc38a0fc1483df6e21 +.Ve +.PP +The same checksum can also be calculated in OO style: +.PP +.Vb 1 +\& use Digest::MD5; +\& +\& $md5 = Digest::MD5\->new; +\& $md5\->add(\*(Aqfoo\*(Aq, \*(Aqbar\*(Aq); +\& $md5\->add(\*(Aqbaz\*(Aq); +\& $digest = $md5\->hexdigest; +\& +\& print "Digest is $digest\en"; +.Ve +.PP +With OO style, you can break the message arbitrarily. This means that we +are no longer limited to have space for the whole message in memory, i.e. +we can handle messages of any size. +.PP +This is useful when calculating checksum for files: +.PP +.Vb 1 +\& use Digest::MD5; +\& +\& my $filename = shift || "/etc/passwd"; +\& open (my $fh, \*(Aq<\*(Aq, $filename) or die "Can\*(Aqt open \*(Aq$filename\*(Aq: $!"; +\& binmode($fh); +\& +\& $md5 = Digest::MD5\->new; +\& while (<$fh>) { +\& $md5\->add($_); +\& } +\& close($fh); +\& print $md5\->b64digest, " $filename\en"; +.Ve +.PP +Or we can use the addfile method for more efficient reading of +the file: +.PP +.Vb 1 +\& use Digest::MD5; +\& +\& my $filename = shift || "/etc/passwd"; +\& open (my $fh, \*(Aq<\*(Aq, $filename) or die "Can\*(Aqt open \*(Aq$filename\*(Aq: $!"; +\& binmode ($fh); +\& +\& print Digest::MD5\->new\->addfile($fh)\->hexdigest, " $filename\en"; +.Ve +.PP +Since the MD5 algorithm is only defined for strings of bytes, it can not be +used on strings that contains chars with ordinal number above 255 (Unicode +strings). The MD5 functions and methods will croak if you try to feed them +such input data: +.PP +.Vb 1 +\& use Digest::MD5 qw(md5_hex); +\& +\& my $str = "abc\ex{300}"; +\& print md5_hex($str), "\en"; # croaks +\& # Wide character in subroutine entry +.Ve +.PP +What you can do is calculate the MD5 checksum of the UTF\-8 +representation of such strings. This is achieved by filtering the +string through \fBencode_utf8()\fR function: +.PP +.Vb 2 +\& use Digest::MD5 qw(md5_hex); +\& use Encode qw(encode_utf8); +\& +\& my $str = "abc\ex{300}"; +\& print md5_hex(encode_utf8($str)), "\en"; +\& # 8c2d46911f3f5a326455f0ed7a8ed3b3 +.Ve +.SH "SEE ALSO" +.IX Header "SEE ALSO" +Digest, +Digest::MD2, +Digest::SHA, +Digest::HMAC +.PP +\&\fBmd5sum\fR\|(1) +.PP +RFC 1321 +.PP +http://en.wikipedia.org/wiki/MD5 +.PP +The paper "How to Break MD5 and Other Hash Functions" by Xiaoyun Wang +and Hongbo Yu. +.SH COPYRIGHT +.IX Header "COPYRIGHT" +This library is free software; you can redistribute it and/or +modify it under the same terms as Perl itself. +.PP +.Vb 3 +\& Copyright 1998\-2003 Gisle Aas. +\& Copyright 1995\-1996 Neil Winton. +\& Copyright 1991\-1992 RSA Data Security, Inc. +.Ve +.PP +The MD5 algorithm is defined in RFC 1321. This implementation is +derived from the reference C code in RFC 1321 which is covered by +the following copyright statement: +.IP \(bu 4 +Copyright (C) 1991\-2, RSA Data Security, Inc. Created 1991. All +rights reserved. +.Sp +License to copy and use this software is granted provided that it +is identified as the "RSA Data Security, Inc. MD5 Message-Digest +Algorithm" in all material mentioning or referencing this software +or this function. +.Sp +License is also granted to make and use derivative works provided +that such works are identified as "derived from the RSA Data +Security, Inc. MD5 Message-Digest Algorithm" in all material +mentioning or referencing the derived work. +.Sp +RSA Data Security, Inc. makes no representations concerning either +the merchantability of this software or the suitability of this +software for any particular purpose. It is provided "as is" +without express or implied warranty of any kind. +.Sp +These notices must be retained in any copies of any part of this +documentation and/or software. +.PP +This copyright does not prohibit distribution of any version of Perl +containing this extension under the terms of the GNU or Artistic +licenses. +.SH AUTHORS +.IX Header "AUTHORS" +The original \f(CW\*(C`MD5\*(C'\fR interface was written by Neil Winton +(\f(CW\*(C`N.Winton@axion.bt.co.uk\*(C'\fR). +.PP +The \f(CW\*(C`Digest::MD5\*(C'\fR module is written by Gisle Aas <gisle@ActiveState.com>. |