diff --git a/example/03-share-key-between-processes.php b/example/03-share-key-between-processes.php index 12e7b67..861f57a 100644 --- a/example/03-share-key-between-processes.php +++ b/example/03-share-key-between-processes.php @@ -12,12 +12,13 @@ $message = new PlainTextMessage("Only the holder of the same key can read this."); $cipherText = $message->encrypt($senderKey); +$ivString = (string)$message->getIv(); echo "Share this key securely: ", $sharedKeyString, PHP_EOL; echo "Cipher text to transmit: ", $cipherText, PHP_EOL; -echo "IV to transmit: ", $message->getIv(), PHP_EOL; +echo "IV to transmit: ", $ivString, PHP_EOL; -$receivedMessage = new EncryptedMessage($cipherText, $message->getIv()); +$receivedMessage = new EncryptedMessage($cipherText, $ivString); $decryptedMessage = $receivedMessage->decrypt($receiverKey); echo "Decrypted on the receiving side: ", $decryptedMessage, PHP_EOL; diff --git a/src/Message/AbstractMessage.php b/src/Message/AbstractMessage.php index 25933e4..36eb62f 100644 --- a/src/Message/AbstractMessage.php +++ b/src/Message/AbstractMessage.php @@ -1,6 +1,7 @@ withBytes($decodedIv); + } + $this->iv = $iv ?? new InitVector(); } diff --git a/test/phpunit/Message/EncryptedMessageTest.php b/test/phpunit/Message/EncryptedMessageTest.php index 8b29d4e..ba1092d 100644 --- a/test/phpunit/Message/EncryptedMessageTest.php +++ b/test/phpunit/Message/EncryptedMessageTest.php @@ -13,6 +13,13 @@ public function testToString():void { self::assertSame("0000", (string)$sut); } + public function testConstruct_withBase64IvString():void { + $ivBytes = base64_decode("8Zf3DaE343vn3LLDiyTlFCS6iFP4RVMw"); + $sut = new EncryptedMessage("0000", base64_encode($ivBytes)); + + self::assertSame($ivBytes, $sut->getIv()->getBytes()); + } + /** @noinspection SpellCheckingInspection */ public function testDecrypt():void { $iv = self::createMock(InitVector::class); @@ -55,4 +62,10 @@ public function testDecrypt_wrapsSodiumFailure():void { self::expectException(DecryptionFailureException::class); $sut->decrypt($key); } + + public function testConstruct_invalidBase64IvString():void { + self::expectException(\GT\Cipher\CipherException::class); + self::expectExceptionMessage("IV must be a valid base64 string"); + new EncryptedMessage("0000", "%%%"); + } }