From a8746f1a5cd8939b277c8c668dc9def334e9e620 Mon Sep 17 00:00:00 2001 From: Michal Pirchala Date: Tue, 1 Oct 2019 12:16:34 +0200 Subject: [PATCH] #69 Private key analyzer added. --- pastepwn/analyzers/__init__.py | 4 +- pastepwn/analyzers/privatekeyanalyzer.py | 11 ++++++ .../tests/privatekeyanalyzer_test.py | 38 +++++++++++++++++++ 3 files changed, 52 insertions(+), 1 deletion(-) create mode 100644 pastepwn/analyzers/privatekeyanalyzer.py create mode 100644 pastepwn/analyzers/tests/privatekeyanalyzer_test.py diff --git a/pastepwn/analyzers/__init__.py b/pastepwn/analyzers/__init__.py index 8173a2a..e53938f 100644 --- a/pastepwn/analyzers/__init__.py +++ b/pastepwn/analyzers/__init__.py @@ -12,6 +12,7 @@ from .urlanalyzer import URLAnalyzer from .wordanalyzer import WordAnalyzer from .ibananalyzer import IBANAnalyzer +from .privatekeyanalyzer import PrivateKeyAnalyzer __all__ = ( 'AlwaysTrueAnalyzer', @@ -26,5 +27,6 @@ 'RegexAnalyzer', 'URLAnalyzer', 'WordAnalyzer', - 'IBANAnalyzer' + 'IBANAnalyzer', + 'PrivateKeyAnalyzer' ) diff --git a/pastepwn/analyzers/privatekeyanalyzer.py b/pastepwn/analyzers/privatekeyanalyzer.py new file mode 100644 index 0000000..e4cb1b2 --- /dev/null +++ b/pastepwn/analyzers/privatekeyanalyzer.py @@ -0,0 +1,11 @@ +# -*- coding: utf-8 -*- +from .regexanalyzer import RegexAnalyzer + + +class PrivateKeyAnalyzer(RegexAnalyzer): + """Analyzer to match private keys beginnigs via regex""" + name = "PrivateKeyAnalyzer" + + def __init__(self, actions): + regex = r"\-\-\-\-\-BEGIN( [A-Z]+)? PRIVATE KEY( BLOCK)?\-\-\-\-\-" + super().__init__(actions, regex) diff --git a/pastepwn/analyzers/tests/privatekeyanalyzer_test.py b/pastepwn/analyzers/tests/privatekeyanalyzer_test.py new file mode 100644 index 0000000..107ab03 --- /dev/null +++ b/pastepwn/analyzers/tests/privatekeyanalyzer_test.py @@ -0,0 +1,38 @@ +# -*- coding: utf-8 -*- +import unittest +from unittest import mock + +from pastepwn.analyzers.privatekeyanalyzer import PrivateKeyAnalyzer + + +class TestMailAnalyzer(unittest.TestCase): + def setUp(self): + self.analyzer = PrivateKeyAnalyzer(None) + self.paste = mock.Mock() + + def test_match_positive(self): + """Test if positives are recognized""" + self.paste.body = "-----BEGIN PRIVATE KEY-----" + self.assertTrue(self.analyzer.match(self.paste)) + self.paste.body = "-----BEGIN PGP PRIVATE KEY BLOCK-----" + self.assertTrue(self.analyzer.match(self.paste)) + self.paste.body = "-----BEGIN RSA PRIVATE KEY-----" + self.assertTrue(self.analyzer.match(self.paste)) + self.paste.body = "-----BEGIN ENCRYPTED PRIVATE KEY-----" + self.assertTrue(self.analyzer.match(self.paste)) + self.paste.body = "-----BEGIN OPENSSH PRIVATE KEY-----" + self.assertTrue(self.analyzer.match(self.paste)) + + + def test_match_negative(self): + """Test if negatives are not recognized""" + self.paste.body = "" + self.assertFalse(self.analyzer.match(self.paste)) + self.paste.body = None + self.assertFalse(self.analyzer.match(self.paste)) + self.paste.body = "-----BEGIN PUBLIC KEY-----" + self.assertFalse(self.analyzer.match(self.paste)) + + +if __name__ == '__main__': + unittest.main()