コード例 #1
0
ファイル: protect.cpp プロジェクト: akanarya/repo1
void protect::genKeysLists(){
    privateKeyList.clear();

    for (int i = 0; i < ifList.size(); i++){
        hardwareAdress = ifList[i].hardwareAddress();
        genPrivateKey();
        if (licenseState != _LIC3){
            privateKeyList.append(privateKey);

            genKey();
            keyList.append(key);
        }
    }
}
コード例 #2
0
P2PServerUDPSettings::P2PServerUDPSettings(uint8_t *privatekey, uint8_t *ca_publickey, uint8_t *ca_signature) :
    settings("p2p.xml"),
    port(0)
{
    if(!settings.contains("privatekey"))
    {
        genPrivateKey(privatekey);
        settings.setValue("privatekey",binarytoHexa(privatekey,sizeof(privatekey)));
    }
    else
    {
        const std::vector<char> tempData=hexatoBinary(settings.value("privatekey"));
        if(tempData.size()==ED25519_KEY_SIZE)
            memcpy(privatekey,tempData.data(),ED25519_KEY_SIZE);
        else
        {
            genPrivateKey(privatekey);
            settings.setValue("privatekey",binarytoHexa(privatekey,sizeof(privatekey)));
            settings.sync();
        }
    }
    if(!settings.contains("ca_signature"))
    {
        std::cerr << "You need define CA signature of your public key" << std::endl;
        settings.setValue("ca_signature","");
        settings.sync();
        abort();
    }
    else
    {
        const std::vector<char> tempData=hexatoBinary(settings.value("ca_signature"));
        if(tempData.size()==ED25519_SIGNATURE_SIZE)
            memcpy(ca_signature,tempData.data(),ED25519_SIGNATURE_SIZE);
        else
        {
            std::cerr << "You need define CA signature of your public key " <<
                         std::to_string(tempData.size()) << "!=" << std::to_string(ED25519_SIGNATURE_SIZE) << std::endl;
            abort();
        }
    }
    if(!settings.contains("ca_publickey"))
    {
        std::cerr << "You need define CA public key" << std::endl;
        settings.setValue("ca_publickey","");
        settings.sync();
        abort();
    }
    else
    {
        const std::vector<char> tempData=hexatoBinary(settings.value("ca_publickey"));
        if(tempData.size()==ED25519_KEY_SIZE)
            memcpy(ca_publickey,tempData.data(),ED25519_KEY_SIZE);
        else
        {
            std::cerr << "You need define CA public key " <<
                         std::to_string(tempData.size()) << "!=" << std::to_string(ED25519_KEY_SIZE) << std::endl;
            abort();
        }
    }

    if(!settings.contains("known_node"))
        settings.setValue("known_node","");

    if(!settings.contains("port"))
        settings.setValue("port",rand()%40000+10000);
    port=stringtouint16(settings.value("port"));

    const std::vector<std::string> &known_nodes=stringsplit(settings.value("known_node"),',');
    if((known_nodes.size()%2)!=0)
    {
        std::cerr << "(known_nodes.size()%2)!=0" << std::endl;
        abort();
    }
    size_t index=0;
    while(index<known_nodes.size())
    {
        bool ok=false;

        P2PServerUDP::HostToConnect hostToConnect;
        const std::string host=known_nodes.at(index);
        const std::string &portstring=known_nodes.at(index+1);
        const uint16_t port=stringtouint16(portstring,&ok);
        if(ok)
        {
            sockaddr_in6 serv_addr;
            memset(&serv_addr, 0, sizeof(serv_addr));
            serv_addr.sin6_port = htobe16(port);
            const char * const hostC=host.c_str();
            int convertResult=inet_pton(AF_INET6,hostC,&serv_addr.sin6_addr);
            if(convertResult!=1)
            {
                convertResult=inet_pton(AF_INET,hostC,&serv_addr.sin6_addr);
                if(convertResult!=1)
                    std::cerr << "not IPv4 and IPv6 address, host: \"" << host << "\", portstring: \"" << portstring
                              << "\", errno: " << std::to_string(errno) << std::endl;
                else
                    serv_addr.sin6_family = AF_INET;
            }
            else
                serv_addr.sin6_family = AF_INET6;
            if(convertResult==1)
            {
                hostToConnect.round=0;
                hostToConnect.serv_addr=serv_addr;
                hostToConnect.serialised_serv_addr=P2PServerUDP::sockSerialised(serv_addr);

                const std::string &serialisedPeer=P2PPeer::toString(serv_addr,",");
                knownPeers.insert(serialisedPeer);
                if(serialisedPeer!=(host+",",portstring))
                    std::cerr << serialisedPeer <<"!=" << (host+",",portstring) << ", ip list change" << std::endl;

                //pass to temp list because P2PServerUDP::p2pserver not init for now
                hostToConnectTemp.push_back(hostToConnect);
            }
        }

        index+=2;
    }

    settings.sync();

    setKey(privatekey,ca_publickey,ca_signature);
}