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