package JSON::WebToken;
use strict;
use warnings;
use 5.008_001;
our $VERSION = '0.10';
use parent 'Exporter';
use Carp qw(croak carp);
use JSON qw(encode_json decode_json);
use MIME::Base64 qw(en
code_base64 decode_base64);
use Module::Runtime qw(use_module);
use JSON::WebToken::Constants;
use JSON::WebToken::Exception;
our @EXPORT = qw(encode_jwt decode_jwt);
our $ALGORITHM_MAP = {
# f
nless (ref $claims eq 'HASH') {
JSON::WebToken::Exception->throw(
code => ERROR_JWT_INVALID_PARAMETER,
message => 'Usage: JSON::WebToken->encode(\%claims [, $secret,
package JSON::WebToken::Crypt;
use strict;
use warnings;
sub sign {
my ($class, $algorithm, $message, $key) = @_;
die 'sign method must be implements!';
}
sub verify {
my ($class, $algo
package JSON::WebToken::Exception;
use strict;
use warnings;
use overload (
q|""| => \&to_string,
);
use Carp qw/croak/;
sub throw {
my ($class, %args) = @_;
my $self = bless \%args, $c
package JSON::WebToken::Constants;
use strict;
use warnings;
use parent qw/Exporter/;
my @error_code = qw/
ERROR_JWT_INVALID_PARAMETER
ERROR_JWT_MISSING_SECRET
ERROR_JWT_INVALID_SEGMENT_
package JSON::WebToken::Crypt::HMAC;
use strict;
use warnings;
use parent 'JSON::WebToken::Crypt';
use Digest::SHA ();
our $ALGORITHM2SIGNING_METHOD_MAP = {
HS256 => \&Digest::SHA::hmac_sha256,
package JSON::WebToken::Crypt::RSA;
use strict;
use warnings;
use parent 'JSON::WebToken::Crypt';
use Crypt::OpenSSL::RSA ();
our $ALGORITHM2SIGNING_METHOD_MAP = {
RS256 => 'use_sha256_hash',
use strict;
use warnings;
use lib 'lib';
use Test::More;
use JSON::WebToken;
use Crypt::CBC;
use Crypt::OpenSSL::AES;
use Crypt::OpenSSL::RSA;
use Crypt::OpenSSL::Bignum;
use Digest::SHA qw(hmac_sha2