@@ -404,7 +404,7 @@ private ASN1Sequence parseAuthorityKeyIdentifier(final ThreadContext context, fi
404
404
405
405
for ( String value : valuex .split ("," ) ) { // e.g. "keyid:always,issuer:always"
406
406
if ( value .startsWith ("keyid:" ) ) { // keyid:always
407
- ASN1Encodable publicKeyIdentifier = new DEROctetString (publicKeyIdentifier (context ));
407
+ ASN1Encodable publicKeyIdentifier = new DEROctetString (issuerPublicKeyIdentifier (context ));
408
408
vec .add (new DERTaggedObject (false , 0 , publicKeyIdentifier ));
409
409
}
410
410
else if ( value .startsWith ("issuer:" ) ) { // issuer:always
@@ -421,9 +421,16 @@ else if ( value.startsWith("issuer:") ) { // issuer:always
421
421
return new DERSequence (vec );
422
422
}
423
423
424
- private byte [] publicKeyIdentifier (final ThreadContext context ) {
424
+ private byte [] subjectPublicKeyIdentifier (final ThreadContext context ) {
425
+ return publicKeyIdentifier (context , getSubjectPublicKey (context ));
426
+ }
427
+
428
+ private byte [] issuerPublicKeyIdentifier (final ThreadContext context ) {
429
+ return publicKeyIdentifier (context , getIssuerPublicKey (context ));
430
+ }
431
+
432
+ private byte [] publicKeyIdentifier (final ThreadContext context , final IRubyObject pkey ) {
425
433
final Ruby runtime = context .runtime ;
426
- IRubyObject pkey = getPublicKey (context );
427
434
IRubyObject der ;
428
435
if (pkey instanceof PKeyRSA ) {
429
436
der = pkey .callMethod (context , "to_der" );
@@ -434,32 +441,39 @@ private byte[] publicKeyIdentifier(final ThreadContext context) {
434
441
return getSHA1Digest (runtime , der .asString ().getByteList ());
435
442
}
436
443
437
- private IRubyObject getPublicKey (final ThreadContext context ) {
438
- IRubyObject issuer_cert = getInstanceVariable ("@issuer_certificate" );
439
- if ( issuer_cert instanceof X509Cert ) {
440
- return ((X509Cert ) issuer_cert ).public_key (context );
444
+ private IRubyObject getSubjectPublicKey (final ThreadContext context ) {
445
+ return certPublicKey (context , subject_cert ());
446
+ }
447
+
448
+ private IRubyObject getIssuerPublicKey (final ThreadContext context ) {
449
+ return certPublicKey (context , issuer_cert ());
450
+ }
451
+
452
+ private IRubyObject certPublicKey (final ThreadContext context , final IRubyObject cert ) {
453
+ if ( cert instanceof X509Cert ) {
454
+ return ((X509Cert ) cert ).public_key (context );
441
455
}
442
- return issuer_cert .callMethod (context , "public_key" );
456
+ return cert .callMethod (context , "public_key" );
443
457
}
444
458
445
459
private X500Name authorityCertIssuer (final ThreadContext context ) {
446
460
IRubyObject issuer = getIssuer (context );
447
461
if ( issuer instanceof X509Name ) {
448
462
return ((X509Name ) issuer ).getX500Name ();
449
463
}
450
- throw new UnsupportedOperationException ();
464
+ throw new UnsupportedOperationException ("authorityCertIssuer" );
451
465
}
452
466
453
467
private IRubyObject getIssuer (final ThreadContext context ) {
454
- IRubyObject issuer_cert = getInstanceVariable ( "@issuer_certificate" );
468
+ IRubyObject issuer_cert = issuer_cert ( );
455
469
if ( issuer_cert instanceof X509Cert ) {
456
470
return ((X509Cert ) issuer_cert ).getIssuer ();
457
471
}
458
472
return issuer_cert .callMethod (context , "issuer" );
459
473
}
460
474
461
475
private BigInteger getIssuerSerialNumber (final ThreadContext context ) {
462
- IRubyObject issuer_cert = getInstanceVariable ( "@issuer_certificate" );
476
+ IRubyObject issuer_cert = issuer_cert ( );
463
477
if ( issuer_cert instanceof X509Cert ) {
464
478
return ((X509Cert ) issuer_cert ).getSerial ();
465
479
}
@@ -553,7 +567,7 @@ private static GeneralName parseGeneralName(final String valuex) throws IOExcept
553
567
554
568
private DEROctetString parseSubjectKeyIdentifier (final ThreadContext context , final String oid , final String valuex ) {
555
569
if ( "hash" .equalsIgnoreCase (valuex ) ) {
556
- return new DEROctetString (publicKeyIdentifier (context ));
570
+ return new DEROctetString (subjectPublicKeyIdentifier (context ));
557
571
}
558
572
if ( valuex .length () == 20 || ! isHex (valuex ) ) {
559
573
return new DEROctetString (ByteList .plain (valuex ));
0 commit comments