Ejemplo n.º 1
0
def test_key_derivation_old():
    keyderiv1 = kerberos.KeyDerivationOld()
    keyderiv2 = kerberos.KeyDerivationOld(5, 10)
    assert keyderiv1.derive_key(
        b"password",
        123456) == bytes.fromhex("bd9d83b0d4102b72de3e14f44938c989")
    assert keyderiv2.derive_key(
        b"password",
        123456) == bytes.fromhex("6ba537f0cc7e0d25813f2ea010eb2115")
Ejemplo n.º 2
0
	def __init__(self, access_key, version, settings=None):
		if settings:
			self.settings = settings.copy()
		else:
			self.settings = Settings()
		self.settings.set("server.access_key", access_key)
		self.settings.set("server.version", version)
		
		self.auth_client = authentication.AuthenticationClient(self)
		self.secure_client = secure.SecureClient(self)
		
		if self.settings.get("kerberos.key_derivation") == 0:
			self.key_derivation = kerberos.KeyDerivationOld(65000, 1024)
		else:
			self.key_derivation = kerberos.KeyDerivationNew(1, 1)
		
		self.nat_traversal_server = nat.NATTraversalServer()
		self.notification_server = notification.NotificationServer()
		self.nintendo_notification_server = nintendo_notification.NintendoNotificationServer()

		self.protocol_map = {
			self.nat_traversal_server.PROTOCOL_ID: self.nat_traversal_server,
			self.notification_server.PROTOCOL_ID: self.notification_server,
			self.nintendo_notification_server.PROTOCOL_ID: self.nintendo_notification_server
		}
Ejemplo n.º 3
0
    async def login(self, client, username):
        assert username == "username"

        pid = 1001

        stick = kerberos.ServerTicket()
        stick.timestamp = common.DateTime.now()
        stick.source = pid
        stick.session_key = bytes(32)

        ctick = kerberos.ClientTicket()
        ctick.session_key = bytes(32)
        ctick.target = 100
        ctick.internal = stick.encrypt(b"testkey", self.settings)

        kerb = kerberos.KeyDerivationOld(65000, 1024)
        key = kerb.derive_key(b"password", pid)

        connection_data = authentication.RVConnectionData()
        connection_data.main_station = common.StationURL(address=HOST,
                                                         port=12346,
                                                         PID=100,
                                                         sid=1)
        connection_data.special_protocols = []
        connection_data.special_station = common.StationURL()
        connection_data.server_time = common.DateTime.now()

        response = rmc.RMCResponse()
        response.result = common.Result.success()
        response.pid = pid
        response.ticket = ctick.encrypt(key, self.settings)
        response.connection_data = connection_data
        response.server_name = "server build name"
        return response
Ejemplo n.º 4
0
    def __init__(self, settings, client, host, port):
        self.settings = settings
        self.auth_client = client
        self.auth_host = host
        self.auth_port = port

        if settings["nex.version"] < 40000:
            self.auth_proto = authentication.AuthenticationClient(client)
        else:
            self.auth_proto = authentication.AuthenticationClientNX(client)

        if self.settings["kerberos.key_derivation"] == 0:
            self.key_derivation = kerberos.KeyDerivationOld(65000, 1024)
        else:
            self.key_derivation = kerberos.KeyDerivationNew(1, 1)
Ejemplo n.º 5
0
    def __init__(self, settings):
        super().__init__(settings)
        self.game_server_id = None
        self.access_key = None
        self.nex_version = None

        self.pid = None
        self.password = None

        self.environment = "L1"

        self.key_derivation = kerberos.KeyDerivationOld(65000, 1024)

        self.client = HTTPClient()
        self.call_id = 0
Ejemplo n.º 6
0
    def __init__(self, settings, game_server_id, nex_version, pid, password):
        self.settings = settings
        self.game_server_id = game_server_id
        self.nex_version = nex_version
        self.pid = pid
        self.password = password

        self.environment = "L1"

        self.key_derivation = kerberos.KeyDerivationOld(65000, 1024)

        self.call_id = 1

        ca = tls.TLSCertificate.load(CA, tls.TYPE_DER)
        self.context = tls.TLSContext()
        self.context.set_authority(ca)
Ejemplo n.º 7
0
    def __init__(self, settings=None):
        if isinstance(settings, Settings):
            self.settings = settings.copy()
        else:
            self.settings = Settings(settings)

        self.auth_client = service.RMCClient(self.settings)
        self.secure_client = service.RMCClient(self.settings)

        self.auth_proto = authentication.AuthenticationClient(self.auth_client)
        self.secure_proto = secure.SecureConnectionClient(self.secure_client)

        if self.settings.get("kerberos.key_derivation") == 0:
            self.key_derivation = kerberos.KeyDerivationOld(65000, 1024)
        else:
            self.key_derivation = kerberos.KeyDerivationNew(1, 1)

        self.pid = None
        self.local_station = None
        self.public_station = None
Ejemplo n.º 8
0
    def __init__(self, access_key, version, settings=None):
        if settings:
            self.settings = settings.copy()
        else:
            self.settings = Settings()
        self.settings.set("server.access_key", access_key)
        self.settings.set("server.version", version)

        self.auth_client = service.RMCClient(self.settings)
        self.secure_client = service.RMCClient(self.settings)

        self.auth_proto = authentication.AuthenticationClient(self.auth_client)
        self.secure_proto = secure.SecureConnectionClient(self.secure_client)

        if self.settings.get("kerberos.key_derivation") == 0:
            self.key_derivation = kerberos.KeyDerivationOld(65000, 1024)
        else:
            self.key_derivation = kerberos.KeyDerivationNew(1, 1)

        self.my_pid = None
        self.local_station = None
        self.public_station = None
Ejemplo n.º 9
0
def derive_key(user):
	deriv = kerberos.KeyDerivationOld(65000, 1024)
	return deriv.derive_key(user.password.encode("ascii"), user.pid)