package Crypt::Perl::X509::Extension::keyUsage; use strict; use warnings; =encoding utf-8 =head1 NAME Crypt::Perl::X509::Extension::keyUsage =head1 SYNOPSIS my $usage_obj = Crypt::Perl::X509::Extension::keyUsage->new( qw( digitalSignature contentCommitment keyEncipherment dataEncipherment keyAgreement keyCertSign cRLSign encipherOnly decipherOnly ) ); =head1 SEE ALSO L<https://tools.ietf.org/html/rfc5280#section-4.2.1.3> =cut use parent qw( Crypt::Perl::X509::Extension ); use Crypt::Perl::ASN1::BitString (); use Crypt::Perl::X (); use constant OID => '2.5.29.15'; use constant ASN1 => <<END; keyUsage ::= BIT STRING END use constant CRITICAL => 1; #The original bit values are “little-endianâ€. #We might as well transmogrify these values for ease of use here. my @_bits = qw( digitalSignature contentCommitment keyEncipherment dataEncipherment keyAgreement keyCertSign cRLSign encipherOnly decipherOnly ); sub new { my ($class, @usages) = @_; #Use the modern name $_ =~ s<\AnonRepudiation\z><contentCommitment> for @usages; if (!@usages) { die Crypt::Perl::X::create('Generic', 'Need usages!'); } return bless \@usages, $class; } sub _encode_params { my ($self) = @_; return Crypt::Perl::ASN1::BitString::encode( \@_bits, [ @$self ] ); } 1;