1--TEST--
2openssl_decrypt() with CCM cipher algorithm tests
3--SKIPIF--
4<?php
5if (!extension_loaded("openssl"))
6	die("skip");
7if (!in_array('aes-256-ccm', openssl_get_cipher_methods()))
8	die("skip: aes-256-ccm not available");
9?>
10--FILE--
11<?php
12require_once __DIR__ . "/cipher_tests.inc";
13$methods = ['aes-128-ccm', 'aes-256-ccm'];
14
15foreach ($methods as $method) {
16    $tests = openssl_get_cipher_tests($method);
17    foreach ($tests as $idx => $test) {
18        echo "$method - TEST $idx\n";
19        $pt = openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
20            $test['iv'], $test['tag'], $test['aad']);
21        var_dump($test['pt'] === $pt);
22    }
23}
24
25// no IV
26var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
27	NULL, $test['tag'], $test['aad']));
28// failed because no AAD
29var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
30	$test['iv'], $test['tag']));
31// failed because wrong tag
32var_dump(openssl_decrypt($test['ct'], $method, $test['key'], OPENSSL_RAW_DATA,
33	$test['iv'], str_repeat('x', 10), $test['aad']));
34
35?>
36--EXPECTF--
37aes-128-ccm - TEST 0
38bool(true)
39aes-128-ccm - TEST 1
40bool(true)
41aes-256-ccm - TEST 0
42bool(true)
43
44Warning: openssl_decrypt(): Setting of IV length for AEAD mode failed in %s on line %d
45bool(false)
46bool(false)
47bool(false)
48