+<?php
+/**
+ * Testing the untestable - Session ID generation
+ */
+class ReferenceSessionIdHashes
+{
+ // Session ID hashes
+ protected static $sidHashes = null;
+
+ /**
+ * Generates session ID hashes for all algorithms & bit representations
+ */
+ public static function genAllHashes()
+ {
+ foreach (hash_algos() as $algo) {
+ self::$sidHashes[$algo] = array();
+
+ foreach (array(4, 5, 6) as $bpc) {
+ self::$sidHashes[$algo][$bpc] = self::genSidHash($algo, $bpc);
+ }
+ }
+ }
+
+ /**
+ * Generates a session ID for a given hash algorithm and bit representation
+ *
+ * @param string $function name of the hash function
+ * @param int $bits_per_character representation type
+ *
+ * @return string the generated session ID
+ */
+ protected static function genSidHash($function, $bits_per_character)
+ {
+ if (session_id()) {
+ session_destroy();
+ }
+
+ ini_set('session.hash_function', $function);
+ ini_set('session.hash_bits_per_character', $bits_per_character);
+
+ session_start();
+ return session_id();
+ }
+
+ /**
+ * Returns the reference hash array
+ *
+ * @return array session IDs generated for all available algorithms and bit
+ * representations
+ */
+ public static function getHashes()
+ {
+ return self::$sidHashes;
+ }
+}