インタフェース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
- 関連項目:
-
ネストされたクラスのサマリー
ネストされたクラス修飾子と型インタフェース説明static interfaceKEMレシーバ側でengineNewDecapsulator(java.security.PrivateKey, java.security.spec.AlgorithmParameterSpec)によって生成されるKEMデカプセレータ実装。static interfaceKEMセンダー側でengineNewEncapsulator(java.security.PublicKey, java.security.spec.AlgorithmParameterSpec, java.security.SecureRandom)によって生成されるKEMエンカプセレータ実装。 -
メソッドのサマリー
修飾子と型メソッド説明engineNewDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec) KEMレシーバ側にKEMデカプセレータを作成します。engineNewEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom) KEMセンダー側にKEMエンカプセレータを作成します。
-
メソッドの詳細
-
engineNewEncapsulator
KEMSpi.EncapsulatorSpi engineNewEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom) throws InvalidAlgorithmParameterException, InvalidKeyException KEMセンダー側にKEMエンカプセレータを作成します。- パラメータ:
publicKey- レシーバの公開キーは、nullにできませんspec- オプションのパラメータは、nullですsecureRandom- カプセル化のランダム性のソース。nullの場合、実装ではデフォルトの実装を指定する必要があります。- 戻り値:
- このキーのエンカプセレータ
- スロー:
InvalidAlgorithmParameterException-specが無効であるか、または1つが必要だがspecがnullの場合InvalidKeyException-publicKeyがnullまたは無効な場合- 関連項目:
-
engineNewDecapsulator
KEMSpi.DecapsulatorSpi engineNewDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec) throws InvalidAlgorithmParameterException, InvalidKeyException KEMレシーバ側にKEMデカプセレータを作成します。- パラメータ:
privateKey- レシーバの秘密キーは、nullにできませんspec- オプションのパラメータは、nullです- 戻り値:
- このキーのデカプセレータ
- スロー:
InvalidAlgorithmParameterException-specが無効であるか、または1つが必要だがspecがnullの場合InvalidKeyException-privateKeyがnullまたは無効な場合- 関連項目:
-