public class NTRUPlusKEMExtractor extends java.lang.Object implements EncapsulatedSecretExtractor
Not thread safe. The NTRUPlusEngine built here keeps one SHAKE instance in a field, so two threads sharing an extractor interleave its absorb and squeeze phases: the secrets they recover do not match the sender's, and an IllegalStateException from the digest is also possible. Give each thread its own extractor - construction is cheap, roughly a thousandth of a decapsulation. The KEM.Decapsulator that javax.crypto.KEM builds does exactly that, since that API requires decapsulate to be safe for concurrent use.
| Constructor and Description |
|---|
NTRUPlusKEMExtractor(NTRUPlusPrivateKeyParameters privateKey) |
| Modifier and Type | Method and Description |
|---|---|
byte[] |
extractSecret(byte[] encapsulation)
Extract the shared secret from an NTRU+ encapsulation.
|
int |
getEncapsulationLength()
Return the length in bytes of the encapsulation.
|
public NTRUPlusKEMExtractor(NTRUPlusPrivateKeyParameters privateKey)
public byte[] extractSecret(byte[] encapsulation)
NTRU+ rejects an invalid encapsulation explicitly rather than implicitly: there is no pseudorandom rejection secret, so an encapsulation that fails the re-encryption check, or is not a canonical encoding, is refused with an exception instead of yielding a secret.
extractSecret in interface EncapsulatedSecretExtractorencapsulation - the encapsulated secret.java.lang.IllegalArgumentException - if the encapsulation is the wrong length or is rejected.public int getEncapsulationLength()
EncapsulatedSecretExtractorgetEncapsulationLength in interface EncapsulatedSecretExtractor