モジュール java.base
パッケージ javax.crypto

クラスKeyAgreementSpi


  • public abstract class KeyAgreementSpi
    extends Object
    このクラスは、KeyAgreementクラスのサービス・プロバイダ・インタフェース (SPI)を定義します。 特定のキー合意アルゴリズムの実装を提供する各暗号化サービス・プロバイダは、このクラスのすべての抽象メソッドを実装する必要があります。

    共有の秘密作成に関係するキーは、KeyPairGeneratorまたはKeyGeneratorのいずれかのキー・ジェネレータか、KeyFactoryにより、またはキー協定プロトコル(engineDoPhase)の中間フェーズの結果として作成されます。

    キー交換の対応関係ごとに、engineDoPhaseを呼び出す必要があります。 たとえば、キー交換の相手が1つの場合は、lastPhaseフラグをtrueに設定してengineDoPhaseを1回呼び出す必要があります。 キー交換の相手が2つの場合は、最初はlastPhaseフラグをfalseに設定し、2回目はtrueに設定して、engineDoPhaseを2回呼び出す必要があります。 キー交換の相手の数は任意です。

    導入されたバージョン:
    1.4
    関連項目:
    KeyGenerator, SecretKey
    • コンストラクタのサマリー

      コンストラクタ 
      コンストラクタ 説明
      KeyAgreementSpi()  
    • メソッドのサマリー

      すべてのメソッド インスタンス・メソッド 抽象メソッド 
      修飾子と型 メソッド 説明
      protected abstract Key engineDoPhase​(Key key, boolean lastPhase)
      このキー合意に関係する相手のだれかから受け取った、指定されたキーを使用してこのキー合意の次の段階を実行します。
      protected abstract byte[] engineGenerateSecret()
      共有の秘密情報を生成して新しいバッファ内に返します。
      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オブジェクトをリセットするので、さらにほかのキー合意に再使用できます。 このキー合意がengineInitメソッドの1つで再初期化されない場合、その後のキー合意では、同じ非公開情報とアルゴリズム・パラメータが使用されます。

        戻り値:
        共有の秘密情報の入った新しいバッファ
        例外:
        IllegalStateException - このキー合意がまだ完了していない場合
      • engineGenerateSecret

        protected abstract int engineGenerateSecret​(byte[] sharedSecret,
                                                    int offset)
                                             throws IllegalStateException,
                                                    ShortBufferException
        共有の秘密情報を生成して、offsetから始まるsharedSecretバッファ内に格納します。

        sharedSecretバッファが小さすぎて結果を保持できない場合は、ShortBufferExceptionがスローされます。 この場合、より大きな出力バッファを使用してこの呼出しを繰り返します。

        このメソッドは、このKeyAgreementSpiオブジェクトをリセットするので、さらにほかのキー合意に再使用できます。 このキー合意がengineInitメソッドの1つで再初期化されない場合、その後のキー合意では、同じ非公開情報とアルゴリズム・パラメータが使用されます。

        パラメータ:
        sharedSecret - 共有の秘密情報を格納するバッファ
        offset - 共有の秘密情報が格納されるsharedSecret内のオフセット
        戻り値:
        sharedSecretに格納されたバイト数
        例外:
        IllegalStateException - このキー合意がまだ完了していない場合
        ShortBufferException - 指定された出力バッファが小さすぎて秘密情報を保持できない場合
      • engineGenerateSecret

        protected abstract SecretKey engineGenerateSecret​(String algorithm)
                                                   throws IllegalStateException,
                                                          NoSuchAlgorithmException,
                                                          InvalidKeyException
        共有の秘密情報を作成して、それを要求されたアルゴリズム型の秘密キー・オブジェクトとして返します。

        このメソッドは、このKeyAgreementSpiオブジェクトをリセットするので、さらにほかのキー合意に再使用できます。 このキー合意がengineInitメソッドの1つで再初期化されない場合、その後のキー合意では、同じ非公開情報とアルゴリズム・パラメータが使用されます。

        パラメータ:
        algorithm - 要求された秘密キー・アルゴリズム
        戻り値:
        共有の秘密キー
        例外:
        IllegalStateException - このキー合意がまだ完了していない場合
        NoSuchAlgorithmException - 要求された秘密キー・アルゴリズムがない場合
        InvalidKeyException - 共有の秘密キー・マテリアルを使用して、要求されたアルゴリズム型の秘密キーを生成できない場合(キー・マテリアルが短すぎるなど)