-
Notifications
You must be signed in to change notification settings - Fork 89
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
ed6285e
commit 21b27bd
Showing
3 changed files
with
79 additions
and
4 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
bugfixes: | ||
- "Fix PEM detection/identification to also accept random other lines before the line starting with ``-----BEGIN`` (https://github.com/ansible-collections/community.crypto/issues/627, https://github.com/ansible-collections/community.crypto/pull/628)." |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
# Copyright (c) 2023, Felix Fontein <felix@fontein.de> | ||
# 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 |