You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
78 lines
2.2 KiB
78 lines
2.2 KiB
2 years ago
|
<?php
|
||
|
|
||
|
/**
|
||
|
* Implementation of VerificationIF for hashing a signable object
|
||
|
*
|
||
|
* Copyright (C) 2013 OEMR 501c3 www.oemr.org
|
||
|
*
|
||
|
* LICENSE: This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; either version 3
|
||
|
* of the License, or (at your option) any later version.
|
||
|
* This program 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 General Public License for more details.
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>;.
|
||
|
*
|
||
|
* @package OpenEMR
|
||
|
* @author Ken Chapple <ken@mi-squared.com>
|
||
|
* @author Medical Information Integration, LLC
|
||
|
* @link http://www.open-emr.org
|
||
|
**/
|
||
|
|
||
|
namespace ESign;
|
||
|
|
||
|
require_once $GLOBALS['srcdir'] . '/ESign/VerificationIF.php';
|
||
|
|
||
|
class Utils_Verification implements VerificationIF
|
||
|
{
|
||
|
public function hash($data, $algo = 'sha3-512')
|
||
|
{
|
||
|
$string = "";
|
||
|
if (is_array($data)) {
|
||
|
$string = $this->stringifyArray($data);
|
||
|
} else {
|
||
|
$string = $data;
|
||
|
}
|
||
|
|
||
|
if ($algo == 'sha1') {
|
||
|
// support backward compatibility of prior hashes in sha1
|
||
|
$hash = sha1($string);
|
||
|
} else {
|
||
|
$hash = hash('sha3-512', $string);
|
||
|
}
|
||
|
return $hash;
|
||
|
}
|
||
|
|
||
|
protected function stringifyArray(array $arr)
|
||
|
{
|
||
|
$string = "";
|
||
|
foreach ($arr as $part) {
|
||
|
if (is_array($part)) {
|
||
|
$string .= $this->stringifyArray($part);
|
||
|
} else {
|
||
|
$string .= $part;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $string;
|
||
|
}
|
||
|
|
||
|
public function verify($data, $hash)
|
||
|
{
|
||
|
if (strlen($hash) < 50) {
|
||
|
// support backward compatibility of prior hashes in sha1
|
||
|
$currentHash = $this->hash($data, 'sha1');
|
||
|
} else {
|
||
|
$currentHash = $this->hash($data);
|
||
|
}
|
||
|
if (hash_equals($currentHash, $hash)) {
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return false;
|
||
|
}
|
||
|
}
|