a2fcc05b28592c54afc52aaf2666ea2ef8eb1058
[platform/upstream/cryptsetup.git] / luks / Makefile.am
1 moduledir = $(libdir)/cryptsetup
2
3 noinst_LTLIBRARIES = libluks.la
4
5 libluks_la_CFLAGS = -Wall
6
7 libluks_la_SOURCES = \
8         af.c \
9         pbkdf.c \
10         keymanage.c \
11         keyencryption.c \
12         hexprint.c \
13         random.c \
14         pbkdf.h \
15         random.h \
16         af.h \
17         luks.h
18
19 INCLUDES = -D_GNU_SOURCE                        \
20         -D_LARGEFILE64_SOURCE                   \
21         -D_FILE_OFFSET_BITS=64                  \
22         -I$(top_srcdir)/lib
23
24 EXTRA_DIST = testing/fileDiffer.py testing/compatimage.bz2
25
26 ORIG_IMG = /tmp/luks-test-orig
27 IMG = /tmp/luks-test
28 IMG1 = /tmp/luks-test1
29
30
31 LUKS_HEADER = S0-5 S6-7 S8-39 S40-71 S72-103 S104-107 S108-111 R112-131 R132-163 S164-167 S168-207 A0-591
32
33 KEY_SLOT0 = S208-211 S212-215 R216-247 S248-251 S251-255
34 KEY_MATERIAL0 = R4096-68096
35 KEY_MATERIAL0_EXT = R4096-68096
36
37 KEY_SLOT1 = S256-259 S260-263 R264-295 S296-299 S300-303 
38 KEY_MATERIAL1 = R69632-133632
39 KEY_MATERIAL1_EXT = S69632-133632
40
41 LOOPDEV = /dev/loop/5
42
43 test:
44         (cd ..; make clean; make CFLAGS=-Werror)
45         @if [ `id -u` != 0 ]; then      \
46                 echo Not root; \
47         fi
48         @if [ ! -e /tmp/key1 ]; then    \
49                 dd if=/dev/urandom of=/tmp/key1 count=1 bs=32; \
50         fi
51         @bzip2 -cd testing/compatimage.bz2 > $(IMG)
52         @-/sbin/losetup -d $(LOOPDEV)
53         @/sbin/losetup $(LOOPDEV) $(IMG)
54
55         @echo Case: open - compat image - acceptance check
56 # Image must not change
57         @cp $(IMG) $(ORIG_IMG)
58         echo "compatkey" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy
59         @sync
60         testing/fileDiffer.py $(IMG) $(ORIG_IMG) 
61         @-ls -l /dev/mapper/dummy > /dev/null
62         @../src/cryptsetup remove dummy
63         @echo "success"
64
65
66         @echo Case: open - compat image - denial check
67 # Image must not change
68         @cp $(IMG) $(ORIG_IMG)
69         echo "wrongkey" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy || true
70         @sync
71         testing/fileDiffer.py $(IMG) $(ORIG_IMG) 
72         @echo "success"
73
74         @echo Case: format
75 # All headers items and first key material section must change
76         @cp $(IMG) $(ORIG_IMG)
77         echo "key0" | ../src/cryptsetup -v -i 1000 -c aes-cbc-essiv:sha256 luksFormat $(LOOPDEV)
78         @sync
79         testing/fileDiffer.py $(IMG) $(ORIG_IMG) $(LUKS_HEADER) $(KEY_SLOT0) $(KEY_MATERIAL0)
80
81         @echo Case: format using hash sha512
82         @cp $(IMG) $(ORIG_IMG)
83         echo "key0" | ../src/cryptsetup -v -i 1000 -h sha512 -c aes-cbc-essiv:sha256 luksFormat $(LOOPDEV)
84         @sync
85         testing/fileDiffer.py $(IMG) $(ORIG_IMG) $(LUKS_HEADER) $(KEY_SLOT0) $(KEY_MATERIAL0)
86
87         @echo Case: open 
88 # Image must not change
89         @cp $(IMG) $(ORIG_IMG)
90         echo "key0" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy
91         @sync
92         testing/fileDiffer.py $(IMG) $(ORIG_IMG) 
93         @-ls -l /dev/mapper/dummy > /dev/null
94         @../src/cryptsetup remove dummy
95         @echo "success"
96
97         @echo Case: add key
98 # Key Slot 1 and key material section 1 must change, the rest must not.
99         @cp $(IMG) $(ORIG_IMG)
100         echo -e "key0\nkey1" | ../src/cryptsetup -v luksAddKey $(LOOPDEV)
101         @sync
102         testing/fileDiffer.py $(IMG) $(ORIG_IMG) $(KEY_SLOT1) $(KEY_MATERIAL1)
103         echo "key1" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy
104         @-ls -l /dev/mapper/dummy > /dev/null
105         @../src/cryptsetup -v remove dummy
106         @echo "success"
107
108 # Unsuccessful Key Delete - nothing may change
109         @echo Case: unsuccessful delete
110         @cp $(IMG) $(ORIG_IMG)
111         echo "invalid" | ../src/cryptsetup -v luksDelKey $(LOOPDEV) 1 || true
112         @sync
113         testing/fileDiffer.py $(IMG) $(ORIG_IMG)
114         @echo "success"
115
116 # Delete Key Test
117 # Key Slot 1 and key material section 1 must change, the rest must not
118         @echo Case: successful delete
119         @cp $(IMG) $(ORIG_IMG)
120         ../src/cryptsetup -v -q luksDelKey $(LOOPDEV) 1
121         @sync
122         testing/fileDiffer.py $(IMG) $(ORIG_IMG) $(KEY_SLOT1) $(KEY_MATERIAL1_EXT)
123         echo "key1" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy 2>/dev/null || true
124         echo "key0" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy 2>/dev/null 
125         @../src/cryptsetup -v remove dummy
126         @echo "success"
127
128 # Non-Exclusive Open test
129         @echo Case: Non-Exclusive Open
130         echo "key0" | ../src/cryptsetup -v --readonly luksOpen $(LOOPDEV) dummy1 2>/dev/null
131 # must fail
132         echo "key0" | ../src/cryptsetup -v --readonly luksOpen $(LOOPDEV) dummy2 2>/dev/null || true 
133         echo "key0" | ../src/cryptsetup -v --non-exclusive --readonly luksOpen $(LOOPDEV) dummy2 2>/dev/null
134         @../src/cryptsetup -v remove dummy1
135         @../src/cryptsetup -v remove dummy2
136
137
138 # Key Slot 1 and key material section 1 must change, the rest must not
139         @echo Case: add key test for key files
140         @cp $(IMG) $(ORIG_IMG)
141         echo "key0" | ../src/cryptsetup -v luksAddKey $(LOOPDEV) /tmp/key1
142         @sync
143         testing/fileDiffer.py $(IMG) $(ORIG_IMG) $(KEY_SLOT1) $(KEY_MATERIAL1)
144         ../src/cryptsetup -d /tmp/key1 -v luksOpen $(LOOPDEV) dummy
145         @-ls -l /dev/mapper/dummy > /dev/null
146         @../src/cryptsetup -v remove dummy
147         @echo "success"
148
149         @echo Case: delete key test with /tmp/key1 as remaining key
150 # Key Slot 1 and key material section 1 must change, the rest must not
151         @cp $(IMG) $(ORIG_IMG)
152         ../src/cryptsetup -v -d /tmp/key1 luksDelKey $(LOOPDEV) 0
153         @sync
154         testing/fileDiffer.py $(IMG) $(ORIG_IMG) $(KEY_SLOT0) $(KEY_MATERIAL0_EXT)
155         echo "key0" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy 2>/dev/null || true
156         ../src/cryptsetup -v luksOpen -d /tmp/key1 $(LOOPDEV) dummy 2>/dev/null
157         @../src/cryptsetup -v remove dummy
158         @echo "success"
159
160 # Delete last slot
161         @echo Case: delete last key
162         @cp $(IMG) $(ORIG_IMG)
163         @echo "key0" | ../src/cryptsetup -v luksFormat $(LOOPDEV)
164         echo "key0" | ../src/cryptsetup -v luksKillSlot $(LOOPDEV) 0
165         @sync
166         echo "key0" | ../src/cryptsetup -v luksOpen $(LOOPDEV) dummy 2>/dev/null || true
167         @echo "success"
168
169 # Format test for ESSIV, and some other parameters.
170         @echo Case: parameter variation test
171         @dd if=/dev/zero of=$(IMG) count=20000
172         @cp $(IMG) $(ORIG_IMG)
173         @../src/cryptsetup -q -v -i 1000 -c aes-cbc-essiv:sha256 luksFormat $(LOOPDEV) /tmp/key1
174         @sync
175         testing/fileDiffer.py $(IMG) $(ORIG_IMG) $(LUKS_HEADER) $(KEY_SLOT0) $(KEY_MATERIAL0)
176         @../src/cryptsetup -d /tmp/key1 -v luksOpen $(LOOPDEV) dummy
177         @-ls -l /dev/mapper/dummy > /dev/null && echo "success"
178         @../src/cryptsetup -v remove dummy