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

package org.bouncycastle.jcajce;

import java.io.IOException;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.asn1.x509.SubjectPublicKeyInfo;
import org.bouncycastle.asn1.bc.BCObjectIdentifiers;
import org.bouncycastle.asn1.bc.ExternalValue;
import org.bouncycastle.jcajce.util.MessageDigestUtils;
import java.security.MessageDigest;
import org.bouncycastle.util.Arrays;
import org.bouncycastle.asn1.x509.AlgorithmIdentifier;
import org.bouncycastle.asn1.x509.GeneralName;
import java.security.PublicKey;

public class ExternalPublicKey implements PublicKey
{
    private final GeneralName location;
    private final AlgorithmIdentifier digestAlg;
    private final byte[] digest;
    
    public ExternalPublicKey(final GeneralName location, final AlgorithmIdentifier digestAlg, final byte[] array) {
        this.location = location;
        this.digestAlg = digestAlg;
        this.digest = Arrays.clone(array);
    }
    
    public ExternalPublicKey(final PublicKey publicKey, final GeneralName generalName, final MessageDigest messageDigest) {
        this(generalName, MessageDigestUtils.getDigestAlgID(messageDigest.getAlgorithm()), messageDigest.digest(publicKey.getEncoded()));
    }
    
    public ExternalPublicKey(final ExternalValue externalValue) {
        this(externalValue.getLocation(), externalValue.getHashAlg(), externalValue.getHashValue());
    }
    
    @Override
    public String getAlgorithm() {
        return "ExternalKey";
    }
    
    @Override
    public String getFormat() {
        return "X.509";
    }
    
    @Override
    public byte[] getEncoded() {
        try {
            return new SubjectPublicKeyInfo(new AlgorithmIdentifier(BCObjectIdentifiers.external_value), new ExternalValue(this.location, this.digestAlg, this.digest)).getEncoded("DER");
        }
        catch (final IOException ex) {
            throw new IllegalStateException("unable to encode composite key: " + ex.getMessage());
        }
    }
}
