001/*
002 * Copyright 2018 Paul Schaub.
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 *     http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016package org.pgpainless.algorithm;
017
018import java.util.ArrayList;
019import java.util.Arrays;
020import java.util.Collections;
021import java.util.List;
022
023public class AlgorithmSuite {
024
025    private static AlgorithmSuite defaultAlgorithmSuite = new AlgorithmSuite(
026            Arrays.asList(
027                    SymmetricKeyAlgorithm.AES_256,
028                    SymmetricKeyAlgorithm.AES_192,
029                    SymmetricKeyAlgorithm.AES_128),
030            Arrays.asList(
031                    HashAlgorithm.SHA512,
032                    HashAlgorithm.SHA384,
033                    HashAlgorithm.SHA256,
034                    HashAlgorithm.SHA224),
035            Arrays.asList(
036                    CompressionAlgorithm.ZLIB,
037                    CompressionAlgorithm.BZIP2,
038                    CompressionAlgorithm.ZIP,
039                    CompressionAlgorithm.UNCOMPRESSED)
040    );
041
042    private List<SymmetricKeyAlgorithm> symmetricKeyAlgorithms;
043    private List<HashAlgorithm> hashAlgorithms;
044    private List<CompressionAlgorithm> compressionAlgorithms;
045
046    public AlgorithmSuite(List<SymmetricKeyAlgorithm> symmetricKeyAlgorithms,
047                          List<HashAlgorithm> hashAlgorithms,
048                          List<CompressionAlgorithm> compressionAlgorithms) {
049        this.symmetricKeyAlgorithms = Collections.unmodifiableList(symmetricKeyAlgorithms);
050        this.hashAlgorithms = Collections.unmodifiableList(hashAlgorithms);
051        this.compressionAlgorithms = Collections.unmodifiableList(compressionAlgorithms);
052    }
053
054    public void setSymmetricKeyAlgorithms(List<SymmetricKeyAlgorithm> symmetricKeyAlgorithms) {
055        this.symmetricKeyAlgorithms = symmetricKeyAlgorithms;
056    }
057
058    public List<SymmetricKeyAlgorithm> getSymmetricKeyAlgorithms() {
059        return new ArrayList<>(symmetricKeyAlgorithms);
060    }
061
062    public int[] getSymmetricKeyAlgorithmIds() {
063        int[] array = new int[symmetricKeyAlgorithms.size()];
064        for (int i = 0; i < array.length; i++) {
065            array[i] = symmetricKeyAlgorithms.get(i).getAlgorithmId();
066        }
067        return array;
068    }
069
070    public void setHashAlgorithms(List<HashAlgorithm> hashAlgorithms) {
071        this.hashAlgorithms = hashAlgorithms;
072    }
073
074    public List<HashAlgorithm> getHashAlgorithms() {
075        return hashAlgorithms;
076    }
077
078    public int[] getHashAlgorithmIds() {
079        int[] array = new int[hashAlgorithms.size()];
080        for (int i = 0; i < array.length; i++) {
081            array[i] = hashAlgorithms.get(i).getAlgorithmId();
082        }
083        return array;
084    }
085
086    public void setCompressionAlgorithms(List<CompressionAlgorithm> compressionAlgorithms) {
087        this.compressionAlgorithms = compressionAlgorithms;
088    }
089
090    public List<CompressionAlgorithm> getCompressionAlgorithms() {
091        return compressionAlgorithms;
092    }
093
094    public int[] getCompressionAlgorithmIds() {
095        int[] array = new int[compressionAlgorithms.size()];
096        for (int i = 0; i < array.length; i++) {
097            array[i] = compressionAlgorithms.get(i).getAlgorithmId();
098        }
099        return array;
100    }
101
102    public static AlgorithmSuite getDefaultAlgorithmSuite() {
103        return defaultAlgorithmSuite;
104    }
105}