projects/guix·blob ruby-team · refs

2481 lines · 98.2 KiB

1;;; GNU Guix --- Functional package management for GNU
2;;; Copyright © 2015 Steve Sprang <[email protected]>
3;;; Copyright © 2015-2024 Efraim Flashner <[email protected]>
4;;; Copyright © 2015 Aljosha Papsch <[email protected]>
5;;; Copyright © 2016 Christine Lemmer-Webber <[email protected]>
6;;; Copyright © 2016 Jessica Tallon <[email protected]>
7;;; Copyright © 2016 Andreas Enge <[email protected]>
8;;; Copyright © 2016 Lukas Gradl <[email protected]>
9;;; Copyright © 2016, 2019, 2020 Alex Griffin <[email protected]>
10;;; Copyright © 2017 Leo Famulari <[email protected]>
11;;; Copyright © 2017, 2018 Clément Lassieur <[email protected]>
12;;; Copyright © 2017–2021 Tobias Geerinckx-Rice <[email protected]>
13;;; Copyright © 2017 Jelle Licht <[email protected]>
14;;; Copyright © 2017, 2019 Eric Bavier <[email protected]>
15;;; Copyright © 2017, 2020-2022, 2024 Nicolas Goaziou <[email protected]>
16;;; Copyright © 2017 Manolis Fragkiskos Ragkousis <[email protected]>
17;;; Copyright © 2017 Rutger Helling <[email protected]>
18;;; Copyright © 2018, 2022 Marius Bakke <[email protected]>
19;;; Copyright © 2018 Konrad Hinsen <[email protected]>
20;;; Copyright © 2018 Thomas Sigurdsen <[email protected]>
21;;; Copyright © 2018 Arun Isaac <[email protected]>
22;;; Copyright © 2018 Pierre Neidhardt <[email protected]>
23;;; Copyright © 2018 Amirouche Boubekki <[email protected]>
24;;; Copyright © 2018, 2019, 2020 Tim Gesthuizen <[email protected]>
25;;; Copyright © 2019 Jens Mølgaard <[email protected]>
26;;; Copyright © 2019,2022 Tanguy Le Carrour <[email protected]>
27;;; Copyright © 2020, 2024 Guillaume Le Vaillant <[email protected]>
28;;; Copyright © 2020 Brice Waegeneire <[email protected]>
29;;; Copyright © 2020 Jean-Baptiste Note <[email protected]>
30;;; Copyright © 2020 Michael Rohleder <[email protected]>
31;;; Copyright © 2020 Vinicius Monego <[email protected]>
32;;; Copyright © 2020 Hartmut Goebel <[email protected]>
33;;; Copyright © 2021 Stefan Reichör <[email protected]>
34;;; Copyright © 2021 Xinglu Chen <[email protected]>
35;;; Copyright © 2020 Hartmut Goebel <[email protected]>
36;;; Copyright © 2021 David Dashyan <[email protected]>
37;;; Copyright © 2022 Maxim Cournoyer <[email protected]>
38;;; Copyright © 2022 Maxime Devos <[email protected]>
39;;; Copyright © 2022 ( <[email protected]>
40;;; Copyright © 2022 Nicolas Graves <[email protected]>
41;;; Copyright © 2022 Petr Hodina <[email protected]>
42;;; Copyright © 2023 Christian Miller <[email protected]>
43;;; Copyright © 2024, 2025 John Kehayias <[email protected]>
44;;; Copyright © 2024 Janneke Nieuwenhuizen <[email protected]>
45;;; Copyright © 2025 Cayetano Santos <[email protected]>
46;;; Copyright © 2025 Isidor Zeuner <[email protected]>
47;;; Copyright © 2026 John Dawson <[email protected]>
48;;; Copyright © 2026 Ivan Vilata i Balaguer <[email protected]>
49;;; Copyright © 2026 Giacomo Leidi <[email protected]>
50;;; Copyright © 2026 Zheng Junjie <[email protected]>
51;;;
52;;; This file is part of GNU Guix.
53;;;
54;;; GNU Guix is free software; you can redistribute it and/or modify it
55;;; under the terms of the GNU General Public License as published by
56;;; the Free Software Foundation; either version 3 of the License, or (at
57;;; your option) any later version.
58;;;
59;;; GNU Guix is distributed in the hope that it will be useful, but
60;;; WITHOUT ANY WARRANTY; without even the implied warranty of
61;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
62;;; GNU General Public License for more details.
63;;;
64;;; You should have received a copy of the GNU General Public License
65;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
66
67(define-module (gnu packages password-utils)
68 #:use-module ((guix licenses) #:prefix license:)
69 #:use-module (guix build-system cargo)
70 #:use-module (guix build-system cmake)
71 #:use-module (guix build-system copy)
72 #:use-module (guix build-system gnu)
73 #:use-module (guix build-system go)
74 #:use-module (guix build-system hare)
75 #:use-module (guix build-system pyproject)
76 #:use-module (guix build-system qt)
77 #:use-module (guix build-system trivial)
78 #:use-module (guix download)
79 #:use-module (guix gexp)
80 #:use-module (guix git-download)
81 #:use-module (guix packages)
82 #:use-module (guix utils)
83 #:use-module (gnu packages)
84 #:use-module (gnu packages admin)
85 #:use-module (gnu packages aidc)
86 #:use-module (gnu packages authentication)
87 #:use-module (gnu packages autotools)
88 #:use-module (gnu packages base)
89 #:use-module (gnu packages bash)
90 #:use-module (gnu packages check)
91 #:use-module (gnu packages compression)
92 #:use-module (gnu packages crypto)
93 #:use-module (gnu packages cryptsetup)
94 #:use-module (gnu packages curl)
95 #:use-module (gnu packages databases)
96 #:use-module (gnu packages digest)
97 #:use-module (gnu packages docbook)
98 #:use-module (gnu packages dotnet)
99 #:use-module (gnu packages file)
100 #:use-module (gnu packages freedesktop)
101 #:use-module (gnu packages gettext)
102 #:use-module (gnu packages glib)
103 #:use-module (gnu packages gnome)
104 #:use-module (gnu packages gnupg)
105 #:use-module (gnu packages golang)
106 #:use-module (gnu packages golang-build)
107 #:use-module (gnu packages golang-check)
108 #:use-module (gnu packages golang-crypto)
109 #:use-module (gnu packages golang-xyz)
110 #:use-module (gnu packages golang-web)
111 #:use-module (gnu packages gtk)
112 #:use-module (gnu packages guile)
113 #:use-module (gnu packages hare-xyz)
114 #:use-module (gnu packages image)
115 #:use-module (gnu packages kerberos)
116 #:use-module (gnu packages libffi)
117 #:use-module (gnu packages libusb)
118 #:use-module (gnu packages linux)
119 #:use-module (gnu packages man)
120 #:use-module (gnu packages multiprecision)
121 #:use-module (gnu packages ncurses)
122 #:use-module (gnu packages nettle)
123 #:use-module (gnu packages nss)
124 #:use-module (gnu packages opencl)
125 #:use-module (gnu packages perl)
126 #:use-module (gnu packages pkg-config)
127 #:use-module (gnu packages protobuf)
128 #:use-module (gnu packages python)
129 #:use-module (gnu packages python-build)
130 #:use-module (gnu packages python-crypto)
131 #:use-module (gnu packages python-web)
132 #:use-module (gnu packages python-xyz)
133 #:use-module (gnu packages rdesktop)
134 #:use-module (gnu packages readline)
135 #:use-module (gnu packages ruby)
136 #:use-module (gnu packages ruby-xyz)
137 #:use-module (gnu packages security-token)
138 #:use-module (gnu packages sqlite)
139 #:use-module (gnu packages suckless)
140 #:use-module (gnu packages tcl)
141 #:use-module (gnu packages tls)
142 #:use-module (gnu packages qt)
143 #:use-module (gnu packages version-control)
144 #:use-module (gnu packages web)
145 #:use-module (gnu packages window-management)
146 #:use-module (gnu packages wxwidgets)
147 #:use-module (gnu packages xdisorg)
148 #:use-module (gnu packages xorg)
149 #:use-module (gnu packages xml))
150
151(define-public aws-vault
152 (package
153 (name "aws-vault")
154 (version "7.3.0")
155 (source
156 (origin
157 (method git-fetch)
158 (uri (git-reference
159 ;; This is a maintained fork of
160 ;; <https://github.com/99designs/aws-vault> which seems to be an
161 ;; abandoned project.
162 ;; See: <https://github.com/99designs/aws-vault/issues/1269>
163 ;; <https://github.com/99designs/aws-vault/issues/1253>
164 (url "https://github.com/ByteNess/aws-vault")
165 (commit (string-append "v" version))))
166 (file-name (git-file-name name version))
167 (sha256
168 (base32 "09wa18xzvmz98dy873n2lssfpipqmdrnngyq606zyvb109ji87hs"))))
169 (build-system go-build-system)
170 (arguments
171 (list
172 #:install-source? #f
173 #:import-path "github.com/byteness/aws-vault"
174 #:build-flags
175 #~(list (string-append "-ldflags=-X main.Version=" #$version))
176 #:phases
177 #~(modify-phases %standard-phases
178 (add-after 'build 'contrib
179 (lambda* (#:key import-path #:allow-other-keys)
180 (let* ((zsh-site-dir
181 (string-append #$output "/share/zsh/site-functions"))
182 (bash-completion-dir
183 (string-append #$output "/share/bash-completion/completions"))
184 (fish-completion-dir
185 (string-append #$output "/share/fish/completions")))
186 (for-each mkdir-p (list bash-completion-dir
187 fish-completion-dir
188 zsh-site-dir))
189 (with-directory-excursion
190 (string-append "src/" import-path "/contrib/completions")
191 (copy-file "zsh/aws-vault.zsh"
192 (string-append zsh-site-dir "/_aws-vault"))
193 (copy-file "bash/aws-vault.bash"
194 (string-append bash-completion-dir "/aws-vault"))
195 (copy-file "fish/aws-vault.fish"
196 (string-append fish-completion-dir "/aws-vault.fish"))))))
197 ;; aws-vault: error: add: mkdir /homeless-shelter: permission
198 ;; denied.
199 (add-before 'check 'set-home
200 (lambda _
201 (setenv "HOME" "/tmp"))))))
202 (native-inputs
203 (list go-github-com-99designs-keyring
204 go-github-com-alecthomas-kingpin-v2
205 go-github-com-aws-aws-sdk-go-v2
206 go-github-com-aws-aws-sdk-go-v2-config
207 go-github-com-aws-aws-sdk-go-v2-credentials
208 go-github-com-aws-aws-sdk-go-v2-service-iam
209 go-github-com-aws-aws-sdk-go-v2-service-sso
210 go-github-com-aws-aws-sdk-go-v2-service-ssooidc
211 go-github-com-aws-aws-sdk-go-v2-service-sts
212 go-github-com-google-go-cmp
213 go-github-com-mattn-go-isatty
214 go-github-com-mattn-go-tty
215 go-github-com-skratchdot-open-golang
216 go-golang-org-x-term
217 go-gopkg-in-ini-v1))
218 (home-page "https://github.com/99designs/aws-vault")
219 (synopsis "Vault for securely storing and accessing AWS credentials")
220 (description
221 "AWS Vault is a tool to securely store and access @acronym{Amazon Web
222Services,AWS} credentials.
223
224AWS Vault stores IAM credentials in your operating system's secure keystore and
225then generates temporary credentials from those to expose to your shell and
226applications. It's designed to be complementary to the AWS CLI tools, and is
227aware of your profiles and configuration in ~/.aws/config.")
228 (license license:expat)))
229
230(define-public lesspass
231 (package
232 (name "lesspass")
233 (version "10.2.1")
234 (source (origin
235 (method git-fetch)
236 (uri (git-reference
237 (url "https://github.com/lesspass/lesspass")
238 (commit (string-append "cli-v" version))))
239 (file-name (git-file-name name version))
240 (sha256
241 (base32
242 "1isv760pqc0c3g8mljzp4zy64anvg1ify9h6nz7pzkx0610wr75a"))))
243 (build-system pyproject-build-system)
244 (arguments (list #:test-backend #~'unittest
245 #:phases #~(modify-phases %standard-phases
246 (add-after 'unpack 'chdir
247 (lambda _
248 (chdir "cli"))))))
249 (native-inputs (list python-mock
250 python-pexpect
251 python-setuptools))
252 (inputs (list python-requests))
253 (home-page "https://lesspass.com/")
254 (synopsis "Stateless password manager")
255 (description
256 "This is the command-line interface of LessPass, which computes a
257password deterministically from a site, a login, options and a master
258password, which is the only secret to keep.")
259 (license license:gpl3)))
260
261(define-public pwgen
262 (package
263 (name "pwgen")
264 (version "2.08")
265 (source
266 (origin
267 (method url-fetch)
268 (uri (string-append "mirror://sourceforge/pwgen/pwgen/" version
269 "/pwgen-" version ".tar.gz"))
270 (sha256
271 (base32 "0yy90pqrr2pszzhb5hxjishq9qc7dqd290amiibqx9fm1b9kvc6s"))))
272 (build-system gnu-build-system)
273 (arguments
274 `(#:tests? #f)) ; no test suite
275 (home-page "http://pwgen.sourceforge.net/")
276 (synopsis "Password generator")
277 (description "Pwgen generates passwords which can be easily memorized by a
278human.")
279 (license license:gpl2)))
280
281(define-public keepassxc
282 (package
283 (name "keepassxc")
284 (version "2.7.12")
285 (source
286 (origin
287 (method git-fetch)
288 (uri (git-reference
289 (url "https://github.com/keepassxreboot/keepassxc")
290 (commit version)))
291 (file-name (git-file-name name version))
292 (sha256
293 (base32 "1mh5h1dxfpqc196ai3kzi10f33pl6028rig6j7b81z5q4936niiw"))))
294 (build-system qt-build-system)
295 (arguments
296 (list
297 #:configure-flags
298 #~(append
299 (list "-DKEEPASSXC_BUILD_TYPE=Release"
300 "-DWITH_XC_ALL=YES"
301 "-DWITH_XC_UPDATECHECK=NO")
302 #$(if (member (%current-system)
303 (package-transitive-supported-systems
304 ruby-asciidoctor/minimal))
305 #~'()
306 #~(list "-DWITH_XC_DOCS=NO")))
307 ;; Entries have recently become sorted per the locale, and
308 ;; causes testentrymodel to fail when using the C locale (see:
309 ;; https://github.com/keepassxreboot/keepassxc/issues/11813).
310 ;; testClip runs 'xclip', which hangs in the container,
311 ;; perhaps because it lacks a TTY.
312 #:test-exclude "testentrymodel|testcli"
313 #:phases
314 #~(modify-phases %standard-phases
315 (add-after 'unpack 'record-clipboard-programs
316 (lambda* (#:key inputs #:allow-other-keys)
317 ;; Record the file names of clipboard programs invoked by
318 ;; 'keepassxc-cli clip' and similar.
319 ;;
320 ;; Note: Use 'QString::fromUtf8' rather than 'QStringLiteral' so
321 ;; that the store reference is stored as ASCII instead of
322 ;; UTF-16, which would be invisible to the GC's scanner.
323 (substitute* "src/cli/Utils.cpp"
324 (("QStringLiteral\\(\"xclip\"\\)")
325 (string-append
326 "QString::fromUtf8(\""
327 (search-input-file inputs "bin/xclip")
328 "\")"))
329 (("QStringLiteral\\(\"wl-copy\"\\)")
330 (string-append
331 "QString::fromUtf8(\""
332 (search-input-file inputs "bin/wl-copy")
333 "\")")))
334 (substitute* "src/gui/Clipboard.cpp"
335 (("\"wl-copy\"")
336 (format #f "~s" (search-input-file inputs "bin/wl-copy")))))))))
337 (native-inputs
338 (append
339 (list qttools-5)
340 (if (member (%current-system)
341 (package-transitive-supported-systems
342 ruby-asciidoctor/minimal))
343 (list ruby-asciidoctor/minimal)
344 '())))
345 (inputs
346 (list argon2
347 botan
348 libgcrypt
349 libsodium ; XC_BROWSER
350 libusb
351 libyubikey ; XC_YUBIKEY
352 libxi
353 libxtst
354 minizip
355 pcsc-lite
356 qrencode
357 qtsvg-5
358 qtwayland-5
359 qtx11extras
360 readline
361 wl-clipboard ;for 'wl-copy'
362 xclip ;for 'xclip'
363 yubikey-personalization ; XC_YUBIKEY
364 zlib))
365 (home-page "https://keepassxc.org")
366 (synopsis "Password manager")
367 (description "KeePassXC is a password manager or safe which helps you to
368manage your passwords in a secure way. You can put all your passwords in one
369database, which is locked with one master key or a key-file which can be stored
370on an external storage device. The databases are encrypted using the
371algorithms AES or Twofish.")
372 ;; While various parts of the software are licensed under different licenses,
373 ;; the combined work falls under the GPLv3.
374 (license license:gpl3)))
375
376(define-public keepass
377 (package
378 (name "keepass")
379 (version "2.61.1")
380 (source
381 (origin
382 (method url-fetch)
383 (uri
384 (string-append "mirror://sourceforge/keepass/KeePass%202.x/" version
385 "/KeePass-" version "-Source.zip"))
386 (sha256
387 (base32 "0fn1c7kyb3rvdcf1nby311xc1fnyfvlbllcy8rw1crknf3ndj6vi"))))
388 (build-system gnu-build-system)
389 (arguments
390 (list
391 #:phases
392 #~(modify-phases %standard-phases
393 (replace 'unpack
394 (lambda* (#:key source #:allow-other-keys)
395 (mkdir "source")
396 (chdir "source")
397 (invoke "unzip" source)))
398 (replace 'configure
399 (lambda* (#:key inputs #:allow-other-keys)
400 (substitute* "KeePassLib/Native/NativeMethods.Unix.cs"
401 (("libgcrypt.so.20|libglib-2.0.so.0|libgtk-3.so.0" all)
402 (search-input-file inputs (string-append "/lib/" all))))
403 (substitute* "KeePass.sln"
404 (("GlobalSection\\(ExtensibilityGlobals\\).*?EndGlobalSection")
405 "")
406 (("GlobalSection\\(ExtensibilityGlobals\\).*?EndGlobalSection"
407 all)
408 "")
409 (("Format Version 10\\.0")
410 "Format Version 11.00"))
411 (substitute* "KeePass/KeePass.csproj"
412 ((" ToolsVersion=\\\"3\\.5\\\"")
413 " ToolsVersion=\"4.0\"")
414 (("<SignAssembly>true</SignAssembly>")
415 "<SignAssembly>false</SignAssembly>")
416 ;; XML Serializer AOT compiler doesn't work here.
417 ;; mono will just fall back to the runtime compiler.
418 (("[$][(]FrameworkSDKDir[)]bin.sgen[.]exe")
419 "echo"))
420 (copy-file
421 "Ext/Icons_15_VA/LowResIcons/KeePass_LR.ico"
422 "KeePass/KeePass.ico")
423 (copy-file
424 "Ext/Icons_15_VA/LowResIcons/KeePass_LR.ico"
425 "KeePass/IconsKeePass.ico")
426 (copy-file
427 "Ext/Icons_15_VA/LowResIcons/KeePass_LR_G.ico"
428 "KeePass/IconsKeePass_G.ico")
429 (copy-file
430 "Ext/Icons_15_VA/LowResIcons/KeePass_LR_R.ico"
431 "KeePass/IconsKeePass_R.ico")
432 (copy-file
433 "Ext/Icons_15_VA/LowResIcons/KeePass_LR_Y.ico"
434 "KeePass/IconsKeePass_Y.ico")
435 (substitute* "KeePassLib/KeePassLib.csproj"
436 ((" ToolsVersion=\\\"3\\.5\\\"")
437 " ToolsVersion=\"4.0\"")
438 (("<SignAssembly>true</SignAssembly>")
439 "<SignAssembly>false</SignAssembly>"))
440 (substitute* "Translation/TrlUtil/TrlUtil.csproj"
441 ((" ToolsVersion=\\\"3\\.5\\\"") " ToolsVersion=\"4.0\""))
442 (copy-file
443 "Ext/Icons_15_VA/LowResIcons/KeePass_LR.ico"
444 "KeePass/Resources/KeePass.ico")))
445 (delete 'patch-source)
446 (replace 'build
447 (lambda* (#:key outputs #:allow-other-keys)
448 (setenv "MONO_REGISTRY_PATH" "/dev/null")
449 (setenv "LANG" "C")
450 (setenv "LC_ALL" "C")
451 (invoke
452 "xbuild"
453 "KeePass.sln"
454 "/target:KeePass"
455 "/property:Configuration=Release"
456 "/property:CscToolExe=mcs"
457 "/verbosity:diagnostic")))
458 (replace 'install
459 (lambda* (#:key inputs #:allow-other-keys)
460 (let* ((script (string-append #$output "/bin/keepass"))
461 (mono (assoc-ref inputs "mono"))
462 (lib (string-append #$output "/lib/keepass")))
463 (install-file "KeePass/obj/Release/KeePass.exe" lib)
464 (install-file "Ext/KeePass.config.xml" lib)
465 (mkdir (string-append #$output "/bin"))
466 (call-with-output-file script
467 (lambda (port)
468 (format port "#!/bin/sh
469exec ~s/bin/mono ~s/lib/keepass/KeePass.exe \"$@\"
470"
471 mono #$output)))
472 (chmod script #o755)
473 (patch-shebang script)))))
474 #:tests? #f)) ;no tests
475 (native-inputs
476 (list unzip icoutils))
477 (inputs
478 (list mono libgdiplus libgcrypt glib gtk+))
479 (home-page "https://keepass.info/")
480 (synopsis
481 "Light-weight and easy-to-use password manager")
482 (description
483 "KeePass is a light-weight and easy-to-use password manager that helps
484you manage your passwords in a secure way. All passwords are stored
485in an encrypted database, which is locked with a master key or key file.")
486 (license license:gpl2)))
487
488(define-public pwsafe
489 (package
490 (name "pwsafe")
491 (version "3.70.1")
492 (home-page "https://www.pwsafe.org/")
493 (source
494 (origin
495 (method git-fetch)
496 (uri (git-reference
497 (url "https://github.com/pwsafe/pwsafe")
498 (commit version)))
499 (sha256
500 (base32 "1j3fxxbwbyhqhaqxx8jzfwq9ahx3ixh2f9zvxgcj0gs4hicaifa9"))
501 (file-name (git-file-name name version))))
502 (build-system cmake-build-system)
503 (arguments
504 (list
505 #:configure-flags
506 #~(list "-DGTEST_BUILD=OFF")))
507 (native-inputs
508 (list gettext-minimal googletest-1.13 perl python-wrapper zip))
509 (inputs
510 (list curl
511 file
512 `(,util-linux "lib")
513 libxt
514 libxtst
515 openssl
516 qrencode
517 wxwidgets
518 xerces-c))
519 (synopsis "Password safe with automatic input and key generation")
520 (description "pwsafe is a password manager originally designed by Bruce
521Schneier. It offers a simple UI to manage passwords for different services.
522There are other programs that support the file format on different
523platforms.")
524 (license license:artistic2.0)))
525
526(define-public pwsafe-cli
527 (let ((commit "984fe38489c24602391e24150b450a37bfb866b7")
528 (revision "1"))
529 (package
530 (name "pwsafe-cli")
531 (version (git-version "0.2.0" revision commit))
532 (source
533 (origin
534 (method git-fetch)
535 (uri (git-reference
536 (url "https://github.com/nsd20463/pwsafe")
537 (commit commit)))
538 (sha256
539 (base32
540 "1fx0rhvl9ijjs9z5psxs990752rgw0558g7acjc0myx67ffxhhmy"))
541 (file-name (git-file-name name version))))
542 (build-system gnu-build-system)
543 (arguments
544 (list
545 #:phases
546 #~(modify-phases %standard-phases
547 (replace 'bootstrap
548 (lambda _
549 (invoke "aclocal")
550 (invoke "autoheader")
551 (invoke "automake" "--add-missing")
552 (invoke "autoconf"))))))
553 (native-inputs
554 (list autoconf automake))
555 (inputs
556 (list libx11 libxmu libxt openssl))
557 (home-page "https://github.com/nsd20463/pwsafe")
558 (synopsis "CLI password manager")
559 (description
560 "@command{pwsafe} is a command line tool compatible with
561Counterpane's Passwordsafe.")
562 (license license:gpl2+))))
563
564(define-public otpclient
565 (package
566 (name "otpclient")
567 (version "4.4.1")
568 (source
569 (origin
570 (method git-fetch)
571 (uri (git-reference
572 (url "https://github.com/paolostivanin/OTPClient")
573 (commit (string-append "v" version))))
574 (file-name (git-file-name name version))
575 (sha256
576 (base32 "1gqn3mhjsw5m0a2zadnhrnfd2a796wvvvigklkmdnfyjmhn3iqs6"))))
577 (build-system cmake-build-system)
578 (arguments
579 (list
580 #:modules `(((guix build glib-or-gtk-build-system) #:prefix glib-or-gtk:)
581 (guix build cmake-build-system)
582 (guix build utils))
583 #:imported-modules `((guix build glib-or-gtk-build-system)
584 ,@%cmake-build-system-modules)
585 #:tests? #f ; No tests
586 #:phases
587 #~(modify-phases %standard-phases
588 (add-after 'unpack 'generate-gdk-pixbuf-loaders-cache-file
589 (assoc-ref glib-or-gtk:%standard-phases
590 'generate-gdk-pixbuf-loaders-cache-file))
591 (add-after 'install 'glib-or-gtk-compile-schemas
592 (assoc-ref glib-or-gtk:%standard-phases
593 'glib-or-gtk-compile-schemas))
594 (add-after 'glib-or-gtk-compile-schemas 'glib-or-gtk-wrap
595 (assoc-ref glib-or-gtk:%standard-phases 'glib-or-gtk-wrap)))))
596 (inputs (list adwaita-icon-theme
597 libcotp
598 libgcrypt
599 libsecret
600 libzip
601 gtk+
602 jansson
603 protobuf
604 protobuf-c
605 qrencode
606 zbar))
607 (native-inputs (list pkg-config protobuf))
608 (home-page "https://github.com/paolostivanin/OTPClient")
609 (synopsis "Two-factor authentication client")
610 (description "OTPClient is a GTK+-based @acronym{OTP, One Time Password}
611client, supporting @acronym{TOTP, Time-based one time passwords} and
612@acronym{HOTP,HMAC-based one time passwords}.")
613 (license license:gpl3)))
614
615(define-public shroud
616 (package
617 (name "shroud")
618 (version "0.1.2")
619 (source
620 (origin
621 (method url-fetch)
622 (uri (string-append "https://files.dthompson.us/shroud/shroud-"
623 version ".tar.gz"))
624 (sha256
625 (base32
626 "1l2shrhvcwfzkar9qiwb75nhcqmx25iz55lzmz0c187nbjhqzi9p"))))
627 (build-system gnu-build-system)
628 (arguments
629 (list
630 #:modules '((guix build gnu-build-system)
631 (guix build utils)
632 (ice-9 popen)
633 (ice-9 rdelim))
634 #:phases
635 #~(modify-phases %standard-phases
636 (add-after 'install 'wrap-shroud
637 (lambda _
638 (let* ((effective
639 (read-line
640 (open-pipe*
641 OPEN_READ
642 (string-append #$(this-package-input "guile")
643 "/bin/guile")
644 "-c" "(display (effective-version))")))
645 (ccachedir (string-append #$output
646 "/lib/guile/" effective
647 "/site-ccache")))
648 (wrap-program (string-append #$output "/bin/shroud")
649 `("GUILE_LOAD_COMPILED_PATH" ":" prefix (,ccachedir)))))))))
650 (inputs
651 (list bash-minimal guile-2.2 gnupg xclip))
652 (native-inputs
653 (list pkg-config))
654 (synopsis "GnuPG-based secret manager")
655 (description "Shroud is a simple secret manager with a command line
656interface. The password database is stored as a Scheme s-expression and
657encrypted with a GnuPG key. Secrets consist of an arbitrary number of
658key/value pairs, making Shroud suitable for more than just password storage.
659For copying and pasting secrets into web browsers and other graphical
660applications, there is xclip integration." )
661 (home-page "https://dthompson.us/projects/shroud.html")
662 (license license:gpl3+)))
663
664(define-public sops
665 (package
666 (name "sops")
667 (version "3.13.3")
668 (source
669 (origin
670 (method git-fetch)
671 (uri (git-reference
672 (url "https://github.com/getsops/sops")
673 (commit (string-append "v" version))))
674 (file-name (git-file-name name version))
675 (sha256
676 (base32 "08cfc9mcy6rmj025qzq4fg71bvibrcskyj00rnmcla89199f3d2c"))))
677 (build-system go-build-system)
678 (arguments
679 (list #:install-source? #f
680 #:unpack-path "github.com/getsops/sops/v3"
681 #:import-path "github.com/getsops/sops/v3/cmd/sops"
682 #:build-flags
683 #~(list (string-append
684 "-ldflags="
685 "-X github.com/getsops/sops/v3/version.Version="
686 #$(package-version this-package)))
687 #:modules
688 '(((guix build gnu-build-system) #:prefix gnu:)
689 (guix build go-build-system)
690 (guix build utils))
691 #:phases
692 #~(modify-phases %standard-phases
693 (replace 'install-license-files
694 (lambda _
695 (define license
696 (string-append #$output "/share/doc/" #$name
697 "-" #$(package-version this-package)))
698 (install-file "./src/github.com/getsops/sops/v3/LICENSE"
699 license))))))
700 (native-inputs
701 (list go-cloud-google-com-go-kms
702 go-cloud-google-com-go-storage
703 go-filippo-io-age
704 go-github-com-aws-aws-sdk-go-v2
705 go-github-com-aws-aws-sdk-go-v2-config
706 go-github-com-aws-aws-sdk-go-v2-credentials
707 go-github-com-aws-aws-sdk-go-v2-feature-s3-manager
708 go-github-com-aws-aws-sdk-go-v2-service-kms
709 go-github-com-aws-aws-sdk-go-v2-service-s3
710 go-github-com-aws-aws-sdk-go-v2-service-sts
711 go-github-com-azure-azure-sdk-for-go-sdk-azcore
712 go-github-com-azure-azure-sdk-for-go-sdk-azidentity
713 go-github-com-azure-azure-sdk-for-go-sdk-security-keyvault-azkeys
714 go-github-com-blang-semver
715 go-github-com-envoyproxy-go-control-plane
716 go-github-com-fatih-color
717 go-github-com-getsops-gopgagent
718 go-github-com-go-viper-mapstructure-v2
719 go-github-com-google-go-cmp
720 go-github-com-google-shlex
721 go-github-com-goware-prefixer
722 go-github-com-hashicorp-go-cleanhttp
723 go-github-com-hashicorp-vault-api
724 go-github-com-huaweicloud-huaweicloud-sdk-go-v3
725 go-github-com-lib-pq
726 go-github-com-mitchellh-go-homedir
727 go-github-com-mitchellh-go-wordwrap
728 ;; go-github-com-ory-dockertest-v3 ;for integration tests
729 go-github-com-pkg-errors
730 go-github-com-protonmail-go-crypto
731 go-github-com-sirupsen-logrus
732 go-github-com-stretchr-testify
733 go-github-com-urfave-cli
734 go-go-yaml-in-yaml-v3
735 go-golang-org-x-crypto
736 go-golang-org-x-net
737 go-golang-org-x-oauth2
738 go-golang-org-x-sys
739 go-golang-org-x-term
740 go-google-golang-org-api
741 go-google-golang-org-genproto-googleapis-rpc
742 go-google-golang-org-grpc
743 go-google-golang-org-protobuf
744 go-gopkg-in-ini-v1))
745 (home-page "https://getsops.io")
746 (synopsis "Tool for managing secrets")
747 (description
748 "sops is an editor of encrypted files that supports YAML, JSON,
749ENV, INI and BINARY formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault,
750age, and PGP.")
751 (license license:mpl2.0)))
752
753(define-public ssh-to-age
754 (package
755 (name "ssh-to-age")
756 (version "1.2.0")
757 (source
758 (origin
759 (method git-fetch)
760 (uri (git-reference
761 (url "https://github.com/Mic92/ssh-to-age")
762 (commit version)))
763 (file-name (git-file-name name version))
764 (sha256
765 (base32 "0f8s8k8sbdrifklspcc83rjp290v7mrqqp9jwg02dj2mm7iy2bfj"))))
766 (build-system go-build-system)
767 (arguments
768 '(#:import-path "github.com/Mic92/ssh-to-age/cmd/ssh-to-age"
769 #:unpack-path "github.com/Mic92/ssh-to-age"))
770 (inputs (list go-golang-org-x-crypto
771 go-filippo-io-edwards25519
772 go-filippo-io-age))
773 (home-page "https://github.com/Mic92/ssh-to-age")
774 (synopsis "Convert SSH @code{ed25519} keys to @code{age} keys")
775 (description "This package provides a simple command-line tool to
776convert SSH @code{ed25519} keys to @code{age} keys.")
777 (license license:expat)))
778
779(define-public vaultwarden
780 (package
781 (name "vaultwarden")
782 (version "1.36.0")
783 (source
784 (origin
785 (method git-fetch)
786 (uri (git-reference
787 (url "https://github.com/dani-garcia/vaultwarden")
788 (commit version)))
789 (file-name (git-file-name name version))
790 (sha256
791 (base32 "1lipk99gqfivg95yqg80b8q0a220vwn9nmq0f4syawxnhvn9zkcd"))))
792 (build-system cargo-build-system)
793 (arguments
794 (list
795 #:install-source? #f
796 #:features '(list "sqlite_system" "s3" "postgresql")
797 ;; The build.rs script mandates the activation of a DB backend.
798 #:cargo-test-flags
799 '(list
800 "--features"
801 "sqlite_system,s3,postgresql"
802 "--")
803 #:cargo-install-paths ''(".")))
804 (inputs
805 (cons* openssl
806 postgresql
807 sqlite
808 `(,zstd "lib")
809 (cargo-inputs 'vaultwarden)))
810 (native-inputs (list pkg-config))
811 (home-page "https://github.com/dani-garcia/vaultwarden")
812 (synopsis
813 "Alternative implementation of the Bitwarden server API")
814 (description
815 "Vaultwarden is an unofficial Bitwarden server implementation written in
816Rust. It is compatible with the official Bitwarden clients, and is ideal for
817self-hosted deployments where running the official resource-heavy service is
818undesirable.
819
820Supported features are:
821@itemize
822@item Personal vault support
823@item Organization vault support
824@item Groups
825@item Event Logs
826@item Password sharing and access control
827@item Collections
828@item File attachments
829@item Folders
830@item Favorites
831@item Website icons
832@item Bitwarden Authenticator (TOTP)
833@item Bitwarden Send
834@item Emergency Access
835@item Trash (soft delete, you can configure the days for automatic deletion)
836@item Master password re-prompt
837@item Personal API key
838@item Two-step login via email, Duo, YubiKey, and FIDO2 WebAuthn
839@item Username generator integration
840@item Directory Connector support
841@item Account Recovery (this requires mail to be enabled)
842@item Live sync (WebSocket only) for desktop/browser clients/extensions
843@item Live sync (push notifications) for mobile clients (Android/iOS)
844@item Single Sign-On (SSO)
845@end itemize
846")
847 (license license:agpl3)))
848
849(define-public yapet
850 (package
851 (name "yapet")
852 (version "2.6")
853 (source
854 (origin
855 (method url-fetch)
856 (uri (string-append "https://yapet.guengel.ch/downloads/yapet-"
857 version ".tar.xz"))
858 (sha256
859 (base32 "00k38n5vlxl73m11pp1v50fqf702lv86hzwgj0qca6qxqz4i3jjl"))))
860 (build-system gnu-build-system)
861 (arguments
862 (list
863 #:configure-flags
864 #~(list (string-append "--docdir=" #$output "/share/doc/"
865 #$name "-" #$version))))
866 (inputs
867 (list argon2 ncurses openssl))
868 (native-inputs
869 (list cppunit pkg-config))
870 (synopsis "Yet Another Password Encryption Tool")
871 (description "YAPET is a text based password manager using the Blowfish
872encryption algorithm. Because of its small footprint and very few library
873dependencies, it is suited for installing on desktop and server systems alike.
874The text based user interface allows you to run YAPET easily in a Secure Shell
875session. Two companion utilities enable users to convert CSV files to YAPET
876and vice versa.")
877 (home-page "https://yapet.guengel.ch/")
878 (license license:gpl3+)))
879
880(define-public cracklib
881 (package
882 (name "cracklib")
883 (version "2.10.3")
884 (source
885 (origin
886 (method git-fetch)
887 (uri (git-reference
888 (url "https://github.com/cracklib/cracklib/")
889 (commit (string-append "v" version))))
890 (sha256
891 (base32
892 "037ybxmxap39bjhfajyxnmn8612k638qilfv9r90s6qkxs6lj6ir"))
893 (file-name (git-file-name name version))))
894 (build-system gnu-build-system)
895 (arguments
896 (list
897 #:phases
898 #~(modify-phases %standard-phases
899 (add-before 'bootstrap 'chdir
900 (lambda _ (chdir "src"))))))
901 (native-inputs
902 (list autoconf automake libtool intltool))
903 (synopsis "Password checking library")
904 (home-page "https://github.com/cracklib/cracklib")
905 (description
906 "CrackLib is a library containing a C function which may be used in a
907@command{passwd}-like program. The idea is simple: try to prevent users from
908choosing passwords that could easily be guessed (or \"cracked\") by filtering
909them out, at the source.")
910 (license license:lgpl2.1)))
911
912(define-public libpwquality
913 (package
914 (name "libpwquality")
915 (version "1.4.5")
916 (source (origin
917 (method url-fetch)
918 (uri (list
919 (string-append "https://github.com/libpwquality/libpwquality"
920 "/releases/download/libpwquality-" version
921 "/libpwquality-" version ".tar.bz2")
922 (string-append "https://launchpad.net/libpwquality/trunk/"
923 version "/+download/"
924 "libpwquality-" version ".tar.bz2")))
925 (sha256
926 (base32
927 "1209l7ba51rjsq724hi8my0s11xpslp9hhif9p89jp9hbnviikvg"))))
928 (build-system gnu-build-system)
929 (arguments
930 (list
931 #:phases
932 #~(modify-phases %standard-phases
933 (add-before 'configure 'set-LDFLAGS
934 (lambda _
935 (setenv "LDFLAGS"
936 (string-append "-Wl,-rpath=" #$output "/lib")))))))
937 (native-inputs
938 (list python-setuptools python-wrapper))
939 (inputs
940 (list cracklib))
941 (synopsis "Password quality checker")
942 (home-page "https://github.com/libpwquality/libpwquality")
943 (description
944 "Libpwquality is a library for password quality checking and generation of
945random passwords that pass the checks.")
946 (license license:gpl2+)))
947
948(define-public passwdqc
949 (package
950 (name "passwdqc")
951 (version "2.1.0")
952 (source
953 (origin
954 (method git-fetch)
955 (uri (git-reference
956 (url "https://github.com/openwall/passwdqc/")
957 (commit (string-append "v" version))))
958 (file-name (git-file-name name version))
959 (sha256
960 (base32
961 "1717kn9jdhgga140jfscbjijxcid8zpk040l2phy3rq0hvqjgkgg"))))
962 (build-system gnu-build-system)
963 (arguments
964 (list
965 #:tests? #f ; no tests provided
966 #:make-flags
967 #~(list (string-append "CC=" #$(cc-for-target))
968 (string-append "DESTDIR=" #$output) ; no $prefix support
969 "BINDIR=/bin"
970 "DEVEL_LIBDIR=/lib"
971 "SHARED_LIBDIR_REL=."
972 "INCLUDEDIR=/include"
973 "MANDIR=/share/man"
974 (string-append "LDFLAGS=-Wl,-rpath=" #$output "/lib"))
975 #:phases
976 #~(modify-phases %standard-phases
977 (delete 'configure)))) ;no configure script
978 (inputs (list linux-pam libxcrypt))
979 (home-page "https://www.openwall.com/passwdqc/")
980 (synopsis
981 "Password/passphrase strength checking and policy enforcement toolset")
982 (description
983 "Passwdqc is a password/passphrase strength checking and policy
984enforcement toolset, including an optional PAM module, @code{pam_passwdqc},
985command-line programs (@command{pwqcheck}, @command{pwqfilter}, and
986@command{pwqgen}), and a library, @code{libpasswdqc}.")
987 (license (list license:bsd-3 ;manual pages
988 license:bsd-1)))) ;code
989
990(define-public impass
991 (package
992 (name "impass")
993 (version "0.14.1")
994 (source
995 (origin
996 (method url-fetch)
997 (uri (list
998 (string-append
999 "http://deb.debian.org/debian/pool/main/i/impass/"
1000 "impass_" version ".orig.tar.gz")))
1001 (sha256
1002 (base32
1003 "0jsssp5f2mssywxnja87aq1p2k24rjjz361b8if4kfixwi44rr5a"))))
1004 (arguments
1005 (list
1006 ;; irritatingly, tests do run but not there are two problems:
1007 ;; - "import gtk" fails for unknown reasons here despite it the
1008 ;; program working (indeed, I've found I have to do a logout and log
1009 ;; back in in after an install order for some mumbo jumbo environment
1010 ;; variable mess to work with pygtk and assword... what's up with
1011 ;; that?)
1012 ;; - even when the tests fail, they don't return a nonzero status,
1013 ;; so I'm not sure how to programmatically get that information
1014 #:tests? #f
1015 #:phases
1016 #~(modify-phases %standard-phases
1017 (add-after 'wrap 'wrap-impass
1018 (lambda _
1019 (let ((gi-typelib-path (getenv "GI_TYPELIB_PATH")))
1020 (wrap-program (string-append #$output "/bin/impass")
1021 `("GI_TYPELIB_PATH" ":" prefix (,gi-typelib-path))))))
1022 (add-after 'install 'manpage
1023 (lambda _
1024 (invoke "make" "impass.1")
1025 (install-file "impass.1"
1026 (string-append #$output "/share/man/man1")))))))
1027 (build-system pyproject-build-system)
1028 (inputs
1029 (list bash-minimal gtk gobject-introspection python-i3ipc python-xdo
1030 python-gpg python-pygobject))
1031 (propagated-inputs
1032 (list xclip))
1033 (native-inputs
1034 (list txt2man python-setuptools))
1035 (home-page "https://finestructure.net/impass/")
1036 (synopsis "Password manager")
1037 (description "impass is a simple password manager using GPG-wrapped
1038JSON files. It has a command line interface as well as a very simple
1039graphical interface, which can even \"type\" your passwords into
1040any X11 window.")
1041 (license license:gpl3+)))
1042
1043(define-deprecated-package assword impass)
1044
1045(define-public password-store
1046 (package
1047 (name "password-store")
1048 (version "1.7.4")
1049 (source
1050 (origin
1051 (method git-fetch)
1052 (uri (git-reference
1053 (url "git://git.zx2c4.com/password-store")
1054 (commit version)))
1055 (sha256
1056 (base32
1057 "17zp9pnb3i9sd2zn9qanngmsywrb7y495ngcqs6313pv3gb83v53"))
1058 (patches (search-patches "password-store-tree-compat.patch"))
1059 (file-name (git-file-name name version))))
1060 (build-system gnu-build-system)
1061 (arguments
1062 (list
1063 #:make-flags
1064 #~(list (string-append "CC=" #$(cc-for-target))
1065 (string-append "PREFIX=" #$output)
1066 "WITH_ALLCOMP=yes"
1067 (string-append "BASHCOMPDIR="
1068 #$output "/share/bash-completion/completions"))
1069 ;; Parallel tests may cause a race condition leading to a
1070 ;; timeout in some circumstances.
1071 #:parallel-tests? #f
1072 #:test-target "test"
1073 #:phases
1074 #~(modify-phases %standard-phases
1075 (delete 'configure)
1076 (delete 'build)
1077 (add-before 'install 'patch-system-extension-dir
1078 (lambda _
1079 (substitute* "src/password-store.sh"
1080 (("^SYSTEM_EXTENSION_DIR=.*$")
1081 ;; lead with whitespace to prevent 'make install' from
1082 ;; overwriting it again
1083 (string-append
1084 " SYSTEM_EXTENSION_DIR=\""
1085 "${PASSWORD_STORE_SYSTEM_EXTENSION_DIR:-"
1086 (string-append #$output "/lib/password-store/extensions")
1087 "}\"\n")))))
1088 (add-before 'install 'patch-program-name
1089 ;; Use pass not .pass-real in tmpdir and cmd_usage
1090 (lambda _
1091 (substitute* "src/password-store.sh"
1092 (("^PROGRAM=.*$")
1093 "PROGRAM=\"pass\"\n"))))
1094 (add-before 'install 'patch-passmenu-path
1095 ;; FIXME Wayland support requires ydotool and dmenu-wl packages
1096 ;; We are ignoring part of the script that gets executed if
1097 ;; WAYLAND_DISPLAY env variable is set, leaving dmenu-wl and ydotool
1098 ;; commands as is.
1099 (lambda* (#:key inputs #:allow-other-keys)
1100 (substitute* "contrib/dmenu/passmenu"
1101 (("dmenu=dmenu\n")
1102 (string-append
1103 "dmenu=" (search-input-file inputs "/bin/dmenu") "\n"))
1104 (("xdotool=\"xdotool")
1105 (string-append
1106 "xdotool=\"" (search-input-file inputs "/bin/xdotool"))))))
1107 (add-after 'install 'install-passmenu
1108 (lambda _
1109 (install-file
1110 "contrib/dmenu/passmenu" (string-append #$output "/bin"))))
1111 (add-after 'install 'wrap-path
1112 (lambda* (#:key inputs #:allow-other-keys)
1113 (let* ((requisites '("getopt" "git" "gpg" "qrencode" "sed"
1114 "tail" "tree" "which" "wl-copy" "xclip"))
1115 (path
1116 (map (lambda (pkg)
1117 (dirname (search-input-file
1118 inputs (string-append "/bin/" pkg))))
1119 requisites)))
1120 (wrap-program (string-append #$output "/bin/pass")
1121 `("PATH" ":" prefix (,(string-join path ":"))))))))))
1122 (native-search-paths
1123 (list (search-path-specification
1124 (variable "PASSWORD_STORE_SYSTEM_EXTENSION_DIR")
1125 (separator #f) ;single entry
1126 (files '("lib/password-store/extensions")))))
1127 (inputs
1128 (list bash-minimal
1129 coreutils
1130 dmenu
1131 git
1132 gnupg
1133 qrencode
1134 sed
1135 tree
1136 util-linux
1137 which
1138 wl-clipboard
1139 xclip
1140 xdotool))
1141 (home-page "https://www.passwordstore.org/")
1142 (synopsis "Encrypted password manager")
1143 (description "Password-store is a password manager which uses GnuPG to
1144store and retrieve passwords. The tool stores each password in its own
1145GnuPG-encrypted file, allowing the program to be simple yet secure.
1146Synchronization is possible using the integrated git support, which commits
1147changes to your password database to a git repository that can be managed
1148through the pass command.")
1149 (license license:gpl2+)))
1150
1151(define-public pass-age
1152 (package
1153 (inherit password-store)
1154 (name "pass-age")
1155 (version "1.7.4a2")
1156 (source
1157 (origin
1158 (method git-fetch)
1159 (uri (git-reference
1160 (url "https://github.com/FiloSottile/passage")
1161 (commit version)))
1162 (file-name (git-file-name name version))
1163 (sha256
1164 (base32 "1ap2i08zjvacd2rllrsx9bw3zz5i99bk0i5yxrssvn6w60bwjqdl"))))
1165 (build-system copy-build-system)
1166 (arguments
1167 (list
1168 #:modules '((guix build copy-build-system)
1169 (guix build utils)
1170 (srfi srfi-26))
1171 #:phases
1172 #~(modify-phases %standard-phases
1173 (add-after 'unpack 'rename-script
1174 (lambda _
1175 (rename-file "src/password-store.sh"
1176 "src/passage")))
1177 (add-after 'install 'wrap-script
1178 (lambda* (#:key inputs #:allow-other-keys)
1179 (let* ((script (string-append #$output "/bin/passage")))
1180 (substitute* script
1181 ;; Avoid ugly ‘.passage-real’ in --help output and elsewhere.
1182 (("^(PROGRAM=).*" _ program=)
1183 (string-append program= (basename script) "\n")))
1184 (wrap-program script
1185 `("PATH" ":" prefix
1186 ,(map dirname
1187 (map (cut search-input-file inputs <>)
1188 (list "bin/age"
1189 "bin/age-keygen"
1190 "bin/cat"
1191 "bin/getopt"
1192 "bin/git"
1193 "bin/pkill"
1194 "bin/qrencode"
1195 "bin/sed"
1196 "bin/tree")))))))))
1197 #:install-plan
1198 #~'(("src/passage" "/bin/")
1199 ("src/completion/pass.bash-completion"
1200 "/share/bash-completion/completions/passage")
1201 ("src/completion/pass.fish-completion"
1202 "/share/fish/vendor_completions.d/passage")
1203 ("src/completion/pass.zsh-completion"
1204 "/share/zsh/site-functions/_passage"))))
1205 (inputs
1206 (list age coreutils-minimal git-minimal
1207 procps qrencode sed tree util-linux))
1208 (home-page "https://github.com/FiloSottile/passage")
1209 (synopsis "Encrypted password manager")
1210 (description "This package provides an encrypted password manager, forked
1211from the @code{password-store} package. Files are encrypted with the
1212@command{age} encryption package with small explicit keys.")
1213 (license license:gpl2+)))
1214
1215(define-public pass-otp
1216 (package
1217 (name "pass-otp")
1218 (version "1.2.0")
1219 (source
1220 (origin
1221 (method url-fetch)
1222 (uri
1223 (string-append "https://github.com/tadfisher/pass-otp/releases/"
1224 "download/v" version "/pass-otp-" version ".tar.gz"))
1225 (sha256
1226 (base32
1227 "0rrs3iazq80dn0wbl20xkh270428jd8l99m5gd7hl93s4r4sc82p"))))
1228 (build-system gnu-build-system)
1229 (arguments
1230 (list
1231 #:make-flags
1232 #~(list (string-append "PREFIX=" #$output)
1233 (string-append
1234 "BASHCOMPDIR="
1235 (string-append #$output "/etc/bash_completion.d")))
1236 #:phases
1237 #~(modify-phases %standard-phases
1238 (delete 'configure)
1239 (add-after 'build 'patch-oath-path
1240 (lambda* (#:key inputs #:allow-other-keys)
1241 (substitute* "otp.bash"
1242 (("^OATH=.*$")
1243 (string-append
1244 "OATH="
1245 (assoc-ref inputs "oath-toolkit")
1246 "/bin/oathtool\n"))
1247 ;; courtesy: https://github.com/tadfisher/pass-otp/pull/172
1248 (("&counter=[$]counter" all)
1249 (format #f "~s" all))))))
1250 #:test-target "test"))
1251 (native-inputs
1252 (list password-store expect git gnupg which))
1253 (inputs
1254 (list oath-toolkit))
1255 (home-page "https://github.com/tadfisher/pass-otp")
1256 (synopsis "Pass extension for managing one-time-password (OTP) tokens")
1257 (description
1258 "Pass OTP is an extension for password-store that allows adding
1259one-time-password (OTP) secrets, generating OTP codes, and displaying secret
1260key URIs using the standard otpauth:// scheme.")
1261 (license license:gpl3+)))
1262
1263(define-public pass-update
1264 (package
1265 (name "pass-update")
1266 (version "2.2.1")
1267 (source
1268 (origin
1269 (method git-fetch)
1270 (uri (git-reference
1271 (url "https://github.com/roddhjav/pass-update")
1272 (commit (string-append "v" version))))
1273 (file-name (git-file-name name version))
1274 (sha256
1275 (base32 "1srg0zpgfj2rcsc8aynq7jy2wd9l2h21rpp73si6rwiccff4ymrl"))))
1276 (build-system gnu-build-system)
1277 (arguments
1278 (list
1279 #:test-target "tests"
1280 #:make-flags
1281 #~(list (string-append "PREFIX="
1282 #$output)
1283 (string-append "BASHCOMPDIR="
1284 #$output "/share/bash-completion/completions"))
1285 #:phases
1286 #~(modify-phases %standard-phases
1287 (delete 'build)
1288 (add-before 'check 'setenv
1289 (lambda _
1290 ;; Tests need the env var TMP
1291 (mkdir "/tmp/pw")
1292 (setenv "TMP" "/tmp/pw")))
1293 (delete 'configure))))
1294 (native-inputs (list password-store gnupg git))
1295 (home-page "https://github.com/roddhjav/pass-update")
1296 (synopsis "Extension to @code{password-store} for updating passwords")
1297 (description
1298 "@code{pass-update} extends the pass utility with an update command
1299providing an easy flow for updating passwords. It supports path, directory
1300and wildcard update. Moreover, you can select how to update your passwords by
1301automatically generating new passwords or manually setting your own.")
1302 (license license:gpl3)))
1303
1304(define-public qtpass
1305 (package
1306 (name "qtpass")
1307 (version "1.4.0")
1308 (source
1309 (origin
1310 (method git-fetch)
1311 (uri (git-reference
1312 (url "https://github.com/IJHack/QtPass")
1313 (commit (string-append "v" version))))
1314 (file-name (git-file-name name version))
1315 (sha256
1316 (base32 "10ixahm4ap0l1rrz4cyswblm22ns9z1baf5lv3dn23wprfdcp8m0"))))
1317 (build-system qt-build-system)
1318 (arguments
1319 (list
1320 #:modules '((guix build qt-build-system)
1321 ((guix build gnu-build-system) #:prefix gnu:)
1322 (guix build utils))
1323 #:phases
1324 #~(modify-phases %standard-phases
1325 (replace 'configure
1326 (lambda _
1327 (invoke "qmake"
1328 "QMAKE_LRELEASE=lrelease"
1329 "QMAKE_LUPDATE=lupdate"
1330 (string-append "PREFIX=" #$output))))
1331 (replace 'build (assoc-ref gnu:%standard-phases 'build))
1332 (replace 'check (assoc-ref gnu:%standard-phases 'check))
1333 (add-before 'check 'pre-check
1334 ;; Fontconfig needs a writable cache.
1335 (lambda _ (setenv "HOME" "/tmp")))
1336 (replace 'install (assoc-ref gnu:%standard-phases 'install))
1337 (add-after 'install 'install-auxilliary
1338 ;; Install man-page, icon and .desktop file.
1339 (lambda _
1340 (let ((applications (string-append #$output "/share/applications"))
1341 (icons (string-append #$output "/share/icons/hicolor/scalable/apps"))
1342 (man (string-append #$output "/share/man/man1")))
1343 (install-file "qtpass.desktop" applications)
1344 (install-file "artwork/icon.svg" icons)
1345 (rename-file (string-append icons "/icon.svg")
1346 (string-append icons "/qtpass-icon.svg"))
1347 (install-file "qtpass.1" man)))))))
1348 (native-inputs
1349 (list qttools-5))
1350 (inputs
1351 (list qtsvg-5))
1352 (home-page "https://qtpass.org")
1353 (synopsis "GUI for password manager password-store")
1354 (description
1355 "Qt-based graphical user interface for the password manager
1356password-store also known as pass. Can use either pass or gpg to interact
1357with password-store files. Features configurable password generation,
1358templates, clipboard handling, and per folder settings for multi-recipient
1359encryption.")
1360 (license license:gpl3+)))
1361
1362(define-public rofi-pass
1363 ;; No release in over 5 years with recent commits adding features like
1364 ;; Wayland support.
1365 (let ((commit "8aa6b9293a8f0af267425326fa966966ca42085e")
1366 (revision "0"))
1367 (package
1368 (name "rofi-pass")
1369 (version (git-version "2.0.2" revision commit))
1370 (source
1371 (origin
1372 (method git-fetch)
1373 (uri (git-reference
1374 (url "https://github.com/carnager/rofi-pass")
1375 (commit commit)))
1376 (sha256
1377 (base32
1378 "0axz4ijp6fay6f2yn1cg6223l89jkg8wnxslbk1g5jpli0njxw43"))
1379 (file-name (git-file-name name version))))
1380 (build-system gnu-build-system)
1381 (arguments
1382 (list #:tests? #f ; no tests
1383 #:make-flags #~(list (string-append "PREFIX=" #$output))
1384 #:phases
1385 #~(modify-phases %standard-phases
1386 (add-after 'unpack 'fix-etc-path
1387 (lambda _
1388 (substitute* "Makefile"
1389 (("\\$\\(DESTDIR\\)/etc")
1390 (string-append #$output "/etc")))
1391 (substitute* "rofi-pass"
1392 (("/etc")
1393 (string-append #$output "/etc")))))
1394 (delete 'configure) ; no configure
1395 (delete 'build) ; no build
1396 (add-after 'install 'wrap-path
1397 (lambda* (#:key inputs #:allow-other-keys)
1398 (let ((bin (string-append #$output "/bin")))
1399 (for-each
1400 (lambda (script)
1401 (wrap-program (string-append bin "/" script)
1402 (list "PATH" 'prefix
1403 (map
1404 (lambda (binary)
1405 (dirname (search-input-file
1406 inputs
1407 (string-append "bin/" binary))))
1408 '("pass" "pwgen" "rofi"
1409 "xclip" "xdotool" "xset")))))
1410 (list "addpass" "rofi-pass"))))))))
1411 (inputs (list bash-minimal ;for wrap-program
1412 password-store
1413 pwgen
1414 rofi
1415 xclip
1416 xdotool
1417 xset))
1418 (home-page "https://github.com/carnager/rofi-pass")
1419 (synopsis "Rofi frontend for password-store")
1420 (description "Rofi-pass provides a way to manipulate information stored
1421using password-store through rofi interface:
1422@enumerate
1423@item open URLs of entries with hotkey;
1424@item type any field from entry;
1425@item auto-typing of user and/or password fields;
1426@item auto-typing username based on path;
1427@item auto-typing of more than one field, using the autotype entry;
1428@item bookmarks mode (open stored URLs in browser, default: Alt+x).
1429@end enumerate")
1430 (license license:gpl3))))
1431
1432(define-public rofi-pass-wayland
1433 (package
1434 (inherit rofi-pass)
1435 (name "rofi-pass-wayland")
1436 (arguments
1437 (substitute-keyword-arguments arguments
1438 ((#:phases phases)
1439 #~(modify-phases #$phases
1440 ;; Set the clipboard and backend tools to ones for Wayland in the
1441 ;; default configuration file.
1442 (add-after 'fix-etc-path 'set-wayland-defaults
1443 (lambda _
1444 (substitute* "config.example"
1445 ;; Note the typo in current configuration.
1446 (("#clibpoard_backend=xclip")
1447 "clipboard_backend=wl-clipboard")
1448 (("#backend=xdotool")
1449 "backend=wtype"))))
1450 ;; Use Wayland related tools instead.
1451 (replace 'wrap-path
1452 (lambda* (#:key inputs #:allow-other-keys)
1453 (let ((bin (string-append #$output "/bin")))
1454 (for-each
1455 (lambda (script)
1456 (wrap-program (string-append bin "/" script)
1457 (list "PATH" 'prefix
1458 (map
1459 (lambda (binary)
1460 (dirname (search-input-file
1461 inputs
1462 (string-append "bin/" binary))))
1463 ;; wl-copy for wl-clipboard.
1464 '("pass" "pwgen" "rofi" "wl-copy" "wtype")))))
1465 (list "addpass" "rofi-pass")))))))))
1466 (inputs
1467 (modify-inputs inputs
1468 (replace "xclip" wl-clipboard)
1469 (replace "xdotool" wtype)
1470 (delete "xset")))
1471 (description (string-append
1472 (package-description rofi-pass)
1473 "\nThis package provides Wayland support by default."))))
1474
1475(define-public tessen
1476 (package
1477 (name "tessen")
1478 (version "2.2.3")
1479 (source (origin
1480 (method git-fetch)
1481 (uri (git-reference
1482 (url "https://github.com/ayushnix/tessen/")
1483 (commit (string-append "v" version))))
1484 (file-name (git-file-name name version))
1485 (sha256
1486 (base32
1487 "0pxx3x50k1zi82vjvib94rar6sy5bz3s2amq4zyba6s1a8isqlcr"))))
1488 (build-system gnu-build-system)
1489 (arguments
1490 (list #:tests?
1491 #f ;no tests
1492 #:phases
1493 #~(modify-phases %standard-phases
1494 (add-after 'unpack 'patch-wtype-path
1495 (lambda* (#:key inputs #:allow-other-keys)
1496 (substitute* "tessen"
1497 (("notify-send") (search-input-file inputs
1498 "/bin/notify-send"))
1499 (("wl-copy") (search-input-file inputs "/bin/wl-copy"))
1500 (("wtype") (search-input-file inputs "/bin/wtype"))
1501 (("xdg-open") (search-input-file inputs "/bin/xdg-open")))))
1502 (delete 'configure)) ;no configure script
1503 #:make-flags
1504 #~(list (string-append "DESTDIR=" #$output)
1505 "PREFIX=''")))
1506 (native-inputs (list scdoc))
1507 (inputs (list libnotify wl-clipboard wtype xdg-utils))
1508 (home-page "https://github.com/ayushnix/tessen")
1509 (synopsis "Frontend for password-store and gopass")
1510 (description "Tessen is a bash script that can autotype and copy data
1511from password-store and gopass files.")
1512 (license license:gpl2)))
1513
1514(define-public browserpass-native
1515 (package
1516 (name "browserpass-native")
1517 (version "3.1.0")
1518 (source
1519 (origin
1520 (method git-fetch)
1521 (uri (git-reference
1522 (url "https://github.com/browserpass/browserpass-native")
1523 (commit version)))
1524 (file-name (git-file-name name version))
1525 (sha256
1526 (base32 "1if72k526sqqxnw250qwxvzwvh1w0k8ag4p4xq3442b22hywx72i"))))
1527 (build-system go-build-system)
1528 (arguments
1529 (list #:import-path "github.com/browserpass/browserpass-native"
1530 #:install-source? #f
1531 #:phases
1532 #~(modify-phases %standard-phases
1533 (add-before 'build 'patch-makefile
1534 (lambda _
1535 ;; This doesn't go in #:make-flags because the Makefile
1536 ;; itself gets installed.
1537 (substitute* "src/github.com/browserpass/browserpass-native/Makefile"
1538 (("PREFIX \\?= /usr")
1539 (string-append "PREFIX ?= " #$output)))))
1540 (add-before 'build 'configure
1541 (lambda _
1542 (with-directory-excursion
1543 "src/github.com/browserpass/browserpass-native"
1544 (invoke "make" "configure"))))
1545 (replace 'build
1546 (lambda _
1547 (with-directory-excursion
1548 "src/github.com/browserpass/browserpass-native"
1549 (invoke "make"))))
1550 (replace 'install
1551 (lambda _
1552 (with-directory-excursion
1553 "src/github.com/browserpass/browserpass-native"
1554 (invoke "make" "install"))))
1555 (add-after 'install 'wrap-executable
1556 (lambda _
1557 (wrap-program (string-append #$output "/bin/browserpass")
1558 `("PATH" ":" prefix
1559 (,(string-append #$(this-package-input "gnupg") "/bin")))))))))
1560 (native-inputs
1561 (list which))
1562 (inputs
1563 (list bash-minimal gnupg go-github-com-mattn-go-zglob
1564 go-github-com-rifflock-lfshook go-github-com-sirupsen-logrus
1565 go-golang-org-x-sys))
1566 (home-page "https://github.com/browserpass/browserpass-native")
1567 (synopsis "Browserpass native messaging host")
1568 (description "Browserpass is a browser extension for pass, a
1569UNIX-based password store manager. It allows you to auto-fill or copy to
1570clipboard credentials for the current domain, protecting you from phishing
1571attacks.
1572
1573This package only contains the Browserpass native messaging host. You must
1574also install the browser extension for GNU IceCat or ungoogled-chromium
1575separately.")
1576 (license license:isc)))
1577
1578(define-public cpass
1579 (package
1580 (name "cpass")
1581 (version "0.9.4")
1582 (source (origin
1583 (method url-fetch)
1584 (uri (pypi-uri "cpass" version))
1585 (sha256
1586 (base32
1587 "1zp3a8mgqxn916fzj1v2yhgnl7v6s0vnd0qcghqs3qq648qmlwr5"))))
1588 (build-system pyproject-build-system)
1589 (arguments
1590 (list #:tests? #f ;no tests
1591 #:phases
1592 #~(modify-phases %standard-phases
1593 (add-after 'unpack 'patch-pass-refs
1594 (lambda* (#:key inputs #:allow-other-keys)
1595 (substitute* "cpass.py"
1596 (("'pass'")
1597 (string-append "'"
1598 (search-input-file inputs
1599 "bin/pass")
1600 "'"))
1601 (("\\.password_store")
1602 ".password-store")))))))
1603 (native-inputs
1604 (list python-setuptools))
1605 (inputs (list password-store))
1606 (propagated-inputs (list python-urwid))
1607 (home-page "https://github.com/OliverLew/cpass")
1608 (synopsis "Textual interface for @command{pass}")
1609 (description
1610 "@command{cpass} is a terminal user interface for @command{pass}.
1611It supports both vim-like keybindings and the mouse.")
1612 (license license:expat)))
1613
1614(define-public argon2
1615 (package
1616 (name "argon2")
1617 (version "20190702")
1618 (source
1619 (origin
1620 (method git-fetch)
1621 (uri (git-reference
1622 (url "https://github.com/P-H-C/phc-winner-argon2")
1623 (commit version)))
1624 (file-name (git-file-name name version))
1625 (sha256
1626 (base32
1627 "01rwanr4wmr9vm6c712x411wig543q195z2icn388z892a93lc7p"))))
1628 (build-system gnu-build-system)
1629 (arguments
1630 `(#:test-target "test"
1631 #:make-flags (list (string-append "CC=" ,(cc-for-target))
1632 (string-append "PREFIX=" (assoc-ref %outputs "out"))
1633 "LIBRARY_REL=lib"
1634 (string-append "ARGON2_VERSION=" ,version)
1635 "OPTTEST=1") ; disable CPU optimization
1636 #:phases
1637 (modify-phases %standard-phases
1638 (delete 'configure)))) ; No configure script.
1639 (home-page "https://www.argon2.com/")
1640 (synopsis "Password hashing library")
1641 (description "Argon2 provides a key derivation function that was declared
1642winner of the 2015 Password Hashing Competition.")
1643 ;; Argon2 is dual licensed under CC0 and ASL 2.0. Some of the source
1644 ;; files are CC0 only; see README.md and LICENSE for details.
1645 (license (list license:cc0 license:asl2.0))))
1646
1647(define-public secretsd
1648 ;; there are neither tags nor releases in the repository
1649 (let ((commit "d12eefee00dbd4b0f756dcf7c52d31539dbcfc67")
1650 (revision "1"))
1651 (package
1652 (name "secretsd")
1653 (version (git-version "1.0" revision commit))
1654 (source
1655 (origin
1656 (method git-fetch)
1657 (uri (git-reference
1658 (url "https://github.com/grawity/secretsd")
1659 (commit commit)))
1660 (file-name (git-file-name name version))
1661 (sha256
1662 (base32 "1cr6vpb1mc48b60mjbnzalp58vx07sh7hg9r65j0cppk0n4gc0aj"))
1663 (modules '((guix build utils)))
1664 (snippet
1665 ;; don't install platform dependencies
1666 #~(substitute* "setup.py" ((".*install_requires.*") "")))))
1667 (build-system pyproject-build-system)
1668 (arguments
1669 (list
1670 #:tests? #f ; no tests
1671 #:phases
1672 #~(modify-phases %standard-phases
1673 (add-after 'create-entrypoints 'wrap-program
1674 (lambda _
1675 (wrap-program (string-append #$output "/bin/secretsd")
1676 `("GI_TYPELIB_PATH" ":" prefix
1677 (,(getenv "GI_TYPELIB_PATH")))))))))
1678 (inputs (list python-dbus-1.2 python-platformdirs python-cryptography
1679 python-pygobject))
1680 (native-inputs (list bash-minimal python-setuptools python-wheel))
1681 (home-page "https://github.com/grawity/secretsd")
1682 (synopsis "Basic FreeDesktop.org Secret Service backend")
1683 (description
1684 "@code{secretsd} is a generic backend for the @code{libsecret} @acronym{API,
1685application programming interface} to use on headless systems or minimal desktop
1686environments. It stores secrets in a @code{sqlite} database, encrypted using a
1687@acronym{AES, Advanced Encryption Standard} key. The database key is stored in a
1688regular file next to the database by default, but can be read from an external
1689program.")
1690 (license license:expat))))
1691
1692(define-public pass-git-helper
1693 (package
1694 (name "pass-git-helper")
1695 (version "4.3.0")
1696 (source
1697 (origin
1698 (method git-fetch)
1699 (uri (git-reference
1700 (url "https://github.com/languitar/pass-git-helper")
1701 (commit (string-append "v" version))))
1702 (file-name (git-file-name name version))
1703 (sha256
1704 (base32
1705 "018kbpgffynhbxq79897m43cvxi7g688ycadmw92k68ilvrz26pw"))))
1706 (build-system pyproject-build-system)
1707 (arguments
1708 (list
1709 #:phases
1710 #~(modify-phases %standard-phases
1711 (add-before 'build 'set-home
1712 (lambda _
1713 (setenv "HOME" (getcwd)))))))
1714 (native-inputs
1715 (list python-pytest
1716 python-pytest-mock
1717 python-setuptools))
1718 (inputs
1719 (list password-store python-pyxdg))
1720 (home-page "https://github.com/languitar/pass-git-helper")
1721 (synopsis "Git credential helper interfacing with pass")
1722 (description "pass-git-helper is a git credential helper which
1723uses pass, the standard unix password manager, as the credential backend for
1724your git repositories. This is achieved by explicitly defining mappings
1725between hosts and entries in the password store.")
1726 (license license:lgpl3+)))
1727
1728(define-public john-the-ripper-jumbo
1729 (let ((official-version "1.9.0")
1730 (jumbo-version "1"))
1731 (package
1732 (name "john-the-ripper-jumbo")
1733 (version (string-append official-version "-" jumbo-version))
1734 (source
1735 (origin
1736 (method url-fetch)
1737 (uri (string-append "http://www.openwall.com/john/j/john-"
1738 official-version "-jumbo-" jumbo-version ".tar.xz"))
1739 (sha256
1740 (base32 "0fvz3v41hnaiv1ggpxanfykyfjq79cwp9qcqqn63vic357w27lgm"))
1741 (patches (search-patches "john-the-ripper-jumbo-with-gcc-11.patch"))))
1742 (build-system gnu-build-system)
1743 (native-inputs
1744 (list perl))
1745 (inputs
1746 (list gmp
1747 libpcap
1748 nss
1749 openssl
1750 python-wrapper
1751 ruby ; For genincstats.rb
1752 zlib))
1753 (arguments
1754 `(#:configure-flags
1755 (list "--with-systemwide"
1756 ;; Do not test for instruction set in configure, and do not
1757 ;; pass '-march=native' to gcc:
1758 "--disable-native-tests"
1759 "--disable-native-march"
1760 ,(string-append
1761 "--enable-simd="
1762 (let ((system (or (%current-target-system)
1763 (%current-system))))
1764 (cond
1765 ((or (string-prefix? "x86_64" system)
1766 (string-prefix? "i686" system)) "sse2")
1767 ((string-prefix? "aarch" system) "neon")
1768 (else "no")))))
1769 #:phases
1770 (modify-phases %standard-phases
1771 (add-before 'configure 'chdir-src
1772 (lambda _ (chdir "src") #t))
1773 (replace 'install
1774 (lambda _
1775 (let ((bindir (string-append %output "/bin"))
1776 (docdir (string-append %output "/share/doc/john"))
1777 (execdir (string-append %output "/libexec/john"))
1778 (datadir (string-append %output "/share/john"))
1779 (install-file-to (lambda (dir)
1780 (lambda (f) (install-file f dir))))
1781 (symlink? (lambda (_ s) (eq? (stat:type s) 'symlink))))
1782 (with-directory-excursion "../run"
1783 (for-each (install-file-to bindir)
1784 (cons*
1785 "john" "makechr" "cprepair" "SIPdump" "tgtsnarf"
1786 "genmkvpwd" "mkvcalcproba" "calc_stat" "raw2dyna"
1787 (find-files "." "(to|2)?john(-[^.]*)?$")))
1788 (for-each (lambda (f) ; Install symlinked aliases
1789 (let ((tgt (string-append bindir "/" (basename f))))
1790 ;; The use of install-file above dereferences
1791 ;; symlinks. We'd rather have the symlinks
1792 ;; for clarity, so remove tgt before linking.
1793 (when (file-exists? tgt) (delete-file tgt))
1794 (symlink "john" tgt)))
1795 (find-files "." symlink?))
1796 (for-each (install-file-to execdir)
1797 (cons* "mailer" "benchmark-unify" "relbench"
1798 (find-files "." ".*\\.js")))
1799 (for-each (lambda (f)
1800 (let* ((base (basename f))
1801 (name (substring base 0 (string-index base #\.)))
1802 (link (string-append bindir "/" name)))
1803 (install-file f execdir)
1804 (when (and (executable-file? f)
1805 (not (file-exists? link)))
1806 (symlink (string-append execdir "/" base) link))))
1807 (find-files "." ".*\\.(pl|py|rb|lua)"))
1808 (for-each (install-file-to datadir)
1809 (append (find-files "." "(stats|dictionary.*)")
1810 (find-files "." "(.*\\.chr|.*\\.lst)")
1811 (find-files "." ".*\\.conf")))
1812 (copy-recursively "rules" (string-append datadir "/rules")))
1813 (copy-recursively "../doc" docdir))))
1814 (delete 'check) ; Tests need installed .conf files; move after install
1815 (add-after 'install 'check
1816 (lambda args
1817 (setenv "HOME" "/tmp") ; Some tests need to write to ~/.john
1818 (setenv "OMP_NUM_THREADS" (number->string (parallel-job-count)))
1819 (apply (assoc-ref %standard-phases 'check) args))))))
1820 (home-page "http://www.openwall.com/john/")
1821 (synopsis "Password cracker")
1822 (description "John the Ripper is a fast password cracker. Its primary
1823purpose is to detect weak Unix passwords. Besides several @code{crypt}
1824password hash types most commonly found on various Unix systems, supported out
1825of the box are Windows LM hashes, plus lots of other hashes and ciphers. This
1826is the community-enhanced, \"jumbo\" version of John the Ripper.")
1827 (license license:gpl2+))))
1828
1829(define-public maskprocessor
1830 (package
1831 (name "maskprocessor")
1832 (version "0.73")
1833 (source
1834 (origin
1835 (method git-fetch)
1836 (uri (git-reference
1837 (url "https://github.com/hashcat/maskprocessor")
1838 (commit (string-append "v" version))))
1839 (file-name (git-file-name name version))
1840 (sha256
1841 (base32 "1vv12iwnkzvjsp9bnix0z1m3hbyhasf5nxngp65b4gdlkk7lqnrd"))))
1842 (build-system gnu-build-system)
1843 (arguments
1844 (list
1845 #:tests? #f ;upstream does not provide tests
1846 #:phases
1847 #~(modify-phases %standard-phases
1848 (delete 'bootstrap)
1849 (delete 'configure)
1850 (replace 'build
1851 (lambda* _args
1852 (invoke "gcc"
1853 "-W"
1854 "-Wall"
1855 "-Werror"
1856 "-std=c99"
1857 "-O2"
1858 "-DLINUX"
1859 "-o"
1860 "maskprocessor"
1861 "src/mp.c")))
1862 (replace 'install
1863 (lambda* _args
1864 (install-file "maskprocessor"
1865 (string-append #$output "/bin")))))))
1866 (home-page "https://github.com/hashcat/maskprocessor")
1867 (synopsis "High-Performance word generator")
1868 (description "Maskprocessor is a high-performance word generator with a
1869per-position configurable charset.")
1870 (license (list license:expat))))
1871
1872(define-public fpm2
1873 (package
1874 (name "fpm2")
1875 (version "0.90.1")
1876 (source
1877 (origin
1878 (method url-fetch)
1879 (uri (string-append "https://als.regnet.cz/fpm2/download/fpm2-"
1880 version ".tar.xz"))
1881 (sha256
1882 (base32
1883 "144mylycnkpzxbbfy30gas450iypgwx0bcd3nrimyws417kwb8qv"))))
1884 (build-system gnu-build-system)
1885 (arguments
1886 (list
1887 #:configure-flags
1888 #~(list "CFLAGS=-O2 -g -fcommon")
1889 #:phases
1890 #~(modify-phases %standard-phases
1891 (add-before 'configure 'pre-configure
1892 ;; The file po/POTFILES.in ends up missing for some reason in
1893 ;; both nix and guix builds. Adding the file with contents
1894 ;; found during troubleshooting.
1895 (lambda _
1896 (call-with-output-file "po/POTFILES.in"
1897 (lambda (port)
1898 (format port "data/fpm2.desktop.in
1899data/fpm2.desktop.in.in
1900src/callbacks.c
1901src/fpm.c
1902src/fpm_file.c
1903src/interface.c
1904src/support.c
1905"))))))))
1906 (inputs
1907 (list gtk+ gnupg libxml2 nettle))
1908 (native-inputs
1909 (list pkg-config intltool))
1910 (synopsis "Manage, generate and store passwords encrypted")
1911 (description "FPM2 is GTK2 port from Figaro's Password Manager
1912originally developed by John Conneely, with some new enhancements.
1913
1914Upstream development seems to have stopped. It is therefore recommended
1915to use a different password manager.")
1916 (home-page "https://als.regnet.cz/fpm2/")
1917 (license license:gpl2+)))
1918
1919(define-public pass-rotate
1920 (package
1921 (name "pass-rotate")
1922 (version "0.1")
1923 (source
1924 (origin
1925 (method git-fetch)
1926 (uri (git-reference
1927 (url "https://git.sr.ht/~sircmpwn/pass-rotate")
1928 (commit version)))
1929 (file-name (git-file-name name version))
1930 (sha256
1931 (base32 "1m067vvdlc85csbpkp8aw4s3ags7q8s3jszrr32kmj9qhk5c254f"))))
1932 (build-system pyproject-build-system)
1933 (arguments (list #:tests? #f)) ; No tests.
1934 (native-inputs (list python-setuptools))
1935 (inputs
1936 (list python-beautifulsoup4 python-docopt python-html5lib
1937 python-requests))
1938 (home-page "https://git.sr.ht/~sircmpwn/pass-rotate")
1939 (synopsis "Rotate password on online services")
1940 (description "pass-rotate is a command line utility and python library for
1941rotating passwords on various web services. It makes it easier to rotate your
1942passwords, one at a time or in bulk, when security events or routine upkeep of
1943your online accounts makes it necessary.")
1944 (license license:expat)))
1945
1946(define-public hashcat
1947 (package
1948 (name "hashcat")
1949 (version "7.1.2")
1950 (source (origin
1951 (method url-fetch)
1952 (uri (string-append "https://hashcat.net/files/hashcat-" version
1953 ".tar.gz"))
1954 (sha256
1955 (base32
1956 "15lbzjfb6n3d06090g1dyf3llc20mnmrn1yc9ys30xbldlracilm"))
1957 (modules '((guix build utils)))
1958 ;; Delete bundled libraries.
1959 (snippet
1960 ;; TODO: Unbundle LZMA-SDK as well
1961 #~(for-each delete-file-recursively
1962 '("deps/unrar" ;; nonfree license
1963 "deps/zlib" "deps/xxHash" "deps/OpenCL-Headers")))))
1964 (inputs (list minizip opencl-headers xxhash zlib))
1965 (build-system gnu-build-system)
1966 (arguments
1967 (list #:tests? #f ;no tests
1968 #:make-flags #~(list (string-append "PREFIX=" #$output)
1969 (string-append "AR=" #$(ar-for-target))
1970 (string-append "CC=" #$(cc-for-target))
1971 (string-append "ENABLE_UNRAR=0")
1972 (string-append "USE_SYSTEM_ZLIB=1")
1973 (string-append "USE_SYSTEM_OPENCL=1")
1974 (string-append "USE_SYSTEM_XXHASH=1"))
1975 #:phases #~(modify-phases %standard-phases
1976 (add-after 'unpack 'fix-reproducibility
1977 (lambda _
1978 (substitute* "src/Makefile"
1979 (("\\$\\(shell date \\+%s\\)")
1980 "0"))))
1981 (delete 'configure))))
1982 (supported-systems %64bit-supported-systems)
1983 (home-page "https://hashcat.net/hashcat/")
1984 (synopsis "Advanced password recovery utility")
1985 (description
1986 "Hashcat is an password recovery utility, supporting five
1987unique modes of attack for over 200 highly-optimized hashing algorithms.
1988Hashcat currently supports CPUs, GPUs, and other hardware accelerators on
1989Linux, Windows, and macOS, and has facilities to help enable distributed
1990password cracking.")
1991 (license license:expat)))
1992
1993(define-public hashcat-utils
1994 (package
1995 (name "hashcat-utils")
1996 (version "1.9")
1997 (source
1998 (origin
1999 (method url-fetch)
2000 (uri (string-append "https://github.com/hashcat/hashcat-utils/releases/"
2001 "download/v" version "/"
2002 "hashcat-utils-" version ".7z"))
2003 (sha256
2004 (base32 "0kq555kb338691qd7zjmi8vhq4km3apnsl2w63zh0igwzcjx6lx1"))))
2005 (native-inputs
2006 (list p7zip))
2007 (inputs
2008 (list perl))
2009 (build-system gnu-build-system)
2010 (arguments
2011 (list
2012 #:tests? #f ;no tests
2013 #:make-flags
2014 #~(list (string-append "CC=" #$(cc-for-target))
2015 ;; Upstream bug(?): "make all" seems to remove the
2016 ;; Perl scripts from the source.
2017 "native")
2018 #:phases
2019 #~(modify-phases %standard-phases
2020 (replace 'unpack
2021 (lambda* (#:key source #:allow-other-keys)
2022 (invoke "7z" "x" source)
2023 (chdir (string-append #$name "-" #$version "/src"))))
2024 (delete 'configure)
2025 (replace 'install
2026 (lambda _
2027 (let ((out (string-append #$output "/bin")))
2028 (mkdir-p out)
2029 (for-each
2030 (lambda (file)
2031 (copy-file file (string-append out "/"
2032 (basename file ".bin"))))
2033 (find-files "." "\\.bin$"))
2034 (for-each
2035 (lambda (file)
2036 (copy-file file (string-append out "/"
2037 (basename file ".pl"))))
2038 (find-files "../bin" "\\.pl$"))))))))
2039 (home-page "https://github.com/hashcat/hashcat-utils/")
2040 (synopsis "Small utilities that are useful in advanced password cracking")
2041 (description "Hashcat-utils are a set of small utilities that are useful
2042in advanced password cracking. They all are packed into multiple stand-alone
2043binaries. All of these utils are designed to execute only one specific
2044function. Since they all work with @code{STDIN} and @code{STDOUT} you can
2045group them into chains.")
2046 (license license:expat)))
2047
2048(define-public zxcvbn-c
2049 (package
2050 (name "zxcvbn-c")
2051 (version "2.6")
2052 (source (origin
2053 (method git-fetch)
2054 (uri (git-reference
2055 (url "https://github.com/tsyrogit/zxcvbn-c")
2056 (commit (string-append "v" version))))
2057 (file-name (git-file-name name version))
2058 (sha256
2059 (base32
2060 "1z8l5qipzqfpg9dg7i7rdhlhswmjk06i14ffrrk3npblrjjya17w"))))
2061 (build-system gnu-build-system)
2062 (arguments
2063 (list #:make-flags
2064 #~(list (string-append "CC=" #$(cc-for-target))
2065 (string-append "CXX=" #$(cxx-for-target)))
2066 #:test-target "test"
2067 #:phases
2068 #~(modify-phases %standard-phases
2069 (delete 'configure)
2070 (replace 'install
2071 (lambda _
2072 (install-file "zxcvbn.h" (string-append #$output "/include"))
2073 (for-each (lambda (file)
2074 (install-file file
2075 (string-append #$output "/lib")))
2076 (find-files "." "libzxcvbn\\.so.*")))))))
2077 (home-page "https://github.com/tsyrogit/zxcvbn-c")
2078 (synopsis "C/C++ implementation of the zxcvbn password strength estimation")
2079 (description "This library is a C/C++ implementation of the zxcvbn password
2080strength estimator. It provides functions to rate password strength, by
2081comparing the password to several word lists, including English first and last
2082names.")
2083 (license license:expat)))
2084
2085(define-public hydra
2086 (package
2087 (name "hydra")
2088 (version "9.6")
2089 (home-page "https://github.com/vanhauser-thc/thc-hydra")
2090 (source
2091 (origin
2092 (method git-fetch)
2093 (uri (git-reference
2094 (url home-page)
2095 (commit (string-append "v" version))))
2096 (file-name (git-file-name name version))
2097 (sha256
2098 (base32
2099 "119ybvrs6yllycpwdlmmg4jsgfh7n2bq16vv8jcxlfmshs3wab8d"))))
2100 (build-system gnu-build-system)
2101 (arguments
2102 (list
2103 #:make-flags #~(list (string-append "CC=" #$(cc-for-target)))
2104 #:tests? #f)) ;no test suite
2105 (native-inputs
2106 (list pkg-config))
2107 (inputs
2108 (list freerdp gtk+ openssl zlib))
2109 (synopsis "Gain access to a remote system by trying logins and passwords")
2110 (description
2111 "This package provides a tool to demonstrate how easy it is to gain
2112unauthorized access to a system by automatically attempting logins and
2113passwords. It supports a wide range of protocols including SSH, SMTP and
2114HTTP.")
2115 (license license:agpl3+)))
2116
2117(define-public bruteforce-luks
2118 (package
2119 (name "bruteforce-luks")
2120 (version "1.4.1")
2121 (source
2122 (origin
2123 (method git-fetch)
2124 (uri (git-reference
2125 (url "https://github.com/glv2/bruteforce-luks")
2126 (commit version)))
2127 (file-name (git-file-name name version))
2128 (sha256
2129 (base32 "1fhvm7ykqv2anny6zavd4iwh6gq5rp1r27p3zhn78sd3y34xhkmp"))))
2130 (build-system gnu-build-system)
2131 (native-inputs
2132 (list autoconf automake))
2133 (inputs
2134 (list cryptsetup-minimal))
2135 (synopsis "LUKS encrypted volume cracker")
2136 (description
2137 "This is a cracker for LUKS encrypted volumes. It can be used either in
2138exhaustive mode to try every password given a charset or in dictionary mode to
2139try every password contained in a file.")
2140 (home-page "https://github.com/glv2/bruteforce-luks")
2141 (license license:gpl3+)))
2142
2143(define-public bruteforce-salted-openssl
2144 (package
2145 (name "bruteforce-salted-openssl")
2146 (version "1.5.0")
2147 (source
2148 (origin
2149 (method git-fetch)
2150 (uri (git-reference
2151 (url "https://github.com/glv2/bruteforce-salted-openssl")
2152 (commit version)))
2153 (file-name (git-file-name name version))
2154 (sha256
2155 (base32 "00w1szj04jb63rh7sq1spc50013jgmz2nwm8k552i9ir8h4phw45"))))
2156 (build-system gnu-build-system)
2157 (native-inputs
2158 (list autoconf automake))
2159 (inputs
2160 (list openssl))
2161 (synopsis "Bruteforce cracker for openssl encrypted files")
2162 (description
2163 "This is a cracker for openssl encrypted files. It can be used either in
2164exhaustive mode to try every password given a charset or in dictionary mode to
2165try every password contained in a file.")
2166 (home-page "https://github.com/glv2/bruteforce-salted-openssl")
2167 (license license:gpl3+)))
2168
2169(define-public makepasswd
2170 (let ((commit "3545d57d3a589a392d7eb0df36a5286785345c9e")
2171 (revision "1"))
2172 (package
2173 (name "makepasswd")
2174 (version (git-version "0.5.4" revision commit))
2175 (source
2176 (origin
2177 (method git-fetch)
2178 (uri (git-reference
2179 (url "https://github.com/khorben/makepasswd")
2180 (commit commit)))
2181 (file-name (git-file-name name version))
2182 (sha256
2183 (base32 "0lspqyyxbk6h28yxnp7pd5aib161vrkzgasam5jpzn35n1jacx2j"))))
2184 (build-system gnu-build-system)
2185 (native-inputs
2186 (list pkg-config libxslt libxml2 docbook-xsl docbook-xml))
2187 (inputs
2188 (list libxcrypt openssl))
2189 (arguments
2190 (list
2191 #:phases
2192 #~(modify-phases %standard-phases
2193 (delete 'configure))
2194 #:make-flags
2195 #~(list (string-append "CC=" #$(cc-for-target))
2196 (string-append "PREFIX=" #$output))
2197 #:tests? #f)) ;no tests
2198 (synopsis "Generate (pseudo-)random passwords and hashes")
2199 (description
2200 "Makepasswd is a program that generates pseudo-random passwords of a
2201desired length. It can also generate their corresponding hashes for a given
2202encryption algorithm if so desired.")
2203 (home-page "https://github.com/khorben/makepasswd")
2204 (license license:gpl3))))
2205
2206(define-public pass-tomb
2207 ;; Latest release is 4 years old.
2208 (let ((commit "f4f34f4fc1ce7055fac74ad96686be49f7c28c349")
2209 (revision "0"))
2210 (package
2211 (name "pass-tomb")
2212 (version (git-version "1.3" revision commit))
2213 (source
2214 (origin
2215 (method git-fetch)
2216 (uri (git-reference
2217 (url "https://github.com/roddhjav/pass-tomb")
2218 (commit commit)))
2219 (file-name (git-file-name name version))
2220 (sha256
2221 (base32 "0cwik9v5pspyi0kgq6d2kaqy6gj3dgfn97nbjcbkbrbbc7syyd3v"))))
2222 (build-system gnu-build-system)
2223 (arguments
2224 (list
2225 #:make-flags
2226 #~(list (string-append "PREFIX=" #$output)
2227 (string-append "BASHCOMPDIR=" #$output
2228 "/share/bash-completion/completions"))
2229 #:test-target "tests"
2230 ;; tests are very dependent on system state (swap partition) and require
2231 ;; access to /tmp/zsh which is not in the build container.
2232 #:tests? #f
2233 #:phases
2234 #~(modify-phases %standard-phases
2235 (add-after 'unpack 'set-tomb-path
2236 (lambda* (#:key inputs #:allow-other-keys)
2237 (let ((tomb (assoc-ref inputs "tomb")))
2238 (substitute* "tomb.bash"
2239 ((":-tomb")
2240 (string-append ":-" tomb "/bin/tomb"))))))
2241 (delete 'configure))))
2242 (inputs
2243 (list tomb))
2244 (home-page "https://github.com/roddhjav/pass-tomb")
2245 (synopsis "Pass extension keeping the tree of passwords encrypted")
2246 (description "Pass-tomb provides a convenient solution to put your
2247password store in a Tomb and then keep your password tree encrypted when you
2248are not using it. It uses the same GPG key to encrypt passwords and tomb,
2249therefore you don't need to manage more key or secret. Moreover, you can ask
2250pass-tomb to automatically close your store after a given time.")
2251 (license license:gpl3+))))
2252
2253(define-public pass-coffin
2254 (package
2255 (name "pass-coffin")
2256 (version "1.2.1")
2257 (source
2258 (origin
2259 (method git-fetch)
2260 (uri (git-reference
2261 (url "https://github.com/ayushnix/pass-coffin")
2262 (commit (string-append "v" version))))
2263 (file-name (git-file-name name version))
2264 (sha256
2265 (base32 "1486ikwsdjsj74qf949vk47r8mfp2mbbdc3scs8786nnnkhzc89n"))))
2266 (build-system gnu-build-system)
2267 (arguments
2268 (list
2269 #:tests? #f ;No tests
2270 #:make-flags #~(list (string-append "PREFIX="
2271 #$output)
2272 (string-append "BASHCOMPDIR="
2273 #$output "/etc/bash_completion.d"))
2274 #:phases #~(modify-phases %standard-phases
2275 (delete 'configure))))
2276 (inputs (list password-store tar))
2277 (home-page "https://github.com/ayushnix/pass-coffin")
2278 (synopsis "Pass extension to keep the tree of passwords encrypted")
2279 (description
2280 "Pass-coffin is a pass extension that hides the password store
2281data inside a GPG encrypted file, which we'll call a coffin.")
2282 (license license:gpl3)))
2283
2284(define-public xkcdpass
2285 (package
2286 (name "xkcdpass")
2287 (version "1.30.0")
2288 (source
2289 (origin
2290 (method git-fetch)
2291 (uri (git-reference
2292 (url "https://github.com/redacted/XKCD-password-generator")
2293 (commit (string-append "xkcdpass-" version))))
2294 (file-name (git-file-name name version))
2295 (sha256
2296 (base32
2297 "1i2z2bsw7gylg97ls452i92159jq57x9iyjj4j7g46l3z4hmfs8b"))))
2298 (build-system pyproject-build-system)
2299 (arguments
2300 (list
2301 #:test-backend #~'unittest
2302 #:phases
2303 #~(modify-phases %standard-phases
2304 (add-before 'check 'cd-tests
2305 (lambda _
2306 (chdir "tests")))
2307 (add-after 'install 'install-manpage
2308 (lambda _
2309 (install-file
2310 "xkcdpass.1"
2311 (string-append #$output "/share/man/man1")))))))
2312 (native-inputs (list python-setuptools))
2313 (home-page "https://github.com/redacted/XKCD-password-generator")
2314 (synopsis
2315 "Generate secure multiword passwords/passphrases, inspired by XKCD")
2316 (description
2317 "This package provides a flexible and scriptable password generator which
2318generates strong passphrases, inspired by
2319@url{https://xkcd.com/936/,XKCD 936}.")
2320 (license (list license:bsd-3 ;code
2321 license:cc0 ;spanish, eff_large_de, french word lists
2322 license:cc-by-sa3.0 ;finnish, italian word list
2323 license:cc-by-sa4.0 ;norwegian word list
2324 license:eupl1.1 ;finnish word list
2325 license:gpl2 ;portuguese word list
2326 license:gpl3 ;ger-anix word list
2327 license:lgpl2.0 ;finnish word list
2328 license:lgpl2.1 ;portuguese word list
2329 license:mpl1.1)))) ;portuguese word list
2330
2331(define-public himitsu
2332 (package
2333 (name "himitsu")
2334 (version "0.10")
2335 (source (origin
2336 (method git-fetch)
2337 (uri (git-reference
2338 (url "https://git.sr.ht/~sircmpwn/himitsu")
2339 (commit version)))
2340 (file-name (git-file-name name version))
2341 (sha256
2342 (base32
2343 "1753cvfzhr7pppf4w13qbi54bkih70rzdgd63w5ax2kl0v4g8vlq"))))
2344 (build-system hare-build-system)
2345 (native-inputs (list scdoc))
2346 (supported-systems %hare-supported-systems)
2347 (home-page "https://himitsustore.org/")
2348 (synopsis "Password and secret manager daemon")
2349 (description "Himitsu is a daemon-oriented secret storage tool, including
2350both a client and daemon program. Secrets, including passwords and keys, may be
2351requested either through clients such as @code{himitsu-ssh} or through the
2352included @code{hiq} tool. Upon request, the user is prompted to authorize
2353access for that process to that specific secret. Himitsu uses the Hare
2354cryptographic library, which has not been audited.")
2355 (license license:gpl3)))
2356
2357(define-public hiprompt-gtk
2358 (package
2359 (name "hiprompt-gtk")
2360 (version "0.10")
2361 (source (origin
2362 (method git-fetch)
2363 (uri (git-reference
2364 (url "https://git.sr.ht/~sircmpwn/hiprompt-gtk")
2365 (commit version)))
2366 (file-name (git-file-name name version))
2367 (sha256
2368 (base32
2369 "0306nqrix9pfd5zkpf8fs3ih5z7fadm84fa9yzbxbdahx3g8ilv0"))))
2370 (build-system hare-build-system)
2371 (arguments
2372 (list #:tests? #f
2373 #:make-flags #~(list (string-append "CC=" #$(cc-for-target)))))
2374 (inputs (list himitsu hare-gi hare-adwaita hare-gtk4-layer-shell))
2375 (native-inputs (list (list glib "bin") pkg-config))
2376 (supported-systems %hare-supported-systems)
2377 (home-page "https://git.sr.ht/~sircmpwn/hiprompt-gtk")
2378 (synopsis "GTK prompter for Himitsu")
2379 (description "This package provides a GTK prompter for Himitsu, used to
2380request user consent for application access to stored secrets.")
2381 (license license:gpl3)))
2382
2383(define-public himitsu-ssh
2384 (let ((commit "446ff5f0529e1f837381c79d540045e829801d36")
2385 (revision "0"))
2386 (package
2387 (name "himitsu-ssh")
2388 (version (git-version "0.10.0" revision commit))
2389 (source (origin
2390 (method git-fetch)
2391 (uri (git-reference
2392 (url "https://git.sr.ht/~sircmpwn/himitsu-ssh")
2393 (commit commit)))
2394 (file-name (git-file-name name version))
2395 (sha256
2396 (base32
2397 "0q9vd7c5pf8v073isa0y9mpwq1jibg8fkv8cs2jcp4vq1dykamg0"))))
2398 (build-system hare-build-system)
2399 (inputs (list himitsu hare-ssh hare-ev))
2400 (native-inputs (list scdoc))
2401 (supported-systems %hare-supported-systems)
2402 (home-page "https://git.sr.ht/~sircmpwn/himitsu-ssh")
2403 (synopsis "Himitsu ssh-agent")
2404 (description "This package provides an ssh-agent implementation that
2405stores and secures keys through Himitsu.")
2406 (license license:gpl3))))
2407
2408(define-public himitsu-git
2409 (package
2410 (name "himitsu-git")
2411 (version "0.10.0")
2412 (source (origin
2413 (method git-fetch)
2414 (uri (git-reference
2415 (url "https://git.sr.ht/~sircmpwn/himitsu-git")
2416 (commit version)))
2417 (file-name (git-file-name name version))
2418 (sha256
2419 (base32
2420 "1m3n2j1sahks3sn4wb8wxnd1q05fc4acqpylk0fna5i28kn61m47"))))
2421 (build-system hare-build-system)
2422 (arguments (list #:tests? #f)) ; no tests
2423 (inputs (list himitsu))
2424 (native-inputs (list scdoc))
2425 (supported-systems %hare-supported-systems)
2426 (home-page "https://git.sr.ht/~sircmpwn/himitsu-git")
2427 (synopsis "Himitsu git credential helper")
2428 (description "This package provides a git credential helper that queries
2429Himitsu for credentials.")
2430 (license license:gpl3)))
2431
2432(define-public himitsu-secret-service
2433 (package
2434 (name "himitsu-secret-service")
2435 (version "0.1")
2436 (source (origin
2437 (method git-fetch)
2438 (uri (git-reference
2439 (url "https://git.sr.ht/~apreiml/himitsu-secret-service")
2440 (commit version)))
2441 (file-name (git-file-name name version))
2442 (sha256
2443 (base32
2444 "0d77p07l30qshihs5j8wlsi82rfg7y9v83rnjw7qcri7z51irgzg"))))
2445 (build-system pyproject-build-system)
2446 (arguments
2447 (list #:tests? #f
2448 #:phases
2449 #~(modify-phases %standard-phases
2450 (add-after 'build 'build-docs
2451 (lambda _
2452 (invoke "make" "docs")))
2453 (add-after 'install 'install-docs
2454 (lambda _
2455 (install-file "hisecrets-agent.1"
2456 (string-append #$output "/share/man/man1"))
2457 (install-file "himitsu-secret-service.5"
2458 (string-append #$output "/share/man/man5"))
2459 (install-file "himitsu-secret-service.7"
2460 (string-append #$output "/share/man/man7"))))
2461 (add-after 'wrap 'wrap-agent
2462 (lambda _
2463 (let ((bin (string-append #$output "/bin/hisecrets-agent"))
2464 (gi-typelib-path (getenv "GI_TYPELIB_PATH")))
2465 (wrap-program bin
2466 `("GI_TYPELIB_PATH" prefix (,gi-typelib-path))
2467 '("CRYPTO_BACKEND" = ("cryptodome"))))))
2468 (delete 'sanity-check)))) ; we have a slightly too old pygobject
2469 (inputs (cons* python-dbus
2470 python-pycryptodome
2471 python-pygobject
2472 python-pyhimitsu
2473 ;; python-prctl is optional, and is only used on Linux platforms.
2474 (if (target-linux?) `(,python-prctl) '())))
2475 (native-inputs (list python-hatchling python-setuptools scdoc))
2476 (home-page "https://git.sr.ht/~apreiml/himitsu-secret-service")
2477 (synopsis "Freedesktop secret-service daemon implementation for Himitsu")
2478 (description "This package provides a secret service implementation for
2479Himitsu, allowing seamless access for applications storing secrets through the
2480protocol.")
2481 (license license:expat)))