1--TEST-- 2Crypto\CMAC::__construct basic usage. 3--SKIPIF-- 4<?php 5if (!class_exists('Crypto\CMAC' )) 6 die("Skip: CMAC is not supported by OpenSSL"); 7?> 8--FILE-- 9<?php 10$key = pack('H*', '2b7e151628aed2a6abf7158809cf4f3c'); 11 12// basic creation 13$cmac = new Crypto\CMAC($key, 'aes-128-cbc'); 14if ($cmac instanceof Crypto\CMAC) { 15 echo "FOUND\n"; 16} 17// invalid key 18try { 19 $cmac = new Crypto\CMAC('key', 'aes-128-cbc'); 20} 21catch (Crypto\MACException $e) { 22 if ($e->getCode() === Crypto\MACException::KEY_LENGTH_INVALID) { 23 echo "KEY LENGTH INVALID\n"; 24 } 25} 26// invalid creation 27try { 28 $cmac = new Crypto\CMAC($key, 'nnn'); 29} 30catch (Crypto\MACException $e) { 31 if ($e->getCode() === Crypto\MACException::MAC_ALGORITHM_NOT_FOUND) { 32 echo "NOT FOUND\n"; 33 } 34} 35// sub classing 36class SubCMAC extends Crypto\CMAC { 37 function __construct($key, $algorithm) { 38 parent::__construct($key, $algorithm); 39 echo $this->algorithm . "\n"; 40 } 41} 42$subcmac = new SubCMAC($key, 'aes-128-cbc'); 43?> 44--EXPECT-- 45FOUND 46KEY LENGTH INVALID 47NOT FOUND 48AES-128-CBC 49