| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- <?php declare(strict_types=1);
- use PHPUnit\Framework\TestCase;
- use PrivateBin\FormatV2;
- class FormatV2Test extends TestCase
- {
- public function testFormatV2ValidatorValidatesCorrectly()
- {
- $paste = Helper::getPastePost();
- $comment = Helper::getCommentPost();
- $this->assertTrue(FormatV2::isValid($paste), 'valid format');
- $this->assertTrue(FormatV2::isValid($comment, true), 'valid format');
- $paste['adata'][0][0] = '$';
- $this->assertFalse(FormatV2::isValid($paste), 'invalid base64 encoding of iv');
- $paste = Helper::getPastePost();
- $paste['adata'][0][1] = '$';
- $this->assertFalse(FormatV2::isValid($paste), 'invalid base64 encoding of salt');
- $paste = Helper::getPastePost();
- $paste['ct'] = '$';
- $this->assertFalse(FormatV2::isValid($paste), 'invalid base64 encoding of ct');
- $paste = Helper::getPastePost();
- $paste['ct'] = 'bm9kYXRhbm9kYXRhbm9kYXRhbm9kYXRhbm9kYXRhCg==';
- $this->assertFalse(FormatV2::isValid($paste), 'low ct entropy');
- $paste = Helper::getPastePost();
- $paste['adata'][0][0] = 'MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=';
- $this->assertFalse(FormatV2::isValid($paste), 'iv too long');
- $paste = Helper::getPastePost();
- $paste['adata'][0][1] = 'MTIzNDU2Nzg5MDEyMzQ1Njc4OTA=';
- $this->assertFalse(FormatV2::isValid($paste), 'salt too long');
- $paste = Helper::getPastePost();
- $paste['foo'] = 'bar';
- $this->assertFalse(FormatV2::isValid($paste), 'invalid additional key');
- unset($paste['meta']);
- $this->assertFalse(FormatV2::isValid($paste), 'invalid missing key');
- $paste = Helper::getPastePost();
- $paste['v'] = 0.9;
- $this->assertFalse(FormatV2::isValid($paste), 'unsupported version');
- $paste = Helper::getPastePost();
- $paste['adata'][0][2] = 1000;
- $this->assertFalse(FormatV2::isValid($paste), 'not enough iterations');
- $paste = Helper::getPastePost();
- $paste['adata'][0][3] = 127;
- $this->assertFalse(FormatV2::isValid($paste), 'invalid key size');
- $paste = Helper::getPastePost();
- $paste['adata'][0][4] = 63;
- $this->assertFalse(FormatV2::isValid($paste), 'invalid tag length');
- $paste = Helper::getPastePost();
- $paste['adata'][0][5] = '!#@';
- $this->assertFalse(FormatV2::isValid($paste), 'invalid algorithm');
- $paste = Helper::getPastePost();
- $paste['adata'][0][6] = '!#@';
- $this->assertFalse(FormatV2::isValid($paste), 'invalid mode');
- $paste = Helper::getPastePost();
- $paste['adata'][0][7] = '!#@';
- $this->assertFalse(FormatV2::isValid($paste), 'invalid compression');
- $paste = Helper::getPaste();
- $this->assertFalse(FormatV2::isValid($paste), 'invalid meta key');
- }
- public function testFormatV2ValidatorRejectsMalformedTypes()
- {
- // malformed input must yield "false" (Invalid data) rather than a
- // fatal type error under strict_types
- $paste = Helper::getPastePost();
- $paste['v'] = 'abc';
- $this->assertFalse(FormatV2::isValid($paste), 'non-numeric version');
- $paste = Helper::getPastePost();
- $paste['v'] = array();
- $this->assertFalse(FormatV2::isValid($paste), 'array version');
- $paste = Helper::getPastePost();
- $paste['ct'] = array('not', 'a', 'string');
- $this->assertFalse(FormatV2::isValid($paste), 'non-string ciphertext');
- $paste = Helper::getPastePost();
- $paste['meta'] = 'not-an-array';
- $this->assertFalse(FormatV2::isValid($paste), 'non-array meta');
- $paste = Helper::getPastePost();
- $paste['adata'][0] = 'not-an-array';
- $this->assertFalse(FormatV2::isValid($paste), 'non-array cipher parameters');
- $paste = Helper::getPastePost();
- $paste['adata'][0] = array();
- $this->assertFalse(FormatV2::isValid($paste), 'empty cipher parameters');
- $paste = Helper::getPastePost();
- $paste['adata'][0][0] = array();
- $this->assertFalse(FormatV2::isValid($paste), 'non-string iv');
- $comment = Helper::getCommentPost();
- $comment['ct'] = 42;
- $this->assertFalse(FormatV2::isValid($comment, true), 'non-string comment ciphertext');
- }
- }
|