2 /* $NetBSD: cgdparse.y,v 1.4 2008/05/11 03:15:21 elric Exp $ */
5 * Copyright (c) 2003 The NetBSD Foundation, Inc.
8 * This code is derived from software contributed to The NetBSD Foundation
9 * by Roland C. Dowdeswell.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
14 * 1. Redistributions of source code must retain the above copyright
15 * notice, this list of conditions and the following disclaimer.
16 * 2. Redistributions in binary form must reproduce the above copyright
17 * notice, this list of conditions and the following disclaimer in the
18 * documentation and/or other materials provided with the distribution.
20 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30 * POSSIBILITY OF SUCH DAMAGE.
33 #include <sys/cdefs.h>
35 __RCSID
("$NetBSD: cgdparse.y,v 1.4 2008/05/11 03:15:21 elric Exp $");
45 static struct params
*yy_global_params
;
56 struct params
*params
;
57 struct keygen
*keygen
;
60 %type
<params
> entry rules rule
61 %type
<keygen
> kgrule kgbody kgvars kgvar deprecated
62 %type
<string> stringlit base64 intstr tokstr
64 %type
<token
> token deptoken
66 %token
<integer
> INTEGER
67 %token
<string> STRINGLIT
69 %token
<token
> ALGORITHM KEYLENGTH IVMETHOD VERIFY_METHOD
70 %token
<token
> KEYGEN SALT ITERATIONS KEY CMD
74 /* Deprecated tokens */
75 %token
<token
> KEYGEN_METHOD KEYGEN_SALT KEYGEN_ITERATIONS XOR_KEY
79 entry: rules
{ yy_global_params
= $$
; }
81 rules: /* empty */ { $$
= NULL
; }
82 | rules rule
{ $$
= params_combine
($$
, $2); }
84 rule: ALGORITHM stringlit EOL
{ $$
= params_algorithm
($2); }
85 | KEYLENGTH INTEGER EOL
{ $$
= params_keylen
($2); }
86 | IVMETHOD stringlit EOL
{ $$
= params_ivmeth
($2); }
87 | VERIFY_METHOD stringlit EOL
{ $$
= params_verify_method
($2); }
88 | kgrule
{ $$
= params_keygen
($1); }
89 | deprecated
{ $$
= params_dep_keygen
($1); }
92 kgrule: KEYGEN stringlit kgbody EOL
{ $$
= keygen_set_method
($3, $2); }
94 kgbody: kgvar
{ $$
= $1; }
95 |
'{' kgvars
'}' { $$
= $2; }
97 kgvars: /* empty */ { $$
= NULL
; }
98 | kgvars kgvar
{ $$
= keygen_combine
($$
, $2); }
100 kgvar: SALT bits EOL
{ $$
= keygen_salt
($2); }
101 | ITERATIONS INTEGER EOL
{ $$
= keygen_iterations
($2); }
102 | KEY bits EOL
{ $$
= keygen_key
($2); }
103 | CMD stringlit EOL
{ $$
= keygen_cmd
($2); }
106 stringlit: STRINGLIT | tokstr | intstr
108 tokstr: token
{ $$
= string_new
($1.text
, $1.length
); }
110 token: ALGORITHM | KEYLENGTH
111 | IVMETHOD | VERIFY_METHOD
112 | KEYGEN | SALT | ITERATIONS
116 intstr: INTEGER
{ $$
= string_fromint
($1); }
118 bits: base64
{ $$
= bits_decode_d
($1); }
121 | base64 stringlit
{ $$
= string_add_d
($1, $2); }
123 /* The following rules are deprecated */
126 KEYGEN_METHOD stringlit EOL
{ $$
= keygen_method
($2); }
127 | KEYGEN_SALT bits EOL
{ $$
= keygen_salt
($2); }
128 | KEYGEN_ITERATIONS INTEGER EOL
{ $$
= keygen_iterations
($2); }
129 | XOR_KEY bits EOL
{ $$
= keygen_key
($2); }
131 deptoken: KEYGEN_METHOD | KEYGEN_SALT
132 | KEYGEN_ITERATIONS | XOR_KEY
137 cgdparsefile
(FILE *f
)
141 yy_global_params
= NULL
;
143 fprintf
(stderr
, "%s: failed to parse parameters file\n",
145 params_free
(yy_global_params
);
148 return yy_global_params
;