ElGamalKeyPairGenerator.cs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Parameters;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Math;
  6. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Crypto.Generators
  7. {
  8. /**
  9. * a ElGamal key pair generator.
  10. * <p>
  11. * This Generates keys consistent for use with ElGamal as described in
  12. * page 164 of "Handbook of Applied Cryptography".</p>
  13. */
  14. public class ElGamalKeyPairGenerator
  15. : IAsymmetricCipherKeyPairGenerator
  16. {
  17. private ElGamalKeyGenerationParameters param;
  18. public void Init(
  19. KeyGenerationParameters parameters)
  20. {
  21. this.param = (ElGamalKeyGenerationParameters) parameters;
  22. }
  23. public AsymmetricCipherKeyPair GenerateKeyPair()
  24. {
  25. DHKeyGeneratorHelper helper = DHKeyGeneratorHelper.Instance;
  26. ElGamalParameters egp = param.Parameters;
  27. DHParameters dhp = new DHParameters(egp.P, egp.G, null, 0, egp.L);
  28. BigInteger x = helper.CalculatePrivate(dhp, param.Random);
  29. BigInteger y = helper.CalculatePublic(dhp, x);
  30. return new AsymmetricCipherKeyPair(
  31. new ElGamalPublicKeyParameters(y, egp),
  32. new ElGamalPrivateKeyParameters(x, egp));
  33. }
  34. }
  35. }
  36. #pragma warning restore
  37. #endif