Crypt-OpenSSL-Cloner

 view release on metacpan or  search on metacpan

lib/Crypt/OpenSSL/Cloner.pm  view on Meta::CPAN

155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
$blob = decode_base64($blob);
my $rootparse = $ASN->find("Certificate");
my $extensions = $rootparse->decode($blob);
$extensions = $extensions->{tbsCertificate}->{extensions};
foreach my $ext (@$extensions) {
    my $oid = $ext->{extnID};
    my $extname = $oid_2_ext{$oid};
    next if !$extname;
    my $der = $ext->{extnValue};
    my $parser = $PARSERS{$extname};
    my $decoded = $parser->decode($der);
    if ($extname eq 'SubjectKeyIdentifier') {
        $new_cert->set_extension(
            "subjectKeyIdentifier", unpack('H*', $decoded));
    } elsif ($extname eq 'KeyUsage') {
        #Then try to figure that out, too..
        #Apparently this module has a different way of doing things...
        # Our sample cert doesn't seem to conform to this.. and using
        # A parse of another module, seems to be using OIDs for
        # ExtendedKeyUsage?
    } elsif ($extname eq 'SubjectAltName') {               
        #ASN:
        #
        #GeneralName ::= CHOICE {

lib/Crypt/OpenSSL/Cloner.pm  view on Meta::CPAN

192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
    dNSName                     => "DNS",
    x400Address                 => "dirName",
    #ediPartyName               => "what's this?",
    directoryName               => "dirName",
    uniformResourceIdentifier   => "URI",
    iPAddress                   => "IP",
    registeredID                => "RID",
);
my @altnames;
my $altname = "";
foreach my $h (@$decoded) {
    my ($k,$v) = (%$h);
    my $new_k = $asn2openssl{$k};
    if (!$new_k) {
        warn "Found ASN.1 X509 field $k which doesn't have an OpenSSL mapping";
        next;
    }
    $k = $new_k;
    push @altnames, "$k:$v";
}
$altname = join(",", @altnames);



( run in 0.234 second using v1.01-cache-2.11-cpan-5f2e87ce722 )