Spec-Zone.ru › OpenJDK 25

Интерфейс KEMSpi

public interface KEMSpi
Этот класс определяет интерфейс поставщика услуг (SPI) для класса KEM. Поставщик криптографических услуг реализует этот интерфейс, чтобы предоставить реализацию алгоритма механизма инкапсуляции ключей (KEM).

Алгоритм KEM может поддерживать семейство конфигураций. Каждая конфигурация может принимать различные типы ключей и криптографических примитивов, а также различные размеры общих секретов и сообщений инкапсуляции ключа. Конфигурация определяется именем алгоритма KEM, используемым ключом и необязательным аргументом AlgorithmParameterSpec, который задаётся при создании инкапсулятора или декапсулятора. Вызов engineNewEncapsulator(PublicKey, AlgorithmParameterSpec, SecureRandom) или engineNewDecapsulator(PrivateKey, AlgorithmParameterSpec) должен возвращать инкапсулятор или декапсулятор, соответствующий одной конфигурации, у которого методы engineSecretSize() и engineEncapsulationSize() возвращают постоянные значения.

Реализация KEMSpi должна быть неизменяемой. Должна быть обеспечена возможность одновременного вызова нескольких методов engineNewEncapsulator и engineNewDecapsulator.

Реализации EncapsulatorSpi и DecapsulatorSpi также должны быть неизменяемыми. Должна быть обеспечена возможность одновременного вызова нескольких методов encapsulate и decapsulate. Каждый вызов encapsulate должен генерировать новый общий секрет и сообщение инкапсуляции ключа.

Например:

public static class MyKEMImpl implements KEMSpi {

    @Override
    public KEMSpi.EncapsulatorSpi engineNewEncapsulator(PublicKey publicKey,
            AlgorithmParameterSpec spec, SecureRandom secureRandom)
            throws InvalidAlgorithmParameterException, InvalidKeyException {
        if (!checkPublicKey(publicKey)) {
            throw new InvalidKeyException("unsupported key");
        }
        if (!checkParameters(spec)) {
            throw new InvalidAlgorithmParameterException("unsupported params");
        }
        return new MyEncapsulator(publicKey, spec, secureRandom);
    }

    class MyEncapsulator implements KEMSpi.EncapsulatorSpi {
        MyEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec,
                SecureRandom secureRandom){
            this.spec = spec != null ? spec : getDefaultParameters();
            this.secureRandom = secureRandom != null
                    ? secureRandom
                    : getDefaultSecureRandom();
            this.publicKey = publicKey;
        }

        @Override
        public KEM.Encapsulated encapsulate(int from, int to, String algorithm) {
            byte[] encapsulation;
            byte[] secret;
            // calculating...
            return new KEM.Encapsulated(
                    new SecretKeySpec(secret, from, to - from, algorithm),
                    encapsulation, null);
        }

        // ...
    }

    // ...
}
Начиная с:
21
См. также:
  • KEM

Краткое описание вложенных классов

Модификатор и тип Интерфейс Описание
static interface  KEMSpi.DecapsulatorSpi
Реализация декапсулятора KEM, создаваемая методом engineNewDecapsulator(PrivateKey, AlgorithmParameterSpec) на стороне получателя KEM.
static interface  KEMSpi.EncapsulatorSpi
Реализация инкапсулятора KEM, создаваемая методом engineNewEncapsulator(PublicKey, AlgorithmParameterSpec, SecureRandom) на стороне отправителя KEM.

Краткое описание методов

Модификатор и тип Метод Описание
KEMSpi.DecapsulatorSpi engineNewDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec)
Создаёт декапсулятор KEM на стороне получателя KEM.
KEMSpi.EncapsulatorSpi engineNewEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom)
Создаёт инкапсулятор KEM на стороне отправителя KEM.

Подробное описание методов

engineNewEncapsulator

KEMSpi.EncapsulatorSpi engineNewEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom) throws InvalidAlgorithmParameterException, InvalidKeyException
Создаёт инкапсулятор KEM на стороне отправителя KEM.
Параметры:
publicKey — открытый ключ получателя; не должен быть null
spec — необязательный параметр; может быть null
secureRandom — источник случайных данных для инкапсуляции. Если null, реализация должна предоставить значение по умолчанию.
Возвращает:
инкапсулятор для этого ключа
Вызывает исключения:
InvalidAlgorithmParameterException — если spec недопустим или обязателен, но spec имеет значение null
InvalidKeyException — если publicKey имеет значение null или недопустим
См. также:
  • KEM.newEncapsulator(PublicKey, AlgorithmParameterSpec, SecureRandom)

engineNewDecapsulator

KEMSpi.DecapsulatorSpi engineNewDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec) throws InvalidAlgorithmParameterException, InvalidKeyException
Создаёт декапсулятор KEM на стороне получателя KEM.
Параметры:
privateKey — закрытый ключ получателя; не должен быть null
spec — необязательный параметр; может быть null
Возвращает:
декапсулятор для этого ключа
Вызывает исключения:
InvalidAlgorithmParameterException — если spec недопустим или обязателен, но spec имеет значение null
InvalidKeyException — если privateKey имеет значение null или недопустим
См. также:
  • KEM.newDecapsulator(PrivateKey, AlgorithmParameterSpec)

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/javax/crypto/KEMSpi.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API