Annotation of embedaddon/ipsec-tools/src/racoon/prsa_par.c, revision 1.1

1.1     ! misho       1: 
        !             2: /* A Bison parser, made by GNU Bison 2.4.1.  */
        !             3: 
        !             4: /* Skeleton implementation for Bison's Yacc-like parsers in C
        !             5:    
        !             6:       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
        !             7:    Free Software Foundation, Inc.
        !             8:    
        !             9:    This program is free software: you can redistribute it and/or modify
        !            10:    it under the terms of the GNU General Public License as published by
        !            11:    the Free Software Foundation, either version 3 of the License, or
        !            12:    (at your option) any later version.
        !            13:    
        !            14:    This program is distributed in the hope that it will be useful,
        !            15:    but WITHOUT ANY WARRANTY; without even the implied warranty of
        !            16:    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
        !            17:    GNU General Public License for more details.
        !            18:    
        !            19:    You should have received a copy of the GNU General Public License
        !            20:    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
        !            21: 
        !            22: /* As a special exception, you may create a larger work that contains
        !            23:    part or all of the Bison parser skeleton and distribute that work
        !            24:    under terms of your choice, so long as that work isn't itself a
        !            25:    parser generator using the skeleton or a modified version thereof
        !            26:    as a parser skeleton.  Alternatively, if you modify or redistribute
        !            27:    the parser skeleton itself, you may (at your option) remove this
        !            28:    special exception, which will cause the skeleton and the resulting
        !            29:    Bison output files to be licensed under the GNU General Public
        !            30:    License without this special exception.
        !            31:    
        !            32:    This special exception was added by the Free Software Foundation in
        !            33:    version 2.2 of Bison.  */
        !            34: 
        !            35: /* C LALR(1) parser skeleton written by Richard Stallman, by
        !            36:    simplifying the original so-called "semantic" parser.  */
        !            37: 
        !            38: /* All symbols defined below should begin with yy or YY, to avoid
        !            39:    infringing on user name space.  This should be done even for local
        !            40:    variables, as they might otherwise be expanded by user macros.
        !            41:    There are some unavoidable exceptions within include files to
        !            42:    define necessary library symbols; they are noted "INFRINGES ON
        !            43:    USER NAME SPACE" below.  */
        !            44: 
        !            45: /* Identify Bison output.  */
        !            46: #define YYBISON 1
        !            47: 
        !            48: /* Bison version.  */
        !            49: #define YYBISON_VERSION "2.4.1"
        !            50: 
        !            51: /* Skeleton name.  */
        !            52: #define YYSKELETON_NAME "yacc.c"
        !            53: 
        !            54: /* Pure parsers.  */
        !            55: #define YYPURE 0
        !            56: 
        !            57: /* Push parsers.  */
        !            58: #define YYPUSH 0
        !            59: 
        !            60: /* Pull parsers.  */
        !            61: #define YYPULL 1
        !            62: 
        !            63: /* Using locations.  */
        !            64: #define YYLSP_NEEDED 0
        !            65: 
        !            66: /* Substitute the variable and function names.  */
        !            67: #define yyparse         prsaparse
        !            68: #define yylex           prsalex
        !            69: #define yyerror         prsaerror
        !            70: #define yylval          prsalval
        !            71: #define yychar          prsachar
        !            72: #define yydebug         prsadebug
        !            73: #define yynerrs         prsanerrs
        !            74: 
        !            75: 
        !            76: /* Copy the first part of user declarations.  */
        !            77: 
        !            78: /* Line 189 of yacc.c  */
        !            79: #line 5 "prsa_par.y"
        !            80: 
        !            81: /*
        !            82:  * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
        !            83:  * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
        !            84:  * All rights reserved.
        !            85:  *
        !            86:  * Redistribution and use in source and binary forms, with or without
        !            87:  * modification, are permitted provided that the following conditions
        !            88:  * are met:
        !            89:  * 1. Redistributions of source code must retain the above copyright
        !            90:  *    notice, this list of conditions and the following disclaimer.
        !            91:  * 2. Redistributions in binary form must reproduce the above copyright
        !            92:  *    notice, this list of conditions and the following disclaimer in the
        !            93:  *    documentation and/or other materials provided with the distribution.
        !            94:  * 3. Neither the name of the project nor the names of its contributors
        !            95:  *    may be used to endorse or promote products derived from this software
        !            96:  *    without specific prior written permission.
        !            97:  *
        !            98:  * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
        !            99:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
        !           100:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
        !           101:  * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
        !           102:  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
        !           103:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
        !           104:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
        !           105:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
        !           106:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
        !           107:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
        !           108:  * SUCH DAMAGE.
        !           109:  */
        !           110: 
        !           111: /* This file contains a parser for FreeS/WAN-style ipsec.secrets RSA keys. */
        !           112: 
        !           113: #include "config.h"
        !           114: 
        !           115: #include <stdio.h>
        !           116: #include <stdarg.h>
        !           117: #include <string.h>
        !           118: #include <errno.h>
        !           119: #include <unistd.h>
        !           120: 
        !           121: #ifdef HAVE_STDARG_H
        !           122: #include <stdarg.h>
        !           123: #else
        !           124: #include <varargs.h>
        !           125: #endif
        !           126: 
        !           127: #include <netdb.h>
        !           128: #include <netinet/in.h>
        !           129: #include <sys/socket.h>
        !           130: #include <arpa/inet.h>
        !           131: #include <sys/types.h>
        !           132: 
        !           133: #include <sys/stat.h>
        !           134: #include <unistd.h>
        !           135: 
        !           136: #include <openssl/bn.h>
        !           137: #include <openssl/rsa.h>
        !           138: 
        !           139: #include "misc.h"
        !           140: #include "vmbuf.h"
        !           141: #include "plog.h"
        !           142: #include "oakley.h"
        !           143: #include "isakmp_var.h"
        !           144: #include "handler.h"
        !           145: #include "crypto_openssl.h"
        !           146: #include "sockmisc.h"
        !           147: #include "rsalist.h"
        !           148: 
        !           149: extern void prsaerror(const char *str, ...);
        !           150: extern int prsawrap (void);
        !           151: extern int prsalex (void);
        !           152: 
        !           153: extern char *prsatext;
        !           154: extern int prsa_cur_lineno;
        !           155: extern char *prsa_cur_fname;
        !           156: extern FILE *prsain;
        !           157: 
        !           158: int prsa_cur_lineno = 0;
        !           159: char *prsa_cur_fname = NULL;
        !           160: struct genlist *prsa_cur_list = NULL;
        !           161: enum rsa_key_type prsa_cur_type = RSA_TYPE_ANY;
        !           162: 
        !           163: static RSA *rsa_cur;
        !           164: 
        !           165: void
        !           166: prsaerror(const char *s, ...)
        !           167: {
        !           168:        char fmt[512];
        !           169: 
        !           170:        va_list ap;
        !           171: #ifdef HAVE_STDARG_H
        !           172:        va_start(ap, s);
        !           173: #else
        !           174:        va_start(ap);
        !           175: #endif
        !           176:        snprintf(fmt, sizeof(fmt), "%s:%d: %s",
        !           177:                prsa_cur_fname, prsa_cur_lineno, s);
        !           178:        plogv(LLV_ERROR, LOCATION, NULL, fmt, ap);
        !           179:        va_end(ap);
        !           180: }
        !           181: 
        !           182: void
        !           183: prsawarning(const char *s, ...)
        !           184: {
        !           185:        char fmt[512];
        !           186: 
        !           187:        va_list ap;
        !           188: #ifdef HAVE_STDARG_H
        !           189:        va_start(ap, s);
        !           190: #else
        !           191:        va_start(ap);
        !           192: #endif
        !           193:        snprintf(fmt, sizeof(fmt), "%s:%d: %s",
        !           194:                prsa_cur_fname, prsa_cur_lineno, s);
        !           195:        plogv(LLV_WARNING, LOCATION, NULL, fmt, ap);
        !           196:        va_end(ap);
        !           197: }
        !           198: 
        !           199: int
        !           200: prsawrap()
        !           201: {
        !           202:        return 1;
        !           203: } 
        !           204: 
        !           205: 
        !           206: /* Line 189 of yacc.c  */
        !           207: #line 208 "prsa_par.c"
        !           208: 
        !           209: /* Enabling traces.  */
        !           210: #ifndef YYDEBUG
        !           211: # define YYDEBUG 0
        !           212: #endif
        !           213: 
        !           214: /* Enabling verbose error messages.  */
        !           215: #ifdef YYERROR_VERBOSE
        !           216: # undef YYERROR_VERBOSE
        !           217: # define YYERROR_VERBOSE 1
        !           218: #else
        !           219: # define YYERROR_VERBOSE 0
        !           220: #endif
        !           221: 
        !           222: /* Enabling the token table.  */
        !           223: #ifndef YYTOKEN_TABLE
        !           224: # define YYTOKEN_TABLE 0
        !           225: #endif
        !           226: 
        !           227: 
        !           228: /* Tokens.  */
        !           229: #ifndef YYTOKENTYPE
        !           230: # define YYTOKENTYPE
        !           231:    /* Put the tokens into the symbol table, so that GDB and other debuggers
        !           232:       know about them.  */
        !           233:    enum yytokentype {
        !           234:      COLON = 258,
        !           235:      HEX = 259,
        !           236:      OBRACE = 260,
        !           237:      EBRACE = 261,
        !           238:      TAG_RSA = 262,
        !           239:      TAG_PUB = 263,
        !           240:      TAG_PSK = 264,
        !           241:      MODULUS = 265,
        !           242:      PUBLIC_EXPONENT = 266,
        !           243:      PRIVATE_EXPONENT = 267,
        !           244:      PRIME1 = 268,
        !           245:      PRIME2 = 269,
        !           246:      EXPONENT1 = 270,
        !           247:      EXPONENT2 = 271,
        !           248:      COEFFICIENT = 272,
        !           249:      ADDR4 = 273,
        !           250:      ADDR6 = 274,
        !           251:      ADDRANY = 275,
        !           252:      SLASH = 276,
        !           253:      NUMBER = 277,
        !           254:      BASE64 = 278
        !           255:    };
        !           256: #endif
        !           257: /* Tokens.  */
        !           258: #define COLON 258
        !           259: #define HEX 259
        !           260: #define OBRACE 260
        !           261: #define EBRACE 261
        !           262: #define TAG_RSA 262
        !           263: #define TAG_PUB 263
        !           264: #define TAG_PSK 264
        !           265: #define MODULUS 265
        !           266: #define PUBLIC_EXPONENT 266
        !           267: #define PRIVATE_EXPONENT 267
        !           268: #define PRIME1 268
        !           269: #define PRIME2 269
        !           270: #define EXPONENT1 270
        !           271: #define EXPONENT2 271
        !           272: #define COEFFICIENT 272
        !           273: #define ADDR4 273
        !           274: #define ADDR6 274
        !           275: #define ADDRANY 275
        !           276: #define SLASH 276
        !           277: #define NUMBER 277
        !           278: #define BASE64 278
        !           279: 
        !           280: 
        !           281: 
        !           282: 
        !           283: #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
        !           284: typedef union YYSTYPE
        !           285: {
        !           286: 
        !           287: /* Line 214 of yacc.c  */
        !           288: #line 130 "prsa_par.y"
        !           289: 
        !           290:        BIGNUM *bn;
        !           291:        RSA *rsa;
        !           292:        char *chr;
        !           293:        long num;
        !           294:        struct netaddr *naddr;
        !           295: 
        !           296: 
        !           297: 
        !           298: /* Line 214 of yacc.c  */
        !           299: #line 300 "prsa_par.c"
        !           300: } YYSTYPE;
        !           301: # define YYSTYPE_IS_TRIVIAL 1
        !           302: # define yystype YYSTYPE /* obsolescent; will be withdrawn */
        !           303: # define YYSTYPE_IS_DECLARED 1
        !           304: #endif
        !           305: 
        !           306: 
        !           307: /* Copy the second part of user declarations.  */
        !           308: 
        !           309: 
        !           310: /* Line 264 of yacc.c  */
        !           311: #line 312 "prsa_par.c"
        !           312: 
        !           313: #ifdef short
        !           314: # undef short
        !           315: #endif
        !           316: 
        !           317: #ifdef YYTYPE_UINT8
        !           318: typedef YYTYPE_UINT8 yytype_uint8;
        !           319: #else
        !           320: typedef unsigned char yytype_uint8;
        !           321: #endif
        !           322: 
        !           323: #ifdef YYTYPE_INT8
        !           324: typedef YYTYPE_INT8 yytype_int8;
        !           325: #elif (defined __STDC__ || defined __C99__FUNC__ \
        !           326:      || defined __cplusplus || defined _MSC_VER)
        !           327: typedef signed char yytype_int8;
        !           328: #else
        !           329: typedef short int yytype_int8;
        !           330: #endif
        !           331: 
        !           332: #ifdef YYTYPE_UINT16
        !           333: typedef YYTYPE_UINT16 yytype_uint16;
        !           334: #else
        !           335: typedef unsigned short int yytype_uint16;
        !           336: #endif
        !           337: 
        !           338: #ifdef YYTYPE_INT16
        !           339: typedef YYTYPE_INT16 yytype_int16;
        !           340: #else
        !           341: typedef short int yytype_int16;
        !           342: #endif
        !           343: 
        !           344: #ifndef YYSIZE_T
        !           345: # ifdef __SIZE_TYPE__
        !           346: #  define YYSIZE_T __SIZE_TYPE__
        !           347: # elif defined size_t
        !           348: #  define YYSIZE_T size_t
        !           349: # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
        !           350:      || defined __cplusplus || defined _MSC_VER)
        !           351: #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
        !           352: #  define YYSIZE_T size_t
        !           353: # else
        !           354: #  define YYSIZE_T unsigned int
        !           355: # endif
        !           356: #endif
        !           357: 
        !           358: #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
        !           359: 
        !           360: #ifndef YY_
        !           361: # if YYENABLE_NLS
        !           362: #  if ENABLE_NLS
        !           363: #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
        !           364: #   define YY_(msgid) dgettext ("bison-runtime", msgid)
        !           365: #  endif
        !           366: # endif
        !           367: # ifndef YY_
        !           368: #  define YY_(msgid) msgid
        !           369: # endif
        !           370: #endif
        !           371: 
        !           372: /* Suppress unused-variable warnings by "using" E.  */
        !           373: #if ! defined lint || defined __GNUC__
        !           374: # define YYUSE(e) ((void) (e))
        !           375: #else
        !           376: # define YYUSE(e) /* empty */
        !           377: #endif
        !           378: 
        !           379: /* Identity function, used to suppress warnings about constant conditions.  */
        !           380: #ifndef lint
        !           381: # define YYID(n) (n)
        !           382: #else
        !           383: #if (defined __STDC__ || defined __C99__FUNC__ \
        !           384:      || defined __cplusplus || defined _MSC_VER)
        !           385: static int
        !           386: YYID (int yyi)
        !           387: #else
        !           388: static int
        !           389: YYID (yyi)
        !           390:     int yyi;
        !           391: #endif
        !           392: {
        !           393:   return yyi;
        !           394: }
        !           395: #endif
        !           396: 
        !           397: #if ! defined yyoverflow || YYERROR_VERBOSE
        !           398: 
        !           399: /* The parser invokes alloca or malloc; define the necessary symbols.  */
        !           400: 
        !           401: # ifdef YYSTACK_USE_ALLOCA
        !           402: #  if YYSTACK_USE_ALLOCA
        !           403: #   ifdef __GNUC__
        !           404: #    define YYSTACK_ALLOC __builtin_alloca
        !           405: #   elif defined __BUILTIN_VA_ARG_INCR
        !           406: #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
        !           407: #   elif defined _AIX
        !           408: #    define YYSTACK_ALLOC __alloca
        !           409: #   elif defined _MSC_VER
        !           410: #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
        !           411: #    define alloca _alloca
        !           412: #   else
        !           413: #    define YYSTACK_ALLOC alloca
        !           414: #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
        !           415:      || defined __cplusplus || defined _MSC_VER)
        !           416: #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
        !           417: #     ifndef _STDLIB_H
        !           418: #      define _STDLIB_H 1
        !           419: #     endif
        !           420: #    endif
        !           421: #   endif
        !           422: #  endif
        !           423: # endif
        !           424: 
        !           425: # ifdef YYSTACK_ALLOC
        !           426:    /* Pacify GCC's `empty if-body' warning.  */
        !           427: #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
        !           428: #  ifndef YYSTACK_ALLOC_MAXIMUM
        !           429:     /* The OS might guarantee only one guard page at the bottom of the stack,
        !           430:        and a page size can be as small as 4096 bytes.  So we cannot safely
        !           431:        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
        !           432:        to allow for a few compiler-allocated temporary stack slots.  */
        !           433: #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
        !           434: #  endif
        !           435: # else
        !           436: #  define YYSTACK_ALLOC YYMALLOC
        !           437: #  define YYSTACK_FREE YYFREE
        !           438: #  ifndef YYSTACK_ALLOC_MAXIMUM
        !           439: #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
        !           440: #  endif
        !           441: #  if (defined __cplusplus && ! defined _STDLIB_H \
        !           442:        && ! ((defined YYMALLOC || defined malloc) \
        !           443:             && (defined YYFREE || defined free)))
        !           444: #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
        !           445: #   ifndef _STDLIB_H
        !           446: #    define _STDLIB_H 1
        !           447: #   endif
        !           448: #  endif
        !           449: #  ifndef YYMALLOC
        !           450: #   define YYMALLOC malloc
        !           451: #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
        !           452:      || defined __cplusplus || defined _MSC_VER)
        !           453: void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
        !           454: #   endif
        !           455: #  endif
        !           456: #  ifndef YYFREE
        !           457: #   define YYFREE free
        !           458: #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
        !           459:      || defined __cplusplus || defined _MSC_VER)
        !           460: void free (void *); /* INFRINGES ON USER NAME SPACE */
        !           461: #   endif
        !           462: #  endif
        !           463: # endif
        !           464: #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
        !           465: 
        !           466: 
        !           467: #if (! defined yyoverflow \
        !           468:      && (! defined __cplusplus \
        !           469:         || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
        !           470: 
        !           471: /* A type that is properly aligned for any stack member.  */
        !           472: union yyalloc
        !           473: {
        !           474:   yytype_int16 yyss_alloc;
        !           475:   YYSTYPE yyvs_alloc;
        !           476: };
        !           477: 
        !           478: /* The size of the maximum gap between one aligned stack and the next.  */
        !           479: # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
        !           480: 
        !           481: /* The size of an array large to enough to hold all stacks, each with
        !           482:    N elements.  */
        !           483: # define YYSTACK_BYTES(N) \
        !           484:      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
        !           485:       + YYSTACK_GAP_MAXIMUM)
        !           486: 
        !           487: /* Copy COUNT objects from FROM to TO.  The source and destination do
        !           488:    not overlap.  */
        !           489: # ifndef YYCOPY
        !           490: #  if defined __GNUC__ && 1 < __GNUC__
        !           491: #   define YYCOPY(To, From, Count) \
        !           492:       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
        !           493: #  else
        !           494: #   define YYCOPY(To, From, Count)             \
        !           495:       do                                       \
        !           496:        {                                       \
        !           497:          YYSIZE_T yyi;                         \
        !           498:          for (yyi = 0; yyi < (Count); yyi++)   \
        !           499:            (To)[yyi] = (From)[yyi];            \
        !           500:        }                                       \
        !           501:       while (YYID (0))
        !           502: #  endif
        !           503: # endif
        !           504: 
        !           505: /* Relocate STACK from its old location to the new one.  The
        !           506:    local variables YYSIZE and YYSTACKSIZE give the old and new number of
        !           507:    elements in the stack, and YYPTR gives the new location of the
        !           508:    stack.  Advance YYPTR to a properly aligned location for the next
        !           509:    stack.  */
        !           510: # define YYSTACK_RELOCATE(Stack_alloc, Stack)                          \
        !           511:     do                                                                 \
        !           512:       {                                                                        \
        !           513:        YYSIZE_T yynewbytes;                                            \
        !           514:        YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
        !           515:        Stack = &yyptr->Stack_alloc;                                    \
        !           516:        yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
        !           517:        yyptr += yynewbytes / sizeof (*yyptr);                          \
        !           518:       }                                                                        \
        !           519:     while (YYID (0))
        !           520: 
        !           521: #endif
        !           522: 
        !           523: /* YYFINAL -- State number of the termination state.  */
        !           524: #define YYFINAL  16
        !           525: /* YYLAST -- Last index in YYTABLE.  */
        !           526: #define YYLAST   60
        !           527: 
        !           528: /* YYNTOKENS -- Number of terminals.  */
        !           529: #define YYNTOKENS  24
        !           530: /* YYNNTS -- Number of nonterminals.  */
        !           531: #define YYNNTS  10
        !           532: /* YYNRULES -- Number of rules.  */
        !           533: #define YYNRULES  26
        !           534: /* YYNRULES -- Number of states.  */
        !           535: #define YYNSTATES  55
        !           536: 
        !           537: /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
        !           538: #define YYUNDEFTOK  2
        !           539: #define YYMAXUTOK   278
        !           540: 
        !           541: #define YYTRANSLATE(YYX)                                               \
        !           542:   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
        !           543: 
        !           544: /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
        !           545: static const yytype_uint8 yytranslate[] =
        !           546: {
        !           547:        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           548:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           549:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           550:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           551:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           552:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           553:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           554:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           555:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           556:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           557:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           558:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           559:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           560:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           561:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           562:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           563:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           564:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           565:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           566:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           567:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           568:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           569:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           570:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           571:        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
        !           572:        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
        !           573:        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
        !           574:       15,    16,    17,    18,    19,    20,    21,    22,    23
        !           575: };
        !           576: 
        !           577: #if YYDEBUG
        !           578: /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
        !           579:    YYRHS.  */
        !           580: static const yytype_uint8 yyprhs[] =
        !           581: {
        !           582:        0,     0,     3,     6,     8,    13,    17,    20,    25,    28,
        !           583:       31,    33,    35,    37,    40,    43,    44,    47,    50,    52,
        !           584:       56,    60,    64,    68,    72,    76,    80
        !           585: };
        !           586: 
        !           587: /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
        !           588: static const yytype_int8 yyrhs[] =
        !           589: {
        !           590:       25,     0,    -1,    25,    26,    -1,    26,    -1,    28,    28,
        !           591:        3,    27,    -1,    28,     3,    27,    -1,     3,    27,    -1,
        !           592:        7,     5,    32,     6,    -1,     8,    23,    -1,     8,     4,
        !           593:       -1,    29,    -1,    30,    -1,    20,    -1,    18,    31,    -1,
        !           594:       19,    31,    -1,    -1,    21,    22,    -1,    32,    33,    -1,
        !           595:       33,    -1,    10,     3,     4,    -1,    11,     3,     4,    -1,
        !           596:       12,     3,     4,    -1,    13,     3,     4,    -1,    14,     3,
        !           597:        4,    -1,    15,     3,     4,    -1,    16,     3,     4,    -1,
        !           598:       17,     3,     4,    -1
        !           599: };
        !           600: 
        !           601: /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
        !           602: static const yytype_uint16 yyrline[] =
        !           603: {
        !           604:        0,   155,   155,   156,   160,   164,   168,   175,   207,   216,
        !           605:      227,   228,   229,   236,   265,   294,   295,   298,   299,   303,
        !           606:      305,   307,   309,   311,   313,   315,   317
        !           607: };
        !           608: #endif
        !           609: 
        !           610: #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
        !           611: /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
        !           612:    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
        !           613: static const char *const yytname[] =
        !           614: {
        !           615:   "$end", "error", "$undefined", "COLON", "HEX", "OBRACE", "EBRACE",
        !           616:   "TAG_RSA", "TAG_PUB", "TAG_PSK", "MODULUS", "PUBLIC_EXPONENT",
        !           617:   "PRIVATE_EXPONENT", "PRIME1", "PRIME2", "EXPONENT1", "EXPONENT2",
        !           618:   "COEFFICIENT", "ADDR4", "ADDR6", "ADDRANY", "SLASH", "NUMBER", "BASE64",
        !           619:   "$accept", "statements", "statement", "rsa_statement", "addr", "addr4",
        !           620:   "addr6", "prefix", "params", "param", 0
        !           621: };
        !           622: #endif
        !           623: 
        !           624: # ifdef YYPRINT
        !           625: /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
        !           626:    token YYLEX-NUM.  */
        !           627: static const yytype_uint16 yytoknum[] =
        !           628: {
        !           629:        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
        !           630:      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
        !           631:      275,   276,   277,   278
        !           632: };
        !           633: # endif
        !           634: 
        !           635: /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
        !           636: static const yytype_uint8 yyr1[] =
        !           637: {
        !           638:        0,    24,    25,    25,    26,    26,    26,    27,    27,    27,
        !           639:       28,    28,    28,    29,    30,    31,    31,    32,    32,    33,
        !           640:       33,    33,    33,    33,    33,    33,    33
        !           641: };
        !           642: 
        !           643: /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
        !           644: static const yytype_uint8 yyr2[] =
        !           645: {
        !           646:        0,     2,     2,     1,     4,     3,     2,     4,     2,     2,
        !           647:        1,     1,     1,     2,     2,     0,     2,     2,     1,     3,
        !           648:        3,     3,     3,     3,     3,     3,     3
        !           649: };
        !           650: 
        !           651: /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
        !           652:    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
        !           653:    means the default is an error.  */
        !           654: static const yytype_uint8 yydefact[] =
        !           655: {
        !           656:        0,     0,    15,    15,    12,     0,     3,     0,    10,    11,
        !           657:        0,     0,     6,     0,    13,    14,     1,     2,     0,     0,
        !           658:        0,     9,     8,    16,     5,     0,     0,     0,     0,     0,
        !           659:        0,     0,     0,     0,     0,    18,     4,     0,     0,     0,
        !           660:        0,     0,     0,     0,     0,     7,    17,    19,    20,    21,
        !           661:       22,    23,    24,    25,    26
        !           662: };
        !           663: 
        !           664: /* YYDEFGOTO[NTERM-NUM].  */
        !           665: static const yytype_int8 yydefgoto[] =
        !           666: {
        !           667:       -1,     5,     6,    12,     7,     8,     9,    14,    34,    35
        !           668: };
        !           669: 
        !           670: /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
        !           671:    STATE-NUM.  */
        !           672: #define YYPACT_NINF -18
        !           673: static const yytype_int8 yypact[] =
        !           674: {
        !           675:        4,    -3,   -15,   -15,   -18,     0,   -18,     7,   -18,   -18,
        !           676:        6,    -2,   -18,   -13,   -18,   -18,   -18,   -18,    -3,     9,
        !           677:       30,   -18,   -18,   -18,   -18,    -3,    10,    11,    12,    13,
        !           678:       14,    26,    27,    28,    22,   -18,   -18,    44,    45,    46,
        !           679:       47,    48,    49,    50,    51,   -18,   -18,   -18,   -18,   -18,
        !           680:      -18,   -18,   -18,   -18,   -18
        !           681: };
        !           682: 
        !           683: /* YYPGOTO[NTERM-NUM].  */
        !           684: static const yytype_int8 yypgoto[] =
        !           685: {
        !           686:      -18,   -18,    52,   -17,    53,   -18,   -18,    55,   -18,    25
        !           687: };
        !           688: 
        !           689: /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
        !           690:    positive, shift that token.  If negative, reduce the rule which
        !           691:    number is the opposite.  If zero, do what YYDEFACT says.
        !           692:    If YYTABLE_NINF, syntax error.  */
        !           693: #define YYTABLE_NINF -1
        !           694: static const yytype_uint8 yytable[] =
        !           695: {
        !           696:       16,    24,    21,     1,    10,    11,    13,     1,    36,    23,
        !           697:       18,    20,    25,    37,    38,    39,    40,    41,     2,     3,
        !           698:        4,    22,     2,     3,     4,     2,     3,     4,    45,    42,
        !           699:       43,    44,    26,    27,    28,    29,    30,    31,    32,    33,
        !           700:       26,    27,    28,    29,    30,    31,    32,    33,    47,    48,
        !           701:       49,    50,    51,    52,    53,    54,     0,    17,    15,    46,
        !           702:       19
        !           703: };
        !           704: 
        !           705: static const yytype_int8 yycheck[] =
        !           706: {
        !           707:        0,    18,     4,     3,     7,     8,    21,     3,    25,    22,
        !           708:        3,     5,     3,     3,     3,     3,     3,     3,    18,    19,
        !           709:       20,    23,    18,    19,    20,    18,    19,    20,     6,     3,
        !           710:        3,     3,    10,    11,    12,    13,    14,    15,    16,    17,
        !           711:       10,    11,    12,    13,    14,    15,    16,    17,     4,     4,
        !           712:        4,     4,     4,     4,     4,     4,    -1,     5,     3,    34,
        !           713:        7
        !           714: };
        !           715: 
        !           716: /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
        !           717:    symbol of state STATE-NUM.  */
        !           718: static const yytype_uint8 yystos[] =
        !           719: {
        !           720:        0,     3,    18,    19,    20,    25,    26,    28,    29,    30,
        !           721:        7,     8,    27,    21,    31,    31,     0,    26,     3,    28,
        !           722:        5,     4,    23,    22,    27,     3,    10,    11,    12,    13,
        !           723:       14,    15,    16,    17,    32,    33,    27,     3,     3,     3,
        !           724:        3,     3,     3,     3,     3,     6,    33,     4,     4,     4,
        !           725:        4,     4,     4,     4,     4
        !           726: };
        !           727: 
        !           728: #define yyerrok                (yyerrstatus = 0)
        !           729: #define yyclearin      (yychar = YYEMPTY)
        !           730: #define YYEMPTY                (-2)
        !           731: #define YYEOF          0
        !           732: 
        !           733: #define YYACCEPT       goto yyacceptlab
        !           734: #define YYABORT                goto yyabortlab
        !           735: #define YYERROR                goto yyerrorlab
        !           736: 
        !           737: 
        !           738: /* Like YYERROR except do call yyerror.  This remains here temporarily
        !           739:    to ease the transition to the new meaning of YYERROR, for GCC.
        !           740:    Once GCC version 2 has supplanted version 1, this can go.  */
        !           741: 
        !           742: #define YYFAIL         goto yyerrlab
        !           743: 
        !           744: #define YYRECOVERING()  (!!yyerrstatus)
        !           745: 
        !           746: #define YYBACKUP(Token, Value)                                 \
        !           747: do                                                             \
        !           748:   if (yychar == YYEMPTY && yylen == 1)                         \
        !           749:     {                                                          \
        !           750:       yychar = (Token);                                                \
        !           751:       yylval = (Value);                                                \
        !           752:       yytoken = YYTRANSLATE (yychar);                          \
        !           753:       YYPOPSTACK (1);                                          \
        !           754:       goto yybackup;                                           \
        !           755:     }                                                          \
        !           756:   else                                                         \
        !           757:     {                                                          \
        !           758:       yyerror (YY_("syntax error: cannot back up")); \
        !           759:       YYERROR;                                                 \
        !           760:     }                                                          \
        !           761: while (YYID (0))
        !           762: 
        !           763: 
        !           764: #define YYTERROR       1
        !           765: #define YYERRCODE      256
        !           766: 
        !           767: 
        !           768: /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
        !           769:    If N is 0, then set CURRENT to the empty location which ends
        !           770:    the previous symbol: RHS[0] (always defined).  */
        !           771: 
        !           772: #define YYRHSLOC(Rhs, K) ((Rhs)[K])
        !           773: #ifndef YYLLOC_DEFAULT
        !           774: # define YYLLOC_DEFAULT(Current, Rhs, N)                               \
        !           775:     do                                                                 \
        !           776:       if (YYID (N))                                                    \
        !           777:        {                                                               \
        !           778:          (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
        !           779:          (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
        !           780:          (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
        !           781:          (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
        !           782:        }                                                               \
        !           783:       else                                                             \
        !           784:        {                                                               \
        !           785:          (Current).first_line   = (Current).last_line   =              \
        !           786:            YYRHSLOC (Rhs, 0).last_line;                                \
        !           787:          (Current).first_column = (Current).last_column =              \
        !           788:            YYRHSLOC (Rhs, 0).last_column;                              \
        !           789:        }                                                               \
        !           790:     while (YYID (0))
        !           791: #endif
        !           792: 
        !           793: 
        !           794: /* YY_LOCATION_PRINT -- Print the location on the stream.
        !           795:    This macro was not mandated originally: define only if we know
        !           796:    we won't break user code: when these are the locations we know.  */
        !           797: 
        !           798: #ifndef YY_LOCATION_PRINT
        !           799: # if YYLTYPE_IS_TRIVIAL
        !           800: #  define YY_LOCATION_PRINT(File, Loc)                 \
        !           801:      fprintf (File, "%d.%d-%d.%d",                     \
        !           802:              (Loc).first_line, (Loc).first_column,     \
        !           803:              (Loc).last_line,  (Loc).last_column)
        !           804: # else
        !           805: #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
        !           806: # endif
        !           807: #endif
        !           808: 
        !           809: 
        !           810: /* YYLEX -- calling `yylex' with the right arguments.  */
        !           811: 
        !           812: #ifdef YYLEX_PARAM
        !           813: # define YYLEX yylex (YYLEX_PARAM)
        !           814: #else
        !           815: # define YYLEX yylex ()
        !           816: #endif
        !           817: 
        !           818: /* Enable debugging if requested.  */
        !           819: #if YYDEBUG
        !           820: 
        !           821: # ifndef YYFPRINTF
        !           822: #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
        !           823: #  define YYFPRINTF fprintf
        !           824: # endif
        !           825: 
        !           826: # define YYDPRINTF(Args)                       \
        !           827: do {                                           \
        !           828:   if (yydebug)                                 \
        !           829:     YYFPRINTF Args;                            \
        !           830: } while (YYID (0))
        !           831: 
        !           832: # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                   \
        !           833: do {                                                                     \
        !           834:   if (yydebug)                                                           \
        !           835:     {                                                                    \
        !           836:       YYFPRINTF (stderr, "%s ", Title);                                          \
        !           837:       yy_symbol_print (stderr,                                           \
        !           838:                  Type, Value); \
        !           839:       YYFPRINTF (stderr, "\n");                                                  \
        !           840:     }                                                                    \
        !           841: } while (YYID (0))
        !           842: 
        !           843: 
        !           844: /*--------------------------------.
        !           845: | Print this symbol on YYOUTPUT.  |
        !           846: `--------------------------------*/
        !           847: 
        !           848: /*ARGSUSED*/
        !           849: #if (defined __STDC__ || defined __C99__FUNC__ \
        !           850:      || defined __cplusplus || defined _MSC_VER)
        !           851: static void
        !           852: yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
        !           853: #else
        !           854: static void
        !           855: yy_symbol_value_print (yyoutput, yytype, yyvaluep)
        !           856:     FILE *yyoutput;
        !           857:     int yytype;
        !           858:     YYSTYPE const * const yyvaluep;
        !           859: #endif
        !           860: {
        !           861:   if (!yyvaluep)
        !           862:     return;
        !           863: # ifdef YYPRINT
        !           864:   if (yytype < YYNTOKENS)
        !           865:     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
        !           866: # else
        !           867:   YYUSE (yyoutput);
        !           868: # endif
        !           869:   switch (yytype)
        !           870:     {
        !           871:       default:
        !           872:        break;
        !           873:     }
        !           874: }
        !           875: 
        !           876: 
        !           877: /*--------------------------------.
        !           878: | Print this symbol on YYOUTPUT.  |
        !           879: `--------------------------------*/
        !           880: 
        !           881: #if (defined __STDC__ || defined __C99__FUNC__ \
        !           882:      || defined __cplusplus || defined _MSC_VER)
        !           883: static void
        !           884: yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
        !           885: #else
        !           886: static void
        !           887: yy_symbol_print (yyoutput, yytype, yyvaluep)
        !           888:     FILE *yyoutput;
        !           889:     int yytype;
        !           890:     YYSTYPE const * const yyvaluep;
        !           891: #endif
        !           892: {
        !           893:   if (yytype < YYNTOKENS)
        !           894:     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
        !           895:   else
        !           896:     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
        !           897: 
        !           898:   yy_symbol_value_print (yyoutput, yytype, yyvaluep);
        !           899:   YYFPRINTF (yyoutput, ")");
        !           900: }
        !           901: 
        !           902: /*------------------------------------------------------------------.
        !           903: | yy_stack_print -- Print the state stack from its BOTTOM up to its |
        !           904: | TOP (included).                                                   |
        !           905: `------------------------------------------------------------------*/
        !           906: 
        !           907: #if (defined __STDC__ || defined __C99__FUNC__ \
        !           908:      || defined __cplusplus || defined _MSC_VER)
        !           909: static void
        !           910: yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
        !           911: #else
        !           912: static void
        !           913: yy_stack_print (yybottom, yytop)
        !           914:     yytype_int16 *yybottom;
        !           915:     yytype_int16 *yytop;
        !           916: #endif
        !           917: {
        !           918:   YYFPRINTF (stderr, "Stack now");
        !           919:   for (; yybottom <= yytop; yybottom++)
        !           920:     {
        !           921:       int yybot = *yybottom;
        !           922:       YYFPRINTF (stderr, " %d", yybot);
        !           923:     }
        !           924:   YYFPRINTF (stderr, "\n");
        !           925: }
        !           926: 
        !           927: # define YY_STACK_PRINT(Bottom, Top)                           \
        !           928: do {                                                           \
        !           929:   if (yydebug)                                                 \
        !           930:     yy_stack_print ((Bottom), (Top));                          \
        !           931: } while (YYID (0))
        !           932: 
        !           933: 
        !           934: /*------------------------------------------------.
        !           935: | Report that the YYRULE is going to be reduced.  |
        !           936: `------------------------------------------------*/
        !           937: 
        !           938: #if (defined __STDC__ || defined __C99__FUNC__ \
        !           939:      || defined __cplusplus || defined _MSC_VER)
        !           940: static void
        !           941: yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
        !           942: #else
        !           943: static void
        !           944: yy_reduce_print (yyvsp, yyrule)
        !           945:     YYSTYPE *yyvsp;
        !           946:     int yyrule;
        !           947: #endif
        !           948: {
        !           949:   int yynrhs = yyr2[yyrule];
        !           950:   int yyi;
        !           951:   unsigned long int yylno = yyrline[yyrule];
        !           952:   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
        !           953:             yyrule - 1, yylno);
        !           954:   /* The symbols being reduced.  */
        !           955:   for (yyi = 0; yyi < yynrhs; yyi++)
        !           956:     {
        !           957:       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
        !           958:       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
        !           959:                       &(yyvsp[(yyi + 1) - (yynrhs)])
        !           960:                                       );
        !           961:       YYFPRINTF (stderr, "\n");
        !           962:     }
        !           963: }
        !           964: 
        !           965: # define YY_REDUCE_PRINT(Rule)         \
        !           966: do {                                   \
        !           967:   if (yydebug)                         \
        !           968:     yy_reduce_print (yyvsp, Rule); \
        !           969: } while (YYID (0))
        !           970: 
        !           971: /* Nonzero means print parse trace.  It is left uninitialized so that
        !           972:    multiple parsers can coexist.  */
        !           973: int yydebug;
        !           974: #else /* !YYDEBUG */
        !           975: # define YYDPRINTF(Args)
        !           976: # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
        !           977: # define YY_STACK_PRINT(Bottom, Top)
        !           978: # define YY_REDUCE_PRINT(Rule)
        !           979: #endif /* !YYDEBUG */
        !           980: 
        !           981: 
        !           982: /* YYINITDEPTH -- initial size of the parser's stacks.  */
        !           983: #ifndef        YYINITDEPTH
        !           984: # define YYINITDEPTH 200
        !           985: #endif
        !           986: 
        !           987: /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
        !           988:    if the built-in stack extension method is used).
        !           989: 
        !           990:    Do not make this value too large; the results are undefined if
        !           991:    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
        !           992:    evaluated with infinite-precision integer arithmetic.  */
        !           993: 
        !           994: #ifndef YYMAXDEPTH
        !           995: # define YYMAXDEPTH 10000
        !           996: #endif
        !           997: 
        !           998: 
        !           999: 
        !          1000: #if YYERROR_VERBOSE
        !          1001: 
        !          1002: # ifndef yystrlen
        !          1003: #  if defined __GLIBC__ && defined _STRING_H
        !          1004: #   define yystrlen strlen
        !          1005: #  else
        !          1006: /* Return the length of YYSTR.  */
        !          1007: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1008:      || defined __cplusplus || defined _MSC_VER)
        !          1009: static YYSIZE_T
        !          1010: yystrlen (const char *yystr)
        !          1011: #else
        !          1012: static YYSIZE_T
        !          1013: yystrlen (yystr)
        !          1014:     const char *yystr;
        !          1015: #endif
        !          1016: {
        !          1017:   YYSIZE_T yylen;
        !          1018:   for (yylen = 0; yystr[yylen]; yylen++)
        !          1019:     continue;
        !          1020:   return yylen;
        !          1021: }
        !          1022: #  endif
        !          1023: # endif
        !          1024: 
        !          1025: # ifndef yystpcpy
        !          1026: #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
        !          1027: #   define yystpcpy stpcpy
        !          1028: #  else
        !          1029: /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
        !          1030:    YYDEST.  */
        !          1031: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1032:      || defined __cplusplus || defined _MSC_VER)
        !          1033: static char *
        !          1034: yystpcpy (char *yydest, const char *yysrc)
        !          1035: #else
        !          1036: static char *
        !          1037: yystpcpy (yydest, yysrc)
        !          1038:     char *yydest;
        !          1039:     const char *yysrc;
        !          1040: #endif
        !          1041: {
        !          1042:   char *yyd = yydest;
        !          1043:   const char *yys = yysrc;
        !          1044: 
        !          1045:   while ((*yyd++ = *yys++) != '\0')
        !          1046:     continue;
        !          1047: 
        !          1048:   return yyd - 1;
        !          1049: }
        !          1050: #  endif
        !          1051: # endif
        !          1052: 
        !          1053: # ifndef yytnamerr
        !          1054: /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
        !          1055:    quotes and backslashes, so that it's suitable for yyerror.  The
        !          1056:    heuristic is that double-quoting is unnecessary unless the string
        !          1057:    contains an apostrophe, a comma, or backslash (other than
        !          1058:    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
        !          1059:    null, do not copy; instead, return the length of what the result
        !          1060:    would have been.  */
        !          1061: static YYSIZE_T
        !          1062: yytnamerr (char *yyres, const char *yystr)
        !          1063: {
        !          1064:   if (*yystr == '"')
        !          1065:     {
        !          1066:       YYSIZE_T yyn = 0;
        !          1067:       char const *yyp = yystr;
        !          1068: 
        !          1069:       for (;;)
        !          1070:        switch (*++yyp)
        !          1071:          {
        !          1072:          case '\'':
        !          1073:          case ',':
        !          1074:            goto do_not_strip_quotes;
        !          1075: 
        !          1076:          case '\\':
        !          1077:            if (*++yyp != '\\')
        !          1078:              goto do_not_strip_quotes;
        !          1079:            /* Fall through.  */
        !          1080:          default:
        !          1081:            if (yyres)
        !          1082:              yyres[yyn] = *yyp;
        !          1083:            yyn++;
        !          1084:            break;
        !          1085: 
        !          1086:          case '"':
        !          1087:            if (yyres)
        !          1088:              yyres[yyn] = '\0';
        !          1089:            return yyn;
        !          1090:          }
        !          1091:     do_not_strip_quotes: ;
        !          1092:     }
        !          1093: 
        !          1094:   if (! yyres)
        !          1095:     return yystrlen (yystr);
        !          1096: 
        !          1097:   return yystpcpy (yyres, yystr) - yyres;
        !          1098: }
        !          1099: # endif
        !          1100: 
        !          1101: /* Copy into YYRESULT an error message about the unexpected token
        !          1102:    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
        !          1103:    including the terminating null byte.  If YYRESULT is null, do not
        !          1104:    copy anything; just return the number of bytes that would be
        !          1105:    copied.  As a special case, return 0 if an ordinary "syntax error"
        !          1106:    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
        !          1107:    size calculation.  */
        !          1108: static YYSIZE_T
        !          1109: yysyntax_error (char *yyresult, int yystate, int yychar)
        !          1110: {
        !          1111:   int yyn = yypact[yystate];
        !          1112: 
        !          1113:   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
        !          1114:     return 0;
        !          1115:   else
        !          1116:     {
        !          1117:       int yytype = YYTRANSLATE (yychar);
        !          1118:       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
        !          1119:       YYSIZE_T yysize = yysize0;
        !          1120:       YYSIZE_T yysize1;
        !          1121:       int yysize_overflow = 0;
        !          1122:       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
        !          1123:       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
        !          1124:       int yyx;
        !          1125: 
        !          1126: # if 0
        !          1127:       /* This is so xgettext sees the translatable formats that are
        !          1128:         constructed on the fly.  */
        !          1129:       YY_("syntax error, unexpected %s");
        !          1130:       YY_("syntax error, unexpected %s, expecting %s");
        !          1131:       YY_("syntax error, unexpected %s, expecting %s or %s");
        !          1132:       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
        !          1133:       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
        !          1134: # endif
        !          1135:       char *yyfmt;
        !          1136:       char const *yyf;
        !          1137:       static char const yyunexpected[] = "syntax error, unexpected %s";
        !          1138:       static char const yyexpecting[] = ", expecting %s";
        !          1139:       static char const yyor[] = " or %s";
        !          1140:       char yyformat[sizeof yyunexpected
        !          1141:                    + sizeof yyexpecting - 1
        !          1142:                    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
        !          1143:                       * (sizeof yyor - 1))];
        !          1144:       char const *yyprefix = yyexpecting;
        !          1145: 
        !          1146:       /* Start YYX at -YYN if negative to avoid negative indexes in
        !          1147:         YYCHECK.  */
        !          1148:       int yyxbegin = yyn < 0 ? -yyn : 0;
        !          1149: 
        !          1150:       /* Stay within bounds of both yycheck and yytname.  */
        !          1151:       int yychecklim = YYLAST - yyn + 1;
        !          1152:       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
        !          1153:       int yycount = 1;
        !          1154: 
        !          1155:       yyarg[0] = yytname[yytype];
        !          1156:       yyfmt = yystpcpy (yyformat, yyunexpected);
        !          1157: 
        !          1158:       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
        !          1159:        if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
        !          1160:          {
        !          1161:            if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
        !          1162:              {
        !          1163:                yycount = 1;
        !          1164:                yysize = yysize0;
        !          1165:                yyformat[sizeof yyunexpected - 1] = '\0';
        !          1166:                break;
        !          1167:              }
        !          1168:            yyarg[yycount++] = yytname[yyx];
        !          1169:            yysize1 = yysize + yytnamerr (0, yytname[yyx]);
        !          1170:            yysize_overflow |= (yysize1 < yysize);
        !          1171:            yysize = yysize1;
        !          1172:            yyfmt = yystpcpy (yyfmt, yyprefix);
        !          1173:            yyprefix = yyor;
        !          1174:          }
        !          1175: 
        !          1176:       yyf = YY_(yyformat);
        !          1177:       yysize1 = yysize + yystrlen (yyf);
        !          1178:       yysize_overflow |= (yysize1 < yysize);
        !          1179:       yysize = yysize1;
        !          1180: 
        !          1181:       if (yysize_overflow)
        !          1182:        return YYSIZE_MAXIMUM;
        !          1183: 
        !          1184:       if (yyresult)
        !          1185:        {
        !          1186:          /* Avoid sprintf, as that infringes on the user's name space.
        !          1187:             Don't have undefined behavior even if the translation
        !          1188:             produced a string with the wrong number of "%s"s.  */
        !          1189:          char *yyp = yyresult;
        !          1190:          int yyi = 0;
        !          1191:          while ((*yyp = *yyf) != '\0')
        !          1192:            {
        !          1193:              if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
        !          1194:                {
        !          1195:                  yyp += yytnamerr (yyp, yyarg[yyi++]);
        !          1196:                  yyf += 2;
        !          1197:                }
        !          1198:              else
        !          1199:                {
        !          1200:                  yyp++;
        !          1201:                  yyf++;
        !          1202:                }
        !          1203:            }
        !          1204:        }
        !          1205:       return yysize;
        !          1206:     }
        !          1207: }
        !          1208: #endif /* YYERROR_VERBOSE */
        !          1209: 
        !          1210: 
        !          1211: /*-----------------------------------------------.
        !          1212: | Release the memory associated to this symbol.  |
        !          1213: `-----------------------------------------------*/
        !          1214: 
        !          1215: /*ARGSUSED*/
        !          1216: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1217:      || defined __cplusplus || defined _MSC_VER)
        !          1218: static void
        !          1219: yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
        !          1220: #else
        !          1221: static void
        !          1222: yydestruct (yymsg, yytype, yyvaluep)
        !          1223:     const char *yymsg;
        !          1224:     int yytype;
        !          1225:     YYSTYPE *yyvaluep;
        !          1226: #endif
        !          1227: {
        !          1228:   YYUSE (yyvaluep);
        !          1229: 
        !          1230:   if (!yymsg)
        !          1231:     yymsg = "Deleting";
        !          1232:   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
        !          1233: 
        !          1234:   switch (yytype)
        !          1235:     {
        !          1236: 
        !          1237:       default:
        !          1238:        break;
        !          1239:     }
        !          1240: }
        !          1241: 
        !          1242: /* Prevent warnings from -Wmissing-prototypes.  */
        !          1243: #ifdef YYPARSE_PARAM
        !          1244: #if defined __STDC__ || defined __cplusplus
        !          1245: int yyparse (void *YYPARSE_PARAM);
        !          1246: #else
        !          1247: int yyparse ();
        !          1248: #endif
        !          1249: #else /* ! YYPARSE_PARAM */
        !          1250: #if defined __STDC__ || defined __cplusplus
        !          1251: int yyparse (void);
        !          1252: #else
        !          1253: int yyparse ();
        !          1254: #endif
        !          1255: #endif /* ! YYPARSE_PARAM */
        !          1256: 
        !          1257: 
        !          1258: /* The lookahead symbol.  */
        !          1259: int yychar;
        !          1260: 
        !          1261: /* The semantic value of the lookahead symbol.  */
        !          1262: YYSTYPE yylval;
        !          1263: 
        !          1264: /* Number of syntax errors so far.  */
        !          1265: int yynerrs;
        !          1266: 
        !          1267: 
        !          1268: 
        !          1269: /*-------------------------.
        !          1270: | yyparse or yypush_parse.  |
        !          1271: `-------------------------*/
        !          1272: 
        !          1273: #ifdef YYPARSE_PARAM
        !          1274: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1275:      || defined __cplusplus || defined _MSC_VER)
        !          1276: int
        !          1277: yyparse (void *YYPARSE_PARAM)
        !          1278: #else
        !          1279: int
        !          1280: yyparse (YYPARSE_PARAM)
        !          1281:     void *YYPARSE_PARAM;
        !          1282: #endif
        !          1283: #else /* ! YYPARSE_PARAM */
        !          1284: #if (defined __STDC__ || defined __C99__FUNC__ \
        !          1285:      || defined __cplusplus || defined _MSC_VER)
        !          1286: int
        !          1287: yyparse (void)
        !          1288: #else
        !          1289: int
        !          1290: yyparse ()
        !          1291: 
        !          1292: #endif
        !          1293: #endif
        !          1294: {
        !          1295: 
        !          1296: 
        !          1297:     int yystate;
        !          1298:     /* Number of tokens to shift before error messages enabled.  */
        !          1299:     int yyerrstatus;
        !          1300: 
        !          1301:     /* The stacks and their tools:
        !          1302:        `yyss': related to states.
        !          1303:        `yyvs': related to semantic values.
        !          1304: 
        !          1305:        Refer to the stacks thru separate pointers, to allow yyoverflow
        !          1306:        to reallocate them elsewhere.  */
        !          1307: 
        !          1308:     /* The state stack.  */
        !          1309:     yytype_int16 yyssa[YYINITDEPTH];
        !          1310:     yytype_int16 *yyss;
        !          1311:     yytype_int16 *yyssp;
        !          1312: 
        !          1313:     /* The semantic value stack.  */
        !          1314:     YYSTYPE yyvsa[YYINITDEPTH];
        !          1315:     YYSTYPE *yyvs;
        !          1316:     YYSTYPE *yyvsp;
        !          1317: 
        !          1318:     YYSIZE_T yystacksize;
        !          1319: 
        !          1320:   int yyn;
        !          1321:   int yyresult;
        !          1322:   /* Lookahead token as an internal (translated) token number.  */
        !          1323:   int yytoken;
        !          1324:   /* The variables used to return semantic value and location from the
        !          1325:      action routines.  */
        !          1326:   YYSTYPE yyval;
        !          1327: 
        !          1328: #if YYERROR_VERBOSE
        !          1329:   /* Buffer for error messages, and its allocated size.  */
        !          1330:   char yymsgbuf[128];
        !          1331:   char *yymsg = yymsgbuf;
        !          1332:   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
        !          1333: #endif
        !          1334: 
        !          1335: #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
        !          1336: 
        !          1337:   /* The number of symbols on the RHS of the reduced rule.
        !          1338:      Keep to zero when no symbol should be popped.  */
        !          1339:   int yylen = 0;
        !          1340: 
        !          1341:   yytoken = 0;
        !          1342:   yyss = yyssa;
        !          1343:   yyvs = yyvsa;
        !          1344:   yystacksize = YYINITDEPTH;
        !          1345: 
        !          1346:   YYDPRINTF ((stderr, "Starting parse\n"));
        !          1347: 
        !          1348:   yystate = 0;
        !          1349:   yyerrstatus = 0;
        !          1350:   yynerrs = 0;
        !          1351:   yychar = YYEMPTY; /* Cause a token to be read.  */
        !          1352: 
        !          1353:   /* Initialize stack pointers.
        !          1354:      Waste one element of value and location stack
        !          1355:      so that they stay on the same level as the state stack.
        !          1356:      The wasted elements are never initialized.  */
        !          1357:   yyssp = yyss;
        !          1358:   yyvsp = yyvs;
        !          1359: 
        !          1360:   goto yysetstate;
        !          1361: 
        !          1362: /*------------------------------------------------------------.
        !          1363: | yynewstate -- Push a new state, which is found in yystate.  |
        !          1364: `------------------------------------------------------------*/
        !          1365:  yynewstate:
        !          1366:   /* In all cases, when you get here, the value and location stacks
        !          1367:      have just been pushed.  So pushing a state here evens the stacks.  */
        !          1368:   yyssp++;
        !          1369: 
        !          1370:  yysetstate:
        !          1371:   *yyssp = yystate;
        !          1372: 
        !          1373:   if (yyss + yystacksize - 1 <= yyssp)
        !          1374:     {
        !          1375:       /* Get the current used size of the three stacks, in elements.  */
        !          1376:       YYSIZE_T yysize = yyssp - yyss + 1;
        !          1377: 
        !          1378: #ifdef yyoverflow
        !          1379:       {
        !          1380:        /* Give user a chance to reallocate the stack.  Use copies of
        !          1381:           these so that the &'s don't force the real ones into
        !          1382:           memory.  */
        !          1383:        YYSTYPE *yyvs1 = yyvs;
        !          1384:        yytype_int16 *yyss1 = yyss;
        !          1385: 
        !          1386:        /* Each stack pointer address is followed by the size of the
        !          1387:           data in use in that stack, in bytes.  This used to be a
        !          1388:           conditional around just the two extra args, but that might
        !          1389:           be undefined if yyoverflow is a macro.  */
        !          1390:        yyoverflow (YY_("memory exhausted"),
        !          1391:                    &yyss1, yysize * sizeof (*yyssp),
        !          1392:                    &yyvs1, yysize * sizeof (*yyvsp),
        !          1393:                    &yystacksize);
        !          1394: 
        !          1395:        yyss = yyss1;
        !          1396:        yyvs = yyvs1;
        !          1397:       }
        !          1398: #else /* no yyoverflow */
        !          1399: # ifndef YYSTACK_RELOCATE
        !          1400:       goto yyexhaustedlab;
        !          1401: # else
        !          1402:       /* Extend the stack our own way.  */
        !          1403:       if (YYMAXDEPTH <= yystacksize)
        !          1404:        goto yyexhaustedlab;
        !          1405:       yystacksize *= 2;
        !          1406:       if (YYMAXDEPTH < yystacksize)
        !          1407:        yystacksize = YYMAXDEPTH;
        !          1408: 
        !          1409:       {
        !          1410:        yytype_int16 *yyss1 = yyss;
        !          1411:        union yyalloc *yyptr =
        !          1412:          (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
        !          1413:        if (! yyptr)
        !          1414:          goto yyexhaustedlab;
        !          1415:        YYSTACK_RELOCATE (yyss_alloc, yyss);
        !          1416:        YYSTACK_RELOCATE (yyvs_alloc, yyvs);
        !          1417: #  undef YYSTACK_RELOCATE
        !          1418:        if (yyss1 != yyssa)
        !          1419:          YYSTACK_FREE (yyss1);
        !          1420:       }
        !          1421: # endif
        !          1422: #endif /* no yyoverflow */
        !          1423: 
        !          1424:       yyssp = yyss + yysize - 1;
        !          1425:       yyvsp = yyvs + yysize - 1;
        !          1426: 
        !          1427:       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
        !          1428:                  (unsigned long int) yystacksize));
        !          1429: 
        !          1430:       if (yyss + yystacksize - 1 <= yyssp)
        !          1431:        YYABORT;
        !          1432:     }
        !          1433: 
        !          1434:   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
        !          1435: 
        !          1436:   if (yystate == YYFINAL)
        !          1437:     YYACCEPT;
        !          1438: 
        !          1439:   goto yybackup;
        !          1440: 
        !          1441: /*-----------.
        !          1442: | yybackup.  |
        !          1443: `-----------*/
        !          1444: yybackup:
        !          1445: 
        !          1446:   /* Do appropriate processing given the current state.  Read a
        !          1447:      lookahead token if we need one and don't already have one.  */
        !          1448: 
        !          1449:   /* First try to decide what to do without reference to lookahead token.  */
        !          1450:   yyn = yypact[yystate];
        !          1451:   if (yyn == YYPACT_NINF)
        !          1452:     goto yydefault;
        !          1453: 
        !          1454:   /* Not known => get a lookahead token if don't already have one.  */
        !          1455: 
        !          1456:   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
        !          1457:   if (yychar == YYEMPTY)
        !          1458:     {
        !          1459:       YYDPRINTF ((stderr, "Reading a token: "));
        !          1460:       yychar = YYLEX;
        !          1461:     }
        !          1462: 
        !          1463:   if (yychar <= YYEOF)
        !          1464:     {
        !          1465:       yychar = yytoken = YYEOF;
        !          1466:       YYDPRINTF ((stderr, "Now at end of input.\n"));
        !          1467:     }
        !          1468:   else
        !          1469:     {
        !          1470:       yytoken = YYTRANSLATE (yychar);
        !          1471:       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
        !          1472:     }
        !          1473: 
        !          1474:   /* If the proper action on seeing token YYTOKEN is to reduce or to
        !          1475:      detect an error, take that action.  */
        !          1476:   yyn += yytoken;
        !          1477:   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
        !          1478:     goto yydefault;
        !          1479:   yyn = yytable[yyn];
        !          1480:   if (yyn <= 0)
        !          1481:     {
        !          1482:       if (yyn == 0 || yyn == YYTABLE_NINF)
        !          1483:        goto yyerrlab;
        !          1484:       yyn = -yyn;
        !          1485:       goto yyreduce;
        !          1486:     }
        !          1487: 
        !          1488:   /* Count tokens shifted since error; after three, turn off error
        !          1489:      status.  */
        !          1490:   if (yyerrstatus)
        !          1491:     yyerrstatus--;
        !          1492: 
        !          1493:   /* Shift the lookahead token.  */
        !          1494:   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
        !          1495: 
        !          1496:   /* Discard the shifted token.  */
        !          1497:   yychar = YYEMPTY;
        !          1498: 
        !          1499:   yystate = yyn;
        !          1500:   *++yyvsp = yylval;
        !          1501: 
        !          1502:   goto yynewstate;
        !          1503: 
        !          1504: 
        !          1505: /*-----------------------------------------------------------.
        !          1506: | yydefault -- do the default action for the current state.  |
        !          1507: `-----------------------------------------------------------*/
        !          1508: yydefault:
        !          1509:   yyn = yydefact[yystate];
        !          1510:   if (yyn == 0)
        !          1511:     goto yyerrlab;
        !          1512:   goto yyreduce;
        !          1513: 
        !          1514: 
        !          1515: /*-----------------------------.
        !          1516: | yyreduce -- Do a reduction.  |
        !          1517: `-----------------------------*/
        !          1518: yyreduce:
        !          1519:   /* yyn is the number of a rule to reduce with.  */
        !          1520:   yylen = yyr2[yyn];
        !          1521: 
        !          1522:   /* If YYLEN is nonzero, implement the default value of the action:
        !          1523:      `$$ = $1'.
        !          1524: 
        !          1525:      Otherwise, the following line sets YYVAL to garbage.
        !          1526:      This behavior is undocumented and Bison
        !          1527:      users should not rely upon it.  Assigning to YYVAL
        !          1528:      unconditionally makes the parser a bit smaller, and it avoids a
        !          1529:      GCC warning that YYVAL may be used uninitialized.  */
        !          1530:   yyval = yyvsp[1-yylen];
        !          1531: 
        !          1532: 
        !          1533:   YY_REDUCE_PRINT (yyn);
        !          1534:   switch (yyn)
        !          1535:     {
        !          1536:         case 4:
        !          1537: 
        !          1538: /* Line 1455 of yacc.c  */
        !          1539: #line 161 "prsa_par.y"
        !          1540:     {
        !          1541:                rsa_key_insert(prsa_cur_list, (yyvsp[(1) - (4)].naddr), (yyvsp[(2) - (4)].naddr), (yyvsp[(4) - (4)].rsa));
        !          1542:        }
        !          1543:     break;
        !          1544: 
        !          1545:   case 5:
        !          1546: 
        !          1547: /* Line 1455 of yacc.c  */
        !          1548: #line 165 "prsa_par.y"
        !          1549:     {
        !          1550:                rsa_key_insert(prsa_cur_list, NULL, (yyvsp[(1) - (3)].naddr), (yyvsp[(3) - (3)].rsa));
        !          1551:        }
        !          1552:     break;
        !          1553: 
        !          1554:   case 6:
        !          1555: 
        !          1556: /* Line 1455 of yacc.c  */
        !          1557: #line 169 "prsa_par.y"
        !          1558:     {
        !          1559:                rsa_key_insert(prsa_cur_list, NULL, NULL, (yyvsp[(2) - (2)].rsa));
        !          1560:        }
        !          1561:     break;
        !          1562: 
        !          1563:   case 7:
        !          1564: 
        !          1565: /* Line 1455 of yacc.c  */
        !          1566: #line 176 "prsa_par.y"
        !          1567:     {
        !          1568:                if (prsa_cur_type == RSA_TYPE_PUBLIC) {
        !          1569:                        prsawarning("Using private key for public key purpose.\n");
        !          1570:                        if (!rsa_cur->n || !rsa_cur->e) {
        !          1571:                                prsaerror("Incomplete key. Mandatory parameters are missing!\n");
        !          1572:                                YYABORT;
        !          1573:                        }
        !          1574:                }
        !          1575:                else {
        !          1576:                        if (!rsa_cur->n || !rsa_cur->e || !rsa_cur->d) {
        !          1577:                                prsaerror("Incomplete key. Mandatory parameters are missing!\n");
        !          1578:                                YYABORT;
        !          1579:                        }
        !          1580:                        if (!rsa_cur->p || !rsa_cur->q || !rsa_cur->dmp1
        !          1581:                            || !rsa_cur->dmq1 || !rsa_cur->iqmp) {
        !          1582:                                if (rsa_cur->p) BN_clear_free(rsa_cur->p);
        !          1583:                                if (rsa_cur->q) BN_clear_free(rsa_cur->q);
        !          1584:                                if (rsa_cur->dmp1) BN_clear_free(rsa_cur->dmp1);
        !          1585:                                if (rsa_cur->dmq1) BN_clear_free(rsa_cur->dmq1);
        !          1586:                                if (rsa_cur->iqmp) BN_clear_free(rsa_cur->iqmp);
        !          1587: 
        !          1588:                                rsa_cur->p = NULL;
        !          1589:                                rsa_cur->q = NULL;
        !          1590:                                rsa_cur->dmp1 = NULL;
        !          1591:                                rsa_cur->dmq1 = NULL;
        !          1592:                                rsa_cur->iqmp = NULL;
        !          1593:                        }
        !          1594:                }
        !          1595:                (yyval.rsa) = rsa_cur;
        !          1596:                rsa_cur = RSA_new();
        !          1597:        }
        !          1598:     break;
        !          1599: 
        !          1600:   case 8:
        !          1601: 
        !          1602: /* Line 1455 of yacc.c  */
        !          1603: #line 208 "prsa_par.y"
        !          1604:     {
        !          1605:                if (prsa_cur_type == RSA_TYPE_PRIVATE) {
        !          1606:                        prsaerror("Public key in private-key file!\n");
        !          1607:                        YYABORT;
        !          1608:                }
        !          1609:                (yyval.rsa) = base64_pubkey2rsa((yyvsp[(2) - (2)].chr));
        !          1610:                free((yyvsp[(2) - (2)].chr));
        !          1611:        }
        !          1612:     break;
        !          1613: 
        !          1614:   case 9:
        !          1615: 
        !          1616: /* Line 1455 of yacc.c  */
        !          1617: #line 217 "prsa_par.y"
        !          1618:     {
        !          1619:                if (prsa_cur_type == RSA_TYPE_PRIVATE) {
        !          1620:                        prsaerror("Public key in private-key file!\n");
        !          1621:                        YYABORT;
        !          1622:                }
        !          1623:                (yyval.rsa) = bignum_pubkey2rsa((yyvsp[(2) - (2)].bn));
        !          1624:        }
        !          1625:     break;
        !          1626: 
        !          1627:   case 12:
        !          1628: 
        !          1629: /* Line 1455 of yacc.c  */
        !          1630: #line 230 "prsa_par.y"
        !          1631:     {
        !          1632:                (yyval.naddr) = NULL;
        !          1633:        }
        !          1634:     break;
        !          1635: 
        !          1636:   case 13:
        !          1637: 
        !          1638: /* Line 1455 of yacc.c  */
        !          1639: #line 237 "prsa_par.y"
        !          1640:     {
        !          1641:                int err;
        !          1642:                struct sockaddr_in *sap;
        !          1643:                struct addrinfo hints, *res;
        !          1644:                
        !          1645:                if ((yyvsp[(2) - (2)].num) == -1) (yyvsp[(2) - (2)].num) = 32;
        !          1646:                if ((yyvsp[(2) - (2)].num) < 0 || (yyvsp[(2) - (2)].num) > 32) {
        !          1647:                        prsaerror ("Invalid IPv4 prefix\n");
        !          1648:                        YYABORT;
        !          1649:                }
        !          1650:                (yyval.naddr) = calloc (sizeof(struct netaddr), 1);
        !          1651:                (yyval.naddr)->prefix = (yyvsp[(2) - (2)].num);
        !          1652:                sap = (struct sockaddr_in *)(&(yyval.naddr)->sa);
        !          1653:                memset(&hints, 0, sizeof(hints));
        !          1654:                hints.ai_family = AF_INET;
        !          1655:                hints.ai_flags = AI_NUMERICHOST;
        !          1656:                err = getaddrinfo((yyvsp[(1) - (2)].chr), NULL, &hints, &res);
        !          1657:                if (err < 0) {
        !          1658:                        prsaerror("getaddrinfo(%s): %s\n", (yyvsp[(1) - (2)].chr), gai_strerror(err));
        !          1659:                        YYABORT;
        !          1660:                }
        !          1661:                memcpy(sap, res->ai_addr, res->ai_addrlen);
        !          1662:                freeaddrinfo(res);
        !          1663:                free((yyvsp[(1) - (2)].chr));
        !          1664:        }
        !          1665:     break;
        !          1666: 
        !          1667:   case 14:
        !          1668: 
        !          1669: /* Line 1455 of yacc.c  */
        !          1670: #line 266 "prsa_par.y"
        !          1671:     {
        !          1672:                int err;
        !          1673:                struct sockaddr_in6 *sap;
        !          1674:                struct addrinfo hints, *res;
        !          1675:                
        !          1676:                if ((yyvsp[(2) - (2)].num) == -1) (yyvsp[(2) - (2)].num) = 128;
        !          1677:                if ((yyvsp[(2) - (2)].num) < 0 || (yyvsp[(2) - (2)].num) > 128) {
        !          1678:                        prsaerror ("Invalid IPv6 prefix\n");
        !          1679:                        YYABORT;
        !          1680:                }
        !          1681:                (yyval.naddr) = calloc (sizeof(struct netaddr), 1);
        !          1682:                (yyval.naddr)->prefix = (yyvsp[(2) - (2)].num);
        !          1683:                sap = (struct sockaddr_in6 *)(&(yyval.naddr)->sa);
        !          1684:                memset(&hints, 0, sizeof(hints));
        !          1685:                hints.ai_family = AF_INET6;
        !          1686:                hints.ai_flags = AI_NUMERICHOST;
        !          1687:                err = getaddrinfo((yyvsp[(1) - (2)].chr), NULL, &hints, &res);
        !          1688:                if (err < 0) {
        !          1689:                        prsaerror("getaddrinfo(%s): %s\n", (yyvsp[(1) - (2)].chr), gai_strerror(err));
        !          1690:                        YYABORT;
        !          1691:                }
        !          1692:                memcpy(sap, res->ai_addr, res->ai_addrlen);
        !          1693:                freeaddrinfo(res);
        !          1694:                free((yyvsp[(1) - (2)].chr));
        !          1695:        }
        !          1696:     break;
        !          1697: 
        !          1698:   case 15:
        !          1699: 
        !          1700: /* Line 1455 of yacc.c  */
        !          1701: #line 294 "prsa_par.y"
        !          1702:     { (yyval.num) = -1; }
        !          1703:     break;
        !          1704: 
        !          1705:   case 16:
        !          1706: 
        !          1707: /* Line 1455 of yacc.c  */
        !          1708: #line 295 "prsa_par.y"
        !          1709:     { (yyval.num) = (yyvsp[(2) - (2)].num); }
        !          1710:     break;
        !          1711: 
        !          1712:   case 19:
        !          1713: 
        !          1714: /* Line 1455 of yacc.c  */
        !          1715: #line 304 "prsa_par.y"
        !          1716:     { if (!rsa_cur->n) rsa_cur->n = (yyvsp[(3) - (3)].bn); else { prsaerror ("Modulus already defined\n"); YYABORT; } }
        !          1717:     break;
        !          1718: 
        !          1719:   case 20:
        !          1720: 
        !          1721: /* Line 1455 of yacc.c  */
        !          1722: #line 306 "prsa_par.y"
        !          1723:     { if (!rsa_cur->e) rsa_cur->e = (yyvsp[(3) - (3)].bn); else { prsaerror ("PublicExponent already defined\n"); YYABORT; } }
        !          1724:     break;
        !          1725: 
        !          1726:   case 21:
        !          1727: 
        !          1728: /* Line 1455 of yacc.c  */
        !          1729: #line 308 "prsa_par.y"
        !          1730:     { if (!rsa_cur->d) rsa_cur->d = (yyvsp[(3) - (3)].bn); else { prsaerror ("PrivateExponent already defined\n"); YYABORT; } }
        !          1731:     break;
        !          1732: 
        !          1733:   case 22:
        !          1734: 
        !          1735: /* Line 1455 of yacc.c  */
        !          1736: #line 310 "prsa_par.y"
        !          1737:     { if (!rsa_cur->p) rsa_cur->p = (yyvsp[(3) - (3)].bn); else { prsaerror ("Prime1 already defined\n"); YYABORT; } }
        !          1738:     break;
        !          1739: 
        !          1740:   case 23:
        !          1741: 
        !          1742: /* Line 1455 of yacc.c  */
        !          1743: #line 312 "prsa_par.y"
        !          1744:     { if (!rsa_cur->q) rsa_cur->q = (yyvsp[(3) - (3)].bn); else { prsaerror ("Prime2 already defined\n"); YYABORT; } }
        !          1745:     break;
        !          1746: 
        !          1747:   case 24:
        !          1748: 
        !          1749: /* Line 1455 of yacc.c  */
        !          1750: #line 314 "prsa_par.y"
        !          1751:     { if (!rsa_cur->dmp1) rsa_cur->dmp1 = (yyvsp[(3) - (3)].bn); else { prsaerror ("Exponent1 already defined\n"); YYABORT; } }
        !          1752:     break;
        !          1753: 
        !          1754:   case 25:
        !          1755: 
        !          1756: /* Line 1455 of yacc.c  */
        !          1757: #line 316 "prsa_par.y"
        !          1758:     { if (!rsa_cur->dmq1) rsa_cur->dmq1 = (yyvsp[(3) - (3)].bn); else { prsaerror ("Exponent2 already defined\n"); YYABORT; } }
        !          1759:     break;
        !          1760: 
        !          1761:   case 26:
        !          1762: 
        !          1763: /* Line 1455 of yacc.c  */
        !          1764: #line 318 "prsa_par.y"
        !          1765:     { if (!rsa_cur->iqmp) rsa_cur->iqmp = (yyvsp[(3) - (3)].bn); else { prsaerror ("Coefficient already defined\n"); YYABORT; } }
        !          1766:     break;
        !          1767: 
        !          1768: 
        !          1769: 
        !          1770: /* Line 1455 of yacc.c  */
        !          1771: #line 1772 "prsa_par.c"
        !          1772:       default: break;
        !          1773:     }
        !          1774:   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
        !          1775: 
        !          1776:   YYPOPSTACK (yylen);
        !          1777:   yylen = 0;
        !          1778:   YY_STACK_PRINT (yyss, yyssp);
        !          1779: 
        !          1780:   *++yyvsp = yyval;
        !          1781: 
        !          1782:   /* Now `shift' the result of the reduction.  Determine what state
        !          1783:      that goes to, based on the state we popped back to and the rule
        !          1784:      number reduced by.  */
        !          1785: 
        !          1786:   yyn = yyr1[yyn];
        !          1787: 
        !          1788:   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
        !          1789:   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
        !          1790:     yystate = yytable[yystate];
        !          1791:   else
        !          1792:     yystate = yydefgoto[yyn - YYNTOKENS];
        !          1793: 
        !          1794:   goto yynewstate;
        !          1795: 
        !          1796: 
        !          1797: /*------------------------------------.
        !          1798: | yyerrlab -- here on detecting error |
        !          1799: `------------------------------------*/
        !          1800: yyerrlab:
        !          1801:   /* If not already recovering from an error, report this error.  */
        !          1802:   if (!yyerrstatus)
        !          1803:     {
        !          1804:       ++yynerrs;
        !          1805: #if ! YYERROR_VERBOSE
        !          1806:       yyerror (YY_("syntax error"));
        !          1807: #else
        !          1808:       {
        !          1809:        YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
        !          1810:        if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
        !          1811:          {
        !          1812:            YYSIZE_T yyalloc = 2 * yysize;
        !          1813:            if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
        !          1814:              yyalloc = YYSTACK_ALLOC_MAXIMUM;
        !          1815:            if (yymsg != yymsgbuf)
        !          1816:              YYSTACK_FREE (yymsg);
        !          1817:            yymsg = (char *) YYSTACK_ALLOC (yyalloc);
        !          1818:            if (yymsg)
        !          1819:              yymsg_alloc = yyalloc;
        !          1820:            else
        !          1821:              {
        !          1822:                yymsg = yymsgbuf;
        !          1823:                yymsg_alloc = sizeof yymsgbuf;
        !          1824:              }
        !          1825:          }
        !          1826: 
        !          1827:        if (0 < yysize && yysize <= yymsg_alloc)
        !          1828:          {
        !          1829:            (void) yysyntax_error (yymsg, yystate, yychar);
        !          1830:            yyerror (yymsg);
        !          1831:          }
        !          1832:        else
        !          1833:          {
        !          1834:            yyerror (YY_("syntax error"));
        !          1835:            if (yysize != 0)
        !          1836:              goto yyexhaustedlab;
        !          1837:          }
        !          1838:       }
        !          1839: #endif
        !          1840:     }
        !          1841: 
        !          1842: 
        !          1843: 
        !          1844:   if (yyerrstatus == 3)
        !          1845:     {
        !          1846:       /* If just tried and failed to reuse lookahead token after an
        !          1847:         error, discard it.  */
        !          1848: 
        !          1849:       if (yychar <= YYEOF)
        !          1850:        {
        !          1851:          /* Return failure if at end of input.  */
        !          1852:          if (yychar == YYEOF)
        !          1853:            YYABORT;
        !          1854:        }
        !          1855:       else
        !          1856:        {
        !          1857:          yydestruct ("Error: discarding",
        !          1858:                      yytoken, &yylval);
        !          1859:          yychar = YYEMPTY;
        !          1860:        }
        !          1861:     }
        !          1862: 
        !          1863:   /* Else will try to reuse lookahead token after shifting the error
        !          1864:      token.  */
        !          1865:   goto yyerrlab1;
        !          1866: 
        !          1867: 
        !          1868: /*---------------------------------------------------.
        !          1869: | yyerrorlab -- error raised explicitly by YYERROR.  |
        !          1870: `---------------------------------------------------*/
        !          1871: yyerrorlab:
        !          1872: 
        !          1873:   /* Pacify compilers like GCC when the user code never invokes
        !          1874:      YYERROR and the label yyerrorlab therefore never appears in user
        !          1875:      code.  */
        !          1876:   if (/*CONSTCOND*/ 0)
        !          1877:      goto yyerrorlab;
        !          1878: 
        !          1879:   /* Do not reclaim the symbols of the rule which action triggered
        !          1880:      this YYERROR.  */
        !          1881:   YYPOPSTACK (yylen);
        !          1882:   yylen = 0;
        !          1883:   YY_STACK_PRINT (yyss, yyssp);
        !          1884:   yystate = *yyssp;
        !          1885:   goto yyerrlab1;
        !          1886: 
        !          1887: 
        !          1888: /*-------------------------------------------------------------.
        !          1889: | yyerrlab1 -- common code for both syntax error and YYERROR.  |
        !          1890: `-------------------------------------------------------------*/
        !          1891: yyerrlab1:
        !          1892:   yyerrstatus = 3;     /* Each real token shifted decrements this.  */
        !          1893: 
        !          1894:   for (;;)
        !          1895:     {
        !          1896:       yyn = yypact[yystate];
        !          1897:       if (yyn != YYPACT_NINF)
        !          1898:        {
        !          1899:          yyn += YYTERROR;
        !          1900:          if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
        !          1901:            {
        !          1902:              yyn = yytable[yyn];
        !          1903:              if (0 < yyn)
        !          1904:                break;
        !          1905:            }
        !          1906:        }
        !          1907: 
        !          1908:       /* Pop the current state because it cannot handle the error token.  */
        !          1909:       if (yyssp == yyss)
        !          1910:        YYABORT;
        !          1911: 
        !          1912: 
        !          1913:       yydestruct ("Error: popping",
        !          1914:                  yystos[yystate], yyvsp);
        !          1915:       YYPOPSTACK (1);
        !          1916:       yystate = *yyssp;
        !          1917:       YY_STACK_PRINT (yyss, yyssp);
        !          1918:     }
        !          1919: 
        !          1920:   *++yyvsp = yylval;
        !          1921: 
        !          1922: 
        !          1923:   /* Shift the error token.  */
        !          1924:   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
        !          1925: 
        !          1926:   yystate = yyn;
        !          1927:   goto yynewstate;
        !          1928: 
        !          1929: 
        !          1930: /*-------------------------------------.
        !          1931: | yyacceptlab -- YYACCEPT comes here.  |
        !          1932: `-------------------------------------*/
        !          1933: yyacceptlab:
        !          1934:   yyresult = 0;
        !          1935:   goto yyreturn;
        !          1936: 
        !          1937: /*-----------------------------------.
        !          1938: | yyabortlab -- YYABORT comes here.  |
        !          1939: `-----------------------------------*/
        !          1940: yyabortlab:
        !          1941:   yyresult = 1;
        !          1942:   goto yyreturn;
        !          1943: 
        !          1944: #if !defined(yyoverflow) || YYERROR_VERBOSE
        !          1945: /*-------------------------------------------------.
        !          1946: | yyexhaustedlab -- memory exhaustion comes here.  |
        !          1947: `-------------------------------------------------*/
        !          1948: yyexhaustedlab:
        !          1949:   yyerror (YY_("memory exhausted"));
        !          1950:   yyresult = 2;
        !          1951:   /* Fall through.  */
        !          1952: #endif
        !          1953: 
        !          1954: yyreturn:
        !          1955:   if (yychar != YYEMPTY)
        !          1956:      yydestruct ("Cleanup: discarding lookahead",
        !          1957:                 yytoken, &yylval);
        !          1958:   /* Do not reclaim the symbols of the rule which action triggered
        !          1959:      this YYABORT or YYACCEPT.  */
        !          1960:   YYPOPSTACK (yylen);
        !          1961:   YY_STACK_PRINT (yyss, yyssp);
        !          1962:   while (yyssp != yyss)
        !          1963:     {
        !          1964:       yydestruct ("Cleanup: popping",
        !          1965:                  yystos[*yyssp], yyvsp);
        !          1966:       YYPOPSTACK (1);
        !          1967:     }
        !          1968: #ifndef yyoverflow
        !          1969:   if (yyss != yyssa)
        !          1970:     YYSTACK_FREE (yyss);
        !          1971: #endif
        !          1972: #if YYERROR_VERBOSE
        !          1973:   if (yymsg != yymsgbuf)
        !          1974:     YYSTACK_FREE (yymsg);
        !          1975: #endif
        !          1976:   /* Make sure YYID is used.  */
        !          1977:   return YYID (yyresult);
        !          1978: }
        !          1979: 
        !          1980: 
        !          1981: 
        !          1982: /* Line 1675 of yacc.c  */
        !          1983: #line 320 "prsa_par.y"
        !          1984: 
        !          1985: 
        !          1986: int prsaparse(void);
        !          1987: 
        !          1988: int
        !          1989: prsa_parse_file(struct genlist *list, char *fname, enum rsa_key_type type)
        !          1990: {
        !          1991:        FILE *fp = NULL;
        !          1992:        int ret;
        !          1993:        
        !          1994:        if (!fname)
        !          1995:                return -1;
        !          1996:        if (type == RSA_TYPE_PRIVATE) {
        !          1997:                struct stat st;
        !          1998:                if (stat(fname, &st) < 0)
        !          1999:                        return -1;
        !          2000:                if (st.st_mode & (S_IRWXG | S_IRWXO)) {
        !          2001:                        plog(LLV_ERROR, LOCATION, NULL,
        !          2002:                                "Too slack permissions on private key '%s'\n", 
        !          2003:                                fname);
        !          2004:                        plog(LLV_ERROR, LOCATION, NULL,
        !          2005:                                "Should be at most 0600, now is 0%o\n",
        !          2006:                                st.st_mode & 0777);
        !          2007:                        return -1;
        !          2008:                }
        !          2009:        }
        !          2010:        fp = fopen(fname, "r");
        !          2011:        if (!fp)
        !          2012:                return -1;
        !          2013:        prsain = fp;
        !          2014:        prsa_cur_lineno = 1;
        !          2015:        prsa_cur_fname = fname;
        !          2016:        prsa_cur_list = list;
        !          2017:        prsa_cur_type = type;
        !          2018:        rsa_cur = RSA_new();
        !          2019:        ret = prsaparse();
        !          2020:        if (rsa_cur) {
        !          2021:                RSA_free(rsa_cur);
        !          2022:                rsa_cur = NULL;
        !          2023:        }
        !          2024:        fclose (fp);
        !          2025:        prsain = NULL;
        !          2026:        return ret;
        !          2027: }
        !          2028: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>