1{ lib
2, stdenv
3, fetchFromGitHub
4, libsodium
5, postgresql
6, postgresqlTestHook
7}:
8
9stdenv.mkDerivation (finalAttrs: {
10 pname = "pgsodium";
11 version = "3.1.9";
12
13 src = fetchFromGitHub {
14 owner = "michelp";
15 repo = "pgsodium";
16 rev = "v${finalAttrs.version}";
17 hash = "sha256-Y8xL3PxF1GQV1JIgolMI1e8oGcUvWAgrPv84om7wKP8=";
18 };
19
20 buildInputs = [
21 libsodium
22 postgresql
23 ];
24
25 installPhase = ''
26 runHook preInstall
27
28 install -D -t $out/lib pgsodium${postgresql.dlSuffix}
29 install -D -t $out/share/postgresql/extension sql/pgsodium-*.sql
30 install -D -t $out/share/postgresql/extension pgsodium.control
31
32 install -D -t $out/share/pgsodium/getkey_scripts getkey_scripts/*
33 ln -s $out/share/pgsodium/getkey_scripts/pgsodium_getkey_urandom.sh $out/share/postgresql/extension/pgsodium_getkey
34
35 runHook postInstall
36 '';
37
38 passthru.tests.extension = stdenv.mkDerivation {
39 name = "pgsodium-test";
40 dontUnpack = true;
41 doCheck = true;
42 nativeCheckInputs = [ postgresqlTestHook (postgresql.withPackages (_: [ finalAttrs.finalPackage ])) ];
43 failureHook = "postgresqlStop";
44 postgresqlTestUserOptions = "LOGIN SUPERUSER";
45 postgresqlExtraSettings = ''
46 shared_preload_libraries=pgsodium
47 '';
48 passAsFile = [ "sql" ];
49 sql = ''
50 CREATE EXTENSION pgsodium;
51
52 SELECT pgsodium.version();
53 SELECT pgsodium.crypto_auth_keygen();
54 SELECT pgsodium.randombytes_random() FROM generate_series(0, 5);
55 SELECT * FROM pgsodium.crypto_box_new_keypair();
56 '';
57 checkPhase = ''
58 runHook preCheck
59 psql -a -v ON_ERROR_STOP=1 -f $sqlPath
60 runHook postCheck
61 '';
62 installPhase = "touch $out";
63 };
64
65 meta = with lib; {
66 description = "Modern cryptography for PostgreSQL using libsodium";
67 homepage = "https://github.com/michelp/pgsodium";
68 changelog = "https://github.com/michelp/pgsodium/releases/tag/v${finalAttrs.version}";
69 license = licenses.postgresql;
70 maintainers = [ ];
71 platforms = postgresql.meta.platforms;
72 };
73})