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))) ; }
//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; }