MCPcopy Create free account
hub / github.com/OpenRCT2/OpenRCT2 / SignData

Method SignData

src/openrct2/core/Crypt.OpenSSL.cpp:258–294  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

256{
257public:
258 std::vector<uint8_t> SignData(const RsaKey& key, const void* data, size_t dataLen) override
259 {
260 auto evpKey = static_cast<const OpenSSLRsaKey&>(key).GetEvpKey();
261 EVP_MD_CTX* mdctx{};
262 try
263 {
264 mdctx = EVP_MD_CTX_create();
265 if (mdctx == nullptr)
266 {
267 throw std::runtime_error("EVP_MD_CTX_create failed");
268 }
269
270 auto status = EVP_DigestSignInit(mdctx, nullptr, EVP_sha256(), nullptr, evpKey);
271 OpenSSLThrowOnBadStatus("EVP_DigestSignInit failed", status);
272
273 status = EVP_DigestSignUpdate(mdctx, data, dataLen);
274 OpenSSLThrowOnBadStatus("EVP_DigestSignUpdate failed", status);
275
276 // Get required length of signature
277 size_t sigLen{};
278 status = EVP_DigestSignFinal(mdctx, nullptr, &sigLen);
279 OpenSSLThrowOnBadStatus("EVP_DigestSignFinal failed", status);
280
281 // Get signature
282 std::vector<uint8_t> signature(sigLen);
283 status = EVP_DigestSignFinal(mdctx, signature.data(), &sigLen);
284 OpenSSLThrowOnBadStatus("EVP_DigestSignFinal failed", status);
285
286 EVP_MD_CTX_destroy(mdctx);
287 return signature;
288 }
289 catch (const std::exception&)
290 {
291 EVP_MD_CTX_destroy(mdctx);
292 throw;
293 }
294 }
295
296 bool VerifyData(const RsaKey& key, const void* data, size_t dataLen, const void* sig, size_t sigLen) override
297 {

Callers

nothing calls this directly

Calls 3

OpenSSLThrowOnBadStatusFunction · 0.85
GetEvpKeyMethod · 0.80
dataMethod · 0.45

Tested by

no test coverage detected