/* * 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 * . */ #include "file/keydbcfg.h" #include "util/strutl.h" #include #include static int print_digit_key_pair_enties(digit_key_pair_list *list); static int print_title_entries(title_entry_list *list); /* Function to print the entres in a digit key pair list */ static int print_digit_key_pair_enties(digit_key_pair_list *list) { if (!list) { printf("Error: No digit key pair list passed as parameter.\n"); return 0; } digit_key_pair_list *cursor = list; while (cursor) { if (!cursor->key_pair.key) break; printf(" %u - %s\n", cursor->key_pair.digit, cursor->key_pair.key); cursor = cursor->next; } return 1; } /* Function that prints all entries parsed from a config file */ static int print_title_entries(title_entry_list *list) { char tmp[256]; if (!list) { printf("Error: No title list passed as parameter.\n"); return 0; } title_entry_list *cursor = list; while (cursor) { if (!cursor->entry.discid) break; printf("DISCID: %s\n", str_print_hex(tmp, cursor->entry.discid, 20)); #if 0 printf(" Title: %s\n", cursor->entry.title); printf(" Date: %u-%u-%u\n", cursor->entry.date.year, cursor->entry.date.month, cursor->entry.date.day); #endif if (cursor->entry.mek) printf(" MEK: %s\n", cursor->entry.mek); if (cursor->entry.vid) printf(" VID: %s\n", cursor->entry.vid); #if 0 if (cursor->entry.bn) { printf(" BN:\n"); print_digit_key_pair_enties(cursor->entry.bn); } #endif if (cursor->entry.vuk) printf(" VUK: %s\n", cursor->entry.vuk); #if 0 if (cursor->entry.pak) { printf(" PAK:\n"); print_digit_key_pair_enties(cursor->entry.pak); } if (cursor->entry.tk) { printf(" TK:\n"); print_digit_key_pair_enties(cursor->entry.tk); } #endif if (cursor->entry.uk) { printf(" UK:\n"); print_digit_key_pair_enties(cursor->entry.uk); } cursor = cursor->next; } return 1; } /* Function to print certificate list from config file */ static int print_cert_list(cert_list *list) { char tmp[256]; printf("Available certificates:\n"); cert_list *cursor = list; while (cursor) { printf(" Host private key: %s\n", str_print_hex(tmp, cursor->host_priv_key, 20)); printf(" Host certificate: %s\n", str_print_hex(tmp, cursor->host_cert, 92)); printf("\n"); cursor = cursor->next; } printf("\n"); return 1; } /* Function to print config file */ static int print_config_file(config_file *cfgfile) { char tmp[256]; printf("Available device keys:\n"); dk_list *dkcursor = cfgfile->dkl; while (dkcursor) { printf(" Device key: %s\n", str_print_hex(tmp, dkcursor->key, 16)); printf(" Device node: %lu\n", dkcursor->node); dkcursor = dkcursor->next; } printf("\n"); printf("Available processing keys:\n"); pk_list *cursor = cfgfile->pkl; while (cursor) { printf(" %s\n", str_print_hex(tmp, cursor->key, 16)); cursor = cursor->next; } printf("\n"); int status1 = print_cert_list(cfgfile->host_cert_list); int status2 = print_title_entries(cfgfile->list); return status1 & status2; } /* main */ int main (int argc, char **argv) { /* suppress unused parameter warning */ if (argc) {} config_file *cfgfile = keydbcfg_new_config_file(); int retval = keydbcfg_parse_config(cfgfile, argv[1]); retval &= print_config_file(cfgfile); keydbcfg_config_file_close(cfgfile); if (!retval) return EXIT_FAILURE; return EXIT_SUCCESS; }