Example #1
0
bool load_passwords(void)
{
    SceUID fd;
    char linebuf[LINEBUF], path[PATH_MAX];
    rc4_key *pkey;

    STRCPY_S(path, scene_appdir());
    STRCAT_S(path, "password.lst");

    if (is_encrypted(path)) {
        rc4_prepare_key((u8 *) CRYPT_KEY, sizeof(CRYPT_KEY) - 1, &g_key);
        pkey = &g_key;
    } else {
        pkey = NULL;
    }

    fd = sceIoOpen(path, PSP_O_RDONLY, 0);

    if (fd < 0) {
        return false;
    }

    if (pkey != NULL) {
        sceIoLseek(fd, 4, PSP_SEEK_SET);
    }

    linebuf[sizeof(linebuf) - 1] = '\0';

    while (read_lines(fd, linebuf, sizeof(linebuf) - 1, pkey) >= 0) {
        add_password(linebuf);
    }

    sceIoClose(fd);

    return true;
}
Example #2
0
G_MODULE_EXPORT gboolean file_dialog_okay(GtkButton *button, gtk_widgets_t *data)
{
	gtk_widget_hide(data->open_dialog);
	gtk_widget_hide(data->save_dialog);

	gboolean en = TRUE;
	/*
	 * check the source file exists (and is a file)
	 */
	char *open_file = gtk_file_chooser_get_filename((GtkFileChooser *)data->open_dialog);
	if (!open_file)
		open_file = gui_file_hack_source;
	if (open_file) /* if at first you don’t succeed, try, try again */
		open_file = _filename_utf8(open_file);
	if (!open_file || !strlen(open_file))
		en = FALSE;
	else
	{
		struct stat s;
		stat(open_file, &s);
		char *dir = open_file;
		if (S_ISREG(s.st_mode))
			dir = basename(open_file);
		if (S_ISREG(s.st_mode) || S_ISDIR(s.st_mode))
		{
			gtk_label_set_text((GtkLabel *)data->open_file_label, basename(open_file));
			gtk_widget_show(data->open_file_image);
			/*
			 * quickly see if the file is encrypted already
			 */
			char *ptr = malloc(0);
			char *c = ptr;
			char *h = ptr;
			char *m = ptr;
			if ((_encrypted = is_encrypted(open_file, &c, &h, &m)))
				auto_select_algorithms(data, c, h, m);
			free(ptr);
			free(c);
			free(h);
			free(m);
			gtk_button_set_label((GtkButton *)data->encrypt_button, _encrypted ? LABEL_DECRYPT : LABEL_ENCRYPT);
			en = TRUE;
			if (cwd)
				free(cwd);
			cwd = strdup(dir);
		}
		else
			en = FALSE;
	}
	if (open_file)
		g_free(open_file);

	char *save_file = gtk_file_chooser_get_filename((GtkFileChooser *)data->save_dialog);
	if (!save_file)
		save_file = gui_file_hack_output;
	if (save_file)
		save_file = _filename_utf8(save_file);
	if (!save_file || !strlen(save_file))
		en = FALSE;
	else
	{
		struct stat s;
		stat(save_file, &s);
		/*
		 * if the destination exists, it has to be a regular file
		 */
		char *dir = save_file;
		if (S_ISREG(s.st_mode))
			dir = basename(save_file);
		if (errno == ENOENT || S_ISREG(s.st_mode) || S_ISDIR(s.st_mode))
		{
			gtk_label_set_text((GtkLabel *)data->save_file_label, basename(save_file));
			gtk_widget_show(data->save_file_image);
			if (cwd)
				free(cwd);
			cwd = strdup(dir);
		}
		else
			en = FALSE;
	}
	if (save_file)
		g_free(save_file);

	_files = en;

	if (_encrypted)
	{
		gtk_widget_set_sensitive(data->crypto_combo, FALSE);
		gtk_widget_set_sensitive(data->hash_combo, FALSE);
		gtk_widget_set_sensitive(data->mode_combo, FALSE);
		gtk_widget_set_sensitive(data->password_entry, en);
		gtk_widget_set_sensitive(data->key_button, en);
	}
	else
	{
		gtk_widget_set_sensitive(data->crypto_combo, en);
		gtk_widget_set_sensitive(data->hash_combo, en);
		gtk_widget_set_sensitive(data->mode_combo, en);
		if (en)
			algorithm_combo_callback(NULL, data);
	}

	return (void)button, TRUE;
}
Example #3
0
int decrypt_image(const char *src_file, const char *dst_file)
{
    int ret = -1;
    uint32_t md_ctx = 0, offset = 0;
    uint32_t fsize = 0;
    FILE *file = NULL;
    struct ion_buf_handle ionbuf;
    int smcmod_fd = -1;
    int qseecom_fd = -1;
    size_t read;

    memset(&ionbuf, 0, sizeof(ionbuf));
    ionbuf.ion_fd = -1;

    qseecom_fd = open("/dev/qseecom", O_RDWR);
    if (qseecom_fd < 0) {
        fprintf(stderr, "Failed to open /dev/qseecom device (%s)\n",
                strerror(errno));
        goto exit;
    }

    smcmod_fd = open("/dev/smcmod", O_RDWR);
    if (smcmod_fd < 0) {
        fprintf(stderr, "Failed to open /dev/smcmod device (%s)\n",
                strerror(errno));
        goto exit;
    }

    file = fopen(src_file, "rb");
    if (!file) {
        fprintf(stderr, "Failed to open %s (%s)\n", src_file, strerror(errno));
        goto exit;
    }

    fseek(file, 0, SEEK_END);
    fsize = ftell(file);
    fseek(file, 0, SEEK_SET);

    ret = ion_memalloc(&ionbuf, fsize, ION_PIL1_HEAP_ID);
    if (ret)
        goto exit;

    read = fread(ionbuf.buffer, fsize, 1, file);
    if (read != 1) {
        fprintf(stderr, "Failed to read %s (%s)\n", src_file, strerror(errno));
        ret = -errno;
        goto exit;
    }

    ret = ion_buffer_clean_inval(&ionbuf, ION_IOC_CLEAN_INV_CACHES);
    if (ret < 0)
        goto exit;

    ret = ioctl(qseecom_fd, QSEECOM_IOCTL_PERF_ENABLE_REQ);
    if (ret < 0)
        goto exit;

    ret = is_encrypted(smcmod_fd, &ionbuf, fsize, &md_ctx, &offset);
    if (ret < 0)
        goto exit;

    if (ret == 1) {
        fprintf(stdout, "decrypting %s ...\n", src_file);
        ret = decrypt(smcmod_fd, &ionbuf, fsize, md_ctx, offset);
        if (ret < 0)
            goto exit;

        ion_buffer_clean_inval(&ionbuf, ION_IOC_INV_CACHES);

        ret = save_file(dst_file, ionbuf.buffer + offset, fsize - offset);
        if (ret < 0)
            goto exit;

        fprintf(stdout, "decrypting done!\n");
    }

exit:
    if (ionbuf.ion_fd >= 0)
        ion_memfree(&ionbuf);

    if (qseecom_fd >= 0) {
        ioctl(qseecom_fd, QSEECOM_IOCTL_PERF_DISABLE_REQ);
        close(qseecom_fd);
    }

    if (smcmod_fd >= 0)
        close(smcmod_fd);

    if (file)
        fclose(file);

    return ret;
}