gpg: Fix false negatives in Ed25519 signature verification.
[gnupg.git] / tests / openpgp / export.test
1 #!/bin/sh
2
3 . $srcdir/defs.inc || exit 3
4
5 check_exported_public_key()
6 {
7     $GPG --list-packets $1 >$1.packets
8     grep '^:public key packet:' $1.packets >/dev/null
9     grep "^     keyid: .*$KEY$" $1.packets >/dev/null
10     grep '^:user ID packet:' $1.packets >/dev/null
11     grep "^:signature packet:.*keyid.*$KEY" $1.packets >/dev/null
12     rm $1.packets
13 }
14
15 check_armored_public_key()
16 {
17     grep '^-----BEGIN PGP PUBLIC KEY BLOCK-----$' $1 >/dev/null
18     grep '^-----END PGP PUBLIC KEY BLOCK-----$' $1 >/dev/null
19     check_exported_public_key $1
20 }
21
22 check_exported_private_key()
23 {
24     $GPG --list-packets $1 >$1.packets
25     grep '^:secret key packet:' $1.packets >/dev/null
26     grep "^     keyid: .*$KEY$" $1.packets >/dev/null
27     grep '^:user ID packet:' $1.packets >/dev/null
28     grep "^:signature packet:.*keyid.*$KEY" $1.packets >/dev/null
29     rm $1.packets
30 }
31
32 check_armored_private_key()
33 {
34     grep '^-----BEGIN PGP PRIVATE KEY BLOCK-----$' $1 >/dev/null
35     grep '^-----END PGP PRIVATE KEY BLOCK-----$' $1 >/dev/null
36     check_exported_private_key $1
37 }
38
39 logfile="`pwd`/pinentry.log"
40 ppfile="`pwd`/passphrases"
41 rm -f -- $logfile $ppfile
42 touch $ppfile
43
44 prepare_passphrase()
45 {
46     echo $* >>$ppfile
47 }
48
49 prepare_passphrase_confirm()
50 {
51     echo "fake-entry being started to CONFIRM the weak phrase" >>$ppfile
52 }
53
54 assert_passphrases_consumed()
55 {
56     if test -s $ppfile; then
57         echo "Expected $ppfile to be empty, but these are enqueued:" >&2
58         cat "$ppfile" >&2
59         exit 1
60     fi
61     rm -f -- $logfile
62 }
63
64 export PINENTRY_USER_DATA="--logfile=$logfile --passphrasefile=$ppfile"
65
66 info "Checking key export."
67 for KEY in D74C5F22 C40FDECF ECABF51D
68 do
69     progress $KEY
70
71     $GPG --export $KEY >$KEY.public
72     check_exported_public_key $KEY.public
73     rm $KEY.public
74
75     $GPG --armor --export $KEY >$KEY.public
76     check_armored_public_key $KEY.public
77     rm $KEY.public
78
79     # test without --armor:
80
81     if [ $KEY = D74C5F22 ]; then
82         # Key D74C5F22 is protected by a passphrase.  Prepare this
83         # one.  Currently, GnuPG does not ask for an export passphrase
84         # in this case.
85         prepare_passphrase "$usrpass1"
86     fi
87
88     $GPG --export-secret-keys $KEY >$KEY.private
89     check_exported_private_key $KEY.private
90     rm $KEY.private
91
92     assert_passphrases_consumed
93
94     # test with --armor:
95
96     if [ $KEY = D74C5F22 ]; then
97         # Key D74C5F22 is protected by a passphrase.  Prepare this
98         # one.  Currently, GnuPG does not ask for an export passphrase
99         # in this case.
100         prepare_passphrase "$usrpass1"
101     fi
102
103     $GPG --armor --export-secret-keys $KEY >$KEY.private
104     check_armored_private_key $KEY.private
105     rm $KEY.private
106
107     assert_passphrases_consumed
108 done
109
110 progress_end