/*
* This file is part of libaacs
* Copyright (C) 2010 gates
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library. If not, see
* .
*/
#ifndef KEYDBCFG_H
#define KEYDBCFG_H
#include "util/attributes.h"
#include
/* struct holding a digit and key pair for - entries */
typedef struct digit_key_pair_t digit_key_pair;
struct digit_key_pair_t
{
unsigned int digit;
char *key;
};
/* list of digit_key_pair struct used in title entry */
typedef struct digit_key_pair_list_t digit_key_pair_list;
struct digit_key_pair_list_t
{
digit_key_pair key_pair;
digit_key_pair_list *next;
};
/* date entry struct */
#if 0
typedef struct date_entry_t date_entry;
struct date_entry_t
{
unsigned int year;
unsigned int month;
unsigned int day;
};
#endif
/* dk entry */
typedef struct dk_entry dk_list;
struct dk_entry
{
uint8_t key[16];
unsigned long node;
dk_list *next;
/* optional, can be calculated */
uint32_t uv;
uint8_t u_mask_shift;
};
/* pk entry */
typedef struct pk_entry pk_list;
struct pk_entry
{
uint8_t key[16];
pk_list *next;
};
/* certificate entry */
typedef struct cert_entry cert_list;
struct cert_entry
{
uint8_t host_priv_key[20];
uint8_t host_cert[92];
cert_list *next;
};
/* title entry struct */
typedef struct title_entry_t title_entry;
struct title_entry_t
{
uint8_t discid[20];
//char *title;
//date_entry date;
char *mek;
char *vid;
//digit_key_pair_list *bn;
char *vuk;
//digit_key_pair_list *pak;
//digit_key_pair_list *tk;
digit_key_pair_list *uk;
};
/* main struct for title entries, held in a list structure */
typedef struct title_entry_list_t title_entry_list;
struct title_entry_list_t
{
title_entry entry;
title_entry_list *next;
};
/* struct representing the contents of a config file */
typedef struct config_file_t config_file;
struct config_file_t
{
dk_list *dkl;
pk_list *pkl;
cert_list *host_cert_list;
title_entry_list *list;
};
/* Functions used throughout the parser */
BD_PRIVATE int keydbcfg_parse_config(config_file *cfgfile, const char *path);
BD_PRIVATE config_file *keydbcfg_new_config_file(void);
BD_PRIVATE int keydbcfg_config_file_close(config_file *cfgfile);
/* */
BD_PRIVATE config_file *keydbcfg_config_load(const char *configfile_path);
BD_PRIVATE int keycache_save(const char *type, const uint8_t *disc_id,
const uint8_t *key, unsigned int len);
BD_PRIVATE int keycache_find(const char *type, const uint8_t *disc_id,
uint8_t *key, unsigned int len);
BD_PRIVATE int cache_get(const char *name, uint32_t *version, uint32_t *len, void *buf); /* use buf=NULL to get version and size */
BD_PRIVATE int cache_save(const char *name, uint32_t version, const void *data, uint32_t len);
BD_PRIVATE int cache_remove(const char *name);
BD_PRIVATE int config_get(const char *name, uint32_t *len, void *buf); /* use buf=NULL to get size */
BD_PRIVATE int config_save(const char *name, const void *data, uint32_t len);
#endif