Skip to content

Commit a68f977

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 d108a4d commit a68f977

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
@@ -890,8 +890,8 @@ auxiliary_data_map =
890890
)
891891

892892
leios_certificate =
893-
[ signers : bytes ;bitfield
894-
, aggregated_signature : leios_signature
893+
[ signers : bytes .size (0 .. 8192) ;bitfield with up to 65537 entries
894+
, signature : leios_signature
895895
]
896896

897897
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)
@@ -965,9 +966,12 @@ instance HuddleRule "leios_certificate" DijkstraEra where
965966
huddleRuleNamed pname era =
966967
pname
967968
=.= arr
968-
[ "signers" ==> VBytes & comment "bitfield"
969-
, "aggregated_signature" ==> huddleRule @"leios_signature" era
969+
[ "signers" ==> VBytes `sized` (0 :: Word64, maxSigners `div` 8 :: Word64)
970+
& comment (fromString $ "bitfield with up to " <> show maxSigners <> " entries")
971+
, "signature" ==> huddleRule @"leios_signature" era
970972
]
973+
where
974+
maxSigners = 2 ^ (16 :: Word) + 1
971975

972976
instance HuddleRule "leios_signature" DijkstraEra where
973977
huddleRuleNamed pname _era =

0 commit comments

Comments
 (0)