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

インタフェースKEMSpi


public interface KEMSpi
このクラスは、KEMクラスのサービス・プロバイダ・インタフェース(SPI)を定義します。 セキュリティ・プロバイダは、このインタフェースを実装して、キー・カプセル化メカニズムの(KEM)アルゴリズムを実装します。

KEMアルゴリズムは、一連の構成をサポートする場合があります。 各構成では、異なるタイプのキー、暗号化プリミティブ、および共有シークレットとキー・カプセル化メッセージのサイズを受け入れることができます。 構成は、KEMアルゴリズム名、使用するキー、およびエンカプセレータまたはデカプセレータの作成時に指定されるオプションのAlgorithmParameterSpec引数によって定義されます。 engineNewEncapsulator(java.security.PublicKey, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom)またはengineNewDecapsulator(java.security.PrivateKey, java.security.spec.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);
         }

         // ...
     }

     // ...
 }
 

APIのノート:
このインタフェースは、Java SE 17 Maintenance Release 1で定義されています。
導入されたバージョン:
17
関連項目: