Merge remote-tracking branch 'origin/bugfix/additional-software-upgrade-failed-messag...
[tails-test.git] / features / step_definitions / encryption.rb
blob40224968f3d1ee9f94b62ee1928693aa73a85fa1
1 Given /^I generate an OpenPGP key named "([^"]+)" with password "([^"]+)"$/ do |name, pwd|
2   @passphrase = pwd
3   @key_name = name
4   next if @skip_steps_while_restoring_background
5   gpg_key_recipie = <<EOF
6      Key-Type: RSA
7      Key-Length: 4096
8      Subkey-Type: RSA
9      Subkey-Length: 4096
10      Name-Real: #{@key_name}
11      Name-Comment: Blah
12      Name-Email: #{@key_name}@test.org
13      Expire-Date: 0
14      Passphrase: #{pwd}
15      %commit
16 EOF
17   gpg_key_recipie.split("\n").each do |line|
18     @vm.execute("echo '#{line}' >> /tmp/gpg_key_recipie", $live_user)
19   end
20   c = @vm.execute("gpg --batch --gen-key < /tmp/gpg_key_recipie", $live_user)
21   assert(c.success?, "Failed to generate OpenPGP key:\n#{c.stderr}")
22 end
24 When /^I type a message into gedit$/ do
25   next if @skip_steps_while_restoring_background
26   step 'I run "gedit"'
27   @screen.wait_and_click("GeditWindow.png", 10)
28   sleep 0.5
29   @screen.type("ATTACK AT DAWN")
30 end
32 def maybe_deal_with_pinentry
33   begin
34     @screen.wait("PinEntryPrompt.png", 3)
35     @screen.type(@passphrase + Sikuli::KEY_RETURN)
36   rescue Sikuli::ImageNotFound
37     # The passphrase was cached or we wasn't prompted at all (e.g. when
38     # only encrypting to a public key)
39   end
40 end
42 def encrypt_sign_helper
43   @screen.wait_and_click("GeditWindow.png", 10)
44   @screen.type("a", Sikuli::KEY_CTRL)
45   sleep 0.5
46   @screen.click("GpgAppletIconNormal.png")
47   sleep 2
48   @screen.type("k")
49   @screen.wait_and_click("GpgAppletChooseKeyWindow.png", 30)
50   sleep 0.5
51   yield
52   maybe_deal_with_pinentry
53   @screen.wait_and_click("GeditWindow.png", 10)
54   sleep 0.5
55   @screen.type("n", Sikuli::KEY_CTRL)
56   sleep 0.5
57   @screen.type("v", Sikuli::KEY_CTRL)
58 end
60 def decrypt_verify_helper(icon)
61   @screen.wait_and_click("GeditWindow.png", 10)
62   @screen.type("a", Sikuli::KEY_CTRL)
63   sleep 0.5
64   @screen.click(icon)
65   sleep 2
66   @screen.type("d")
67   maybe_deal_with_pinentry
68   @screen.wait("GpgAppletResults.png", 10)
69   @screen.wait("GpgAppletResultsMsg.png", 10)
70 end
72 When /^I encrypt the message using my OpenPGP key$/ do
73   next if @skip_steps_while_restoring_background
74   encrypt_sign_helper do
75     @screen.type(@key_name + Sikuli::KEY_RETURN + Sikuli::KEY_RETURN)
76   end
77 end
79 Then /^I can decrypt the encrypted message$/ do
80   next if @skip_steps_while_restoring_background
81   decrypt_verify_helper("GpgAppletIconEncrypted.png")
82   @screen.wait("GpgAppletResultsEncrypted.png", 10)
83 end
85 When /^I sign the message using my OpenPGP key$/ do
86   next if @skip_steps_while_restoring_background
87   encrypt_sign_helper do
88     @screen.type("\t" + Sikuli::DOWN_ARROW + Sikuli::KEY_RETURN)
89     @screen.wait("PinEntryPrompt.png", 10)
90     @screen.type(@passphrase + Sikuli::KEY_RETURN)
91   end
92 end
94 Then /^I can verify the message's signature$/ do
95   next if @skip_steps_while_restoring_background
96   decrypt_verify_helper("GpgAppletIconSigned.png")
97   @screen.wait("GpgAppletResultsSigned.png", 10)
98 end
100 When /^I both encrypt and sign the message using my OpenPGP key$/ do
101   next if @skip_steps_while_restoring_background
102   encrypt_sign_helper do
103     @screen.type(@key_name + Sikuli::KEY_RETURN)
104     @screen.type("\t" + Sikuli::DOWN_ARROW + Sikuli::KEY_RETURN)
105     @screen.wait("PinEntryPrompt.png", 10)
106     @screen.type(@passphrase + Sikuli::KEY_RETURN)
107   end
110 Then /^I can decrypt and verify the encrypted message$/ do
111   next if @skip_steps_while_restoring_background
112   decrypt_verify_helper("GpgAppletIconEncrypted.png")
113   @screen.wait("GpgAppletResultsEncrypted.png", 10)
114   @screen.wait("GpgAppletResultsSigned.png", 10)
117 When /^I symmetrically encrypt the message with password "([^"]+)"$/ do |pwd|
118   @passphrase = pwd
119   next if @skip_steps_while_restoring_background
120   @screen.wait_and_click("GeditWindow.png", 10)
121   @screen.type("a", Sikuli::KEY_CTRL)
122   sleep 0.5
123   @screen.click("GpgAppletIconNormal.png")
124   sleep 2
125   @screen.type("p")
126   @screen.wait("PinEntryPrompt.png", 10)
127   @screen.type(@passphrase + Sikuli::KEY_RETURN)
128   sleep 1
129   @screen.wait("PinEntryPrompt.png", 10)
130   @screen.type(@passphrase + Sikuli::KEY_RETURN)
131   @screen.wait_and_click("GeditWindow.png", 10)
132   sleep 0.5
133   @screen.type("n", Sikuli::KEY_CTRL)
134   sleep 0.5
135   @screen.type("v", Sikuli::KEY_CTRL)