<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico">


<link rel="stylesheet" href="../styles.css" type="text/css">
        <TITLE>Display-TAN OCRA</TITLE>
</HEAD>

    <body onload="refresh()" class="c12">

<?php require '../weblog.php';weblog("ocra");?>
<?php 
include("../language.php");?>
<?php 
include("../header.php");?>

<div class="bodybody">


<?php 



echo "
<h2>OCRA Interface Server/Smartphone/Card</h2>
"
;

echo 
"<p>This page is a short - but nevertheless complete - description of the Display-TAN interface between bank server/smartphone and card. ";

echo 
"<p><div style='border:1px solid;margin:10px;background-color:#fcf3cf;'><div style='margin:10px'>The spec/interface of <a href='http://www.displaytan.com/ocraV2/'>Display-TAN Version 2</a> including encryption, login, respresentation of capital letters, etc. is available. </div></div>";


echo 
"<h4>General Protocol</h4>";

echo 
"<p>The general protocol is the following. ";

echo 
"<p><table cellspacing='15' style='margin:20px;background-color:#E8E8E8;'>";
echo 
"<tr><td nowrap>0)<td>Both smartphone and card are sending BLE signals that they are ready.";
echo 
"<tr><td nowrap>1)<td>Then the bank server sends via smartphone to the card the query &lt;C&gt;~&lt;A&gt;~&lt;N&gt;";
echo 
"<tr><td nowrap><td>The card will show the destination account number &lt;C&gt; and the amount &lt;A&gt;, the nonce &lt;N&gt; is not shown. In case the bank customer confirms &lt;C&gt; and &lt;A&gt;
the card will generate the 8-digit TAN"
;
echo 
"<tr><td nowrap>2)<td>and will send it to the smartphone as an 8-digit string.";
echo 
"</tr></table>";

echo 
"<p>Here is an example:";

echo 
"<p><table cellspacing='15' style='margin:20px;background-color:#E8E8E8;'>";
echo 
"<tr><td nowrap>1)<td>smartphone to card (will be encrypted): <td>83507112&nbsp;&nbsp;~320,00~1399458665_G6HNVF";
echo 
"<tr><td nowrap>2)<td>card to smartphone: <td>90065298";
echo 
"</tr></table>";

echo 
"<p>The syntax of &lt;C&gt;, &lt;A&gt; and &lt;N&gt; is decribed below. But first, here is an online test interface.";


echo 
"
<a name='testinterface'>
<h4>Test Interface</h4></a>
"
;



if (isset(
$_REQUEST['test'])) 
$Q $_REQUEST['test'];
else 
$Q "83507112  ~320,00~1399458665_G6HNVF";



echo 
"<p>Data string transmitted via BLE from smartphone to display card (paste a valid query): 
 <p><form name='username' action='./#testinterface' method='GET'>
 <p><input type='text' size='80' name='test' value='
$Q'>
 <p><input type='submit' name='xml' value='Compute TAN' style='margin:10px;background-color:lightgreen;'>  
</form><br><br>"
;

   
define('C_PATTERN','/^[0-9 ]{10}$/'); // challenge
   
define('A_PATTERN','/^[0-9]{0,8}(\,|\.)[0-9]{2}$/'); // amount
   
define('N_PATTERN','/^[ -}]{0,20}$/'); // nonce


   
$problem false;
   
$teile explode("~"$Q);

   if (
count($teile) != 3) {$problem true; echo("<p><b>syntax error: not exactly 2 tildes</b>");};
   if (!
preg_match(C_PATTERN$teile[0])) {$problem true; echo("<p><b>syntax error with ACCOUNT</b>");};
   if (!
preg_match(A_PATTERN$teile[1])) {$problem true; echo("<p><b>syntax error with AMOUNT</b>");};
   if (!
preg_match(N_PATTERN$teile[2])) {$problem true; echo("<p><b>syntax error with NONCE</b>");};


if (!
$problem) {

echo 
"<p>OCRA computation steps:
<br><table cellspacing='15' style='margin:20px;background-color:#E8E8E8;'>"
;

echo 
"<tr><td>1)<td>q<td>data string:<td>"str_replace(" ""&nbsp;"$Q);

    
$decoded $Q;


$q sha1($decoded);


echo 
"</tr><tr><td>4)<td>Q<td>SHA1(q):<td>0x"$q;

$m =  "4f4352412d313a484f54502d534841312d383a5148343000" $q .
"000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000";

//echo "</tr><tr><td>4)<td>DataInput<td>Input for hmac:<td>". "OCRA-1:HOTP-SHA1-8:QH40 + 0x00 + Q + 109 times 0x00";


$s "12345678901234567890";



echo 
"</tr><tr><td>5)<td>s<td>seed:<td>"$s;


$h hash_hmac('sha1'pack("H*",$m), $sfalse);


//echo "</tr><tr><td>6)<td>h<td>HMAC_SHA1(s,DataInput):<td>0x". $h;


$T oath_truncate($h,8);

//echo "</tr><tr><td>7)<td>OCRA/TAN<td>Truncate(h):<td>". $T;

echo "</tr><tr><td>6)<td>TAN<td>OCRA-1:HOTP-SHA1-8:QH40 (s,Q) <td>"$T;


echo 
"</tr></table>";

}

   function 
oath_truncate($hash$length)
    {
        
// Convert to dec
        
foreach(str_split($hash,2) as $hex)
        {
            
$hmac_result[]=hexdec($hex);
        }
    
        
// Find offset
        
$offset $hmac_result[count($hmac_result) - 1] & 0xf;
    
        
$v strval(
            ((
$hmac_result[$offset+0] & 0x7f) << 24 ) |
            ((
$hmac_result[$offset+1] & 0xff) << 16 ) |
            ((
$hmac_result[$offset+2] & 0xff) << ) |
            (
$hmac_result[$offset+3] & 0xff)
        );
        
        
$v substr($vstrlen($v) - $length);
        return 
$v;
    }






echo 
"<h4>Substrings.</h4> ";
echo 
"<p>The following 3 substrings within the query  are mandatory, in that order.  

<br><table cellspacing='15' style='margin:20px;background-color:#E8E8E8;'>"
;

echo 
"<tr><th>Substring<th>Description<th>Syntax<th>RegEx Expr.<th>Example";

echo 
"<tr><td>&lt;C&gt;<td>destination account number<td>Exactly 10 digits or spaces<td nowrap>[0-9 ]{10}<td>935&nbsp;203&nbsp;21";

echo 
"</tr><tr><td>&lt;A&gt;<td>money transfer amount<td>digits, in . or , notation, 2 fractional digits, displayed right-aligned<td  nowrap>[0-9]{0,8}(\,|\.)[0-9]{2}<td>50,00";

echo 
"</tr><tr><td>&lt;N&gt;<td>nonce (security protection)<td>up to 20 printable ASCII symbols besides symbol ~. Not displayed.<td nowrap>[ -}]{0,20}<td>HdaG-353330";

echo 
"</tr></table>";



echo 
"<h4>Links</h4>";

echo 
"<ul>
<li><a href='http://tools.ietf.org/html/rfc6287'>OCRA RFC 6287 </a>
<li><a href='https://openauthentication.org/wp-content/uploads/2015/09/OCRAStandaloneClientProfilev1.0.pdf'>OCRA supplement pdf, by openauthentication.org </a>
<li><a href='http://display-tan.com'>Display-TAN main page</a>
<li><a href='./showPHP.php'>PHP code of this page, in order to see the steps of the OCRA computation process</a>
</ul>
"
;



echo 
"</div>";
              
include(
"../footer.php");
?>


</body>
</html>