本文整理汇总了PHP中Math_BigInteger::subtract方法的典型用法代码示例。如果您正苦于以下问题:PHP Math_BigInteger::subtract方法的具体用法?PHP Math_BigInteger::subtract怎么用?PHP Math_BigInteger::subtract使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Math_BigInteger
的用法示例。
在下文中一共展示了Math_BigInteger::subtract方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: randomNumber
/**
* Generate a number that lies between 0 and q-1.
*
* @param Math_BigInteger $q Max number.
*
* @return Math_BigInteger Generated number.
*/
public static function randomNumber($q)
{
$bytes = strlen($q->toBytes()) + 8;
$ints = $bytes + 1 >> 2;
$cstring = crypt_random_string($ints);
$random = '';
for ($i = 0; $i < $ints; ++$i) {
$random .= pack('N', $cstring[$i]);
}
$c = new Math_BigInteger(substr($random, 0, $bytes), 256);
$one = new Math_BigInteger(1);
$result_base = $c->divide($q->subtract($one));
return $result_base[1]->add($one);
}
示例2: getServerPublicHostKey
/**
* Returns the server public host key.
*
* Caching this the first time you connect to a server and checking the result on subsequent connections
* is recommended. Returns false if the server signature is not signed correctly with the public host key.
*
* @return Mixed
* @access public
*/
function getServerPublicHostKey()
{
if (!($this->bitmap & NET_SSH2_MASK_CONSTRUCTOR)) {
$this->bitmap |= NET_SSH2_MASK_CONSTRUCTOR;
if (!$this->_connect()) {
return false;
}
}
$signature = $this->signature;
$server_public_host_key = $this->server_public_host_key;
extract(unpack('Nlength', $this->_string_shift($server_public_host_key, 4)));
$this->_string_shift($server_public_host_key, $length);
if ($this->signature_validated) {
return $this->bitmap ? $this->signature_format . ' ' . base64_encode($this->server_public_host_key) : false;
}
$this->signature_validated = true;
switch ($this->signature_format) {
case 'ssh-dss':
$zero = new Math_BigInteger();
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$p = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$q = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$g = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$y = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
/* The value for 'dss_signature_blob' is encoded as a string containing
r, followed by s (which are 160-bit integers, without lengths or
padding, unsigned, and in network byte order). */
$temp = unpack('Nlength', $this->_string_shift($signature, 4));
if ($temp['length'] != 40) {
user_error('Invalid signature');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
$r = new Math_BigInteger($this->_string_shift($signature, 20), 256);
$s = new Math_BigInteger($this->_string_shift($signature, 20), 256);
switch (true) {
case $r->equals($zero):
case $r->compare($q) >= 0:
case $s->equals($zero):
case $s->compare($q) >= 0:
user_error('Invalid signature');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
$w = $s->modInverse($q);
$u1 = $w->multiply(new Math_BigInteger(sha1($this->exchange_hash), 16));
list(, $u1) = $u1->divide($q);
$u2 = $w->multiply($r);
list(, $u2) = $u2->divide($q);
$g = $g->modPow($u1, $p);
$y = $y->modPow($u2, $p);
$v = $g->multiply($y);
list(, $v) = $v->divide($p);
list(, $v) = $v->divide($q);
if (!$v->equals($r)) {
user_error('Bad server signature');
return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
}
break;
case 'ssh-rsa':
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$e = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$n = new Math_BigInteger($this->_string_shift($server_public_host_key, $temp['length']), -256);
$nLength = $temp['length'];
/*
$temp = unpack('Nlength', $this->_string_shift($signature, 4));
$signature = $this->_string_shift($signature, $temp['length']);
if (!class_exists('Crypt_RSA')) {
include_once 'Crypt/RSA.php';
}
$rsa = new Crypt_RSA();
$rsa->setSignatureMode(CRYPT_RSA_SIGNATURE_PKCS1);
$rsa->loadKey(array('e' => $e, 'n' => $n), CRYPT_RSA_PUBLIC_FORMAT_RAW);
if (!$rsa->verify($this->exchange_hash, $signature)) {
user_error('Bad server signature');
return $this->_disconnect(NET_SSH2_DISCONNECT_HOST_KEY_NOT_VERIFIABLE);
}
*/
$temp = unpack('Nlength', $this->_string_shift($signature, 4));
$s = new Math_BigInteger($this->_string_shift($signature, $temp['length']), 256);
// validate an RSA signature per "8.2 RSASSA-PKCS1-v1_5", "5.2.2 RSAVP1", and "9.1 EMSA-PSS" in the
// following URL:
// ftp://ftp.rsasecurity.com/pub/pkcs/pkcs-1/pkcs-1v2-1.pdf
// also, see SSHRSA.c (rsa2_verifysig) in PuTTy's source.
if ($s->compare(new Math_BigInteger()) < 0 || $s->compare($n->subtract(new Math_BigInteger(1))) > 0) {
user_error('Invalid signature');
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
//.........这里部分代码省略.........
示例3: while
$got = $m->getMulti($keys, $null);
while (!$got) {
usleep(100000);
$got = $m->getMulti($keys, $null);
}
$result1 = $got["blockinfo"];
$result = $got["eth_getWork_response"];
$key_Key = $shareCheckerKey;
$CheckShareData = $got[$key_Key];
//$result1 = $m->get('blockinfo');
$block_info_last = json_decode($result1, true);
$last_block_result = $block_info_last['result'];
$last_block_diff = $last_block_result['difficulty'];
$last_block_timestamp = new Math_BigInteger(hexdec($last_block_result['timestamp']));
$current_time = new Math_BigInteger(time());
$lastBlockTime_BI = $current_time->subtract($last_block_timestamp);
$lastBlockTimeHex = $lastBlockTime_BI->toHex();
$lastBlockTime = hexdec($lastBlockTimeHex);
$block_number = $last_block_result['number'];
$current .= "\n\nLAST BLOCK Diff:" . $last_block_diff . ' / ' . hexdec($last_block_diff);
$current .= "\nLAST BLOCK Time:" . $last_block_timestamp;
$current .= "\nLAST BLOCK Time:" . $lastBlockTime . 's';
//Miner Get Work Memcached -> run process_work
//$result = $m->get('eth_getWork_response');
$current .= "\n\nRespons1:" . $result;
$TargetBlock = json_decode($result, true);
$targetBlockResult = $TargetBlock['result'];
$diffTarget = $targetBlockResult[2];
$last_block_diff = new Math_BigInteger(hexdec($last_block_diff));
if ($hash_rate) {
$shareCheckerKey = 'submiting_' . $payout_addr . '_' . $hash_rate;
示例4: die
$existResult = mysqli_query($mysqli, $existQuery) or die("Database Error");
while ($row = mysqli_fetch_row($existResult)) {
$payer_adr = $row[0];
echo "\n-------------------------------------------";
echo "\n" . $payer_adr;
echo "\nBalance: " . sprintf('%f', $row[1]) . " wei";
echo "\nBalance: " . sprintf('%f', $row[1] / $ether_wei) . " ether";
$current .= "\n-------------------------------------------";
$current .= "\n" . $payer_adr;
$current .= "\nBalance: " . sprintf('%f', $row[1]) . " wei";
$current .= "\nBalance: " . sprintf('%f', $row[1] / $ether_wei) . " ether";
if ($row[1] / $ether_wei >= 0.5) {
$escapeDot = explode('.', sprintf('%f', $row[1]));
$balancetopay = new Math_BigInteger($escapeDot[0]);
$free2pay = new Math_BigInteger($gasprice);
$resultPayment = $balancetopay->subtract($free2pay);
$validBigHex = bcdechex($resultPayment->toString());
echo "HexReverse:\n\n" . sprintf('%f', hexdec($validBigHex));
$current .= "HexReverse:\n\n" . sprintf('%f', hexdec($validBigHex));
$sendValue = '0x' . $validBigHex;
$transactionState = 0;
$transaction = array("from" => $coinbase, "to" => $payer_adr, "value" => $sendValue);
$data = array("jsonrpc" => "2.0", "method" => "eth_sendTransaction", "params" => [$transaction], "id" => 1);
$data_string = json_encode($data);
$ch1 = curl_init('http://127.0.0.1:8983');
curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch1, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($data_string)));
$result3 = curl_exec($ch1);
$block_info_last = json_decode($result3, true);
示例5: getLogootPosition
/**
* generation of a position, logoot algorithm
* @param <LogootPosition> $p is the previous logootPosition
* @param <LogootPosition> $q is the next logootPosition
* @param $N number of positions generated (should be 1 in our case)
* @param <Integer> $rep_sid session id
* @param <Integer> $rep_clock session clock
* @param $boundary Cf. method
* @return <LogootPosition List> $N logootPosition(s) between $start and $end
*/
public static function getLogootPosition(LogootPosition $p, LogootPosition $q, $nb, $rep_sid, $rep_clock = 0, $boundary = NULL)
{
wfDebugLog('p2p', $rep_clock . " - function LogootPosition::getLogootPosition " . $p . " / " . $q . " pour " . $nb . " position(s)");
$one = new Math_BigInteger("1");
// Recherche de l'interval optimal
$index = 0;
$interval = INT_MIN;
$size = max($p->size(), $q->size()) + 1;
$prefix_p = array(0 => array('cum_val' => "", 'id_str_val' => ""));
$prefix_q = array(0 => array('cum_val' => "", 'id_str_val' => ""));
while ($interval < $nb) {
$index += 1;
// recherche de prefix($p, index);
if ($index <= $p->size()) {
$str_val_p = str_pad($p->get($index - 1)->getInt(), DIGIT, "0", STR_PAD_LEFT);
} else {
$str_val_p = LPINTMINDIGIT;
}
$prefix_p[$index] = array('id_str_val' => $str_val_p, 'cum_val' => $prefix_p[$index - 1]['cum_val'] . $str_val_p);
// recherche de prefix($p, index);
if ($index <= $q->size()) {
$str_val_q = str_pad($q->get($index - 1)->getInt(), DIGIT, "0", STR_PAD_LEFT);
} else {
$str_val_q = LPINTMINDIGIT;
}
$prefix_q[$index] = array('id_str_val' => $str_val_q, 'cum_val' => $prefix_q[$index - 1]['cum_val'] . $str_val_q);
// Calcul de l'interval sur les nouveaux prefixes
$BI_p = new Math_BigInteger($prefix_p[$index]['cum_val']);
$BI_q = new Math_BigInteger($prefix_q[$index]['cum_val']);
$BIinterval = $BI_q->subtract($BI_p)->subtract($one);
$interval = (int) $BIinterval->__toString();
/*wfDebugLog('p2p', $index
. " : Prefix_p " . (string) $prefix_p[$index]['cum_val'] . '/'
. $prefix_p[$index]['id_str_val']
. " Prefix_q " . (string) $prefix_q[$index]['cum_val'] . '/'
. $prefix_q[$index]['id_str_val']
. " Interval " . $interval);*/
}
// Construction des identifiants
//wfDebugLog('p2p', "N " . $nb . " Interval " . $interval . " index " . $index);
$step = (int) $interval / $nb;
if (isset($boundary)) {
$step = $boundary < $step ? $boundary : $step;
}
$BI_step = new Math_BigInteger($step);
$BI_r = new Math_BigInteger($prefix_p[$index]['cum_val']);
$list = array();
//wfDebugLog('p2p', "Step :" . $step . "/" . $boundary);
for ($j = 1; $j <= $nb; $j++) {
$BI_nr = $BI_r->add(new Math_BigInteger(rand(1, $step)));
//wfDebugLog('p2p', "nr " . (string) $BI_nr . " r " . (string) $BI_r);
// pour découper une chaine en paquets de N car : str_split($cdc, $N) !
$str_nr0 = (string) $BI_nr;
// on fait en sorte que le découpage soit un multiple de DIGIT pour ne pas créer de décallage
if (strlen($str_nr0) % ($index * DIGIT) != 0) {
$str_nr = str_pad($str_nr0, strlen($str_nr0) + ($index * DIGIT - strlen($str_nr0) % ($index * DIGIT)), "0", STR_PAD_LEFT);
} else {
$str_nr = $str_nr0;
}
//wfDebugLog('p2p', "str_nr0 " . $str_nr0 . " str_nr " . $str_nr);
$tab_nr = str_split($str_nr, DIGIT);
$pos = new LogootPosition();
for ($i = 1; $i <= count($tab_nr); $i++) {
$d = $tab_nr[$i - 1];
//wfDebugLog('p2p', "$i#" . $prefix_p[$i]['id_str_val'] . "#" . $prefix_q[$i]['id_str_val'] . "#" . $d);
if ($i <= $p->size() && $prefix_p[$i]['id_str_val'] == $d) {
$id = new LogootId($d, $p->get($i - 1)->getSessionId(), $p->get($i - 1)->getClock());
} elseif ($i <= $q->size() && $prefix_q[$i]['id_str_val'] == $d) {
$id = new LogootId($d, $q->get($i - 1)->getSessionId(), $q->get($i - 1)->getClock());
} else {
$id = new LogootId($d, $rep_sid, $rep_clock);
}
$pos->addId($id);
}
wfDebugLog('p2p', "===========>" . $pos->__toString());
$list[] = $pos;
$BI_r = $BI_r->add($BI_step);
}
return $list;
}
示例6: array
curl_setopt($ch1, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch1, CURLOPT_POSTFIELDS, $data_string);
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch1, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($data_string)));
$result3 = curl_exec($ch1);
$block_info_last = json_decode($result3, true);
$escapeDot = explode('.', sprintf('%f', hexdec($block_info_last['result'])));
$balanceaddr = new Math_BigInteger($escapeDot[0]);
} else {
$block_info_last = json_decode($result3, true);
$balanceaddr = new Math_BigInteger($block_info_last['result']);
}
$block_coins_size = new Math_BigInteger('0');
$balanceToSave = new Math_BigInteger('0');
if (!$real_balance_prev == 0) {
$block_coins_size = $balanceaddr->subtract($real_balance_prev);
} else {
$block_coins_size = $balanceaddr;
}
if ($block_coins_size < 0) {
$block_coins_size = new Math_BigInteger('0');
}
if (strpos($block_coins_size->toString(), '-') !== false) {
$block_coins_size = new Math_BigInteger('0');
}
if (!$block_coins_size) {
die('Invalid block coins size');
}
if ($block_coins_size <= 0) {
die('Invalid block coins size = 0');
}
示例7: array
//.........这里部分代码省略.........
// through diffie-hellman key exchange a symmetric key is obtained
for ($i = 0; $i < count($kex_algorithms) && !in_array($kex_algorithms[$i], $this->kex_algorithms); $i++) {
}
if ($i == count($kex_algorithms)) {
user_error('No compatible key exchange algorithms found', E_USER_NOTICE);
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
switch ($kex_algorithms[$i]) {
// see http://tools.ietf.org/html/rfc2409#section-6.2 and
// http://tools.ietf.org/html/rfc2412, appendex E
case 'diffie-hellman-group1-sha1':
$p = pack('H256', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF');
$keyLength = $keyLength < 160 ? $keyLength : 160;
$hash = 'sha1';
break;
// see http://tools.ietf.org/html/rfc3526#section-3
// see http://tools.ietf.org/html/rfc3526#section-3
case 'diffie-hellman-group14-sha1':
$p = pack('H512', 'FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74' . '020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F1437' . '4FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7ED' . 'EE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF05' . '98DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB' . '9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3B' . 'E39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF695581718' . '3995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF');
$keyLength = $keyLength < 160 ? $keyLength : 160;
$hash = 'sha1';
}
$p = new Math_BigInteger($p, 256);
//$q = $p->bitwise_rightShift(1);
/* To increase the speed of the key exchange, both client and server may
reduce the size of their private exponents. It should be at least
twice as long as the key material that is generated from the shared
secret. For more details, see the paper by van Oorschot and Wiener
[VAN-OORSCHOT].
-- http://tools.ietf.org/html/rfc4419#section-6.2 */
$q = new Math_BigInteger(1);
$q = $q->bitwise_leftShift(2 * $keyLength);
$q = $q->subtract(new Math_BigInteger(1));
$g = new Math_BigInteger(2);
$x = new Math_BigInteger();
$x->setRandomGenerator('crypt_random');
$x = $x->random(new Math_BigInteger(1), $q);
$e = $g->modPow($x, $p);
$eBytes = $e->toBytes(true);
$data = pack('CNa*', NET_SSH2_MSG_KEXDH_INIT, strlen($eBytes), $eBytes);
if (!$this->_send_binary_packet($data)) {
user_error('Connection closed by server', E_USER_NOTICE);
return false;
}
$response = $this->_get_binary_packet();
if ($response === false) {
user_error('Connection closed by server', E_USER_NOTICE);
return false;
}
extract(unpack('Ctype', $this->_string_shift($response, 1)));
if ($type != NET_SSH2_MSG_KEXDH_REPLY) {
user_error('Expected SSH_MSG_KEXDH_REPLY', E_USER_NOTICE);
return false;
}
$temp = unpack('Nlength', $this->_string_shift($response, 4));
$this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']);
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$public_key_format = $this->_string_shift($server_public_host_key, $temp['length']);
$temp = unpack('Nlength', $this->_string_shift($response, 4));
$fBytes = $this->_string_shift($response, $temp['length']);
$f = new Math_BigInteger($fBytes, -256);
$temp = unpack('Nlength', $this->_string_shift($response, 4));
$signature = $this->_string_shift($response, $temp['length']);
$temp = unpack('Nlength', $this->_string_shift($signature, 4));
$signature_format = $this->_string_shift($signature, $temp['length']);
示例8: array
//.........这里部分代码省略.........
// through diffie-hellman key exchange a symmetric key is obtained
for ($i = 0; $i < count($kex_algorithms) && !in_array($kex_algorithms[$i], $this->kex_algorithms); $i++) {
}
if ($i == count($kex_algorithms)) {
user_error('No compatible key exchange algorithms found', E_USER_NOTICE);
return $this->_disconnect(NET_SSH2_DISCONNECT_KEY_EXCHANGE_FAILED);
}
switch ($kex_algorithms[$i]) {
// see http://tools.ietf.org/html/rfc2409#section-6.2 and
// http://tools.ietf.org/html/rfc2412, appendex E
case 'diffie-hellman-group1-sha1':
$p = pack('N32', 4294967295.0, 4294967295.0, 3373259426.0, 0x2168c234, 3301335691.0, 2161908945.0, 0x29024e08, 2322058356.0, 0x20bbea6, 0x3b139b22, 0x514a0879, 0.0, 0.0, 3443147547.0, 0x302b0a6d, 4066317367.0, 0x4fe1356d, 0x6d51c245, 0.0, 0x625e7ec6, 0.0, 0.0, 0xbff5cb6, 0.0, 0.0, 0x5a899fa5, 0.0, 0x7c4b1fe6, 0x49286651, 0.0, 4294967295.0, 4294967295.0);
$keyLength = $keyLength < 160 ? $keyLength : 160;
$hash = 'sha1';
break;
// see http://tools.ietf.org/html/rfc3526#section-3
// see http://tools.ietf.org/html/rfc3526#section-3
case 'diffie-hellman-group14-sha1':
$p = pack('N64', 4294967295.0, 4294967295.0, 3373259426.0, 0x2168c234, 3301335691.0, 2161908945.0, 0x29024e08, 2322058356.0, 0x20bbea6, 0x3b139b22, 0x514a0879, 0.0, 0.0, 3443147547.0, 0x302b0a6d, 4066317367.0, 0x4fe1356d, 0x6d51c245, 0.0, 0x625e7ec6, 0.0, 0.0, 0xbff5cb6, 0.0, 0.0, 0x5a899fa5, 0.0, 0x7c4b1fe6, 0x49286651, 0.0, 3254811832.0, 2707668741.0, 2564442166.0, 0x1c55d39a, 0x69163fa8, 4247048031.0, 2204458275.0, 3701714326.0, 0x1c62f356, 0x208552bb, 0.0, 0x7096966d, 0x670c354e, 0x4abc9804, 4050938888.0, 3390579068.0, 0x32905e46, 0x2e36ce3b, 0.0, 0x180e8603, 2603058082.0, 0.0, 3049610736.0, 0x6f4c52c9, 0.0, 2505578264.0, 0x3995497c, 0.0, 0x15d22618, 2566522128.0, 0x15728e5a, 2326571624.0, 4294967295.0, 4294967295.0);
$keyLength = $keyLength < 160 ? $keyLength : 160;
$hash = 'sha1';
}
$p = new Math_BigInteger($p, 256);
//$q = $p->bitwise_rightShift(1);
/* To increase the speed of the key exchange, both client and server may
reduce the size of their private exponents. It should be at least
twice as long as the key material that is generated from the shared
secret. For more details, see the paper by van Oorschot and Wiener
[VAN-OORSCHOT].
-- http://tools.ietf.org/html/rfc4419#section-6.2 */
$q = new Math_BigInteger(1);
$q = $q->bitwise_leftShift(2 * $keyLength);
$q = $q->subtract(new Math_BigInteger(1));
$g = new Math_BigInteger(2);
$x = new Math_BigInteger();
$x = $x->random(new Math_BigInteger(1), $q, 'crypt_random');
$e = $g->modPow($x, $p);
$eBytes = $e->toBytes(true);
$data = pack('CNa*', NET_SSH2_MSG_KEXDH_INIT, strlen($eBytes), $eBytes);
if (!$this->_send_binary_packet($data)) {
user_error('Connection closed by server', E_USER_NOTICE);
return false;
}
$response = $this->_get_binary_packet();
if ($response === false) {
user_error('Connection closed by server', E_USER_NOTICE);
return false;
}
list(, $type) = unpack('C', $this->_string_shift($response, 1));
if ($type != NET_SSH2_MSG_KEXDH_REPLY) {
user_error('Expected SSH_MSG_KEXDH_REPLY', E_USER_NOTICE);
return false;
}
$temp = unpack('Nlength', $this->_string_shift($response, 4));
$this->server_public_host_key = $server_public_host_key = $this->_string_shift($response, $temp['length']);
$temp = unpack('Nlength', $this->_string_shift($server_public_host_key, 4));
$public_key_format = $this->_string_shift($server_public_host_key, $temp['length']);
$temp = unpack('Nlength', $this->_string_shift($response, 4));
$fBytes = $this->_string_shift($response, $temp['length']);
$f = new Math_BigInteger($fBytes, -256);
$temp = unpack('Nlength', $this->_string_shift($response, 4));
$signature = $this->_string_shift($response, $temp['length']);
$temp = unpack('Nlength', $this->_string_shift($signature, 4));
$signature_format = $this->_string_shift($signature, $temp['length']);
$key = $f->modPow($x, $p);
示例9: getLogootPosition
/**
* generation of a position, logoot algorithm
* @param <Object> $start is the previous logootPosition
* @param <Object> $end is the next logootPosition
* @param <Integer> $N number of positions generated (should be 1 in our case)
* @param <Object> $sid session id
* @return <Object> a logootPosition between $start and $end
*/
private function getLogootPosition($start, $end, $N, $sid)
{
$result = array();
$Id_Max = LogootId::IdMax();
$Id_Min = LogootId::IdMin();
$i = 0;
$pos = array();
$currentPosition = new LogootPosition($pos);
// voir constructeur
$inf = new Math_BigInteger("0");
$sup = new Math_BigInteger("0");
$isInf = false;
while (true) {
$inf = new Math_BigInteger($start->get($i)->getInt());
if ($isInf == true) {
$sup = new Math_BigInteger(INT_MAX);
} else {
$sup = new Math_BigInteger($end->get($i)->getInt());
}
$tmpVal = $sup->subtract($inf);
$tmpVal1 = $tmpVal->subtract(new Math_BigInteger("1"));
if ($tmpVal1->compare($N) > 0) {
// inf = start.get(i).getInteger();
// sup = end.get(i).getInteger();
break;
}
$currentPosition->add($start->get($i));
$i++;
if ($i == $start->size()) {
$start->add($Id_Min);
}
if ($i == $end->size()) {
$end->add($Id_Max);
}
if ($inf->compare($sup) < 0) {
$isInf = true;
}
}
$binf = $inf->add(new Math_BigInteger("1"));
$bsup = $sup->subtract(new Math_BigInteger("1"));
$slot = $bsup->subtract($binf);
$stepTmp = $slot->divide($N);
$step = $stepTmp[0];
// quotient, [1] is the remainder
$old = clone $currentPosition;
if ($step->compare(new Math_BigInteger(INT_MAX)) > 0) {
$lstep = new Math_BigInteger(INT_MAX);
$r = clone $currentPosition;
$tmpVal2 = $inf->random($inf, $sup);
$r->set($i, $tmpVal2->toString(), $sid);
$result[] = $r;
// result est une arraylist<Position>
return $result;
} else {
$lstep = $step;
}
if ($lstep->compare(new Math_BigInteger("0")) == 0) {
$lstep = new Math_BigInteger("1");
}
$p = clone $currentPosition;
$p->set($i, $inf->toString(), $sid);
$tmpVal3 = (int) $N->toString();
for ($j = 0; $j < $tmpVal3; $j++) {
$r = clone $p;
if (!($lstep->compare(new Math_BigInteger("1")) == 0)) {
$tmpVal4 = new Math_BigInteger($p->get($i)->getInt());
$tmpVal5 = $tmpVal4->add($lstep);
// max
$tmpVal6 = new Math_BigInteger($p->get($i)->getInt());
// min
$add = $tmpVal6->random($tmpVal6, $tmpVal5);
$r->set($i, $add->toString(), $sid);
} else {
$r->add1($i, new Math_BigInteger("1"), $sid);
}
$result[] = clone $r;
// voir
$old = clone $r;
$tmpVal7 = new Math_BigInteger($p->get($i)->getInt());
$tmpVal7 = $tmpVal7->add($lstep);
$p->set($i, $tmpVal7->toString(), $sid);
}
return $result;
}
示例10: _mod2
/**
* Modulos for Powers of Two
*
* Calculates $x%$n, where $n = 2**$e, for some $e. Since this is basically the same as doing $x & ($n-1),
* we'll just use this function as a wrapper for doing that.
*
* @see _slidingWindow()
* @access private
* @param Math_BigInteger
* @return Math_BigInteger
*/
private function _mod2(Math_BigInteger $n)
{
$temp = new Math_BigInteger();
$temp->value = array(1);
return $this->bitwise_and($n->subtract($temp));
}
示例11: get_entry_data
function get_entry_data($db)
{
$q = "SELECT session.*, treatment.opt as opt, `pre-pop` as pre_pop, warning_type FROM session, treatment WHERE session.treatment_id=treatment.id";
try {
$results = $db->query($q);
$data = $results->fetchAll(PDO::FETCH_ASSOC);
} catch (PDOException $e) {
print $e->getMessage();
}
$headers = array();
$headersSet = false;
//a list of fields that you don't want in the data file
$ignore = array('sid', 'mturk_id', 'pre_email', 'pre_mturk_id');
$q = "SELECT * FROM page_event WHERE event_name='load' OR page_name='purchase.php' OR subject_name='secondStage' ORDER BY session_id ASC, ts_ms ASC";
$r = $db->query($q);
$all_event_data = $r->fetchAll(PDO::FETCH_ASSOC);
for ($i = 0; $i < count($data); $i++) {
$row2 = array();
$row3 = array();
//All of the manipulations below process the data and create new field values
//and new columns. Any key in the $data array will become a column heading
$data[$i]['finished'] = $data[$i]['post_info'] != '' ? 'true' : 'false';
//possible options for email sent are 'true','false', or 'true|SAME', etc.
$data[$i]['email_sent'] = explode('|', $data[$i]['email_sent']);
//this could also be named 'is_cheater'
$data[$i]['email_sent_revised_matches'] = 'undef';
if (count($data[$i]['email_sent']) > 1) {
$data[$i]['email_sent_revised_matches'] = $data[$i]['email_sent'][1];
}
//does the email from the checkout page match the email from the survey?
$data[$i]['email_matches_pre_post'] = 'undef';
if ($data[$i]['post_email'] != 'undef' && $data[$i]['post_email'] != '') {
if ($data[$i]['pre_email'] == $data[$i]['post_email']) {
$data[$i]['email_matches_pre_post'] = 'true';
} else {
$data[$i]['email_matches_pre_post'] = 'false';
}
}
//just the 'true' or 'false' part
$data[$i]['email_sent'] = $data[$i]['email_sent'][0];
//Calculate their bonus (need to change if payment amount changes)
$data[$i]['bonus'] = 'NO FINISH';
if ($data[$i]['finished'] == 'true') {
$data[$i]['bonus'] = 0.51;
if ($data[$i]['email_sent'] == 'true') {
$data[$i]['bonus'] = 0.01;
}
}
//figure out the timing of a participant's actions (never quiet figured this out)
$data[$i]['purchase_page_mins'] = 'NEVER REACHED';
$data[$i]['total_time_mins'] = 'NEVER REACHED';
$last_page = 'undef';
$load_purchase_page = 'ERROR';
$close_purchase_page = 'ERROR';
$load_first_page = 'ERROR';
$close_last_page = 'ERROR';
$sid = intval($data[$i]['id']);
for ($j = 0; $j < count($all_event_data); $j++) {
$e_sid = intval($all_event_data[$j]['session_id']);
if ($e_sid < $sid) {
continue;
} elseif ($e_sid > $sid) {
$close_last_page = new Math_BigInteger($all_event_data[$j - 1]['ts_ms']);
$last_page = $all_event_data[$j - 1];
break;
}
//only if we are in the right session
$e = $all_event_data[$j];
//this is the first event for this session
if ($j == 0 || $j > 0 && intval($all_event_data[$j - 1]['session_id']) < $sid) {
$load_first_page = new Math_BigInteger($e['ts_ms']);
$close_last_page = new Math_BigInteger($e['ts_ms']);
}
if ($all_event_data[$j]['page_name'] == 'purchase.php') {
$event_name = $e['event_name'];
$subject_name = $e['subject_name'];
if ($event_name == 'load') {
$load_purchase_page = new Math_BigInteger($e['ts_ms']);
} elseif ($subject_name != 'page') {
$close_purchase_page = new Math_BigInteger($e['ts_ms']);
//break;
}
}
if ($close_purchase_page != 'ERROR') {
$data[$i]['purchase_page_mins'] = $close_purchase_page->subtract($load_purchase_page)->toString();
$data[$i]['purchase_page_mins'] = round(intval($data[$i]['purchase_page_mins']) / 1000 / 60, 2);
} else {
$data[$i]['purchase_page_mins'] = 'DROPPED';
}
$data[$i]['total_time_mins'] = $close_last_page->subtract($load_first_page)->toString();
$data[$i]['total_time_mins'] = round(intval($data[$i]['total_time_mins']) / 1000 / 60, 2);
}
////////////
//last_page is the last page that a participant saw in the experiment
//the $last_page var comes from the timing loop above, which works the right way
//(even if timing doesn't work right)
$data[$i]['last_page'] = 'undef';
if ($data[$i]['finished'] == 'true') {
$data[$i]['last_page'] = 'FINISHED';
} else {
//.........这里部分代码省略.........
示例12: _win64ToUnix
/**
*
* @param Math_BigInteger $bci
* @return string
*/
protected static function _win64ToUnix($bci)
{
// Unix epoch as a Windows file date-time value
$t = $bci->subtract(new Math_BigInteger('116444735995904000'));
// Cast to Unix epoch
list($quotient, $remainder) = $t->divide(new Math_BigInteger('10000000'));
return (string) $quotient;
}