1{
2 bash,
3 fetchFromGitHub,
4 lib,
5 libsodium,
6 postgresql,
7 postgresqlBuildExtension,
8 postgresqlTestExtension,
9}:
10
11postgresqlBuildExtension (finalAttrs: {
12 pname = "pgsodium";
13 version = "3.1.9";
14
15 src = fetchFromGitHub {
16 owner = "michelp";
17 repo = "pgsodium";
18 tag = "v${finalAttrs.version}";
19 hash = "sha256-Y8xL3PxF1GQV1JIgolMI1e8oGcUvWAgrPv84om7wKP8=";
20 };
21
22 buildInputs = [
23 bash # required for patchShebangs
24 libsodium
25 ];
26
27 postInstall = ''
28 install -D -t $out/share/pgsodium/getkey_scripts getkey_scripts/*
29 ln -s $out/share/pgsodium/getkey_scripts/pgsodium_getkey_urandom.sh $out/share/postgresql/extension/pgsodium_getkey
30 '';
31
32 passthru.tests.extension = postgresqlTestExtension {
33 inherit (finalAttrs) finalPackage;
34 postgresqlExtraSettings = ''
35 shared_preload_libraries=pgsodium
36 '';
37 sql = ''
38 CREATE EXTENSION pgsodium;
39
40 SELECT pgsodium.version();
41 SELECT pgsodium.crypto_auth_keygen();
42 SELECT pgsodium.randombytes_random() FROM generate_series(0, 5);
43 SELECT * FROM pgsodium.crypto_box_new_keypair();
44 '';
45 };
46
47 meta = {
48 description = "Modern cryptography for PostgreSQL using libsodium";
49 homepage = "https://github.com/michelp/pgsodium";
50 changelog = "https://github.com/michelp/pgsodium/releases/tag/v${finalAttrs.version}";
51 license = lib.licenses.postgresql;
52 maintainers = [ ];
53 platforms = postgresql.meta.platforms;
54 };
55})