public static function create() { $status = false; $net = new Gnet(); if (GsonCrypt::cryptoInstalled()) { if (!self::isCreated()) { GsonCrypt::keygen(config::$accountId); } $cert = GsonCrypt::getcert(); $csr = gio::readrawfile($cert); $m = Gmsg::create(Gmsg::prepare($csr, "signcert", config::$SRA)); $m = GsonCrypt::seal($m, config::$SRA); $r = $net->send($m, true); $r = GsonCrypt::unseal($r); $r = Gmsg::extract($r); if ($r['status']) { $data = $r['response']; if ($r['status'] == 1 && $data) { gio::saverawfile($data, $cert); gio::savetofile($data, GsonCrypt::getkey()); gio::output(sprintf("The account '%s' was created succesfully")); $status = true; } else { gio::output($r['response']); } } else { unlink(GsonCrypt::getkey(null, true)); gio::output($r['response']); } } else { gio::output("Kindly install the cryptographic library tools."); } $net = null; return $status; }
public static function hascert($userid = "") { if (empty($userid)) { $userid = config::$accountId; } $cert = self::getcert($userid); if (!file_exists($cert)) { $m = Gmsg::create(Gmsg::prepare("", "register", $userid)); $net = new Gnet(); $r = $net->send($m); unset($net); if (!$r) { } return false; $r = extract($r); if (!$r || !$r['status']) { return false; } if (!gio::saverawfile($r['cert'], $cert)) { return false; } } return true; }
function main($mainmsg) { gio::output(config::$walletMessage); $serv = popen("service.ecsh", 'r'); $net = new Gnet(); $inerr = 0; while (true) { if (!$inerr) { gio::output(); foreach ($mainmsg as $k => $v) { gio::output("{$k} - {$v}"); } gio::output(); $msg = "Enter your choice and press enter"; } $inerr = 0; $c = gio::input("{$msg}"); switch ($c) { case 1: $tid = gio::input("Enter the transaction Id"); $st = transaction::status($tid); if (!$st) { gio::output("Transaction reference '{$tid}' not found"); } else { $rpt['order id'] = $st['order id']; $rpt['order amount'] = $st['amount']; $rpt['from'] = $st['client']; $rpt['to'] = $st['merchant']; $rpt['transaction time'] = date(config::$timeFormat, $st['acknowledgement']['completed']); $rpt['description'] = $st['description']; $rpt['transaction reference'] = $st['acknowledgement']['id']; $rpt['response code'] = $st['acknowledgement']['status']; $rpt['response message'] = $st['acknowledgement']['message']; $rpt['ecash value tendered'] = $st['acknowledgement']['amount']; $rpt['ecash tendered'] = $st['acknowledgement']['ecashids']; gio::display($rpt); if (gio::confirm("Do you want to save the report to a file")) { $dest = gio::input("Enter full path to the file"); gio::display($rpt, $x); if (!gio::saverawfile(join("\r\n", $x), $dest)) { gio::output("Could not save the report to {$dest}"); } else { gio::output("Report successfully saved to {$dest}"); } unset($x); } } break; case 2: $maxallowed = 1000; $v = gio::input("What value of eCash do you wish to mine", "integer"); $n = gio::input("How many eCashes do you wish to mine", "integer"); $c = mine::countcoins($null); unset($null); if ($n > $maxallowed || $c + $n > $maxallowed) { $rem = $maxallowed - $c; gio::output("You can not mine above {$maxallowed} eCashes!"); gio::output("You can mine {$rem} more eCashes!"); } else { $res = mine::coins($n, $v); if ($res) { gio::output("You have successfully mined {$n} eCashes."); gio::output("Mining process took " . Tools::arrtostr($res, ", ")); } else { gio::output("Mining operation failed!"); } } break; case 3: $n = mine::countcoins($coins); gio::output("A total of {$n} eCash value is available"); if ($n && gio::confirm("Do you wish to see their Id's")) { foreach ($coins as $val => $ccs) { foreach ($ccs as $i => $coin) { gio::output("Ecash ID: {$i}"); foreach ($coin as $id => $c) { if ($id == "token") { $c = md5($c); } if ($id == "hash") { $c = sha1($c); } if ($id == "mined") { $c = date(config::$timeFormat, $c); } gio::output("{$id}=>{$c}"); } gio::output(); } } } break; case 4: $to = gio::input("Enter the wallet address"); $amt = gio::input("Enter the amount to give"); $res = account::give($to, $amt); break; case "x": $net->connect(config::$serviceAddress, intval(config::$servicePort)); $net->send("shutdown"); if ($serv) { $ret = pclose($serv); } break 2; default: $inerr = 1; $msg = "Retry"; } if (!$inerr) { gio::output("\n\n\n"); } } if (isset($ret) && $ret != 0) { gio::output("An error occured while exiting..."); } gio::output(config::$exitMessage); sleep(3); }
public static function certexchange($addr) { $d = Tools::address($addr); if (file_exists(GsonCrypt::getcert($d['bank']))) { return true; } $c = GsonCrypt::getcert(null, true); $m = Gmsg::create(Gmsg::prepare($c, 'exchangecert', $d['bank'])); $net = new Gnet(); $r = $net->connect($d['address'], intval($d['port'])); if (!$r) { return false; } $r = $net->send($m); if (!$r) { return false; } $r = Gmsg::extract($r); if (!$r) { return false; } if ($r['status']) { $resp = gio::saverawfile($r['cert'], GsonCrypt::getcert($d['bank'])); } return isset($resp) ? $resp : false; }
private static function register() { if (self::isRegistered()) { return true; } $ba = Tools::address(gio::input("Enter the bank's address")); if (!$ba) { return false; } config::$bankAddress = $ba['address']; config::$bankPort = intval($ba['port']); $net = new Gnet(); $r = $net->send(Gmsg::create(Gmsg::prepare("", "register", config::$bankId))); $net = null; if (!$r) { return false; } $m = Gmsg::extract($r); if (!$m['status']) { return false; } if (gio::saverawfile($m['cert'], GsonCrypt::getcert($m['name'])) && gio::savetofile($m['cert'], GsonCrypt::getkey($m['name']))) { if (gio::savetofile($m['name'], config::$bankIdFile) && gio::savetofile(serialize(array(config::$bankAddress, config::$bankPort)), config::$walCfgFile)) { config::$bankId = $m['name']; config::$accountId = $m['account']; return true; } else { self::deregister(); return false; } } return false; }
public static function merckey($file = "") { $s = GsonCrypt::sign(md5(gio::readfile(GsonCrypt::getcert()))); if ($file) { $file .= ".txt"; $ofile = Tools::makepath(array(getenv('USERPROFILE'), "Desktop", "{$file}")); if (gio::saverawfile("MERCHANT/ACCOUNT KEY: '{$s}'", $ofile)) { gio::output("The file {$file} was sucessfully written to your desktop"); } else { gio::output("Error while writing {$file} to your desktop"); } } else { return $s; } }
public static function reports($oid = 0, $file = "") { $r = self::status($oid); if (!$r[0]) { gio::output($r[1]); } else { foreach ($r[1] as $oid => $o) { $w = array(); $w['order id'] = $oid; $w['order amount'] = $o['amount'] . " units"; $w['description'] = $o['description']; $w['time of transaction'] = date(config::$timeFormat, $o['acknowledgement']['completed']); $w['transaction reference'] = $o['acknowledgement']['id']; $w['response code'] = $o['acknowledgement']['status']; $w['response message'] = $o['acknowledgement']['message']; $w['ecash value tendered'] = $o['acknowledgement']['amount'] . " units"; $w['ecash tendered'] = $o['acknowledgement']['ecashids']; if (isset($o['acknowledgement']['rejectedecash'])) { $w['ecash rejected'] = $o['acknowledgement']['rejectedecash']; } $w['from'] = $o['client']; $w['to'] = $o['merchant']; if ($file) { gio::display($w, $wr[]); } else { gio::output(); gio::display($w); gio::output(); } } if ($file) { foreach ($wr as $k => $v) { $wr[$k] = join("\r\n", $wr[$k]); } $file .= ".txt"; $ofile = Tools::makepath(array(getenv('USERPROFILE'), "Desktop", "{$file}")); if (gio::saverawfile(join("\r\n\r\n\r\n", $wr), $ofile)) { gio::output("The file {$file} was sucessfully written to your desktop"); } else { gio::output("Error while writing {$file} to your desktop"); } } } }
public static function signcert($account, $csr, $numberofdays = 0, $serial = "") { if (empty($serial)) { $serial = time(); } $cert = null; if (empty($numberofdays) || !is_numeric($numberofdays)) { $numberofdays = 7; } gio::log("Signing certificate with serial: {$serial} valid for {$numberofdays} days ...", VERBOSE); $mycert = self::getcert(null, true); $privkey = self::getkey(null, true, true); $sscert = openssl_csr_sign($csr, $mycert, $privkey, $numberofdays, self::$keyOpts, $serial); if ($sscert) { openssl_x509_export($sscert, $cert); } if ($cert) { gio::log("... Done signing certificate with serial: {$serial}", VERBOSE); gio::saverawfile($cert, GsonCrypt::getkey($account)); } else { gio::log("... Error signing certificate with serial: {$serial} ...", E_USER_WARNING); } return $cert; }
public static function process($msg) { $status = 1; $sender = ""; $res = ""; $umsg = GsonCrypt::unseal($msg); if (!$umsg) { $ex = Gmsg::extract($msg); if ($ex && is_array($ex)) { $umsg = $msg; } else { $status = 0; $res = "Unable to decode the message"; } } if ($umsg) { $parts = self::extract($umsg); $action = $parts["op"]; $mess = $parts["msg"]; $sender = $parts["sender"]; $recipient = $parts["recipient"]; if ($recipient && !account::exists($recipient)) { $status = 0; $res = "The recipient account {$recipient} does not reside here"; $rply = Gmsg::create(array("status" => $status, "response" => $res)); } else { switch ($action) { case "mrequest": $r = transaction::request($mess['m'], $sender, $mess['k']); $rply = Gmsg::create(array("status" => $r[0], "response" => $r[1])); break; case "mstatus": $r = transaction::mercorder($mess['m'], $sender, $mess['k']); $rply = Gmsg::create(array("status" => $r[0], "response" => $r[1])); break; case "statusrequest": $r = transaction::status($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "paymentrequest": $r = transaction::request($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "pullrequests": $r = transaction::pullrequests($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "pullcoins": $r = account::pullcoins($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "clearrequests": $r = transaction::clearrequests($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "notification": $r = transaction::notification($mess, $sender); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "acknowledgement": $r = transaction::acknowledgement($mess, config::$SRA); $m = Gmsg::create(array("status" => $r[0], "response" => $r[1])); $rply = GsonCrypt::sign($m); break; case "deposit": $r = account::deposit($mess, $recipient); if (!$r) { $status = 0; $res = "Deposit failed"; } else { $res = "Deposit was successful"; } break; case "revokecert": $net = new Gnet(); $rply = $net->send("{$mess}", true); $net = null; break; case "signcert": $net = new Gnet(); $rply = $net->send("{$mess}", true); $net = null; break; case "register": $k = GsonCrypt::getcert(); if (is_readable($k)) { $res = gio::readfile($k); if (!$res) { $status = 0; } } $rply = Gmsg::create(array("status" => $status, "cert" => $res, "name" => config::$accountId, "account" => account::makenew())); break; case "create": $status = gio::savetofile($mess, GsonCrypt::getkey("{$sender}")); $res = $status ? "successful" : "failed"; $rply = Gmsg::create(array("status" => $status, "response" => $res)); break; case "remove": $res = ""; $ret = array("status" => $status, "response" => $res); $rply = self::create($ret); $rply = GsonCrypt::seal("{$rply}", "{$sender}"); unlink(GsonCrypt::getkey($sender)); break; case "exchangecert": $status = 0; if (!file_exists(GsonCrypt::getcert("{$sender}"))) { $status = gio::saverawfile($mess, GsonCrypt::getcert("{$sender}")); } $k = GsonCrypt::getcert(); if ($status && is_readable($k)) { $res = gio::readfile($k); if (!$res) { $status = 0; } } $rply = Gmsg::create(array("status" => $status, "cert" => $res)); break; case "reverb": $res = $mess; break; default: $status = 0; $res = "Invalid Operation!"; } } } if (!isset($rply)) { $ret = array("status" => $status, "response" => $res); $rply = self::create($ret); $rply = $sender ? GsonCrypt::seal("{$rply}", "{$sender}") : "{$rply}"; } return $rply; }