INNER CODE UNIT · C++
nid
trailofbits/uthenticode · src/uthenticode.cpp:301
auto nid = OBJ_obj2nid(indirect_data_->messageDigest->digestAlgorithm->algorithm);
auto digest = tohex(indirect_data_->messageDigest->digest->data,
indirect_data_->messageDigest->digest->length);
return std::make_tuple(nid_to_checksum_kind(nid), digest);
}
std::vector<Certificate> SignedData::get_signers() const {
auto *signers_stack_ptr = PKCS7_get0_signers(p7_, nullptr, 0);
if (signers_stack_ptr == nullptr) {
return {};
}
auto signers_stack = impl::STACK_OF_X509_ptr(signers_stack_ptr, impl::SK_X509_free);
std::vector<Certificate> signers;
for (auto i = 0; i < sk_X509_num(signers_stack.get()); ++i) {
/* Frustrating: ideally we'd use emplace_back here, but apparently
* it gets exploded into some std::allocator scope that makes the private Certificate
* constructor flip out (since it's only friends with SignedData).