001// SPDX-FileCopyrightText: 2018 Paul Schaub <vanitasvitae@fsfe.org> 002// 003// SPDX-License-Identifier: Apache-2.0 004 005package org.pgpainless.algorithm; 006 007import java.util.Arrays; 008import java.util.Collections; 009import java.util.LinkedHashSet; 010import java.util.List; 011import java.util.Set; 012 013/** 014 * The {@link AlgorithmSuite} class is consulted when new OpenPGP keys are being generated to set 015 * preferred algorithms on the key. 016 */ 017public class AlgorithmSuite { 018 019 private static final AlgorithmSuite defaultAlgorithmSuite = new AlgorithmSuite( 020 Arrays.asList( 021 SymmetricKeyAlgorithm.AES_256, 022 SymmetricKeyAlgorithm.AES_192, 023 SymmetricKeyAlgorithm.AES_128), 024 Arrays.asList( 025 HashAlgorithm.SHA512, 026 HashAlgorithm.SHA384, 027 HashAlgorithm.SHA256, 028 HashAlgorithm.SHA224), 029 Arrays.asList( 030 CompressionAlgorithm.ZLIB, 031 CompressionAlgorithm.BZIP2, 032 CompressionAlgorithm.ZIP, 033 CompressionAlgorithm.UNCOMPRESSED) 034 ); 035 036 private final Set<SymmetricKeyAlgorithm> symmetricKeyAlgorithms; 037 private final Set<HashAlgorithm> hashAlgorithms; 038 private final Set<CompressionAlgorithm> compressionAlgorithms; 039 040 public AlgorithmSuite(List<SymmetricKeyAlgorithm> symmetricKeyAlgorithms, 041 List<HashAlgorithm> hashAlgorithms, 042 List<CompressionAlgorithm> compressionAlgorithms) { 043 this.symmetricKeyAlgorithms = Collections.unmodifiableSet(new LinkedHashSet<>(symmetricKeyAlgorithms)); 044 this.hashAlgorithms = Collections.unmodifiableSet(new LinkedHashSet<>(hashAlgorithms)); 045 this.compressionAlgorithms = Collections.unmodifiableSet(new LinkedHashSet<>(compressionAlgorithms)); 046 } 047 048 public Set<SymmetricKeyAlgorithm> getSymmetricKeyAlgorithms() { 049 return new LinkedHashSet<>(symmetricKeyAlgorithms); 050 } 051 052 public Set<HashAlgorithm> getHashAlgorithms() { 053 return new LinkedHashSet<>(hashAlgorithms); 054 } 055 056 public Set<CompressionAlgorithm> getCompressionAlgorithms() { 057 return new LinkedHashSet<>(compressionAlgorithms); 058 } 059 060 public static AlgorithmSuite getDefaultAlgorithmSuite() { 061 return defaultAlgorithmSuite; 062 } 063}