/** * @covers Asymmetric::encrypt() * @covers Asymmetric::decrypt() */ public function testEncryptFail() { $alice = KeyFactory::generateEncryptionKeyPair(); $bob = KeyFactory::generateEncryptionKeyPair(); $message = Asymmetric::encrypt(new HiddenString('test message'), $alice->getSecretKey(), $bob->getPublicKey(), true); $r = \Sodium\randombytes_uniform(\mb_strlen($message, '8bit')); $amt = \Sodium\randombytes_uniform(8); $message[$r] = \chr(\ord($message[$r]) ^ 1 << $amt); try { $plain = Asymmetric::decrypt($message, $bob->getSecretKey(), $alice->getPublicKey(), true); $this->assertSame($plain, $message); $this->fail('This should have thrown an InvalidMessage exception!'); } catch (CryptoException\InvalidMessage $e) { $this->assertTrue($e instanceof CryptoException\InvalidMessage); } }