Класс KeyAgreementSpi
public abstract class KeyAgreementSpi extends Object
KeyAgreement. Все абстрактные методы в этом классе должны быть реализованы каждым поставщиком криптографических услуг, желающим предоставить реализацию определенного алгоритма согласования ключей. Ключи, участвующие в установлении общего секрета, создаются одним из генераторов ключей (KeyPairGenerator или KeyGenerator), KeyFactory, или в результате промежуточной фазы протокола согласования ключей (engineDoPhase).
Для каждого из корреспондентов в обмене ключами необходимо вызвать engineDoPhase. Например, если обмен ключами происходит с одной другой стороной, engineDoPhase нужно вызвать один раз, установив флаг lastPhase в значение true. Если обмен ключами происходит с двумя другими сторонами, engineDoPhase нужно вызвать дважды, первый раз установив флаг lastPhase в значение false, а второй раз — в значение true. Может быть любое количество сторон, участвующих в обмене ключами.
- Since:
- 1.4
- See Also:
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
KeyAgreementSpi() |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
protected abstract Key |
engineDoPhase |
Выполняет следующую фазу этого согласования ключей с заданным ключом, полученным от одной из других сторон, участвующих в этом согласовании ключей. |
protected abstract byte[] |
engineGenerateSecret() |
Генерирует общий секрет и возвращает его в новом буфере. |
protected abstract int |
engineGenerateSecret |
Генерирует общий секрет и помещает его в буфер sharedSecret, начиная с offset включительно. |
protected abstract SecretKey |
engineGenerateSecret |
Создает общий секрет и возвращает его как объект секретного ключа запрошенного типа алгоритма. |
protected abstract void |
engineInit |
Инициализирует это согласование ключей с заданным ключом и источником случайности. |
protected abstract void |
engineInit |
Инициализирует это согласование ключей с заданным ключом, набором параметров алгоритма и источником случайности. |
Подробное описание конструкторов
KeyAgreementSpi
public KeyAgreementSpi()
Подробное описание методов
engineInit
protected abstract void engineInit(Key key, SecureRandom random) throws InvalidKeyException
Если алгоритму обмена ключами требуются случайные байты, он получает их из заданного источника случайности, random. Однако, если реализация базового алгоритма не требует случайных байтов, random игнорируется.
- Параметры:
-
key- частная информация стороны. Например, в случае обмена ключами Диффи-Хеллмана это будет собственный закрытый ключ Диффи-Хеллмана стороны. -
random- источник случайности - Исключения:
-
InvalidKeyException- если заданный ключ не подходит для этого обмена ключами, например, имеет неправильный тип или тип алгоритма несовместим.
engineInit
protected abstract void engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException
- Параметры:
-
key- частная информация стороны. Например, в случае обмена ключами Диффи-Хеллмана это будет собственный закрытый ключ Диффи-Хеллмана стороны. -
params- параметры обмена ключами -
random- источник случайности - Исключения:
-
InvalidKeyException- если заданный ключ не подходит для этого обмена ключами, например, имеет неправильный тип или тип алгоритма несовместим. -
InvalidAlgorithmParameterException- если заданные параметры не подходят для этого обмена ключами.
engineDoPhase
protected abstract Key engineDoPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException
- Параметры:
-
key- ключ для этой фазы. Например, в случае Диффи-Хеллмана между 2 сторонами, это будет открытый ключ Диффи-Хеллмана другой стороны. -
lastPhase- флаг, указывающий, является ли это последней фазой этого обмена ключами. - Возвращает:
- промежуточный ключ, полученный в результате этой фазы, или
nullесли эта фаза не дает ключ - Исключения:
-
InvalidKeyException- если заданный ключ не подходит для этой фазы. -
IllegalStateException- если этот обмен ключами не был инициализирован.
engineGenerateSecret
protected abstract byte[] engineGenerateSecret() throws IllegalStateException
Этот метод сбрасывает этот KeyAgreementSpi объект в состояние, в котором он находился после последнего вызова одного из init методов. После вызова generateSecret, объект можно повторно использовать для дальнейших операций обмена ключами, вызвав doPhase, чтобы предоставить новые ключи, а затем вызвав generateSecret, чтобы получить новый секрет. В этом случае, частная информация и параметры алгоритма, предоставленные init, будут использоваться для нескольких операций обмена ключами. Метод init может быть вызван после generateSecret, чтобы изменить частную информацию, используемую в последующих операциях.
- Возвращает:
- новый буфер с общим секретом
- Исключения:
-
IllegalStateException- если этот обмен ключами не был инициализирован или еслиdoPhaseне был вызван для предоставления ключей для всех сторон в соглашении
engineGenerateSecret
protected abstract int engineGenerateSecret(byte[] sharedSecret, int offset) throws IllegalStateException, ShortBufferException
sharedSecret, начиная с offset включительно. Если буфер sharedSecret слишком мал для хранения результата, выбрасывается ShortBufferException. В этом случае этот вызов следует повторить с большим буфером вывода.
Этот метод сбрасывает этот KeyAgreementSpi объект в состояние, в котором он находился после последнего вызова одного из init методов. После вызова generateSecret, объект можно повторно использовать для дальнейших операций обмена ключами, вызвав doPhase, чтобы предоставить новые ключи, а затем вызвав generateSecret, чтобы получить новый секрет. В этом случае, частная информация и параметры алгоритма, предоставленные init, будут использоваться для нескольких операций обмена ключами. Метод init может быть вызван после generateSecret, чтобы изменить частную информацию, используемую в последующих операциях.
- Параметры:
-
sharedSecret- буфер для общего секрета -
offset- смещение вsharedSecretдля хранения общего секрета - Возвращает:
- количество байтов, помещенных в
sharedSecret - Исключения:
-
IllegalStateException- если этот обмен ключами не был инициализирован или еслиdoPhaseне был вызван для предоставления ключей для всех сторон в соглашении -
ShortBufferException- если заданный буфер вывода слишком мал для хранения секрета
engineGenerateSecret
protected abstract SecretKey engineGenerateSecret(String algorithm) throws IllegalStateException, NoSuchAlgorithmException, InvalidKeyException
Этот метод сбрасывает этот KeyAgreementSpi объект в состояние, в котором он находился после последнего вызова одного из init методов. После вызова generateSecret, объект можно повторно использовать для дальнейших операций обмена ключами, вызвав doPhase, чтобы предоставить новые ключи, а затем вызвав generateSecret, чтобы получить новый секрет. В этом случае, частная информация и параметры алгоритма, предоставленные init, будут использоваться для нескольких операций обмена ключами. Метод init может быть вызван после generateSecret, чтобы изменить частную информацию, используемую в последующих операциях.
- Параметры:
-
algorithm- запрошенный алгоритм секретного ключа - Возвращает:
- общий секретный ключ
- Исключения:
-
IllegalStateException- если этот обмен ключами не был инициализирован или еслиdoPhaseне был вызван для предоставления ключей для всех сторон в соглашении -
NoSuchAlgorithmException- если запрошенный алгоритм секретного ключа недоступен -
InvalidKeyException- если материал общего секретного ключа не может быть использован для генерации секретного ключа запрошенного типа алгоритма (например, материал ключа слишком короткий)
© 1993, 2023, 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/21/docs/api/java.base/javax/crypto/KeyAgreementSpi.html