<?php
 
/**
 
 * @file  yubikey.demo.php
 
 * @brief Yubikey LGPLv3 PHP class demo implementation
 
 *
 
 * @mainpage
 
 *
 
 * This is a small demo implementation of the Yubikey PHP class.
 
 *
 
 * PHP 5.3.0 or higher is supported.
 
 *
 
 * @author    Andre Liechti, SysCo systemes de communication sa, <[email protected]>
 
 * @version   4.3.2.0
 
 * @date      2015-01-04
 
 * @since     2014-11-04
 
 * @copyright (c) 2014 SysCo systemes de communication sa
 
 * @copyright GNU Lesser General Public License
 
 *
 
 *//*
 
 *
 
 * LICENCE
 
 *
 
 *   Copyright (c) 2014 SysCo systemes de communication sa
 
 *   SysCo (tm) is a trademark of SysCo systemes de communication sa
 
 *   (http://www.sysco.ch/)
 
 *   All rights reserved.
 
 *
 
 *   This file is part of the Yubikey PHP class.
 
 * 
 
 *   Yubikey PHP class is free software; you can redistribute it and/or
 
 *   modify it under the terms of the GNU Lesser General Public License as
 
 *   published by the Free Software Foundation, either version 3 of the License,
 
 *   or (at your option) any later version.
 
 * 
 
 *   Yubikey PHP class is distributed in the hope that it will be useful,
 
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
 *   GNU Lesser General Public License for more details.
 
 * 
 
 *   You should have received a copy of the GNU Lesser General Public
 
 *   License along with Yubikey PHP class.
 
 *   If not, see <http://www.gnu.org/licenses/>.
 
 *
 
 *
 
 * Change Log
 
 *
 
 *   2014-01-04 4.3.2.0 SysCo/al Some modifications for future PSR compliance (http://www.php-fig.org/)
 
 *   2014-12-26 4.3.1.3 SysCo/al Additional detailed information
 
 *   2014-12-22 4.3.1.2 SysCo/al Detailed response information
 
 *   2014-11-04 4.3.0.0 SysCo/al Initial release, version number is synchronized with the multiOTP project
 
 *********************************************************************/
 
    
 
    require_once('yubikey.class.php');
 
    
 
    $focus_field = "secret";
 
 
    $otp_to_check = trim(isset($_POST['otp'])?$_POST['otp']:'');
 
    $secret = trim(isset($_POST['secret'])?$_POST['secret']:'');
 
    $last_valid_position = trim(isset($_POST['last_valid_position'])?$_POST['last_valid_position']:'');
 
    
 
    $result = "";
 
    $detail_result = "";
 
 
    if (0 != strlen($otp_to_check)) {
 
        $yubikey = new Yubikey();
 
        $result = $yubikey->checkYubicoOtp(substr($otp_to_check,12),
 
                                           $secret,
 
                                           $last_valid_position);
 
 
        $detail_result.= "<hr />";
 
        $detail_result.= "OTP to check: <b>$otp_to_check</b>\n";
 
        $detail_result.= "<br />";
 
        $detail_result.= "Serial number: <b>".substr($otp_to_check,0,12)."</b>\n";
 
        $detail_result.= "<br />";
 
        $detail_result.= "Local check result: <b>$result</b>\n";
 
 
        if ("OK" == $result) {
 
            $last_valid_position = $yubikey->getYubicoOtpLastCount();
 
            $detail_result.= "<br />";
 
            $detail_result.= "Last valid position: <b>".$last_valid_position."</b>\n";
 
            $focus_field = "otp";
 
        }
 
        
 
        $detail_result.= "<br /><br />\n";
 
        
 
        $detail_result.= "Detailed response: <br />\n";
 
        $detail_result.= "<table>\n";
 
        
 
        foreach($yubikey->getYubikeyLastResponse() as $key=>$value) {
 
            $detail_result.= "<tr><td>$key ";
 
            $detail_result.= " :</td><td><b>$value</b></td><td><i>";
 
            switch ($key) {
 
                case "uid":
 
                    $detail_result.= "Private (secret) ID";
 
                    break;
 
                case "useCtr":
 
                    $detail_result.= "Usage counter, non-volatile counter, incremented when device is used after a power-up or reset";
 
                    break;
 
                case "tstp":
 
                    $detail_result.= "Timestamp, 8Hz, random value startup, wraps from 0xffffff to 0 (after 24 days)";
 
                    break;
 
                case "sessionCtr":
 
                    $detail_result.= "Session usage counter, set to 0 at power-up, incremented by one after each generation";
 
                    break;
 
                case "rnd":
 
                    $detail_result.= "Random number";
 
                    break;
 
                case "crc":
 
                    $detail_result.= "Checksum, 16-bit ISO13239 1st complement checksum of the first 14 bytes, result added to the end";
 
                    break;
 
            }
 
            $detail_result.= "</i></td></tr>\n";
 
        }
 
        $detail_result.= "</table>\n";
 
    }
 
 
    echo "<html>\n";
 
    echo "<head>\n";
 
    echo "<title>YubiKey local check demo</title>\n";
 
    echo "</head>\n";
 
    echo "<body onload=\"document.getElementById('".$focus_field."').focus();\">\n";
 
    echo "<form method=\"post\" action=\"yubikey.demo.php\">\n";
 
    echo "<fieldset>\n";
 
    echo "<legend>YubiKey local check demo</legend>\n";
 
    echo "<br />Secret (extracted from the YubiKey Personalization Tool traditional format log file) :<br />\n";
 
    echo "<input type=\"text\" id=\"secret\" name=\"secret\" value=\"".$secret."\" size=\"50\"><br />\n";
 
    echo "<br />Last valid position (<b>[256*useCtr + sessionCtr]</b>, type 0 if unknown) :<br />\n";
 
    echo "<input type=\"text\" id=\"last_valid_position\" name=\"last_valid_position\" value=\"".$last_valid_position."\" size=\"10\"><br />\n";
 
    echo "<br />Touch the YubiKey button:<br />\n";
 
    echo "<input type=\"text\" id=\"otp\" name=\"otp\" value=\"\" size=\"80\">\n";
 
    echo "<input type=\"submit\" value=\"Submit\">\n";
 
    echo "</fieldset>\n";
 
    echo "</form>\n";
 
    
 
    echo $detail_result;
 
 
    echo "</body>\n";
 
    echo "</html>";
 
?>
 
 |