Skip to content

Commit 6c10d5a

Browse files
authored
Merge pull request #93 from biscuit-auth/release-0.4.0.0
Release 0.4.0.0
2 parents 741dfa2 + 1fc1646 commit 6c10d5a

File tree

11 files changed

+91
-74
lines changed

11 files changed

+91
-74
lines changed

biscuit-servant/ChangeLog.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog for biscuit-servant
22

3+
## 0.4.0.0
4+
5+
- use biscuit-haskell 0.4.0.0
6+
37
## 0.3.0.1
48

59
- use biscuit-haskell 0.3.0.1

biscuit-servant/biscuit-servant.cabal

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cabal-version: 2.0
22

33
name: biscuit-servant
4-
version: 0.3.0.1
4+
version: 0.4.0.0
55
category: Security
66
synopsis: Servant support for the Biscuit security token
77
description: Please see the README on GitHub at <https://github.com/biscuit-auth/biscuit-haskell#readme>
@@ -34,7 +34,7 @@ library
3434
ghc-options: -Wall
3535
build-depends:
3636
base >= 4.7 && <5,
37-
biscuit-haskell >= 0.3 && < 0.4,
37+
biscuit-haskell >= 0.4 && < 0.5,
3838
bytestring >= 0.10 && <0.12,
3939
mtl >= 2.2 && < 2.4,
4040
text >= 1.2 && <3,

biscuit/ChangeLog.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Changelog for biscuit-haskell
22

3+
## 0.4.0.0
4+
5+
- abort authorization on evaluation error as mandated by the spec
6+
- use utf8 byte count in `{string}.length()` as mandated by the spec
7+
- fix security issue with third-party blocks public key interning, see [advisory](https://github.com/biscuit-auth/biscuit/security/advisories/GHSA-rgqv-mwc3-c78m)
8+
39
## 0.3.0.1
410

511
- GHC 9.6 and 9.8 support

biscuit/biscuit-haskell.cabal

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
cabal-version: 2.0
22

33
name: biscuit-haskell
4-
version: 0.3.0.1
4+
version: 0.4.0.0
55
category: Security
66
synopsis: Library support for the Biscuit security token
77
description: Please see the README on GitHub at <https://github.com/biscuit-auth/biscuit-haskell#readme>

biscuit/src/Auth/Biscuit/ProtoBufAdapter.hs

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
{-# LANGUAGE DataKinds #-}
22
{-# LANGUAGE LambdaCase #-}
3+
{-# LANGUAGE MultiWayIf #-}
34
{-# LANGUAGE NamedFieldPuns #-}
45
{-# LANGUAGE OverloadedStrings #-}
56
{-# LANGUAGE RecordWildCards #-}
@@ -25,13 +26,12 @@ module Auth.Biscuit.ProtoBufAdapter
2526
, thirdPartyBlockContentsToPb
2627
) where
2728

28-
import Control.Monad (when)
29+
import Control.Monad (unless, when)
2930
import Control.Monad.State (StateT, get, lift, modify)
30-
import Data.Bitraversable (bisequence)
3131
import Data.ByteString (ByteString)
3232
import Data.Int (Int64)
3333
import qualified Data.List.NonEmpty as NE
34-
import Data.Maybe (isNothing)
34+
import Data.Maybe (isJust, isNothing)
3535
import qualified Data.Set as Set
3636
import qualified Data.Text as T
3737
import Data.Time (UTCTime)
@@ -110,17 +110,17 @@ pbToBlock ePk PB.Block{..} = do
110110
-- but use the global public keys table:
111111
-- symbols defined in 3rd party blocks are not visible
112112
-- to following blocks, but public keys are
113-
when (isNothing ePk) $ modify (registerNewSymbols blockSymbols)
114-
modify (registerNewPublicKeys $ foldMap pure ePk <> blockPks)
113+
when (isNothing ePk) $ do
114+
modify (registerNewSymbols blockSymbols)
115+
modify (registerNewPublicKeys blockPks)
115116
currentSymbols <- get
116117

117118
let symbolsForCurrentBlock =
118-
-- third party blocks use an isolated symbol table,
119-
-- but use the global public keys table.
119+
-- third party blocks use an isolated symbol and public keys table,
120120
-- 3rd party blocks don't see previously defined
121-
-- symbols, but see previously defined public keys
121+
-- symbols or public keys
122122
if isNothing ePk then currentSymbols
123-
else registerNewSymbols blockSymbols $ forgetSymbols currentSymbols
123+
else registerNewPublicKeys blockPks $ registerNewSymbols blockSymbols newSymbolTable
124124
let bContext = PB.getField context
125125
bVersion = PB.getField version
126126
lift $ do
@@ -129,32 +129,41 @@ pbToBlock ePk PB.Block{..} = do
129129
bRules <- traverse (pbToRule s) $ PB.getField rules_v2
130130
bChecks <- traverse (pbToCheck s) $ PB.getField checks_v2
131131
bScope <- Set.fromList <$> traverse (pbToScope s) (PB.getField scope)
132-
let isV3 = isNothing ePk
133-
&& Set.null bScope
134-
&& all ruleHasNoScope bRules
135-
&& all (queryHasNoScope . cQueries) bChecks
136-
&& all isCheckOne bChecks
137-
&& all ruleHasNoV4Operators bRules
138-
&& all (queryHasNoV4Operators . cQueries) bChecks
139-
case (bVersion, isV3) of
140-
(Just 4, _) -> pure Block {..}
141-
(Just 3, True) -> pure Block {..}
142-
(Just 3, False) ->
143-
Left "Biscuit v4 fields are present, but the block version is 3."
132+
let v5Plus = isJust ePk
133+
v4Plus = not $ and
134+
[ Set.null bScope
135+
, all ruleHasNoScope bRules
136+
, all (queryHasNoScope . cQueries) bChecks
137+
, all isCheckOne bChecks
138+
, all ruleHasNoV4Operators bRules
139+
, all (queryHasNoV4Operators . cQueries) bChecks
140+
]
141+
case (bVersion, v4Plus, v5Plus) of
142+
(Just 5, _, _) -> pure Block {..}
143+
(Just 4, _, False) -> pure Block {..}
144+
(Just 4, _, True) ->
145+
Left "Biscuit v5 features are present, but the block version is 4."
146+
(Just 3, False, False) -> pure Block {..}
147+
(Just 3, True, False) ->
148+
Left "Biscuit v4 features are present, but the block version is 3."
149+
(Just 3, _, True) ->
150+
Left "Biscuit v5 features are present, but the block version is 3."
144151
_ ->
145152
Left $ "Unsupported biscuit version: " <> maybe "0" show bVersion <> ". Only versions 3 and 4 are supported"
146153

147154
-- | Turn a biscuit block into a protobuf block, for serialization,
148155
-- along with the newly defined symbols
149156
blockToPb :: Bool -> Symbols -> Block -> (BlockSymbols, PB.Block)
150157
blockToPb hasExternalPk existingSymbols b@Block{..} =
151-
let isV3 = not hasExternalPk
152-
&& Set.null bScope
153-
&& all ruleHasNoScope bRules
154-
&& all (queryHasNoScope . cQueries) bChecks
155-
&& all isCheckOne bChecks
156-
&& all ruleHasNoV4Operators bRules
157-
&& all (queryHasNoV4Operators . cQueries) bChecks
158+
let v4Plus = not $ and
159+
[Set.null bScope
160+
, all ruleHasNoScope bRules
161+
, all (queryHasNoScope . cQueries) bChecks
162+
, all isCheckOne bChecks
163+
, all ruleHasNoV4Operators bRules
164+
, all (queryHasNoV4Operators . cQueries) bChecks
165+
]
166+
v5Plus = hasExternalPk
158167
bSymbols = buildSymbolTable existingSymbols b
159168
s = reverseSymbols $ addFromBlock existingSymbols bSymbols
160169
symbols = PB.putField $ getSymbolList bSymbols
@@ -164,8 +173,9 @@ blockToPb hasExternalPk existingSymbols b@Block{..} =
164173
checks_v2 = PB.putField $ checkToPb s <$> bChecks
165174
scope = PB.putField $ scopeToPb s <$> Set.toList bScope
166175
pksTable = PB.putField $ publicKeyToPb <$> getPkList bSymbols
167-
version = PB.putField $ if isV3 then Just 3
168-
else Just 4
176+
version = PB.putField $ if | v5Plus -> Just 5
177+
| v4Plus -> Just 4
178+
| otherwise -> Just 3
169179
in (bSymbols, PB.Block {..})
170180

171181
pbToFact :: Symbols -> PB.FactV2 -> Either String Fact
@@ -415,17 +425,15 @@ binaryToPb = PB.OpBinary . PB.putField . \case
415425
BitwiseXor -> PB.BitwiseXor
416426
NotEqual -> PB.NotEqual
417427

418-
pbToThirdPartyBlockRequest :: PB.ThirdPartyBlockRequest -> Either String (Crypto.PublicKey, [Crypto.PublicKey])
428+
pbToThirdPartyBlockRequest :: PB.ThirdPartyBlockRequest -> Either String Crypto.PublicKey
419429
pbToThirdPartyBlockRequest PB.ThirdPartyBlockRequest{previousPk, pkTable} = do
420-
bisequence
421-
( pbToPublicKey $ PB.getField previousPk
422-
traverse pbToPublicKey $ PB.getField pkTable
423-
)
430+
unless (null $ PB.getField pkTable) $ Left "Public key table provided in third-party block request"
431+
pbToPublicKey $ PB.getField previousPk
424432

425-
thirdPartyBlockRequestToPb :: (Crypto.PublicKey, [Crypto.PublicKey]) -> PB.ThirdPartyBlockRequest
426-
thirdPartyBlockRequestToPb (previousPk, pkTable) = PB.ThirdPartyBlockRequest
433+
thirdPartyBlockRequestToPb :: Crypto.PublicKey -> PB.ThirdPartyBlockRequest
434+
thirdPartyBlockRequestToPb previousPk = PB.ThirdPartyBlockRequest
427435
{ previousPk = PB.putField $ publicKeyToPb previousPk
428-
, pkTable = PB.putField $ publicKeyToPb <$> pkTable
436+
, pkTable = PB.putField []
429437
}
430438

431439
pbToThirdPartyBlockContents :: PB.ThirdPartyBlockContents -> Either String (ByteString, Crypto.Signature, Crypto.PublicKey)

biscuit/src/Auth/Biscuit/Symbols.hs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ module Auth.Biscuit.Symbols
1515
, addFromBlock
1616
, registerNewSymbols
1717
, registerNewPublicKeys
18-
, forgetSymbols
1918
, reverseSymbols
2019
, getSymbolList
2120
, getPkList
@@ -139,9 +138,6 @@ registerNewPublicKeys newPks s@Symbols{publicKeys} =
139138
let newPkMap = Map.fromList $ zip [getNextPublicKeyOffset s..] (newPks \\ elems publicKeys)
140139
in s { publicKeys = publicKeys <> newPkMap }
141140

142-
forgetSymbols :: Symbols -> Symbols
143-
forgetSymbols s = s { symbols = commonSymbols }
144-
145141
-- | Reverse a symbol table
146142
reverseSymbols :: Symbols -> ReverseSymbols
147143
reverseSymbols (Symbols sm pkm) =

biscuit/src/Auth/Biscuit/Token.hs

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -306,26 +306,21 @@ addSignedBlock :: SecretKey
306306
-> Biscuit Open check
307307
-> IO (Biscuit Open check)
308308
addSignedBlock eSk block b@Biscuit{..} = do
309-
let symbolsForCurrentBlock = forgetSymbols $ registerNewPublicKeys [toPublic eSk] symbols
310-
(newSymbols, blockSerialized) = PB.encodeBlock <$> blockToPb True symbolsForCurrentBlock block
309+
let (_, blockSerialized) = PB.encodeBlock <$> blockToPb True newSymbolTable block
311310
lastBlock = NE.last (authority :| blocks)
312311
(_, _, lastPublicKey, _) = lastBlock
313312
Open p = proof
314313
(signedBlock, nextSk) <- signExternalBlock p eSk lastPublicKey blockSerialized
315314
pure $ b { blocks = blocks <> [toParsedSignedBlock block signedBlock]
316-
, symbols = registerNewPublicKeys (getPkList newSymbols) symbols
317315
, proof = Open nextSk
318316
}
319317

320318
mkThirdPartyBlock' :: SecretKey
321-
-> [PublicKey]
322319
-> PublicKey
323320
-> Block
324321
-> (ByteString, Signature, PublicKey)
325-
mkThirdPartyBlock' eSk pkTable lastPublicKey block =
326-
let symbolsForCurrentBlock = registerNewPublicKeys [toPublic eSk] $
327-
registerNewPublicKeys pkTable newSymbolTable
328-
(_, payload) = PB.encodeBlock <$> blockToPb True symbolsForCurrentBlock block
322+
mkThirdPartyBlock' eSk lastPublicKey block =
323+
let (_, payload) = PB.encodeBlock <$> blockToPb True newSymbolTable block
329324
(eSig, ePk) = sign3rdPartyBlock eSk lastPublicKey payload
330325
in (payload, eSig, ePk)
331326

@@ -336,17 +331,17 @@ mkThirdPartyBlock :: SecretKey
336331
-> Block
337332
-> Either String ByteString
338333
mkThirdPartyBlock eSk req block = do
339-
(previousPk, pkTable) <- pbToThirdPartyBlockRequest =<< PB.decodeThirdPartyBlockRequest req
340-
pure $ PB.encodeThirdPartyBlockContents . thirdPartyBlockContentsToPb $ mkThirdPartyBlock' eSk pkTable previousPk block
334+
previousPk<- pbToThirdPartyBlockRequest =<< PB.decodeThirdPartyBlockRequest req
335+
pure $ PB.encodeThirdPartyBlockContents . thirdPartyBlockContentsToPb $ mkThirdPartyBlock' eSk previousPk block
341336

342337
-- | Generate a third-party block request. It can be used in
343338
-- conjunction with 'mkThirdPartyBlock' to generate a
344339
-- third-party block, which can be then appended to a token with
345340
-- 'applyThirdPartyBlock'.
346341
mkThirdPartyBlockReq :: Biscuit proof check -> ByteString
347-
mkThirdPartyBlockReq Biscuit{authority,blocks,symbols} =
342+
mkThirdPartyBlockReq Biscuit{authority,blocks} =
348343
let (_, _ , lastPk, _) = NE.last $ authority :| blocks
349-
in PB.encodeThirdPartyBlockRequest $ thirdPartyBlockRequestToPb (lastPk, getPkTable symbols)
344+
in PB.encodeThirdPartyBlockRequest $ thirdPartyBlockRequestToPb lastPk
350345

351346
-- | Given a base64-encoded third-party block, append it to a token.
352347
applyThirdPartyBlock :: Biscuit Open check -> ByteString -> Either String (IO (Biscuit Open check))

biscuit/test/samples/current/README.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1841,7 +1841,7 @@ allow if true;
18411841

18421842
revocation ids:
18431843
- `470e4bf7aa2a01ab39c98150bd06aa15b4aa5d86509044a8809a8634cd8cf2b42269a51a774b65d10bac9369d013070b00187925196a8e680108473f11cf8f03`
1844-
- `93a7315ab1272da9eeef015f6fecbc9ac96fe4660e6204bf64ea2105ebe309e9c9cadc0a26c5604f13910fae3f2cd0800756afb6b6b208bf77adeb1ab2f42405`
1844+
- `342167bc54bc642b6718a276875e55b6d39e9b21e4ce13b926a3d398b6c057fc436385bf4c817a16f9ecdf0b0d950e8b8258a20aeb3fd8896c5e9c1f0a53da03`
18451845

18461846
authorizer world:
18471847
```
@@ -2041,7 +2041,7 @@ check if true trusting previous, ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755
20412041
1:
20422042
symbols: []
20432043

2044-
public keys: ["ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463"]
2044+
public keys: ["ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463", "ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189"]
20452045

20462046
external signature by: "ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189"
20472047

@@ -2055,7 +2055,7 @@ check if query(1) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5
20552055
2:
20562056
symbols: []
20572057

2058-
public keys: []
2058+
public keys: ["ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463", "ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189"]
20592059

20602060
external signature by: "ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463"
20612061

@@ -2068,7 +2068,7 @@ check if query(1) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5
20682068
3:
20692069
symbols: []
20702070

2071-
public keys: []
2071+
public keys: ["ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463", "ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189"]
20722072

20732073
external signature by: "ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463"
20742074

@@ -2081,7 +2081,7 @@ check if query(1) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5
20812081
4:
20822082
symbols: []
20832083

2084-
public keys: ["ed25519/f98da8c1cf907856431bfc3dc87531e0eaadba90f919edc232405b85877ef136"]
2084+
public keys: ["ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463", "ed25519/f98da8c1cf907856431bfc3dc87531e0eaadba90f919edc232405b85877ef136"]
20852085

20862086
```
20872087
query(4);
@@ -2103,10 +2103,10 @@ allow if true;
21032103

21042104
revocation ids:
21052105
- `3771cefe71beb21ead35a59c8116ee82627a5717c0295f35980662abccb159fe1b37848cb1818e548656bd4fd882d0094a2daab631c76b2b72e3a093914bfe04`
2106-
- `45133b90f228a81fe4d3042a79f6c6b7608e656e903d6b1f4db32cd774b09b8315af360879a5f210ad7be37ff55e3eb34f237bcc9711407b6329ac6018bfb400`
2107-
- `179f054f3c572646aba5013159ae192ac42f5666dbdd984129955f4652b6829e59f54aa251e451f96329d42a2524ce569c3e1ec52e708b642dd8994af51dd703`
2108-
- `edab54789d6656936fcd28200b9c61643434842d531f09f209fad555e11ff53174db174dafba126e6de448983a56f78d2042bc5782d71a45799c022fe69fb30d`
2109-
- `6a62306831e9dbe83e7b33db96b758c77dd690930f2d2d87e239b210b1944c5582bf6d7e1bfea8e7f928c27f2fff0e2ee2e0adc41e11e0c3abe8d7b96b9ede07`
2106+
- `6528db2c9a561ada9086268549a600a8a52ff434ea8183812623eec0e9b6c5d3c41ab7868808623021d92294d583afdf92f4354bcdaa1bc50453e1b89afd630d`
2107+
- `5d5679fe69bfe74b7919323515e9ecba9d01422b16be9341b57f88e695b2bb0bd7966b781001d2b9e00ee618fdc239c96e17e32cb379f13f12d6bd7b1b47ad04`
2108+
- `c37bf24c063f0310eccab8864e48dbeffcdd7240b4f8d1e01eba4fc703e6c9082b845bb55543b10f008dc7f4e78540411912ac1f36fa2aa90011dca40f323b09`
2109+
- `3f675d6c364e06405d4868c904e40f3d81c32b083d91586db814d4cb4bf536b4ba209d82f11b4cb6da293b60b20d6122fc3e0e08e80c381dee83edd848211900`
21102110

21112111
authorizer world:
21122112
```

biscuit/test/samples/current/samples.json

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,7 +1798,7 @@
17981798
"authorizer_code": "allow if true;\n",
17991799
"revocation_ids": [
18001800
"470e4bf7aa2a01ab39c98150bd06aa15b4aa5d86509044a8809a8634cd8cf2b42269a51a774b65d10bac9369d013070b00187925196a8e680108473f11cf8f03",
1801-
"93a7315ab1272da9eeef015f6fecbc9ac96fe4660e6204bf64ea2105ebe309e9c9cadc0a26c5604f13910fae3f2cd0800756afb6b6b208bf77adeb1ab2f42405"
1801+
"342167bc54bc642b6718a276875e55b6d39e9b21e4ce13b926a3d398b6c057fc436385bf4c817a16f9ecdf0b0d950e8b8258a20aeb3fd8896c5e9c1f0a53da03"
18021802
]
18031803
}
18041804
}
@@ -1939,26 +1939,34 @@
19391939
{
19401940
"symbols": [],
19411941
"public_keys": [
1942-
"ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463"
1942+
"ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463",
1943+
"ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189"
19431944
],
19441945
"external_key": "ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189",
19451946
"code": "query(1);\nquery(1, 2) <- query(1), query(2) trusting ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463;\ncheck if query(2), query(3) trusting ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463;\ncheck if query(1) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189;\n"
19461947
},
19471948
{
19481949
"symbols": [],
1949-
"public_keys": [],
1950+
"public_keys": [
1951+
"ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463",
1952+
"ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189"
1953+
],
19501954
"external_key": "ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463",
19511955
"code": "query(2);\ncheck if query(2), query(3) trusting ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463;\ncheck if query(1) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189;\n"
19521956
},
19531957
{
19541958
"symbols": [],
1955-
"public_keys": [],
1959+
"public_keys": [
1960+
"ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463",
1961+
"ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189"
1962+
],
19561963
"external_key": "ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463",
19571964
"code": "query(3);\ncheck if query(2), query(3) trusting ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463;\ncheck if query(1) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189;\n"
19581965
},
19591966
{
19601967
"symbols": [],
19611968
"public_keys": [
1969+
"ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463",
19621970
"ed25519/f98da8c1cf907856431bfc3dc87531e0eaadba90f919edc232405b85877ef136"
19631971
],
19641972
"external_key": null,
@@ -2082,10 +2090,10 @@
20822090
"authorizer_code": "check if query(1, 2) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189, ed25519/a060270db7e9c9f06e8f9cc33a64e99f6596af12cb01c4b638df8afc7b642463;\n\ndeny if query(3);\ndeny if query(1, 2);\ndeny if query(0) trusting ed25519/acdd6d5b53bfee478bf689f8e012fe7988bf755e3d7c5152947abc149bc20189;\nallow if true;\n",
20832091
"revocation_ids": [
20842092
"3771cefe71beb21ead35a59c8116ee82627a5717c0295f35980662abccb159fe1b37848cb1818e548656bd4fd882d0094a2daab631c76b2b72e3a093914bfe04",
2085-
"45133b90f228a81fe4d3042a79f6c6b7608e656e903d6b1f4db32cd774b09b8315af360879a5f210ad7be37ff55e3eb34f237bcc9711407b6329ac6018bfb400",
2086-
"179f054f3c572646aba5013159ae192ac42f5666dbdd984129955f4652b6829e59f54aa251e451f96329d42a2524ce569c3e1ec52e708b642dd8994af51dd703",
2087-
"edab54789d6656936fcd28200b9c61643434842d531f09f209fad555e11ff53174db174dafba126e6de448983a56f78d2042bc5782d71a45799c022fe69fb30d",
2088-
"6a62306831e9dbe83e7b33db96b758c77dd690930f2d2d87e239b210b1944c5582bf6d7e1bfea8e7f928c27f2fff0e2ee2e0adc41e11e0c3abe8d7b96b9ede07"
2093+
"6528db2c9a561ada9086268549a600a8a52ff434ea8183812623eec0e9b6c5d3c41ab7868808623021d92294d583afdf92f4354bcdaa1bc50453e1b89afd630d",
2094+
"5d5679fe69bfe74b7919323515e9ecba9d01422b16be9341b57f88e695b2bb0bd7966b781001d2b9e00ee618fdc239c96e17e32cb379f13f12d6bd7b1b47ad04",
2095+
"c37bf24c063f0310eccab8864e48dbeffcdd7240b4f8d1e01eba4fc703e6c9082b845bb55543b10f008dc7f4e78540411912ac1f36fa2aa90011dca40f323b09",
2096+
"3f675d6c364e06405d4868c904e40f3d81c32b083d91586db814d4cb4bf536b4ba209d82f11b4cb6da293b60b20d6122fc3e0e08e80c381dee83edd848211900"
20892097
]
20902098
}
20912099
}
0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)