]> git.saurik.com Git - apple/security.git/blobdiff - OSX/libsecurity_codesigning/lib/codedirectory.cpp
Security-58286.31.2.tar.gz
[apple/security.git] / OSX / libsecurity_codesigning / lib / codedirectory.cpp
index b14b58ec2f6cd3352ea853647fa1303afa05cbbf..1fc4fdddb6460cee6935dbce43e6a17a6f1c795c 100644 (file)
@@ -292,21 +292,19 @@ CodeDirectory::HashAlgorithm CodeDirectory::bestHashOf(const HashAlgorithms &typ
 void CodeDirectory::multipleHashFileData(FileDesc fd, size_t limit, CodeDirectory::HashAlgorithms types, void (^action)(HashAlgorithm type, DynamicHash* hasher))
 {
        assert(!types.empty());
-       vector<RefPointer<DynamicHash> > hashers;
+       map<HashAlgorithm, RefPointer<DynamicHash> > hashes;
        for (auto it = types.begin(); it != types.end(); ++it) {
                if (CodeDirectory::viableHash(*it))
-                       hashers.push_back(CodeDirectory::hashFor(*it));
+                       hashes[*it] = CodeDirectory::hashFor(*it);
        }
        scanFileData(fd, limit, ^(const void *buffer, size_t size) {
-               unsigned n = 0;
-               for (auto it = types.begin(); it != types.end(); ++it, ++n) {
-                       hashers[n]->update(buffer, size);
+               for (auto it = hashes.begin(); it != hashes.end(); ++it) {
+            it->second->update(buffer, size);
                }
        });
        CFRef<CFMutableDictionaryRef> result = makeCFMutableDictionary();
-       unsigned n = 0;
-       for (auto it = types.begin(); it != types.end(); ++it, ++n) {
-               action(*it, hashers[n]);
+       for (auto it = hashes.begin(); it != hashes.end(); ++it) {
+               action(it->first, it->second);
        }
 }