From 9ef351981d998a547ff1a48457e29d23193b938c Mon Sep 17 00:00:00 2001 From: Spencer Pogorzelski <34356756+spencerpogo@users.noreply.github.com> Date: Sun, 29 Dec 2024 20:16:49 -0800 Subject: [PATCH 1/9] python3Packages.pyhidra: init at 1.3.0 --- .../python-modules/pyhidra/default.nix | 35 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 ++ 2 files changed, 37 insertions(+) create mode 100644 pkgs/development/python-modules/pyhidra/default.nix diff --git a/pkgs/development/python-modules/pyhidra/default.nix b/pkgs/development/python-modules/pyhidra/default.nix new file mode 100644 index 000000000000..b469a4eea5e4 --- /dev/null +++ b/pkgs/development/python-modules/pyhidra/default.nix @@ -0,0 +1,35 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + jpype1, + setuptools, + wheel, +}: + +buildPythonPackage rec { + pname = "pyhidra"; + version = "1.3.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "dod-cyber-crime-center"; + repo = "pyhidra"; + tag = version; + hash = "sha256-8xouU+S7Apy1ySIlvOLPerTApqKy/MNdl9vuBdt+9Vk="; + }; + + build-system = [ setuptools ]; + + dependencies = [ jpype1 ]; + + pythonImportsCheck = [ "pyhidra" ]; + + meta = { + description = "Provides direct access to the Ghidra API within a native CPython interpreter using jpype"; + homepage = "https://github.com/dod-cyber-crime-center/pyhidra"; + changelog = "https://github.com/dod-cyber-crime-center/pyhidra/blob/${src.tag}/CHANGELOG.md"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ scoder12 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 940bf5bfc123..8baf58516228 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -10922,6 +10922,8 @@ self: super: with self; { pyhepmc = callPackage ../development/python-modules/pyhepmc { }; + pyhidra = callPackage ../development/python-modules/pyhidra { }; + pyhive-integration = callPackage ../development/python-modules/pyhive-integration { }; pyhumps = callPackage ../development/python-modules/pyhumps { }; From 3aafc1f84f474323fa93c6164b565c801e52a799 Mon Sep 17 00:00:00 2001 From: Spencer Pogorzelski <34356756+spencerpogo@users.noreply.github.com> Date: Sun, 29 Dec 2024 20:18:57 -0800 Subject: [PATCH 2/9] python3Packages.jfx-bridge: init at 1.0.0 --- .../python-modules/jfx-bridge/default.nix | 50 +++++++++++++++++++ .../jfx-bridge/no-invoke-git.patch | 13 +++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 65 insertions(+) create mode 100644 pkgs/development/python-modules/jfx-bridge/default.nix create mode 100644 pkgs/development/python-modules/jfx-bridge/no-invoke-git.patch diff --git a/pkgs/development/python-modules/jfx-bridge/default.nix b/pkgs/development/python-modules/jfx-bridge/default.nix new file mode 100644 index 000000000000..b2a5253bd149 --- /dev/null +++ b/pkgs/development/python-modules/jfx-bridge/default.nix @@ -0,0 +1,50 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + pytestCheckHook, + setuptools, + wheel, +}: + +buildPythonPackage rec { + pname = "jfx-bridge"; + version = "1.0.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "justfoxing"; + repo = "jfx_bridge"; + tag = version; + hash = "sha256-fpUrKNGqTpthhTfohCbwO1GBDAP/YnLWeapVhZftldg="; + }; + + patches = [ ./no-invoke-git.patch ]; + postPatch = '' + substituteInPlace ./setup.py --subst-var-by version ${version} + ''; + + build-system = [ setuptools ]; + + doCheck = true; + nativeCheckInputs = [ pytestCheckHook ]; + preCheck = '' + python test_bridge_server.py & + ''; + + disabledTests = [ + # known to cause timeout with newer python (acknowledged in test comment) + "test_nonreturn_marker_local" + # the mechanisms that hook into the python import machinery seem broken on newer python + "TestBridgeHookImport" + ]; + + pythonImportsCheck = [ "jfx_bridge" ]; + + meta = { + description = "Base Python2/3 RPC bridge used for ghidra_bridge"; + homepage = "https://github.com/justfoxing/jfx_bridge"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ scoder12 ]; + }; +} diff --git a/pkgs/development/python-modules/jfx-bridge/no-invoke-git.patch b/pkgs/development/python-modules/jfx-bridge/no-invoke-git.patch new file mode 100644 index 000000000000..2c1f53ca2d6c --- /dev/null +++ b/pkgs/development/python-modules/jfx-bridge/no-invoke-git.patch @@ -0,0 +1,13 @@ +diff --git a/setup.py b/setup.py +index 079cb01..c5e71b8 100644 +--- a/setup.py ++++ b/setup.py +@@ -6,7 +6,7 @@ with open("README.md", "r") as fh: + long_description = fh.read() + + # determine the version, then write it out into the bridge.py file +-version = subprocess.check_output("git describe --tags", shell=True).decode("utf-8").strip() ++version = "@version@" + # check if this is a non-tag release and remark it as a dev release + if "-" in version: + ver, commits, hash = version.split("-") diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 8baf58516228..023fef810a76 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -6800,6 +6800,8 @@ self: super: with self; { jh2 = callPackage ../development/python-modules/jh2 { }; + jfx-bridge = callPackage ../development/python-modules/jfx-bridge { }; + jianpu-ly = callPackage ../development/python-modules/jianpu-ly { }; jieba = callPackage ../development/python-modules/jieba { }; From 05b4079354af2f7ab12297d51716809a30bbd6f6 Mon Sep 17 00:00:00 2001 From: Spencer Pogorzelski <34356756+spencerpogo@users.noreply.github.com> Date: Sun, 29 Dec 2024 20:21:52 -0800 Subject: [PATCH 3/9] python3Packages.ghidra-bridge: init at 1.0.0 --- .../python-modules/ghidra-bridge/default.nix | 39 +++++++++++++++++++ .../ghidra-bridge/no-invoke-git.patch | 13 +++++++ pkgs/top-level/python-packages.nix | 2 + 3 files changed, 54 insertions(+) create mode 100644 pkgs/development/python-modules/ghidra-bridge/default.nix create mode 100644 pkgs/development/python-modules/ghidra-bridge/no-invoke-git.patch diff --git a/pkgs/development/python-modules/ghidra-bridge/default.nix b/pkgs/development/python-modules/ghidra-bridge/default.nix new file mode 100644 index 000000000000..22683a46f6fc --- /dev/null +++ b/pkgs/development/python-modules/ghidra-bridge/default.nix @@ -0,0 +1,39 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + jfx-bridge, + setuptools, + wheel, +}: + +buildPythonPackage rec { + pname = "ghidra-bridge"; + version = "1.0.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "justfoxing"; + repo = "ghidra_bridge"; + tag = version; + hash = "sha256-VcAl1tamsuHvZRtBP0+DCl2A9d7E6aoj2AbJhEcBNMM="; + }; + + patches = [ ./no-invoke-git.patch ]; + postPatch = '' + substituteInPlace ./setup.py --subst-var-by version ${version} + ''; + + build-system = [ setuptools ]; + + dependencies = [ jfx-bridge ]; + + pythonImportsCheck = [ "ghidra_bridge" ]; + + meta = { + description = "Python 3 bridge to Ghidra's Python scripting"; + homepage = "https://github.com/justfoxing/ghidra_bridge"; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ scoder12 ]; + }; +} diff --git a/pkgs/development/python-modules/ghidra-bridge/no-invoke-git.patch b/pkgs/development/python-modules/ghidra-bridge/no-invoke-git.patch new file mode 100644 index 000000000000..f82ebccde6ea --- /dev/null +++ b/pkgs/development/python-modules/ghidra-bridge/no-invoke-git.patch @@ -0,0 +1,13 @@ +diff --git a/setup.py b/setup.py +index 9a2abe0..75ce109 100644 +--- a/setup.py ++++ b/setup.py +@@ -6,7 +6,7 @@ with open("README.md", "r") as fh: + + # determine the version, then write it out into the bridge.py file + version = ( +- subprocess.check_output("git describe --tags", shell=True).decode("utf-8").strip() ++ "@version@" + ) + # check if this is a non-tag release and remark it as a dev release + if "-" in version: diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 023fef810a76..63222e374f80 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -5371,6 +5371,8 @@ self: super: with self; { ghdiff = callPackage ../development/python-modules/ghdiff { }; + ghidra-bridge = callPackage ../development/python-modules/ghidra-bridge { }; + ghome-foyer-api = callPackage ../development/python-modules/ghome-foyer-api { }; ghp-import = callPackage ../development/python-modules/ghp-import { }; From 9721e398a4bab2224b54c7895f73f66a38877483 Mon Sep 17 00:00:00 2001 From: Spencer Pogorzelski <34356756+spencerpogo@users.noreply.github.com> Date: Sun, 29 Dec 2024 20:24:46 -0800 Subject: [PATCH 4/9] python3Packages.libbs: init at 2.8.0 --- .../python-modules/libbs/default.nix | 54 +++++++++++++++++++ pkgs/top-level/python-packages.nix | 2 + 2 files changed, 56 insertions(+) create mode 100644 pkgs/development/python-modules/libbs/default.nix diff --git a/pkgs/development/python-modules/libbs/default.nix b/pkgs/development/python-modules/libbs/default.nix new file mode 100644 index 000000000000..a31af467594b --- /dev/null +++ b/pkgs/development/python-modules/libbs/default.nix @@ -0,0 +1,54 @@ +{ + lib, + buildPythonPackage, + fetchFromGitHub, + filelock, + ghidra-bridge, + jfx-bridge, + platformdirs, + prompt-toolkit, + psutil, + pycparser, + pyhidra, + setuptools, + toml, + tqdm, + wheel, +}: + +buildPythonPackage rec { + pname = "libbs"; + version = "2.8.0"; + pyproject = true; + + src = fetchFromGitHub { + owner = "binsync"; + repo = "libbs"; + tag = "v${version}"; + hash = "sha256-YCLl5e/ecZQ6MZwQ9FRDtBHLwG5DltYSaH5q4Xy5D0M="; + }; + + build-system = [ setuptools ]; + + dependencies = [ + toml + pycparser + prompt-toolkit + tqdm + jfx-bridge + ghidra-bridge + psutil + pyhidra + platformdirs + filelock + ]; + + pythonImportsCheck = [ "libbs" ]; + + meta = { + description = "Library for writing plugins in any decompiler: includes API lifting, common data formatting, and GUI abstraction"; + homepage = "https://github.com/binsync/libbs"; + license = lib.licenses.bsd2; + maintainers = with lib.maintainers; [ scoder12 ]; + }; +} diff --git a/pkgs/top-level/python-packages.nix b/pkgs/top-level/python-packages.nix index 63222e374f80..62393d21b25d 100644 --- a/pkgs/top-level/python-packages.nix +++ b/pkgs/top-level/python-packages.nix @@ -7448,6 +7448,8 @@ self: super: with self; { libagent = callPackage ../development/python-modules/libagent { }; + libbs = callPackage ../development/python-modules/libbs { }; + pa-ringbuffer = callPackage ../development/python-modules/pa-ringbuffer { }; lib4sbom = callPackage ../development/python-modules/lib4sbom { }; From 38b3aba4b14595bd8d5540be65873fe9771fb912 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 22 Mar 2025 19:54:17 +0100 Subject: [PATCH 5/9] python313Packages.jfx-bridge: refactor --- pkgs/development/python-modules/jfx-bridge/default.nix | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pkgs/development/python-modules/jfx-bridge/default.nix b/pkgs/development/python-modules/jfx-bridge/default.nix index b2a5253bd149..2c261be4b96a 100644 --- a/pkgs/development/python-modules/jfx-bridge/default.nix +++ b/pkgs/development/python-modules/jfx-bridge/default.nix @@ -3,8 +3,8 @@ buildPythonPackage, fetchFromGitHub, pytestCheckHook, + python, setuptools, - wheel, }: buildPythonPackage rec { @@ -20,16 +20,17 @@ buildPythonPackage rec { }; patches = [ ./no-invoke-git.patch ]; + postPatch = '' substituteInPlace ./setup.py --subst-var-by version ${version} ''; build-system = [ setuptools ]; - doCheck = true; nativeCheckInputs = [ pytestCheckHook ]; + preCheck = '' - python test_bridge_server.py & + ${python.interpreter} test_bridge_server.py & ''; disabledTests = [ @@ -42,8 +43,9 @@ buildPythonPackage rec { pythonImportsCheck = [ "jfx_bridge" ]; meta = { - description = "Base Python2/3 RPC bridge used for ghidra_bridge"; + description = "Base Python RPC bridge used for ghidra_bridge"; homepage = "https://github.com/justfoxing/jfx_bridge"; + changelog = "https://github.com/justfoxing/jfx_bridge/releases/tag/${src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ scoder12 ]; }; From f8f303279a6de8f9570fe0eb32cdff9cf4297330 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 22 Mar 2025 19:54:57 +0100 Subject: [PATCH 6/9] python313Packages.ghidra-bridge: refactor --- pkgs/development/python-modules/ghidra-bridge/default.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/ghidra-bridge/default.nix b/pkgs/development/python-modules/ghidra-bridge/default.nix index 22683a46f6fc..2c50519da9bd 100644 --- a/pkgs/development/python-modules/ghidra-bridge/default.nix +++ b/pkgs/development/python-modules/ghidra-bridge/default.nix @@ -4,7 +4,6 @@ fetchFromGitHub, jfx-bridge, setuptools, - wheel, }: buildPythonPackage rec { @@ -20,6 +19,7 @@ buildPythonPackage rec { }; patches = [ ./no-invoke-git.patch ]; + postPatch = '' substituteInPlace ./setup.py --subst-var-by version ${version} ''; @@ -28,11 +28,15 @@ buildPythonPackage rec { dependencies = [ jfx-bridge ]; + # Tests require a running server instance + doCheck = false; + pythonImportsCheck = [ "ghidra_bridge" ]; meta = { - description = "Python 3 bridge to Ghidra's Python scripting"; + description = "Python bridge to Ghidra's Python scripting"; homepage = "https://github.com/justfoxing/ghidra_bridge"; + changelog = "https://github.com/justfoxing/ghidra_bridge/releases/tag/${src.tag}"; license = lib.licenses.mit; maintainers = with lib.maintainers; [ scoder12 ]; }; From cea70513ef0d89784ba89cfa80aff66e179d4eef Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 22 Mar 2025 20:05:25 +0100 Subject: [PATCH 7/9] python313Packages.pyhidra: enable tests --- .../python-modules/pyhidra/default.nix | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/pkgs/development/python-modules/pyhidra/default.nix b/pkgs/development/python-modules/pyhidra/default.nix index b469a4eea5e4..0afc76e3e63c 100644 --- a/pkgs/development/python-modules/pyhidra/default.nix +++ b/pkgs/development/python-modules/pyhidra/default.nix @@ -3,8 +3,9 @@ buildPythonPackage, fetchFromGitHub, jpype1, + pytest-datadir, + pytestCheckHook, setuptools, - wheel, }: buildPythonPackage rec { @@ -23,8 +24,29 @@ buildPythonPackage rec { dependencies = [ jpype1 ]; + nativeCheckInputs = [ + pytest-datadir + pytestCheckHook + ]; + pythonImportsCheck = [ "pyhidra" ]; + disabledTests = [ + # Tests require a running Ghidra instance + "test_invalid_jpype_keyword_arg" + "test_invalid_vm_arg_succeed" + "test_run_script" + "test_open_program" + "test_no_compiler" + "test_no_language_with_compiler" + "test_loader" + "test_invalid_loader_type" + "test_no_project" + "test_no_program" + "test_import_script" + "test_import_ghidra_base_java_packages" + ]; + meta = { description = "Provides direct access to the Ghidra API within a native CPython interpreter using jpype"; homepage = "https://github.com/dod-cyber-crime-center/pyhidra"; From efb8296294cb3fe1790b29126e9b144a7aeffb0f Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 22 Mar 2025 20:15:32 +0100 Subject: [PATCH 8/9] python313Packages.libbs: enable tests --- .../python-modules/libbs/default.nix | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/pkgs/development/python-modules/libbs/default.nix b/pkgs/development/python-modules/libbs/default.nix index a31af467594b..8f004b52fa4e 100644 --- a/pkgs/development/python-modules/libbs/default.nix +++ b/pkgs/development/python-modules/libbs/default.nix @@ -10,10 +10,11 @@ psutil, pycparser, pyhidra, + pytestCheckHook, setuptools, toml, tqdm, - wheel, + writableTmpDirAsHomeHook, }: buildPythonPackage rec { @@ -31,23 +32,35 @@ buildPythonPackage rec { build-system = [ setuptools ]; dependencies = [ - toml - pycparser - prompt-toolkit - tqdm - jfx-bridge - ghidra-bridge - psutil - pyhidra - platformdirs filelock + ghidra-bridge + jfx-bridge + platformdirs + prompt-toolkit + psutil + pycparser + pyhidra + toml + tqdm + ]; + + nativeCheckInputs = [ + pytestCheckHook + writableTmpDirAsHomeHook ]; pythonImportsCheck = [ "libbs" ]; + disabledTests = [ + "test_change_watcher_plugin_cli" + "test_ghidra_artifact_watchers" + "TestHeadlessInterfaces" + ]; + meta = { description = "Library for writing plugins in any decompiler: includes API lifting, common data formatting, and GUI abstraction"; homepage = "https://github.com/binsync/libbs"; + changelog = "https://github.com/binsync/libbs/releases/tag/${src.tag}"; license = lib.licenses.bsd2; maintainers = with lib.maintainers; [ scoder12 ]; }; From debdb685461e9db63ba615ec5504eb9fbd8455b2 Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sat, 22 Mar 2025 20:21:28 +0100 Subject: [PATCH 9/9] python313Packages.libbs: 2.8.0 -> 2.11.1 Diff: https://github.com/binsync/libbs/compare/refs/tags/v2.8.0...v2.11.1 Changelog: https://github.com/binsync/libbs/releases/tag/v2.11.1 --- pkgs/development/python-modules/libbs/default.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pkgs/development/python-modules/libbs/default.nix b/pkgs/development/python-modules/libbs/default.nix index 8f004b52fa4e..3fb3de5bd5f8 100644 --- a/pkgs/development/python-modules/libbs/default.nix +++ b/pkgs/development/python-modules/libbs/default.nix @@ -5,6 +5,7 @@ filelock, ghidra-bridge, jfx-bridge, + networkx, platformdirs, prompt-toolkit, psutil, @@ -19,14 +20,14 @@ buildPythonPackage rec { pname = "libbs"; - version = "2.8.0"; + version = "2.11.1"; pyproject = true; src = fetchFromGitHub { owner = "binsync"; repo = "libbs"; tag = "v${version}"; - hash = "sha256-YCLl5e/ecZQ6MZwQ9FRDtBHLwG5DltYSaH5q4Xy5D0M="; + hash = "sha256-hYRRmnxA6K7O6suaP1eGRnY89gok3JNNsL70XRGWYBU="; }; build-system = [ setuptools ]; @@ -35,6 +36,7 @@ buildPythonPackage rec { filelock ghidra-bridge jfx-bridge + networkx platformdirs prompt-toolkit psutil