Chris@0: assertNotEquals(Crypt::randomBytes($count), Crypt::randomBytes($count)); Chris@0: // Check the length. Chris@0: $this->assertEquals(strlen(Crypt::randomBytes($count)), $count); Chris@0: } Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests hash generation. Chris@0: * Chris@0: * @dataProvider providerTestHashBase64 Chris@0: * @covers ::hashBase64 Chris@0: * Chris@0: * @param string $data Chris@0: * Data to hash. Chris@0: * @param string $expected_hash Chris@0: * Expected result from hashing $data. Chris@0: */ Chris@0: public function testHashBase64($data, $expected_hash) { Chris@0: $hash = Crypt::hashBase64($data); Chris@0: $this->assertEquals($expected_hash, $hash, 'The correct hash was not calculated.'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests HMAC generation. Chris@0: * Chris@0: * @dataProvider providerTestHmacBase64 Chris@0: * @covers ::hmacBase64 Chris@0: * Chris@0: * @param string $data Chris@0: * Data to hash. Chris@0: * @param string $key Chris@0: * Key to use in hashing process. Chris@0: * @param string $expected_hmac Chris@0: * Expected result from hashing $data using $key. Chris@0: */ Chris@0: public function testHmacBase64($data, $key, $expected_hmac) { Chris@0: $hmac = Crypt::hmacBase64($data, $key); Chris@0: $this->assertEquals($expected_hmac, $hmac, 'The correct hmac was not calculated.'); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests the hmacBase64 method with invalid parameters. Chris@0: * Chris@0: * @dataProvider providerTestHmacBase64Invalid Chris@0: * @covers ::hmacBase64 Chris@0: * Chris@0: * @param string $data Chris@0: * Data to hash. Chris@0: * @param string $key Chris@0: * Key to use in hashing process. Chris@0: */ Chris@0: public function testHmacBase64Invalid($data, $key) { Chris@14: if (method_exists($this, 'expectException')) { Chris@14: $this->expectException('InvalidArgumentException'); Chris@14: } Chris@14: else { Chris@14: $this->setExpectedException('InvalidArgumentException'); Chris@14: } Chris@0: Crypt::hmacBase64($data, $key); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Provides data for self::testHashBase64(). Chris@0: * Chris@0: * @return array Test data. Chris@0: */ Chris@0: public function providerTestHashBase64() { Chris@0: return [ Chris@0: [ Chris@0: '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: 'expectedHash' => '034rT6smZAVRxpq8O98cFFNLIVx_Ph1EwLZQKcmRR_s', Chris@0: ], Chris@0: [ Chris@0: 'data' => 'SHA-256 is one of the successor hash functions to SHA-1, and is one of the strongest hash functions available.', Chris@0: 'expected_hash' => 'yuqkDDYqprL71k4xIb6K6D7n76xldO4jseRhEkEE6SI', Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Provides data for self::testHmacBase64(). Chris@0: * Chris@0: * @return array Test data. Chris@0: */ Chris@0: public function providerTestHmacBase64() { Chris@0: return [ Chris@0: [ Chris@0: 'data' => 'Calculates a base-64 encoded, URL-safe sha-256 hmac.', Chris@0: 'key' => 'secret-key', Chris@0: 'expected_hmac' => '2AaH63zwjhekWZlEpAiufyfhAHIzbQhl9Hd9oCi3_c8', Chris@0: ], Chris@0: ]; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Provides data for self::testHmacBase64(). Chris@0: * Chris@0: * @return array Test data. Chris@0: */ Chris@0: public function providerTestHmacBase64Invalid() { Chris@0: return [ Chris@0: [new \stdClass(), new \stdClass()], Chris@0: [new \stdClass(), 'string'], Chris@0: [new \stdClass(), 1], Chris@0: [new \stdClass(), 0], Chris@0: [NULL, new \stdClass()], Chris@0: ['string', new \stdClass()], Chris@0: [1, new \stdClass()], Chris@0: [0, new \stdClass()], Chris@0: [[], []], Chris@0: [[], NULL], Chris@0: [[], 'string'], Chris@0: [[], 1], Chris@0: [[], 0], Chris@0: [NULL, []], Chris@0: [1, []], Chris@0: [0, []], Chris@0: ['string', []], Chris@0: [[], NULL], Chris@0: [NULL, NULL], Chris@0: [NULL, 'string'], Chris@0: [NULL, 1], Chris@0: [NULL, 0], Chris@0: [1, NULL], Chris@0: [0, NULL], Chris@0: ['string', NULL], Chris@0: ]; Chris@0: } Chris@0: Chris@0: }