package org.bouncycastle.pqc.crypto.newhope; import java.security.SecureRandom; import org.bouncycastle.crypto.params.AsymmetricKeyParameter; import org.bouncycastle.pqc.crypto.ExchangePair; import org.bouncycastle.pqc.crypto.ExchangePairGenerator; public class NHExchangePairGenerator implements ExchangePairGenerator { private final SecureRandom random; public NHExchangePairGenerator(SecureRandom random) { this.random = random; } public ExchangePair GenerateExchange(AsymmetricKeyParameter senderPublicKey) { return generateExchange(senderPublicKey); } public ExchangePair generateExchange(AsymmetricKeyParameter senderPublicKey) { NHPublicKeyParameters pubKey = (NHPublicKeyParameters)senderPublicKey; byte[] sharedValue = new byte[NewHope.AGREEMENT_SIZE]; byte[] publicKeyValue = new byte[NewHope.SENDB_BYTES]; NewHope.sharedB(random, sharedValue, publicKeyValue, pubKey.pubData); return new ExchangePair(new NHPublicKeyParameters(publicKeyValue), sharedValue); } }