Esempio n. 1
0
        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;
        }
Esempio n. 2
0
        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);
        }