blob: 7df98968d5835b9b47a5ef5b378fa7ef8ed257c4 [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;
123 /* Policy-usage and -lifetime keywords: */
124export return EXPORT;
125exp return EXPORT;
126noexport return NOEXPORT;
127nex return NOEXPORT;
128copy return COPY;
129nocopy return NOCOPY;
130encrypt return ENCRYPT;
131encr return ENCRYPT;
132noencrypt return NOENCRYPT;
133nenc return NOENCRYPT;
134decrypt return DECRYPT;
135decr return DECRYPT;
136nodecrypt return NODECRYPT;
137ndecr return NODECRYPT;
138sign return SIGN;
139nosign return NOSIGN;
140verify return VERIFY;
141ver return VERIFY;
142noverify return NOVERIFY;
143nver return NOVERIFY;
144derive return DERIVE;
145der return DERIVE;
146noderive return NODERIVE;
147nder return NODERIVE;
148persistent return PERSISTENT;
149pers return PERSISTENT;
150volatile return VOLATILE;
151vol return VOLATILE;
152from return FROM;
153with return WITH;
Nik Dewallyabac0e52024-08-02 13:42:27 +0100154valid return VALID;
Karl Zhang3de5ab12021-05-31 11:45:48 +0800155 /* Structure operands: */
156[a-zA-z][a-zA-Z_0-9]* {yylval.str = yytext; return IDENTIFIER_TOK;}
157[+-]?[0-9]* {yylval.valueN = atol(yytext); return NUMBER_TOK;}
158\'[a-zA-Z_0-9\/\.]+\' {yylval.str = yytext; return FILE_PATH_TOK;}
159\"[^\"]*\" {yylval.str = yytext; return LITERAL_TOK;}
160\[[a-fA-F 0-9]*\] {yylval.str = yytext; return HEX_LIST;}
161 /* inside quotes: anything but a quote, or nothing */
162[ \t\n\r] ; /* ignore white space */
163. yyerror ((tf_fuzz_info *) NULL, "Unexpected character");
164
165%%