Add lease-bound Remote key IPC and SDK validation

This commit is contained in:
ak47 committed 2026-11-05 21:28:29 -05:00
1 parent 9ac33560dc
commit 792cac5d0b
12 files changed
+807 -9

No files matched your search

+39
View File
@@ -102,6 +102,45 @@ def valid_remote_presentation(request):
return False
def valid_remote_key(key):
"""Validate one logical key identity and transition, without desktop access."""
try:
_fields(key, ("name", "pressed"))
name = key["name"]
if not isinstance(name, str) or type(key["pressed"]) is not bool:
return False
if len(name) == 1 and name in "abcdefghijklmnopqrstuvwxyz0123456789":
return True
if (2 <= len(name) <= 3 and name[0] == "F" and name[1:].isascii()
and name[1:].isdecimal()):
number = int(name[1:])
return 1 <= number <= 24 and str(number) == name[1:]
if len(name) == 4 and name[:3] == "KP_" and name[3] in "0123456789":
return True
return name in (
"BackSpace", "Tab", "Return", "Escape", "space", "Pause", "Print", "Menu",
"Caps_Lock", "Num_Lock", "Scroll_Lock", "Shift_L", "Shift_R", "Control_L", "Control_R",
"Alt_L", "Alt_R", "Super_L", "Super_R", "Page_Up", "Page_Down", "End", "Home",
"Left", "Up", "Right", "Down", "Insert", "Delete",
"KP_Begin", "KP_Enter", "KP_Page_Up", "KP_Page_Down", "KP_End", "KP_Home",
"KP_Left", "KP_Up", "KP_Right", "KP_Down", "KP_Insert", "KP_Delete",
"KP_Multiply", "KP_Add", "KP_Separator", "KP_Subtract", "KP_Decimal", "KP_Divide",
"semicolon", "equal", "comma", "minus", "period", "slash", "grave", "bracketleft",
"backslash", "bracketright", "apostrophe")
except (ProtocolError, TypeError, ValueError):
return False
def valid_remote_key_request(request):
"""Validate remote.key parameters; consent and delivery checks belong to core."""
try:
_fields(request, ("lease", "epoch", "sequence", "key"))
return (_token(request["lease"]) and _positive(request["epoch"])
and _positive(request["sequence"]) and valid_remote_key(request["key"]))
except (ProtocolError, TypeError, ValueError, UnicodeError):
return False
class SessionError(Exception):
def __init__(self, code, message):
super().__init__("Tentacle session error " + str(code))