PHP Classes

File: test/SeedSpringTest.php

Recommend this page to a friend!
  Classes of Scott Arciszewski   PHP Seed Spring   test/SeedSpringTest.php   Download  
File: test/SeedSpringTest.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Seed Spring
Generate 128 bit pseudo-random numbers
Author: By
Last change:
Date: 3 years ago
Size: 2,522 bytes
 

Contents

Class file image Download
<?php
use ParagonIE\SeedSpring\SeedSpring;
use
ParagonIE\ConstantTime\Hex;

class
SeedSpringTest extends PHPUnit_Framework_TestCase
{
    public function
testDeterminism()
    {
       
$seed = random_bytes(16);

       
$rnd1 = new SeedSpring($seed);
       
$rnd2 = new SeedSpring($seed);

       
$out1 = $rnd1->getBytes(16);
       
$out2 = $rnd1->getBytes(16);
       
$out3 = $rnd2->getBytes(32);
       
       
$this->assertEquals(
           
$out1 . $out2,
           
$out3
       
);

       
$int1 = $rnd1->getInt(0, 255);
       
$int2 = $rnd2->getInt(0, 255);
       
       
$this->assertEquals(
           
$int1,
           
$int2
       
);
    }

   
/**
     * Our nonce logic needs to match OpenSSL's internals.
     */
   
public function testCtrModeNonce()
    {
       
$seed = random_bytes(16);

       
$rnd1 = new SeedSpring($seed);
       
$rnd2 = new SeedSpring($seed);

        foreach ([
4096, 4097, 8192, 16384, 65536] as $test) {
           
$buf1 = '';

            for (
$i = 0; $i < $test; $i += 16) {
               
$buf1 .= $rnd1->getBytes(
                   
$i + 16 > $test
                       
? ($test - $i)
                        :
16
               
);
            }
           
$buf2 = $rnd2->getBytes($test);
           
$this->assertSame(
                \
ParagonIE\ConstantTime\Binary::safeStrlen($buf1),
                \
ParagonIE\ConstantTime\Binary::safeStrlen($buf2),
               
'Not the same length - test ' . $test
           
);

           
$this->assertSame(
               
Hex::encode(\ParagonIE\ConstantTime\Binary::safeSubstr($buf1, 0, 16)),
               
Hex::encode(\ParagonIE\ConstantTime\Binary::safeSubstr($buf2, 0, 16)),
               
'AES CTR nonce isn\'t correct - first 16 - test ' . $test
           
);

           
$this->assertSame(
               
bin2hex(substr($buf1, 16, 16)),
               
bin2hex(substr($buf2, 16, 16)),
               
'AES CTR nonce isn\'t correct - next 16 - test ' . $test
           
);

           
$this->assertSame(
               
bin2hex(substr($buf1, -16, 16)),
               
bin2hex(substr($buf2, -16, 16)),
               
'AES CTR nonce isn\'t correct - last 16 - test ' . $test
           
);
        }
    }

    public function
testNonceChanges()
    {
       
$prng = new SeedSpring('JuxJ1XLnBKk7gPAS');
       
$this->assertSame(
           
'v',
           
$prng->getBytes(1)
        );
       
$this->assertNotSame(
           
'v',
           
$prng->getBytes(1)
        );
    }
}