1#	$NetBSD: t_cgdconfig.sh,v 1.4 2022/08/13 17:46:26 hannken Exp $
2#
3# Copyright (c) 2022 The NetBSD Foundation, Inc.
4# All rights reserved.
5#
6# Redistribution and use in source and binary forms, with or without
7# modification, are permitted provided that the following conditions
8# are met:
9# 1. Redistributions of source code must retain the above copyright
10#    notice, this list of conditions and the following disclaimer.
11# 2. Redistributions in binary form must reproduce the above copyright
12#    notice, this list of conditions and the following disclaimer in the
13#    documentation and/or other materials provided with the distribution.
14#
15# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25# POSSIBILITY OF SUCH DAMAGE.
26#
27
28COUNTKEY=$(atf_get_srcdir)/h_countkey
29
30atf_test_case storedkey
31storedkey_head()
32{
33	atf_set descr "Test key generation with storedkey"
34}
35storedkey_body()
36{
37	cat <<EOF >params
38algorithm adiantum;
39iv-method encblkno1;
40keylength 256;
41verify_method none;
42keygen storedkey key AAABAJtnmp3XZspMBAFpCYnB8Hekn0 \
43                     gj5cDVngslfGLSqwcy;
44EOF
45	atf_check -o inline:'m2eanddmykwEAWkJicHwd6SfSCPlwNWeCyV8YtKrBzI=\n' \
46	    cgdconfig -t params
47}
48
49atf_test_case storedkeys
50storedkeys_head()
51{
52	atf_set descr "Test multiple stored keys with cgd.conf"
53}
54storedkeys_body()
55{
56	cat <<EOF >dska
57algorithm adiantum;
58iv-method encblkno1;
59keylength 256;
60verify_method none;
61keygen storedkey key AAABAJtnmp3XZspMBAFpCYnB8Hekn0 \
62                     gj5cDVngslfGLSqwcy;
63EOF
64	cat <<EOF >dskb
65algorithm adiantum;
66iv-method encblkno1;
67keylength 256;
68verify_method none;
69keygen storedkey key AAABAK1pbgIayXftX0RQ3AaMK4YEd/ \
70                     fowKwQbENxpu3o1k9m;
71EOF
72	cat <<EOF >cgd.conf
73cgd0	/dev/dska	dska
74cgd1	/dev/dskb	dskb
75EOF
76	cat <<EOF >expected
77/dev/dska: m2eanddmykwEAWkJicHwd6SfSCPlwNWeCyV8YtKrBzI=
78/dev/dskb: rWluAhrJd+1fRFDcBowrhgR39+jArBBsQ3Gm7ejWT2Y=
79EOF
80	atf_check -o file:expected cgdconfig -T -f cgd.conf
81}
82
83atf_test_case storedkey2a
84storedkey2a_head()
85{
86	atf_set descr "Test key generation with combined storedkeys"
87}
88storedkey2a_body()
89{
90	cat <<EOF >params
91algorithm adiantum;
92iv-method encblkno1;
93keylength 256;
94verify_method none;
95keygen storedkey key AAABAJtnmp3XZspMBAFpCYnB8Hekn0 \
96                     gj5cDVngslfGLSqwcy;
97keygen storedkey key AAABAK1pbgIayXftX0RQ3AaMK4YEd/ \
98                     fowKwQbENxpu3o1k9m;
99EOF
100	atf_check -o inline:'Ng70n82vvaFbRTnVj03b8aDov8slbMXySFTajzp9SFQ=\n' \
101	    cgdconfig -t params
102}
103
104atf_test_case storedkey2b
105storedkey2b_head()
106{
107	atf_set descr "Test key generation with combined storedkeys, reversed"
108}
109storedkey2b_body()
110{
111	cat <<EOF >params
112algorithm adiantum;
113iv-method encblkno1;
114keylength 256;
115verify_method none;
116keygen storedkey key AAABAK1pbgIayXftX0RQ3AaMK4YEd/ \
117                     fowKwQbENxpu3o1k9m;
118keygen storedkey key AAABAJtnmp3XZspMBAFpCYnB8Hekn0 \
119                     gj5cDVngslfGLSqwcy;
120EOF
121	atf_check -o inline:'Ng70n82vvaFbRTnVj03b8aDov8slbMXySFTajzp9SFQ=\n' \
122	    cgdconfig -t params
123}
124
125atf_test_case sharedstoredkey10
126sharedstoredkey10_head()
127{
128	atf_set descr "Test shared key generation from storedkey, 10-byte info"
129}
130sharedstoredkey10_body()
131{
132	cat <<EOF >params
133algorithm adiantum;
134iv-method encblkno1;
135keylength 256;
136verify_method none;
137keygen storedkey {
138        key AAABAAd3CTYsLjLfDdw/DcR7umOQtsc7tQ+cMSLshErXwrPl;
139        shared "helloworld" algorithm hkdf-hmac-sha256 \
140            subkey AAAAUPDx8vP09fb3+Pk=;
141};
142EOF
143	atf_check -o inline:'PLJfJfqs1XqQQ09k0DYvKi0tCpDPGlpMXbAtVuzExb8=\n' \
144	    cgdconfig -t params
145}
146
147atf_test_case sharedstoredkey80
148sharedstoredkey80_head()
149{
150	atf_set descr "Test shared key generation from storedkey, 80-byte info"
151}
152sharedstoredkey80_body()
153{
154	cat <<EOF >params
155algorithm adiantum;
156iv-method encblkno1;
157keylength 256;
158verify_method none;
159keygen storedkey {
160        key AAABAAamuIxYUzYaBhBMnOs1tFzvdgAUkEZxAUoZP0DBX8JE;
161        shared "helloworld" algorithm hkdf-hmac-sha256 \
162            subkey AAACgLCxsrO0tba3uLm6u7y9vr/AwcLDxMXGx8jJ \
163                   ysvMzc7P0NHS09TV1tfY2drb3N3e3+Dh4uPk5ebn \
164                   6Onq6+zt7u/w8fLz9PX29/j5+vv8/f7/;
165};
166EOF
167	atf_check -o inline:'sR45jcgDJ6HI5/eMWWpJNE8BLtotTvrYoFDMTBmvqXw=\n' \
168	    cgdconfig -t params
169}
170
171atf_test_case sharedstoredkeys
172sharedstoredkeys_head()
173{
174	atf_set descr "Test multiple shared key generations from stored keys"
175}
176sharedstoredkeys_body()
177{
178	cat <<EOF >dska
179algorithm adiantum;
180iv-method encblkno1;
181keylength 256;
182verify_method none;
183keygen storedkey {
184        key AAABAAd3CTYsLjLfDdw/DcR7umOQtsc7tQ+cMSLshErXwrPl;
185        shared "helloworld" algorithm hkdf-hmac-sha256 \
186            subkey AAAAUPDx8vP09fb3+Pk=;
187};
188EOF
189	cat <<EOF >dskb
190algorithm adiantum;
191iv-method encblkno1;
192keylength 256;
193verify_method none;
194keygen storedkey {
195        key AAABAAd3CTYsLjLfDdw/DcR7umOQtsc7tQ+cMSLshErXwrPl;
196        shared "helloworld" algorithm hkdf-hmac-sha256 \
197            subkey AAAAQMxUtCBh7ha6mUU=;
198};
199EOF
200	cat <<EOF >cgd.conf0
201cgd0	/dev/dska	dska
202cgd1	/dev/dskb	dskb
203EOF
204	cat <<EOF >expected0
205/dev/dska: PLJfJfqs1XqQQ09k0DYvKi0tCpDPGlpMXbAtVuzExb8=
206/dev/dskb: ADxn574yb7sVdxHphNRRdObZxntMJA/ssMuUX6SXgEY=
207EOF
208	cat <<EOF >cgd.conf1
209cgd0	/dev/dskb	dskb
210cgd1	/dev/dska	dska
211EOF
212	cat <<EOF >expected1
213/dev/dskb: ADxn574yb7sVdxHphNRRdObZxntMJA/ssMuUX6SXgEY=
214/dev/dska: PLJfJfqs1XqQQ09k0DYvKi0tCpDPGlpMXbAtVuzExb8=
215EOF
216	atf_check -o file:expected0 cgdconfig -T -f cgd.conf0
217	atf_check -o file:expected1 cgdconfig -T -f cgd.conf1
218}
219
220atf_test_case sharedshellkeys
221sharedshellkeys_head()
222{
223	atf_set descr "Test multiple shared key generations from shell_cmd"
224}
225sharedshellkeys_body()
226{
227	cat <<EOF >dska
228algorithm adiantum;
229iv-method encblkno1;
230keylength 256;
231verify_method none;
232keygen shell_cmd {
233        cmd "${COUNTKEY} n B3cJNiwuMt8N3D8NxHu6Y5C2xzu1D5wxIuyEStfCs+U=";
234        shared "helloworld" algorithm hkdf-hmac-sha256 \
235            subkey AAAAUPDx8vP09fb3+Pk=;
236};
237EOF
238	cat <<EOF >dskb
239algorithm adiantum;
240iv-method encblkno1;
241keylength 256;
242verify_method none;
243keygen shell_cmd {
244        cmd "${COUNTKEY} n B3cJNiwuMt8N3D8NxHu6Y5C2xzu1D5wxIuyEStfCs+U=";
245        shared "helloworld" algorithm hkdf-hmac-sha256 \
246            subkey AAAAQMxUtCBh7ha6mUU=;
247};
248EOF
249	cat <<EOF >cgd.conf0
250cgd0	/dev/dska	dska
251cgd1	/dev/dskb	dskb
252EOF
253	cat <<EOF >expected0
254/dev/dska: PLJfJfqs1XqQQ09k0DYvKi0tCpDPGlpMXbAtVuzExb8=
255/dev/dskb: ADxn574yb7sVdxHphNRRdObZxntMJA/ssMuUX6SXgEY=
256EOF
257	cat <<EOF >cgd.conf1
258cgd0	/dev/dskb	dskb
259cgd1	/dev/dska	dska
260EOF
261	cat <<EOF >expected1
262/dev/dskb: ADxn574yb7sVdxHphNRRdObZxntMJA/ssMuUX6SXgEY=
263/dev/dska: PLJfJfqs1XqQQ09k0DYvKi0tCpDPGlpMXbAtVuzExb8=
264EOF
265	atf_check -o file:expected0 cgdconfig -T -f cgd.conf0
266	atf_check -o inline:'1\n' cat n
267	atf_check -o file:expected1 cgdconfig -T -f cgd.conf1
268	atf_check -o inline:'2\n' cat n
269}
270
271atf_init_test_cases()
272{
273	atf_add_test_case sharedshellkeys
274	atf_add_test_case sharedstoredkey10
275	atf_add_test_case sharedstoredkey80
276	atf_add_test_case sharedstoredkeys
277	atf_add_test_case storedkey
278	atf_add_test_case storedkey2a
279	atf_add_test_case storedkey2b
280	atf_add_test_case storedkeys
281}
282