final class io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator
  minor version: 0
  major version: 59
  flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
  this_class: io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator
  super_class: java.lang.Object
{
  private static final java.security.Provider PROVIDER;
    descriptor: Ljava/security/Provider;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=2, locals=0, args_size=0
         0: .line 43
            new org.bouncycastle.jce.provider.BouncyCastleProvider
            dup
            invokespecial org.bouncycastle.jce.provider.BouncyCastleProvider.<init>:()V
            putstatic io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator.PROVIDER:Ljava/security/Provider;
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  static java.lang.String[] generate(java.lang.String, java.security.KeyPair, java.security.SecureRandom, java.util.Date, java.util.Date);
    descriptor: (Ljava/lang/String;Ljava/security/KeyPair;Ljava/security/SecureRandom;Ljava/util/Date;Ljava/util/Date;)[Ljava/lang/String;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=8, locals=11, args_size=5
        start local 0 // java.lang.String fqdn
        start local 1 // java.security.KeyPair keypair
        start local 2 // java.security.SecureRandom random
        start local 3 // java.util.Date notBefore
        start local 4 // java.util.Date notAfter
         0: .line 47
            aload 1 /* keypair */
            invokevirtual java.security.KeyPair.getPrivate:()Ljava/security/PrivateKey;
            astore 5 /* key */
        start local 5 // java.security.PrivateKey key
         1: .line 50
            new org.bouncycastle.asn1.x500.X500Name
            dup
            new java.lang.StringBuilder
            dup
            ldc "CN="
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 0 /* fqdn */
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            invokespecial org.bouncycastle.asn1.x500.X500Name.<init>:(Ljava/lang/String;)V
            astore 6 /* owner */
        start local 6 // org.bouncycastle.asn1.x500.X500Name owner
         2: .line 51
            new org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder
            dup
         3: .line 52
            aload 6 /* owner */
            new java.math.BigInteger
            dup
            bipush 64
            aload 2 /* random */
            invokespecial java.math.BigInteger.<init>:(ILjava/util/Random;)V
            aload 3 /* notBefore */
            aload 4 /* notAfter */
            aload 6 /* owner */
            aload 1 /* keypair */
            invokevirtual java.security.KeyPair.getPublic:()Ljava/security/PublicKey;
         4: .line 51
            invokespecial org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder.<init>:(Lorg/bouncycastle/asn1/x500/X500Name;Ljava/math/BigInteger;Ljava/util/Date;Ljava/util/Date;Lorg/bouncycastle/asn1/x500/X500Name;Ljava/security/PublicKey;)V
            astore 7 /* builder */
        start local 7 // org.bouncycastle.cert.X509v3CertificateBuilder builder
         5: .line 54
            new org.bouncycastle.operator.jcajce.JcaContentSignerBuilder
            dup
            ldc "SHA256WithRSAEncryption"
            invokespecial org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.<init>:(Ljava/lang/String;)V
            aload 5 /* key */
            invokevirtual org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.build:(Ljava/security/PrivateKey;)Lorg/bouncycastle/operator/ContentSigner;
            astore 8 /* signer */
        start local 8 // org.bouncycastle.operator.ContentSigner signer
         6: .line 55
            aload 7 /* builder */
            aload 8 /* signer */
            invokevirtual org.bouncycastle.cert.X509v3CertificateBuilder.build:(Lorg/bouncycastle/operator/ContentSigner;)Lorg/bouncycastle/cert/X509CertificateHolder;
            astore 9 /* certHolder */
        start local 9 // org.bouncycastle.cert.X509CertificateHolder certHolder
         7: .line 56
            new org.bouncycastle.cert.jcajce.JcaX509CertificateConverter
            dup
            invokespecial org.bouncycastle.cert.jcajce.JcaX509CertificateConverter.<init>:()V
            getstatic io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator.PROVIDER:Ljava/security/Provider;
            invokevirtual org.bouncycastle.cert.jcajce.JcaX509CertificateConverter.setProvider:(Ljava/security/Provider;)Lorg/bouncycastle/cert/jcajce/JcaX509CertificateConverter;
            aload 9 /* certHolder */
            invokevirtual org.bouncycastle.cert.jcajce.JcaX509CertificateConverter.getCertificate:(Lorg/bouncycastle/cert/X509CertificateHolder;)Ljava/security/cert/X509Certificate;
            astore 10 /* cert */
        start local 10 // java.security.cert.X509Certificate cert
         8: .line 57
            aload 10 /* cert */
            aload 1 /* keypair */
            invokevirtual java.security.KeyPair.getPublic:()Ljava/security/PublicKey;
            invokevirtual java.security.cert.X509Certificate.verify:(Ljava/security/PublicKey;)V
         9: .line 59
            aload 0 /* fqdn */
            aload 5 /* key */
            aload 10 /* cert */
            invokestatic io.netty.handler.ssl.util.SelfSignedCertificate.newSelfSignedCertificate:(Ljava/lang/String;Ljava/security/PrivateKey;Ljava/security/cert/X509Certificate;)[Ljava/lang/String;
            areturn
        end local 10 // java.security.cert.X509Certificate cert
        end local 9 // org.bouncycastle.cert.X509CertificateHolder certHolder
        end local 8 // org.bouncycastle.operator.ContentSigner signer
        end local 7 // org.bouncycastle.cert.X509v3CertificateBuilder builder
        end local 6 // org.bouncycastle.asn1.x500.X500Name owner
        end local 5 // java.security.PrivateKey key
        end local 4 // java.util.Date notAfter
        end local 3 // java.util.Date notBefore
        end local 2 // java.security.SecureRandom random
        end local 1 // java.security.KeyPair keypair
        end local 0 // java.lang.String fqdn
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   10     0        fqdn  Ljava/lang/String;
            0   10     1     keypair  Ljava/security/KeyPair;
            0   10     2      random  Ljava/security/SecureRandom;
            0   10     3   notBefore  Ljava/util/Date;
            0   10     4    notAfter  Ljava/util/Date;
            1   10     5         key  Ljava/security/PrivateKey;
            2   10     6       owner  Lorg/bouncycastle/asn1/x500/X500Name;
            5   10     7     builder  Lorg/bouncycastle/cert/X509v3CertificateBuilder;
            6   10     8      signer  Lorg/bouncycastle/operator/ContentSigner;
            7   10     9  certHolder  Lorg/bouncycastle/cert/X509CertificateHolder;
            8   10    10        cert  Ljava/security/cert/X509Certificate;
    Exceptions:
      throws java.lang.Exception
    MethodParameters:
           Name  Flags
      fqdn       
      keypair    
      random     
      notBefore  
      notAfter   

  private void <init>();
    descriptor: ()V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator this
         0: .line 62
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // io.netty.handler.ssl.util.BouncyCastleSelfSignedCertGenerator this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lio/netty/handler/ssl/util/BouncyCastleSelfSignedCertGenerator;
}
SourceFile: "BouncyCastleSelfSignedCertGenerator.java"