stmt
#define if_USE_SCROLL_HINTS(stmt) stmt
#define if_USE_SCROLL_HINTS(stmt) /*nothing*/
#define if_EXT_COLORS(stmt) stmt
#define if_EXT_COLORS(stmt) /* nothing */
#define TR_OOM(stmt) T(stmt)
new_stmt = recallocarray(assert->stmt, assert->stmt_cnt, n,
assert->stmt = new_stmt;
if ((assert->stmt = calloc(1, sizeof(fido_assert_stmt))) == NULL)
&assert->stmt[assert->stmt_len], parse_assert_reply)) != FIDO_OK) {
&assert->stmt[assert->stmt_len], parse_assert_reply)) != FIDO_OK) {
fido_assert_stmt *stmt = &assert->stmt[i];
if (stmt->authdata_ext.hmac_secret_enc.ptr != NULL) {
&stmt->authdata_ext.hmac_secret_enc,
&stmt->hmac_secret) < 0) {
const fido_assert_stmt *stmt = NULL;
stmt = &assert->stmt[idx];
stmt->authdata_cbor.ptr == NULL || stmt->sig.ptr == NULL) {
(void *)stmt->authdata_cbor.ptr, (void *)stmt->sig.ptr);
if (fido_check_flags(stmt->authdata.flags, assert->up,
if (check_extensions(stmt->authdata_ext.mask, assert->ext.mask) < 0) {
if (fido_check_rp_id(assert->rp_id, stmt->authdata.rp_id_hash) != 0) {
&stmt->authdata_cbor) < 0) {
ok = es256_pk_verify_sig(&dgst, pk, &stmt->sig);
ok = rs256_pk_verify_sig(&dgst, pk, &stmt->sig);
ok = eddsa_pk_verify_sig(&dgst, pk, &stmt->sig);
fido_assert_stmt *stmt = arg;
fido_blob_set(&assert->stmt[idx].hmac_secret, secret,
return (cbor_decode_cred_id(val, &stmt->id));
return (cbor_decode_assert_authdata(val, &stmt->authdata_cbor,
&stmt->authdata, &stmt->authdata_ext));
return (fido_blob_decode(val, &stmt->sig));
free(assert->stmt[i].user.icon);
free(assert->stmt[i].user.name);
free(assert->stmt[i].user.display_name);
fido_blob_reset(&assert->stmt[i].user.id);
fido_blob_reset(&assert->stmt[i].id);
fido_blob_reset(&assert->stmt[i].hmac_secret);
fido_blob_reset(&assert->stmt[i].authdata_cbor);
fido_blob_reset(&assert->stmt[i].largeblob_key);
fido_blob_reset(&assert->stmt[i].sig);
fido_assert_reset_extattr(&assert->stmt[i].authdata_ext);
return (cbor_decode_user(val, &stmt->user));
memset(&assert->stmt[i], 0, sizeof(assert->stmt[i]));
free(assert->stmt);
assert->stmt = NULL;
return (fido_blob_decode(val, &stmt->largeblob_key));
return (assert->stmt[idx].authdata.flags);
return (assert->stmt[idx].authdata.sigcount);
return (assert->stmt[idx].authdata_cbor.ptr);
return (assert->stmt[idx].authdata_cbor.len);
return (assert->stmt[idx].sig.ptr);
return (assert->stmt[idx].sig.len);
return (assert->stmt[idx].id.ptr);
return (assert->stmt[idx].id.len);
return (assert->stmt[idx].user.id.ptr);
return (assert->stmt[idx].user.id.len);
return (assert->stmt[idx].user.icon);
return (assert->stmt[idx].user.name);
return (assert->stmt[idx].user.display_name);
return (assert->stmt[idx].hmac_secret.ptr);
return (assert->stmt[idx].hmac_secret.len);
return (assert->stmt[idx].largeblob_key.ptr);
return (assert->stmt[idx].largeblob_key.len);
return (assert->stmt[idx].authdata_ext.blob.ptr);
return (assert->stmt[idx].authdata_ext.blob.len);
fido_assert_clean_authdata(fido_assert_stmt *stmt)
fido_blob_reset(&stmt->authdata_cbor);
fido_assert_reset_extattr(&stmt->authdata_ext);
memset(&stmt->authdata, 0, sizeof(stmt->authdata));
fido_assert_stmt *stmt = NULL;
stmt = &assert->stmt[idx];
fido_assert_clean_authdata(stmt);
if (cbor_decode_assert_authdata(item, &stmt->authdata_cbor,
&stmt->authdata, &stmt->authdata_ext) < 0) {
fido_assert_clean_authdata(stmt);
fido_assert_stmt *stmt = NULL;
stmt = &assert->stmt[idx];
fido_assert_clean_authdata(stmt);
if (cbor_decode_assert_authdata(item, &stmt->authdata_cbor,
&stmt->authdata, &stmt->authdata_ext) < 0) {
fido_assert_clean_authdata(stmt);
if (fido_blob_set(&a->stmt[idx].sig, ptr, len) < 0)
fido_assert_stmt *stmt; /* array of expected assertions */
fido_blob_t stmt;
memset(&stmt, 0, sizeof(stmt));
if (encode_cred_attstmt(COSE_ES256, &x5c, &sig, &stmt) < 0) {
fido_cred_set_attstmt(cred, stmt.ptr, stmt.len) != FIDO_OK) {
fido_blob_reset(&stmt);
if (fido_blob_set(&fa->stmt[idx].id, key_id->ptr, key_id->len) < 0) {
struct stmt s; /* branch stmt */
struct stmt s;
struct stmt *stmt;
deadstmt(struct stmt *s, struct stmt *last[])
struct stmt *last[N_ATOMS];
static void fold_op(struct stmt *, int, int);
static void opt_stmt(struct stmt *, int[], int);
static void deadstmt(struct stmt *, struct stmt *[]);
atomuse(struct stmt *s)
atomdef(struct stmt *s)
vstore(struct stmt *s, int *valp, int newval, int alter)
fold_op(struct stmt *s, int v0, int v1)
opt_stmt(struct stmt *s, int val[], int alter)
static int atomuse(struct stmt *);
static int atomdef(struct stmt *);
static __inline void vstore(struct stmt *, int *, int, int);
#define DPRINTF(stmt) printf stmt
#define DPRINTF(stmt) do { } while (0)
#define DPRINTF(flg, stmt) \
printf stmt; \
#define DPRINTF(flg, stmt) do { } while (0)
FOR '(' opt_simple_stmt ';' opt_nl pattern ';' opt_nl opt_simple_stmt rparen {inloop++;} stmt
| FOR '(' opt_simple_stmt ';' ';' opt_nl opt_simple_stmt rparen {inloop++;} stmt
| FOR '(' varname IN varname rparen {inloop++;} stmt
stmt:
| do {inloop++;} stmt {--inloop;} WHILE '(' pattern ')' st
| if stmt else stmt { $$ = stat3(IF, $1, $2, $4); }
| if stmt { $$ = stat3(IF, $1, $2, NIL); }
| while {inloop++;} stmt { --inloop; $$ = stat2(WHILE, $1, $3); }
stmt
| stmtlist stmt { $$ = linkum($1, $2); }
%type <p> simple_stmt opt_simple_stmt stmt stmtlist
ps.p_stack[0] = stmt; /* this is the parser's stack */
ps.p_stack[++ps.tos] = stmt;
ps.p_stack[ps.tos] = stmt;
ps.p_stack[++ps.tos] = stmt;
case stmt:
case stmt:
ps.p_stack[i] != stmt
ps.p_stack[--ps.tos] = stmt;
ps.p_stack[--ps.tos] = stmt;
ps.p_stack[ps.tos] = stmt; /* apply the if(..) stmt ::= stmt
if (ps.p_stack[ps.tos] == stmt || ps.p_stack[ps.tos] == decl
struct bt_stmt *stmt;
%type <v.stmt> action stmt stmtblck stmtlist block
stmt : ';' NL { $$ = NULL; }
| stmtlist stmt { $$ = bs_append($1, $2); }
| stmt
| stmt ';'
| stmts stmt
stmt : error