View file File name : Base32.pm Content :package MIME::Base32; use 5.008001; use strict; use warnings; require Exporter; our @ISA = qw(Exporter); our @EXPORT = qw(encode_base32 decode_base32); our @EXPORT_OK = qw( encode_rfc3548 decode_rfc3548 encode_09AV decode_09AV encode_base32hex decode_base32hex ); our $VERSION = "1.303"; $VERSION = eval $VERSION; sub encode { return encode_base32(@_) } sub encode_rfc3548 { return encode_base32(@_) } sub encode_base32 { my $arg = shift; return '' unless defined($arg); # mimic MIME::Base64 $arg = unpack('B*', $arg); $arg =~ s/(.....)/000$1/g; my $l = length($arg); if ($l & 7) { my $e = substr($arg, $l & ~7); $arg = substr($arg, 0, $l & ~7); $arg .= "000$e" . '0' x (5 - length $e); } $arg = pack('B*', $arg); $arg =~ tr|\0-\37|A-Z2-7|; return $arg; } sub decode { return decode_base32(@_) } sub decode_rfc3548 { return decode_base32(@_) } sub decode_base32 { my $arg = uc(shift || ''); # mimic MIME::Base64 $arg =~ tr|A-Z2-7|\0-\37|; $arg = unpack('B*', $arg); $arg =~ s/000(.....)/$1/g; my $l = length $arg; $arg = substr($arg, 0, $l & ~7) if $l & 7; $arg = pack('B*', $arg); return $arg; } sub encode_09AV { return encode_base32hex(@_) } sub encode_base32hex { my $arg = shift; return '' unless defined($arg); # mimic MIME::Base64 $arg = unpack('B*', $arg); $arg =~ s/(.....)/000$1/g; my $l = length($arg); if ($l & 7) { my $e = substr($arg, $l & ~7); $arg = substr($arg, 0, $l & ~7); $arg .= "000$e" . '0' x (5 - length $e); } $arg = pack('B*', $arg); $arg =~ tr|\0-\37|0-9A-V|; return $arg; } sub decode_09AV { return decode_base32hex(@_) } sub decode_base32hex { my $arg = uc(shift || ''); # mimic MIME::Base64 $arg =~ tr|0-9A-V|\0-\37|; $arg = unpack('B*', $arg); $arg =~ s/000(.....)/$1/g; my $l = length($arg); $arg = substr($arg, 0, $l & ~7) if $l & 7; $arg = pack('B*', $arg); return $arg; } 1; =encoding utf8 =head1 NAME MIME::Base32 - Base32 encoder and decoder =head1 SYNOPSIS #!/usr/bin/env perl use strict; use warnings; use MIME::Base32; my $encoded = encode_base32('Aladdin: open sesame'); my $decoded = decode_base32($encoded); =head1 DESCRIPTION This module is for encoding/decoding data much the way that L<MIME::Base64> does. Prior to version 1.0, L<MIME::Base32> used the C<base32hex> (or C<[0-9A-V]>) encoding and decoding methods by default. If you need to maintain that behavior, please call C<encode_base32hex> or C<decode_base32hex> functions directly. Now, in accordance with L<RFC-3548, Section 5|https://tools.ietf.org/html/rfc3548#section-5>, L<MIME::Base32> uses the C<encode_base32> and C<decode_base32> functions by default. =head1 FUNCTIONS The following primary functions are provided: =head2 decode Synonym for C<decode_base32> =head2 decode_rfc3548 Synonym for C<decode_base32> =head2 decode_base32 my $string = decode_base32($encoded_data); Decode some encoded data back into a string of text or binary data. =head2 decode_09AV Synonym for C<decode_base32hex> =head2 decode_base32hex my $string_or_binary_data = MIME::Base32::decode_base32hex($encoded_data); Decode some encoded data back into a string of text or binary data. =head2 encode Synonym for C<encode_base32> =head2 encode_rfc3548 Synonym for C<encode_base32> =head2 encode_base32 my $encoded = encode_base32("some string"); Encode a string of text or binary data. =head2 encode_09AV Synonym for C<encode_base32hex> =head2 encode_base32hex my $encoded = MIME::Base32::encode_base32hex("some string"); Encode a string of text or binary data. This uses the C<hex> (or C<[0-9A-V]>) method. =head1 AUTHORS Jens Rehsack - <rehsack@cpan.org> - Current maintainer Chase Whitener Daniel Peder - sponsored by Infoset s.r.o., Czech Republic - <Daniel.Peder@InfoSet.COM> http://www.infoset.com - Original author =head1 BUGS Before reporting any new issue, bug or alike, please check L<https://rt.cpan.org/Dist/Display.html?Queue=MIME-Base32>, L<https://github.com/perl5-utils/MIME-Base32/issues> or L<https://github.com/perl5-utils/MIME-Base32/pulls>, respectively, whether the issue is already reported. Please report any bugs or feature requests to C<bug-mime-base32 at rt.cpan.org>, or through the web interface at L<https://rt.cpan.org/NoAuth/ReportBug.html?Queue=MIME-Base32>. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. Any and all criticism, bug reports, enhancements, fixes, etc. are appreciated. =head1 SUPPORT You can find documentation for this module with the perldoc command. perldoc MIME::Base32 You can also look for information at: =over 4 =item * RT: CPAN's request tracker L<https://rt.cpan.org/Dist/Display.html?Name=MIME-Base32> =item * AnnoCPAN: Annotated CPAN documentation L<http://annocpan.org/dist/MIME-Base32> =item * MetaCPAN L<https://metacpan.org/release/MIME-Base32> =back =head1 COPYRIGHT AND LICENSE INFORMATION Copyright (c) 2003-2010 Daniel Peder. All rights reserved. Copyright (c) 2015-2016 Chase Whitener. All rights reserved. Copyright (c) 2016 Jens Rehsack. All rights reserved. This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO L<MIME::Base64>, L<RFC-3548|https://tools.ietf.org/html/rfc3548#section-5> =cut