コード例 #1
0
ファイル: keystore.c プロジェクト: ctbrowser/nyx-modules
void keystore_save(struct keystore_t *keystore)
{
	g_assert(keystore);

	GKeyFile *keyfile = g_key_file_new();

	if (NULL != keystore->aes)
	{
		g_hash_table_foreach(keystore->aes, keystore_save_aeskey, keyfile);
	}

	if (NULL != keystore->rsa)
	{
		g_hash_table_foreach(keystore->rsa, keystore_save_rsakey, keyfile);
	}

	/* save to disk */

	if (0 == g_mkdir_with_parents(SECURITY_KEYSTORE_DIR, 0700))
	{
		gsize length = 0;
		gchar *keystore_data = g_key_file_to_data(keyfile, &length, NULL);

		if (!g_file_set_contents(SECURITY_KEYSTORE_PATH, keystore_data, length, NULL))
		{
			nyx_debug("%s: g_file_set_contents error", __FUNCTION__);
		}

		g_free(keystore_data);
	}

	g_key_file_free(keyfile);
}
コード例 #2
0
ファイル: keystore.c プロジェクト: ctbrowser/nyx-modules
nyx_error_t keystore_load(struct keystore_t *keystore)
{
	if (FALSE == g_file_test(SECURITY_KEYSTORE_PATH, G_FILE_TEST_EXISTS))
	{
		return NYX_ERROR_NONE;
	}

	GKeyFile *keyfile = g_key_file_new();
	GKeyFileFlags flags = G_KEY_FILE_NONE;

	if (!g_key_file_load_from_file(keyfile, SECURITY_KEYSTORE_PATH, flags, NULL))
	{
		nyx_debug("%s: g_key_file_load_from_file error", __FUNCTION__);
		g_key_file_free(keyfile);
		return NYX_ERROR_GENERIC;
	}

	int i;

	/* load aes keys */
	gchar **aes_keys = g_key_file_get_keys(keyfile, "aes", NULL, NULL);

	if (NULL != aes_keys)
	{
		for (i = 0; aes_keys[i] != NULL; ++i)
		{
			keystore_load_aeskey(keyfile, aes_keys[i], keystore);
		}

		g_strfreev(aes_keys);
	}

	/* load rsa keys */
	gchar **rsa_keys = g_key_file_get_keys(keyfile, "rsa", NULL, NULL);

	if (NULL != rsa_keys)
	{
		for (i = 0; rsa_keys[i] != NULL; ++i)
		{
			keystore_load_rsakey(keyfile, rsa_keys[i], keystore);
		}

		g_strfreev(rsa_keys);
	}

	g_key_file_free(keyfile);

	return NYX_ERROR_NONE;
}
コード例 #3
0
ファイル: touchpanel.c プロジェクト: Andolamin/nyx-modules
nyx_error_t nyx_module_close(nyx_device_t *d) {

	touchpanel_device_t* touchpanel_device = (touchpanel_device_t*) d;

	if (touchpanel_device->current_event_ptr) {
		touchpanel_release_event(d,
				(nyx_event_t*) touchpanel_device->current_event_ptr);
	}

	nyx_debug("Freeing touchpanel %p", d);

        deinit_gesture_state_machine();
	free(d);
 	
	if(touchpanel_event_fd >= 0) {
                close(touchpanel_event_fd);
		touchpanel_event_fd = -1;
	}


	return NYX_ERROR_NONE;
}
コード例 #4
0
ファイル: aes.c プロジェクト: ctbrowser/nyx-modules
nyx_error_t aes_crypt(int index, int encrypt,
                      nyx_security_aes_block_mode_t mode, const char *src, int srclen, char *dest,
                      int *destlen, int *ivlen)
{
	struct aes_key_t *aes_key = (struct aes_key_t *) keystore_key_lookup(
	                                keystore.aes, index);

	if (aes_key == NULL)
	{
		nyx_debug("%s: invalid key", __FUNCTION__);
		return NYX_ERROR_INVALID_VALUE;
	}

	const struct aes_algo_data_t *algo = aes_algo_data_lookup(aes_key->keylen,
	                                     mode);

	if (algo == NULL)
	{
		return NYX_ERROR_INVALID_VALUE;
	}

	nyx_error_t result = NYX_ERROR_NONE;

	/* IV saved at beginning of encryption buffer */
	unsigned char *iv = encrypt ? (unsigned char *)dest : (unsigned char *)src;

	if (encrypt)
	{
		*ivlen = AES_BLOCK_SIZE;

		/* skip IV */
		dest += AES_BLOCK_SIZE;

		/* generate IV */
		if (!RAND_bytes(iv, AES_BLOCK_SIZE))
		{
			return NYX_ERROR_GENERIC;
		}
	}
	else
	{
		g_assert(AES_BLOCK_SIZE == *ivlen);

		/* skip IV */
		src += *ivlen;
		srclen -= *ivlen;
	}

	EVP_CIPHER_CTX ctx;
	EVP_CIPHER_CTX_init(&ctx);
	EVP_CipherInit_ex(&ctx, algo->cipher_fun(), NULL, NULL, NULL, encrypt);
	EVP_CIPHER_CTX_set_key_length(&ctx, aes_key->keylen);
	EVP_CipherInit_ex(&ctx, NULL, NULL, aes_key->key, iv, encrypt);

	if (!EVP_CipherUpdate(&ctx, (unsigned char *)dest, destlen,
	                      (unsigned char *)src, srclen))
	{
		nyx_debug("EVP_CipherUpdate failed");
		ERR_print_errors_fp(stderr);
		result = NYX_ERROR_GENERIC;
		goto out;
	}

	int tmplen;

	if (!EVP_CipherFinal_ex(&ctx, (unsigned char *)dest + *destlen, &tmplen))
	{
		nyx_debug("EVP_CipherFinal_ex failed");
		ERR_print_errors_fp(stderr);
		result = NYX_ERROR_GENERIC;
		goto out;
	}

	*destlen += tmplen;

	if (encrypt)
	{
		*destlen += *ivlen;
	}

out:
	EVP_CIPHER_CTX_cleanup(&ctx);
	return result;
}