;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2015 Steve Sprang <scs@stevesprang.com>
-;;; Copyright © 2015, 2016, 2017, 2018 Efraim Flashner <efraim@flashner.co.il>
+;;; Copyright © 2015, 2016, 2017, 2018, 2019 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2015 Aljosha Papsch <misc@rpapsch.de>
;;; Copyright © 2016 Christopher Allan Webber <cwebber@dustycloud.org>
;;; Copyright © 2016 Jessica Tallon <tsyesika@tsyesika.se>
;;; Copyright © 2016 Andreas Enge <andreas@enge.fr>
;;; Copyright © 2016 Lukas Gradl <lgradl@openmailbox.org>
-;;; Copyright © 2016 Alex Griffin <a@ajgrf.com>
+;;; Copyright © 2016, 2019 Alex Griffin <a@ajgrf.com>
;;; Copyright © 2017 Leo Famulari <leo@famulari.name>
;;; Copyright © 2017, 2018 Clément Lassieur <clement@lassieur.org>
-;;; Copyright © 2017, 2018 Tobias Geerinckx-Rice <me@tobias.gr>
+;;; Copyright © 2017, 2018, 2019 Tobias Geerinckx-Rice <me@tobias.gr>
;;; Copyright © 2017 Jelle Licht <jlicht@fsfe.org>
-;;; Copyright © 2017 Eric Bavier <bavier@member.fsf.org>
+;;; Copyright © 2017, 2019 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2017 Nicolas Goaziou <mail@nicolasgoaziou.fr>
;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <manolis837@gmail.com>
;;; Copyright © 2017 Rutger Helling <rhelling@mykolab.com>
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;; Copyright © 2018 Pierre Neidhardt <mail@ambrevar.xyz>
;;; Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
+;;; Copyright © 2018, 2019 Tim Gesthuizen <tim.gesthuizen@yahoo.de>
+;;; Copyright © 2019 Jens Mølgaard <jens@zete.tk>
+;;; Copyright © 2019 Tanguy Le Carrour <tanguy@bioneland.org>
;;;
;;; This file is part of GNU Guix.
;;;
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix build-system cmake)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system trivial)
#:use-module (guix download)
+ #:use-module (guix git-download)
#:use-module (guix packages)
#:use-module (gnu packages)
#:use-module (gnu packages admin)
#:use-module (gnu packages aidc)
+ #:use-module (gnu packages authentication)
#:use-module (gnu packages base)
#:use-module (gnu packages check)
#:use-module (gnu packages compression)
#:use-module (gnu packages crypto)
#:use-module (gnu packages curl)
+ #:use-module (gnu packages file)
#:use-module (gnu packages freedesktop)
+ #:use-module (gnu packages gettext)
#:use-module (gnu packages glib)
#:use-module (gnu packages gnupg)
- #:use-module (gnu packages gnuzilla)
#:use-module (gnu packages gtk)
#:use-module (gnu packages guile)
#:use-module (gnu packages kerberos)
#:use-module (gnu packages man)
#:use-module (gnu packages multiprecision)
#:use-module (gnu packages ncurses)
+ #:use-module (gnu packages nss)
#:use-module (gnu packages opencl)
#:use-module (gnu packages perl)
#:use-module (gnu packages pkg-config)
#:use-module (gnu packages python)
#:use-module (gnu packages python-web)
+ #:use-module (gnu packages python-xyz)
+ #:use-module (gnu packages readline)
+ #:use-module (gnu packages ruby)
+ #:use-module (gnu packages security-token)
#:use-module (gnu packages suckless)
+ #:use-module (gnu packages tcl)
#:use-module (gnu packages tls)
#:use-module (gnu packages qt)
#:use-module (gnu packages version-control)
+ #:use-module (gnu packages wxwidgets)
#:use-module (gnu packages xdisorg)
#:use-module (gnu packages xorg)
#:use-module (gnu packages xml)
(define-public keepassxc
(package
(name "keepassxc")
- (version "2.3.4")
+ (version "2.5.1")
(source
(origin
(method url-fetch)
- (uri (string-append "https://github.com/keepassxreboot/" name
+ (uri (string-append "https://github.com/keepassxreboot/keepassxc"
"/releases/download/" version "/keepassxc-"
version "-src.tar.xz"))
(sha256
(base32
- "02kq0a7a7hpw824n03apma00yq1c6dds224g15mrnnqqjn4af90c"))))
+ "0c5g5hn2cr2m00xgpxg884ihy8gnn09kc487y1m9jywshn5jaczg"))))
(build-system cmake-build-system)
(arguments
- '(#:configure-flags '("-DWITH_XC_NETWORKING=YES"
- "-DWITH_XC_BROWSER=YES"
- "-DWITH_XC_SSHAGENT=YES")))
+ '(#:configure-flags '("-DWITH_XC_ALL=YES"
+ "-DWITH_XC_UPDATECHECK=NO")))
(inputs
`(("argon2" ,argon2)
- ("curl" ,curl) ; XC_NETWORKING
("libgcrypt" ,libgcrypt)
("libsodium" ,libsodium) ; XC_BROWSER
+ ("libyubikey" ,libyubikey) ; XC_YUBIKEY
("libxi" ,libxi)
("libxtst" ,libxtst)
+ ("qrencode" ,qrencode)
("qtbase" ,qtbase)
+ ("qtsvg" ,qtsvg)
("qtx11extras" ,qtx11extras)
+ ("quazip" ,quazip) ; XC_KEESHARE
+ ("readline" ,readline)
+ ("yubikey-personalization" ,yubikey-personalization) ; XC_YUBIKEY
("zlib" ,zlib)))
(native-inputs
`(("qttools" ,qttools)))
database, which is locked with one master key or a key-file which can be stored
on an external storage device. The databases are encrypted using the
algorithms AES or Twofish.")
- ;; Non-functional parts use various licences.
+ ;; While various parts of the software are licensed under different licenses,
+ ;; the combined work falls under the GPLv3.
(license license:gpl3)))
(define-public keepassx
(license license:gpl3)
(properties `((superseded . ,keepassxc)))))
+(define-public pwsafe
+ (package
+ (name "pwsafe")
+ (version "3.50.0")
+ (home-page "https://www.pwsafe.org/")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/pwsafe/pwsafe.git")
+ (commit version)))
+ (sha256
+ (base32 "01kfssd2vr64yh4dqhch58x36n3aj3hpj5n560f41rsxym69c6qs"))
+ (file-name (git-file-name name version))))
+ (build-system cmake-build-system)
+ (native-inputs
+ `(("gettext" ,gettext-minimal)
+ ("gtest" ,googletest)
+ ("perl" ,perl)
+ ("zip" ,zip)))
+ (inputs `(("curl" ,curl)
+ ("file" ,file)
+ ("libuuid" ,util-linux)
+ ("libxt" ,libxt)
+ ("libxtst" ,libxtst)
+ ("openssl" ,openssl)
+ ("qrencode" ,qrencode)
+ ("wxwidgets" ,wxwidgets)
+ ("xerces-c" ,xerces-c)))
+ (arguments '(#:configure-flags (list "-DNO_GTEST=YES")
+ #:phases (modify-phases %standard-phases
+ (add-after 'unpack 'add-gtest
+ (lambda* (#:key inputs #:allow-other-keys)
+ (chmod "CMakeLists.txt" #o644)
+ (let ((cmake-port (open-file "CMakeLists.txt"
+ "a")))
+ (display "find_package(GTest)
+add_subdirectory(src/test)\n" cmake-port)
+ (close cmake-port)
+ #t)))
+ (add-after 'add-gtest 'patch-executables
+ (lambda* (#:key inputs #:allow-other-keys)
+ (chmod "src/test/OSTest.cpp" #o644)
+ (substitute* "src/os/unix/media.cpp"
+ (("/usr/bin/file")
+ (string-append (assoc-ref inputs "file")
+ "/bin/file")))
+ #t)))))
+ (synopsis "Password safe with automatic input and key generation")
+ (description "pwsafe is a password manager originally designed by Bruce
+Schneier. It offers a simple UI to manage passwords for different services.
+There are other programs that support the file format on different
+platforms.")
+ (license license:artistic2.0)))
+
(define-public shroud
(package
(name "shroud")
- (version "0.1.1")
+ (version "0.1.2")
(source (origin
(method url-fetch)
(uri (string-append "https://files.dthompson.us/shroud/shroud-"
version ".tar.gz"))
(sha256
(base32
- "1y43yhgy2zbrk5bqj3qyx9rkcz2bma9sinlrg7dip3jqms9gq4lr"))))
+ "1l2shrhvcwfzkar9qiwb75nhcqmx25iz55lzmz0c187nbjhqzi9p"))))
(build-system gnu-build-system)
+ (native-inputs
+ `(("pkg-config" ,pkg-config)))
(arguments
- '(#:phases
+ `(#:modules ((guix build gnu-build-system)
+ (guix build utils)
+ (ice-9 popen)
+ (ice-9 rdelim))
+ #:phases
(modify-phases %standard-phases
(add-after 'install 'wrap-shroud
- (lambda* (#:key outputs #:allow-other-keys)
+ (lambda* (#:key inputs outputs #:allow-other-keys)
(let* ((out (assoc-ref outputs "out"))
- (ccachedir (string-append out "/lib/guile/2.0/ccache"))
+ (guile (assoc-ref inputs "guile"))
+ (effective (read-line
+ (open-pipe* OPEN_READ
+ (string-append guile "/bin/guile")
+ "-c" "(display (effective-version))")))
+ (ccachedir (string-append out
+ "/lib/guile/" effective "/site-ccache"))
(prog (string-append out "/bin/shroud")))
(wrap-program prog
`("GUILE_LOAD_COMPILED_PATH" ":" prefix (,ccachedir)))
#t))))))
(inputs
- `(("guile" ,guile-2.0)
+ `(("guile" ,guile-2.2)
("gnupg" ,gnupg)
("xclip" ,xclip)))
(synopsis "GnuPG-based secret manager")
(define-public yapet
(package
(name "yapet")
- (version "1.1")
- (source (origin
- (method url-fetch)
- (uri (string-append "http://www.guengel.ch/myapps/yapet/downloads/yapet-"
- version
- ".tar.bz2"))
- (sha256
- (base32
- "1lq46mpxdsbl6qw4cj58hp9q7jckmyvbsi08p5zr77rjgqadxyyy"))))
+ (version "2.3")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://yapet.guengel.ch/downloads/yapet-"
+ version ".tar.xz"))
+ (sha256
+ (base32 "1fl4s7v1psl52ndd6i7716i9f493aj8ipl6lgmraadnn5h26l3pm"))))
(build-system gnu-build-system)
(inputs
- `(("ncurses" ,ncurses)
+ `(("argon2" ,argon2)
+ ("ncurses" ,ncurses)
("openssl" ,openssl)))
(native-inputs
- `(("pkg-config" ,pkg-config)))
+ `(("cppunit" ,cppunit)
+ ("pkg-config" ,pkg-config)))
(synopsis "Yet Another Password Encryption Tool")
(description "YAPET is a text based password manager using the Blowfish
encryption algorithm. Because of its small footprint and very few library
(define-public cracklib
(package
(name "cracklib")
- (version "2.9.6")
- (source (origin
- (method url-fetch)
- (uri (string-append "https://github.com/cracklib/cracklib/"
- "releases/download/" name "-" version "/"
- name "-" version ".tar.gz"))
- (patches (search-patches "cracklib-CVE-2016-6318.patch"
- "cracklib-fix-buffer-overflow.patch"))
- (sha256
- (base32
- "0hrkb0prf7n92w6rxgq0ilzkk6rkhpys2cfqkrbzswp27na7dkqp"))))
+ (version "2.9.7")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://github.com/cracklib/cracklib/"
+ "releases/download/v" version "/"
+ "cracklib-" version ".tar.bz2"))
+ (sha256
+ (base32 "1rimpjsdnmw8f5b7k558cic41p2qy2n2yrlqp5vh7mp4162hk0py"))))
(build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'install 'install-dict
+ (lambda* (#:key make-flags #:allow-other-keys)
+ (begin
+ (chmod (string-append "util/cracklib-format") #o755)
+ (apply invoke "make" "dict" make-flags)
+ #t))))))
(synopsis "Password checking library")
(home-page "https://github.com/cracklib/cracklib")
(description
(define-public libpwquality
(package
(name "libpwquality")
- (version "1.4.0")
+ (version "1.4.2")
(source (origin
(method url-fetch)
(uri (list
- (string-append "https://github.com/" name "/" name
- "/releases/download/" name "-" version
- "/" name "-" version ".tar.bz2")
+ (string-append "https://github.com/libpwquality/libpwquality"
+ "/releases/download/libpwquality-" version
+ "/libpwquality-" version ".tar.bz2")
(string-append "https://launchpad.net/libpwquality/trunk/"
version "/+download/"
- name "-" version ".tar.bz2")))
+ "libpwquality-" version ".tar.bz2")))
(sha256
(base32
- "0syyz8r54l8mqmbb0mw19qz4z2cx8gdgidicb8k2s5zjdh2gzrhx"))))
+ "13hw532fmzc5xjpy75d74rlfdlxf2a8ibb4hyy9c0s92wsgf0qsj"))))
(build-system gnu-build-system)
(arguments
;; XXX: have RUNPATH issue.
#t)))
(add-after 'install 'manpage
(lambda* (#:key outputs #:allow-other-keys)
- (and
- ;; Without this substitution, it fails with
- ;; ImportError: No module named 'gpg'
- (substitute* "Makefile"
- (("PYTHONPATH=.") ""))
- (zero? (system* "make" "assword.1"))
- (install-file
- "assword.1"
- (string-append (assoc-ref outputs "out") "/share/man/man1"))))))))
+ ;; Without this substitution, it fails with
+ ;; ImportError: No module named 'gpg'
+ (substitute* "Makefile"
+ (("PYTHONPATH=.") ""))
+ (invoke "make" "assword.1")
+ (install-file
+ "assword.1"
+ (string-append (assoc-ref outputs "out") "/share/man/man1")))))))
(build-system python-build-system)
(native-inputs
`(("txt2man" ,txt2man)))
(modify-phases %standard-phases
(delete 'configure)
(delete 'build)
+ (add-before 'install 'patch-system-extension-dir
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (extension-dir (string-append out "/lib/password-store/extensions")))
+ (substitute* "src/password-store.sh"
+ (("^SYSTEM_EXTENSION_DIR=.*$")
+ ;; lead with whitespace to prevent 'make install' from
+ ;; overwriting it again
+ (string-append " SYSTEM_EXTENSION_DIR=\""
+ "${PASSWORD_STORE_SYSTEM_EXTENSION_DIR:-"
+ extension-dir
+ "}\"\n"))))
+ #t))
(add-before 'install 'patch-passmenu-path
(lambda* (#:key inputs #:allow-other-keys)
(substitute* "contrib/dmenu/passmenu"
;; timeout in some circumstances.
#:parallel-tests? #f
#:test-target "test"))
+ (native-search-paths
+ (list (search-path-specification
+ (variable "PASSWORD_STORE_SYSTEM_EXTENSION_DIR")
+ (separator #f) ;single entry
+ (files '("lib/password-store/extensions")))))
(inputs
`(("dmenu" ,dmenu)
("getopt" ,util-linux)
through the pass command.")
(license license:gpl2+)))
+(define-public pass-otp
+ (package
+ (name "pass-otp")
+ (version "1.2.0")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://github.com/tadfisher/pass-otp/releases/"
+ "download/v" version "/pass-otp-" version ".tar.gz"))
+ (sha256
+ (base32
+ "0rrs3iazq80dn0wbl20xkh270428jd8l99m5gd7hl93s4r4sc82p"))))
+ (build-system gnu-build-system)
+ (arguments
+ '(#:make-flags
+ (let* ((out (assoc-ref %outputs "out"))
+ (bashcomp (string-append out "/etc/bash_completion.d")))
+ (list (string-append "PREFIX=" %output)
+ (string-append "BASHCOMPDIR=" bashcomp)))
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (add-after 'build 'patch-oath-path
+ (lambda* (#:key inputs #:allow-other-keys)
+ (substitute* "otp.bash"
+ (("^OATH=.*$")
+ (string-append
+ "OATH="
+ (assoc-ref inputs "oath-toolkit")
+ "/bin/oathtool\n")))
+ #t)))
+ #:test-target "test"))
+ (inputs
+ `(("oath-toolkit" ,oath-toolkit)))
+ (native-inputs
+ `(("password-store" ,password-store)
+ ("expect" ,expect)
+ ("git" ,git)
+ ("gnupg" ,gnupg)
+ ("which" ,which)))
+ (home-page "https://github.com/tadfisher/pass-otp")
+ (synopsis "Pass extension for managing one-time-password (OTP) tokens")
+ (description
+ "Pass OTP is an extension for password-store that allows adding
+one-time-password (OTP) secrets, generating OTP codes, and displaying secret
+key URIs using the standard otpauth:// scheme.")
+ (license license:gpl3+)))
+
+(define-public qtpass
+ (package
+ (name "qtpass")
+ (version "1.2.3")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/IJHack/QtPass.git")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "1vfhfyccrxq9snyvayqfzm5rqik8ny2gysyv7nipc91kvhq3bhky"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let ((out (assoc-ref outputs "out")))
+ ;; lupdate/lrelease need to find qmake.
+ (setenv "QMAKE" "qmake")
+ ;; qmake needs to find lrelease/lupdate.
+ (invoke "qmake"
+ "QMAKE_LRELEASE=lrelease"
+ "QMAKE_LUPDATE=lupdate"
+ (string-append "PREFIX=" out)))))
+ (add-after 'configure 'reset-resource-timestamps
+ ;; Reset timestamps on localization files for a reproducible build.
+ (lambda _
+ (with-directory-excursion "localization"
+ (for-each (lambda (file)
+ (let* ((base (basename file ".qm"))
+ (src (string-append base ".ts"))
+ (st (stat src)))
+ (set-file-time file st)))
+ (find-files "." ".*\\.qm")))
+ #t))
+ (add-after 'install 'install-auxilliary
+ ;; Install man-page, icon and .desktop file.
+ (lambda* (#:key inputs outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (applications (string-append out "/share/applications"))
+ (icons (string-append out "/share/icons/hicolor/scalable/apps"))
+ (man (string-append out "/share/man/man1")))
+ (install-file "qtpass.desktop" applications)
+ (install-file "artwork/icon.svg" icons)
+ (rename-file (string-append icons "/icon.svg")
+ (string-append icons "/qtpass-icon.svg"))
+ (install-file "qtpass.1" man)
+ #t)))
+ (add-before 'check 'check-setup
+ ;; Make Qt render "offscreen", required for tests.
+ (lambda _
+ (setenv "QT_QPA_PLATFORM" "offscreen")
+ #t)))))
+ (native-inputs
+ `(("qttools" ,qttools)))
+ (inputs
+ `(("qtbase" ,qtbase)
+ ("qtsvg" ,qtsvg)))
+ (home-page "https://qtpass.org")
+ (synopsis "GUI for password manager password-store")
+ (description
+ "Qt-based graphical user interface for the password manager
+password-store also known as pass. Can use either pass or gpg to interact
+with password-store files. Features configurable password generation,
+templates, clipboard handling, and per folder settings for multi-recipient
+encryption.")
+ (license license:gpl3+)))
+
+(define-public rofi-pass
+ (package
+ (name "rofi-pass")
+ (version "2.0.2")
+ (source
+ (origin
+ (method url-fetch)
+ (uri
+ (string-append "https://raw.githubusercontent.com/carnager/rofi-pass/"
+ version "/rofi-pass"))
+ (sha256
+ (base32 "0msldkndqp40nx1s5s7ggcr97ir4nshpmnyzvj5hqw1l7m3gvw6j"))
+ (file-name name)))
+ (build-system trivial-build-system)
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder
+ (begin
+ (use-modules (guix build utils))
+ (let ((source (string-append (assoc-ref %build-inputs "source")))
+ (script "rofi-pass")
+ (out (assoc-ref %outputs "out")))
+ (copy-file source script)
+ (chmod script #o555)
+ (install-file script (string-append out "/bin"))))))
+ (propagated-inputs
+ `(("password-store" ,password-store)
+ ("rofi" ,rofi)
+ ("xdotool" ,xdotool)))
+ (home-page "https://github.com/carnager/rofi-pass")
+ (synopsis "Rofi frontend for password-store")
+ (description "Rofi-pass provides a way to manipulate information stored
+using password-store through rofi interface:
+@enumerate
+@item open URLs of entries with hotkey;
+@item type any field from entry;
+@item auto-typing of user and/or password fields;
+@item auto-typing username based on path;
+@item auto-typing of more than one field, using the autotype entry;
+@item bookmarks mode (open stored URLs in browser, default: Alt+x).
+@end enumerate")
+ (license license:gpl3)))
+
(define-public argon2
(package
(name "argon2")
(license license:lgpl3+)))
(define-public john-the-ripper-jumbo
- (let ((official-version "1.8.0")
+ (let ((official-version "1.9.0")
(jumbo-version "1"))
(package
(name "john-the-ripper-jumbo")
official-version "-jumbo-" jumbo-version ".tar.xz"))
(sha256
(base32
- "08q92sfdvkz47rx6qjn7qv57cmlpy7i7rgddapq5384mb413vjds"))
- (patches
- (list (origin
- (method url-fetch)
- (uri (string-append "https://github.com/magnumripper/"
- "JohnTheRipper/commit/"
- "e2e868db3e153b3f959e119a51703d4afb99c624.patch"))
- (file-name "john-the-ripper-jumbo-gcc5-inline.patch")
- (sha256
- (base32
- "1shvcf1y2097115mxhzdkm64dr106a8zr6pqjqyh171q5ng5vfra")))
- (origin
- (method url-fetch)
- (uri (string-append "https://github.com/magnumripper/"
- "JohnTheRipper/commit/"
- "480e95b0e449863be3e1a5b0bc634a67df28b618.patch"))
- (file-name "john-the-ripper-jumbo-non-x86.patch")
- (sha256
- (base32
- "1ffd9dvhk0sb6ss8dv5yalh01lz30i7rilqilf2xv68gax2hyjqx")))))))
+ "0fvz3v41hnaiv1ggpxanfykyfjq79cwp9qcqqn63vic357w27lgm"))))
(build-system gnu-build-system)
+ (native-inputs
+ `(("perl" ,perl)))
(inputs
`(("gmp" ,gmp)
- ("krb5" ,mit-krb5)
("libpcap" ,libpcap)
("nss" ,nss)
- ("openssl" ,openssl)
+ ("openssl" ,openssl-1.0)
+ ("python" ,python-2) ; For "python" and "python2" shebangs
+ ("ruby" ,ruby) ; For genincstats.rb
("zlib" ,zlib)))
(arguments
`(#:configure-flags
- (list (string-append
- "CFLAGS=-O2 -g "
- "-DJOHN_SYSTEMWIDE=1 "
- "-DJOHN_SYSTEMWIDE_EXEC='\"" %output "/libexec/john\"' "
- "-DJOHN_SYSTEMWIDE_HOME='\"" %output "/share/john\"'")
- ;; For now, do not test for instruction set in configure, and
- ;; do not pass '-march=native' to gcc:
+ (list "--with-systemwide"
+ ;; Do not test for instruction set in configure, and do not
+ ;; pass '-march=native' to gcc:
"--disable-native-tests"
- "--disable-native-macro")
- #:tests? #f ;tests try to create '.john' in the build user's $HOME
+ "--disable-native-march"
+ ,(string-append
+ "--enable-simd="
+ (let ((system (or (%current-target-system)
+ (%current-system))))
+ (cond
+ ((or (string-prefix? "x86_64" system)
+ (string-prefix? "i686" system)) "sse2")
+ ((string-prefix? "aarch" system) "neon")
+ (else "no")))))
#:phases
(modify-phases %standard-phases
(add-before 'configure 'chdir-src
- (lambda _ (chdir "src")))
+ (lambda _ (chdir "src") #t))
(replace 'install
(lambda _
(let ((bindir (string-append %output "/bin"))
(docdir (string-append %output "/share/doc/john"))
(execdir (string-append %output "/libexec/john"))
- (homedir (string-append %output "/share/john"))
+ (datadir (string-append %output "/share/john"))
(install-file-to (lambda (dir)
(lambda (f) (install-file f dir))))
(symlink? (lambda (_ s) (eq? (stat:type s) 'symlink))))
(with-directory-excursion "../run"
+ (for-each (install-file-to bindir)
+ (cons*
+ "john" "makechr" "cprepair" "SIPdump" "tgtsnarf"
+ "genmkvpwd" "mkvcalcproba" "calc_stat" "raw2dyna"
+ (find-files "." "(to|2)?john(-[^.]*)?$")))
+ (for-each (lambda (f) ; Install symlinked aliases
+ (let ((tgt (string-append bindir "/" (basename f))))
+ ;; The use of install-file above dereferences
+ ;; symlinks. We'd rather have the symlinks
+ ;; for clarity, so remove tgt before linking.
+ (when (file-exists? tgt) (delete-file tgt))
+ (symlink "john" tgt)))
+ (find-files "." symlink?))
(for-each (install-file-to execdir)
- (cons* "mailer" "benchmark-unify"
- (find-files "." ".*\\.(py|rb|pl)")))
- (for-each (install-file-to homedir)
+ (cons* "mailer" "benchmark-unify" "relbench"
+ (find-files "." ".*\\.js")))
+ (for-each (lambda (f)
+ (let* ((base (basename f))
+ (name (substring base 0 (string-index base #\.)))
+ (link (string-append bindir "/" name)))
+ (install-file f execdir)
+ (when (and (executable-file? f)
+ (not (file-exists? link)))
+ (symlink (string-append execdir "/" base) link))))
+ (find-files "." ".*\\.(pl|py|rb|lua)"))
+ (for-each (install-file-to datadir)
(append (find-files "." "(stats|dictionary.*)")
(find-files "." "(.*\\.chr|.*\\.lst)")
(find-files "." ".*\\.conf")))
- (for-each (install-file-to bindir)
- '("tgtsnarf" "genmkvpwd" "mkvcalcproba"
- "raw2dyna" "luks2john" "vncpcap2john"
- "uaf2john" "calc_stat" "wpapcap2john"
- "cprepair" "relbench" "SIPdump" "john"))
- (for-each (lambda (f) ;install symlinked aliases
- (symlink "john"
- (string-append bindir "/" (basename f))))
- (find-files "." symlink?)))
+ (copy-recursively "rules" (string-append datadir "/rules")))
(copy-recursively "../doc" docdir)
- #t))))))
+ #t)))
+ (delete 'check) ; Tests need installed .conf files; move after install
+ (add-after 'install 'check
+ (lambda args
+ (setenv "HOME" "/tmp") ; Some tests need to write to ~/.john
+ (setenv "OMP_NUM_THREADS" (number->string (parallel-job-count)))
+ (apply (assoc-ref %standard-phases 'check) args))))))
(home-page "http://www.openwall.com/john/")
(synopsis "Password cracker")
(description "John the Ripper is a fast password cracker. Its primary
(define-public hashcat
(package
(name "hashcat")
- (version "4.1.0")
+ (version "5.1.0")
(source
(origin
(method url-fetch)
version ".tar.gz"))
(sha256
(base32
- "170i2y32ykgzb1qf1wz3klwn31c09bviz4x3bnrwia65adqrj8xx"))))
+ "0f73y4cg8c7a6q7x34qvpfi4g3lw6j9bnn0a13g43aqyiskflfr8"))))
(native-inputs
`(("opencl-headers" ,opencl-headers)))
(build-system gnu-build-system)
(define-public hashcat-utils
(package
(name "hashcat-utils")
- (version "1.8")
+ (version "1.9")
(source
(origin
(method url-fetch)
- (uri (string-append "https://github.com/hashcat/hashcat-utils/releases/download/v"
- version "/hashcat-utils-1.8.7z"))
+ (uri (string-append "https://github.com/hashcat/hashcat-utils/releases/"
+ "download/v" version "/"
+ "hashcat-utils-" version ".7z"))
(sha256
- (base32
- "1x80rngjz7gkhwplhw1iqr0wzb6hjkrjfld2kz9kmgp5dr9nys1p"))))
+ (base32 "0kq555kb338691qd7zjmi8vhq4km3apnsl2w63zh0igwzcjx6lx1"))))
(native-inputs
`(("p7zip" ,p7zip)))
(inputs
(lambda* (#:key outputs #:allow-other-keys)
(let ((out (string-append (assoc-ref outputs "out") "/bin")))
(mkdir-p out)
- (for-each (lambda (file)
- (copy-file file (string-append out "/" (basename file ".bin"))))
- (find-files "." "\\.bin$"))
- (for-each (lambda (file)
- (copy-file file (string-append out "/" (basename file ".pl"))))
- (find-files "../bin" "\\.pl$"))
+ (for-each
+ (lambda (file)
+ (copy-file file (string-append out "/"
+ (basename file ".bin"))))
+ (find-files "." "\\.bin$"))
+ (for-each
+ (lambda (file)
+ (copy-file file (string-append out "/"
+ (basename file ".pl"))))
+ (find-files "../bin" "\\.pl$"))
#t))))))
(home-page "https://github.com/hashcat/hashcat-utils/")
(synopsis "Small utilities that are useful in advanced password cracking")