/** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. See License.txt in the project root for * license information. */ package com.microsoft.azure.keyvault.cryptography; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; import com.microsoft.azure.keyvault.cryptography.algorithms.Aes128Cbc; import com.microsoft.azure.keyvault.cryptography.algorithms.Aes128CbcHmacSha256; import com.microsoft.azure.keyvault.cryptography.algorithms.Aes192Cbc; import com.microsoft.azure.keyvault.cryptography.algorithms.Aes192CbcHmacSha384; import com.microsoft.azure.keyvault.cryptography.algorithms.Aes256Cbc; import com.microsoft.azure.keyvault.cryptography.algorithms.Aes256CbcHmacSha512; import com.microsoft.azure.keyvault.cryptography.algorithms.AesKw128; import com.microsoft.azure.keyvault.cryptography.algorithms.AesKw192; import com.microsoft.azure.keyvault.cryptography.algorithms.AesKw256; import com.microsoft.azure.keyvault.cryptography.algorithms.Rs256; import com.microsoft.azure.keyvault.cryptography.algorithms.Rsa15; import com.microsoft.azure.keyvault.cryptography.algorithms.RsaOaep; public class AlgorithmResolver { public static final AlgorithmResolver Default = new AlgorithmResolver(); static { Default.put(Aes128CbcHmacSha256.ALGORITHM_NAME, new Aes128CbcHmacSha256()); Default.put(Aes192CbcHmacSha384.ALGORITHM_NAME, new Aes192CbcHmacSha384()); Default.put(Aes256CbcHmacSha512.ALGORITHM_NAME, new Aes256CbcHmacSha512()); Default.put(Aes128Cbc.ALGORITHM_NAME, new Aes128Cbc()); Default.put(Aes192Cbc.ALGORITHM_NAME, new Aes192Cbc()); Default.put(Aes256Cbc.ALGORITHM_NAME, new Aes256Cbc()); Default.put(AesKw128.ALGORITHM_NAME, new AesKw128()); Default.put(AesKw192.ALGORITHM_NAME, new AesKw192()); Default.put(AesKw256.ALGORITHM_NAME, new AesKw256()); Default.put(Rsa15.ALGORITHM_NAME, new Rsa15()); Default.put(RsaOaep.ALGORITHM_NAME, new RsaOaep()); Default.put( Rs256.ALGORITHM_NAME, new Rs256() ); // Default.put( RsNull.ALGORITHM_NAME, new RsNull() ); } private final ConcurrentMap<String, Algorithm> _algorithms = new ConcurrentHashMap<String, Algorithm>(); /** * Returns the implementation for an algorithm name. * * @param algorithmName The algorithm name. * @return The implementation for the algorithm or null. */ public Algorithm get(String algorithmName) { return _algorithms.get(algorithmName); } /** * Add/Update a named algorithm implementation. * * @param algorithmName The algorithm name. * @param provider The implementation of the algorithm. */ public void put(String algorithmName, Algorithm provider) { _algorithms.put(algorithmName, provider); } /** * Remove a named algorithm implementation. * * @param algorithmName The algorithm name */ public void remove(String algorithmName) { _algorithms.remove(algorithmName); } }