package Crypt::Perl::ASN1;
#Wrappers around basic methods to get exceptions thrown on errors.
use strict;
use warnings;
use parent 'Convert::ASN1';
use Crypt::Perl::BigInt ();
use Crypt::Perl::X ();
sub new {
my ($class, @opts) = @_;
return $class->SUPER::new(
encode => { bigint => 'Crypt::Perl::BigInt' },
decode => { bigint => 'Crypt::Perl::BigInt' },
@opts,
);
}
sub prepare {
my ( $self, $asn1_r ) = ( $_[0], \$_[1] );
my $ret = $self->SUPER::prepare($$asn1_r);
if ( !defined $ret ) {
die Crypt::Perl::X::create('ASN1::Prepare', $$asn1_r, $self->error());
}
return $ret;
}
sub find {
my ( $self, $macro ) = @_;
return $self->SUPER::find($macro) || do {
die Crypt::Perl::X::create('ASN1::Find', $macro, $self->error());
};
}
sub encode {
my ($self) = shift;
return $self->SUPER::encode(@_) || do {
die Crypt::Perl::X::create('ASN1::Encode', \@_, $self->error());
};
}
sub decode {
my ($self) = shift;
return $self->SUPER::decode($_[0]) || do {
die Crypt::Perl::X::create('ASN1::Decode', $_[0], $self->error());
};
}
my $_asn1_null;
sub NULL {
return $_asn1_null ||= Crypt::Perl::ASN1->new()->prepare('n NULL')->encode( { n => 0 } );
}
1;