mirror of
https://github.com/biscuit-auth/biscuit.git
synced 2024-09-11 06:15:30 +03:00
SPEC: add support for bitwise operators on booleans (#112)
Such operators are only valid for v4 blocks Co-authored-by: Geoffroy Couprie <contact@geoffroycouprie.com>
This commit is contained in:
parent
06e0888a97
commit
8c8c433e9b
@ -137,7 +137,7 @@ rules application does not generate any new facts, we can stop.
|
||||
|
||||
An _integer_ is a signed 64 bits integer. It supports the following
|
||||
operations: lower than, greater than, lower than or equal, greater than or equal, equal, set
|
||||
inclusion.
|
||||
inclusion, addition, subtraction, mutiplication, division, bitwise and (v4 only), bitwise or (v4 only), bitwise xor (v4 only).
|
||||
|
||||
A _string_ is a suite of UTF-8 characters. It supports the following
|
||||
operations: prefix, suffix, equal, set inclusion, regular expression, concatenation (with `+`), substring test (with `.contains()`).
|
||||
@ -196,7 +196,7 @@ The logic language is described by the following EBNF grammar:
|
||||
<method_name> ::= ([a-z] | [A-Z] ) ([a-z] | [A-Z] | [0-9] | "_" )*
|
||||
|
||||
<expression_term> ::= <term> | ("(" <sp>? <expression> <sp>? ")")
|
||||
<operator> ::= "<" | ">" | "<=" | ">=" | "==" | "&&" | "||" | "+" | "-" | "*" | "/"
|
||||
<operator> ::= "<" | ">" | "<=" | ">=" | "==" | "&&" | "||" | "+" | "-" | "*" | "/" | "&" | "|" | "^"
|
||||
|
||||
<sp> ::= (" " | "\t" | "\n")+
|
||||
```
|
||||
@ -437,6 +437,9 @@ Here are the currently defined binary operations:
|
||||
- _or_, defined on booleans, returns a boolean
|
||||
- _intersection_, defined on sets, return a set that is the intersection of both arguments
|
||||
- _union_, defined on sets, return a set that is the union of both arguments
|
||||
- _bitwiseAnd_, defined on integers, returns an integer
|
||||
- _bitwiseOr_, defined on integers, returns an integer
|
||||
- _bitwiseXor_, defined on integers, returns an integer
|
||||
|
||||
Integer operations must have overflow checks. If it overflows, the expression
|
||||
fails.
|
||||
|
@ -888,6 +888,7 @@ check if 2 >= 1;
|
||||
check if 2 >= 2;
|
||||
check if 3 == 3;
|
||||
check if 1 + 2 * 3 - 4 / 2 == 5;
|
||||
check if 1 | 2 ^ 3 == 0;
|
||||
check if "hello world".starts_with("hello") && "hello world".ends_with("world");
|
||||
check if "aaabde".matches("a*c?.e");
|
||||
check if "aaabde".contains("abd");
|
||||
@ -916,7 +917,7 @@ allow if true;
|
||||
```
|
||||
|
||||
revocation ids:
|
||||
- `f1391d7549f4c165dd58878c8433bdc23634533f4910bcd37fc53d5b3b29c542ef1b46a38a42beb2df911d526a52f65774e1d60f910dbe15ca1591735617240b`
|
||||
- `d11eaf29a6f7596e53fbf2360638c72432c7fbd09e2e39205b5a6ca922ac053168e952ed0c75a0d2ceb8798aa918560b78185eef880abc7705aa9b611e5d8707`
|
||||
|
||||
authorizer world:
|
||||
```
|
||||
|
@ -961,7 +961,7 @@
|
||||
],
|
||||
"public_keys": [],
|
||||
"external_key": null,
|
||||
"code": "check if true;\ncheck if !false;\ncheck if !false && true;\ncheck if false or true;\ncheck if (true || false) && true;\ncheck if 1 < 2;\ncheck if 2 > 1;\ncheck if 1 <= 2;\ncheck if 1 <= 1;\ncheck if 2 >= 1;\ncheck if 2 >= 2;\ncheck if 3 == 3;\ncheck if 1 + 2 * 3 - 4 / 2 == 5;\ncheck if \"hello world\".starts_with(\"hello\") && \"hello world\".ends_with(\"world\");\ncheck if \"aaabde\".matches(\"a*c?.e\");\ncheck if \"aaabde\".contains(\"abd\");\ncheck if \"aaabde\" == \"aaa\" + \"b\" + \"de\";\ncheck if \"abcD12\" == \"abcD12\";\ncheck if 2019-12-04T09:46:41Z < 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z > 2019-12-04T09:46:41Z;\ncheck if 2019-12-04T09:46:41Z <= 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z >= 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z >= 2019-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z >= 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z == 2020-12-04T09:46:41Z;\ncheck if hex:12ab == hex:12ab;\ncheck if [1, 2].contains(2);\ncheck if [2019-12-04T09:46:41Z, 2020-12-04T09:46:41Z].contains(2020-12-04T09:46:41Z);\ncheck if [false, true].contains(true);\ncheck if [\"abc\", \"def\"].contains(\"abc\");\ncheck if [hex:12ab, hex:34de].contains(hex:34de);\n"
|
||||
"code": "check if true;\ncheck if !false;\ncheck if !false && true;\ncheck if false or true;\ncheck if (true || false) && true;\ncheck if 1 < 2;\ncheck if 2 > 1;\ncheck if 1 <= 2;\ncheck if 1 <= 1;\ncheck if 2 >= 1;\ncheck if 2 >= 2;\ncheck if 3 == 3;\ncheck if 1 + 2 * 3 - 4 / 2 == 5;\ncheck if 1 | 2 ^ 3 == 0;\ncheck if \"hello world\".starts_with(\"hello\") && \"hello world\".ends_with(\"world\");\ncheck if \"aaabde\".matches(\"a*c?.e\");\ncheck if \"aaabde\".contains(\"abd\");\ncheck if \"aaabde\" == \"aaa\" + \"b\" + \"de\";\ncheck if \"abcD12\" == \"abcD12\";\ncheck if 2019-12-04T09:46:41Z < 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z > 2019-12-04T09:46:41Z;\ncheck if 2019-12-04T09:46:41Z <= 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z >= 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z >= 2019-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z >= 2020-12-04T09:46:41Z;\ncheck if 2020-12-04T09:46:41Z == 2020-12-04T09:46:41Z;\ncheck if hex:12ab == hex:12ab;\ncheck if [1, 2].contains(2);\ncheck if [2019-12-04T09:46:41Z, 2020-12-04T09:46:41Z].contains(2020-12-04T09:46:41Z);\ncheck if [false, true].contains(true);\ncheck if [\"abc\", \"def\"].contains(\"abc\");\ncheck if [hex:12ab, hex:34de].contains(hex:34de);\n"
|
||||
}
|
||||
],
|
||||
"validations": {
|
||||
@ -979,7 +979,7 @@
|
||||
},
|
||||
"authorizer_code": "allow if true;\n",
|
||||
"revocation_ids": [
|
||||
"f1391d7549f4c165dd58878c8433bdc23634533f4910bcd37fc53d5b3b29c542ef1b46a38a42beb2df911d526a52f65774e1d60f910dbe15ca1591735617240b"
|
||||
"d11eaf29a6f7596e53fbf2360638c72432c7fbd09e2e39205b5a6ca922ac053168e952ed0c75a0d2ceb8798aa918560b78185eef880abc7705aa9b611e5d8707"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
Binary file not shown.
@ -139,6 +139,9 @@ message OpBinary {
|
||||
Or = 14;
|
||||
Intersection = 15;
|
||||
Union = 16;
|
||||
BitwiseAnd = 17;
|
||||
BitwiseOr = 18;
|
||||
BitwiseXor = 19;
|
||||
}
|
||||
|
||||
required Kind kind = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user