R. Brian Haynes

45 papers B 1Misc 12Journal 28Unranked 4
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Biomed. Informatics
Fangwen Zhou, Rick Parrish, Muhammad Afzal, Ashirbani Saha, R. Brian Haynes, Alfonso Iorio, Cynthia Lokker
2023 J jnl
J. Biomed. Informatics
Cynthia Lokker, Elham Bagheri, Wael Abdelkader, Rick Parrish, Muhammad Afzal, Tamara Navarro, Chris Cotoi, Federico Germini, Lori Linkins, R. Brian Haynes, Lingyang Chu, Alfonso Iorio
2015 J jnl
BMC Medical Informatics Decis. Mak.
Anik Giguère, Michel Labrecque, France Légaré, Roland M. Grad, Michel Cauchon, Matthew Greenway, R. Brian Haynes, Pierre Pluye, Iqra Syed, Debi Banerjee, Pierre-Hugues Carmichael, Mélanie Martin
2015 J jnl
J. Am. Medical Informatics Assoc.
Niraj Mistry, Arun Keepanasseril, Nancy L. Wilczynski, Robby Nieuwlaat, Manthan Ravall, R. Brian Haynes
2013 J jnl
J. Am. Medical Informatics Assoc.
Nancy L. Wilczynski, K. Ann McKibbon, Stephen D. Walter, Amit X. Garg, R. Brian Haynes
2012 J jnl
BMC Medical Informatics Decis. Mak.
Anik Giguère, Michel Labrecque, Roland M. Grad, Michel Cauchon, Matthew Greenway, France Légaré, Pierre Pluye, Stephane Turcotte, Lisa R. Dolovich, R. Brian Haynes
2012 J jnl
BMC Medical Informatics Decis. Mak.
Ainslie M. Hildebrand, Arthur V. Iansavichus, Christopher W. C. Lee, R. Brian Haynes, Nancy L. Wilczynski, K. Ann McKibbon, Michelle A. Hladunewich, William F. Clark, Daniel C. Cattran, Amit X. Garg
2012 J jnl
BMC Medical Informatics Decis. Mak.
Pavel S. Roshanov, Hertzel C. Gerstein, Dereck L. Hunt, Rolf J. Sebaldt, R. Brian Haynes
2011 J jnl
J. Assoc. Inf. Sci. Technol.
Cynthia Lokker, R. Brian Haynes, K. Ann McKibbon, Nancy L. Wilczynski
2011 J jnl
BMC Medical Informatics Decis. Mak.
Anik Giguère, France Légaré, Roland M. Grad, Pierre Pluye, François Rousseau, R. Brian Haynes, Michel Cauchon, Michel Labrecque
2011 J jnl
J. Am. Medical Informatics Assoc.
Cynthia Lokker, R. Brian Haynes, Nancy L. Wilczynski, K. Ann McKibbon, Stephen D. Walter
2010 conf
MedInfo
Cynthia Lokker, K. Ann McKibbon, Nancy L. Wilczynski, R. Brian Haynes, Donna Ciliska, Maureen Dobbins, David A. Davis, Sharon E. Straus
2009 J jnl
Int. J. Medical Informatics
Mihail Cocosila, Norman P. Archer, R. Brian Haynes, Yufei Yuan
2009 J jnl
J. Am. Medical Informatics Assoc.
Halil Kilicoglu, Dina Demner-Fushman, Thomas C. Rindflesch, Nancy L. Wilczynski, R. Brian Haynes
2008 J jnl
BMC Medical Informatics Decis. Mak.
Xiaomei Yao, Nancy L. Wilczynski, Stephen D. Walter, R. Brian Haynes
2008 Misc conf
AMIA
Halil Kilicoglu, Dina Demner-Fushman, Thomas C. Rindflesch, Nancy L. Wilczynski, R. Brian Haynes
2007 conf
MedInfo
Nancy L. Wilczynski, Amit X. Garg, R. Brian Haynes
2007 J jnl
J. Am. Medical Informatics Assoc.
Nancy L. Wilczynski, R. Brian Haynes
2007 Misc conf
AMIA
Nancy L. Wilczynski, R. Brian Haynes
2006 J jnl
J. Am. Medical Informatics Assoc.
R. Brian Haynes, Jennifer Holland, Chris Cotoi, R. James McKinlay, Nancy L. Wilczynski, Leslie A. Walters, Dawn Jedras, Rick Parrish, K. Ann McKibbon, Amit X. Garg, Stephen D. Walter
2005 J jnl
BMC Medical Informatics Decis. Mak.
Nancy L. Wilczynski, Douglas Morgan, R. Brian Haynes, et al.
2005 J jnl
BMC Medical Informatics Decis. Mak.
R. Brian Haynes, Monika Kastner, Nancy L. Wilczynski, et al.
2005 Misc conf
AMIA
Jennifer Holland, R. Brian Haynes
2005 J jnl
BMC Medical Informatics Decis. Mak.
Jennifer Holland, Nancy L. Wilczynski, R. Brian Haynes, et al.
2005 J jnl
J. Am. Medical Informatics Assoc.
Nancy L. Wilczynski, R. Brian Haynes
2004 conf
MedInfo
Sharon S.-L. Wong, Nancy L. Wilczynski, R. Brian Haynes
2003 Misc conf
AMIA
Nancy L. Wilczynski, R. Brian Haynes
2003 Misc conf
AMIA
Sharon S.-L. Wong, Nancy L. Wilczynski, R. Brian Haynes, Ravi Ramkissoonsingh
2002 Misc conf
AMIA
Nancy L. Wilczynski, R. Brian Haynes
2001 conf
MedInfo
Nancy L. Wilczynski, K. Ann McKibbon, R. Brian Haynes
2001 Misc conf
AMIA
Adrienne L. Stevens, Nancy L. Wilczynski, K. Ann McKibbon, R. Brian Haynes
2001 Misc conf
AMIA
K. Ann McKibbon, Nancy L. Wilczynski, R. Brian Haynes
2001 Misc conf
AMIA
Kiran Pohar, R. Brian Haynes, Nancy L. Wilczynski
2001 Misc conf
AMIA
Dereck L. Hunt, R. Brian Haynes, Douglas Morgan
2001 J jnl
J. Am. Medical Informatics Assoc.
Ida Sim, Paul N. Gorman, Robert A. Greenes, R. Brian Haynes, Bonnie Kaplan, Harold P. Lehmann, Paul C. Tang
1998 J jnl
Int. J. Medical Informatics
Dereck L. Hunt, R. Brian Haynes, Robert S. Hayward, Mary Ann Pim, John Horsman
1997 Misc conf
AMIA
Dereck L. Hunt, R. Brian Haynes, Robert S. Hayward, Mary Ann Pim, John Horsman
1997 Misc conf
AMIA
Melissa C. Brouwers, E. Ann Murrary, R. Brian Haynes
1995 J jnl
J. Am. Medical Informatics Assoc.
R. Brian Haynes, Robert S. Hayward, Jonathan Lomas
1995 J jnl
J. Am. Soc. Inf. Sci.
K. Ann McKibbon, Nancy L. Wilczynski, Robert S. Hayward, Cynthia J. Walker-Dilks, R. Brian Haynes
1994 J jnl
J. Am. Medical Informatics Assoc.
William R. Hersh, David H. Hickam, R. Brian Haynes, K. Ann McKibbon
1994 J jnl
J. Am. Medical Informatics Assoc.
R. Brian Haynes, Nancy L. Wilczynski, K. Ann McKibbon, Cynthia J. Walker, John C. Sinclair
1994 J jnl
J. Am. Medical Informatics Assoc.
R. Brian Haynes, Cynthia J. Walker, Kathleen Ann McKibbon, M. E. Johnston, A. R. Willan
1994 J jnl
J. Am. Medical Informatics Assoc.
William W. Stead, R. Brian Haynes, Sherrilynne S. Fuller, Charles P. Friedman, Larry E. Travis, J. Robert Beck, Carol H. Fenichel, B. Chandrasekaran, Bruce G. Buchanan, Enrique E. Abola, MaryEllen C. Sievert, Reed M. Gardner, Judith Messerle, Conrade C. Jaffe, William R. Pearson, Robert M. Abarbanel
1991 B conf
CBMS
Eric L. Hoogendoorn, Karl B. Langton, Nicholas Solntseff, R. Brian Haynes
redb/extractors/decompiler/bninja/similarity/minhasher.py
← Index redb/extractors/decompiler/bninja/similarity/minhasher.py python
import logging
import random
from enum import Enum

from ..analysis.medium_level_normalization import MediumLevelNormalization

try:
    from .minhashcustom import MinHashCustom
    from ..analysis.low_level_normalization import LowLevelNormalization
except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.similarity.minhashcustom import MinHashCustom
    from redb.extractors.decompiler.bninja.analysis.low_level_normalization import LowLevelNormalization

## Values for this configuration were extracted from https://github.com/danielplohmann/mcrit/blob/main/mcrit/config/MinHashConfig.py#L10
# Length in number of Shingles of which a minhash consists
# this value represents the length of sha256sum hash truncated
MINHASH_SIGNATURE_LENGTH: int = 64
# Number of bits per signature element (1-32 bits)
MINHASH_SIGNATURE_BITS: int = 8


class TokenKind(Enum):
    LLIL = "llil"
    TYPED_LLIL = "typed_llil"
    MLIL = "mlil"
    TYPED_MLIL = "typed_mlil"


class MinHasher:
    # stick to the default method
    MINHASH_STRATEGY_HASH_ALL = 1

    def __init__(self, seed, il_function, kind: TokenKind = TokenKind.LLIL):
        self._minhash_seeds = []
        self.il_func = il_function
        self.kind = kind
        self._minhash_permutation = []
        self._signature_segments = []
        self._initMinhashing(seed)

    def _initMinhashing(self, MINHASH_SEED=None):
        random.seed(MINHASH_SEED)
        # init sequence of seeds
        self._minhash_seeds = [
            random.randint(0, MinHashCustom.getHashMax()) for _ in range(MINHASH_SIGNATURE_LENGTH)
        ]

    def make_ngrams(self, tokens, n=3):
        """Take the ngrams of the IL we try to pass into the functions"""
        return [tuple(tokens[i:i+n]) for i in range(len(tokens) - n + 1)]

    def _extract_tokens(self):
        """Extract the IL tokens from the IL function, picking the right
        normalizer (LLIL/MLIL) and the right normalization mode
        (skeleton/typed) based on self.kind."""
        if self.kind in (TokenKind.LLIL, TokenKind.TYPED_LLIL):
            normalizer = LowLevelNormalization()
        elif self.kind in (TokenKind.MLIL, TokenKind.TYPED_MLIL):
            normalizer = MediumLevelNormalization()
        else:
            raise ValueError(f"Unsupported token kind: {self.kind}")

        # typed variants include operand type info, skeleton variants don't
        if self.kind in (TokenKind.TYPED_LLIL, TokenKind.TYPED_MLIL):
            normalize = normalizer.normalize_instr_with_operands
        else:
            normalize = normalizer.normalize_instruction_all_levels

        instructions = []
        for basic_block in self.il_func.basic_blocks:
            for il in basic_block:
                instructions.append(normalize(il))

        return instructions

    def calculateMinHash(self):
        """Calculate hash function every time, then take minimum shingle per shingler"""
        minhash_result = MinHashCustom(minhash_bits=MINHASH_SIGNATURE_BITS)
        minhash_signature = []

        tokens = self._extract_tokens()
        shingles = self.make_ngrams(tokens, n=3)

        # Functions with fewer than 3 IL instructions can't produce n-grams
        # Return empty minhash for such small functions (thunks, stubs, etc.)
        # Triggered by 39d8ad95b0323c37bd3134ab93ac4af44c66a1a8443a41c1ac02cec19bb2816a
        if not shingles:
            return []

        # Generate the MinHash
        for seed in self._minhash_seeds:
            hashed_shingles = [
                self.shingle_hash(shingle, seed) for shingle in shingles
            ]
            min_value = min(hashed_shingles)

            if MINHASH_SIGNATURE_BITS < 32:
                min_value %= (2 ** MINHASH_SIGNATURE_BITS)

            minhash_signature.append(min_value)

        minhash_result.setMinHash(minhash_signature)
        return minhash_result.getMinHashInt()

    def shingle_hash(self, shingle, hash_seed=0):
        """Produce a single 32bit UINT hash for a given shingle"""
        return MinHashCustom.hashData(shingle, hash_seed)