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

package org.bouncycastle.crypto.parsers;

import org.bouncycastle.math.ec.ECCurve;
import org.bouncycastle.crypto.params.ECPublicKeyParameters;
import org.bouncycastle.util.io.Streams;
import java.io.IOException;
import java.io.EOFException;
import org.bouncycastle.crypto.params.AsymmetricKeyParameter;
import java.io.InputStream;
import org.bouncycastle.crypto.params.ECDomainParameters;
import org.bouncycastle.crypto.KeyParser;

public class ECIESPublicKeyParser implements KeyParser
{
    private ECDomainParameters ecParams;
    
    public ECIESPublicKeyParser(final ECDomainParameters ecParams) {
        this.ecParams = ecParams;
    }
    
    @Override
    public AsymmetricKeyParameter readKey(final InputStream inputStream) throws IOException {
        final int read = inputStream.read();
        if (read < 0) {
            throw new EOFException();
        }
        boolean b = false;
        switch (read) {
            case 0: {
                throw new IOException("Sender's public key invalid.");
            }
            case 2:
            case 3: {
                b = true;
                break;
            }
            case 4:
            case 6:
            case 7: {
                b = false;
                break;
            }
            default: {
                throw new IOException("Sender's public key has invalid point encoding 0x" + Integer.toString(read, 16));
            }
        }
        final ECCurve curve = this.ecParams.getCurve();
        final int affinePointEncodingLength = curve.getAffinePointEncodingLength(b);
        final byte[] array = new byte[affinePointEncodingLength];
        array[0] = (byte)read;
        final int n = affinePointEncodingLength - 1;
        if (Streams.readFully(inputStream, array, 1, n) != n) {
            throw new EOFException();
        }
        return new ECPublicKeyParameters(curve.decodePoint(array), this.ecParams);
    }
}
