blob: 30c94ecd2eedf9cf5b057717f2c42691f72351bf [file] [log] [blame]
# coding: utf-8
from __future__ import unicode_literals, division, absolute_import, print_function
import unittest
import sys
import os
from asn1crypto import pem, util
from .unittest_data import DataDecorator, data
from ._unittest_compat import patch
patch()
if sys.version_info < (3,):
byte_cls = str
num_cls = long #pylint: disable=E0602
else:
byte_cls = bytes
num_cls = int
tests_root = os.path.dirname(__file__)
fixtures_dir = os.path.join(tests_root, 'fixtures')
@DataDecorator
class PEMTests(unittest.TestCase):
#pylint: disable=C0326
@staticmethod
def detect_files():
return (
('keys/test-der.crt', False),
('keys/test-inter-der.crt', False),
('keys/test-third-der.crt', False),
('keys/test.crt', True),
('keys/test-inter.crt', True),
('keys/test-third.crt', True),
)
@data('detect_files')
def detect(self, relative_path, is_pem):
with open(os.path.join(fixtures_dir, relative_path), 'rb') as f:
byte_string = f.read()
self.assertEqual(is_pem, pem.detect(byte_string))
#pylint: disable=C0326
@staticmethod
def unarmor_armor_files():
return (
('keys/test.crt', 'keys/test-der.crt', 'CERTIFICATE', {}),
('keys/test-inter.crt', 'keys/test-inter-der.crt', 'CERTIFICATE', {}),
('keys/test-third.crt', 'keys/test-third-der.crt', 'CERTIFICATE', {}),
('keys/test-pkcs8.key', 'keys/test-pkcs8-der.key', 'PRIVATE KEY', {}),
('test-third.csr', 'test-third-der.csr', 'CERTIFICATE REQUEST', {}),
('keys/test-aes128.key', 'keys/test-aes128-der.key', 'RSA PRIVATE KEY', util.OrderedDict([('Proc-Type', '4,ENCRYPTED'), ('DEK-Info', 'AES-128-CBC,01F6EE04516C912788B11BD7377626C2')])),
)
@data('unarmor_armor_files')
def unarmor(self, relative_path, expected_bytes_filename, expected_type_name, expected_headers):
with open(os.path.join(fixtures_dir, relative_path), 'rb') as f:
byte_string = f.read()
type_name, headers, decoded_bytes = pem.unarmor(byte_string)
self.assertEqual(expected_type_name, type_name)
self.assertEqual(expected_headers, headers)
with open(os.path.join(fixtures_dir, expected_bytes_filename), 'rb') as f:
expected_bytes = f.read()
self.assertEqual(expected_bytes, decoded_bytes)
@data('unarmor_armor_files')
def armor(self, expected_bytes_filename, relative_path, type_name, headers):
with open(os.path.join(fixtures_dir, relative_path), 'rb') as f:
byte_string = f.read()
encoded_bytes = pem.armor(type_name, byte_string, headers=headers)
with open(os.path.join(fixtures_dir, expected_bytes_filename), 'rb') as f:
expected_bytes = f.read()
self.assertEqual(expected_bytes, encoded_bytes)