internal void SendEncryptionRequest() { //Console.WriteLine("Authentication hash: {0}", Server.ServerHash); byte[] publicKey = PacketCryptography.PublicKeyToAsn1(Server.ServerKey); //byte[] publicKey = AsnKeyBuilder.PublicKeyToX509(Server.ServerKey).GetBytes(); //byte[] publicKey = PacketCryptography.PublicKeyToAsn1((RsaKeyParameters) Server.ServerKey.Public); short keyLength = (short)publicKey.Length; byte[] token = PacketCryptography.GetRandomToken(); short tokenLength = (short)token.Length; Console.WriteLine("Public Key Length: {0}", keyLength); Console.WriteLine("Public Key: {0}", BitConverter.ToString(publicKey)); Console.WriteLine("Token Length: {0}", tokenLength); Console.WriteLine("Token: {0}", BitConverter.ToString(token)); Console.WriteLine(""); Send_Sync_Packet(new EncryptionKeyRequest { ServerId = ConnectionId, PublicKey = publicKey, PublicKeyLength = keyLength, VerifyToken = token, VerifyTokenLength = tokenLength }); Token = token; }
public static bool IsAuthenticated(Client client) { if (client.Server.UseOfficalAuthentication) { try { var uri = new Uri( String.Format( "http://session.minecraft.net/game/checkserver.jsp?user={0}&serverId={1}", client.Username, // As per http://mc.kev009.com/Protocol_Encryption PacketCryptography.JavaHexDigest(Encoding.UTF8.GetBytes(client.ConnectionId) .Concat(client.SharedKey) .Concat(PacketCryptography.PublicKeyToAsn1(client.Server.ServerKey)) .ToArray()) )); string authenticated = Http.GetHttpResponse(uri); if (authenticated != "YES") { client.Kick("Authentication failed"); return(false); } } catch (Exception exc) { client.Kick("Error while authenticating..."); client.Logger.Log(exc); return(false); } return(true); } return(true); }