/* -*- mode:C; c-file-style: "bsd" -*- */
/*
 * Copyright (c) 2013 Yubico AB
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are
 * met:
 *
 *     * Redistributions of source code must retain the above copyright
 *       notice, this list of conditions and the following disclaimer.
 *
 *     * Redistributions in binary form must reproduce the above
 *       copyright notice, this list of conditions and the following
 *       disclaimer in the documentation and/or other materials provided
 *       with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "ykpers_lcl.h"

struct map_st _ticket_flags_map[] = {
	{ TKTFLAG_TAB_FIRST,	"TAB_FIRST",	"tabFirst",	capability_has_ticket_mods,	MODE_OUTPUT,	ykp_set_tktflag_TAB_FIRST },
	{ TKTFLAG_APPEND_TAB1,	"APPEND_TAB1",	"tabBetween",	capability_has_ticket_mods,	MODE_OUTPUT,	ykp_set_tktflag_APPEND_TAB1 },
	{ TKTFLAG_APPEND_TAB2,	"APPEND_TAB2",	"tabLast",	capability_has_ticket_mods,	MODE_OUTPUT,	ykp_set_tktflag_APPEND_TAB2 },
	{ TKTFLAG_APPEND_DELAY1,"APPEND_DELAY1","appendDelay1",	capability_has_ticket_mods,	MODE_OUTPUT,	ykp_set_tktflag_APPEND_DELAY1 },
	{ TKTFLAG_APPEND_DELAY2,"APPEND_DELAY2","appendDelay2",	capability_has_ticket_mods,	MODE_OUTPUT,	ykp_set_tktflag_APPEND_DELAY2 },
	{ TKTFLAG_APPEND_CR,	"APPEND_CR",	"appendCR",	capability_has_ticket_mods,	MODE_OUTPUT,	ykp_set_tktflag_APPEND_CR },
	{ TKTFLAG_PROTECT_CFG2,	"PROTECT_CFG2",	"protectSecond",capability_has_slot_two,	MODE_ALL,	ykp_set_tktflag_PROTECT_CFG2 },
	{ TKTFLAG_OATH_HOTP,	"OATH_HOTP",	0,		capability_has_oath,		MODE_OATH_HOTP,	ykp_set_tktflag_OATH_HOTP },
	{ TKTFLAG_CHAL_RESP,	"CHAL_RESP",	0,		capability_has_chal_resp,	MODE_CHAL_RESP, ykp_set_tktflag_CHAL_RESP },
	{ 0, 0, 0, 0, 0, 0 }
};

struct map_st _config_flags_map[] = {
	{ CFGFLAG_CHAL_YUBICO,		"CHAL_YUBICO",		0,		capability_has_chal_resp,	MODE_CHAL_YUBICO,	ykp_set_cfgflag_CHAL_YUBICO },
	{ CFGFLAG_CHAL_HMAC,		"CHAL_HMAC",		0,		capability_has_chal_resp,	MODE_CHAL_HMAC,		ykp_set_cfgflag_CHAL_HMAC },
	{ CFGFLAG_HMAC_LT64,		"HMAC_LT64",		"hmacLt64",	capability_has_chal_resp,	MODE_CHAL_HMAC,		ykp_set_cfgflag_HMAC_LT64 },
	{ CFGFLAG_CHAL_BTN_TRIG,	"CHAL_BTN_TRIG",	"buttonReqd",	capability_has_chal_resp,	MODE_CHAL_RESP,		ykp_set_cfgflag_CHAL_BTN_TRIG },
	{ CFGFLAG_OATH_HOTP8,		"OATH_HOTP8",		0,		capability_has_oath,		MODE_OATH_HOTP,		ykp_set_cfgflag_OATH_HOTP8 },
	{ CFGFLAG_OATH_FIXED_MODHEX1,	"OATH_FIXED_MODHEX1",	0,		capability_has_oath,		MODE_OATH_HOTP,		ykp_set_cfgflag_OATH_FIXED_MODHEX1 },
	{ CFGFLAG_OATH_FIXED_MODHEX2,	"OATH_FIXED_MODHEX2",	0,		capability_has_oath,		MODE_OATH_HOTP,		ykp_set_cfgflag_OATH_FIXED_MODHEX2 },
	{ CFGFLAG_OATH_FIXED_MODHEX,	"OATH_FIXED_MODHEX",	0,		capability_has_oath,		MODE_OATH_HOTP,		ykp_set_cfgflag_OATH_FIXED_MODHEX },
	{ CFGFLAG_SEND_REF,		"SEND_REF",		"sendRef",	capability_has_ticket_mods,	MODE_OUTPUT,		ykp_set_cfgflag_SEND_REF },
	{ CFGFLAG_TICKET_FIRST,		"TICKET_FIRST",		0,		capability_has_ticket_first,	MODE_OUTPUT,		ykp_set_cfgflag_TICKET_FIRST },
	{ CFGFLAG_PACING_10MS,		"PACING_10MS",		"pacing10ms",	capability_has_ticket_mods,	MODE_OUTPUT,		ykp_set_cfgflag_PACING_10MS },
	{ CFGFLAG_PACING_20MS,		"PACING_20MS",		"pacing20ms",	capability_has_ticket_mods,	MODE_OUTPUT,		ykp_set_cfgflag_PACING_20MS },
	{ CFGFLAG_ALLOW_HIDTRIG,	"ALLOW_HIDTRIG",	0,		capability_has_hidtrig,		MODE_OUTPUT,		ykp_set_cfgflag_ALLOW_HIDTRIG },
	{ CFGFLAG_STATIC_TICKET,        "STATIC_TICKET",        "staticTicket", capability_has_static,		MODE_STATIC_TICKET,     ykp_set_cfgflag_STATIC_TICKET },
	{ CFGFLAG_SHORT_TICKET,		"SHORT_TICKET",		"shortTicket",	capability_has_static_extras,	MODE_OUTPUT,		ykp_set_cfgflag_SHORT_TICKET },
	{ CFGFLAG_STRONG_PW1,		"STRONG_PW1",		"strongPw1",	capability_has_static_extras,	MODE_STATIC_TICKET,	ykp_set_cfgflag_STRONG_PW1 },
	{ CFGFLAG_STRONG_PW2,		"STRONG_PW2",		"strongPw2",	capability_has_static_extras,	MODE_STATIC_TICKET,	ykp_set_cfgflag_STRONG_PW2 },
	{ CFGFLAG_MAN_UPDATE,		"MAN_UPDATE",		"manUpdate",	capability_has_static_extras,	MODE_STATIC_TICKET,	ykp_set_cfgflag_MAN_UPDATE },
	{ 0, 0, 0, 0, 0, 0 }
};

struct map_st _extended_flags_map[] = {
	{ EXTFLAG_SERIAL_BTN_VISIBLE,	"SERIAL_BTN_VISIBLE",	"serialBtnVisible",	capability_has_serial,		MODE_ALL,	ykp_set_extflag_SERIAL_BTN_VISIBLE },
	{ EXTFLAG_SERIAL_USB_VISIBLE,	"SERIAL_USB_VISIBLE",	"serialUsbVisible",	capability_has_serial,		MODE_ALL,	ykp_set_extflag_SERIAL_USB_VISIBLE },
	{ EXTFLAG_SERIAL_API_VISIBLE,	"SERIAL_API_VISIBLE",	"serialApiVisible",	capability_has_serial_api,	MODE_ALL,	ykp_set_extflag_SERIAL_API_VISIBLE },
	{ EXTFLAG_USE_NUMERIC_KEYPAD,	"USE_NUMERIC_KEYPAD",	"useNumericKeypad",	capability_has_numeric,		MODE_ALL,	ykp_set_extflag_USE_NUMERIC_KEYPAD },
	{ EXTFLAG_FAST_TRIG,		"FAST_TRIG",		"fastTrig",		capability_has_fast,		MODE_ALL,	ykp_set_extflag_FAST_TRIG },
	{ EXTFLAG_ALLOW_UPDATE,		"ALLOW_UPDATE",		"allowUpdate",		capability_has_update,		MODE_ALL,	ykp_set_extflag_ALLOW_UPDATE },
	{ EXTFLAG_DORMANT,		"DORMANT",		"dormant",		capability_has_dormant,		MODE_ALL,	ykp_set_extflag_DORMANT },
	{ EXTFLAG_LED_INV,		"LED_INV",		"ledInverted",		capability_has_led_inv,		MODE_ALL,	ykp_set_extflag_LED_INV },
	{ 0, 0, 0, 0, 0, 0 }
};


struct map_st _modes_map[] = {
	{ MODE_OATH_HOTP,	0,	"oathHOTP",	0, 0, 0 },
	{ MODE_CHAL_HMAC,	0,	"hmacCR",	0, 0, 0 },
	{ MODE_STATIC_TICKET,	0,	"staticTicket",	0, 0, 0 },
	{ MODE_CHAL_YUBICO,	0,	"yubicoCR",	0, 0, 0 },
	{ MODE_OTP_YUBICO,	0,	"yubicoOTP",	0, 0, 0 },
	{ 0, 0, 0, 0, 0, 0 }
};
