dcb54c6f66be534b08672d093598062b7388d1a4
[platform/upstream/cryptsetup.git] / tests / password-hash-test
1 #!/bin/bash
2
3 # check hash processing in create command
4
5 CRYPTSETUP=../src/cryptsetup
6 DEV_NAME=dmc_test
7 KEY_FILE=keyfile
8
9 DEV2=$DEV_NAME"_x"
10
11 cleanup() {
12         [ -b /dev/mapper/$DEV2 ] && dmsetup remove $DEV2
13         udevadm settle 2>/dev/null 2>&1
14         [ -b /dev/mapper/$DEV_NAME ] && dmsetup remove $DEV_NAME
15         rm -f $KEY_FILE
16         exit $1
17 }
18
19 crypt_key() # hash keysize pwd/file name outkey
20 {
21         DEV2=$DEV_NAME"_x"
22         MODE=aes-cbc-essiv:sha256
23         [ $2 -gt 256 ] && MODE=aes-xts-plain
24
25         case "$3" in
26         pwd)
27                 echo -e -n "$4" | $CRYPTSETUP create -c $MODE -h $1 -s $2 $DEV2 /dev/mapper/$DEV_NAME
28                 ;;
29         stdin)
30                 echo -e -n "$4" | $CRYPTSETUP create -c $MODE -d "-" -h $1 -s $2 $DEV2 /dev/mapper/$DEV_NAME
31                 ;;
32         file)
33                 $CRYPTSETUP create -c $MODE -d $4 -h $1 -s $2 $DEV2 /dev/mapper/$DEV_NAME
34                 ;;
35         *)
36                 fail
37                 ;;
38         esac
39
40         VKEY=$(dmsetup table $DEV2 --showkeys 2>/dev/null | cut -d' '  -f 5)
41         echo -n "HASH: $1 KSIZE: $2 / $3"
42         if [ "$VKEY" != "$5" ] ; then
43                 echo " [FAILED]"
44                 echo "expected: $5"
45                 echo "real key: $VKEY"
46                 cleanup 100
47         fi
48         echo " [OK]"
49         dmsetup remove $DEV2
50 }
51
52 if [ $(id -u) != 0 ]; then
53         echo "WARNING: You must be root to run this test, test skipped."
54         exit 0
55 fi
56
57 dmsetup create $DEV_NAME --table "0 10240 zero" >/dev/null 2>&1
58
59 crypt_key ripemd160   0 pwd "xxx" aeb26d1f69eb6dddfb9381eed4d7299f091e99aa5d3ff06866d4ce9f620f7aca
60 crypt_key ripemd160 256 pwd "xxx" aeb26d1f69eb6dddfb9381eed4d7299f091e99aa5d3ff06866d4ce9f620f7aca
61 crypt_key ripemd160 128 pwd "xxx" aeb26d1f69eb6dddfb9381eed4d7299f
62 crypt_key sha1      256 pwd "xxx" b60d121b438a380c343d5ec3c2037564b82ffef30b1e0a6ad9af7a73aa91c197
63 crypt_key sha1      128 pwd "xxx" b60d121b438a380c343d5ec3c2037564
64 crypt_key sha256    256 pwd "xxx" cd2eb0837c9b4c962c22d2ff8b5441b7b45805887f051d39bf133b583baf6860
65 crypt_key sha256    128 pwd "xxx" cd2eb0837c9b4c962c22d2ff8b5441b7
66
67 crypt_key ripemd160   0 stdin "xxx"   aeb26d1f69eb6dddfb9381eed4d7299f091e99aa5d3ff06866d4ce9f620f7aca
68 crypt_key ripemd160 256 stdin "xxx\n" 625ce2a8dbdf08f1de400dba7ab9fab246f2a55ad6136e6cafd6703732dab8cf
69
70 # with keyfile, hash is ignored
71 crypt_key ripemd160 256 file /dev/zero 0000000000000000000000000000000000000000000000000000000000000000
72 crypt_key sha256    256 file /dev/zero 0000000000000000000000000000000000000000000000000000000000000000
73
74 # key file, 80 chars
75 echo -n -e "0123456789abcdef\n\x01\x00\x03\xff\xff\r\xff\xff\n\r" \
76            "2352j3rkjhadcfasc823rqaw7e1 3dq sdq3d 2dkjqw3h2=====" >$KEY_FILE
77 KEY_FILE_HEX="303132333435363738396162636465660a010003ffff0dffff0a0d20323335326a33726b6a686164636661736338323372716177376531203364712073647133"
78
79 crypt_key ripemd160 256 file $KEY_FILE ${KEY_FILE_HEX:0:64}
80 crypt_key sha256    256 file $KEY_FILE ${KEY_FILE_HEX:0:64}
81 crypt_key sha256    128 file $KEY_FILE ${KEY_FILE_HEX:0:32}
82 crypt_key sha256    512 file $KEY_FILE $KEY_FILE_HEX
83
84 cleanup 0