@@ -20,12 +20,15 @@ jobs:
2020 - name : cargo build
2121 run : cargo build --release --features unstable
2222 working-directory : ./rage
23+ - name : Build the dummy plugin
24+ run : cargo build --release --example age-plugin-unencrypted
2325 - uses : actions/upload-artifact@v4
2426 with :
2527 name : rage
2628 path : |
2729 target/release/rage
2830 target/release/rage-keygen
31+ target/release/examples/age-plugin-unencrypted
2932
3033 - name : Update FiloSottile/age status with result
3134 if : always() && github.event.action == 'age-interop-request'
9598 matrix :
9699 alice : [rage, age]
97100 bob : [rage, age]
98- recipient : [x25519, ssh-rsa, ssh-ed25519]
101+ recipient : [x25519, tag, tagpq, ssh-rsa, ssh-ed25519, plugin]
102+ include :
103+ - identity : true
104+ - recipient : tag
105+ identity : false
106+ - recipient : tagpq
107+ identity : false
99108 fail-fast : false
100109
101110 steps :
@@ -119,18 +128,33 @@ jobs:
119128 - run : chmod +x age
120129 - run : chmod +x age-keygen
121130
131+ # Prepare the plugin environment
132+ - name : Prepare the plugin environment
133+ if : matrix.recipient == 'plugin'
134+ run : |
135+ chmod +x ./examples/age-plugin-unencrypted
136+ mkdir -p ~/.local/bin
137+ mv ./examples/age-plugin-unencrypted ~/.local/bin
138+
122139 # Prepare the test environment
123140 - name : Install dos2unix for simulating Windows files
124141 run : sudo apt update && sudo apt install dos2unix
125- - name : Write (very not private) age X25519 key
126- if : matrix.recipient == 'x25519'
127- run : echo "AGE-SECRET-KEY-1TRYTV7PQS5XPUYSTAQZCD7DQCWC7Q77YJD7UVFJRMW4J82Q6930QS70MRX" >key.txt
128- - name : Save the corresponding age x25519 recipient
129- if : matrix.recipient == 'x25519'
130- run : echo "age1y8m84r6pwd4da5d45zzk03rlgv2xr7fn9px80suw3psrahul44ashl0usm" >key.txt.pub
131- - name : Set the corresponding age x25519 recipient
142+ - name : Set up the X25519 identity and recipient
132143 if : matrix.recipient == 'x25519'
133- run : echo "AGE_PUBKEY=-r age1y8m84r6pwd4da5d45zzk03rlgv2xr7fn9px80suw3psrahul44ashl0usm" >> $GITHUB_ENV
144+ run : |
145+ echo "AGE-SECRET-KEY-1TRYTV7PQS5XPUYSTAQZCD7DQCWC7Q77YJD7UVFJRMW4J82Q6930QS70MRX" >key.txt
146+ echo "age1y8m84r6pwd4da5d45zzk03rlgv2xr7fn9px80suw3psrahul44ashl0usm" >key.txt.pub
147+ echo "AGE_PUBKEY=-r age1y8m84r6pwd4da5d45zzk03rlgv2xr7fn9px80suw3psrahul44ashl0usm" >> $GITHUB_ENV
148+ - name : Set up the age tag recipient
149+ if : matrix.recipient == 'tag'
150+ run : |
151+ echo "age1tag1qt8lw0ual6avlwmwatk888yqnmdamm7xfd0wak53ut6elz5c4swx2yqdj4e" >key.txt.pub
152+ echo "AGE_PUBKEY=-r age1tag1qt8lw0ual6avlwmwatk888yqnmdamm7xfd0wak53ut6elz5c4swx2yqdj4e" >> $GITHUB_ENV
153+ - name : Set up the age tagpq recipient
154+ if : matrix.recipient == 'tagpq'
155+ run : |
156+ echo "age1tagpq1m3e4wvp6hzcrn9exhy0ae3xfx2sjymp594k3tg7j4dpmj922we65vtnmrt2pyallax8669zqkr2pmfchptr4n38kug2xmcmp3adk2lnjqu00x5kxz5pvhmrltvfh9wuq973pcx35cnq8syn9qd3tzpehgztl4xpzr3tpd67g8af9trnjpc05gh7wu536aq4qt2y8zhsm4tvrfpsfl36qs5fpzysnk3sp9w77qzeg49357xex40v4s2lvt620swyys7u8yxdcnu4rkkwxdmt55gsuc3h5c5swahnegjgqwc60hn085ec3sjztwm45l44y3j2at9t6v9zra4ek3kek6waecqm98yaxl37w0d2zra626nz63jdm5sg59w7lyptw83zm6fntd8d0x03a9z6h9prfgpygzar6zrxjcrt4cdctk2mhf95s4a6v4zklfd49xhpsaeujm57thx2x3e3hwzc86ftfhmq5mkxxz3d6r8ws24xj4qfn73eyezg2wy094e3why592pghz27ruq3vkyegrv80eftnw9wqzwgvnwyseaus0yt84fylzrpzp6x2fguxuqjmgudr8xd33qm30evdpxd3jvjg8qh4q60kyq80jgff369k7nrepdc38grd2dava520excqp0ey0x39khx8ry03yffcatgv84fsx5j49djpapedsy693zute5xv5g2ewzrlj5se7akvkc4g4vmzhputpq8eyj9wz5dz6qtn7g3cfpd95nahw4ytspan0feyye04dcylv24ege7zkaj004gjwcxqxfqu2quawa83sx452jqjn8t48czp0xspwgnmvjyhttzzy6nhq8xzkdwnvsfefkwva6asrqc93zjn4rly5gnlv93xy3uzmr39szvjnf63426qzyeyvguc4vdcquwgsxgq236afcpqz866ny4tn7ckc0umefj242rt5vtvwqzzrvfev2mpvqcufp9pqvefyv4ftyuhgausfzuaadsczeykmft5wv3frzgrcp9ztr93h478ke4t86spp2uhyjkj73mp9g92ddk2fpv7v3njzsqgwhq3789sqrgkskehn0zjscckhwftyq4vet7vrlx2hs5kd9cwnq6t0djffhh3zquh4j3p0yaj9z2rc9wykg0usqw7983rrgur9jg8rnnqypwcz2lyclnnc705fc5g3an93ps60q6mxqp85u0ewtxdjlqcks84yduft0a0g6e7naew3v9u2d08knarvajn8q3gq9pgxde3s7nx94lus48wwvw2xjm7k82tvylec2393jdsuvch2xpe77w8hpv9nvsxfsrs270njpmfvpmgyk2cffl9tjp3qqcc4dfkf5rme2dg0x7ew8g39www5smm705q5da4eqvnqwrkavtq6xje9ss38hnkglz4eddz8f5qruvqmq2ff9l22gwkv8h432rdkysy0grkul8e2fedvkyyapfxt760udcgu92m54wl9yavmj4ga3ph9r5n99cjrq6wj5v33x33fe5vkjvfwnnt40wuv2hyexc9f4ylyqv9ldqq9epd4yuv8vrsfx2qy2kqz08kqhnzspy6s0x8fa5c2xkg5y2q0rvz4vnk7rp0acg6eksc3t7cxnn8y7glkjsqja3p56uz6vvhcw55d3ysad0hvsqxpjnc7svenf2gc5xn5kyr0et2vvyruxlnpqcdpqh9pzplumy5yzjxftyzh9ujfw0jq7ee60zx2x23p0jzyh9dvmly8p9h9ysptlqu7kwnejd65dnr75a0np2fvke8xen38r57w6z3wz3mycjmmn267wwxndfh9jdps7uxtct2wwfgamkpa5ap8s96lhfjztpwcm6fguhphu38yunu2v4vz3syzrvgwtqpemkewzp766nyu6texxvjlaemnhyyqutkcy6a42vqfsz49rw5wr4gt70r4vdaasehqjg46fnyts4sthrxadfllha3avu49wsj2c4jx" >key.txt.pub
157+ echo "AGE_PUBKEY=-r age1tagpq1m3e4wvp6hzcrn9exhy0ae3xfx2sjymp594k3tg7j4dpmj922we65vtnmrt2pyallax8669zqkr2pmfchptr4n38kug2xmcmp3adk2lnjqu00x5kxz5pvhmrltvfh9wuq973pcx35cnq8syn9qd3tzpehgztl4xpzr3tpd67g8af9trnjpc05gh7wu536aq4qt2y8zhsm4tvrfpsfl36qs5fpzysnk3sp9w77qzeg49357xex40v4s2lvt620swyys7u8yxdcnu4rkkwxdmt55gsuc3h5c5swahnegjgqwc60hn085ec3sjztwm45l44y3j2at9t6v9zra4ek3kek6waecqm98yaxl37w0d2zra626nz63jdm5sg59w7lyptw83zm6fntd8d0x03a9z6h9prfgpygzar6zrxjcrt4cdctk2mhf95s4a6v4zklfd49xhpsaeujm57thx2x3e3hwzc86ftfhmq5mkxxz3d6r8ws24xj4qfn73eyezg2wy094e3why592pghz27ruq3vkyegrv80eftnw9wqzwgvnwyseaus0yt84fylzrpzp6x2fguxuqjmgudr8xd33qm30evdpxd3jvjg8qh4q60kyq80jgff369k7nrepdc38grd2dava520excqp0ey0x39khx8ry03yffcatgv84fsx5j49djpapedsy693zute5xv5g2ewzrlj5se7akvkc4g4vmzhputpq8eyj9wz5dz6qtn7g3cfpd95nahw4ytspan0feyye04dcylv24ege7zkaj004gjwcxqxfqu2quawa83sx452jqjn8t48czp0xspwgnmvjyhttzzy6nhq8xzkdwnvsfefkwva6asrqc93zjn4rly5gnlv93xy3uzmr39szvjnf63426qzyeyvguc4vdcquwgsxgq236afcpqz866ny4tn7ckc0umefj242rt5vtvwqzzrvfev2mpvqcufp9pqvefyv4ftyuhgausfzuaadsczeykmft5wv3frzgrcp9ztr93h478ke4t86spp2uhyjkj73mp9g92ddk2fpv7v3njzsqgwhq3789sqrgkskehn0zjscckhwftyq4vet7vrlx2hs5kd9cwnq6t0djffhh3zquh4j3p0yaj9z2rc9wykg0usqw7983rrgur9jg8rnnqypwcz2lyclnnc705fc5g3an93ps60q6mxqp85u0ewtxdjlqcks84yduft0a0g6e7naew3v9u2d08knarvajn8q3gq9pgxde3s7nx94lus48wwvw2xjm7k82tvylec2393jdsuvch2xpe77w8hpv9nvsxfsrs270njpmfvpmgyk2cffl9tjp3qqcc4dfkf5rme2dg0x7ew8g39www5smm705q5da4eqvnqwrkavtq6xje9ss38hnkglz4eddz8f5qruvqmq2ff9l22gwkv8h432rdkysy0grkul8e2fedvkyyapfxt760udcgu92m54wl9yavmj4ga3ph9r5n99cjrq6wj5v33x33fe5vkjvfwnnt40wuv2hyexc9f4ylyqv9ldqq9epd4yuv8vrsfx2qy2kqz08kqhnzspy6s0x8fa5c2xkg5y2q0rvz4vnk7rp0acg6eksc3t7cxnn8y7glkjsqja3p56uz6vvhcw55d3ysad0hvsqxpjnc7svenf2gc5xn5kyr0et2vvyruxlnpqcdpqh9pzplumy5yzjxftyzh9ujfw0jq7ee60zx2x23p0jzyh9dvmly8p9h9ysptlqu7kwnejd65dnr75a0np2fvke8xen38r57w6z3wz3mycjmmn267wwxndfh9jdps7uxtct2wwfgamkpa5ap8s96lhfjztpwcm6fguhphu38yunu2v4vz3syzrvgwtqpemkewzp766nyu6texxvjlaemnhyyqutkcy6a42vqfsz49rw5wr4gt70r4vdaasehqjg46fnyts4sthrxadfllha3avu49wsj2c4jx" >> $GITHUB_ENV
134158 - name : Generate an ssh-rsa key
135159 if : matrix.recipient == 'ssh-rsa'
136160 run : ssh-keygen -t rsa -N "" -f key.txt
@@ -140,6 +164,12 @@ jobs:
140164 - name : Set the corresponding SSH recipient
141165 if : matrix.recipient == 'ssh-rsa' || matrix.recipient == 'ssh-ed25519'
142166 run : echo "AGE_PUBKEY=-R key.txt.pub" >> $GITHUB_ENV
167+ - name : Set up the plugin identity and recipient
168+ if : matrix.recipient == 'plugin'
169+ run : |
170+ age-plugin-unencrypted >key.txt
171+ echo "age1unencrypted1k5fr0r" >key.txt.pub
172+ echo "AGE_PUBKEY=-r age1unencrypted1k5fr0r" >> $GITHUB_ENV
143173 - name : Store key.txt in case we need it
144174 uses : actions/upload-artifact@v4
145175 with :
@@ -151,6 +181,7 @@ jobs:
151181 run : echo "Test string" | ./${{ matrix.alice }} -o test.age $AGE_PUBKEY
152182 - name : Decrypt from file
153183 run : ./${{ matrix.bob }} -d -i key.txt test.age | grep -q "^Test string$"
184+ if : matrix.identity
154185 - name : Store test.age
155186 uses : actions/upload-artifact@v4
156187 if : failure()
@@ -163,6 +194,7 @@ jobs:
163194 - name : Encrypt to ASCII-armored file
164195 run : ./${{ matrix.alice }} -a -o test2.age $AGE_PUBKEY test2.txt
165196 - name : Decrypt from ASCII-armored file
197+ if : matrix.identity
166198 run : ./${{ matrix.bob }} -d -i key.txt test2.age | grep -q "^2 test 2 string$"
167199 - name : Store test2.age
168200 uses : actions/upload-artifact@v4
@@ -174,6 +206,7 @@ jobs:
174206 - name : Convert file to CRLF
175207 run : unix2dos test2.age
176208 - name : Decrypt from ASCII-armored CRLF file
209+ if : matrix.identity
177210 run : ./${{ matrix.bob }} -d -i key.txt test2.age | grep -q "^2 test 2 string$"
178211 - name : Store CRLF-ed test2.age
179212 uses : actions/upload-artifact@v4
@@ -183,6 +216,7 @@ jobs:
183216 path : test2.age
184217
185218 - name : Pipes!
219+ if : matrix.identity
186220 run : echo "Test string 3 - ASCII Drift" | ./${{ matrix.alice }} $AGE_PUBKEY | tee --output-error=warn test3.age | ./${{ matrix.bob }} -d -i key.txt | grep -q "^Test string 3 - ASCII Drift$"
187221 - name : Store test3.age
188222 uses : actions/upload-artifact@v4
@@ -194,6 +228,7 @@ jobs:
194228 - name : Explicit stdout during encryption
195229 run : ./${{ matrix.alice }} -a -o - $AGE_PUBKEY test2.txt >test4.age
196230 - name : Explicit stdin during decryption
231+ if : matrix.identity
197232 run : cat test4.age | ./${{ matrix.bob }} -d -i key.txt - | grep -q "^2 test 2 string$"
198233 - name : Store test4.age
199234 uses : actions/upload-artifact@v4
@@ -205,8 +240,10 @@ jobs:
205240 - name : Generate a file to encrypt
206241 run : echo "Test 5" > test5.txt
207242 - name : Encrypt to identity in a named pipe
243+ if : matrix.identity
208244 run : ./${{ matrix.alice }} -e -i <(cat key.txt) -o test5.age test5.txt
209245 - name : Decrypt with identity in a named pipe
246+ if : matrix.identity
210247 run : ./${{ matrix.bob }} -d -i <(cat key.txt) test5.age | grep -q "^Test 5$"
211248 - name : Store test5.age
212249 uses : actions/upload-artifact@v4
@@ -218,6 +255,7 @@ jobs:
218255 - name : Encrypt to recipient in standard input
219256 run : cat key.txt.pub | ./${{ matrix.alice }} -e -R - -o test6.age test5.txt
220257 - name : Decrypt with identity in standard input
258+ if : matrix.identity
221259 run : cat key.txt | ./${{ matrix.bob }} -d -i - test6.age | grep -q "^Test 5$"
222260 - name : Store test6.age
223261 uses : actions/upload-artifact@v4
@@ -227,6 +265,7 @@ jobs:
227265 path : test6.age
228266
229267 - name : Keygen prevents overwriting an existing file
268+ if : matrix.identity
230269 run : |
231270 touch do_not_overwrite_key.txt
232271 if $(./${{ matrix.alice }}-keygen -o do_not_overwrite_key.txt); then
@@ -236,6 +275,7 @@ jobs:
236275 fi
237276
238277 - name : Keygen supports conversion from stdin
278+ if : matrix.identity
239279 run : ./${{ matrix.alice }}-keygen | ./${{ matrix.bob }}-keygen -y
240280
241281 - name : Keygen supports conversion from file
0 commit comments