getInstance方法创建一个实现指定算法的新KEM对象。
KEM对象是不可变的。可以同时在同一个KEM对象上安全地调用多个newEncapsulator和newDecapsulator方法。
如果在实例化KEM对象时未在getInstance方法中指定提供程序,则newEncapsulator和newDecapsulator方法可能会返回来自不同提供程序的封装器或解封装器。所选的提供程序基于传递给newEncapsulator或newDecapsulator方法的参数:私钥或公钥以及可选的AlgorithmParameterSpec。KEM.Encapsulator.providerName()和KEM.Decapsulator.providerName()方法返回所选提供程序的名称。
Encapsulator和Decapsulator对象也是不可变的。可以同时在同一个Encapsulator或Decapsulator对象上调用多个encapsulate和decapsulate方法。每次调用encapsulate都会生成一个新的共享秘密和密钥封装消息。
示例:
// 接收方
var kpg = KeyPairGenerator.getInstance("X25519");
var kp = kpg.generateKeyPair();
// 发送方
var kem1 = KEM.getInstance("DHKEM");
var sender = kem1.newEncapsulator(kp.getPublic());
var encapsulated = sender.encapsulate();
var k1 = encapsulated.key();
// 接收方
var kem2 = KEM.getInstance("DHKEM");
var receiver = kem2.newDecapsulator(kp.getPrivate());
var k2 = receiver.decapsulate(encapsulated.encapsulation());
assert Arrays.equals(k1.getEncoded(), k2.getEncoded());
- 自:
- 21
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic final class
由KEM接收方生成的解封装器。static final class
该类指定了密钥封装机制(KEM)的encapsulate方法的返回值,其中包括共享秘密(作为SecretKey)、密钥封装消息和可选参数。static final class
由KEM发送方上的newEncapsulator(java.security.PublicKey)生成的封装器。 -
Method Summary
Modifier and TypeMethodDescription返回此KEM对象的算法名称。static KEM
getInstance
(String algorithm) 返回一个实现指定算法的KEM对象。static KEM
getInstance
(String algorithm, String provider) 从指定的安全提供程序返回一个实现指定算法的KEM对象。static KEM
getInstance
(String algorithm, Provider provider) 从指定的安全提供程序返回一个实现指定算法的KEM对象。newDecapsulator
(PrivateKey privateKey) 在KEM接收方创建一个KEM解封装器。newDecapsulator
(PrivateKey privateKey, AlgorithmParameterSpec spec) 在KEM接收方创建一个KEM解封装器。newEncapsulator
(PublicKey publicKey) 在KEM发送方创建一个KEM封装器。newEncapsulator
(PublicKey publicKey, SecureRandom secureRandom) 在KEM发送方创建一个KEM封装器。newEncapsulator
(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom) 在KEM发送方创建一个KEM封装器。
-
Method Details
-
getInstance
返回一个实现指定算法的KEM对象。- 参数:
- algorithm - KEM算法的名称。有关标准KEM算法名称的信息,请参阅Java安全标准算法名称规范中的KEM部分。
- 返回:
- 新的KEM对象
- 抛出:
- NoSuchAlgorithmException - 如果没有Provider支持指定算法的KEM实现
- NullPointerException - 如果algorithm为null
-
getInstance
从指定的安全提供程序返回一个实现指定算法的KEM对象。- 参数:
- algorithm - KEM算法的名称。有关标准KEM算法名称的信息,请参阅Java安全标准算法名称规范中的KEM部分。
- provider - 提供程序。如果为null,则此方法等效于getInstance(String)。
- 返回:
- 新的KEM对象
- 抛出:
- NoSuchAlgorithmException - 如果指定了提供程序但它不支持指定的KEM算法,或者如果provider为null且没有提供者支持指定算法的KEM实现
- NullPointerException - 如果algorithm为null
-
getInstance
public static KEM getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException 从指定的安全提供程序返回一个实现指定算法的KEM对象。- 参数:
- algorithm - KEM算法的名称。有关标准KEM算法名称的信息,请参阅Java安全标准算法名称规范中的KEM部分。
- provider - 提供程序。如果为null,则此方法等效于getInstance(String)。
- 返回:
- 新的KEM对象
- 抛出:
- NoSuchAlgorithmException - 如果指定了提供程序但它不支持指定的KEM算法,或者如果provider为null且没有提供者支持指定算法的KEM实现
- NoSuchProviderException - 如果指定的提供程序未在安全提供程序列表中注册
- NullPointerException - 如果algorithm为null
-
newEncapsulator
在KEM发送方创建一个KEM封装器。此方法等效于newEncapsulator(publicKey, null, null)。
- 参数:
- publicKey - 接收方的公钥,不得为null
- 返回:
- 此密钥的封装器
- 抛出:
- InvalidKeyException - 如果publicKey为null或无效
- UnsupportedOperationException - 如果不支持此方法,因为必须提供AlgorithmParameterSpec
-
newEncapsulator
public KEM.Encapsulator newEncapsulator(PublicKey publicKey, SecureRandom secureRandom) throws InvalidKeyException 在KEM发送方创建一个KEM封装器。此方法等效于newEncapsulator(publicKey, null, secureRandom)。
- 参数:
- publicKey - 接收方的公钥,不得为null
- secureRandom - 用于封装的随机源。如果为null,则将使用实现中的默认源。
- 返回:
- 此密钥的封装器
- 抛出:
- InvalidKeyException - 如果publicKey为null或无效
- UnsupportedOperationException - 如果不支持此方法,因为必须提供AlgorithmParameterSpec
-
newEncapsulator
public KEM.Encapsulator newEncapsulator(PublicKey publicKey, AlgorithmParameterSpec spec, SecureRandom secureRandom) throws InvalidAlgorithmParameterException, InvalidKeyException 在KEM发送方创建一个KEM封装器。算法可以定义一个AlgorithmParameterSpec子类,在此方法中提供额外信息。如果相同的密钥可以以不同方式派生共享秘密,这将特别有用。如果需要传输此对象内的任何额外信息以便接收方能够创建匹配的解封装器,它将作为字节数组包含在封装输出的KEM.Encapsulated.params字段中。在这种情况下,安全提供程序应使用与KEM相同的算法名称提供AlgorithmParameters实现。接收方可以使用接收到的params字节数组启动这样的AlgorithmParameters实例,并恢复要在其newDecapsulator(PrivateKey, AlgorithmParameterSpec)调用中使用的AlgorithmParameterSpec对象。
- 参数:
-
publicKey
- 接收者的公钥,不得为null
-
spec
- 可选参数,可以为null
-
secureRandom
- 封装的随机源。如果为null,则将使用实现中的默认随机源。 - 返回:
- 此密钥的封装器
- 抛出:
-
InvalidAlgorithmParameterException
- 如果spec
无效或需要一个但spec
为null
-
InvalidKeyException
- 如果publicKey
为null
或无效
-
newDecapsulator
在KEM接收方创建一个KEM解封装器。此方法等效于
newDecapsulator(privateKey, null)
。- 参数:
-
privateKey
- 接收者的私钥,不得为null
- 返回:
- 此密钥的解封装器
- 抛出:
-
InvalidKeyException
- 如果privateKey
为null
或无效 -
UnsupportedOperationException
- 如果不支持此方法,因为必须提供AlgorithmParameterSpec
-
newDecapsulator
public KEM.Decapsulator newDecapsulator(PrivateKey privateKey, AlgorithmParameterSpec spec) throws InvalidAlgorithmParameterException, InvalidKeyException 在KEM接收方创建一个KEM解封装器。- 参数:
-
privateKey
- 接收者的私钥,不得为null
-
spec
- 参数,可以为null
- 返回:
- 此密钥的解封装器
- 抛出:
-
InvalidAlgorithmParameterException
- 如果spec
无效或需要一个但spec
为null
-
InvalidKeyException
- 如果privateKey
为null
或无效
-
getAlgorithm
返回此KEM
对象的算法名称。- 返回:
-
此
KEM
对象的算法名称。
-