Teaspeak-Server/client/main.cpp

1176 lines
57 KiB
C++

#include <iostream>
#include <tomcrypt.h>
#include <iomanip>
#include <ThreadPool/Timer.h>
#include <License.h>
#include "src/Identity.h"
#include "src/protocol/Connection.h"
#include <ed25519/ed25519.h>
#include <ed25519/ge.h>
#include <misc/base64.h>
#include <log/LogUtils.h>
#include <LicenseKey.pb.h>
#include <ed25519/sc.h>
#include <misc/digest.h>
#define QLZ_COMPRESSION_LEVEL 3
#include "qlz/QuickLZ.h"
using namespace std;
using namespace ts;
using namespace license::teamspeak;
void hexout(std::ostream& os, unsigned char c)
{
unsigned char uc = static_cast<unsigned char>(c);
os << std::setw(2) << std::setfill('0') << (unsigned int)uc << ' ';
}
void hexdump(std::ostream& outs, const std::string& s, size_t line_len = 16)
{
std::ostringstream os;
const std::string::size_type slen(s.size());
int i(0);
std::string::size_type pos(0);
const std::streamsize lines(slen / line_len);
const std::streamsize chars(slen % line_len);
std::ios::fmtflags f(os.flags());
os << "Length: " << s.length() << "/" << std::hex << "0x" << s.length() << endl;
for(std::streamsize line = 0; line <= lines - (chars == 0 ? 1 : 0); ++line)
{
os << std::hex << setfill('0') << setw(3) << line * line_len << " | ";
for(i = 0; i < line_len; ++i)
{
if(pos < s.length())
hexout(os, s[pos]);
else os << " ";
pos++;
}
os << " | ";
if(pos - line_len < s.length()){
auto av = s.substr(pos - line_len);
for(char c : av.substr(0, min(av.length(), line_len))){
if(isprint(c))
os << c << " ";
else
os << "." << " ";
}
}
os << '\n';
}
os.flags(f);
outs << os.str() << endl;
}
//This RSA puzzel crashes the manager
//545333494e49543100658803ffED1eBAACDe66bd212F3B91A0C1dbd65b374F1FCEe353A74C78eB99B5b8B2e0eC7DC9Ce7bCdfcFE97622AbD015B4EBCB3fecc7D23bBfaA2B15DBBBBC1d009DBcd924B06Eb2e0CBCD0AfBbadc2ecbb812C47d5dcAA4BcFdaF73ACe89A106c98f6c0DBeac8e8FeF9d6d836Bd1Cd791f376452Cff581400ed760acB2deAE1Be53E98152AbaBfaC823e3e4FACdaAf69E977C8dE328ECDA5FEE3c327FfCf9228caf8D761aeF7bAdbebe5eAcda87Eba61F09D7AEC9D4EeBa763cFE3c9cE718d37dd4F73CA10ffB4127d15Bee7cF9Edc644b4be06f0F9C4aEb2FBDd9549e215959FaFea57b5B7900000000
/*
auto parent = import((char*) root);
fe_neg(parent.X, parent.X);
fe_neg(parent.T, parent.T);
char buf[32];
ge_p3_tobytes((u_char*) buf, &parent);
return string(buf, 32);
*/
using namespace std::chrono;
inline std::string keyMul(const char* publicKey /* compressed */, char* privateKey /* uncompressed */, bool negate){
ge_p3 keyA{};
ge_p2 result{};
ge_frombytes_negate_vartime(&keyA, (u_char*) publicKey);
if(negate) {
fe_neg(keyA.X, keyA.X); /* undo negate */
fe_neg(keyA.T, keyA.T); /* undo negate */
}
ge_scalarmult_vartime(&result, (u_char*) privateKey, &keyA);
char buffer[32];
ge_tobytes((u_char*) buffer, &result);
return string(buffer, 32);
}
#include "ed25519/sha512.h"
static int consttime_equal(const unsigned char *x, const unsigned char *y) {
unsigned char r = 0;
r = x[0] ^ y[0];
#define F(i) r |= x[i] ^ y[i]
F(1);
F(2);
F(3);
F(4);
F(5);
F(6);
F(7);
F(8);
F(9);
F(10);
F(11);
F(12);
F(13);
F(14);
F(15);
F(16);
F(17);
F(18);
F(19);
F(20);
F(21);
F(22);
F(23);
F(24);
F(25);
F(26);
F(27);
F(28);
F(29);
F(30);
F(31);
#undef F
return !r;
}
int ed25519_verify(bool do_hash, const unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key) {
unsigned char h[64];
unsigned char checker[32];
sha512_context hash;
ge_p3 A;
ge_p2 R;
if (signature[63] & 224) {
return 0;
}
if (ge_frombytes_negate_vartime(&A, public_key) != 0) {
return 0;
}
if(do_hash) {
//sha512_init(&hash);
//sha512_update(&hash, signature, 32);
//sha512_update(&hash, public_key, 32);
//sha512_update(&hash, message, message_len);
//sha512_final(&hash, h);
assert(false);
} else {
memcpy(h, message, 64);
}
sc_reduce(h);
ge_double_scalarmult_vartime(&R, h, &A, signature + 32);
ge_tobytes(checker, &R);
if (!consttime_equal(checker, signature)) {
return 0;
}
return 1;
}
/*
char seed[64];
LicenseChain chain;
//E813384CE058BA63F5792D16A093B0C503D2C51FD19A1DC36FD613EFB88E7334
u_char publicKey[32];
u_char privateKey[32] = {0xE8, 0x13, 0x38, 0x4C, 0xE0, 0x58, 0xBA, 0x63, 0xF5, 0x79, 0x2D, 0x16, 0xA0, 0x93, 0xB0, 0xC5, 0x03, 0xD2, 0xC5, 0x1F, 0xD1, 0x9A, 0x1D, 0xC3, 0x6F, 0xD6, 0x13, 0xEF, 0xB8, 0x8E, 0x73, 0x34};
//privateKey[0] &= 248;
//privateKey[31] &= 63;
//privateKey[31] |= 64;
ge_p3 A;
ge_scalarmult_base(&A, privateKey);
ge_p3_tobytes(publicKey, &A);
hexDump((char*) publicKey, 32, 32, 32);
cout << "A: " << base64::encode(keyMul((char*) chain.generatePublicKey(public_tea_root).data(), (char*) chain.generatePrivateKey((u_char*) privateKey).data(), true)) << endl;
cout << "A: " << base64::encode(keyMul((char*) chain.generatePublicKey((u_char*) publicKey).data(), (char*) chain.generatePrivateKey((u_char*) private_tea_root).data(), true)) << endl;
/*
for(char& c : seed)
c = rand();
ed25519_create_keypair((u_char*) publicKey, (u_char*) privateKey, (u_char*) seed);
cout << "A: " << base64::encode(keyMul((char*) public_tea_root, privateKey, true)) << endl;
cout << "B: " << base64::encode(keyMul(publicKey, (char*) private_tea_root, true)) << endl;
chain.addServerEntry(7, "TeaSpeak");
chain.addEphemeralEntry();
/
istringstream is(chain.exportChain());
auto c2 = LicenseChain::parse(is, error);
chain.print();
c2->print();
cout << "A: " << base64::encode(keyMul((char*) c2->generatePublicKey(public_tea_root).data(), (char*) chain.generatePrivateKey((u_char*) privateKey).data(), true)) << endl;
cout << "A: " << base64::encode(keyMul((char*) c2->generatePublicKey((u_char*) publicKey).data(), (char*) chain.generatePrivateKey((u_char*) private_tea_root).data(), true)) << endl;
cout << "Chain: " << base64::encode(chain.exportChain()) << endl;
*/
inline std::string parseHex(const std::string& in) {
char buffer[(in.length() + 1) / 2];
memset(buffer, 0, sizeof(buffer));
size_t nibble_index = 0;
for(auto c : in) {
if(c == '\n' || c == ' ') continue;
uint8_t nibble = 0;
if(c >= 'A' && c <= 'F')
nibble = c - 'A' + 10;
else if(c >= 'a' && c <= 'f')
nibble = c - 'a' + 10;
else if(c >= '0' && c <= '9')
nibble = c - '0';
if(nibble_index % 2 == 0)
nibble <<= 4;
else
nibble &= 0xF;
buffer[nibble_index / 2] |= nibble;
nibble_index++;
}
return string(buffer, (nibble_index + 1) / 2);
}
bool read_crypted_string(std::string& result, const char* buffer, int length) {
char tmp[264];
char current;
int index = 0;
do {
//cout << "Read: " << ((index & 0x1F) - length) << " | " << index << endl;
tmp[index] = length ^ buffer[index] ^ buffer[(index & 0x1F) - length];
} while(tmp[index++]);
result = string(tmp, index - 1);
return true;
}
void print_dec_teamspeak() {
auto bin = parseHex("3EF0E405913439B81A2D60D467C04D11\n"
"8E7D6C6CC8DC2B8B8F62FD30F7027393\n"
"29B7A64DC47E7BAD0E6A788E7E881805\n"
"9D373E29D0FC5FAFBC57C8757C8E4CA7\n"
"B44ED70A35E78019D531CBC8299A2E34\n"
"F107D5C124B35F47C62A1F52EA43FF68\n"
"29B14B0F13EDE81BB7AD43C900CD7D41\n"
"AD02A125F7E306917D65E40B3F70CC61\n"
"C35F019E616A71CFC6369FCE3FFA26E5\n"
"1C739028E2FC58812827CBF0051EFC66\n"
"CA8257EE96943F9935D6F23B22C352F0\n"
"F432D2E6A915ED1E889B48BEABAF1613\n"
"E50143BD39F929C1B657F53627DB429E\n"
"874E42B42D8D8D48B999DB24C369EDA4\n"
"7ECBD3C97668FBAA7368C21ABABD3A93\n"
"B9E213EE48DED608F6E7E4585EA86C8D\n"
"66789F00B8AF2982F2D645FE50C08310\n"
"F6FAFC5923638A8264E1532C71A8B319\n"
"4D948F08FE727FF4536325F45E9D8609\n"
"F17176F1587229F848A7B210F97E6EE6\n"
"4B6178A0369B1047C520543DD4DC3AFA\n"
"2F009C270F4FFA5EAB4A33A6534954E6\n"
"971EF2F10D86342CB0142221F96FC249\n"
"1E9C790D04EBB03D8C2328A21D3C1408\n"
"E1ED1B822222E7293B7CCE76CC576EF0\n"
"1105FF7FD79676F6D6862D893BABF16F\n"
"D2AF8A2436CA7765EDD62C39C457EFF9\n"
"6BD6E0E929AB0889EB57B1A4AE413DED\n"
"5152A23AFE7EFBA855E13029C94A9D9E\n"
"5D58A5329E8212F58EC678CD61F1BB61\n"
"C6DAD36233822B35C356FFBC75798F16\n"
"B6B6739DAFE85AE258C3DA11EFF7E203\n"
"51AF150AED16549F8166F9415ADA3C5F\n"
"09F241E66B37A85B506A50938E7AAB0E\n"
"038220175AEE5DFA772BB4474C7663AA\n"
"AB59CB7379F114672F8E2CCE431F8073\n"
"784219DCC22EBD115B9E391B47B605A2\n"
"2F73EC1F142E05C7CA73B10B1D9A391A\n"
"5AF154E46D22AA58003A39FBF64F8832\n"
"3CA603672A9E2D8A075BC4373C0603E1\n"
"EF178B6A29A910737DC577D0560C8423\n"
"667D96C336969E69ED3AE0126ACD33EB\n"
"E80D8A3867A702277BD839D34603846A\n"
"627ED38234818579EE3EFD0F21CD33E6\n"
"EF0F9B2329A1443771DD779E400A8275\n"
"7760B6B44C42A4628B8308AC90C06294\n"
"64FFB17DDBCFDB7A7B9D3C7CD357C350\n"
"B9C560814A54B32C948305AEDEC062C6\n"
"65FBB05D769D8364FB43589C576D6454\n"
"879B63EC5E52B77C899270EA460EDB62\n"
"1A14AC1EB93F65ED4A0F14FFAA5FFFF7\n"
"008453897B03A45A828164E3512E66A1\n"
"AF55CB2A68EA403332833A9B1D5CD56F\n"
"723699957BD9DE3DA767A75B6DC365B9\n"
"FA57C66962E857765E6AA4E609816F6D\n"
"EC732AE3FF1B86226BA6073E76CF7BD5\n"
"1F0F956C7B70C9CB78F9D8130DEA75CD\n"
"D612F9D4CA3FCD26A2FC65949FC62E3F\n"
"C2646B9B12BAF43F21C659E1FA3ED5F8\n"
"E61BAF108ADB41BFEBCAC22B37D34EEA\n"
"A36ECFF6BE07B31DD7CF51A1B7A31E12\n"
"B15D5CBB22E43EDDE94FED263B9E2BA7\n"
"4E52B62B8FC600A09CDA79D96BFBA036\n"
"82C7DB656C837431CA439608B1C52F84\n"
"4148BF6FEB4D9C9374E150509D6C4D17\n"
"A707B7687DEF784094D360F34D40C663\n"
"5D57A61CA43F71F10F091EF3EB4FF4ED\n"
"019E4E8E7244E046909D33866BBFF85D\n"
"D87869ED4570288D3FDC18439232313D\n"
"91C07ED9C02AA062A85B638F71A4AD4D\n"
"D9616BE30675339F35DD7121F4E04E97\n"
"3E3CAA513062CD78DE471696737571C6\n"
"C533C0967CF835F5077FD475E8E71B8E\n"
"2B3BBD16666FD07BC5077AD10410BE67\n"
"CECC5AA1C597208828F6E27A95839237\n"
"6B90637C8C12DF05F78F28C10408F02B\n"
"AF8A5F4EAA3F829659BE9ED37AD42DAC\n"
"A327C9D9D960738D6A2ACC4B9F17C38D\n"
"4658BF20988347AB9DCB2BCE7EFEA735\n"
"82CAD6632FD42738C8569B41B3CB6C85\n"
"404CB46FEB579C8265FA42599D7A5015\n"
"B810A02C38AB0B011CB9AD47E0ED479C\n"
"5A856957967AB9B345D57565BD4C7C24\n"
"8336800C188B2B213C998D67C0CD67BC\n"
"7AA54977B615DAD560A7051D8F2B0D41\n"
"BD02F66021BF4C4047EAB90AA1BD4999\n"
"752CF4F712952778B0086C63D967C247\n"
"1C866F7968CD916A998676E825FF0D75\n"
"D23BFEF20AD155D01915E37ADADA1FF1\n"
"C384368E34AFB6629F92C76F28C4797C\n"
"9113D917A5907BCE194282F9342CCF56\n"
"BFF370D2E9BE11B80288DD05A4A2B70C\n"
"05F45304A838BB3DC5AA5DF43F368E48\n"
"EAFC7DD8E8AC5FA50595CE44B8A4A24F\n"
"57E94E57BD37F53FCCF84FFC37238E49\n"
"F7E767D5E9BC11CCB1696FDD1AB8A032\n"
"96B0FC0CEB57DAC91BE4FAED1050BA1E\n"
"12E925A161DAEA4BA56D6E8908A5AF60\n"
"96BCF549BF48D09B1FEAF0B8104DBD00\n"
"03FB6BAB6ADAFC02AA643C8E01B9B524\n"
"8DA2F62C1CD5C92DB0145D88314956F5\n"
"44ED7A21AF4B0844E3FB0EA3EB47DA17\n"
"DC3359A313DAC761A6150F8A370A4190\n"
"22EFF7148D6428AB093265CA63D95306\n"
"DE7E796ECEC5389EDF7FE433EA137780\n"
"2680CA031FFB66C28B5EE79F87369133\n"
"ABE63C83919D3B2299787E9300D70BE4\n"
"886FCB4205F271D0C249EDBFC6293ED8\n"
"58E4F124EAF8BF0DB50F94AD9E534BA8\n"
"31D8811DBB848C71D82CEEBB24C2C5D4\n"
"24729E6766DB59DC1EBBD271F2BF726A\n"
"8910F9A03C9AA5AD56EC4BD39917B0E8\n"
"F20545A90942E371AF7D8AB25EA0757C\n"
"9C08B0BA32D7A4E24EE40CA04E859B7C\n"
"E34B408463490CA109B93521B2121805\n"
"A0B45EF9F45E85439C704E8F6EA5BB5C\n"
"C36B60A443692C812999020DDB2F5019\n"
"D0DE38AD5A762DD4C03CB54218862517\n"
"53A246E47233B1455D1AF0EF0AFDB55D\n"
"C803CF2740E50ECFDE36EB421C86390F\n"
"42EB5FF13B23B75C541B9EF0091DE168\n"
"9FC55BF8CA8E7F9E2EA7FE6C9880E741\n"
"7373657274696F6E20226D5F74696D65\n"
"725265736F6C7574696F6E20213D2030\n"
"22206661696C6564206174202E2E2F2E\n"
"2E2F2E2E2F2E2E2F732F646570732F74\n"
"65616D737065616B5F7365727665725F\n"
"6C69622F7372632F74735F7365727665\n"
"722F616E7469666C6F6F642E6370703A\n"
"00416E7469466C6F6F64004173736572\n"
"74696F6E20226D5F706F696E74735469\n"
"636B5261746520213D20302220666169\n"
"6C6564206174202E2E2F2E2E2F2E2E2F\n"
"2E2E2F732F646570732F7465616D7370\n"
"65616B5F7365727665725F6C69622F73\n"
"72632F74735F7365727665722F616E74\n"
"69666C6F6F642E6370703A0052656765\n"
"7870206572726F7220666F7220495020\n"
"65787072657373696F6E202200222C20\n"
"6572726F723A200042616E4D616E6167\n"
"657200526567657870206572726F7220\n"
"666F72204E616D652065787072657373\n"
"696F6E20220054686973206E616D6520\n"
"69732000596F7520617265200062616E\n"
"6E6564207065726D616E656E746C792E\n"
"0062616E6E65642074656D706F726172\n"
"696C792E0020526561736F6E3A202200\n"
"0A54727920616761696E20696E20006E\n"
"6F7469667962616E6C697374006C6173\n"
"746E69636B6E616D6500696E766F6B65\n"
"72636C6462696400656E666F7263656D\n"
"656E74730062616E5F696E736572742E\n"
"73716C0062616E5F69700062616E5F6E\n"
"616D650062616E5F7569640062616E5F\n"
"74696D657374616D700062616E5F6C65\n"
"6E6774680062616E5F696E766F6B6572\n"
"5F636C69656E745F69640062616E5F69\n"
"6E766F6B65725F7569640062616E5F69\n"
"6E766F6B65725F6E616D650062616E5F\n"
"726561736F6E0062616E5F6861736800\n"
"62616E5F64656C6574652E73716C0062\n"
"616E5F696400417373657274696F6E20\n"
"226572726F72203D3D204552524F525F\n"
"6F6B22206661696C6564206174202E2E\n"
"2F2E2E2F2E2E2F2E2E2F732F64657073\n"
"2F7465616D737065616B5F7365727665\n"
"725F6C69622F7372632F74735F736572\n"
"7665722F62616E6D616E616765722E63\n"
"70703A0062616E2064656C6574656420\n"
"28657870697265642920726561736F6E\n"
"3D0062616E5F6C6973742E73716C0069\n"
"6E76616C69642062616E206974656D20\n"
"776974682069643A2000000000000000\n"
"4E5374335F5F3132315F5F656D707479\n"
"5F6E6F6E5F6F776E5F73746174654963\n"
"45450000000000000000000000000000\n"
"4E5374335F5F3131355F5F6861735F6F\n"
"6E655F73746174654963454500000000\n"
"4E5374335F5F31365F5F6E6F64654963\n"
"45450000000000000000000000000000\n"
"4E5374335F5F3131315F5F616C746572\n"
"6E617465496345450000000000000000\n"
"4E5374335F5F3131375F5F6F776E735F\n"
"74776F5F737461746573496345450000\n"
"4E5374335F5F3131365F5F6F776E735F\n"
"6F6E655F737461746549634545000000\n"
"4E5374335F5F3131375F5F7265706561\n"
"745F6F6E655F6C6F6F70496345450000\n"
"4E5374335F5F31365F5F6C6F6F704963\n"
"45450000000000000000000000000000\n"
"4E5374335F5F3132365F5F656E645F6D\n"
"61726B65645F73756265787072657373\n"
"696F6E49634545000000000000000000\n"
"4E5374335F5F3132385F5F626567696E\n"
"5F6D61726B65645F7375626578707265\n"
"7373696F6E4963454500000000000000\n"
"4E5374335F5F3131305F5F725F616E63\n"
"686F7249634545000000000000000000\n"
"4E5374335F5F3131305F5F6C5F616E63\n"
"686F7249634545000000000000000000\n"
"4E5374335F5F3131325F5F6D61746368\n"
"5F636861724963454500000000000000\n"
"4E5374335F5F3132305F5F6D61746368\n"
"5F636861725F636F6C6C61746549634E\n"
"535F313272656765785F747261697473\n"
"49634545454500000000000000000000\n"
"4E5374335F5F3131385F5F6D61746368\n"
"5F636861725F696361736549634E535F\n"
"313272656765785F7472616974734963\n"
"45454545000000000000000000000000\n"
"4E5374335F5F3132305F5F627261636B\n"
"65745F65787072657373696F6E49634E\n"
"535F313272656765785F747261697473\n"
"49634545454500000000000000000000\n"
"4E5374335F5F3131315F5F6D61746368\n"
"5F616E79496345450000000000000000\n"
"4E5374335F5F3131305F5F6261636B5F\n"
"72656649634545000000000000000000\n"
"4E5374335F5F3131385F5F6261636B5F\n"
"7265665F636F6C6C61746549634E535F\n"
"313272656765785F7472616974734963\n"
"45454545000000000000000000000000\n"
"4E5374335F5F3131365F5F6261636B5F\n"
"7265665F696361736549634E535F3132\n"
"72656765785F74726169747349634545\n"
"45450000000000000000000000000000\n"
"4E5374335F5F3132335F5F6D61746368\n"
"5F616E795F6275745F6E65776C696E65\n"
"49634545000000000000000000000000\n"
"4E5374335F5F3131315F5F6C6F6F6B61\n"
"6865616449634E535F31327265676578\n"
"5F747261697473496345454545000000\n"
"4E5374335F5F3131355F5F776F72645F\n"
"626F756E6461727949634E535F313272\n"
"656765785F7472616974734963454545\n"
"45000000000000000000000000000000\n"
"4E5374335F5F3131335F5F656D707479\n"
"5F737461746549634545000000000000\n"
"4E5374335F5F3132305F5F7368617265\n"
"645F7074725F706F696E74657249504E\n"
"535F31335F5F656D7074795F73746174\n"
"65496345454E535F313464656661756C\n"
"745F64656C6574654953325F45454E53\n"
"5F39616C6C6F6361746F724953325F45\n"
"45454500000000000000000000000000\n"
"4E5374335F5F31313464656661756C74\n"
"5F64656C657465494E535F31335F5F65\n"
"6D7074795F7374617465496345454545\n"
"00000000000000000000000000000000\n"
"4E5374335F5F3131315F5F656E645F73\n"
"74617465496345450041737365727469\n"
"6F6E20226D5F705669727475616C5365\n"
"7276657220213D205F5F6E756C6C2220\n"
"6661696C6564206174202E2E2F2E2E2F\n"
"2E2E2F2E2E2F732F646570732F746561\n"
"6D737065616B5F7365727665725F6C69\n"
"622F7372632F74735F7365727665722F\n"
"6368616E636C69656E74736361636865\n"
"2E6370703A004368616E436C69656E43\n"
"6163686500417373657274696F6E2022\n"
"6D5F5468726561644944203D3D207374\n"
"643A3A746869735F7468726561643A3A\n"
"6765745F6964282922206661696C6564\n"
"206174202E2E2F2E2E2F2E2E2F2E2E2F\n"
"732F646570732F7465616D737065616B\n"
"5F7365727665725F6C69622F7372632F\n"
"74735F7365727665722F6368616E636C\n"
"69656E747363616368652E6370703A00\n"
"636F6D706C61696E5F696E736572742E\n"
"73716C00636F6D706C61696E5F66726F\n"
"6D5F636C69656E745F696400636F6D70\n"
"6C61696E5F746F5F636C69656E745F69\n"
"6400636F6D706C61696E5F6D65737361\n"
"676500636F6D706C61696E5F74696D65\n"
"7374616D7000636F6D706C61696E5F68\n"
"61736800636F6D706C61696E5F64656C\n"
"6574652E73716C00636F6D706C61696E\n"
"5F64656C6574655F616C6C2E73716C00\n"
"636F6D706C61696E5F64656C6574655F\n"
"7072756E652E73716C00636F6D706C61\n"
"696E5F6765745F62795F736572766572\n"
"69642E73716C00536F6D6520636F6D70\n"
"6C61696E7420656E7472696573206672\n"
"6F6D2074686520646174616261736520\n"
"77657265206E6F74206C6F6164656420\n"
"62656361757365207468657920776572\n"
"65206475706C696361746573206F6620\n"
"616C7265616479206C6F61646564206F\n"
"6E657300436F6D706C61696E4D677200\n"
"6368616E6E656C5F696E736572745F62\n"
"756C6B2E73716C006F72675F6368616E\n"
"6E656C5F6964006368616E6E656C5F69\n"
"6E736572745F62756C6B5F6669787570\n"
"2E73716C006368616E6E656C5F696E73\n"
"6572745F62756C6B5F6D617070696E67\n"
"2E73716C006368616E6E656C5F70726F\n"
"706572746965735F62756C6B5F696E73\n"
"6572742E73716C006368616E6E656C5F\n"
"64656C6574652E73716C006368616E6E\n"
"656C5F696E736572742E73716C006368\n"
"616E6E656C5F7570646174655F706172\n"
"656E7469642E73716C00536572766572\n"
"517565727920477565737400636C6965\n"
"6E745F696E736572742E73716C00636C\n"
"69656E745F696E736572745F62756C6B\n"
"2E73716C006F72675F636C69656E745F\n"
"696400636C69656E745F696E73657274\n"
"5F62756C6B5F6D617070696E672E7371\n"
"6C00636C69656E745F70726F70657274\n"
"6965735F62756C6B5F696E736572742E\n"
"73716C00636C69656E745F6765745F62\n"
"795F7569642E73716C00636C69656E74\n"
"5F6D6F6E74685F75706C6F616400636C\n"
"69656E745F746F74616C5F75706C6F61\n"
"6400636C69656E745F6D6F6E74685F64\n"
"6F776E6C6F616400636C69656E745F74\n"
"6F74616C5F646F776E6C6F616400636C\n"
"69656E745F64656C6574652E73716C00\n"
"636C69656E745F7570646174655F6C6F\n"
"67696E5F696E666F2E73716C00636C69\n"
"656E745F7570646174655F6E616D652E\n"
"73716C00636C69656E745F7570646174\n"
"655F73746174732E73716C00636C6965\n"
"6E745F7570646174655F747261666669\n"
"635F73746174732E73716C006D657373\n"
"6167655F6765745F756E726561645F62\n"
"795F636C69656E7469642E73716C0075\n"
"6E72656164002E736F006C6962007761\n"
"6974696E6720666F7220636F6E6E6563\n"
"74696F6E20617661696C61626C650064\n"
"6174616261736520636F6E6E65637469\n"
"6F6E206E6F7420666F756E6400417373\n"
"657274696F6E20226572726F72203D3D\n"
"204552524F525F6F6B22206661696C65\n"
"64206174202E2E2F2E2E2F2E2E2F2E2E\n"
"2F732F646570732F7465616D73706561\n"
"6B5F7365727665725F6C69622F737263\n"
"2F74735F7365727665722F6461746162\n"
"6173652F64625F64617461626173652E\n"
"6370703A00506C65617365206D616B65\n"
"207375726520796F7520757365207468\n"
"6520737570706C696564207473337365\n"
"727665725F6D696E696D616C5F72756E\n"
"7363726970742E736820746F2072756E\n"
"20746865207365727665722C206F7220\n"
"736574204C445F4C4942524152595F50\n"
"41544820796F757273656C6600756E61\n"
"626C6520746F206C6F61642064617461\n"
"6261736520706C7567696E206C696272\n"
"617279202200222C2068616C74696E67\n"
"21007473336462706C7567696E5F696E\n"
"6974007473336462706C7567696E5F73\n"
"687574646F776E007473336462706C75\n"
"67696E5F636F6E6E6563740074733364\n"
"62706C7567696E5F646973636F6E6E65\n"
"6374007473336462706C7567696E5F65\n"
"786563007473336462706C7567696E5F\n"
"6F70656E007473336462706C7567696E\n"
"5F62756C6B5F696E7365727400747333\n"
"6462706C7567696E5F6765746C617374\n"
"696E736572746964007473336462706C\n"
"7567696E5F6765746D6F646966696564\n"
"726F77636F756E74007473336462706C\n"
"7567696E5F7461626C65657869737473\n"
"007473336462706C7567696E5F766572\n"
"73696F6E007473336462706C7567696E\n"
"5F6E616D65007473336462706C756769\n"
"6E5F73686F72746E616D650074733364\n"
"62706C7567696E5F6170697665727369\n"
"6F6E007473336462706C7567696E5F67\n"
"65746C6173746572726F72004661696C\n"
"656420746F20696D706F727420220022\n"
"2066726F6D202200436F756C64206E6F\n"
"74206C6F616420646174616261736520\n"
"706C7567696E006462506C7567696E20\n"
"6E616D653A20202020006462506C7567\n"
"696E2076657273696F6E3A2000506C75\n"
"67696E206170692076657273696F6E20\n"
"69732000207768696C65200020697320\n"
"72657175697265640064625F65786563\n"
"2829200064625F62756C6B5F696E7365\n"
"72742829200064625F6F70656E282920\n"
"00646174616261736520627573792C20\n"
"77616974696E6720666F722066696E69\n"
"7368696E6720696E646578207461736B\n"
"732C206D61792074616B6520736F6D65\n"
"2074696D65210073657453514C66726F\n"
"6D46696C65282066696C653A00726570\n"
"206669656C6473202F20696E73657274\n"
"20706F696E742073697A65206E6F7420\n"
"73616D6520666F722073716C20616E64\n"
"20726570656174207061727400417373\n"
"657274696F6E2022737472696E675F66\n"
"69656C645F636F756E74203D3D207374\n"
"72696E675F6669656C645F6E616D6573\n"
"2E73697A65282922206661696C656420\n"
"6174202E2E2F2E2E2F2E2E2F2E2E2F73\n"
"2F646570732F7465616D737065616B5F\n"
"7365727665725F6C69622F7372632F74\n"
"735F7365727665722F64617461626173\n"
"652F64625F64617461626173652E6370\n"
"703A00696E76616C696420706172616D\n"
"6574657220666F756E6420005C5B5C5B\n"
"5C5B282E2A3F295C5D5C5D5C5D005C3A\n"
"285B5E5C3A5D2A3F5C2A295C3A003A24\n"
"3031303A003A24303100417373657274\n"
"696F6E2022216D5F73746F726167652E\n"
"656F66282922206661696C6564206174\n"
"202E2E2F2E2E2F2E2E2F2E2E2F732F64\n"
"6570732F7465616D737065616B5F7365\n"
"727665725F6C69622F7372632F74735F\n"
"7365727665722F64617461626173652F\n"
"64625F64617461626173652E6370703A\n"
"00756E6B6E6F776E207461626C652066\n"
"69656C64207265717565737465643A20\n"
"00417373657274696F6E2022636F756E\n"
"74203C3D20363422206661696C656420\n"
"6174202E2E2F2E2E2F2E2E2F2E2E2F73\n"
"2F646570732F7465616D737065616B5F\n"
"7365727665725F6C69622F7372632F74\n"
"735F7365727665722F64617461626173\n"
"652F64625F64617461626173652E6370\n"
"703A00417373657274696F6E20227369\n"
"7A65735B695D203C3D207374643A3A6E\n"
"756D657269635F6C696D6974733C756E\n"
"7369676E656420696E743E3A3A6D6178\n"
"282922206661696C6564206174202E2E\n"
"2F2E2E2F2E2E2F2E2E2F732F64657073\n"
"2F7465616D737065616B5F7365727665\n"
"725F6C69622F7372632F74735F736572\n"
"7665722F64617461626173652F64625F\n"
"64617461626173652E6370703A005C3A\n"
"285B612D7A412D5A302D395F2D5D2A3F\n"
"295C3A005C3A285B612D7A412D5A302D\n"
"395F2D5D2A3F295C2A303F5C3A000000\n"
"3134437573746F6D4461746162617365\n"
"00000000000000000000000000000000\n"
"3134506C7567696E4461746162617365\n"
"0064625F4372656174655461626C6573\n"
"282920756E61626C6520746F206C6F61\n"
"6420696E7374616E6365206465666175\n"
"6C742076616C7565730053514C006372\n"
"656174655F7461626C65732E73716C00\n"
"64625F4372656174655461626C657328\n"
"2920756E61626C6520746F2063726561\n"
"7465207461626C65730064625F437265\n"
"6174655461626C65732829207461626C\n"
"65732063726561746564006465666175\n"
"6C74732E73716C0064625F4372656174\n"
"655461626C6573282920756E61626C65\n"
"20746F20696E73657274206465666175\n"
"6C742076616C7565730064625F437265\n"
"6174655461626C6573282920666F756E\n"
"6420696E76616C696420646174616261\n"
"73652076657273696F6E0064625F4372\n"
"656174655461626C6573282920756E61\n"
"626C6520746F207361766520696E7374\n"
"616E63652064656661756C742076616C\n"
"7565730064625F437265617465546162\n"
"6C6573282920756E61626C6520746F20\n"
"696E7365727420646174616261736520\n"
"76657273696F6E0064726F705F746162\n"
"6C65732E73716C0064625F4372656174\n"
"655461626C65732829207461626C6573\n"
"2064726F7065640064625F4372656174\n"
"655461626C6573282920756E61626C65\n"
"20746F2064726F70207461626C657300\n"
"7570646174655F64617461626173655F\n"
"76657273696F6E2E73716C0043524954\n"
"4943414C206572726F72207768696C65\n"
"207570646174696E6720646174616261\n"
"73652076657273696F6E007570646174\n"
"655F0064617461626173652075706461\n"
"746564207375636365737366756C6C79\n"
"20746F207265766973696F6E3A200075\n"
"70646174655461626C6573282920756E\n"
"61626C6520746F207570646174652064\n"
"617461626173652076657273696F6E00\n"
"64617461626173652075706461746520\n"
"746F207265766973696F6E3A20006375\n"
"73746F6D5F696E736572742E73716C00\n"
"637573746F6D5F64656C6574655F6279\n"
"5F636C69656E7469642E73716C00636C\n"
"69656E745F64656C6574655F7072756E\n"
"652E73716C0067726F7570735F736572\n"
"7665720067726F7570735F6368616E6E\n"
"656C007065726D5F696E736572742E73\n"
"716C007065726D5F6964007065726D5F\n"
"76616C7565007065726D5F6E65676174\n"
"6564007065726D5F736B697000706572\n"
"6D5F64656C6574655F62795F67726F75\n"
"7069642E73716C007065726D5F64656C\n"
"6574655F62795F7065726D69642E7371\n"
"6C007065726D5F696E736572745F6275\n"
"6C6B2E73716C0067726F75705F6D656D\n"
"6265725F696E736572745F62756C6B2E\n"
"73716C0067726F75705F696E73657274\n"
"2E73716C0067726F75705F696E736572\n"
"745F62756C6B5F736E617073686F742E\n"
"73716C006F72675F67726F75705F6964\n"
"0067726F75705F696E736572745F6275\n"
"6C6B5F736E617073686F745F6765745F\n"
"6D617070696E672E73716C0067726F75\n"
"705F64656C6574652E73716C00746162\n"
"6C6567726F7570007461626C65706572\n"
"6D73007461626C656D656D6265727300\n"
"67726F75705F72656E616D652E73716C\n"
"0067726F7570735F6765745F62795F73\n"
"657276657269645F747970652E73716C\n"
"0067726F75705F69645F6765745F6279\n"
"5F6E616D652E73716C007065726D5F75\n"
"70646174655F6765745F67726F757073\n"
"2E73716C006661696C656420746F2075\n"
"7064617465207065726D697373696F6E\n"
"732C2068616C74656421007065726D5F\n"
"72656E616D652E73716C006F6C645F70\n"
"65726D5F6E616D65006E65775F706572\n"
"6D5F6E616D6500756E61626C6520746F\n"
"2072656E616D65207065726D69737369\n"
"6F6E2C2068616C74656421007065726D\n"
"5F636F70795F64656661756C745F7065\n"
"726D697373696F6E732E73716C00756E\n"
"61626C6520746F20636F707920646566\n"
"61756C74207065726D697373696F6E73\n"
"2C2068616C74656421006661696C6564\n"
"20746F20726574726965766520766972\n"
"7475616C736572766572732C2068616C\n"
"74656421007065726D5F736572766572\n"
"5F67726F757000695F636C69656E745F\n"
"6D6F646966795F706F77657200695F6E\n"
"65656465645F6D6F646966795F706F77\n"
"65725F636C69656E745F6D6F64696679\n"
"5F706F77657200695F636C69656E745F\n"
"6E65656465645F6D6F646966795F706F\n"
"77657200695F6E65656465645F6D6F64\n"
"6966795F706F7765725F636C69656E74\n"
"5F6E65656465645F6D6F646966795F70\n"
"6F776572007570646174656420706572\n"
"6D697373696F6E7320746F2076657273\n"
"696F6E2031007065726D5F6368616E6E\n"
"656C5F67726F75707300757064617465\n"
"64207065726D697373696F6E7320746F\n"
"2076657273696F6E2032007570646174\n"
"6564207065726D697373696F6E732074\n"
"6F2076657273696F6E20330075706461\n"
"746564207065726D697373696F6E7320\n"
"746F2076657273696F6E203400757064\n"
"61746564207065726D697373696F6E73\n"
"20746F2076657273696F6E2035007570\n"
"6461746564207065726D697373696F6E\n"
"7320746F2076657273696F6E20360075\n"
"706461746564207065726D697373696F\n"
"6E7320746F2076657273696F6E203700\n"
"695F6368616E6E656C5F6D6F64696679\n"
"5F6D616B655F636F6465635F656E6372\n"
"79707465640075706461746564207065\n"
"726D697373696F6E7320746F20766572\n"
"73696F6E203800757064617465642070\n"
"65726D697373696F6E7320746F207665\n"
"7273696F6E2039007570646174656420\n"
"7065726D697373696F6E7320746F2076\n"
"657273696F6E20313000695F636C6965\n"
"6E745F6D61785F636C6F6E657300695F\n"
"6E65656465645F6D6F646966795F706F\n"
"7765725F636C69656E745F6D61785F63\n"
"6C6F6E65730075706461746564207065\n"
"726D697373696F6E7320746F20766572\n"
"73696F6E203131007570646174655F70\n"
"65726D697373696F6E735F31322E7371\n"
"6C006661696C656420746F2075706772\n"
"616465207065726D697373696F6E732C\n"
"2068616C746564210075706461746564\n"
"207065726D697373696F6E7320746F20\n"
"76657273696F6E203132007570646174\n"
"6564207065726D697373696F6E732074\n"
"6F2076657273696F6E20313300757064\n"
"61746564207065726D697373696F6E73\n"
"20746F2076657273696F6E2031340075\n"
"706461746564207065726D697373696F\n"
"6E7320746F2076657273696F6E203135\n"
"0075706461746564207065726D697373\n"
"696F6E7320746F2076657273696F6E20\n"
"31360075706461746564207065726D69\n"
"7373696F6E7320746F2076657273696F\n"
"6E20313700625F7669727475616C7365\n"
"727665725F6D6F646966795F64656661\n"
"756C745F74656D705F6368616E6E656C\n"
"5F64656C6574655F64656C617900695F\n"
"6E65656465645F6D6F646966795F706F\n"
"7765725F7669727475616C7365727665\n"
"725F6D6F646966795F64656661756C74\n"
"5F74656D705F6368616E6E656C5F6465\n"
"6C6574655F64656C617900695F636861\n"
"6E6E656C5F6372656174655F6D6F6469\n"
"66795F74656D705F64656C6574655F64\n"
"656C617900695F6E65656465645F6D6F\n"
"646966795F706F7765725F6368616E6E\n"
"656C5F6372656174655F6D6F64696679\n"
"5F74656D705F64656C6574655F64656C\n"
"61790075706461746564207065726D69\n"
"7373696F6E7320746F2076657273696F\n"
"6E203138007570646174656420706572\n"
"6D697373696F6E7320746F2076657273\n"
"696F6E20313900757064617465506572\n"
"6D697373696F6E73282920756E61626C\n"
"6520746F20696E736572742064617461\n"
"626173652076657273696F6E00736572\n"
"7665725F696E736572742E73716C0073\n"
"65727665725F64656C6574652E73716C\n"
"0062696E64696E67735F6C6973742E73\n"
"716C007365727665725F757064617465\n"
"5F747261666669635F73746174732E73\n"
"716C007365727665725F757064617465\n"
"5F706F72742E73716C00736572766572\n"
"5F7570646174655F6175746F73746172\n"
"742E73716C007365727665725F676574\n"
"5F6279706F72742E73716C0073657276\n"
"65725F7570646174655F6D616368696E\n"
"655F69642E73716C007265766F636174\n"
"696F6E735F696E736572745F62756C6B\n"
"2E73716C007265766F636174696F6E5F\n"
"74797065007265766F636174696F6E5F\n"
"65787069726174696F6E007265766F63\n"
"6174696F6E5F6B6579007265766F6361\n"
"74696F6E735F6765746C6973742E7371\n"
"6C00496E76616C6964207265766F6361\n"
"74696F6E206B657920007265766F6361\n"
"74696F6E735F64656C6574652E73716C\n"
"003B20726561736F6E3A200046696C65\n"
"4D616E6167657200436F756C64206E6F\n"
"742062696E642066696C657472616E73\n"
"666572206C697374656E20706F727420\n"
"6F6E2064656661756C74206164647265\n"
"737365730066696C657472616E736665\n"
"722062696E64206661696C6564206F6E\n"
"20004572726F72207768696C65206765\n"
"7474696E67206C697374656E696E6720\n"
"6164647265737365732E200041737365\n"
"7274696F6E20226D5F62616E64776964\n"
"74685F6C696D69745F73657276657273\n"
"2E66696E64287365727665725F696429\n"
"203D3D206D5F62616E6477696474685F\n"
"6C696D69745F736572766572732E656E\n"
"64282922206661696C6564206174202E\n"
"2E2F2E2E2F2E2E2F2E2E2F732F646570\n"
"732F7465616D737065616B5F73657276\n"
"65725F6C69622F7372632F74735F7365\n"
"727665722F66696C657472616E736665\n"
"722F73657276657266696C656D616E61\n"
"6765722E6370703A0041737365727469\n"
"6F6E2022697420213D206D5F62616E64\n"
"77696474685F6C696D69745F73657276\n"
"6572732E656E64282922206661696C65\n"
"64206174202E2E2F2E2E2F2E2E2F2E2E\n"
"2F732F646570732F7465616D73706561\n"
"6B5F7365727665725F6C69622F737263\n"
"2F74735F7365727665722F66696C6574\n"
"72616E736665722F7365727665726669\n"
"6C656D616E616765722E6370703A0045\n"
"72726F7220616363657074696E672066\n"
"696C657472616E736665722000417373\n"
"657274696F6E202262775F7365727665\n"
"7220213D206D5F62616E647769647468\n"
"5F6C696D69745F736572766572732E65\n"
"6E64282922206661696C656420617420\n"
"2E2E2F2E2E2F2E2E2F2E2E2F732F6465\n"
"70732F7465616D737065616B5F736572\n"
"7665725F6C69622F7372632F74735F73\n"
"65727665722F66696C657472616E7366\n"
"65722F73657276657266696C656D616E\n"
"616765722E6370703A00417373657274\n"
"696F6E202262775F636C69656E742021\n"
"3D2062775F7365727665722D3E736563\n"
"6F6E642E6D5F636C69656E745F62616E\n"
"647769647468732E656E642829222066\n"
"61696C6564206174202E2E2F2E2E2F2E\n"
"2E2F2E2E2F732F646570732F7465616D\n"
"737065616B5F7365727665725F6C6962\n"
"2F7372632F74735F7365727665722F66\n"
"696C657472616E736665722F73657276\n"
"657266696C656D616E616765722E6370\n"
"703A0046696C654D616E616765722054\n"
"696D657220657870697265735F66726F\n"
"6D5F6E6F772072657475726E65642065\n"
"72726F723A2000747269656420746F20\n"
"72656D6F766520697020746861742077\n"
"6173206E6F7420696E206C6973742120\n"
"00636C6F7365006C6F63616C5F656E64\n"
"706F696E740000000000000000000000\n"
"1E000000000000001E00000000000000\n"
"0A00000000000000C800000000000000\n"
"F4010000000000000000000000000000\n"
"25000000000000000000000000000000\n"
"00000000000000000000000000000000\n"
"0000000000000080FFFFFFFFFFFFFF7F\n"
"0100000000000080FDFFFFFFFFFFFF7F");
cout << "Bin length: " << bin.length() << endl;
//0x33E 0x43C
//cout << "Str: " << read_crypted_string(bin.data() + 0x3BA, 0x3BA) << endl;
//cout << "Str: " << read_crypted_string(bin.data() + 0x3DF, 0x3DF) << endl;
//cout << "Str: " << read_crypted_string(bin.data() + 0x405, 0x405) << endl; => virtual server id
//cout << "Str: " << read_crypted_string(bin.data() + 0x43C, 0x43C) << endl; => is duplicated in same instance, shutting down!
for(int index = 0x3E; index < bin.length() + 1; ) {
string str;
read_crypted_string(str, bin.data() + index, index);
cout << "Hex: 0x" << hex << setfill('0') << setw(3) << index << " => " << str << endl;
index += str.length() + 1;
}
}
int main(int argc, char** argv){
threads::timer t("");
srand(system_clock::now().time_since_epoch().count());
init_LTM();
if(register_prng(&sprng_desc) == -1) {
cerr << "could not setup prng" << endl;
return EXIT_FAILURE;
}
if (register_cipher(&rijndael_desc) == -1) {
cerr << "could not setup rijndael" << endl;
return EXIT_FAILURE;
}
string error;
if(false) {
auto base64_tvd = base64::decode("AQCvbHFTQDY/terPeilrp/ECU9xCH5U3xC92lYTNaY/0KQAJFueAazbsgAAAACVUZWFtU3BlYWsgU3lzdGVtcyBHbWJIAADmqdzhKVTai5ZX3LMCOmhH4wOWa7Jrb27PTN6XJSvOaAAKcspvMINAZwAAACRUZWFtU3BlYWsgc3lzdGVtcyBHbWJIAADRNBxg9GPfGFpwf0akzRQs4B/VhIvD+cKAC7vzRAys/AIKfC4AC27CAAYAAAAAW09EQU5JIEHDhyBUQUtJTF0gVHMzLkFtYWNpT2xtYXlhblRheWZhLkNPTSB8IFdFQkRpeW8uQ09NAA==");
istringstream s(base64_tvd);
auto result = LicenseChain::parse(s, error);
if(!result) {
cerr << error << endl;
return 0;
}
result->print();
return 0;
}
cout << base64::encode(license::teamspeak::Anonymous::chain->exportChain()) << endl;
cout << base64::encode(reinterpret_cast<const char *>(license::teamspeak::Anonymous::root_key), 32) << endl;
if(false) {
auto key_plk = license::teamspeak::Anonymous::chain->generatePublicKey();
auto key_prv = license::teamspeak::Anonymous::chain->generatePrivateKey((u_char*) license::teamspeak::Anonymous::root_key, license::teamspeak::Anonymous::root_index);
u_char sign[64];
string message = "Hello World";
ed25519_sign(sign, (u_char*) message.data(), message.length(), (u_char*) key_plk.data(), (u_char*) key_prv.data());
assert(ed25519_verify(sign, (const u_char*) message.data(), message.length(), (u_char*) key_plk.data()));
}
#if false
auto base64_license = "Co4CCsQBAQCvbHFTQDY/terPeilrp/ECU9xCH5U3xC92lYTNaY/0KQAJFueAazbsgAAAACVUZWFtU3BlYWsgU3lzdGVtcyBHbWJIAABVa/g1Aa+EhqDv4a+FKZ+nhnzgNNoG5LZZDMbWP1rUJwAJjrHNL59A2wAAACRUZWFtU3BlYWsgc3lzdGVtcyBHbWJIAAAY8GKBKoLJ2NJT15WG1E3GQ0vl0Ju29Oq3KqYAeEH9GQIJmBqACpU6gAQAAAIAVG9tIFdlYmVyABIgwLAWtDC3hSt8KzSBEksYyaYXxrIybtV207ImV+ugSWkYgAQgCioeVGVhbVNwZWFrIDMgTm9uLVByb2ZpdCBMaWNlbnNlErUBAQCvbHFTQDY/terPeilrp/ECU9xCH5U3xC92lYTNaY/0KQAJFueAazbsgAAAACVUZWFtU3BlYWsgU3lzdGVtcyBHbWJIAABVa/g1Aa+EhqDv4a+FKZ+nhnzgNNoG5LZZDMbWP1rUJwAJjrHNL59A2wAAACRUZWFtU3BlYWsgc3lzdGVtcyBHbWJIAACWjeLEq44YFFAhN9aie2W8g7q3LO2UN/FiHtoGxOoiKAUJjrHNL59A2xpARpdAlulkIKm793JIeJcyxYvvc/tdj4Bx45qcLMISR8qdAOjtgTAV2fWbkdjx0roelL6EAubc3HPij+5Xny1UDw==";
ts::proto::license::teamspeak::License license;
license.ParseFromString(base64::decode(base64_license));
auto chain_sign = LicenseChain::parse(license.sign_chain(), error);
auto chain_license = LicenseChain::parse(license.license().chain(), error);
{
auto key = chain_sign->generatePublicKey();
auto signature = license.license_sign();
auto message = license.license().SerializeAsString();
assert(ed25519_verify((const u_char*) signature.data(), (const u_char*) message.data(), message.length(), (u_char*) key.data()));
}
{
auto key_plk = chain_license->generatePublicKey();
auto key_prv = chain_license->generatePrivateKey((u_char*) license.license().root().data(), 3);
u_char sign[64];
string message = "Hello World";
ed25519_sign(sign, (u_char*) message.data(), message.length(), (u_char*) key_plk.data(), (u_char*) key_prv.data());
assert(ed25519_verify(sign, (const u_char*) message.data(), message.length(), (u_char*) key_plk.data()));
}
chain_sign->print();
chain_license->print();
cout << "version:0" << endl;
cout << "chain:" << base64::encode(chain_license->exportChain()) << endl;
cout << "root_key_prv:" << base64::encode(license.license().root()) << endl;
cout << "root_key_pbl:" << base64::encode((const char*) public_root, 32) << endl;
cout << "root_prv_index:" << to_string(3) << endl;
#endif
//return 0;
/**
* DONT DELET!
*/
//Last checked offset was 1591824411998
//Level 39
//ts::Identity* id = new ts::Identity("4161411998Vginro7hE2a4haFhxRR5+Q1aknrR8Nn1iYAAUZldWVn8XZFVVUnUOVBFeMQJ9HHZaOVh3fEhLShwdXHkie2lza1gDWQltMwhROBNeVTQ2GS5EeFNbA2dBE3QvXU9jJ0VKMXd4YkpxU0tFQUlnYVZaeVVTTTYzSldSLzBRT3Nqd3hSelJBYmRpZ2xsaFhsVTF5L3hVYWgxWT0=");
//Last checked offset was 1330241596003
//Level 48 535525596003
//ts::Identity* id = new ts::Identity("535525596003VMXsJbBqTW70w6dnQUt/X/CiIeth9DEVcVEVUUxBjXUY9RGxSeVN+OhYDHjJSFRoCJHIDd3FjXCgSdH0Gf3RhBlJ0SGYbIEBCVzNcAAITKD9yY30aAgBqOnQIQmVdVQB5L3NVWnZkQUNJUUR2dG5ScnNYdHVWZkFhem9OYVNxTGhjZ2ZwVXhVelFpcGMrSDFSbkIrL3dRPT0=");
/*
for(int i = 0; ltc_ecc_sets[i].size != 0; i++){
cout << " -> " << ltc_ecc_sets[i].name << endl;
}
int targetLevel = 20;
if(argc > 1){
targetLevel = atoi(argv[1]);
}
cout << "Try to find security level " << targetLevel << endl;
ts::Identity* id = new ts::Identity("30895417VvPSPlSzA2mTBpjn7RrJYEq/PmZcNAmhDCXkVdStbXUU2bVxBQ0IHNVAGNTR/CXplN2Z/AwRASSFTQn0GV3NTGX18dXENB2laLQJHKVFUKgl/VHRgD21LUlAHVk18FQcEMGpAXTBxUUNJSEtnTCtOcXJhZDRUSTlKNk04clZXMHkxQjcwWnNsanNsbldOOWo5cjBObA==");
id->improveSecurityLevelMultithreaded(targetLevel, 16, 1000000, 10 * 1000 * 1000U, true);
cout << "New string: " << id->exportIdentity() << endl;
if(true) return false;
*/
/*
string error;
//auto stream = stringstream(base64::decode("AQCvbHFTQDY/terPeilrp/ECU9xCH5U3xC92lYTNaY/0KQAJFueAazbsgAAAACVUZWFtU3BlYWsgU3lzdGVtcyBHbWJIAABhl9gwla/UJp2Eszst9TRVXO/PeE6a6d+CTI6Pg7OEVgAJc5CrL4Nh8gAAACRUZWFtU3BlYWsgc3lzdGVtcyBHbWJIAACvTQIgpv6zmLZq3znh7ygmOSokGFkFjz4bTigrOnetrgIJdIIACdS/gAYAAAAAU29zc2VuU3lzdGVtcy5iaWQAADY7+uV1CQ1niOvYSdGzsu83kPTNWijovr3B78eHGeePIAm98vQJvpu0"));
auto stream = stringstream(base64::decode("AQA1hUFJiiSs0wFXkYuPUJVcDa6XCrZTcsvkB0Ffzz4CmwIITRXgCqeTYAcAAAAgQW5vbnltb3VzAAC4R+5mos+UQ/KCbkpQLMI5WRp4wkQu8e5PZY4zU+/FlyAJwaE8CcJJ/A=="));
auto chain = LicenseChain::parse(stream, error);
if(!chain) {
cerr << "Could not parse: " << error << endl;
return 0;
}
chain->print();
cout << chain->exportChain() << endl;
auto key = chain->generateKey();
cout << " -> " << base64::encode(key) << endl;
cout << hex;
for(const auto& c : key)
cout << " " << (uint32_t) (uint8_t) c << endl;
if(true) return 0;
*/
ts::Identity* identity;
//identity = new ts::Identity("30895417VvPSPlSzA2mTBpjn7RrJYEq/PmZcNAmhDCXkVdStbXUU2bVxBQ0IHNVAGNTR/CXplN2Z/AwRASSFTQn0GV3NTGX18dXENB2laLQJHKVFUKgl/VHRgD21LUlAHVk18FQcEMGpAXTBxUUNJSEtnTCtOcXJhZDRUSTlKNk04clZXMHkxQjcwWnNsanNsbldOOWo5cjBObA==");
identity = new ts::Identity("4161411998Vginro7hE2a4haFhxRR5+Q1aknrR8Nn1iYAAUZldWVn8XZFVVUnUOVBFeMQJ9HHZaOVh3fEhLShwdXHkie2lza1gDWQltMwhROBNeVTQ2GS5EeFNbA2dBE3QvXU9jJ0VKMXd4YkpxU0tFQUlnYVZaeVVTTTYzSldSLzBRT3Nqd3hSelJBYmRpZ2xsaFhsVTF5L3hVYWgxWT0=");
cout << "Private key: " << identity->privateKey() << endl;
cout << "Public key: " << identity->publicKey() << endl;
{
auto hash = digest::sha256("Hello World");
auto sign_rfc = base64::decode("kjEYFcZ4iDxosbhi7bV04nRu0c0JzEIKAACSpLo9G1cJX60Ta46QpoPXTpMg9E8z5pHeZXPVUx75zmWE/LQTuQ==");
int state;
auto result = ecc_verify_hash_rfc7518((u_char*) sign_rfc.data(), sign_rfc.length(), (u_char*) hash.data(), hash.length(), &state, identity->getKeyPair());
__asm__("nop");
}
//identity = ts::Identity::createNew();
//identity->improveSecurityLevel(9);
/*
identity = ts::Identity::createNew();
cout << "Improve" << endl;
identity->improveSecurityLevelMultithreaded(24, 12);
cout << "Got level: " << identity->getSecurityLevel() << " at " << identity->lastValidKeyOffset() << " - " << identity->privateKey() << " - " << identity->publicKey() << endl;
return 0;
*/
auto lastConnect = time_point<system_clock>();
for(int i = 0; i < 1; i++){
//identity = ts::Identity::createNew();
//identity->improveSecurityLevel(9);
//identity = new ts::Identity("4161411998Vginro7hE2a4haFhxRR5+Q1aknrR8Nn1iYAAUZldWVn8XZFVVUnUOVBFeMQJ9HHZaOVh3fEhLShwdXHkie2lza1gDWQltMwhROBNeVTQ2GS5EeFNbA2dBE3QvXU9jJ0VKMXd4YkpxU0tFQUlnYVZaeVVTTTYzSldSLzBRT3Nqd3hSelJBYmRpZ2xsaFhsVTF5L3hVYWgxWT0=");
//identity = new ts::Identity("8008VgvLYFzLLe4lE6oTKyMBPViPHzJVdCGVqAGc7VQQJXkcIRUZcCkFzMDJmHCYBMF1kWmdzRwlQBy4PT3Eie2lzVmUCd39bD3RnNC9gAyRQFh14Z0YGEHJHDg4nGkceNgdWBH9RAE1ZTjlqUUlnV1hUck5vZVdUQ21sNkVYeDNMUm80M0pMU0ZDdkRzWUorR0VkeDE3ZDJLST0=");
//identity = identity->createNew();
//cout << "Improve" << endl;
//identity->improveSecurityLevelMultithreaded(10, 12);
//cout << "Using identity: " << identity->exportIdentity() << endl;
auto connection = new ts::connection::ServerConnection();
while(system_clock::now() - lastConnect < milliseconds(250)) usleep(1000);
lastConnect = system_clock::now();
string host =
"127.0.0.1"
//"51.255.133.2"
//"79.133.54.198"
//"51.255.133.6"
//"79.133.54.207" //GommeHD.net
//"79.133.54.202" //Rewi
//"79.133.54.210" //minesucht.net:9988
//"91.134.112.225" //The Beast (NOT 3.1!)
//"79.133.54.198" //Grifer games:9180
//"52.63.60.28"
//"87.106.252.164"
//"5.1.80.215" //Twerion
//"212.114.60.36" //Domies ts
//"54.36.90.72"
//"87.106.252.164"
//"84.200.62.248"
//"79.133.54.198" //Durchrasten.de:9122
""
;
string port = "9987";
if(argc > 2) {
host = argv[1];
port = argv[2];
}
threads::Thread([connection, host, port, identity]() {
string error;
cout << host << ":" << port << endl;
if(!connection->connect(host, port, identity)){
cerr << "Cant connect!" << endl;
goto sleep;
}
if(!connection->handshake(error)){
cerr << "Cant handschake: " << error << endl;
goto sleep;
}
threads::self::sleep_for(seconds(10 + rand() % 10));
sleep:;
//connection->disconnect();
//delete connection;
}).detach();
//connection->disconnect();
usleep(1000 * 1000);
}
cout << "Done!" << endl;
while(true) usleep(1000 * 2000);
}