public class org.bouncycastle.tsp.TSPUtil
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.tsp.TSPUtil
  super_class: java.lang.Object
{
  private static java.util.List EMPTY_LIST;
    descriptor: Ljava/util/List;
    flags: (0x000a) ACC_PRIVATE, ACC_STATIC

  private static final java.util.Map digestLengths;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  private static final java.util.Map digestNames;
    descriptor: Ljava/util/Map;
    flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL

  static void <clinit>();
    descriptor: ()V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=0, args_size=0
         0: .line 41
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            invokestatic java.util.Collections.unmodifiableList:(Ljava/util/List;)Ljava/util/List;
            putstatic org.bouncycastle.tsp.TSPUtil.EMPTY_LIST:Ljava/util/List;
         1: .line 43
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
         2: .line 44
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
         3: .line 48
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.md5:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 16
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 49
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.oiw.OIWObjectIdentifiers.idSHA1:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 20
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         5: .line 50
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha224:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 28
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         6: .line 51
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha256:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 32
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         7: .line 52
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha384:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 48
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         8: .line 53
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha512:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 64
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
         9: .line 54
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers.ripemd128:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 16
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        10: .line 55
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers.ripemd160:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 20
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        11: .line 56
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers.ripemd256:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 32
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        12: .line 57
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers.gostR3411:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 32
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        13: .line 58
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.rosstandart.RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 32
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        14: .line 59
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.rosstandart.RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 64
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        15: .line 60
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.gm.GMObjectIdentifiers.sm3:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            bipush 32
            invokestatic org.bouncycastle.util.Integers.valueOf:(I)Ljava/lang/Integer;
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        16: .line 62
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.md5:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "MD5"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        17: .line 63
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.oiw.OIWObjectIdentifiers.idSHA1:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA1"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        18: .line 64
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha224:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA224"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        19: .line 65
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha256:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA256"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        20: .line 66
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha384:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA384"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        21: .line 67
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.nist.NISTObjectIdentifiers.id_sha512:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA512"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        22: .line 68
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.sha1WithRSAEncryption:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA1"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        23: .line 69
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.sha224WithRSAEncryption:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA224"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        24: .line 70
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.sha256WithRSAEncryption:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA256"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        25: .line 71
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.sha384WithRSAEncryption:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA384"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        26: .line 72
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.sha512WithRSAEncryption:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SHA512"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        27: .line 73
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers.ripemd128:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "RIPEMD128"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        28: .line 74
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers.ripemd160:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "RIPEMD160"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        29: .line 75
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.teletrust.TeleTrusTObjectIdentifiers.ripemd256:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "RIPEMD256"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        30: .line 76
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.cryptopro.CryptoProObjectIdentifiers.gostR3411:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "GOST3411"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        31: .line 77
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.rosstandart.RosstandartObjectIdentifiers.id_tc26_gost_3411_12_256:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "GOST3411-2012-256"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        32: .line 78
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.rosstandart.RosstandartObjectIdentifiers.id_tc26_gost_3411_12_512:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "GOST3411-2012-512"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        33: .line 79
            getstatic org.bouncycastle.tsp.TSPUtil.digestNames:Ljava/util/Map;
            getstatic org.bouncycastle.asn1.gm.GMObjectIdentifiers.sm3:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.asn1.ASN1ObjectIdentifier.getId:()Ljava/lang/String;
            ldc "SM3"
            invokeinterface java.util.Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        34: .line 80
            return
      LocalVariableTable:
        Start  End  Slot  Name  Signature

  public void <init>();
    descriptor: ()V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.tsp.TSPUtil this
         0: .line 39
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
            return
        end local 0 // org.bouncycastle.tsp.TSPUtil this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Lorg/bouncycastle/tsp/TSPUtil;

  public static java.util.Collection getSignatureTimestamps(org.bouncycastle.cms.SignerInformation, org.bouncycastle.operator.DigestCalculatorProvider);
    descriptor: (Lorg/bouncycastle/cms/SignerInformation;Lorg/bouncycastle/operator/DigestCalculatorProvider;)Ljava/util/Collection;
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=15, args_size=2
        start local 0 // org.bouncycastle.cms.SignerInformation signerInfo
        start local 1 // org.bouncycastle.operator.DigestCalculatorProvider digCalcProvider
         0: .line 95
            new java.util.ArrayList
            dup
            invokespecial java.util.ArrayList.<init>:()V
            astore 2 /* timestamps */
        start local 2 // java.util.List timestamps
         1: .line 97
            aload 0 /* signerInfo */
            invokevirtual org.bouncycastle.cms.SignerInformation.getUnsignedAttributes:()Lorg/bouncycastle/asn1/cms/AttributeTable;
            astore 3 /* unsignedAttrs */
        start local 3 // org.bouncycastle.asn1.cms.AttributeTable unsignedAttrs
         2: .line 98
            aload 3 /* unsignedAttrs */
            ifnull 32
         3: .line 100
            aload 3 /* unsignedAttrs */
         4: .line 101
            getstatic org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.id_aa_signatureTimeStampToken:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
         5: .line 100
            invokevirtual org.bouncycastle.asn1.cms.AttributeTable.getAll:(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)Lorg/bouncycastle/asn1/ASN1EncodableVector;
            astore 4 /* allTSAttrs */
        start local 4 // org.bouncycastle.asn1.ASN1EncodableVector allTSAttrs
         6: .line 102
            iconst_0
            istore 5 /* i */
        start local 5 // int i
         7: goto 31
         8: .line 104
      StackMap locals: org.bouncycastle.cms.SignerInformation org.bouncycastle.operator.DigestCalculatorProvider java.util.List org.bouncycastle.asn1.cms.AttributeTable org.bouncycastle.asn1.ASN1EncodableVector int
      StackMap stack:
            aload 4 /* allTSAttrs */
            iload 5 /* i */
            invokevirtual org.bouncycastle.asn1.ASN1EncodableVector.get:(I)Lorg/bouncycastle/asn1/ASN1Encodable;
            checkcast org.bouncycastle.asn1.cms.Attribute
            astore 6 /* tsAttr */
        start local 6 // org.bouncycastle.asn1.cms.Attribute tsAttr
         9: .line 105
            aload 6 /* tsAttr */
            invokevirtual org.bouncycastle.asn1.cms.Attribute.getAttrValues:()Lorg/bouncycastle/asn1/ASN1Set;
            astore 7 /* tsAttrValues */
        start local 7 // org.bouncycastle.asn1.ASN1Set tsAttrValues
        10: .line 106
            iconst_0
            istore 8 /* j */
        start local 8 // int j
        11: goto 29
        12: .line 110
      StackMap locals: org.bouncycastle.asn1.cms.Attribute org.bouncycastle.asn1.ASN1Set int
      StackMap stack:
            aload 7 /* tsAttrValues */
            iload 8 /* j */
            invokevirtual org.bouncycastle.asn1.ASN1Set.getObjectAt:(I)Lorg/bouncycastle/asn1/ASN1Encodable;
            invokestatic org.bouncycastle.asn1.cms.ContentInfo.getInstance:(Ljava/lang/Object;)Lorg/bouncycastle/asn1/cms/ContentInfo;
            astore 9 /* contentInfo */
        start local 9 // org.bouncycastle.asn1.cms.ContentInfo contentInfo
        13: .line 111
            new org.bouncycastle.tsp.TimeStampToken
            dup
            aload 9 /* contentInfo */
            invokespecial org.bouncycastle.tsp.TimeStampToken.<init>:(Lorg/bouncycastle/asn1/cms/ContentInfo;)V
            astore 10 /* timeStampToken */
        start local 10 // org.bouncycastle.tsp.TimeStampToken timeStampToken
        14: .line 112
            aload 10 /* timeStampToken */
            invokevirtual org.bouncycastle.tsp.TimeStampToken.getTimeStampInfo:()Lorg/bouncycastle/tsp/TimeStampTokenInfo;
            astore 11 /* tstInfo */
        start local 11 // org.bouncycastle.tsp.TimeStampTokenInfo tstInfo
        15: .line 114
            aload 1 /* digCalcProvider */
            aload 11 /* tstInfo */
            invokevirtual org.bouncycastle.tsp.TimeStampTokenInfo.getHashAlgorithm:()Lorg/bouncycastle/asn1/x509/AlgorithmIdentifier;
            invokeinterface org.bouncycastle.operator.DigestCalculatorProvider.get:(Lorg/bouncycastle/asn1/x509/AlgorithmIdentifier;)Lorg/bouncycastle/operator/DigestCalculator;
            astore 12 /* digCalc */
        start local 12 // org.bouncycastle.operator.DigestCalculator digCalc
        16: .line 116
            aload 12 /* digCalc */
            invokeinterface org.bouncycastle.operator.DigestCalculator.getOutputStream:()Ljava/io/OutputStream;
            astore 13 /* dOut */
        start local 13 // java.io.OutputStream dOut
        17: .line 118
            aload 13 /* dOut */
            aload 0 /* signerInfo */
            invokevirtual org.bouncycastle.cms.SignerInformation.getSignature:()[B
            invokevirtual java.io.OutputStream.write:([B)V
        18: .line 119
            aload 13 /* dOut */
            invokevirtual java.io.OutputStream.close:()V
        19: .line 121
            aload 12 /* digCalc */
            invokeinterface org.bouncycastle.operator.DigestCalculator.getDigest:()[B
            astore 14 /* expectedDigest */
        start local 14 // byte[] expectedDigest
        20: .line 123
            aload 14 /* expectedDigest */
            aload 11 /* tstInfo */
            invokevirtual org.bouncycastle.tsp.TimeStampTokenInfo.getMessageImprintDigest:()[B
            invokestatic org.bouncycastle.util.Arrays.constantTimeAreEqual:([B[B)Z
            ifne 22
        21: .line 125
            new org.bouncycastle.tsp.TSPValidationException
            dup
            ldc "Incorrect digest in message imprint"
            invokespecial org.bouncycastle.tsp.TSPValidationException.<init>:(Ljava/lang/String;)V
            athrow
        22: .line 128
      StackMap locals: org.bouncycastle.cms.SignerInformation org.bouncycastle.operator.DigestCalculatorProvider java.util.List org.bouncycastle.asn1.cms.AttributeTable org.bouncycastle.asn1.ASN1EncodableVector int org.bouncycastle.asn1.cms.Attribute org.bouncycastle.asn1.ASN1Set int org.bouncycastle.asn1.cms.ContentInfo org.bouncycastle.tsp.TimeStampToken org.bouncycastle.tsp.TimeStampTokenInfo org.bouncycastle.operator.DigestCalculator java.io.OutputStream byte[]
      StackMap stack:
            aload 2 /* timestamps */
            aload 10 /* timeStampToken */
            invokeinterface java.util.List.add:(Ljava/lang/Object;)Z
            pop
        end local 14 // byte[] expectedDigest
        end local 13 // java.io.OutputStream dOut
        end local 12 // org.bouncycastle.operator.DigestCalculator digCalc
        end local 11 // org.bouncycastle.tsp.TimeStampTokenInfo tstInfo
        end local 10 // org.bouncycastle.tsp.TimeStampToken timeStampToken
        end local 9 // org.bouncycastle.asn1.cms.ContentInfo contentInfo
        23: .line 129
            goto 28
        24: .line 130
      StackMap locals: org.bouncycastle.cms.SignerInformation org.bouncycastle.operator.DigestCalculatorProvider java.util.List org.bouncycastle.asn1.cms.AttributeTable org.bouncycastle.asn1.ASN1EncodableVector int org.bouncycastle.asn1.cms.Attribute org.bouncycastle.asn1.ASN1Set int
      StackMap stack: org.bouncycastle.operator.OperatorCreationException
            pop
        25: .line 132
            new org.bouncycastle.tsp.TSPValidationException
            dup
            ldc "Unknown hash algorithm specified in timestamp"
            invokespecial org.bouncycastle.tsp.TSPValidationException.<init>:(Ljava/lang/String;)V
            athrow
        26: .line 134
      StackMap locals:
      StackMap stack: java.lang.Exception
            pop
        27: .line 136
            new org.bouncycastle.tsp.TSPValidationException
            dup
            ldc "Timestamp could not be parsed"
            invokespecial org.bouncycastle.tsp.TSPValidationException.<init>:(Ljava/lang/String;)V
            athrow
        28: .line 106
      StackMap locals:
      StackMap stack:
            iinc 8 /* j */ 1
      StackMap locals:
      StackMap stack:
        29: iload 8 /* j */
            aload 7 /* tsAttrValues */
            invokevirtual org.bouncycastle.asn1.ASN1Set.size:()I
            if_icmplt 12
        end local 8 // int j
        end local 7 // org.bouncycastle.asn1.ASN1Set tsAttrValues
        end local 6 // org.bouncycastle.asn1.cms.Attribute tsAttr
        30: .line 102
            iinc 5 /* i */ 1
      StackMap locals:
      StackMap stack:
        31: iload 5 /* i */
            aload 4 /* allTSAttrs */
            invokevirtual org.bouncycastle.asn1.ASN1EncodableVector.size:()I
            if_icmplt 8
        end local 5 // int i
        end local 4 // org.bouncycastle.asn1.ASN1EncodableVector allTSAttrs
        32: .line 142
      StackMap locals:
      StackMap stack:
            aload 2 /* timestamps */
            areturn
        end local 3 // org.bouncycastle.asn1.cms.AttributeTable unsignedAttrs
        end local 2 // java.util.List timestamps
        end local 1 // org.bouncycastle.operator.DigestCalculatorProvider digCalcProvider
        end local 0 // org.bouncycastle.cms.SignerInformation signerInfo
      LocalVariableTable:
        Start  End  Slot             Name  Signature
            0   33     0       signerInfo  Lorg/bouncycastle/cms/SignerInformation;
            0   33     1  digCalcProvider  Lorg/bouncycastle/operator/DigestCalculatorProvider;
            1   33     2       timestamps  Ljava/util/List;
            2   33     3    unsignedAttrs  Lorg/bouncycastle/asn1/cms/AttributeTable;
            6   32     4       allTSAttrs  Lorg/bouncycastle/asn1/ASN1EncodableVector;
            7   32     5                i  I
            9   30     6           tsAttr  Lorg/bouncycastle/asn1/cms/Attribute;
           10   30     7     tsAttrValues  Lorg/bouncycastle/asn1/ASN1Set;
           11   30     8                j  I
           13   23     9      contentInfo  Lorg/bouncycastle/asn1/cms/ContentInfo;
           14   23    10   timeStampToken  Lorg/bouncycastle/tsp/TimeStampToken;
           15   23    11          tstInfo  Lorg/bouncycastle/tsp/TimeStampTokenInfo;
           16   23    12          digCalc  Lorg/bouncycastle/operator/DigestCalculator;
           17   23    13             dOut  Ljava/io/OutputStream;
           20   23    14   expectedDigest  [B
      Exception table:
        from    to  target  type
          12    23      24  Class org.bouncycastle.operator.OperatorCreationException
          12    23      26  Class java.lang.Exception
    Exceptions:
      throws org.bouncycastle.tsp.TSPValidationException
    MethodParameters:
                 Name  Flags
      signerInfo       
      digCalcProvider  

  public static void validateCertificate(org.bouncycastle.cert.X509CertificateHolder);
    descriptor: (Lorg/bouncycastle/cert/X509CertificateHolder;)V
    flags: (0x0009) ACC_PUBLIC, ACC_STATIC
    Code:
      stack=3, locals=3, args_size=1
        start local 0 // org.bouncycastle.cert.X509CertificateHolder cert
         0: .line 157
            aload 0 /* cert */
            invokevirtual org.bouncycastle.cert.X509CertificateHolder.toASN1Structure:()Lorg/bouncycastle/asn1/x509/Certificate;
            invokevirtual org.bouncycastle.asn1.x509.Certificate.getVersionNumber:()I
            iconst_3
            if_icmpeq 2
         1: .line 159
            new java.lang.IllegalArgumentException
            dup
            ldc "Certificate must have an ExtendedKeyUsage extension."
            invokespecial java.lang.IllegalArgumentException.<init>:(Ljava/lang/String;)V
            athrow
         2: .line 162
      StackMap locals:
      StackMap stack:
            aload 0 /* cert */
            getstatic org.bouncycastle.asn1.x509.Extension.extendedKeyUsage:Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokevirtual org.bouncycastle.cert.X509CertificateHolder.getExtension:(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)Lorg/bouncycastle/asn1/x509/Extension;
            astore 1 /* ext */
        start local 1 // org.bouncycastle.asn1.x509.Extension ext
         3: .line 163
            aload 1 /* ext */
            ifnonnull 5
         4: .line 165
            new org.bouncycastle.tsp.TSPValidationException
            dup
            ldc "Certificate must have an ExtendedKeyUsage extension."
            invokespecial org.bouncycastle.tsp.TSPValidationException.<init>:(Ljava/lang/String;)V
            athrow
         5: .line 168
      StackMap locals: org.bouncycastle.asn1.x509.Extension
      StackMap stack:
            aload 1 /* ext */
            invokevirtual org.bouncycastle.asn1.x509.Extension.isCritical:()Z
            ifne 7
         6: .line 170
            new org.bouncycastle.tsp.TSPValidationException
            dup
            ldc "Certificate must have an ExtendedKeyUsage extension marked as critical."
            invokespecial org.bouncycastle.tsp.TSPValidationException.<init>:(Ljava/lang/String;)V
            athrow
         7: .line 173
      StackMap locals:
      StackMap stack:
            aload 1 /* ext */
            invokevirtual org.bouncycastle.asn1.x509.Extension.getParsedValue:()Lorg/bouncycastle/asn1/ASN1Encodable;
            invokestatic org.bouncycastle.asn1.x509.ExtendedKeyUsage.getInstance:(Ljava/lang/Object;)Lorg/bouncycastle/asn1/x509/ExtendedKeyUsage;
            astore 2 /* extKey */
        start local 2 // org.bouncycastle.asn1.x509.ExtendedKeyUsage extKey
         8: .line 175
            aload 2 /* extKey */
            getstatic org.bouncycastle.asn1.x509.KeyPurposeId.id_kp_timeStamping:Lorg/bouncycastle/asn1/x509/KeyPurposeId;
            invokevirtual org.bouncycastle.asn1.x509.ExtendedKeyUsage.hasKeyPurposeId:(Lorg/bouncycastle/asn1/x509/KeyPurposeId;)Z
            ifeq 9
            aload 2 /* extKey */
            invokevirtual org.bouncycastle.asn1.x509.ExtendedKeyUsage.size:()I
            iconst_1
            if_icmpeq 10
         9: .line 177
      StackMap locals: org.bouncycastle.asn1.x509.ExtendedKeyUsage
      StackMap stack:
            new org.bouncycastle.tsp.TSPValidationException
            dup
            ldc "ExtendedKeyUsage not solely time stamping."
            invokespecial org.bouncycastle.tsp.TSPValidationException.<init>:(Ljava/lang/String;)V
            athrow
        10: .line 179
      StackMap locals:
      StackMap stack:
            return
        end local 2 // org.bouncycastle.asn1.x509.ExtendedKeyUsage extKey
        end local 1 // org.bouncycastle.asn1.x509.Extension ext
        end local 0 // org.bouncycastle.cert.X509CertificateHolder cert
      LocalVariableTable:
        Start  End  Slot    Name  Signature
            0   11     0    cert  Lorg/bouncycastle/cert/X509CertificateHolder;
            3   11     1     ext  Lorg/bouncycastle/asn1/x509/Extension;
            8   11     2  extKey  Lorg/bouncycastle/asn1/x509/ExtendedKeyUsage;
    Exceptions:
      throws org.bouncycastle.tsp.TSPValidationException
    MethodParameters:
      Name  Flags
      cert  

  static int getDigestLength(java.lang.String);
    descriptor: (Ljava/lang/String;)I
    flags: (0x0008) ACC_STATIC
    Code:
      stack=3, locals=2, args_size=1
        start local 0 // java.lang.String digestAlgOID
         0: .line 185
            getstatic org.bouncycastle.tsp.TSPUtil.digestLengths:Ljava/util/Map;
            aload 0 /* digestAlgOID */
            invokeinterface java.util.Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
            checkcast java.lang.Integer
            astore 1 /* length */
        start local 1 // java.lang.Integer length
         1: .line 187
            aload 1 /* length */
            ifnull 3
         2: .line 189
            aload 1 /* length */
            invokevirtual java.lang.Integer.intValue:()I
            ireturn
         3: .line 192
      StackMap locals: java.lang.Integer
      StackMap stack:
            new org.bouncycastle.tsp.TSPException
            dup
            ldc "digest algorithm cannot be found."
            invokespecial org.bouncycastle.tsp.TSPException.<init>:(Ljava/lang/String;)V
            athrow
        end local 1 // java.lang.Integer length
        end local 0 // java.lang.String digestAlgOID
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    4     0  digestAlgOID  Ljava/lang/String;
            1    4     1        length  Ljava/lang/Integer;
    Exceptions:
      throws org.bouncycastle.tsp.TSPException
    MethodParameters:
              Name  Flags
      digestAlgOID  

  static java.util.List getExtensionOIDs(org.bouncycastle.asn1.x509.Extensions);
    descriptor: (Lorg/bouncycastle/asn1/x509/Extensions;)Ljava/util/List;
    flags: (0x0008) ACC_STATIC
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // org.bouncycastle.asn1.x509.Extensions extensions
         0: .line 197
            aload 0 /* extensions */
            ifnonnull 2
         1: .line 199
            getstatic org.bouncycastle.tsp.TSPUtil.EMPTY_LIST:Ljava/util/List;
            areturn
         2: .line 202
      StackMap locals:
      StackMap stack:
            aload 0 /* extensions */
            invokevirtual org.bouncycastle.asn1.x509.Extensions.getExtensionOIDs:()[Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            invokestatic java.util.Arrays.asList:([Ljava/lang/Object;)Ljava/util/List;
            invokestatic java.util.Collections.unmodifiableList:(Ljava/util/List;)Ljava/util/List;
            areturn
        end local 0 // org.bouncycastle.asn1.x509.Extensions extensions
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0    3     0  extensions  Lorg/bouncycastle/asn1/x509/Extensions;
    MethodParameters:
            Name  Flags
      extensions  

  static void addExtension(org.bouncycastle.asn1.x509.ExtensionsGenerator, org.bouncycastle.asn1.ASN1ObjectIdentifier, boolean, org.bouncycastle.asn1.ASN1Encodable);
    descriptor: (Lorg/bouncycastle/asn1/x509/ExtensionsGenerator;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;ZLorg/bouncycastle/asn1/ASN1Encodable;)V
    flags: (0x0008) ACC_STATIC
    Code:
      stack=5, locals=5, args_size=4
        start local 0 // org.bouncycastle.asn1.x509.ExtensionsGenerator extGenerator
        start local 1 // org.bouncycastle.asn1.ASN1ObjectIdentifier oid
        start local 2 // boolean isCritical
        start local 3 // org.bouncycastle.asn1.ASN1Encodable value
         0: .line 210
            aload 0 /* extGenerator */
            aload 1 /* oid */
            iload 2 /* isCritical */
            aload 3 /* value */
            invokevirtual org.bouncycastle.asn1.x509.ExtensionsGenerator.addExtension:(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;ZLorg/bouncycastle/asn1/ASN1Encodable;)V
         1: .line 211
            goto 4
         2: .line 212
      StackMap locals:
      StackMap stack: java.io.IOException
            astore 4 /* e */
        start local 4 // java.io.IOException e
         3: .line 214
            new org.bouncycastle.tsp.TSPIOException
            dup
            new java.lang.StringBuilder
            dup
            ldc "cannot encode extension: "
            invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
            aload 4 /* e */
            invokevirtual java.io.IOException.getMessage:()Ljava/lang/String;
            invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
            invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
            aload 4 /* e */
            invokespecial org.bouncycastle.tsp.TSPIOException.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
            athrow
        end local 4 // java.io.IOException e
         4: .line 216
      StackMap locals:
      StackMap stack:
            return
        end local 3 // org.bouncycastle.asn1.ASN1Encodable value
        end local 2 // boolean isCritical
        end local 1 // org.bouncycastle.asn1.ASN1ObjectIdentifier oid
        end local 0 // org.bouncycastle.asn1.x509.ExtensionsGenerator extGenerator
      LocalVariableTable:
        Start  End  Slot          Name  Signature
            0    5     0  extGenerator  Lorg/bouncycastle/asn1/x509/ExtensionsGenerator;
            0    5     1           oid  Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;
            0    5     2    isCritical  Z
            0    5     3         value  Lorg/bouncycastle/asn1/ASN1Encodable;
            3    4     4             e  Ljava/io/IOException;
      Exception table:
        from    to  target  type
           0     1       2  Class java.io.IOException
    Exceptions:
      throws org.bouncycastle.tsp.TSPIOException
    MethodParameters:
              Name  Flags
      extGenerator  
      oid           
      isCritical    
      value         
}
SourceFile: "TSPUtil.java"