blob: 38b826f43794ad8305836ad8d813103ac874e270 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Utilities;
namespace Org.BouncyCastle.Pqc.Crypto.Crystals.Kyber
{
public class KyberKEMExtractor
: IEncapsulatedSecretExtractor
{
private KyberEngine engine;
private KyberKeyParameters key;
public KyberKEMExtractor(KyberKeyParameters privParams)
{
this.key = privParams;
InitCipher(key.Parameters);
}
private void InitCipher(KyberParameters param)
{
engine = param.GetEngine();
}
public byte[] ExtractSecret(byte[] encapsulation)
{
byte[] sessionKey = new byte[engine.CryptoBytes];
engine.KemDecrypt(sessionKey, encapsulation, ((KyberPrivateKeyParameters) key).privateKey);
byte[] rv = Arrays.CopyOfRange(sessionKey, 0, key.Parameters.DefaultKeySize / 8);
Arrays.Clear(sessionKey);
return rv;
}
public int EncapsulationLength => engine.CryptoCipherTextBytes;
}
}
|