Net::SSLeay::OO::X509::Name - methods to call on SSL certificate names


Net-SSLeay-OO documentation Contained in the Net-SSLeay-OO distribution.

Index


Code Index:

NAME

Top

Net::SSLeay::OO::X509::Name - methods to call on SSL certificate names

SYNOPSIS

Top

 my $name = $cert->get_subject_name;

 # for 'common' attributes
 print "Summary of cert: ".$name->oneline."\n";
 print "Common name is ".$name->cn."\n";

 # others...
 use Net::SSLeay::OO::Constants qw(NID_pbe_WithSHA1And2_Key_TripleDES_CBC);
 my $val = $name->get_text_by_NID(NID_pbe_WithSHA1And2_Key_TripleDES_CBC);

DESCRIPTION

Top

This object represents the X509_NAME structure in OpenSSL. It has a bunch of fields such as "common name", etc.

Two methods are imported from the OpenSSL library;

oneline

Returns a string, such as:

 /C=NZ/ST=Wellington/O=Catalyst IT/OU=Security/CN=Test Client

get_text_by_NID(NID_xxx)

Return a given field from the name. See openssl/objects.h for the complete list.

Convenience methods have been added which return the following common fields:

        cn           NID_commonName
	country      NID_countryName
	locality     NID_localityName
	state        NID_stateOrProvinceName
	org          NID_organizationName
	org_unit     NID_organizationalUnitName
	subject_key  NID_subject_key_identifier
	key_usage    NID_key_usage
	serial       NID_serialNumber

AUTHOR

Top

Sam Vilain, samv@cpan.org

COPYRIGHT

Top

SEE ALSO

Top

Net::SSLeay::OO, Net::SSLeay::OO::X509


Net-SSLeay-OO documentation Contained in the Net-SSLeay-OO distribution.

package Net::SSLeay::OO::X509::Name;

use Moose;
use Carp qw(croak confess);

has 'x509_name'  => isa => 'Int',
	is       => "ro",
	required => 1,
	;

our %field_to_NID = qw(
	cn NID_commonName
	country NID_countryName
	locality NID_localityName
	state NID_stateOrProvinceName
	org NID_organizationName
	org_unit NID_organizationalUnitName
	subject_key NID_subject_key_identifier
	key_usage NID_key_usage
	serial NID_serialNumber
	name NID_name
);

sub get_text_by_NID {
	my $self = shift;
	my $nid  = shift;
	my $val  =
		Net::SSLeay::X509_NAME_get_text_by_NID( $self->x509_name,$nid,
		);
	&Net::SSLeay::OO::Error::die_if_ssl_error("get_text_by_nid($nid)");

	# work around a bug in X509_NAME_get_text_by_NID
	chop($val) if substr( $val, -1, 1 ) eq "\0";
	$val;
}

use Net::SSLeay::OO::Functions 'x509_name';

sub AUTOLOAD {
	no strict 'refs';
	my $self = shift;
	our $AUTOLOAD =~ m{::([^:]*)$};
	my $field = $1;
	$self->{$field} ||= do {
		my $nid_name = $field_to_NID{$field}
			or croak "unknown method/field '$field'";
		if ( !defined &{$nid_name} ) {
			eval {
				Net::SSLeay::OO::Constants->import($nid_name);
				1;
			}
				or croak "unknown NID '$nid_name'?; $@";
		}
		$self->get_text_by_NID(&$nid_name);
	};
}

1;

__END__

# Local Variables:
# mode:cperl
# indent-tabs-mode: t
# cperl-continued-statement-offset: 8
# cperl-brace-offset: 0
# cperl-close-paren-offset: 0
# cperl-continued-brace-offset: 0
# cperl-continued-statement-offset: 8
# cperl-extra-newline-before-brace: nil
# cperl-indent-level: 8
# cperl-indent-parens-as-block: t
# cperl-indent-wrt-brace: nil
# cperl-label-offset: -8
# cperl-merge-trailing-else: t
# End:
# vim: filetype=perl:noexpandtab:ts=3:sw=3