nsresult DtlsIdentity::ComputeFingerprint(const std::string algorithm, uint8_t *digest, size_t size, size_t *digest_length) const { const UniqueCERTCertificate& c = cert(); MOZ_ASSERT(c); return ComputeFingerprint(c, algorithm, digest, size, digest_length); }
void BHashMapCatalog::UpdateFingerprint() { fFingerprint = ComputeFingerprint(); }
status_t DefaultCatalog::Unflatten(BDataIO *dataIO) { fCatMap.Clear(); int32 count = 0; int16 version; BMessage archiveMsg; status_t res = archiveMsg.Unflatten(dataIO); if (res == B_OK) { res = archiveMsg.FindInt16("c:ver", &version) || archiveMsg.FindInt32("c:sz", &count); } if (res == B_OK) { fLanguageName = archiveMsg.FindString("c:lang"); fSignature = archiveMsg.FindString("c:sig"); uint32 foundFingerprint = archiveMsg.FindInt32("c:fpr"); // if a specific fingerprint has been requested and the catalog does in // fact have a fingerprint, both are compared. If they mismatch, we do // not accept this catalog: if (foundFingerprint != 0 && fFingerprint != 0 && foundFingerprint != fFingerprint) { res = B_MISMATCHED_VALUES; } else fFingerprint = foundFingerprint; } if (res == B_OK && count > 0) { CatKey key; const char *keyStr; const char *keyCtx; const char *keyCmt; const char *translated; // fCatMap.resize(count); // There is no resize method in Haiku's HashMap to preallocate // memory. for (int i=0; res == B_OK && i < count; ++i) { res = archiveMsg.Unflatten(dataIO); if (res == B_OK) res = archiveMsg.FindString("c:ostr", &keyStr); if (res == B_OK) res = archiveMsg.FindString("c:ctxt", &keyCtx); if (res == B_OK) res = archiveMsg.FindString("c:comt", &keyCmt); if (res == B_OK) res = archiveMsg.FindInt32("c:hash", (int32*)&key.fHashVal); if (res == B_OK) res = archiveMsg.FindString("c:tstr", &translated); if (res == B_OK) { key.fString = keyStr; key.fContext = keyCtx; key.fComment = keyCmt; fCatMap.Put(key, translated); } } uint32 checkFP = ComputeFingerprint(); if (fFingerprint != checkFP) return B_BAD_DATA; } return res; }