1--TEST--
2Crypto\PBKDF2::derive basic usage.
3--SKIPIF--
4<?php if (!class_exists('Crypto\PBKDF2')) die("Skip: PBKDF2 is not supported (update OpenSSL version)"); ?>
5--FILE--
6<?php
7$vectors = array(
8    array(
9	    'H' => 'sha1',
10		'P' => 'password',
11		'S' => 'salt',
12		'c' => 1,
13		'dkLen' => 20,
14		'DK' => "0c 60 c8 0f 96 1f 0e 71 f3 a9 b5 24 af 60 12 06 2f e0 37 a6"
15	),
16	array(
17		'H' => 'sha1',
18		'P' => 'password',
19		'S' => 'salt',
20		'c' => 2,
21		'dkLen' => 20,
22		'DK' => "ea 6c 01 4d c7 2d 6f 8c cd 1e d9 2a ce 1d 41 f0 d8 de 89 57"
23	),
24	array(
25		'H' => 'sha1',
26		'P' => 'password',
27		'S' => 'salt',
28		'c' => 4096,
29		'dkLen' => 20,
30		'DK' => "4b 00 79 01 b7 65 48 9a be ad 49 d9 26 f7 21 d0 65 a4 29 c1"
31	),
32	array(
33		'H' => 'sha1',
34		'P' => 'passwordPASSWORDpassword',
35		'S' => 'saltSALTsaltSALTsaltSALTsaltSALTsalt',
36		'c' => 4096,
37		'dkLen' => 25,
38		'DK' => "3d 2e ec 4f e4 1c 84 9b 80 c8 d8 36 62 c0 e4 4a 8b 29 1a 96 4c f2 f0 70 38"
39	),
40	array(
41		'H' => 'sha1',
42		'P' => "pass\0word",
43		'S' => "sa\0lt",
44		'c' => 4096,
45		'dkLen' => 16,
46		'DK' => "56 fa 6a a7 55 48 09 9d cc 37 d7 f0 34 25 e0 c3"
47	),
48);
49
50foreach ($vectors as $v) {
51    $pbkdf2 = new Crypto\PBKDF2($v['H'], $v['dkLen'], $v['S'], $v['c']);
52	$dk = pack('H*', str_replace(' ', '', $v['DK']));
53	if ($dk !== $pbkdf2->derive($v['P'])) {
54	    print_r($v);
55	}
56}
57echo "DONE";
58?>
59--EXPECT--
60DONE
61