QString AuthorizationManager::GenerateEncString_bridge(QString str){ //Get the private key QFile keyfile("/usr/local/etc/sysadm/ws_bridge.key"); keyfile.open(QIODevice::ReadOnly); QSslKey key(&keyfile, QSsl::Rsa); QByteArray privkey = key.toPem(); keyfile.close(); //Now use this private key to encode the given string unsigned char encode[4098] = {}; RSA *rsa= NULL; BIO *keybio = NULL; keybio = BIO_new_mem_buf(privkey.data(), -1); if(keybio==NULL){ return ""; } rsa = PEM_read_bio_RSAPrivateKey(keybio, &rsa,NULL, NULL); if(rsa==NULL){ return ""; } int len = RSA_private_encrypt(str.length(), (unsigned char*)(str.toLatin1().data()), encode, rsa, RSA_PKCS1_PADDING); if(len <0){ return ""; } else{ //Now return this as a base64 encoded string QByteArray str_encode( (char*)(encode), len); /*qDebug() << "Encoded String Info"; qDebug() << " - Raw string:" << str << "Length:" << str.length(); qDebug() << " - Encoded string:" << str_encode << "Length:" << str_encode.length();*/ str_encode = str_encode.toBase64(); /*qDebug() << " - Enc string (base64):" << str_encode << "Length:" << str_encode.length(); qDebug() << " - Enc string (QString):" << QString(str_encode);*/ return QString( str_encode ); } }
int ext_send_encoded_msg(int rx_chan, bool debug, const char *dst, const char *cmd, const char *fmt, ...) { va_list ap; char *s; if (cmd == NULL || fmt == NULL) return 0; conn_t *conn = ext_users[rx_chan].conn; if (!conn || !conn->mc) return -1; va_start(ap, fmt); vasprintf(&s, fmt, ap); va_end(ap); char *buf = str_encode(s); free(s); ext_send_msg(rx_chan, debug, "%s %s=%s", dst, cmd, buf); free(buf); return 0; }
static void dx_reload_cfg() { int i, j; const char *s; config_setting_t *dxs = dxcfg_lookup("dx", CFG_REQUIRED); assert(config_setting_type(dxs) == CONFIG_TYPE_LIST); const config_setting_t *dxe; for (i=0; (dxe = config_setting_get_elem(dxs, i)) != NULL; i++) { assert(config_setting_type(dxe) == CONFIG_TYPE_GROUP); } int _dx_list_len = i-1; lprintf("%d dx entries\n", _dx_list_len); dx_t *_dx_list = (dx_t *) kiwi_malloc("dx_list", (_dx_list_len+1) * sizeof(dx_t)); float f = 0; dx_t *dxp; for (i=0, dxp = _dx_list; i < _dx_list_len; i++, dxp++) { dxe = config_setting_get_elem(dxs, i); config_setting_t *e; assert((e = config_setting_get_member(dxe, "e")) != NULL); assert(config_setting_type(e) == CONFIG_TYPE_LIST); assert((dxp->freq = (float) config_setting_get_float_elem(e, 0)) != 0); if (dxp->freq < f) lprintf(">>>> DX: entry with freq %.2f < current freq %.2f\n", dxp->freq, f); else f = dxp->freq; assert((s = config_setting_get_string_elem(e, 1)) != NULL); dxcfg_mode(dxp, s); assert((s = config_setting_get_string_elem(e, 2)) != NULL); dxp->ident = str_encode((char *) s); if ((s = config_setting_get_string_elem(e, 3)) == NULL) { dxp->notes = NULL; } else { dxp->notes = str_encode((char *) s); } config_setting_t *flags; const char *flag; if ((flags = config_setting_get_member(dxe, "f")) != NULL) { if (config_setting_type(flags) == CONFIG_TYPE_ARRAY) { for (j=0; j < config_setting_length(flags); j++) { assert((flag = config_setting_get_string_elem(flags, j)) != NULL); dxcfg_flag(dxp, flag); } } else { assert((flag = config_setting_get_string(flags)) != NULL); dxcfg_flag(dxp, flag); } } config_setting_t *offset; if ((offset = config_setting_get_member(dxe, "o")) != NULL) { if (config_setting_type(offset) == CONFIG_TYPE_ARRAY) { assert((dxp->low_cut = (float) config_setting_get_int_elem(offset, 0)) != 0); assert((dxp->high_cut = (float) config_setting_get_int_elem(offset, 1)) != 0); } else { assert((dxp->offset = (float) config_setting_get_int(offset)) != 0); } } //printf("dxe %d f %.2f notes-%c off %.0f,%.0f\n", i, dxp->freq, dxp->notes? 'Y':'N', dxp->offset, dxp->high_cut); } switch_dx_list(_dx_list, _dx_list_len); // convert to json printf("### converting dx list to json\n"); dx_save_as_json(); }
VALUE rb_str_transcode(VALUE str, VALUE to) { return str_encode(1, &to, str); }
static void dx_reload_json(cfg_t *cfg) { const char *s; jsmntok_t *end_tok = &(cfg->tokens[cfg->ntok]); jsmntok_t *jt = dxcfg_lookup_json("dx"); assert(jt != NULL); assert(jt->type == JSMN_ARRAY); int _dx_list_len = jt->size; jt++; lprintf("%d dx entries\n", _dx_list_len); dx_t *_dx_list = (dx_t *) kiwi_malloc("dx_list", (_dx_list_len+1) * sizeof(dx_t)); dx_t *dxp = _dx_list; int i = 0; for (; jt != end_tok; dxp++, i++) { assert(i < _dx_list_len); assert(jt->type == JSMN_ARRAY); jt++; double f; assert(dxcfg_float_json(jt, &f) == true); dxp->freq = f; jt++; const char *mode; assert(dxcfg_string_json(jt, &mode) == true); dxcfg_mode(dxp, mode); dxcfg_string_free(mode); jt++; assert(dxcfg_string_json(jt, &s) == true); str_unescape_quotes((char *) s); dxp->ident = str_encode((char *) s); dxcfg_string_free(s); jt++; assert(dxcfg_string_json(jt, &s) == true); str_unescape_quotes((char *) s); dxp->notes = str_encode((char *) s); dxcfg_string_free(s); if (*dxp->notes == '\0') { dxcfg_string_free(dxp->notes); dxp->notes = NULL; // because STREAM_DX leaves off argument to save space } jt++; //printf("dx.json %d %.2f 0x%x \"%s\" \"%s\"\n", i, dxp->freq, dxp->flags, dxp->ident, dxp->notes); if (jt->type == JSMN_OBJECT) { jt++; while (jt != end_tok && jt->type != JSMN_ARRAY) { assert(jt->size == 1); const char *id; assert(dxcfg_string_json(jt, &id) == true); jt++; int num; assert(dxcfg_int_json(jt, &num) == true); if (strcmp(id, "o") == 0) { dxp->offset = num; //printf("dx.json %d %s %d\n", i, id, num); } else { if (num) { dxcfg_flag(dxp, id); //printf("dx.json %d %s\n", i, id); } } dxcfg_string_free(id); jt++; } } } switch_dx_list(_dx_list, _dx_list_len); }