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.
77 lines
2.2 KiB
77 lines
2.2 KiB
<?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; |
|
} |
|
}
|
|
|