1--TEST--
2openssl_encrypt() with GCM cipher algorithm tests
3--SKIPIF--
4<?php
5if (!extension_loaded("openssl"))
6	die("skip");
7if (!in_array('aes-128-gcm', openssl_get_cipher_methods()))
8	die("skip: aes-128-gcm not available");
9?>
10--FILE--
11<?php
12require_once __DIR__ . "/cipher_tests.inc";
13$method = 'aes-128-gcm';
14$tests = openssl_get_cipher_tests($method);
15
16foreach ($tests as $idx => $test) {
17    echo "TEST $idx\n";
18    $ct = openssl_encrypt($test['pt'], $method, $test['key'], OPENSSL_RAW_DATA,
19        $test['iv'], $tag, $test['aad'], strlen($test['tag']));
20    var_dump($test['ct'] === $ct);
21    var_dump($test['tag'] === $tag);
22}
23
24// Empty IV error
25var_dump(openssl_encrypt('data', $method, 'password', 0, NULL, $tag, ''));
26
27// Failing to retrieve tag (max is 16 bytes)
28var_dump(openssl_encrypt('data', $method, 'password', 0, str_repeat('x', 32), $tag, '', 20));
29
30// Failing when no tag supplied
31var_dump(openssl_encrypt('data', $method, 'password', 0, str_repeat('x', 32)));
32?>
33--EXPECTF--
34TEST 0
35bool(true)
36bool(true)
37TEST 1
38bool(true)
39bool(true)
40TEST 2
41bool(true)
42bool(true)
43TEST 3
44bool(true)
45bool(true)
46TEST 4
47bool(true)
48bool(true)
49TEST 5
50bool(true)
51bool(true)
52
53Warning: openssl_encrypt(): Setting of IV length for AEAD mode failed in %s on line %d
54bool(false)
55
56Warning: openssl_encrypt(): Retrieving verification tag failed in %s on line %d
57bool(false)
58
59Warning: openssl_encrypt(): A tag should be provided when using AEAD mode in %s on line %d
60bool(false)
61