Crypt-JWS-OpenSSL
view release on metacpan or search on metacpan
lib/Crypt/JWS/OpenSSL/Role/Encoder.pm view on Meta::CPAN
my $bytes = $self->JSON->encode($ref);
my $base64 = MIME::Base64::encode_base64($bytes, '');
$base64 =~ s!=+\z!!;
$base64 =~ tr[+/][-_];
return $base64;
}
sub decode_jwt_segment {
my($self, $base64) = @_;
$base64 =~ tr[-_][+/];
$base64 .= '=' while length($base64) % 4;
my $json = MIME::Base64::decode_base64($base64);
return $self->JSON->decode($json);
}
sub encode_jwt_signature {
my($self, $bytes) = @_;
return $self->encode_base64_url($bytes);
}
sub decode_jwt_signature {
my($self, $base64) = @_;
return $self->decode_base64_url($base64);
}
sub encode_jwk_element {
my($self, $bytes) = @_;
return $self->encode_base64_url($bytes);
}
sub decode_jwk_element {
my($self, $base64) = @_;
return $self->decode_base64_url($base64);
}
sub encode_base64_url {
my($self, $bytes) = @_;
my $base64 = $self->encode_base64($bytes);
$base64 =~ s!=+\z!!;
$base64 =~ tr[+/][-_];
return $base64;
}
sub encode_base64 {
my($self, $bytes) = @_;
return MIME::Base64::encode_base64($bytes, '');
}
sub decode_base64_url {
my($self, $base64) = @_;
$base64 =~ tr[-_][+/];
$base64 .= '=' while length($base64) % 4;
return $self->decode_base64($base64);
}
sub decode_base64 {
my($self, $base64) = @_;
return MIME::Base64::decode_base64($base64);
}
sub encode_rsa_private_key_pem {
my($self, $bytes) = @_;
return $self->_encode_pem(\$bytes, 'PRIVATE KEY');
}
sub encode_rsa_public_key_pem {
my($self, $bytes) = @_;
return $self->_encode_pem(\$bytes, 'PUBLIC KEY');
}
sub encode_ecc_private_key_pem {
my($self, $bytes) = @_;
return $self->_encode_pem(\$bytes, 'EC PRIVATE KEY');
}
sub encode_ecc_public_key_pem {
my($self, $bytes) = @_;
return $self->_encode_pem(\$bytes, 'PUBLIC KEY');
}
sub _encode_pem {
my ($self, $bytes_ref, $type) = @_;
my $pem = $self->encode_base64($$bytes_ref);
$pem = join( qq(\n), $pem =~ m!(.{1,64})!g, '' );
substr( $pem, 0, 0, "-----BEGIN $type-----\n" );
substr( $pem, length($pem), 0, "-----END $type-----\n" );
return $pem;
}
sub decode_pem {
my ($self, $pem) = @_;
$pem =~ s!-----(BEGIN|END)[^-]*-----!!g;
return $self->decode_base64($pem);
}
sub numify_version {
my ($self, $vstring) = @_;
no warnings;
my $ver = version->parse($vstring)->numify;
return $ver;
}
1;
__END__
=pod
=encoding UTF-8
=head1 NAME
Crypt::JWS::OpenSSL::Role::Encoder - Provides encoding and decoding methods.
Composed into
=over
=item
L<Crypt::JWS::OpenSSL>
=item
L<Crypt::JWS::OpenSSL::Util::JWK>
=item
L<Crypt::JWS::OpenSSL::Util::PEM>
=item
L<Crypt::JWS::OpenSSL::Algorithm::ECC>
=item
L<Crypt::JWS::OpenSSL::Algorithm::RSA>
=item
L<Crypt::JWS::OpenSSL::Algorithm::HMAC>
=back
=head1 VERSION
version 0.005
=head1 METHODS
=head2 encode_jwt_segment
Accepts a hash refrence. Encodes the hash reference as JSON and
returns the Base64 URL encoded JSON.
=head2 decode_jwt_segment
Accepts a Base64 URL encoded JSON string. Decodes the input and returns
the decoded JSON as a hash reference.
=head2 encode_jwt_signature
Accepts raw bytes and returns the Base64 URL encoded result.
=head2 decode_jwt_signature
Accepts a Base64 URL encoded string and returns the raw decoded bytes.
=head2 encode_jwk_element
Accepts raw bytes and returns the Base64 URL encoded result.
=head2 decode_jwk_element
Accepts a Base64 URL encoded string and returns the raw decoded bytes.
=head2 encode_rsa_private_key_pem
Accepts a der encoded RSA private key and returns the pem encoded result.
=head2 encode_rsa_public_key_pem
Accepts a der encoded RSA public key and returns the pem encoded result.
=head2 encode_ecc_private_key_pem
Accepts a der encoded EC private key and returns the pem encoded result.
=head2 encode_ecc_public_key_pem
Accepts a der encoded EC public key and returns the pem encoded result.
=head2 decode_pem
Decodes a pem format key and returns the der result.
=head2 encode_base64_url
Convenience method
=head2 decode_base64_url
Convenience method
=head2 encode_base64
Convenience method
=head2 decode_base64
Convenience method
=head1 AUTHOR
Mark Dootson E<lt>mdootson@cpan.orgE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright (C) 2026 by Mark Dootson
This library is free software; you can redistribute it and/or modify
it under the same terms as the Perl 5 programming language system itself.
=cut
( run in 0.625 second using v1.01-cache-2.11-cpan-8dfa8b56332 )