モジュール 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);
        }

        // ...
    }

    // ...
}

導入されたバージョン:
21
関連項目: