1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
--TEST--
radius_salt_encrypt_attr()
--INI--
display_errors=1
error_reporting=22527
--SKIPIF--
<?php
if (!extension_loaded('radius')) echo 'SKIP: radius extension required';
if (version_compare(PHP_VERSION, '5.0.0', '<')) echo 'SKIP: PHP 5 required';
?>
--FILE--
<?php
function salt_encrypt($value, $res, $salt) {
if ($value == '') {
return '';
}
$block = md5(radius_server_secret($res).radius_request_authenticator($res).substr($salt, 0, 2), true);
$output = '';
for ($i = 0; $i < 16; $i++) {
if (strlen($value)) {
$output .= chr(ord($value[0]) ^ ord($block[$i]));
$value = substr($value, 1);
} else {
$output .= chr(0 ^ ord($block[$i]));
}
}
while (strlen($value)) {
$block = md5(radius_server_secret($res).substr($output, -16), true);
for ($i = 0; $i < 16; $i++) {
if (strlen($value)) {
$output .= chr(ord($value[0]) ^ ord($block[$i]));
$value = substr($value, 1);
} else {
$output .= chr(0 ^ ord($block[$i]));
}
}
}
if (strlen($output) % 16 != 0) {
$output = str_pad($output, 16 * ceil(strlen($output) / 16), "\0");
}
return substr($salt, 0, 2).chr(strlen($output)).$output;
}
$res = radius_acct_open();
var_dump(radius_salt_encrypt_attr($res, ''));
var_dump(radius_salt_encrypt_attr($res, 'foo'));
radius_add_server($res, 'localhost', 1234, 'a shared secret', 5, 3);
var_dump(radius_salt_encrypt_attr($res, ''));
$input = 'foo';
$salted = radius_salt_encrypt_attr($res, $input);
var_dump(salt_encrypt($input, $res, $salted) == $salted);
$input = implode('', range('a', 'z'));
$salted = radius_salt_encrypt_attr($res, $input);
var_dump(salt_encrypt($input, $res, $salted) == $salted);
?>
--EXPECTF--
string(0) ""
Warning: Cannot obtain the RADIUS server secret in %s on line %f
bool(false)
string(0) ""
bool(true)
bool(true)
|