Source code for credsweeper.filters.line_git_binary_check

import base64
import contextlib
import re

from credsweeper.config import Config
from credsweeper.credentials import LineData
from credsweeper.file_handler.analysis_target import AnalysisTarget
from credsweeper.filters import Filter


[docs]class LineGitBinaryCheck(Filter): """Checks that line is not a part of git binary patch""" base85string = re.compile(r"^[A-Za-z][0-9A-Za-z!#$%&()*+;<=>?@^_`{|}~-]{6,65}$") def __init__(self, config: Config = None) -> None: pass
[docs] def run(self, line_data: LineData, target: AnalysisTarget) -> bool: """Run filter checks on received credential candidate data 'line_data'. Args: line_data: credential candidate data target: multiline target from which line data was obtained Return: True, if need to filter candidate and False if left """ if not line_data.line: return True if 66 < target.line_strip_len: return False line = target.line_strip len_line = len(line) # https://github.com/git/git/blob/master/base85.c if 6 <= len_line and 0 == ((len_line - 1) % 5) and LineGitBinaryCheck.base85string.match(line): size = ord(line[0]) if 65 <= size <= 90: # A-Z size -= 64 elif 97 <= size <= 122: # a-z size -= 70 else: return False with contextlib.suppress(Exception): decoded = base64.b85decode(line[1:]) return len(decoded) == size return False