Skip to content

Commit

Permalink
Implement remaining_operations() for LMS
Browse files Browse the repository at this point in the history
  • Loading branch information
lieser committed Dec 8, 2023
1 parent 6c11f31 commit f4f6168
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 7 deletions.
2 changes: 1 addition & 1 deletion src/lib/pubkey/hss_lms/hss_lms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,7 +146,7 @@ AlgorithmIdentifier HSS_LMS_PrivateKey::pkcs8_algorithm_identifier() const {
return AlgorithmIdentifier(OID::from_string("HSS-LMS-Private-Key"), AlgorithmIdentifier::USE_EMPTY_PARAM);
}

uint64_t HSS_LMS_PrivateKey::remaining_signatures() const {
std::optional<uint64_t> HSS_LMS_PrivateKey::remaining_operations() const {
return (m_private->hss_params().max_sig_count() - m_private->get_idx()).get();
}

Expand Down
2 changes: 1 addition & 1 deletion src/lib/pubkey/hss_lms/hss_lms.h
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ class BOTAN_PUBLIC_API(3, 2) HSS_LMS_PrivateKey final : public virtual HSS_LMS_P
/**
* Retrieves the number of remaining signatures for this private key.
*/
uint64_t remaining_signatures() const;
std::optional<uint64_t> remaining_operations() const override;

std::unique_ptr<Private_Key> generate_another(RandomNumberGenerator& rng) const override;

Expand Down
10 changes: 5 additions & 5 deletions src/tests/test_hss_lms.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ class HSS_LMS_Statefulness_Test final : public Test {
// Tree hights: 5,5 => 2^(5+5) = 1024 signatures available
const uint64_t expected_total = 1024;
result.confirm("Fresh key starts with total number of remaining signatures.",
sk.remaining_signatures() == expected_total);
sk.remaining_operations() == expected_total);

// Creating a signature should update the private key's state
auto sig_0 = signer.sign_message(mes, Test::rng());
Expand All @@ -226,7 +226,7 @@ class HSS_LMS_Statefulness_Test final : public Test {
auto sk_bytes_after_sig = sk.private_key_bits();

result.confirm("Signature decreases number of remaining signatures.",
sk.remaining_signatures() == expected_total - 1);
sk.remaining_operations() == expected_total - 1);
result.test_ne("Signature updates private key.", sk_bytes_after_sig, sk_bytes_begin);

auto sig_1 = signer.sign_message(mes, Test::rng());
Expand All @@ -247,11 +247,11 @@ class HSS_LMS_Statefulness_Test final : public Test {
std::vector<uint8_t> mes = {0xde, 0xad, 0xbe, 0xef};
auto sk_bytes_begin = sk.private_key_bits();

result.confirm("One remaining signature.", sk.remaining_signatures() == uint64_t(1));
result.confirm("One remaining signature.", sk.remaining_operations() == uint64_t(1));
result.test_no_throw("Use last signature index.", [&]() { signer.sign_message(mes, Test::rng()); });
result.confirm("No remaining signatures.", sk.remaining_signatures() == uint64_t(0));
result.confirm("No remaining signatures.", sk.remaining_operations() == uint64_t(0));
result.test_throws("Cannot sign with exhausted key.", [&]() { signer.sign_message(mes, Test::rng()); });
result.confirm("Still zero remaining signatures.", sk.remaining_signatures() == uint64_t(0));
result.confirm("Still zero remaining signatures.", sk.remaining_operations() == uint64_t(0));

return result;
}
Expand Down

0 comments on commit f4f6168

Please sign in to comment.