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

package com.nimbusds.jose.jwk.gen;

import com.nimbusds.jose.jwk.JWK;
import java.security.KeyPair;
import java.security.GeneralSecurityException;
import java.security.spec.ECParameterSpec;
import java.security.interfaces.ECPublicKey;
import java.security.InvalidAlgorithmParameterException;
import java.security.NoSuchAlgorithmException;
import com.nimbusds.jose.JOSEException;
import java.security.spec.AlgorithmParameterSpec;
import java.security.KeyPairGenerator;
import java.util.Objects;
import com.nimbusds.jose.jwk.Curve;
import com.nimbusds.jose.jwk.ECKey;

public class ECKeyGenerator extends JWKGenerator<ECKey>
{
    private final Curve crv;
    
    public ECKeyGenerator(final Curve crv) {
        this.crv = Objects.requireNonNull(crv);
    }
    
    @Override
    public ECKey generate() throws JOSEException {
        final ECParameterSpec ecSpec = this.crv.toECParameterSpec();
        KeyPairGenerator generator;
        try {
            if (this.keyStore != null) {
                generator = KeyPairGenerator.getInstance("EC", this.keyStore.getProvider());
            }
            else if (this.provider != null) {
                generator = KeyPairGenerator.getInstance("EC", this.provider);
            }
            else {
                generator = KeyPairGenerator.getInstance("EC");
            }
            if (this.secureRandom != null) {
                generator.initialize(ecSpec, this.secureRandom);
            }
            else {
                generator.initialize(ecSpec);
            }
        }
        catch (final NoSuchAlgorithmException | InvalidAlgorithmParameterException e) {
            throw new JOSEException(e.getMessage(), e);
        }
        final KeyPair kp = generator.generateKeyPair();
        final ECKey.Builder builder = new ECKey.Builder(this.crv, (ECPublicKey)kp.getPublic()).privateKey(kp.getPrivate()).keyUse(this.use).keyOperations(this.ops).algorithm(this.alg).expirationTime(this.exp).notBeforeTime(this.nbf).issueTime(this.iat).keyStore(this.keyStore);
        if (this.tprKid) {
            builder.keyIDFromThumbprint();
        }
        else {
            builder.keyID(this.kid);
        }
        return builder.build();
    }
}
