Skip to content

Commit eef6599

Browse files
committed
Constrain the size of leios_certificate signers
The maximum length is determined by the maximum LeiosVoterId. As this is a Word16, the max number of entries is 65535 bits = 8192 bytes
1 parent b57d42f commit eef6599

2 files changed

Lines changed: 8 additions & 4 deletions

File tree

eras/dijkstra/impl/cddl/data/dijkstra.cddl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -895,8 +895,8 @@ auxiliary_data_map =
895895
)
896896

897897
leios_certificate =
898-
[ signers : bytes ;bitfield
899-
, aggregated_signature : leios_signature
898+
[ signers : bytes .size (0 .. 8192) ;bitfield with up to 65537 entries
899+
, signature : leios_signature
900900
]
901901

902902
leios_signature = bytes .size 48

eras/dijkstra/impl/cddl/lib/Cardano/Ledger/Dijkstra/HuddleSpec.hs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import Data.Function ((&))
5959
import Data.List (nub)
6060
import Data.Maybe (mapMaybe)
6161
import Data.Proxy (Proxy (..))
62+
import Data.String (fromString)
6263
import Data.Text ()
6364
import Data.Text qualified as T
6465
import Data.Word (Word16, Word64)
@@ -1004,9 +1005,12 @@ instance HuddleRule "leios_certificate" DijkstraEra where
10041005
huddleRuleNamed pname era =
10051006
pname
10061007
=.= arr
1007-
[ "signers" ==> VBytes & comment "bitfield"
1008-
, "aggregated_signature" ==> huddleRule @"leios_signature" era
1008+
[ "signers" ==> VBytes `sized` (0 :: Word64, maxSigners `div` 8 :: Word64)
1009+
& comment (fromString $ "bitfield with up to " <> show maxSigners <> " entries")
1010+
, "signature" ==> huddleRule @"leios_signature" era
10091011
]
1012+
where
1013+
maxSigners = 2 ^ (16 :: Word) + 1
10101014

10111015
instance HuddleRule "leios_signature" DijkstraEra where
10121016
huddleRuleNamed pname _era =

0 commit comments

Comments
 (0)