182 lines
4.8 KiB
C++
182 lines
4.8 KiB
C++
#include "pip.h"
|
|
#include "piauth.h"
|
|
|
|
|
|
class Obj : public PIObject {
|
|
PIOBJECT(Obj)
|
|
public:
|
|
Obj() : PIObject() {}
|
|
|
|
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;
|
|
}
|
|
};
|
|
|
|
class A: public PIObject {
|
|
PIOBJECT(A)
|
|
public:
|
|
A() {}
|
|
EVENT_HANDLER2(void, pcf, int, id, PIString*, buff) {
|
|
piCout << "PICout(" << id << ") finished:" << (*buff);
|
|
}
|
|
};
|
|
int main() {
|
|
/*A a;
|
|
CONNECTU(PICout::Notifier::object(), finished, &a, pcf);
|
|
PIString buffer = "my buff:";
|
|
PICout(&buffer, 1) << "int 10 ->" << 10 << ", time ->" << PITime::current();*/
|
|
PIString s("str");
|
|
piCout << s;
|
|
piCout << s.quoted();
|
|
piCout << s.quoted();
|
|
piCout << s.quote();
|
|
piCout << s;
|
|
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<PIByteArray>() << server.getSignPublicKey());
|
|
// server.setAuthorizedPublicKeys(PIVector<PIByteArray>() << 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;
|
|
// }
|
|
|
|
|
|
/*
|
|
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|