예제 #1
0
void sshsocket::AcceptHost(QString title, QString hostname, QString username, QString password, qint32 port )
{
    host = new Host(title, hostname, username, port) ;
#ifdef Q_WS_SIMULATOR
     host->setPassword(password);
#else
     QByteArray clearData ;
     clearData.append(password) ;
     RAWDATA_PTR cipherData = NULL;
     size_t cipherLength = 0;
     aegis_crypto_result rc = aegis_crypto_encrypt(clearData.data(), clearData.length(), NULL, &cipherData, &cipherLength) ;
     if (aegis_crypto_ok != rc) {
             AEGIS_ERROR("%s: aegis_crypto_encrypt failed (%s)", __func__,
                        aegis_crypto_last_error_str());
     }
     QByteArray encrypted((char *)cipherData, cipherLength);
     host->setSecret(encrypted);
    // aegis_crypto_free(cipherData);
#endif
    socket = new QTcpSocket(this) ;
    qint16 port_value = host->port() ;
    socket->connectToHost(host->hostname(), port_value);
    connect(socket, SIGNAL(connected()), this, SLOT(socket_connected_slot())) ;
    connect(socket, SIGNAL(error(QAbstractSocket::SocketError)), SLOT(display_error(QAbstractSocket::SocketError))) ;
}
예제 #2
0
//Copied from aegis-crypto0 bin/accli.c
bool PackageUtils::createSignature(int ih, int oh, const char* resource_id)
{
    int mdlen;
    unsigned char digest[DIGESTLEN];
    struct aegis_signature_t signature;
    aegis_crypto_result res;

    mdlen = computeDigest(ih, digest, sizeof(digest));
    if (0 == mdlen) {
        qDebug()<<"Could not calculate digest in "<<Q_FUNC_INFO;
        return false;
    }

    res = aegis_crypto_sign(digest, mdlen, resource_id, &signature);
    if (aegis_crypto_ok != res) {
        qDebug()<<"Failed to sign the signature in "<<Q_FUNC_INFO<<aegis_crypto_last_error_str();
        return false;
    }

    char* str_sig = NULL;
    if (0 < aegis_crypto_signature_to_string(&signature,
                                             aegis_as_hexstring,
                                            resource_id,
                                             &str_sig)){
        //signature creation successfull. Write it to file
        ssize_t len = strlen(str_sig);
        ssize_t written = write(oh, str_sig, len);
        if (written < len) {
            qDebug()<<"Can not write outputfile"<<Q_FUNC_INFO;
        }
    }
    //write terminating charactersignature
    write(oh,"\n",1);
    if (NULL != str_sig)
        aegis_crypto_free(str_sig);
    return true;
}