Skip to content

Commit 7669c82

Browse files
committed
add tests for digital signatures
1 parent 7aa5368 commit 7669c82

11 files changed

Lines changed: 120 additions & 3 deletions

.github/workflows/archlinux.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ requires+=(
2828
make
2929
mate-common
3030
mate-desktop
31+
poppler
3132
poppler-glib
3233
texlive-bin
3334
webkit2gtk

.github/workflows/debian.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ requires+=(
2929
libkpathsea-dev
3030
libmate-desktop-dev
3131
libpoppler-glib-dev
32+
poppler-utils
3233
libsecret-1-dev
3334
libsm-dev
3435
libspectre-dev

.github/workflows/fedora.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ requires+=(
3636
mate-common
3737
mate-desktop-devel
3838
poppler-glib-devel
39+
poppler-utils
3940
redhat-rpm-config
4041
texlive-lib-devel
4142
webkit2gtk4.1-devel

.github/workflows/ubuntu.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ requires+=(
3030
libkpathsea-dev
3131
libmate-desktop-dev
3232
libpoppler-glib-dev
33+
poppler-utils
3334
libsecret-1-dev
3435
libsm-dev
3536
libspectre-dev

test/Makefile.am

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@ dist_check_SCRIPTS = \
44
test2.py \
55
test3.py \
66
test4.py \
7-
test5.py
7+
test5.py \
8+
testDigitalSignatures.py
89

910
TESTS = $(dist_check_SCRIPTS)
1011

@@ -13,7 +14,12 @@ EXTRA_DIST = \
1314
test-links.pdf \
1415
test-mime.bin \
1516
test-page-labels.pdf \
17+
test-signature-unsigned.pdf \
18+
test-signature-valid.pdf \
19+
test-signature-invalid.pdf \
1620
test6.py \
17-
test7.py
21+
test7.py \
22+
testDigitalSignatures.py \
23+
generate-signature-fixtures.sh
1824

1925
-include $(top_srcdir)/git.mk
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
#!/bin/sh
2+
set -eu
3+
4+
# Regenerate signed PDF fixtures used by testDigitalSignatures.py.
5+
6+
SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
7+
WORK_DIR="$SCRIPT_DIR/.siggen"
8+
NSS_DIR="$WORK_DIR/nssdb"
9+
10+
rm -rf "$WORK_DIR"
11+
mkdir -p "$NSS_DIR"
12+
13+
certutil -N -d "sql:$NSS_DIR" --empty-password
14+
15+
openssl req -x509 -newkey rsa:2048 -keyout "$WORK_DIR/key.pem" -out "$WORK_DIR/cert.pem" \
16+
-days 365 -nodes -subj "/CN=Atril Test Signer/O=MATE/C=US"
17+
18+
openssl pkcs12 -export -out "$WORK_DIR/signer.p12" -inkey "$WORK_DIR/key.pem" \
19+
-in "$WORK_DIR/cert.pem" -name "Atril Test Signer" -passout pass:test123
20+
21+
pk12util -i "$WORK_DIR/signer.p12" -d "sql:$NSS_DIR" -W test123 -K ""
22+
certutil -M -n "Atril Test Signer" -t "u,u,u" -d "sql:$NSS_DIR"
23+
24+
cp "$SCRIPT_DIR/test-links.pdf" "$SCRIPT_DIR/test-signature-unsigned.pdf"
25+
26+
pdfsig -add-signature \
27+
-nssdir "$NSS_DIR" \
28+
-nss-pwd "" \
29+
-new-signature-field-name Sig1 \
30+
-sign Sig1 \
31+
-nick "Atril Test Signer" \
32+
-kpw test123 \
33+
"$SCRIPT_DIR/test-signature-unsigned.pdf" \
34+
"$SCRIPT_DIR/test-signature-valid.pdf"
35+
36+
cp "$SCRIPT_DIR/test-signature-valid.pdf" "$SCRIPT_DIR/test-signature-invalid.pdf"
37+
38+
TEST_DIR="$SCRIPT_DIR" python3 - <<'PY'
39+
import os
40+
from pathlib import Path
41+
p = Path(os.environ["TEST_DIR"]) / "test-signature-invalid.pdf"
42+
b = bytearray(p.read_bytes())
43+
for i in range(len(b) // 3, len(b)):
44+
if b[i] not in (0, 10, 13, 32):
45+
b[i] ^= 0x01
46+
break
47+
p.write_bytes(b)
48+
PY
49+
50+
echo "Generated:"
51+
echo " test-signature-unsigned.pdf"
52+
echo " test-signature-valid.pdf"
53+
echo " test-signature-invalid.pdf"

test/meson.build

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@ test_cases = [
77
'testBookmarksMenu.py',
88
'testEncryptedFile.py',
99
'testFileReloading.py',
10-
'testWrongFileExtension.py'
10+
'testWrongFileExtension.py',
11+
'testDigitalSignatures.py'
1112
]
1213

1314
foreach case : test_cases

test/test-signature-invalid.pdf

103 KB
Binary file not shown.

test/test-signature-unsigned.pdf

14.8 KB
Binary file not shown.

test/test-signature-valid.pdf

103 KB
Binary file not shown.

0 commit comments

Comments
 (0)