All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.microsoft.sqlserver.jdbc.SQLServerEncryptionAlgorithmFactoryList Maven / Gradle / Ivy

There is a newer version: 12.7.0.jre11-preview
Show newest version
/*
 * Microsoft JDBC Driver for SQL Server Copyright(c) Microsoft Corporation All rights reserved. This program is made
 * available under the terms of the MIT License. See the LICENSE file in the project root for more information.
 */

package com.microsoft.sqlserver.jdbc;

import java.text.MessageFormat;
import java.util.concurrent.ConcurrentHashMap;


/**
 * Maintain list of all the encryption algorithm factory classes
 */
final class SQLServerEncryptionAlgorithmFactoryList {

    private ConcurrentHashMap encryptionAlgoFactoryMap;

    private static final SQLServerEncryptionAlgorithmFactoryList instance = new SQLServerEncryptionAlgorithmFactoryList();

    private SQLServerEncryptionAlgorithmFactoryList() {
        encryptionAlgoFactoryMap = new ConcurrentHashMap<>();
        encryptionAlgoFactoryMap.putIfAbsent(SQLServerAeadAes256CbcHmac256Algorithm.algorithmName,
                new SQLServerAeadAes256CbcHmac256Factory());
    }

    static SQLServerEncryptionAlgorithmFactoryList getInstance() {
        return instance;
    }

    /**
     * @return list of registered algorithms separated by comma
     */
    String getRegisteredCipherAlgorithmNames() {
        StringBuffer stringBuff = new StringBuffer();
        boolean first = true;
        for (String key : encryptionAlgoFactoryMap.keySet()) {
            if (first) {
                stringBuff.append("'");
                first = false;
            } else {
                stringBuff.append(", '");
            }
            stringBuff.append(key);
            stringBuff.append("'");

        }
        return stringBuff.toString();
    }

    /**
     * Return instance for given algorithm
     * 
     * @param key
     * @param encryptionType
     * @param algorithmName
     * @return instance for given algorithm
     * @throws SQLServerException
     */
    SQLServerEncryptionAlgorithm getAlgorithm(SQLServerSymmetricKey key, SQLServerEncryptionType encryptionType,
            String algorithmName) throws SQLServerException {
        SQLServerEncryptionAlgorithm encryptionAlgorithm = null;
        SQLServerEncryptionAlgorithmFactory factory = null;
        if (!encryptionAlgoFactoryMap.containsKey(algorithmName)) {
            MessageFormat form = new MessageFormat(
                    SQLServerException.getErrString("R_UnknownColumnEncryptionAlgorithm"));
            Object[] msgArgs = {algorithmName,
                    SQLServerEncryptionAlgorithmFactoryList.getInstance().getRegisteredCipherAlgorithmNames()};
            throw new SQLServerException(this, form.format(msgArgs), null, 0, false);
        }

        factory = encryptionAlgoFactoryMap.get(algorithmName);
        assert null != factory : "Null Algorithm Factory class detected";
        encryptionAlgorithm = factory.create(key, encryptionType, algorithmName);
        return encryptionAlgorithm;
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy