blob: 625c87ab14a973d9ab0a42c7c12a68235985bf2f [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Manuel Pégourié-Gonnard7f809972015-03-09 17:05:11 +00002#include "mbedtls/des.h"
Paul Bakker33b43f12013-08-20 11:48:36 +02003/* END_HEADER */
Paul Bakkere896fea2009-07-06 06:40:23 +00004
Paul Bakker33b43f12013-08-20 11:48:36 +02005/* BEGIN_DEPENDENCIES
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +02006 * depends_on:MBEDTLS_DES_C
Paul Bakker33b43f12013-08-20 11:48:36 +02007 * END_DEPENDENCIES
8 */
Paul Bakker5690efc2011-05-26 13:16:06 +00009
Paul Bakker33b43f12013-08-20 11:48:36 +020010/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +010011void des_check_weak( data_t * key, int ret )
Manuel Pégourié-Gonnard9ce7e842014-03-29 17:06:43 +010012{
Azim Khand30ca132017-06-09 04:32:58 +010013 TEST_ASSERT( mbedtls_des_key_check_weak( key->x ) == ret );
Manuel Pégourié-Gonnard9ce7e842014-03-29 17:06:43 +010014}
15/* END_CASE */
16
17/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +010018void des_encrypt_ecb( data_t * key_str, data_t * src_str,
19 data_t * hex_dst_string )
Paul Bakkere896fea2009-07-06 06:40:23 +000020{
Paul Bakkere896fea2009-07-06 06:40:23 +000021 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020022 mbedtls_des_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +000023
Paul Bakkere896fea2009-07-06 06:40:23 +000024 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020025 mbedtls_des_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +000026
Paul Bakkere896fea2009-07-06 06:40:23 +000027
Azim Khand30ca132017-06-09 04:32:58 +010028 mbedtls_des_setkey_enc( &ctx, key_str->x );
29 TEST_ASSERT( mbedtls_des_crypt_ecb( &ctx, src_str->x, output ) == 0 );
Paul Bakkere896fea2009-07-06 06:40:23 +000030
Ronald Cron2dbba992020-06-10 11:42:32 +020031 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
32 8, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +020033
Paul Bakkerbd51b262014-07-10 15:26:12 +020034exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020035 mbedtls_des_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +000036}
Paul Bakker33b43f12013-08-20 11:48:36 +020037/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +000038
Paul Bakker33b43f12013-08-20 11:48:36 +020039/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +010040void des_decrypt_ecb( data_t * key_str, data_t * src_str,
41 data_t * hex_dst_string )
Paul Bakkere896fea2009-07-06 06:40:23 +000042{
Paul Bakkere896fea2009-07-06 06:40:23 +000043 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020044 mbedtls_des_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +000045
Paul Bakkere896fea2009-07-06 06:40:23 +000046 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020047 mbedtls_des_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +000048
Paul Bakkere896fea2009-07-06 06:40:23 +000049
Azim Khand30ca132017-06-09 04:32:58 +010050 mbedtls_des_setkey_dec( &ctx, key_str->x );
51 TEST_ASSERT( mbedtls_des_crypt_ecb( &ctx, src_str->x, output ) == 0 );
Paul Bakkere896fea2009-07-06 06:40:23 +000052
Ronald Cron2dbba992020-06-10 11:42:32 +020053 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
54 8, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +020055
Paul Bakkerbd51b262014-07-10 15:26:12 +020056exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020057 mbedtls_des_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +000058}
Paul Bakker33b43f12013-08-20 11:48:36 +020059/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +000060
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020061/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +010062void des_encrypt_cbc( data_t * key_str, data_t * iv_str,
63 data_t * src_str, data_t * hex_dst_string,
Azim Khanf1aaec92017-05-30 14:23:15 +010064 int cbc_result )
Paul Bakkere896fea2009-07-06 06:40:23 +000065{
Paul Bakkere896fea2009-07-06 06:40:23 +000066 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020067 mbedtls_des_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +000068
Paul Bakkere896fea2009-07-06 06:40:23 +000069 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020070 mbedtls_des_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +000071
Paul Bakkere896fea2009-07-06 06:40:23 +000072
Azim Khand30ca132017-06-09 04:32:58 +010073 mbedtls_des_setkey_enc( &ctx, key_str->x );
74 TEST_ASSERT( mbedtls_des_crypt_cbc( &ctx, MBEDTLS_DES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +020075 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +000076 {
Paul Bakkere896fea2009-07-06 06:40:23 +000077
Ronald Cron2dbba992020-06-10 11:42:32 +020078 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
79 src_str->len,
80 hex_dst_string->len ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +000081 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +020082
Paul Bakkerbd51b262014-07-10 15:26:12 +020083exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020084 mbedtls_des_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +000085}
Paul Bakker33b43f12013-08-20 11:48:36 +020086/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +000087
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020088/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +010089void des_decrypt_cbc( data_t * key_str, data_t * iv_str,
90 data_t * src_str, data_t * hex_dst_string,
Azim Khanf1aaec92017-05-30 14:23:15 +010091 int cbc_result )
Paul Bakkere896fea2009-07-06 06:40:23 +000092{
Paul Bakkere896fea2009-07-06 06:40:23 +000093 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020094 mbedtls_des_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +000095
Paul Bakkere896fea2009-07-06 06:40:23 +000096 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +020097 mbedtls_des_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +000098
Paul Bakkere896fea2009-07-06 06:40:23 +000099
Azim Khand30ca132017-06-09 04:32:58 +0100100 mbedtls_des_setkey_dec( &ctx, key_str->x );
101 TEST_ASSERT( mbedtls_des_crypt_cbc( &ctx, MBEDTLS_DES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker33b43f12013-08-20 11:48:36 +0200102 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000103 {
Paul Bakkere896fea2009-07-06 06:40:23 +0000104
Ronald Cron2dbba992020-06-10 11:42:32 +0200105 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
106 src_str->len,
107 hex_dst_string->len ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000108 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200109
Paul Bakkerbd51b262014-07-10 15:26:12 +0200110exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200111 mbedtls_des_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000112}
Paul Bakker33b43f12013-08-20 11:48:36 +0200113/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +0000114
Paul Bakker33b43f12013-08-20 11:48:36 +0200115/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +0100116void des3_encrypt_ecb( int key_count, data_t * key_str,
117 data_t * src_str, data_t * hex_dst_string )
Paul Bakkere896fea2009-07-06 06:40:23 +0000118{
Paul Bakkere896fea2009-07-06 06:40:23 +0000119 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200120 mbedtls_des3_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +0000121
Paul Bakkere896fea2009-07-06 06:40:23 +0000122 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200123 mbedtls_des3_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000124
Paul Bakkere896fea2009-07-06 06:40:23 +0000125
Paul Bakker33b43f12013-08-20 11:48:36 +0200126 if( key_count == 2 )
Azim Khand30ca132017-06-09 04:32:58 +0100127 mbedtls_des3_set2key_enc( &ctx, key_str->x );
Paul Bakker33b43f12013-08-20 11:48:36 +0200128 else if( key_count == 3 )
Azim Khand30ca132017-06-09 04:32:58 +0100129 mbedtls_des3_set3key_enc( &ctx, key_str->x );
Paul Bakkere896fea2009-07-06 06:40:23 +0000130 else
131 TEST_ASSERT( 0 );
132
Azim Khand30ca132017-06-09 04:32:58 +0100133 TEST_ASSERT( mbedtls_des3_crypt_ecb( &ctx, src_str->x, output ) == 0 );
Paul Bakkere896fea2009-07-06 06:40:23 +0000134
Ronald Cron2dbba992020-06-10 11:42:32 +0200135 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
136 8, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200137
Paul Bakkerbd51b262014-07-10 15:26:12 +0200138exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200139 mbedtls_des3_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000140}
Paul Bakker33b43f12013-08-20 11:48:36 +0200141/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +0000142
Paul Bakker33b43f12013-08-20 11:48:36 +0200143/* BEGIN_CASE */
Azim Khan5fcca462018-06-29 11:05:32 +0100144void des3_decrypt_ecb( int key_count, data_t * key_str,
145 data_t * src_str, data_t * hex_dst_string )
Paul Bakkere896fea2009-07-06 06:40:23 +0000146{
Paul Bakkere896fea2009-07-06 06:40:23 +0000147 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200148 mbedtls_des3_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +0000149
Paul Bakkere896fea2009-07-06 06:40:23 +0000150 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200151 mbedtls_des3_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000152
Paul Bakkere896fea2009-07-06 06:40:23 +0000153
Paul Bakker33b43f12013-08-20 11:48:36 +0200154 if( key_count == 2 )
Azim Khand30ca132017-06-09 04:32:58 +0100155 mbedtls_des3_set2key_dec( &ctx, key_str->x );
Paul Bakker33b43f12013-08-20 11:48:36 +0200156 else if( key_count == 3 )
Azim Khand30ca132017-06-09 04:32:58 +0100157 mbedtls_des3_set3key_dec( &ctx, key_str->x );
Paul Bakkere896fea2009-07-06 06:40:23 +0000158 else
159 TEST_ASSERT( 0 );
160
Azim Khand30ca132017-06-09 04:32:58 +0100161 TEST_ASSERT( mbedtls_des3_crypt_ecb( &ctx, src_str->x, output ) == 0 );
Paul Bakkere896fea2009-07-06 06:40:23 +0000162
Ronald Cron2dbba992020-06-10 11:42:32 +0200163 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
164 8, hex_dst_string->len ) == 0 );
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200165
Paul Bakkerbd51b262014-07-10 15:26:12 +0200166exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200167 mbedtls_des3_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000168}
Paul Bakker33b43f12013-08-20 11:48:36 +0200169/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +0000170
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200171/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +0100172void des3_encrypt_cbc( int key_count, data_t * key_str,
173 data_t * iv_str, data_t * src_str,
174 data_t * hex_dst_string, int cbc_result )
Paul Bakkere896fea2009-07-06 06:40:23 +0000175{
Paul Bakkere896fea2009-07-06 06:40:23 +0000176 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200177 mbedtls_des3_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +0000178
Paul Bakkere896fea2009-07-06 06:40:23 +0000179 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200180 mbedtls_des3_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000181
Paul Bakkere896fea2009-07-06 06:40:23 +0000182
Paul Bakker33b43f12013-08-20 11:48:36 +0200183 if( key_count == 2 )
Azim Khand30ca132017-06-09 04:32:58 +0100184 mbedtls_des3_set2key_enc( &ctx, key_str->x );
Paul Bakker33b43f12013-08-20 11:48:36 +0200185 else if( key_count == 3 )
Azim Khand30ca132017-06-09 04:32:58 +0100186 mbedtls_des3_set3key_enc( &ctx, key_str->x );
Paul Bakkere896fea2009-07-06 06:40:23 +0000187 else
188 TEST_ASSERT( 0 );
189
Azim Khand30ca132017-06-09 04:32:58 +0100190 TEST_ASSERT( mbedtls_des3_crypt_cbc( &ctx, MBEDTLS_DES_ENCRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker02722ea2011-05-25 11:34:44 +0000191
Paul Bakker33b43f12013-08-20 11:48:36 +0200192 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000193 {
Paul Bakkere896fea2009-07-06 06:40:23 +0000194
Ronald Cron2dbba992020-06-10 11:42:32 +0200195 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
196 src_str->len,
197 hex_dst_string->len ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000198 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200199
Paul Bakkerbd51b262014-07-10 15:26:12 +0200200exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200201 mbedtls_des3_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000202}
Paul Bakker33b43f12013-08-20 11:48:36 +0200203/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +0000204
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200205/* BEGIN_CASE depends_on:MBEDTLS_CIPHER_MODE_CBC */
Azim Khan5fcca462018-06-29 11:05:32 +0100206void des3_decrypt_cbc( int key_count, data_t * key_str,
207 data_t * iv_str, data_t * src_str,
208 data_t * hex_dst_string, int cbc_result )
Paul Bakkere896fea2009-07-06 06:40:23 +0000209{
Paul Bakkere896fea2009-07-06 06:40:23 +0000210 unsigned char output[100];
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200211 mbedtls_des3_context ctx;
Paul Bakkere896fea2009-07-06 06:40:23 +0000212
Paul Bakkere896fea2009-07-06 06:40:23 +0000213 memset(output, 0x00, 100);
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200214 mbedtls_des3_init( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000215
Paul Bakkere896fea2009-07-06 06:40:23 +0000216
Paul Bakker33b43f12013-08-20 11:48:36 +0200217 if( key_count == 2 )
Azim Khand30ca132017-06-09 04:32:58 +0100218 mbedtls_des3_set2key_dec( &ctx, key_str->x );
Paul Bakker33b43f12013-08-20 11:48:36 +0200219 else if( key_count == 3 )
Azim Khand30ca132017-06-09 04:32:58 +0100220 mbedtls_des3_set3key_dec( &ctx, key_str->x );
Paul Bakkere896fea2009-07-06 06:40:23 +0000221 else
222 TEST_ASSERT( 0 );
223
Azim Khand30ca132017-06-09 04:32:58 +0100224 TEST_ASSERT( mbedtls_des3_crypt_cbc( &ctx, MBEDTLS_DES_DECRYPT, src_str->len, iv_str->x, src_str->x, output ) == cbc_result );
Paul Bakker02722ea2011-05-25 11:34:44 +0000225
Paul Bakker33b43f12013-08-20 11:48:36 +0200226 if( cbc_result == 0 )
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000227 {
Paul Bakkere896fea2009-07-06 06:40:23 +0000228
Ronald Cron2dbba992020-06-10 11:42:32 +0200229 TEST_ASSERT( mbedtls_test_hexcmp( output, hex_dst_string->x,
230 src_str->len,
231 hex_dst_string->len ) == 0 );
Paul Bakkerf3ccc682010-03-18 21:21:02 +0000232 }
Paul Bakker8cfd9d82014-06-18 11:16:11 +0200233
Paul Bakkerbd51b262014-07-10 15:26:12 +0200234exit:
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200235 mbedtls_des3_free( &ctx );
Paul Bakkere896fea2009-07-06 06:40:23 +0000236}
Paul Bakker33b43f12013-08-20 11:48:36 +0200237/* END_CASE */
Paul Bakkere896fea2009-07-06 06:40:23 +0000238
Paul Bakker33b43f12013-08-20 11:48:36 +0200239/* BEGIN_CASE */
Azim Khanf1aaec92017-05-30 14:23:15 +0100240void des_key_parity_run( )
Paul Bakker1f87fb62011-01-15 17:32:24 +0000241{
242 int i, j, cnt;
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200243 unsigned char key[MBEDTLS_DES_KEY_SIZE];
Paul Bakker1f87fb62011-01-15 17:32:24 +0000244 unsigned int parity;
245
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200246 memset( key, 0, MBEDTLS_DES_KEY_SIZE );
Paul Bakker1f87fb62011-01-15 17:32:24 +0000247 cnt = 0;
248
249 // Iterate through all possible byte values
250 //
251 for( i = 0; i < 32; i++ )
252 {
253 for( j = 0; j < 8; j++ )
254 key[j] = cnt++;
255
256 // Set the key parity according to the table
257 //
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200258 mbedtls_des_key_set_parity( key );
Paul Bakker1f87fb62011-01-15 17:32:24 +0000259
260 // Check the parity with a function
261 //
262 for( j = 0; j < 8; j++ )
263 {
264 parity = key[j] ^ ( key[j] >> 4 );
265 parity = parity ^
266 ( parity >> 1 ) ^
267 ( parity >> 2 ) ^
268 ( parity >> 3 );
269 parity &= 1;
270
271 if( parity != 1 )
272 TEST_ASSERT( 0 );
273 }
274
275 // Check the parity with the table
276 //
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200277 TEST_ASSERT( mbedtls_des_key_check_key_parity( key ) == 0 );
Paul Bakker1f87fb62011-01-15 17:32:24 +0000278 }
279}
Paul Bakker33b43f12013-08-20 11:48:36 +0200280/* END_CASE */
Paul Bakker1f87fb62011-01-15 17:32:24 +0000281
Manuel Pégourié-Gonnard2cf5a7c2015-04-08 12:49:31 +0200282/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
Azim Khanf1aaec92017-05-30 14:23:15 +0100283void des_selftest( )
Paul Bakkere896fea2009-07-06 06:40:23 +0000284{
Andres AG93012e82016-09-09 09:10:28 +0100285 TEST_ASSERT( mbedtls_des_self_test( 1 ) == 0 );
Paul Bakkere896fea2009-07-06 06:40:23 +0000286}
Paul Bakker33b43f12013-08-20 11:48:36 +0200287/* END_CASE */