incus: fix container tests from image rename (#360305)
[NixPkgs.git] / pkgs / tools / security / hashcat / default.nix
blob55201b3d848357d4b30d024451e3bf008eb61ece
1 { lib, stdenv
2 , addDriverRunpath
3 , config
4 , cudaPackages ? {}
5 , cudaSupport ? config.cudaSupport
6 , fetchurl
7 , makeWrapper
8 , opencl-headers
9 , ocl-icd
10 , xxHash
11 , Foundation, IOKit, Metal, OpenCL, libiconv
14 stdenv.mkDerivation rec {
15   pname   = "hashcat";
16   version = "6.2.6";
18   src = fetchurl {
19     url = "https://hashcat.net/files/hashcat-${version}.tar.gz";
20     sha256 = "sha256-sl4Qd7zzSQjMjxjBppouyYsEeyy88PURRNzzuh4Leyo=";
21   };
23   postPatch = ''
24      # MACOSX_DEPLOYMENT_TARGET is defined by the enviroment
25      # Remove hardcoded paths on darwin
26     substituteInPlace src/Makefile \
27       --replace "export MACOSX_DEPLOYMENT_TARGET" "#export MACOSX_DEPLOYMENT_TARGET" \
28       --replace "/usr/bin/ar" "ar" \
29       --replace "/usr/bin/sed" "sed" \
30       --replace '-i ""' '-i'
31   '';
33   nativeBuildInputs = [
34     makeWrapper
35   ] ++ lib.optionals cudaSupport [
36     addDriverRunpath
37   ];
39   buildInputs = [ opencl-headers xxHash ]
40     ++ lib.optionals stdenv.hostPlatform.isDarwin [ Foundation IOKit Metal OpenCL libiconv ];
42   makeFlags = [
43     "PREFIX=${placeholder "out"}"
44     "COMPTIME=1337"
45     "VERSION_TAG=${version}"
46     "USE_SYSTEM_OPENCL=1"
47     "USE_SYSTEM_XXHASH=1"
48   ] ++ lib.optionals (stdenv.hostPlatform.isDarwin && stdenv.hostPlatform == stdenv.buildPlatform) [
49     "IS_APPLE_SILICON='${if stdenv.hostPlatform.isAarch64 then "1" else "0"}'"
50   ];
52   enableParallelBuilding = true;
54   preFixup = ''
55     for f in $out/share/hashcat/OpenCL/*.cl; do
56       # Rewrite files to be included for compilation at runtime for opencl offload
57       sed "s|#include \"\(.*\)\"|#include \"$out/share/hashcat/OpenCL/\1\"|g" -i "$f"
58       sed "s|#define COMPARE_\([SM]\) \"\(.*\.cl\)\"|#define COMPARE_\1 \"$out/share/hashcat/OpenCL/\2\"|g" -i "$f"
59     done
60   '';
62   postFixup = let
63     LD_LIBRARY_PATH = builtins.concatStringsSep ":" ([
64       "${ocl-icd}/lib"
65     ] ++ lib.optionals cudaSupport [
66       "${cudaPackages.cudatoolkit}/lib"
67     ]);
68   in ''
69     wrapProgram $out/bin/hashcat \
70       --prefix LD_LIBRARY_PATH : ${lib.escapeShellArg LD_LIBRARY_PATH}
71   '' + lib.optionalString cudaSupport ''
72     for program in $out/bin/hashcat $out/bin/.hashcat-wrapped; do
73       isELF "$program" || continue
74       addDriverRunpath "$program"
75     done
76   '';
78   meta = with lib; {
79     description = "Fast password cracker";
80     mainProgram = "hashcat";
81     homepage    = "https://hashcat.net/hashcat/";
82     license     = licenses.mit;
83     platforms   = platforms.unix;
84     maintainers = with maintainers; [ felixalbrigtsen zimbatm ];
85   };