Skip to content

Commit c768ee9

Browse files
committed
feat: add zero/empty guards
1 parent 0c9a998 commit c768ee9

4 files changed

Lines changed: 44 additions & 6 deletions

File tree

src/common/DKGContract.sol

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ contract DKGContract is IDKGContract {
1313
error MismatchedArrays();
1414
error AlreadyVoted();
1515
error WrongDKGContract();
16+
error ZeroLengthParameter();
17+
error EmptyEonPublicKey();
1618

1719
event DealingSubmitted(
1820
uint64 indexed keyperSetIndex,
@@ -69,6 +71,9 @@ contract DKGContract is IDKGContract {
6971
address keyperSetManagerAddress,
7072
address keyBroadcastContractAddress
7173
) {
74+
if (phaseLength == 0 || dkgLeadLength == 0) {
75+
revert ZeroLengthParameter();
76+
}
7277
PHASE_LENGTH = phaseLength;
7378
DKG_LEAD_LENGTH = dkgLeadLength;
7479
_keyperSetManager = KeyperSetManager(keyperSetManagerAddress);
@@ -230,6 +235,9 @@ contract DKGContract is IDKGContract {
230235
_requirePhase(keyperSetIndex, retryCounter, Phase.Finalizing);
231236
_checkDKGContract(keyperSetIndex);
232237
_checkMember(keyperSetIndex, keyperIndex);
238+
if (eonPublicKey.length == 0) {
239+
revert EmptyEonPublicKey();
240+
}
233241
if (hasVoted[keyperSetIndex][retryCounter][msg.sender]) {
234242
revert AlreadyVoted();
235243
}

src/common/ECIESKeyRegistry.sol

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ contract ECIESKeyRegistry {
99
using EnumerableSet for EnumerableSet.AddressSet;
1010

1111
error NotAMember();
12+
error EmptyECIESPublicKey();
1213

1314
event KeyRegistered(address indexed keyper, bytes eciesPublicKey);
1415

@@ -35,6 +36,9 @@ contract ECIESKeyRegistry {
3536
if (keyperSet.getMember(keyperIndex) != msg.sender) {
3637
revert NotAMember();
3738
}
39+
if (eciesPublicKey.length == 0) {
40+
revert EmptyECIESPublicKey();
41+
}
3842
registeredKeypers.add(msg.sender);
3943
keys[msg.sender] = eciesPublicKey;
4044
emit KeyRegistered(msg.sender, eciesPublicKey);

test/DKGContract.t.sol

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,26 @@ contract DKGContractTest is Test {
9191
keyperSetManager.addKeyperSet(ACTIVATION_BLOCK_0, address(keyperSet0));
9292
}
9393

94+
function testConstructorRevertsOnZeroPhaseLength() public {
95+
vm.expectRevert(DKGContract.ZeroLengthParameter.selector);
96+
new DKGContract(
97+
0,
98+
DKG_LEAD_LENGTH,
99+
address(keyperSetManager),
100+
address(keyBroadcastContract)
101+
);
102+
}
103+
104+
function testConstructorRevertsOnZeroDKGLeadLength() public {
105+
vm.expectRevert(DKGContract.ZeroLengthParameter.selector);
106+
new DKGContract(
107+
PHASE_LENGTH,
108+
0,
109+
address(keyperSetManager),
110+
address(keyBroadcastContract)
111+
);
112+
}
113+
94114
function testDeploysWithImmutables() public view {
95115
assertEq(dkgContract.PHASE_LENGTH(), PHASE_LENGTH);
96116
assertEq(dkgContract.DKG_LEAD_LENGTH(), DKG_LEAD_LENGTH);
@@ -481,6 +501,13 @@ contract DKGContractTest is Test {
481501
dkgContract.submitSuccessVote(0, 0, 1, EON_KEY_A);
482502
}
483503

504+
function testSubmitSuccessVoteRevertsOnEmptyEonPublicKey() public {
505+
vm.roll(FINALIZING_BLOCK);
506+
vm.prank(keyper0);
507+
vm.expectRevert(DKGContract.EmptyEonPublicKey.selector);
508+
dkgContract.submitSuccessVote(0, 0, 0, new bytes(0));
509+
}
510+
484511
function testSubmitSuccessVoteRevertsOnDoubleVote() public {
485512
vm.roll(FINALIZING_BLOCK);
486513
vm.prank(keyper0);

test/ECIESKeyRegistry.t.sol

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -144,18 +144,17 @@ contract ECIESKeyRegistryTest is Test {
144144
registry.registerKey(99, 0, hex"00");
145145
}
146146

147-
function testRegisterKeyAcceptsArbitraryBytes() public {
148-
// Registry stores arbitrary bytes — no format validation.
147+
function testRegisterKeyAcceptsArbitraryNonEmptyBytes() public {
149148
bytes memory tiny = hex"00";
150-
bytes memory empty = new bytes(0);
151-
152149
vm.prank(keyper0);
153150
registry.registerKey(0, 0, tiny);
154151
assertEq(registry.getKey(keyper0), tiny);
152+
}
155153

154+
function testRegisterKeyRevertsOnEmptyKey() public {
156155
vm.prank(keyper0);
157-
registry.registerKey(0, 0, empty);
158-
assertEq(registry.getKey(keyper0).length, 0);
156+
vm.expectRevert(ECIESKeyRegistry.EmptyECIESPublicKey.selector);
157+
registry.registerKey(0, 0, new bytes(0));
159158
}
160159

161160
// -------------------------------------------------------------------------

0 commit comments

Comments
 (0)