package Crypt::Perl::Ed25519::PublicKey; use strict; use warnings; =encoding utf-8 =head1 NAME Crypt::Perl::Ed25519::PublicKey =head1 SYNOPSIS # This requires an octet string. my $import_key = Crypt::Perl::Ed25519::PublicKey->new( $pub_str ); $key->verify( $message, $signature ) or die "Invalid sig for msg!"; #---------------------------------------------------------------------- # Returns an octet string. my $pub_str = $key->get_public(); # Returns an object my $pub_obj = $key->get_public_key(); # This returns a hash reference, NOT a JSON string. my $pub_hr = $key->get_struct_for_public_jwk(); =head1 DESCRIPTION This class implements Ed25519 verification. =cut use parent qw( Crypt::Perl::Ed25519::KeyBase ); sub new { my ($class, $pub) = @_; $class->_verify_binary_key_part($pub); return bless { _public => $pub, _public_ar => [ unpack 'C*', $pub ], }, $class; } use constant { _PEM_HEADER => 'PUBLIC KEY', _ASN1 => q< FG_Key ::= SEQUENCE { algorithmIdentifier AlgorithmIdentifier, subjectPublicKey BIT STRING } >, }; sub _to_der_args { my ($self) = @_; return ( # The leading bytes are the encoding of the inner CurvePrivateKey # (i.e., OCTET STRING). subjectPublicKey => $self->{'_public'}, ); } 1;