// 
// Decompiled by Procyon v0.6.0
// 

package org.bouncycastle.crypto.agreement;

import java.math.BigInteger;
import org.bouncycastle.util.BigIntegers;
import org.bouncycastle.crypto.params.ECDHUPublicParameters;
import org.bouncycastle.crypto.CryptoServicesRegistrar;
import org.bouncycastle.crypto.params.ECKeyParameters;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.params.ECDHUPrivateParameters;

public class ECDHCUnifiedAgreement
{
    private ECDHUPrivateParameters privParams;
    
    public void init(final CipherParameters cipherParameters) {
        this.privParams = (ECDHUPrivateParameters)cipherParameters;
        CryptoServicesRegistrar.checkConstraints(Utils.getDefaultProperties("ECCDHU", this.privParams.getStaticPrivateKey()));
    }
    
    public int getFieldSize() {
        return this.privParams.getStaticPrivateKey().getParameters().getCurve().getFieldElementEncodingLength();
    }
    
    public byte[] calculateAgreement(final CipherParameters cipherParameters) {
        final ECDHUPublicParameters ecdhuPublicParameters = (ECDHUPublicParameters)cipherParameters;
        final ECDHCBasicAgreement ecdhcBasicAgreement = new ECDHCBasicAgreement();
        final ECDHCBasicAgreement ecdhcBasicAgreement2 = new ECDHCBasicAgreement();
        ecdhcBasicAgreement.init(this.privParams.getStaticPrivateKey());
        final BigInteger calculateAgreement = ecdhcBasicAgreement.calculateAgreement(ecdhuPublicParameters.getStaticPublicKey());
        ecdhcBasicAgreement2.init(this.privParams.getEphemeralPrivateKey());
        final BigInteger calculateAgreement2 = ecdhcBasicAgreement2.calculateAgreement(ecdhuPublicParameters.getEphemeralPublicKey());
        final int fieldSize = this.getFieldSize();
        final byte[] array = new byte[fieldSize * 2];
        BigIntegers.asUnsignedByteArray(calculateAgreement2, array, 0, fieldSize);
        BigIntegers.asUnsignedByteArray(calculateAgreement, array, fieldSize, fieldSize);
        return array;
    }
}
