KeyAgreement
クラスのサービス・プロバイダ・インタフェース (SPI)を定義します。 特定のキー合意アルゴリズムの実装を提供する各暗号化サービス・プロバイダは、このクラスのすべての抽象メソッドを実装する必要があります。
共有の秘密作成に関係するキーは、KeyPairGenerator
またはKeyGenerator
のいずれかのキー・ジェネレータか、KeyFactory
により、またはキー協定プロトコル(engineDoPhase
)の中間フェーズの結果として作成されます。
キー交換の対応関係ごとに、engineDoPhase
を呼び出す必要があります。 たとえば、キー交換の相手が1つの場合は、lastPhase
フラグをtrue
に設定してengineDoPhase
を1回呼び出す必要があります。 キー交換の相手が2つの場合は、最初はlastPhase
フラグをfalse
に設定し、2回目はtrue
に設定して、engineDoPhase
を2回呼び出す必要があります。 キー交換の相手の数は任意です。
- 導入されたバージョン:
- 1.4
- 関連項目:
-
コンストラクタのサマリー
-
メソッドのサマリー
修飾子と型メソッド説明protected abstract Key
engineDoPhase
(Key key, boolean lastPhase) このキー合意に関係する相手のだれかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。protected abstract byte[]
共有の秘密情報を生成して新しいバッファ内に返します。protected abstract int
engineGenerateSecret
(byte[] sharedSecret, int offset) 共有の秘密情報を生成して、offset
から始まるsharedSecret
バッファ内に格納します。protected abstract SecretKey
engineGenerateSecret
(String algorithm) 共有の秘密情報を作成して、それを要求されたアルゴリズム型の秘密キー・オブジェクトとして返します。protected abstract void
engineInit
(Key key, SecureRandom random) 指定されたキーと乱数発生の元でこのキー合意を初期化します。protected abstract void
engineInit
(Key key, AlgorithmParameterSpec params, SecureRandom random) 指定されたキー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこのキー合意を初期化します。
-
コンストラクタの詳細
-
KeyAgreementSpi
public KeyAgreementSpi()サブクラスが呼び出すためのコンストラクタ。
-
-
メソッドの詳細
-
engineInit
protected abstract void engineInit(Key key, SecureRandom random) throws InvalidKeyException 指定されたキーと乱数発生の元でこのキー合意を初期化します。 指定されたキーには、このキー合意に必要なすべてのアルゴリズム・パラメータを含める必要があります。キー合意アルゴリズムが乱数バイトを必要とする場合は、指定された乱数発生の元
random
から取得します。 ただし、基本となるアルゴリズム実装が乱数バイトを必要としない場合、random
は無視されます。- パラメータ:
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キーrandom
- 乱数発生の元- 例外:
InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。
-
engineInit
protected abstract void engineInit(Key key, AlgorithmParameterSpec params, SecureRandom random) throws InvalidKeyException, InvalidAlgorithmParameterException 指定されたキー、アルゴリズム・パラメータのセット、および乱数発生の元を使用してこのキー合意を初期化します。- パラメータ:
key
- 当事者の非公開情報。 たとえば、Diffie-Hellmanのキー合意の場合は、当事者自身のDiffie-Hellman非公開キーparams
- キー合意パラメータrandom
- 乱数発生の元- 例外:
InvalidKeyException
- 指定されたキーがこのキー合意に不適切な場合。たとえば、型が間違っている場合、またはアルゴリズムの型に互換性がない場合。InvalidAlgorithmParameterException
- 指定されたパラメータがこのキー合意に不適切な場合。
-
engineDoPhase
protected abstract Key engineDoPhase(Key key, boolean lastPhase) throws InvalidKeyException, IllegalStateException このキー合意に関係する相手のだれかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。- パラメータ:
key
- この段階のキー。 たとえば、2当事者間のDiffie-Hellmanの場合は、相手のDiffie-Hellman公開キー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 共有の秘密情報を生成して、offset
から始まるsharedSecret
バッファ内に格納します。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
- 共有の秘密キー・マテリアルを使用して、要求されたアルゴリズム型の秘密キーを生成できない場合(キー・マテリアルが短すぎるなど)
-