001// SPDX-FileCopyrightText: 2018 Paul Schaub <vanitasvitae@fsfe.org> 002// 003// SPDX-License-Identifier: Apache-2.0 004 005package org.pgpainless.key.generation.type.elgamal; 006 007import java.security.spec.AlgorithmParameterSpec; 008import javax.annotation.Nonnull; 009 010import org.bouncycastle.jce.spec.ElGamalParameterSpec; 011import org.pgpainless.algorithm.PublicKeyAlgorithm; 012import org.pgpainless.key.generation.type.KeyType; 013 014/** 015 * ElGamal encryption only key type. 016 */ 017public final class ElGamal implements KeyType { 018 019 private final ElGamalLength length; 020 021 private ElGamal(@Nonnull ElGamalLength length) { 022 this.length = length; 023 } 024 025 public static ElGamal withLength(ElGamalLength length) { 026 return new ElGamal(length); 027 } 028 029 @Override 030 public String getName() { 031 return "ElGamal"; 032 } 033 034 @Override 035 public PublicKeyAlgorithm getAlgorithm() { 036 return PublicKeyAlgorithm.ELGAMAL_ENCRYPT; 037 } 038 039 @Override 040 public int getBitStrength() { 041 return length.getLength(); 042 } 043 044 @Override 045 public AlgorithmParameterSpec getAlgorithmSpec() { 046 return new ElGamalParameterSpec(length.getP(), length.getG()); 047 } 048 049}