public class org.bouncycastle.crypto.agreement.ECMQVBasicAgreement implements org.bouncycastle.crypto.BasicAgreement
  minor version: 0
  major version: 59
  flags: flags: (0x0021) ACC_PUBLIC, ACC_SUPER
  this_class: org.bouncycastle.crypto.agreement.ECMQVBasicAgreement
  super_class: java.lang.Object
{
  org.bouncycastle.crypto.params.MQVPrivateParameters privParams;
    descriptor: Lorg/bouncycastle/crypto/params/MQVPrivateParameters;
    flags: (0x0000) 

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

  public void init(org.bouncycastle.crypto.CipherParameters);
    descriptor: (Lorg/bouncycastle/crypto/CipherParameters;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=2, locals=2, args_size=2
        start local 0 // org.bouncycastle.crypto.agreement.ECMQVBasicAgreement this
        start local 1 // org.bouncycastle.crypto.CipherParameters key
         0: .line 24
            aload 0 /* this */
            aload 1 /* key */
            checkcast org.bouncycastle.crypto.params.MQVPrivateParameters
            putfield org.bouncycastle.crypto.agreement.ECMQVBasicAgreement.privParams:Lorg/bouncycastle/crypto/params/MQVPrivateParameters;
         1: .line 25
            return
        end local 1 // org.bouncycastle.crypto.CipherParameters key
        end local 0 // org.bouncycastle.crypto.agreement.ECMQVBasicAgreement this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    2     0  this  Lorg/bouncycastle/crypto/agreement/ECMQVBasicAgreement;
            0    2     1   key  Lorg/bouncycastle/crypto/CipherParameters;
    MethodParameters:
      Name  Flags
      key   

  public java.math.BigInteger calculateAgreement(org.bouncycastle.crypto.CipherParameters);
    descriptor: (Lorg/bouncycastle/crypto/CipherParameters;)Ljava/math/BigInteger;
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=7, locals=5, args_size=2
        start local 0 // org.bouncycastle.crypto.agreement.ECMQVBasicAgreement this
        start local 1 // org.bouncycastle.crypto.CipherParameters pubKey
         0: .line 29
            aload 1 /* pubKey */
            checkcast org.bouncycastle.crypto.params.MQVPublicParameters
            astore 2 /* pubParams */
        start local 2 // org.bouncycastle.crypto.params.MQVPublicParameters pubParams
         1: .line 31
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.ECMQVBasicAgreement.privParams:Lorg/bouncycastle/crypto/params/MQVPrivateParameters;
            invokevirtual org.bouncycastle.crypto.params.MQVPrivateParameters.getStaticPrivateKey:()Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;
            astore 3 /* staticPrivateKey */
        start local 3 // org.bouncycastle.crypto.params.ECPrivateKeyParameters staticPrivateKey
         2: .line 33
            aload 0 /* this */
            aload 3 /* staticPrivateKey */
            invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getParameters:()Lorg/bouncycastle/crypto/params/ECDomainParameters;
            aload 3 /* staticPrivateKey */
         3: .line 34
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.ECMQVBasicAgreement.privParams:Lorg/bouncycastle/crypto/params/MQVPrivateParameters;
            invokevirtual org.bouncycastle.crypto.params.MQVPrivateParameters.getEphemeralPrivateKey:()Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;
            aload 0 /* this */
            getfield org.bouncycastle.crypto.agreement.ECMQVBasicAgreement.privParams:Lorg/bouncycastle/crypto/params/MQVPrivateParameters;
            invokevirtual org.bouncycastle.crypto.params.MQVPrivateParameters.getEphemeralPublicKey:()Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
         4: .line 35
            aload 2 /* pubParams */
            invokevirtual org.bouncycastle.crypto.params.MQVPublicParameters.getStaticPublicKey:()Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
            aload 2 /* pubParams */
            invokevirtual org.bouncycastle.crypto.params.MQVPublicParameters.getEphemeralPublicKey:()Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
         5: .line 33
            invokevirtual org.bouncycastle.crypto.agreement.ECMQVBasicAgreement.calculateMqvAgreement:(Lorg/bouncycastle/crypto/params/ECDomainParameters;Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;)Lorg/bouncycastle/math/ec/ECPoint;
            astore 4 /* agreement */
        start local 4 // org.bouncycastle.math.ec.ECPoint agreement
         6: .line 37
            aload 4 /* agreement */
            invokevirtual org.bouncycastle.math.ec.ECPoint.getX:()Lorg/bouncycastle/math/ec/ECFieldElement;
            invokevirtual org.bouncycastle.math.ec.ECFieldElement.toBigInteger:()Ljava/math/BigInteger;
            areturn
        end local 4 // org.bouncycastle.math.ec.ECPoint agreement
        end local 3 // org.bouncycastle.crypto.params.ECPrivateKeyParameters staticPrivateKey
        end local 2 // org.bouncycastle.crypto.params.MQVPublicParameters pubParams
        end local 1 // org.bouncycastle.crypto.CipherParameters pubKey
        end local 0 // org.bouncycastle.crypto.agreement.ECMQVBasicAgreement this
      LocalVariableTable:
        Start  End  Slot              Name  Signature
            0    7     0              this  Lorg/bouncycastle/crypto/agreement/ECMQVBasicAgreement;
            0    7     1            pubKey  Lorg/bouncycastle/crypto/CipherParameters;
            1    7     2         pubParams  Lorg/bouncycastle/crypto/params/MQVPublicParameters;
            2    7     3  staticPrivateKey  Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;
            6    7     4         agreement  Lorg/bouncycastle/math/ec/ECPoint;
    MethodParameters:
        Name  Flags
      pubKey  

  private org.bouncycastle.math.ec.ECPoint calculateMqvAgreement(org.bouncycastle.crypto.params.ECDomainParameters, org.bouncycastle.crypto.params.ECPrivateKeyParameters, org.bouncycastle.crypto.params.ECPrivateKeyParameters, org.bouncycastle.crypto.params.ECPublicKeyParameters, org.bouncycastle.crypto.params.ECPublicKeyParameters, org.bouncycastle.crypto.params.ECPublicKeyParameters);
    descriptor: (Lorg/bouncycastle/crypto/params/ECDomainParameters;Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;)Lorg/bouncycastle/math/ec/ECPoint;
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=4, locals=20, args_size=7
        start local 0 // org.bouncycastle.crypto.agreement.ECMQVBasicAgreement this
        start local 1 // org.bouncycastle.crypto.params.ECDomainParameters parameters
        start local 2 // org.bouncycastle.crypto.params.ECPrivateKeyParameters d1U
        start local 3 // org.bouncycastle.crypto.params.ECPrivateKeyParameters d2U
        start local 4 // org.bouncycastle.crypto.params.ECPublicKeyParameters Q2U
        start local 5 // org.bouncycastle.crypto.params.ECPublicKeyParameters Q1V
        start local 6 // org.bouncycastle.crypto.params.ECPublicKeyParameters Q2V
         0: .line 49
            aload 1 /* parameters */
            invokevirtual org.bouncycastle.crypto.params.ECDomainParameters.getN:()Ljava/math/BigInteger;
            astore 7 /* n */
        start local 7 // java.math.BigInteger n
         1: .line 50
            aload 7 /* n */
            invokevirtual java.math.BigInteger.bitLength:()I
            iconst_1
            iadd
            iconst_2
            idiv
            istore 8 /* e */
        start local 8 // int e
         2: .line 51
            getstatic org.bouncycastle.math.ec.ECConstants.ONE:Ljava/math/BigInteger;
            iload 8 /* e */
            invokevirtual java.math.BigInteger.shiftLeft:(I)Ljava/math/BigInteger;
            astore 9 /* powE */
        start local 9 // java.math.BigInteger powE
         3: .line 55
            aload 4 /* Q2U */
            ifnonnull 6
         4: .line 57
            aload 1 /* parameters */
            invokevirtual org.bouncycastle.crypto.params.ECDomainParameters.getG:()Lorg/bouncycastle/math/ec/ECPoint;
            aload 3 /* d2U */
            invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getD:()Ljava/math/BigInteger;
            invokevirtual org.bouncycastle.math.ec.ECPoint.multiply:(Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
            astore 10 /* q */
        start local 10 // org.bouncycastle.math.ec.ECPoint q
         5: .line 58
            goto 7
        end local 10 // org.bouncycastle.math.ec.ECPoint q
         6: .line 61
      StackMap locals: java.math.BigInteger int java.math.BigInteger
      StackMap stack:
            aload 4 /* Q2U */
            invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getQ:()Lorg/bouncycastle/math/ec/ECPoint;
            astore 10 /* q */
        start local 10 // org.bouncycastle.math.ec.ECPoint q
         7: .line 64
      StackMap locals: org.bouncycastle.math.ec.ECPoint
      StackMap stack:
            aload 10 /* q */
            invokevirtual org.bouncycastle.math.ec.ECPoint.getX:()Lorg/bouncycastle/math/ec/ECFieldElement;
            invokevirtual org.bouncycastle.math.ec.ECFieldElement.toBigInteger:()Ljava/math/BigInteger;
            astore 11 /* x */
        start local 11 // java.math.BigInteger x
         8: .line 65
            aload 11 /* x */
            aload 9 /* powE */
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 12 /* xBar */
        start local 12 // java.math.BigInteger xBar
         9: .line 66
            aload 12 /* xBar */
            iload 8 /* e */
            invokevirtual java.math.BigInteger.setBit:(I)Ljava/math/BigInteger;
            astore 13 /* Q2UBar */
        start local 13 // java.math.BigInteger Q2UBar
        10: .line 67
            aload 2 /* d1U */
            invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getD:()Ljava/math/BigInteger;
            aload 13 /* Q2UBar */
            invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 7 /* n */
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 3 /* d2U */
            invokevirtual org.bouncycastle.crypto.params.ECPrivateKeyParameters.getD:()Ljava/math/BigInteger;
            invokevirtual java.math.BigInteger.add:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 7 /* n */
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 14 /* s */
        start local 14 // java.math.BigInteger s
        11: .line 69
            aload 6 /* Q2V */
            invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getQ:()Lorg/bouncycastle/math/ec/ECPoint;
            invokevirtual org.bouncycastle.math.ec.ECPoint.getX:()Lorg/bouncycastle/math/ec/ECFieldElement;
            invokevirtual org.bouncycastle.math.ec.ECFieldElement.toBigInteger:()Ljava/math/BigInteger;
            astore 15 /* xPrime */
        start local 15 // java.math.BigInteger xPrime
        12: .line 70
            aload 15 /* xPrime */
            aload 9 /* powE */
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 16 /* xPrimeBar */
        start local 16 // java.math.BigInteger xPrimeBar
        13: .line 71
            aload 16 /* xPrimeBar */
            iload 8 /* e */
            invokevirtual java.math.BigInteger.setBit:(I)Ljava/math/BigInteger;
            astore 17 /* Q2VBar */
        start local 17 // java.math.BigInteger Q2VBar
        14: .line 73
            aload 1 /* parameters */
            invokevirtual org.bouncycastle.crypto.params.ECDomainParameters.getH:()Ljava/math/BigInteger;
            aload 14 /* s */
            invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 7 /* n */
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            astore 18 /* hs */
        start local 18 // java.math.BigInteger hs
        15: .line 77
            aload 5 /* Q1V */
            invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getQ:()Lorg/bouncycastle/math/ec/ECPoint;
            aload 17 /* Q2VBar */
            aload 18 /* hs */
            invokevirtual java.math.BigInteger.multiply:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 7 /* n */
            invokevirtual java.math.BigInteger.mod:(Ljava/math/BigInteger;)Ljava/math/BigInteger;
            aload 6 /* Q2V */
            invokevirtual org.bouncycastle.crypto.params.ECPublicKeyParameters.getQ:()Lorg/bouncycastle/math/ec/ECPoint;
            aload 18 /* hs */
        16: .line 76
            invokestatic org.bouncycastle.math.ec.ECAlgorithms.sumOfTwoMultiplies:(Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;Lorg/bouncycastle/math/ec/ECPoint;Ljava/math/BigInteger;)Lorg/bouncycastle/math/ec/ECPoint;
            astore 19 /* p */
        start local 19 // org.bouncycastle.math.ec.ECPoint p
        17: .line 79
            aload 19 /* p */
            invokevirtual org.bouncycastle.math.ec.ECPoint.isInfinity:()Z
            ifeq 19
        18: .line 81
            new java.lang.IllegalStateException
            dup
            ldc "Infinity is not a valid agreement value for MQV"
            invokespecial java.lang.IllegalStateException.<init>:(Ljava/lang/String;)V
            athrow
        19: .line 84
      StackMap locals: org.bouncycastle.crypto.agreement.ECMQVBasicAgreement org.bouncycastle.crypto.params.ECDomainParameters org.bouncycastle.crypto.params.ECPrivateKeyParameters org.bouncycastle.crypto.params.ECPrivateKeyParameters org.bouncycastle.crypto.params.ECPublicKeyParameters org.bouncycastle.crypto.params.ECPublicKeyParameters org.bouncycastle.crypto.params.ECPublicKeyParameters java.math.BigInteger int java.math.BigInteger org.bouncycastle.math.ec.ECPoint java.math.BigInteger java.math.BigInteger java.math.BigInteger java.math.BigInteger java.math.BigInteger java.math.BigInteger java.math.BigInteger java.math.BigInteger org.bouncycastle.math.ec.ECPoint
      StackMap stack:
            aload 19 /* p */
            areturn
        end local 19 // org.bouncycastle.math.ec.ECPoint p
        end local 18 // java.math.BigInteger hs
        end local 17 // java.math.BigInteger Q2VBar
        end local 16 // java.math.BigInteger xPrimeBar
        end local 15 // java.math.BigInteger xPrime
        end local 14 // java.math.BigInteger s
        end local 13 // java.math.BigInteger Q2UBar
        end local 12 // java.math.BigInteger xBar
        end local 11 // java.math.BigInteger x
        end local 10 // org.bouncycastle.math.ec.ECPoint q
        end local 9 // java.math.BigInteger powE
        end local 8 // int e
        end local 7 // java.math.BigInteger n
        end local 6 // org.bouncycastle.crypto.params.ECPublicKeyParameters Q2V
        end local 5 // org.bouncycastle.crypto.params.ECPublicKeyParameters Q1V
        end local 4 // org.bouncycastle.crypto.params.ECPublicKeyParameters Q2U
        end local 3 // org.bouncycastle.crypto.params.ECPrivateKeyParameters d2U
        end local 2 // org.bouncycastle.crypto.params.ECPrivateKeyParameters d1U
        end local 1 // org.bouncycastle.crypto.params.ECDomainParameters parameters
        end local 0 // org.bouncycastle.crypto.agreement.ECMQVBasicAgreement this
      LocalVariableTable:
        Start  End  Slot        Name  Signature
            0   20     0        this  Lorg/bouncycastle/crypto/agreement/ECMQVBasicAgreement;
            0   20     1  parameters  Lorg/bouncycastle/crypto/params/ECDomainParameters;
            0   20     2         d1U  Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;
            0   20     3         d2U  Lorg/bouncycastle/crypto/params/ECPrivateKeyParameters;
            0   20     4         Q2U  Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
            0   20     5         Q1V  Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
            0   20     6         Q2V  Lorg/bouncycastle/crypto/params/ECPublicKeyParameters;
            1   20     7           n  Ljava/math/BigInteger;
            2   20     8           e  I
            3   20     9        powE  Ljava/math/BigInteger;
            5    6    10           q  Lorg/bouncycastle/math/ec/ECPoint;
            7   20    10           q  Lorg/bouncycastle/math/ec/ECPoint;
            8   20    11           x  Ljava/math/BigInteger;
            9   20    12        xBar  Ljava/math/BigInteger;
           10   20    13      Q2UBar  Ljava/math/BigInteger;
           11   20    14           s  Ljava/math/BigInteger;
           12   20    15      xPrime  Ljava/math/BigInteger;
           13   20    16   xPrimeBar  Ljava/math/BigInteger;
           14   20    17      Q2VBar  Ljava/math/BigInteger;
           15   20    18          hs  Ljava/math/BigInteger;
           17   20    19           p  Lorg/bouncycastle/math/ec/ECPoint;
    MethodParameters:
            Name  Flags
      parameters  
      d1U         
      d2U         
      Q2U         
      Q1V         
      Q2V         
}
SourceFile: "ECMQVBasicAgreement.java"