/*
 * Copyright 2018-2021 The OpenSSL Project Authors. All Rights Reserved.
 *
 * Licensed under the Apache License 2.0 (the "License").  You may not use
 * this file except in compliance with the License.  You can obtain a copy
 * in the file LICENSE in the source distribution or at
 * https://www.openssl.org/source/license.html
 */
#ifndef OSSL_APPS_OPT_H
#define OSSL_APPS_OPT_H

#include <sys/types.h>
#include <openssl/e_os2.h>
#include <openssl/types.h>
#include <stdarg.h>

#define OPT_COMMON OPT_ERR = -1, OPT_EOF = 0, OPT_HELP

/*
 * Common verification options.
 */
#define OPT_V_ENUM                                                      \
    OPT_V__FIRST = 2000,                                                \
    OPT_V_POLICY, OPT_V_PURPOSE, OPT_V_VERIFY_NAME, OPT_V_VERIFY_DEPTH, \
    OPT_V_ATTIME, OPT_V_VERIFY_HOSTNAME, OPT_V_VERIFY_EMAIL,            \
    OPT_V_VERIFY_IP, OPT_V_IGNORE_CRITICAL, OPT_V_ISSUER_CHECKS,        \
    OPT_V_CRL_CHECK, OPT_V_CRL_CHECK_ALL, OPT_V_POLICY_CHECK,           \
    OPT_V_EXPLICIT_POLICY, OPT_V_INHIBIT_ANY, OPT_V_INHIBIT_MAP,        \
    OPT_V_X509_STRICT, OPT_V_EXTENDED_CRL, OPT_V_USE_DELTAS,            \
    OPT_V_POLICY_PRINT, OPT_V_CHECK_SS_SIG, OPT_V_TRUSTED_FIRST,        \
    OPT_V_SUITEB_128_ONLY, OPT_V_SUITEB_128, OPT_V_SUITEB_192,          \
    OPT_V_PARTIAL_CHAIN, OPT_V_NO_ALT_CHAINS, OPT_V_NO_CHECK_TIME,      \
    OPT_V_VERIFY_AUTH_LEVEL, OPT_V_ALLOW_PROXY_CERTS,                   \
    OPT_V__LAST

#define OPT_V_OPTIONS                                                                      \
    OPT_SECTION("Validation"),                                                             \
        { "policy", OPT_V_POLICY, 's', "adds policy to the acceptable policy set" },       \
        { "purpose", OPT_V_PURPOSE, 's',                                                   \
            "certificate chain purpose" },                                                 \
        { "verify_name", OPT_V_VERIFY_NAME, 's', "verification policy name" },             \
        { "verify_depth", OPT_V_VERIFY_DEPTH, 'n',                                         \
            "chain depth limit" },                                                         \
        { "auth_level", OPT_V_VERIFY_AUTH_LEVEL, 'n',                                      \
            "chain authentication security level" },                                       \
        { "attime", OPT_V_ATTIME, 'M', "verification epoch time" },                        \
        { "verify_hostname", OPT_V_VERIFY_HOSTNAME, 's',                                   \
            "expected peer hostname" },                                                    \
        { "verify_email", OPT_V_VERIFY_EMAIL, 's',                                         \
            "expected peer email" },                                                       \
        { "verify_ip", OPT_V_VERIFY_IP, 's',                                               \
            "expected peer IP address" },                                                  \
        { "ignore_critical", OPT_V_IGNORE_CRITICAL, '-',                                   \
            "permit unhandled critical extensions" },                                      \
        { "issuer_checks", OPT_V_ISSUER_CHECKS, '-', "(deprecated)" },                     \
        { "crl_check", OPT_V_CRL_CHECK, '-', "check leaf certificate revocation" },        \
        { "crl_check_all", OPT_V_CRL_CHECK_ALL, '-', "check full chain revocation" },      \
        { "policy_check", OPT_V_POLICY_CHECK, '-', "perform rfc5280 policy checks" },      \
        { "explicit_policy", OPT_V_EXPLICIT_POLICY, '-',                                   \
            "set policy variable require-explicit-policy" },                               \
        { "inhibit_any", OPT_V_INHIBIT_ANY, '-',                                           \
            "set policy variable inhibit-any-policy" },                                    \
        { "inhibit_map", OPT_V_INHIBIT_MAP, '-',                                           \
            "set policy variable inhibit-policy-mapping" },                                \
        { "x509_strict", OPT_V_X509_STRICT, '-',                                           \
            "disable certificate compatibility work-arounds" },                            \
        { "extended_crl", OPT_V_EXTENDED_CRL, '-',                                         \
            "enable extended CRL features" },                                              \
        { "use_deltas", OPT_V_USE_DELTAS, '-',                                             \
            "use delta CRLs" },                                                            \
        { "policy_print", OPT_V_POLICY_PRINT, '-',                                         \
            "print policy processing diagnostics" },                                       \
        { "check_ss_sig", OPT_V_CHECK_SS_SIG, '-',                                         \
            "check root CA self-signatures" },                                             \
        { "trusted_first", OPT_V_TRUSTED_FIRST, '-',                                       \
            "search trust store first (default)" },                                        \
        { "suiteB_128_only", OPT_V_SUITEB_128_ONLY, '-', "Suite B 128-bit-only mode" },    \
        { "suiteB_128", OPT_V_SUITEB_128, '-',                                             \
            "Suite B 128-bit mode allowing 192-bit algorithms" },                          \
        { "suiteB_192", OPT_V_SUITEB_192, '-', "Suite B 192-bit-only mode" },              \
        { "partial_chain", OPT_V_PARTIAL_CHAIN, '-',                                       \
            "accept chains anchored by intermediate trust-store CAs" },                    \
        { "no_alt_chains", OPT_V_NO_ALT_CHAINS, '-', "(deprecated)" },                     \
        { "no_check_time", OPT_V_NO_CHECK_TIME, '-', "ignore certificate validity time" }, \
        { "allow_proxy_certs", OPT_V_ALLOW_PROXY_CERTS, '-', "allow the use of proxy certificates" }

#define OPT_V_CASES               \
    OPT_V__FIRST:                 \
    case OPT_V__LAST:             \
    break;                        \
    case OPT_V_POLICY:            \
    case OPT_V_PURPOSE:           \
    case OPT_V_VERIFY_NAME:       \
    case OPT_V_VERIFY_DEPTH:      \
    case OPT_V_VERIFY_AUTH_LEVEL: \
    case OPT_V_ATTIME:            \
    case OPT_V_VERIFY_HOSTNAME:   \
    case OPT_V_VERIFY_EMAIL:      \
    case OPT_V_VERIFY_IP:         \
    case OPT_V_IGNORE_CRITICAL:   \
    case OPT_V_ISSUER_CHECKS:     \
    case OPT_V_CRL_CHECK:         \
    case OPT_V_CRL_CHECK_ALL:     \
    case OPT_V_POLICY_CHECK:      \
    case OPT_V_EXPLICIT_POLICY:   \
    case OPT_V_INHIBIT_ANY:       \
    case OPT_V_INHIBIT_MAP:       \
    case OPT_V_X509_STRICT:       \
    case OPT_V_EXTENDED_CRL:      \
    case OPT_V_USE_DELTAS:        \
    case OPT_V_POLICY_PRINT:      \
    case OPT_V_CHECK_SS_SIG:      \
    case OPT_V_TRUSTED_FIRST:     \
    case OPT_V_SUITEB_128_ONLY:   \
    case OPT_V_SUITEB_128:        \
    case OPT_V_SUITEB_192:        \
    case OPT_V_PARTIAL_CHAIN:     \
    case OPT_V_NO_ALT_CHAINS:     \
    case OPT_V_NO_CHECK_TIME:     \
    case OPT_V_ALLOW_PROXY_CERTS

/*
 * Common "extended validation" options.
 */
#define OPT_X_ENUM                                         \
    OPT_X__FIRST = 1000,                                   \
    OPT_X_KEY, OPT_X_CERT, OPT_X_CHAIN, OPT_X_CHAIN_BUILD, \
    OPT_X_CERTFORM, OPT_X_KEYFORM,                         \
    OPT_X__LAST

#define OPT_X_OPTIONS                                                        \
    OPT_SECTION("Extended certificate"),                                     \
        { "xkey", OPT_X_KEY, '<', "key for Extended certificates" },         \
        { "xcert", OPT_X_CERT, '<', "cert for Extended certificates" },      \
        { "xchain", OPT_X_CHAIN, '<', "chain for Extended certificates" },   \
        { "xchain_build", OPT_X_CHAIN_BUILD, '-',                            \
            "build certificate chain for the extended certificates" },       \
        { "xcertform", OPT_X_CERTFORM, 'F',                                  \
            "format of Extended certificate (PEM/DER/P12); has no effect" }, \
        { "xkeyform", OPT_X_KEYFORM, 'F',                                    \
            "format of Extended certificate's key (DER/PEM/P12); has no effect" }

#define OPT_X_CASES         \
    OPT_X__FIRST:           \
    case OPT_X__LAST:       \
    break;                  \
    case OPT_X_KEY:         \
    case OPT_X_CERT:        \
    case OPT_X_CHAIN:       \
    case OPT_X_CHAIN_BUILD: \
    case OPT_X_CERTFORM:    \
    case OPT_X_KEYFORM

/*
 * Common SSL options.
 * Any changes here must be coordinated with ../ssl/ssl_conf.c
 */
#define OPT_S_ENUM                                                    \
    OPT_S__FIRST = 3000,                                              \
    OPT_S_NOSSL3, OPT_S_NOTLS1, OPT_S_NOTLS1_1, OPT_S_NOTLS1_2,       \
    OPT_S_NOTLS1_3, OPT_S_BUGS, OPT_S_NO_COMP, OPT_S_NOTICKET,        \
    OPT_S_SERVERPREF, OPT_S_LEGACYRENEG, OPT_S_CLIENTRENEG,           \
    OPT_S_LEGACYCONN,                                                 \
    OPT_S_ONRESUMP, OPT_S_NOLEGACYCONN, OPT_S_ALLOW_NO_DHE_KEX,       \
    OPT_S_PRIORITIZE_CHACHA,                                          \
    OPT_S_STRICT, OPT_S_SIGALGS, OPT_S_CLIENTSIGALGS, OPT_S_GROUPS,   \
    OPT_S_CURVES, OPT_S_NAMEDCURVE, OPT_S_CIPHER, OPT_S_CIPHERSUITES, \
    OPT_S_RECORD_PADDING, OPT_S_DEBUGBROKE, OPT_S_COMP,               \
    OPT_S_MINPROTO, OPT_S_MAXPROTO,                                   \
    OPT_S_NO_RENEGOTIATION, OPT_S_NO_MIDDLEBOX, OPT_S_NO_ETM, OPT_S__LAST

#define OPT_S_OPTIONS                                                                               \
    OPT_SECTION("TLS/SSL"),                                                                         \
        { "no_ssl3", OPT_S_NOSSL3, '-', "Just disable SSLv3" },                                     \
        { "no_tls1", OPT_S_NOTLS1, '-', "Just disable TLSv1" },                                     \
        { "no_tls1_1", OPT_S_NOTLS1_1, '-', "Just disable TLSv1.1" },                               \
        { "no_tls1_2", OPT_S_NOTLS1_2, '-', "Just disable TLSv1.2" },                               \
        { "no_tls1_3", OPT_S_NOTLS1_3, '-', "Just disable TLSv1.3" },                               \
        { "bugs", OPT_S_BUGS, '-', "Turn on SSL bug compatibility" },                               \
        { "no_comp", OPT_S_NO_COMP, '-', "Disable SSL/TLS compression (default)" },                 \
        { "comp", OPT_S_COMP, '-', "Use SSL/TLS-level compression" },                               \
        { "no_ticket", OPT_S_NOTICKET, '-',                                                         \
            "Disable use of TLS session tickets" },                                                 \
        { "serverpref", OPT_S_SERVERPREF, '-', "Use server's cipher preferences" },                 \
        { "legacy_renegotiation", OPT_S_LEGACYRENEG, '-',                                           \
            "Enable use of legacy renegotiation (dangerous)" },                                     \
        { "client_renegotiation", OPT_S_CLIENTRENEG, '-',                                           \
            "Allow client-initiated renegotiation" },                                               \
        { "no_renegotiation", OPT_S_NO_RENEGOTIATION, '-',                                          \
            "Disable all renegotiation." },                                                         \
        { "legacy_server_connect", OPT_S_LEGACYCONN, '-',                                           \
            "Allow initial connection to servers that don't support RI" },                          \
        { "no_resumption_on_reneg", OPT_S_ONRESUMP, '-',                                            \
            "Disallow session resumption on renegotiation" },                                       \
        { "no_legacy_server_connect", OPT_S_NOLEGACYCONN, '-',                                      \
            "Disallow initial connection to servers that don't support RI" },                       \
        { "allow_no_dhe_kex", OPT_S_ALLOW_NO_DHE_KEX, '-',                                          \
            "In TLSv1.3 allow non-(ec)dhe based key exchange on resumption" },                      \
        { "prioritize_chacha", OPT_S_PRIORITIZE_CHACHA, '-',                                        \
            "Prioritize ChaCha ciphers when preferred by clients" },                                \
        { "strict", OPT_S_STRICT, '-',                                                              \
            "Enforce strict certificate checks as per TLS standard" },                              \
        { "sigalgs", OPT_S_SIGALGS, 's',                                                            \
            "Signature algorithms to support (colon-separated list)" },                             \
        { "client_sigalgs", OPT_S_CLIENTSIGALGS, 's',                                               \
            "Signature algorithms to support for client certificate"                                \
            " authentication (colon-separated list)" },                                             \
        { "groups", OPT_S_GROUPS, 's',                                                              \
            "Groups to advertise (colon-separated list)" },                                         \
        { "curves", OPT_S_CURVES, 's',                                                              \
            "Groups to advertise (colon-separated list)" },                                         \
        { "named_curve", OPT_S_NAMEDCURVE, 's',                                                     \
            "Elliptic curve used for ECDHE (server-side only)" },                                   \
        { "cipher", OPT_S_CIPHER, 's', "Specify TLSv1.2 and below cipher list to be used" },        \
        { "ciphersuites", OPT_S_CIPHERSUITES, 's', "Specify TLSv1.3 ciphersuites to be used" },     \
        { "min_protocol", OPT_S_MINPROTO, 's', "Specify the minimum protocol version to be used" }, \
        { "max_protocol", OPT_S_MAXPROTO, 's', "Specify the maximum protocol version to be used" }, \
        { "record_padding", OPT_S_RECORD_PADDING, 's',                                              \
            "Block size to pad TLS 1.3 records to." },                                              \
        { "debug_broken_protocol", OPT_S_DEBUGBROKE, '-',                                           \
            "Perform all sorts of protocol violations for testing purposes" },                      \
        { "no_middlebox", OPT_S_NO_MIDDLEBOX, '-',                                                  \
            "Disable TLSv1.3 middlebox compat mode" },                                              \
        { "no_etm", OPT_S_NO_ETM, '-',                                                              \
            "Disable Encrypt-then-Mac extension" }

#define OPT_S_CASES               \
    OPT_S__FIRST:                 \
    case OPT_S__LAST:             \
    break;                        \
    case OPT_S_NOSSL3:            \
    case OPT_S_NOTLS1:            \
    case OPT_S_NOTLS1_1:          \
    case OPT_S_NOTLS1_2:          \
    case OPT_S_NOTLS1_3:          \
    case OPT_S_BUGS:              \
    case OPT_S_NO_COMP:           \
    case OPT_S_COMP:              \
    case OPT_S_NOTICKET:          \
    case OPT_S_SERVERPREF:        \
    case OPT_S_LEGACYRENEG:       \
    case OPT_S_CLIENTRENEG:       \
    case OPT_S_LEGACYCONN:        \
    case OPT_S_ONRESUMP:          \
    case OPT_S_NOLEGACYCONN:      \
    case OPT_S_ALLOW_NO_DHE_KEX:  \
    case OPT_S_PRIORITIZE_CHACHA: \
    case OPT_S_STRICT:            \
    case OPT_S_SIGALGS:           \
    case OPT_S_CLIENTSIGALGS:     \
    case OPT_S_GROUPS:            \
    case OPT_S_CURVES:            \
    case OPT_S_NAMEDCURVE:        \
    case OPT_S_CIPHER:            \
    case OPT_S_CIPHERSUITES:      \
    case OPT_S_RECORD_PADDING:    \
    case OPT_S_NO_RENEGOTIATION:  \
    case OPT_S_MINPROTO:          \
    case OPT_S_MAXPROTO:          \
    case OPT_S_DEBUGBROKE:        \
    case OPT_S_NO_MIDDLEBOX:      \
    case OPT_S_NO_ETM

#define IS_NO_PROT_FLAG(o)                                         \
    (o == OPT_S_NOSSL3 || o == OPT_S_NOTLS1 || o == OPT_S_NOTLS1_1 \
        || o == OPT_S_NOTLS1_2 || o == OPT_S_NOTLS1_3)

/*
 * Random state options.
 */
#define OPT_R_ENUM \
    OPT_R__FIRST = 1500, OPT_R_RAND, OPT_R_WRITERAND, OPT_R__LAST

#define OPT_R_OPTIONS                                                                           \
    OPT_SECTION("Random state"),                                                                \
        { "rand", OPT_R_RAND, 's', "Load the given file(s) into the random number generator" }, \
        { "writerand", OPT_R_WRITERAND, '>', "Write random data to the specified file" }

#define OPT_R_CASES   \
    OPT_R__FIRST:     \
    case OPT_R__LAST: \
    break;            \
    case OPT_R_RAND:  \
    case OPT_R_WRITERAND

/*
 * Provider options.
 */
#define OPT_PROV_ENUM                                              \
    OPT_PROV__FIRST = 1600,                                        \
    OPT_PROV_PROVIDER, OPT_PROV_PROVIDER_PATH, OPT_PROV_PROPQUERY, \
    OPT_PROV__LAST

#define OPT_CONFIG_OPTION \
    { "config", OPT_CONFIG, '<', "Load a configuration file (this may load modules)" }

#define OPT_PROV_OPTIONS                                                                                                         \
    OPT_SECTION("Provider"),                                                                                                     \
        { "provider-path", OPT_PROV_PROVIDER_PATH, 's', "Provider load path (must be before 'provider' argument if required)" }, \
        { "provider", OPT_PROV_PROVIDER, 's', "Provider to load (can be specified multiple times)" },                            \
        { "propquery", OPT_PROV_PROPQUERY, 's', "Property query used when fetching algorithms" }

#define OPT_PROV_CASES           \
    OPT_PROV__FIRST:             \
    case OPT_PROV__LAST:         \
    break;                       \
    case OPT_PROV_PROVIDER:      \
    case OPT_PROV_PROVIDER_PATH: \
    case OPT_PROV_PROPQUERY

/*
 * Option parsing.
 */
extern const char OPT_HELP_STR[];
extern const char OPT_MORE_STR[];
extern const char OPT_SECTION_STR[];
extern const char OPT_PARAM_STR[];

typedef struct options_st {
    const char *name;
    int retval;
    /*
     * value type: - no value (also the value zero), n number, p positive
     * number, u unsigned, l long, s string, < input file, > output file,
     * f any format, F der/pem format, E der/pem/engine format identifier.
     * l, n and u include zero; p does not.
     */
    int valtype;
    const char *helpstr;
} OPTIONS;
/* Special retval values: */
#define OPT_PARAM 0 /* same as OPT_EOF usually defined in apps */
#define OPT_DUP -2 /* marks duplicate occurrence of option in help output */

/*
 * A string/int pairing; widely use for option value lookup, hence the
 * name OPT_PAIR. But that name is misleading in s_cb.c, so we also use
 * the "generic" name STRINT_PAIR.
 */
typedef struct string_int_pair_st {
    const char *name;
    int retval;
} OPT_PAIR, STRINT_PAIR;

/* Flags to pass into opt_format; see FORMAT_xxx, below. */
#define OPT_FMT_PEMDER (1L << 1)
#define OPT_FMT_PKCS12 (1L << 2)
#define OPT_FMT_SMIME (1L << 3)
#define OPT_FMT_ENGINE (1L << 4)
#define OPT_FMT_MSBLOB (1L << 5)
/* (1L <<  6) was OPT_FMT_NETSCAPE, but wasn't used */
#define OPT_FMT_NSS (1L << 7)
#define OPT_FMT_TEXT (1L << 8)
#define OPT_FMT_HTTP (1L << 9)
#define OPT_FMT_PVK (1L << 10)
#define OPT_FMT_PDE (OPT_FMT_PEMDER | OPT_FMT_ENGINE)
#define OPT_FMT_PDS (OPT_FMT_PEMDER | OPT_FMT_SMIME)
#define OPT_FMT_ANY ( \
    OPT_FMT_PEMDER | OPT_FMT_PKCS12 | OPT_FMT_SMIME | OPT_FMT_ENGINE | OPT_FMT_MSBLOB | OPT_FMT_NSS | OPT_FMT_TEXT | OPT_FMT_HTTP | OPT_FMT_PVK)

/* Divide options into sections when displaying usage */
#define OPT_SECTION(sec) { OPT_SECTION_STR, 1, '-', sec " options:\n" }
#define OPT_PARAMETERS() { OPT_PARAM_STR, 1, '-', "Parameters:\n" }

const char *opt_path_end(const char *filename);
char *opt_init(int ac, char **av, const OPTIONS *o);
char *opt_progname(const char *argv0);
char *opt_appname(const char *argv0);
char *opt_getprog(void);
void opt_help(const OPTIONS *list);

void opt_begin(void);
int opt_next(void);
char *opt_flag(void);
char *opt_arg(void);
char *opt_unknown(void);
int opt_cipher(const char *name, EVP_CIPHER **cipherp);
int opt_cipher_any(const char *name, EVP_CIPHER **cipherp);
int opt_cipher_silent(const char *name, EVP_CIPHER **cipherp);
int opt_md(const char *name, EVP_MD **mdp);
int opt_md_silent(const char *name, EVP_MD **mdp);

int opt_int(const char *arg, int *result);
int opt_int_arg(void);
int opt_long(const char *arg, long *result);
int opt_ulong(const char *arg, unsigned long *result);
int opt_intmax(const char *arg, ossl_intmax_t *result);
int opt_uintmax(const char *arg, ossl_uintmax_t *result);

int opt_isdir(const char *name);
int opt_format(const char *s, unsigned long flags, int *result);
void print_format_error(int format, unsigned long flags);
int opt_printf_stderr(const char *fmt, ...);
int opt_string(const char *name, const char **options);
int opt_pair(const char *arg, const OPT_PAIR *pairs, int *result);

int opt_verify(int i, X509_VERIFY_PARAM *vpm);
int opt_rand(int i);
int opt_provider(int i);
int opt_provider_option_given(void);

char **opt_rest(void);
int opt_num_rest(void);

/* Returns non-zero if legacy paths are still available */
int opt_legacy_okay(void);

#endif /* OSSL_APPS_OPT_H */
