1{ lib
2, buildPythonPackage
3, rustPlatform
4, setuptools
5, setuptools-rust
6, isPyPy
7, fetchPypi
8, pythonOlder
9, cffi
10, pytestCheckHook
11, libiconv
12, stdenv
13 # for passthru.tests
14, asyncssh
15, django_4
16, fastapi
17, paramiko
18, twisted
19}:
20
21buildPythonPackage rec {
22 pname = "bcrypt";
23 version = "4.0.0";
24 format = "pyproject";
25
26 disabled = pythonOlder "3.6";
27
28 src = fetchPypi {
29 inherit pname version;
30 hash = "sha256-xZwXD8kiX6rQTd4bph2FtBOUbozi5fX1/zDf1nKD8xk=";
31 };
32
33 cargoRoot = "src/_bcrypt";
34 cargoDeps = rustPlatform.fetchCargoTarball {
35 inherit src;
36 sourceRoot = "${pname}-${version}/${cargoRoot}";
37 name = "${pname}-${version}";
38 hash = "sha256-HvfRLyUhlXVuvxWrtSDKx3rMKJbjvuiMcDY6g+pYFS0=";
39 };
40
41 nativeBuildInputs = [
42 setuptools
43 setuptools-rust
44 ] ++ (with rustPlatform; [
45 cargoSetupHook
46 rust.cargo
47 rust.rustc
48 ]);
49
50 # Remove when https://github.com/NixOS/nixpkgs/pull/190093 lands.
51 buildInputs = lib.optional stdenv.isDarwin libiconv;
52
53 propagatedBuildInputs = [
54 cffi
55 ];
56
57 propagatedNativeBuildInputs = [
58 cffi
59 ];
60
61 checkInputs = [
62 pytestCheckHook
63 ];
64
65 pythonImportsCheck = [
66 "bcrypt"
67 ];
68
69 passthru.tests = {
70 inherit asyncssh django_4 fastapi paramiko twisted;
71 };
72
73 meta = with lib; {
74 description = "Modern password hashing for your software and your servers";
75 homepage = "https://github.com/pyca/bcrypt/";
76 license = licenses.asl20;
77 maintainers = with maintainers; [ domenkozar ];
78 };
79}