annotate core/tests/Drupal/Tests/Component/Utility/CryptTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 1fec387a4317
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\Component\Utility;
Chris@0 4
Chris@0 5 use Drupal\Component\Utility\Crypt;
Chris@0 6 use PHPUnit\Framework\TestCase;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests random byte generation.
Chris@0 10 *
Chris@0 11 * @group Utility
Chris@0 12 *
Chris@0 13 * @coversDefaultClass \Drupal\Component\Utility\Crypt
Chris@0 14 */
Chris@0 15 class CryptTest extends TestCase {
Chris@0 16
Chris@0 17 /**
Chris@0 18 * Tests random byte generation.
Chris@0 19 *
Chris@0 20 * @covers ::randomBytes
Chris@0 21 *
Chris@0 22 * @see \Drupal\Tests\Component\Utility\CryptRandomFallbackTest::testRandomBytesFallback
Chris@0 23 */
Chris@0 24 public function testRandomBytes() {
Chris@0 25 for ($i = 1; $i < 10; $i++) {
Chris@0 26 $count = rand(10, 10000);
Chris@0 27 // Check that different values are being generated.
Chris@0 28 $this->assertNotEquals(Crypt::randomBytes($count), Crypt::randomBytes($count));
Chris@0 29 // Check the length.
Chris@0 30 $this->assertEquals(strlen(Crypt::randomBytes($count)), $count);
Chris@0 31 }
Chris@0 32 }
Chris@0 33
Chris@0 34 /**
Chris@0 35 * Tests hash generation.
Chris@0 36 *
Chris@0 37 * @dataProvider providerTestHashBase64
Chris@0 38 * @covers ::hashBase64
Chris@0 39 *
Chris@0 40 * @param string $data
Chris@0 41 * Data to hash.
Chris@0 42 * @param string $expected_hash
Chris@0 43 * Expected result from hashing $data.
Chris@0 44 */
Chris@0 45 public function testHashBase64($data, $expected_hash) {
Chris@0 46 $hash = Crypt::hashBase64($data);
Chris@0 47 $this->assertEquals($expected_hash, $hash, 'The correct hash was not calculated.');
Chris@0 48 }
Chris@0 49
Chris@0 50 /**
Chris@0 51 * Tests HMAC generation.
Chris@0 52 *
Chris@0 53 * @dataProvider providerTestHmacBase64
Chris@0 54 * @covers ::hmacBase64
Chris@0 55 *
Chris@0 56 * @param string $data
Chris@0 57 * Data to hash.
Chris@0 58 * @param string $key
Chris@0 59 * Key to use in hashing process.
Chris@0 60 * @param string $expected_hmac
Chris@0 61 * Expected result from hashing $data using $key.
Chris@0 62 */
Chris@0 63 public function testHmacBase64($data, $key, $expected_hmac) {
Chris@0 64 $hmac = Crypt::hmacBase64($data, $key);
Chris@0 65 $this->assertEquals($expected_hmac, $hmac, 'The correct hmac was not calculated.');
Chris@0 66 }
Chris@0 67
Chris@0 68 /**
Chris@0 69 * Tests the hmacBase64 method with invalid parameters.
Chris@0 70 *
Chris@0 71 * @dataProvider providerTestHmacBase64Invalid
Chris@0 72 * @covers ::hmacBase64
Chris@0 73 *
Chris@0 74 * @param string $data
Chris@0 75 * Data to hash.
Chris@0 76 * @param string $key
Chris@0 77 * Key to use in hashing process.
Chris@0 78 */
Chris@0 79 public function testHmacBase64Invalid($data, $key) {
Chris@14 80 if (method_exists($this, 'expectException')) {
Chris@14 81 $this->expectException('InvalidArgumentException');
Chris@14 82 }
Chris@14 83 else {
Chris@14 84 $this->setExpectedException('InvalidArgumentException');
Chris@14 85 }
Chris@0 86 Crypt::hmacBase64($data, $key);
Chris@0 87 }
Chris@0 88
Chris@0 89 /**
Chris@0 90 * Provides data for self::testHashBase64().
Chris@0 91 *
Chris@0 92 * @return array Test data.
Chris@0 93 */
Chris@0 94 public function providerTestHashBase64() {
Chris@0 95 return [
Chris@0 96 [
Chris@0 97 'data' => 'The SHA (Secure Hash Algorithm) is one of a number of cryptographic hash functions. A cryptographic hash is like a signature for a text or a data file. SHA-256 algorithm generates an almost-unique, fixed size 256-bit (32-byte) hash. Hash is a one way function – it cannot be decrypted back. This makes it suitable for password validation, challenge hash authentication, anti-tamper, digital signatures.',
Chris@0 98 'expectedHash' => '034rT6smZAVRxpq8O98cFFNLIVx_Ph1EwLZQKcmRR_s',
Chris@0 99 ],
Chris@0 100 [
Chris@0 101 'data' => 'SHA-256 is one of the successor hash functions to SHA-1, and is one of the strongest hash functions available.',
Chris@0 102 'expected_hash' => 'yuqkDDYqprL71k4xIb6K6D7n76xldO4jseRhEkEE6SI',
Chris@0 103 ],
Chris@0 104 ];
Chris@0 105 }
Chris@0 106
Chris@0 107 /**
Chris@0 108 * Provides data for self::testHmacBase64().
Chris@0 109 *
Chris@0 110 * @return array Test data.
Chris@0 111 */
Chris@0 112 public function providerTestHmacBase64() {
Chris@0 113 return [
Chris@0 114 [
Chris@0 115 'data' => 'Calculates a base-64 encoded, URL-safe sha-256 hmac.',
Chris@0 116 'key' => 'secret-key',
Chris@0 117 'expected_hmac' => '2AaH63zwjhekWZlEpAiufyfhAHIzbQhl9Hd9oCi3_c8',
Chris@0 118 ],
Chris@0 119 ];
Chris@0 120 }
Chris@0 121
Chris@0 122 /**
Chris@0 123 * Provides data for self::testHmacBase64().
Chris@0 124 *
Chris@0 125 * @return array Test data.
Chris@0 126 */
Chris@0 127 public function providerTestHmacBase64Invalid() {
Chris@0 128 return [
Chris@0 129 [new \stdClass(), new \stdClass()],
Chris@0 130 [new \stdClass(), 'string'],
Chris@0 131 [new \stdClass(), 1],
Chris@0 132 [new \stdClass(), 0],
Chris@0 133 [NULL, new \stdClass()],
Chris@0 134 ['string', new \stdClass()],
Chris@0 135 [1, new \stdClass()],
Chris@0 136 [0, new \stdClass()],
Chris@0 137 [[], []],
Chris@0 138 [[], NULL],
Chris@0 139 [[], 'string'],
Chris@0 140 [[], 1],
Chris@0 141 [[], 0],
Chris@0 142 [NULL, []],
Chris@0 143 [1, []],
Chris@0 144 [0, []],
Chris@0 145 ['string', []],
Chris@0 146 [[], NULL],
Chris@0 147 [NULL, NULL],
Chris@0 148 [NULL, 'string'],
Chris@0 149 [NULL, 1],
Chris@0 150 [NULL, 0],
Chris@0 151 [1, NULL],
Chris@0 152 [0, NULL],
Chris@0 153 ['string', NULL],
Chris@0 154 ];
Chris@0 155 }
Chris@0 156
Chris@0 157 }