/msg;
$subject{'modulus'}=~s/\s+//msg;
push(@gr, ''.$text{'certmgrlib_subject'}.'');
push(@gr, '');
push(@gr, $text{'view_cn'});
push(@gr, $subject{'CN'});
if ($subject{'O'}) {
push(@gr, $text{'view_o'});
push(@gr, $subject{'O'});
}
if ($subject{'OU'}){
push(@gr, $text{'view_ou'});
push(@gr, $subject{'OU'});
}
if ($subject{'L'} || $subject{'ST'} || $subject{'C'}) {
push(@gr, $text{'view_location'});
push(@gr, $subject{'L'}.$subject{'ST'}.$subject{'C'});
}
if ($subject{'emailAddress'}){
push(@gr, $text{'view_email'});
push(@gr, $subject{'emailAddress'});
}
if ($v3ext{'san'}){
push(@gr, "subjectAltName");
push(@gr, $v3ext{'san'});
}
if ($subject{'issued'}){
push(@gr, $text{'issued_on'});
push(@gr, $subject{'issued'});
push(@gr, $text{'expires_on'});
push(@gr, $subject{'expires'});
}
if ($subject{'md5fingerprint'}){
push(@gr, $text{'md5fingerprint'});
push(@gr, $subject{'md5fingerprint'});
}
if ($subject{'sha1fingerprint'}){
push(@gr, $text{'sha1fingerprint'});
push(@gr, $subject{'sha1fingerprint'});
}
if ($subject{'sha256fingerprint'}){
push(@gr, $text{'sha256fingerprint'});
push(@gr, $subject{'sha256fingerprint'});
}
if ($full) {
if ($subject{'serial'}) {
push(@gr, $text{'view_serial'});
push(@gr, $subject{'serial'});
}
if ($subject{'sigalgorithm'}) {
push(@gr, $text{'view_sig_algorithm'});
push(@gr, $subject{'sigalgorithm'});
}
push(@gr, $text{'keysize'});
push(@gr, $subject{'keysize'});
push(@gr, $text{'keytype'});
push(@gr, $subject{'keytype'});
push(@gr, $text{'publicExponent'});
push(@gr, $subject{'exponent'});
push(@gr, $text{'modulus'});
push(@gr, $subject{'modulus'});
}
if (!$isreq) {
push(@gr, '
'.$text{'certmgrlib_issuer'}.'');
push(@gr, '');
push(@gr, $text{'view_cn'});
push(@gr, $issuer{'CN'});
if ($issuer{'O'}) {
push(@gr, $text{'view_o'});
push(@gr, $issuer{'O'});
}
if ($issuer{'OU'}){
push(@gr, $text{'view_ou'});
push(@gr, $issuer{'OU'});
}
if ($issuer{'L'} || $issuer{'ST'} || $issuer{'C'}) {
push(@gr, $text{'view_location'});
push(@gr, $issuer{'L'}.$issuer{'ST'}.$issuer{'C'});
}
}
return &ui_grid_table(\@gr, 2, undef, ['style="padding:0;"', 'style="padding:0 0 0.5% 3%;width:75%;"']);
}
sub show_key_info {
my $full=$_[0];
my $keydata=$_[1];
my %key;
my @fields=('modulus','privateExponent','prime1','prime2','exponent1','exponent2','coefficient');
my $field;
my $rv = "";
$keydata=~/^publicExponent:\s*(.*?)\s*?$/ms;
$key{'publicExponent'}=$1;
$keydata=~/^Private-Key:\s*\((\d*)\s*bit\)\s*?$/ms;
$key{'keysize'}=$1;
foreach $field (@fields){
if ($keydata=~/^$field:\s*((([0-9a-fA-F]{2}:)*\s*)*[0-9a-fA-F]{2})/ms) { $key{$field}=$1; }
}
$rv .= "\n";
$rv .= "
/msg;
$key{$field}=~s/^//msg;
$key{$field}=~s/\s+//msg;
$rv .= "$text{$field}: $key{$field} \n";
} }
$rv .= "
\n";
return $rv;
}
sub show_crl_info {
my $full=$_[0];
my $crldata=$_[1];
my %issuer;
my %v3ext;
my ($ndx, $pos);
my $isreq=0;
my @gr;
my @fields=('CN','O','OU','L','ST','C');
my $field;
foreach $field (@fields){
if ($crldata=~/^\s*Issuer:.*?\/$field=(.*?)(, [A-Z]{1,2}|\/\w+=|$)/m) { $issuer{$field}=$1; }
}
if ($crldata=~/^\s*Signature\s+Algorithm:\s*(.*)$/mi) { $issuer{'sigalgorithm'}=$1;}
if ($crldata=~/^\s*Last\s+Update:\s*(.*?)\s*?$/m) { $v3ext{'lastupdate'}=$1; }
if ($crldata=~/^\s*Next\s+Update:\s*(.*?)\s*?$/m) { $v3ext{'nextupdate'}=$1; }
if ($crldata=~/^\s*X509v3 CRL Number:\s*(.*?)\s*?$/m) { $v3ext{'crlnum'}=$1; }
if ($issuer{'L'} && ($issuer{'ST'} || $issuer{'C'})) {$issuer{'L'}.=',';} #Append commas
if ($issuer{'ST'} && $issuer{'C'}) {$issuer{'ST'}.=',';} #Append commas
push(@gr, ''.$text{'crl'}.'');
push(@gr, '');
push(@gr, $text{'view_cn'});
push(@gr, $issuer{'CN'});
if ($issuer{'O'}) {
push(@gr, $text{'view_o'});
push(@gr, $issuer{'O'});
}
if ($issuer{'OU'}){
push(@gr, $text{'view_ou'});
push(@gr, $issuer{'OU'});
}
if ($issuer{'L'} || $issuer{'ST'} || $issuer{'C'}) {
push(@gr, $text{'view_location'});
push(@gr, $issuer{'L'}.$issuer{'ST'}.$issuer{'C'});
}
if ($issuer{'sigalgorithm'}) {
push(@gr, $text{'view_sig_algorithm'});
push(@gr, $issuer{'sigalgorithm'});
}
if ($v3ext{'lastupdate'}) {
push(@gr, $text{'view_last_update'});
push(@gr, $v3ext{'lastupdate'});
}
if ($v3ext{'nextupdate'}) {
push(@gr, $text{'view_next_update'});
push(@gr, $v3ext{'nextupdate'});
}
if ($v3ext{'crlnum'}) {
push(@gr, $text{'view_crl_number'});
push(@gr, $v3ext{'crlnum'});
}
if ($full) {
push(@gr, "$text{'view_revoked_certs'}:");
push(@gr, "");
$ndx = index($crldata, "Serial Number:");
while ($ndx gt 0) {
$crldata = substr($crldata, $ndx);
$crldata=~/^\s*Serial Number:\s*(.*)$/mi;
push(@gr, "$text{'view_serial'}");
push(@gr, $1);
$crldata=~/^\s*Revocation Date:\s*(.*)$/mi;
push(@gr, "$text{'view_revoke_date'}");
push(@gr, $1);
$crldata=~/^\s*X509v3 CRL Reason Code:\s*(.*)$/mi;
push(@gr, "$text{'view_revoke_reason'}");
push(@gr, $1);
$ndx = index($crldata, "Serial Number:", $ndx + 1);
}
}
return &ui_grid_table(\@gr, 2, undef, ['style="padding:0;"', 'style="padding:0 0 0.5% 3%;width:65%;"']);
}
sub pem_or_der{
my $filename=$_[0];
my $filetype=$_[1];
my $format;
my $cipher;
my $flag;
if ($filetype=~/^cert(ificate)?$/i){
open(PEM_OR_DER,$filename)||return("$text{'certmgrlib_e_file_open'} $filename");
while(){ if (/^\s*-+BEGIN\s*CERTIFICATE-*\s*$/i) { $format="PEM" } }
close(PEM_OR_DER);
if (!$format) {$format="DER";}
open(PEM_OR_DER,"$config{'openssl_cmd'} x509 -in $filename -inform $format -text|")||return($text{'certmgrlib_e_exec'});
while (){
if (/^\s*Certificate:\s$/) {
close(PEM_OR_DER);
return($format);
}
}
close(PEM_OR_DER);
return($text{'certmgrlib_e_cert'});
}
if ($filetype=~/^key$/i){
open(PEM_OR_DER,$filename)||return("$text{'certmgrlib_e_file_open'} $filename");
while(){
if (/^\s*-+BEGIN\s*RSA\s*PRIVATE\s*KEY-*\s*$/i) { $format="PEM" }
if (/^\s*Proc-Type:\s*\d*,ENCRYPTED\s*$/) { $flag=1; }
if (($flag)&&(/^DEK-Info:\s*(.*?),.*$/i)) { $cipher=$1 }
}
close(PEM_OR_DER);
if ($cipher) { if (wantarray) {return(($format,$cipher));} return($format); }
else {$cipher="none";}
if (!$format) {$format="DER";}
open(PEM_OR_DER,"$config{'openssl_cmd'} rsa -in $filename -inform $format -text|")||return($text{'certmgrlib_e_exec'});
while (){
if (/^\s*Private-Key:\s(\d*\sbit)\s*$/) {
close(PEM_OR_DER);
if (wantarray) {return(($format,$cipher));}
return($format);
}
}
close(PEM_OR_DER);
return($text{'certmgrlib_e_key'});
}
}
sub getfiles {
my(@dirs,@files,$thisdir,$dir);
$thisdir=$_[0];
opendir(DIR, $thisdir);
@dirs= sort grep { !/^[.]{1,2}$/ && -d "$thisdir/$_" } readdir(DIR);
closedir(DIR);
opendir(DIR,$thisdir);
@files= sort grep { -f "$thisdir/$_" } readdir(DIR);
closedir(DIR);
foreach $dir (@dirs) {
push(@files, grep { $_=$dir.'/'.$_ } &getfiles($thisdir."/".$dir));
}
return(@files);
}
1;