private void ECDH_GenerateEphemeral(EncryptMessage msg) { CBORObject epk = CBORObject.NewMap(); if (_mKey.AsString("kty") == "EC") { X9ECParameters p = NistNamedCurves.GetByName(_mKey.AsString("crv")); ECDomainParameters parameters = new ECDomainParameters(p.Curve, p.G, p.N, p.H); ECKeyPairGenerator pGen = new ECKeyPairGenerator(); ECKeyGenerationParameters genParam = new ECKeyGenerationParameters(parameters, Message.s_PRNG); pGen.Init(genParam); AsymmetricCipherKeyPair p1 = pGen.GenerateKeyPair(); epk.Add("kty", "EC"); epk.Add("crv", _mKey.AsString("crv")); ECPublicKeyParameters priv = (ECPublicKeyParameters)p1.Public; epk.Add("x", priv.Q.Normalize().XCoord.ToBigInteger().ToByteArrayUnsigned()); epk.Add("y", priv.Q.Normalize().YCoord.ToBigInteger().ToByteArrayUnsigned()); } else if (_mKey.AsString("kty") == "OKP") { switch (_mKey.AsString("crv")) { case "X25519": Ed25519KeyPairGenerator pGen = new Ed25519KeyPairGenerator(); Ed25519KeyGenerationParameters genParam = new Ed25519KeyGenerationParameters(Message.s_PRNG); pGen.Init(genParam); AsymmetricCipherKeyPair p1 = pGen.GenerateKeyPair(); Ed25519PublicKeyParameters pub = (Ed25519PublicKeyParameters)p1.Public; epk.Add("kty", "OKP"); epk.Add("crv", "X25519"); epk.Add("x", pub.GetEncoded()); break; default: throw new JoseException("Unknown OPK curve"); } } else { throw new JoseException("Internal Error"); } if (msg.FindAttribute(CBORObject.FromObject("epk"), PROTECTED) != null) { msg.AddAttribute(CBORObject.FromObject("epk"), epk, PROTECTED); } else if (msg.FindAttribute(CBORObject.FromObject("epk"), PROTECTED) != null) { msg.AddAttribute(CBORObject.FromObject("epk"), epk, PROTECTED); } else { AddAttribute("epk", epk, UNPROTECTED); } }
/// <summary> /// Generate key pair. /// </summary> /// <returns></returns> public override AsymmetricCipherKeyPair GenerateKeyPair() { IAsymmetricCipherKeyPairGenerator generator = new Ed25519KeyPairGenerator(); KeyGenerationParameters parameters = new Ed25519KeyGenerationParameters(Common.ThreadSecureRandom.Value); generator.Init(parameters); return(generator.GenerateKeyPair()); }
/// <summary> /// Create a key pair for by using a given curve /// </summary> /// <param name="curveName">the curve to use for key creation</param> public void CreateKeyPair(string curveName) { var keyGenerationParameters = new Ed25519KeyGenerationParameters(new SecureRandom()); var keyGenerator = new Ed25519KeyPairGenerator(); keyGenerator.Init(keyGenerationParameters); keyPair = keyGenerator.GenerateKeyPair(); }
// **** Code to be reviewed - it compiles, but he has little if any relationship with the Dart code... // **** public String getEncoded() { byte[] seedBytes = HexEncDec.StringToByteArray(Seed); Ed25519KeyPairGenerator wkGen = new Ed25519KeyPairGenerator(); SecureRandom rnd = new SecureRandom(seedBytes); Ed25519KeyGenerationParameters genPar = new Ed25519KeyGenerationParameters(rnd); wkGen.Init(genPar); AsymmetricCipherKeyPair keys = wkGen.GenerateKeyPair(); Ed25519PublicKeyParameters key = (Ed25519PublicKeyParameters)keys.Public; byte[] output = key.GetEncoded(); return(Convert.ToBase64String(output)); }