# -*- coding: utf-8 -*- # Copyright (c) 2023, Felix Fontein # GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt) # SPDX-License-Identifier: GPL-3.0-or-later from __future__ import absolute_import, division, print_function __metaclass__ = type import pytest from ansible_collections.community.crypto.plugins.module_utils.crypto.pem import ( identify_pem_format, identify_private_key_format, split_pem_list, extract_first_pem, ) PEM_TEST_CASES = [ (b'', [], False, 'raw'), (b'random stuff\nblabla', [], False, 'raw'), (b'-----BEGIN PRIVATE KEY-----', [], False, 'raw'), ( b'-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----', ['-----BEGIN PRIVATE KEY-----\n-----END PRIVATE KEY-----'], True, 'pkcs8', ), ( b'foo=bar\n# random stuff\n-----BEGIN RSA PRIVATE KEY-----\nblabla\n-----END RSA PRIVATE KEY-----\nmore stuff\n', ['-----BEGIN RSA PRIVATE KEY-----\nblabla\n-----END RSA PRIVATE KEY-----\n'], True, 'pkcs1', ), ( b'foo=bar\n# random stuff\n-----BEGIN CERTIFICATE-----\nblabla\n-----END CERTIFICATE-----\nmore stuff\n' b'\n-----BEGIN CERTIFICATE-----\nfoobar\n-----END CERTIFICATE-----', [ '-----BEGIN CERTIFICATE-----\nblabla\n-----END CERTIFICATE-----\n', '-----BEGIN CERTIFICATE-----\nfoobar\n-----END CERTIFICATE-----', ], True, 'unknown-pem', ), ( b'-----BEGINCERTIFICATE-----\n-----BEGIN CERTIFICATE-----\n-----BEGINCERTIFICATE-----\n-----END CERTIFICATE-----\n-----BEGINCERTIFICATE-----\n', [ '-----BEGIN CERTIFICATE-----\n-----BEGINCERTIFICATE-----\n-----END CERTIFICATE-----\n', ], True, 'unknown-pem', ), ] @pytest.mark.parametrize('data, pems, is_pem, private_key_type', PEM_TEST_CASES) def test_pem_handling(data, pems, is_pem, private_key_type): assert identify_pem_format(data) == is_pem assert identify_private_key_format(data) == private_key_type try: text = data.decode('utf-8') assert split_pem_list(text) == pems first_pem = pems[0] if pems else None assert extract_first_pem(text) == first_pem except UnicodeDecodeError: pass