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

package org.bouncycastle.its;

import java.io.IOException;
import java.io.OutputStream;
import org.bouncycastle.operator.ContentVerifier;
import org.bouncycastle.its.operator.ECDSAEncoder;
import org.bouncycastle.asn1.ASN1Encodable;
import org.bouncycastle.oer.OEREncoder;
import org.bouncycastle.oer.its.template.ieee1609dot2.IEEE1609dot2;
import org.bouncycastle.its.operator.ITSContentVerifierProvider;
import org.bouncycastle.oer.its.ieee1609dot2.basetypes.PublicEncryptionKey;
import org.bouncycastle.oer.its.ieee1609dot2.IssuerIdentifier;
import org.bouncycastle.oer.its.ieee1609dot2.CertificateBase;
import org.bouncycastle.util.Encodable;

public class ITSCertificate implements Encodable
{
    private final CertificateBase certificate;
    
    public ITSCertificate(final CertificateBase certificate) {
        this.certificate = certificate;
    }
    
    public IssuerIdentifier getIssuer() {
        return this.certificate.getIssuer();
    }
    
    public ITSValidityPeriod getValidityPeriod() {
        return new ITSValidityPeriod(this.certificate.getToBeSigned().getValidityPeriod());
    }
    
    public ITSPublicEncryptionKey getPublicEncryptionKey() {
        final PublicEncryptionKey encryptionKey = this.certificate.getToBeSigned().getEncryptionKey();
        if (encryptionKey != null) {
            return new ITSPublicEncryptionKey(encryptionKey);
        }
        return null;
    }
    
    public boolean isSignatureValid(final ITSContentVerifierProvider itsContentVerifierProvider) throws Exception {
        final ContentVerifier value = itsContentVerifierProvider.get(this.certificate.getSignature().getChoice());
        final OutputStream outputStream = value.getOutputStream();
        outputStream.write(OEREncoder.toByteArray(this.certificate.getToBeSigned(), IEEE1609dot2.ToBeSignedCertificate.build()));
        outputStream.close();
        return value.verify(ECDSAEncoder.toX962(this.certificate.getSignature()));
    }
    
    public CertificateBase toASN1Structure() {
        return this.certificate;
    }
    
    @Override
    public byte[] getEncoded() throws IOException {
        return OEREncoder.toByteArray(this.certificate, IEEE1609dot2.CertificateBase.build());
    }
}
