Source code for credsweeper.filters.value_base64_encoded_pem_check

import contextlib

from credsweeper.common.constants import ASCII, PEM_BEGIN_PATTERN
from credsweeper.config import Config
from credsweeper.credentials import LineData
from credsweeper.file_handler.analysis_target import AnalysisTarget
from credsweeper.filters import Filter
from credsweeper.utils import Util
from credsweeper.utils.pem_key_detector import PemKeyDetector


[docs]class ValueBase64EncodedPem(Filter): """Check that candidate contains base64 encoded pem private key""" def __init__(self, config: Config = None) -> None: self.config = config
[docs] def run(self, line_data: LineData, target: AnalysisTarget) -> bool: """Run filter checks on received token which might be structured. 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 """ with contextlib.suppress(Exception): text = Util.decode_base64(line_data.value, padding_safe=True, urlsafe_detect=True) lines = text.decode(ASCII).splitlines() lines_pos = [x for x in range(len(lines))] for line_pos, line in zip(lines_pos, lines): if PEM_BEGIN_PATTERN in line: new_target = AnalysisTarget(line_pos, lines, lines_pos, target.descriptor) if PemKeyDetector.detect_pem_key(self.config, new_target): # obtained candidates are not used because not match text return False return True