From fe667a55ab8e21bb688a37238142d7060cf295a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D1=8B=D1=87=D0=BA=D0=BE=D0=B2=20=D0=90=D0=BD=D0=B4?= =?UTF-8?q?=D1=80=D0=B5=D0=B9?= Date: Mon, 19 Nov 2018 10:03:41 +0000 Subject: [PATCH] git-svn-id: svn://db.shs.com.ru/pip@661 12ceb7fc-bf1f-11e4-8940-5bc7170c53b5 --- main.cpp | 331 ++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 229 insertions(+), 102 deletions(-) diff --git a/main.cpp b/main.cpp index abe4c937..4ce0359d 100644 --- a/main.cpp +++ b/main.cpp @@ -1,112 +1,239 @@ -#include "picout.h" -#include "pivector2d.h" -#include "Eigen/Dense" +#include "pip.h" +#include "piauth.h" -typedef Eigen::MatrixXd PIMathMatrixd; -typedef Eigen::MatrixXf PIMathMatrixf; -typedef Eigen::MatrixXcf PIMathMatrixcf; -typedef Eigen::MatrixXcd PIMathMatrixcd; +/* +class Obj : public PIObject { + PIOBJECT(Obj) +public: + Obj() : PIObject() {} -template -inline PICout operator <<(PICout s, const Eigen::DenseCoeffsBase & m) {s << '{'; for (uint r = 0; r < m.rows(); ++r) { for (uint c = 0; c < m.cols(); ++c) { s << m(r, c); if (c < m.cols() - 1 || r < m.rows() - 1) s << ", ";} if (r < m.rows() - 1) s << PICoutManipulators::NewLine << ' ';} s << '}'; return s;} -template -inline PIVector > toVectors(const Eigen::DenseCoeffsBase & m) { - PIVector > ret; - for(int i = 0; i < m.cols(); ++i) - ret << PIVector(&(m(i*m.rows())), m.rows()); - return ret; -} + EVENT_HANDLER2(void, authorizeServer, PIByteArray, info, bool *, ok) { + piCout << "[authorizeServer]" << PIString(info); + //*ok = true; + } + EVENT_HANDLER2(void, passwordCheck, PIByteArray, phash, bool *, ok) { + piCout << "[passwordCheck]" << phash.toHex(); + PIByteArray ph = PICrypt::passwordHash("secret", PIByteArray::fromHex("AABBCCDD")); + piCout << "[passwordCheck]" << ph.toHex(); + if (phash == ph) *ok = true; + } + EVENT_HANDLER1(void, userEnterPassword, PIString *, password) { + *password = "secret"; + piCout << "[userEnterPassword]" << *password; + } + EVENT_HANDLER(void, clientConnect) { + piCout << "clientConnect OK!"; + } + EVENT_HANDLER(void, serverConnect) { + piCout << "serverConnect OK!"; + } + EVENT_HANDLER1(void, f, int, id) { + piCout << "finished" << id; + } +}; -template -inline Eigen::Matrix fromVectors(const PIVector > & m) { - if (m.isEmpty()) return Eigen::Matrix(0, 0); - if (m[0].isEmpty()) return Eigen::Matrix(1, 0); - Eigen::Matrix ret(m[0].size(), m.size()); - for(int i = 0; i < m.size_s(); ++i) - for(int j = 0; j < m[i].size_s(); ++j) - ret(j,i) = m[i][j]; - return ret; -} -template -inline PIVector toPlainVector(const Eigen::DenseCoeffsBase & m) { - return PIVector(&(m(0)), m.size()); -} +class A: public PIObject { + PIOBJECT(A) +public: + A() {} + EVENT_HANDLER2(void, pcf, int, id, PIString*, buff) { + piCout << "PICout(" << id << ") finished:" << (*buff); + } +}; +*/ +/*class O { +public: + O() {piCout << "O";} + ~O() {piCout << "~O";} +}; + +class Buffer { +public: + Buffer() {} + template + static Buffer create() { + Buffer ret; + ret.data = new T(); + ret.pdestroy = (void *)(T::~T); + return ret; + } + void destroy() {} + void * data; + void * pdestroy; +}; +class __BufferStorage { +public: + +}; +*/ int main() { -// Eigen::MatrixXd; -// PIMathMatrix m1(2,2, PIVector() << complexd(1.) << complexd(1.) << complexd(0.) << complexd(1.)); -// PIMathMatrix m2(2,3, PIVector() << complexd(2., 3.) << complexd(2., 3.) << complexd(2., 3.) << complexd(2., 3.) << complexd(2., 3.) << complexd(2., 3.)); - PIMathMatrixd m1(3,3); - m1 << 1,2,3,4,6,5,9,8,7; -// PIMathMatrix m2(2,3, PIVector() << 1. << 2. << complexd(2., 3.) << complexd(2., 3.) << complexd(2., 3.) << complexd(2., 3.)); -// PIMathMatrix m3(vv); -// piCout << m2 << PICoutManipulators::NewLine; -// piCout << (PIVector2D)m2 << PICoutManipulators::NewLine; -// for (uint r = 0; r < m2.rows(); ++r) { -// for (uint c = 0; c < m2.cols(); ++c) { -//// piCout << m2[r][c]; -// m2[r][c] = complexd(m2[r][c].real(), -(m2[r][c].imag())); -//// m2[r][c] = complexd(); + //Buffer b = Buffer::create(); + +// PIEvaluator eval, eval2; +// eval.check("1-1*2"); +// piCout << eval.evaluate().real(); + /*eval.setVariable("t", complexd(1, 2)); + eval.check("(t*t*(t<8))+(72*(t>8)-8*(9-t)*(9-t)*(t>8)*(t<8.8))+(3*(t-8.8)*(t>8.8))"); + PIByteArray ba = eval.save(); + piCout << ba.size(); + PITimeMeasurer tm; double us = 0.; + + tm.reset(); + PIEvaluator e1; + piForTimes(100) { + e1.setVariable("t", complexd(1, 2)); + e1.check("(t*t*(t<8))+(72*(t>8)-8*(9-t)*(9-t)*(t>8)*(t<8.8))+(3*(t-8.8)*(t>8.8))"); + complexd ret = e1.evaluate(); + } + us = tm.elapsed_u(); piCout << "check" << us / 100.; + + tm.reset(); + PIEvaluator e2; + e2.load(ba); + piForTimes(10000) { + e2.setVariable("t", complexd(1, 2)); + complexd ret = e2.evaluate(); + } + us = tm.elapsed_u(); piCout << " save" << us / 10000.;*/ + + + + /*A a; + CONNECTU(PICout::Notifier::object(), finished, &a, pcf); + PIString buffer = "my buff:"; + PICout(&buffer, 1) << "int 10 ->" << 10 << ", time ->" << PITime::current();*/ + /*PISerial ser(PISerial::availableDevices(false)[0], PISerial::S115200); + piCout << ser.constructFullPath(); + piCout << ser.open(); + ser.startThreadedRead(); + FOREVER { + piCout << ser.isOpened(); + piMSleep(200); + }*/ + /*PIVector fl = PIDir::current().allEntries(); + PIFile out("out.txt", PIIODevice::ReadWrite); + out.clear(); + piForeachC (PIFile::FileInfo & f, fl) { + PIString e = f.extension(); + PIString comm; + if (e == "h") comm = PIString::fromUTF8("Заголовочный файл"); + if (e == "cpp") comm = PIString::fromUTF8("Файл релизации"); + if (e == "ui") comm = PIString::fromUTF8("Форма"); + if (e == "qrc") comm = PIString::fromUTF8("Файл ресурсов"); + if (comm.isEmpty()) continue; + out << "\n\n" << comm << ": " << f.name() << "\n"; + PIFile file(f.name(), PIIODevice::ReadOnly); + while (!file.isEnd()) { + PIString line = file.readLine(), tl = line.trimmed(); + if (tl.isEmpty() || tl.startsWith("//")) continue; + out << line << "\n"; + } + }*/ + + return 0; +/*} + +int main(int argc, char *argv[]) { + Obj o; + CONNECTU(PICout::Notifier::object(), finished, &o, f); + PIString s = "!!!"; + piCout << s; + PICout(&s, 1) << "now" << PIDateTime::current() << ", int 1 =" << 1; + piCout << s;*/ + + /*piCout << "start"; + PICrypt crypt; + PIByteArray skey1, pkey1; + crypt.generateKeypair(pkey1, skey1); + PIByteArray skey2, pkey2; + crypt.generateKeypair(pkey2, skey2); + PIByteArray sign = PIAuth::generateSign(PICrypt::generateKey()); + piCout << "sign" << sign.toHex(); + + piCout << "key1 " << pkey1.toHex() << skey1.toHex(); + piCout << "key2 " << pkey2.toHex() << skey2.toHex(); + PIString msg = "what the f*ck?"; + PIByteArray ba = msg.toUTF8(); + piCout << "source" << ba.toHex() << msg; + PIByteArray cba = crypt.crypt(ba, pkey2, skey1); + PIByteArray psign = crypt.extractSignPublicKey(sign); + PIByteArray scba = crypt.signMessage(cba, sign); + piCout << "crypted" << cba.toHex(); + piCout << "signed" << scba.toHex() << psign.toHex(); + PIByteArray dba = crypt.decrypt(cba, pkey1, skey2); + piCout << "decrypted" << dba.toHex() << PIString(dba); + piCout << "verify" << crypt.verifySign(cba, scba, psign); + cba = crypt.crypt(ba, pkey1, skey2); + piCout << "crypted" << cba.toHex(); + //cba[7] = 0; + dba = crypt.decrypt(cba, pkey2, skey1); + piCout << "decrypted" << dba.toHex() << PIString(dba); + + + + + piCout << "======================================="; + + PIAuth server(PIAuth::generateSign(pkey1)); + + msg = "This is Server with PIAuth"; + server.setInfoData(msg.toUTF8()); + + PIAuth client(PIAuth::generateSign(pkey2)); + + client.setAuthorizedPublicKeys(PIVector() << server.getSignPublicKey()); +// server.setAuthorizedPublicKeys(PIVector() << client.getSignPublicKey()); + Obj o; + CONNECTU(&client, authorize, &o, authorizeServer); + CONNECTU(&client, passwordRequest, &o, userEnterPassword); + CONNECTU(&server, passwordCheck, &o, passwordCheck); + CONNECTU(&client, connected, &o, clientConnect); + CONNECTU(&server, connected, &o, serverConnect); + client.startClient(); + ba = server.startServer(); + int st = PIAuth::AuthProbe; + piCout << "server" << st << ba.toHex() << ba.size();*/ + + + +// ba[40] = 2; +// { +// int s; +// ba >> s; +// PIByteArray rinfo; +// PIByteArray rsign; +// PIByteArray rsign_pk; +// PIByteArray box_pk; +// PIByteArray noise; +// ba >> rinfo >> rsign_pk >> box_pk >> noise >> rsign; +// ba.clear(); +// PIByteArray sign2 = PIAuth::generateSign(PICrypt::generateRandomBuff(100)); +// msg = "Server"; +// ba << s << msg.toUTF8() << crypt.extractSignPublicKey(sign2) << box_pk << noise; +// rsign = crypt.signMessage(ba, sign2); +// ba << rsign; // } -// } - piCout << m1 << PICoutManipulators::NewLine; - piCout << toPlainVector(m1); -// piCout << m2 << PICoutManipulators::NewLine; -// piCout << (PIVector2D)m2 << PICoutManipulators::NewLine; -// piCout << m2.transposed() << PICoutManipulators::NewLine; -// piCout << hermitian(m2) << PICoutManipulators::NewLine; -// piCout << (m2*m1); -// PIMathVector v(PIVector() << complexd(1.) << complexd(2.)); -// piCout << (m1*PIMathMatrix::matrixCol(v));``` -// piCout << m2; -// piCout << m3; -// bool ok; - PIMathMatrixd mi = m1.inverse(); - piCout << mi; - piCout << PIMathMatrixd(mi * m1); - piCout << m1.row(0); - piCout << m1.row(1); - piCout << m1.row(2); - piCout << ""; - piCout << m1.col(0); - piCout << m1.col(1); - piCout << m1.col(2); - //m2 = m2.transposed(); -// piCout << m2 << PICoutManipulators::NewLine << hermitian(m2); -// piCout << PICoutManipulators::NewLine << hermitian(m2) * mi; -// piCout << PICoutManipulators::NewLine << m1 * m2 << PICoutManipulators::NewLine << m2 * m1; -// piCout << PICoutManipulators::NewLine << hermitian(m1*m2) << PICoutManipulators::NewLine << hermitian(m2) * hermitian(m1); -// PIVector2D v(3,2); -// for (uint r = 0; r < v.rows(); ++r) { -// for (uint c = 0; c < v.cols(); ++c) { -// piCout << r*v.cols()+c+1; -// v[r][c] = r*v.cols()+c+1; -// } -// } -// piCout << v; -// for (uint c = 0; c < v.cols(); ++c) { -// for (uint r = 0; r < v.rows(); ++r) { -// piCout << r*v.cols()+c+1; -// v[r][c] = -v[r][c]; -// } -// } - piCout << "-------" << PICoutManipulators::NewLine; - PIMathMatrixd v = m1.block(0,0, 3,2); - m1 = v; -// PIMathMatrixd v2 = m1.block(0,0, 2,3); -// PIMathMatrixd v2(2,3, m1.toPlainVector().resize(6)); -// piCout << v << PICoutManipulators::NewLine; - piCout << m1 << PICoutManipulators::NewLine; - PIVector > vv = toVectors(m1); - piCout << vv << PICoutManipulators::NewLine; - piCout << fromVectors(vv) << PICoutManipulators::NewLine; -// piCout << toVectors(PIMathMatrixd(m1.transpose())) << PICoutManipulators::NewLine; -// PIMathMatrix v2 = PIMathMatrix(v.toVectors()); -// piCout << v2 << PICoutManipulators::NewLine; -// piCout << v*v2 << PICoutManipulators::NewLine; -// piCout << v2*v << PICoutManipulators::NewLine; + + +/* + st = client.receive(ba); + piCout << "client" << st << ba.toHex() << ba.size(); + st = server.receive(ba); + piCout << "server" << st << ba.toHex() << ba.size(); + st = client.receive(ba); + piCout << "client" << st << ba.toHex() << ba.size(); + st = server.receive(ba); + piCout << "server" << st << ba.toHex() << ba.size(); + st = client.receive(ba); + piCout << "client" << st << ba.toHex() << ba.size(); + st = server.receive(ba); + piCout << "server" << st << ba.toHex() << ba.size(); + st = client.receive(ba); + piCout << "client" << st << ba.toHex() << ba.size(); + st = server.receive(ba); + piCout << "server" << st << ba.toHex() << ba.size();*/ return 0; } -