blob: c516edcfe56fd40881f1873246a17f52024c6ef1 [file] [log] [blame]
Karl Zhang3de5ab12021-05-31 11:45:48 +08001/*
Nik Dewallyabac0e52024-08-02 13:42:27 +01002 * Copyright (c) 2019-2024, Arm Limited. All rights reserved.
Karl Zhang3de5ab12021-05-31 11:45:48 +08003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 *
6 */
7
8
9%{
10#include "class_forwards.hpp"
11#include "boilerplate.hpp"
12#include "gibberish.hpp"
13#include "compute.hpp"
14#include "string_ops.hpp"
15#include "data_blocks.hpp"
16#include "psa_asset.hpp"
17#include "sst_asset.hpp"
18#include "crypto_asset.hpp"
19#include "find_or_create_asset.hpp"
20#include "template_line.hpp"
21#include "tf_fuzz.hpp"
22#include "psa_call.hpp"
23#include "tf_fuzz_grammar.tab.hpp"
24
25int yycolumn = 1;
26
27//char *yytext;
28
29#define YY_USER_ACTION yylloc.first_line = yylloc.last_line = yylineno; \
30 yylloc.first_column = yycolumn; yylloc.last_column = yycolumn + yyleng - 1; \
31 yycolumn += yyleng; \
32 yylval.str = strdup(yytext);
33
34void yyerror (tf_fuzz_info *, const char *str)
35 /* not sure why it sends the yyparse() argument to yyerror(), but OK... */
36{
37 fprintf (stderr, "tf_fuzz template on line %d, at text = \"%s\": %s\n",
38 yylineno, yytext, str);
39 exit (1);
40}
41
42#ifndef yyterminate
43#define yyterminate() return YY_NULL
44#endif
45
46%}
47
48%x BLOCK_COMMENT
49
50%option yylineno
51%option nodefault
52%option noyywrap
53%array
54
55%%
56
57\r ; /* ignore all \r */
58\/\/.*\n ; /* ignore C++-style line comments */
59purpose[ \t]+[^;]*; return PURPOSE;
60"/*" {BEGIN(BLOCK_COMMENT);}
61<BLOCK_COMMENT>"*/" {BEGIN(INITIAL);}
62<BLOCK_COMMENT>\n ;
63<BLOCK_COMMENT>. ;
64 /* Root commands: */
65set return SET;
66read return READ;
67remove return REMOVE;
68rm return REMOVE;
69secure return SECURE;
70sec return SECURE;
71done return DONE;
72 /* PSA-asset types: */
73sst return SST;
74key return KEY;
75policy return POLICY;
76 /* Other root-command operands: */
77expect return EXPECT;
78exp return EXPECT;
79pass return PASS;
80fail return FAIL;
81nothing return NOTHING;
82error return ERROR;
83\{ return OPEN_BRACE;
84\} return CLOSE_BRACE;
85; return SEMICOLON;
86name return NAME;
87uid return UID;
88data return DATA;
89\* return STAR;
90active return ACTIVE;
91act return ACTIVE;
92deleted return DELETED;
93del return DELETED;
94removed return DELETED;
95check return CHECK;
96chk return CHECK;
97var return VAR;
98print return PRINT;
99hash return HASH;
100neq return NEQ;
101dfname return DFNAME;
102shuffle return SHUFFLE;
103shuf return SHUFFLE;
104to return TO;
105of return OF;
106 /* SST creation keywords: */
107flag return FLAG;
108none return NONE;
109write_once return WRITE_ONCE;
110wo return WRITE_ONCE;
111no_rp return NO_RP;
112nrp return NO_RP;
113no_conf return NO_CONF;
114ncf return NO_CONF;
115 /* Offset into an SST asset */
116offset return OFFSET;
117 /* Policy keywords: */
118attributes return ATTR;
119attr return ATTR;
120type return TYPE;
121algorithm return ALG;
122alg return ALG;
Nik Dewally5200f6e2024-08-15 14:08:50 +0100123size return SIZE;
Karl Zhang3de5ab12021-05-31 11:45:48 +0800124 /* Policy-usage and -lifetime keywords: */
125export return EXPORT;
126exp return EXPORT;
127noexport return NOEXPORT;
128nex return NOEXPORT;
129copy return COPY;
130nocopy return NOCOPY;
131encrypt return ENCRYPT;
132encr return ENCRYPT;
133noencrypt return NOENCRYPT;
134nenc return NOENCRYPT;
135decrypt return DECRYPT;
136decr return DECRYPT;
137nodecrypt return NODECRYPT;
138ndecr return NODECRYPT;
139sign return SIGN;
140nosign return NOSIGN;
141verify return VERIFY;
142ver return VERIFY;
143noverify return NOVERIFY;
144nver return NOVERIFY;
145derive return DERIVE;
146der return DERIVE;
147noderive return NODERIVE;
148nder return NODERIVE;
149persistent return PERSISTENT;
150pers return PERSISTENT;
151volatile return VOLATILE;
152vol return VOLATILE;
153from return FROM;
154with return WITH;
Nik Dewallyabac0e52024-08-02 13:42:27 +0100155valid return VALID;
Karl Zhang3de5ab12021-05-31 11:45:48 +0800156 /* Structure operands: */
157[a-zA-z][a-zA-Z_0-9]* {yylval.str = yytext; return IDENTIFIER_TOK;}
158[+-]?[0-9]* {yylval.valueN = atol(yytext); return NUMBER_TOK;}
159\'[a-zA-Z_0-9\/\.]+\' {yylval.str = yytext; return FILE_PATH_TOK;}
160\"[^\"]*\" {yylval.str = yytext; return LITERAL_TOK;}
161\[[a-fA-F 0-9]*\] {yylval.str = yytext; return HEX_LIST;}
162 /* inside quotes: anything but a quote, or nothing */
163[ \t\n\r] ; /* ignore white space */
164. yyerror ((tf_fuzz_info *) NULL, "Unexpected character");
165
166%%