<?php
// ****************************************************************************
// testbed for encrypt/decrypt routines
// ****************************************************************************
// Author: A J Marston
// Date: June 2003
// Amendments:
// April 2023 - amend htmlentities() to cast NULL input into a string.
// ****************************************************************************
if (function_exists('debugbreak')) {
//    debugBreak();
} // if
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
    $url = parse_url($_SERVER['REQUEST_URI']);
    if ($url['path'] != $_SERVER['PHP_SELF']) {
        // somebody is screwing with the URL! Posasible XSS attack!
        header('Location: ' .$_SERVER['SCRIPT_NAME']);
        exit;
    } // if
} // if
require 'std.encryption.class.inc';
$crypt = new encryption_class;
ini_set('session.bug_compat_warn', 0);
session_start();
$errors = array();
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   $key      = &$_POST['key'];
   $password = &$_POST['password'];
   $pswdlen  = &$_POST['pswdlen'];
   $crypt->setPswdLen($pswdlen);
   $adj      = &$_POST['adj'];
   $crypt->setAdjustment($adj);
   $mod      = &$_POST['mod'];
   $crypt->setModulus($mod);
   if ($crypt->errors) {
       $errors = $crypt->errors;
   } // if
} else {
   unset($_SESSION['encrypt_result']);
   unset($_SESSION['decrypt_result']);
   $key      = NULL;
   $password = NULL;
   $pswdlen  = 24;
} // if
if (empty($errors)) {
    $adj = $crypt->getAdjustment();
    $mod = $crypt->getModulus();
} // if
$encrypt_result = &$_SESSION['encrypt_result'];
$decrypt_result = &$_SESSION['decrypt_result'];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title>Test Encryption/Decryption routines</title>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
</head>
<body>
<div align="center">
<h1>Test Encryption/Decryption routines</h1>
<?php
if (empty($errors)) {
    if (isset($_POST['encrypt'])) {
        $encrypt_result = $crypt->encrypt($key, $password, $pswdlen);
        $errors = $crypt->errors;
        $_SESSION['encrypt_result'] = $encrypt_result;
    } // if
    if (isset($_POST['decrypt'])) {
        if (empty($encrypt_result) AND !empty($password)) {
            // decrypt an already encrypted password
            $decrypt_result = $crypt->decrypt($key, $password);
            $encrypt_result = $password;
            $password       = $decrypt_result;
        } else {
            $decrypt_result = $crypt->decrypt($key, $encrypt_result);
        } // if
        $errors = $crypt->errors;
        $_SESSION['decrypt_result'] = $decrypt_result;
    } // if
} // if
?>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
<table>
<tr><td>Enter Key:</td><td><input type="text" name="key" size="40" value="<?php echo $key ?>"></td></tr>
<tr><td>Enter Password:</td><td><input type="text" name="password" size="40" value="<?php echo $password ?>"></td></tr>
<tr><td>Enter Password Length:</td><td><input type="text" name="pswdlen" size="4" value="<?php echo $pswdlen ?>"> (positive integer)</td></tr>
<tr><td>Enter Adjustment:</td><td><input type="text" name="adj" size="4" value="<?php echo $adj ?>"> (numeric)</td></tr>
<tr><td>Enter Modulus:</td><td><input type="text" name="mod" size="4" value="<?php echo $mod ?>"> (positive integer)</td></tr>
<tr><td><input type="submit" name="encrypt" value="encrypt"></td>
    <td><?php echo htmlentities((string)$encrypt_result) ?></td></tr>
<tr><td><input type="submit" name="decrypt" value="decrypt"></td>
    <td><?php echo htmlentities((string)$decrypt_result) ?></td></tr>
</table>
<p style="color:red;">
<?php
foreach ($errors as $error) {
   echo $error .'<br/>';
} // foreach
?>
</p>
</form>
</div>
</body>
</html>