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

package org.bouncycastle.crypto.agreement;

import java.math.BigInteger;
import org.bouncycastle.crypto.params.X448PrivateKeyParameters;
import org.bouncycastle.crypto.params.X25519PrivateKeyParameters;
import org.bouncycastle.crypto.CipherParameters;
import org.bouncycastle.crypto.RawAgreement;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import org.bouncycastle.crypto.BasicAgreement;

public class XDHBasicAgreement implements BasicAgreement
{
    private AsymmetricKeyParameter key;
    private RawAgreement agreement;
    private int fieldSize;
    
    public XDHBasicAgreement() {
        this.fieldSize = 0;
    }
    
    @Override
    public void init(final CipherParameters cipherParameters) {
        if (cipherParameters instanceof X25519PrivateKeyParameters) {
            this.fieldSize = 32;
            this.agreement = new X25519Agreement();
        }
        else {
            if (!(cipherParameters instanceof X448PrivateKeyParameters)) {
                throw new IllegalArgumentException("key is neither X25519 nor X448");
            }
            this.fieldSize = 56;
            this.agreement = new X448Agreement();
        }
        this.key = (AsymmetricKeyParameter)cipherParameters;
        this.agreement.init(cipherParameters);
    }
    
    @Override
    public int getFieldSize() {
        return this.fieldSize;
    }
    
    @Override
    public BigInteger calculateAgreement(final CipherParameters cipherParameters) {
        final byte[] magnitude = new byte[this.fieldSize];
        this.agreement.calculateAgreement(cipherParameters, magnitude, 0);
        return new BigInteger(1, magnitude);
    }
}
