From 8ba26699d1c9eb21859214c989290059dd011e29 Mon Sep 17 00:00:00 2001 From: Alex Gaynor Date: Thu, 23 Jan 2025 18:59:20 -0500 Subject: [PATCH] Added two new PKCS#8 test cases --- docs/development/test-vectors.rst | 5 +++- tests/hazmat/primitives/test_serialization.py | 18 +++++++++++ .../asymmetric/PKCS8/enc-rsa-3des.pem | 30 +++++++++++++++++++ .../PKCS8/enc-unknown-alogrithm.pem | 30 +++++++++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-3des.pem create mode 100644 vectors/cryptography_vectors/asymmetric/PKCS8/enc-unknown-alogrithm.pem diff --git a/docs/development/test-vectors.rst b/docs/development/test-vectors.rst index e87e4416f967b..af36ac2b6b6d2 100644 --- a/docs/development/test-vectors.rst +++ b/docs/development/test-vectors.rst @@ -212,7 +212,10 @@ Custom asymmetric vectors optional). * ``asymmetric/PKCS8/ec-invalid-version.pem`` - A PKCS8 encoded EC key with an invalid elliptic curve version field. - +* ``asymmetric/PKCS8/enc-rsa-3des.pem`` - A PKCS8 encoded RSA key encrypted + with 3DES, with the password "password". +* ``asymmetric/PKCS8/enc-unknown-alogrithm.pem`` - A PKCS8 encoded key with an + unknown encryption algorithm. Key exchange ~~~~~~~~~~~~ diff --git a/tests/hazmat/primitives/test_serialization.py b/tests/hazmat/primitives/test_serialization.py index 74a7955dd93db..2f2914471b2ad 100644 --- a/tests/hazmat/primitives/test_serialization.py +++ b/tests/hazmat/primitives/test_serialization.py @@ -424,6 +424,24 @@ def test_load_pkcs8_private_key_unknown_oid(self): with pytest.raises(ValueError): load_der_private_key(data, password=None) + def test_load_pkcs8_private_key_3des_encryption(self): + key = load_vectors_from_file( + os.path.join("asymmetric", "PKCS8", "enc-rsa-3des.pem"), + lambda f: load_pem_private_key(f.read(), password=b"password"), + mode="rb", + ) + assert isinstance(key, rsa.RSAPrivateKey) + assert key.key_size == 2048 + + def test_load_pkcs8_private_key_unknown_encryption_algorithm(self): + data = load_vectors_from_file( + os.path.join("asymmetric", "PKCS8", "enc-unknown-alogrithm.pem"), + lambda f: f.read(), + mode="rb", + ) + with pytest.raises(ValueError): + load_pem_private_key(data, password=b"password") + class TestPEMSerialization: @pytest.mark.parametrize( diff --git a/vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-3des.pem b/vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-3des.pem new file mode 100644 index 0000000000000..90cdcf57defaf --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/PKCS8/enc-rsa-3des.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFHDBOBgkqhkiG9w0BBQ0wQTApBgkqhkiG9w0BBQwwHAQI9fSurwMcOA4CAggA +MAwGCCqGSIb3DQIJBQAwFAYIKoZIhvcNAwcECKALBF48zvQnBIIEyKDIy72IMJoZ +4q7LsG0dCSa8oGI/CtAnC9YqRlDj+paWoGKDUkzxnMloUbJkpQlTEYRHXp0xKtdP +IcCjWFqWeQjsaJUlwILNLiliVpbyW/0PLmNQmRSfvLhlZ77rRk08DyLU0mcW2zRX +DuKHuxGhdlmte7EKsNf8czch9hDXqrCLqxlzr86K0pwT40W1r32TgQdX68edluoj +acggWuEzeTTKy1BKkVtlCq63dflgRfSo0as+dYX38wxzC6O6hxKpax277ijoJZHc +QsXxi/zREa+gtVOq9D6Vz5E+MmmIIAzVrXsFe1Uj4wYb3XUSO6WnJ9GlrixqWeu3 +9lkOZOEKyyDgIY+twn06kyZBspKnXvQMMPjeiSSeaqI9LA0qpvRsxuWCxyTJ2YZI +s+xab8j5g5RKOmrt1bGtLl66tcrGNP9jYC5pjMNl6fz3c8+oxC0Bun4q+yOA9QzG +4GaiA834x+9wtsEBSjlMB5AMwYH+1ODo6Q+VUAWH1qBvCm/gQT2mvSgcrz6bcGJI +gimfzl/IbqVuVkWl7yFqNN/renE47pvy34Dbymb0FBK/5Gb1FImno3CcAkCuaEJ1 +sWdx2Ej0Ezit8v1iJN2q29xlD7MrxB0uPvklUPRlD9RVcDJ15GwBPA8ugN/Fjj50 +2BiMJ2/uqBoEnAjMyStINArS5PWL6gthIXenVJ4w0wegBciCsGo4G7UFQ0z/w2Je +7NJ8TjwKdTYJdAfgO5Rr8u6j0ybn72T/+QJfjugNLufRx4sakvPZR90/AFb2YX+L +kgCVS3ySOfom9p5JcxdnI8omelBIi1Qa9xwPKMPaV6oYkqBVjmcDDZocC6qN15PD +jCrgGryV3Fsn5OLYTB+EQDLNqmo+qd1O0pNY2THwD/DGGlx6VhmeQnWdt534g5lo +clQOmLXEeUWIb2u5PanakqNpY5mBQcOJ88/RS+oGAjTGU0e3I1zLb6EN/Ftndjv1 +sfEh+HMwHxIWxdnJb6z6m73XJr4z30VGN8e+f1lC8c9SJ9aTQ/9vH3bsaXLW6GFY +DBisBg2/+vMwRSG9PkYrp1p6rGAhwbaofnZE5zApT7PFEX2RVNPU7lgXn84ycRHw +gZ89Mpa9zShL4T1PS8BrKwS7AH/se7ofKW/s8Z9SgngTWj0Efd4hZmn/EenVHBWf +kjAkvKIgGE8FJF1QlmU5dHDFhRiUGXIaB1rYAcwwuwB06fxRqEL3pU6jkHSru3ry +sYaY/cfpd5D5PT+FlxkzAPH1iiC3knXpcotWpJ2iQshsw9ifwg/vVJB0n20+Rxeu +XTgwiT+X5mJNAQUCj6aExWUg+D5gPnJPwFmzAWBGKWrvwI+vI6zIv4MJywzU+Ei8 +1lU5rezPovAbGSTwUBPDydhORua0P8tVT8KPMmPJhza6IORTPpzdEOCXCOH17CWg +VWKjYvEul8CdNh4O3CJDU4lN8yn6RXCBPK4NKDea17GCIEBgnOnpFny+jdfNT+Ce +9aNh8ah61vbPag9EM2okmBlbnpkhUO+x8K8prZHZE7qRgUbmn1cJwIP6pNN/263q +S2uKZMnoaT65BaQh9wpgSvWmDup3/lGG/C2+m0k087QBVHMSfpTK9WcZ94BbzoeR +S9rWCU2k/woEUOv3hssY5w== +-----END ENCRYPTED PRIVATE KEY----- diff --git a/vectors/cryptography_vectors/asymmetric/PKCS8/enc-unknown-alogrithm.pem b/vectors/cryptography_vectors/asymmetric/PKCS8/enc-unknown-alogrithm.pem new file mode 100644 index 0000000000000..d79a38452330a --- /dev/null +++ b/vectors/cryptography_vectors/asymmetric/PKCS8/enc-unknown-alogrithm.pem @@ -0,0 +1,30 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +MIIFIDBSBgkqhkiG9w0BBQ0wRTApBgkqhkiG9w0BBQwwHAQI9fSurwMcOA4CAggA +MAwGCCqGSIb3DQIJBQAwGAYMKoZIhvcNAwcXgkEDBAigCwRePM70JwSCBMigyMu9 +iDCaGeKuy7BtHQkmvKBiPwrQJwvWKkZQ4/qWlqBig1JM8ZzJaFGyZKUJUxGER16d +MSrXTyHAo1halnkI7GiVJcCCzS4pYlaW8lv9Dy5jUJkUn7y4ZWe+60ZNPA8i1NJn +Fts0Vw7ih7sRoXZZrXuxCrDX/HM3IfYQ16qwi6sZc6/OitKcE+NFta99k4EHV+vH +nZbqI2nIIFrhM3k0ystQSpFbZQqut3X5YEX0qNGrPnWF9/MMcwujuocSqWsdu+4o +6CWR3ELF8Yv80RGvoLVTqvQ+lc+RPjJpiCAM1a17BXtVI+MGG911EjulpyfRpa4s +alnrt/ZZDmThCssg4CGPrcJ9OpMmQbKSp170DDD43okknmqiPSwNKqb0bMblgsck +ydmGSLPsWm/I+YOUSjpq7dWxrS5eurXKxjT/Y2AuaYzDZen893PPqMQtAbp+Kvsj +gPUMxuBmogPN+MfvcLbBAUo5TAeQDMGB/tTg6OkPlVAFh9agbwpv4EE9pr0oHK8+ +m3BiSIIpn85fyG6lblZFpe8hajTf63pxOO6b8t+A28pm9BQSv+Rm9RSJp6NwnAJA +rmhCdbFncdhI9BM4rfL9YiTdqtvcZQ+zK8QdLj75JVD0ZQ/UVXAydeRsATwPLoDf +xY4+dNgYjCdv7qgaBJwIzMkrSDQK0uT1i+oLYSF3p1SeMNMHoAXIgrBqOBu1BUNM +/8NiXuzSfE48CnU2CXQH4DuUa/Luo9Mm5+9k//kCX47oDS7n0ceLGpLz2UfdPwBW +9mF/i5IAlUt8kjn6JvaeSXMXZyPKJnpQSItUGvccDyjD2leqGJKgVY5nAw2aHAuq +jdeTw4wq4Bq8ldxbJ+Ti2EwfhEAyzapqPqndTtKTWNkx8A/wxhpcelYZnkJ1nbed ++IOZaHJUDpi1xHlFiG9ruT2p2pKjaWOZgUHDifPP0UvqBgI0xlNHtyNcy2+hDfxb +Z3Y79bHxIfhzMB8SFsXZyW+s+pu91ya+M99FRjfHvn9ZQvHPUifWk0P/bx927Gly +1uhhWAwYrAYNv/rzMEUhvT5GK6daeqxgIcG2qH52ROcwKU+zxRF9kVTT1O5YF5/O +MnER8IGfPTKWvc0oS+E9T0vAaysEuwB/7Hu6Hylv7PGfUoJ4E1o9BH3eIWZp/xHp +1RwVn5IwJLyiIBhPBSRdUJZlOXRwxYUYlBlyGgda2AHMMLsAdOn8UahC96VOo5B0 +q7t68rGGmP3H6XeQ+T0/hZcZMwDx9Yogt5J16XKLVqSdokLIbMPYn8IP71SQdJ9t +PkcXrl04MIk/l+ZiTQEFAo+mhMVlIPg+YD5yT8BZswFgRilq78CPryOsyL+DCcsM +1PhIvNZVOa3sz6LwGxkk8FATw8nYTkbmtD/LVU/CjzJjyYc2uiDkUz6c3RDglwjh +9ewloFVio2LxLpfAnTYeDtwiQ1OJTfMp+kVwgTyuDSg3mtexgiBAYJzp6RZ8vo3X +zU/gnvWjYfGoetb2z2oPRDNqJJgZW56ZIVDvsfCvKa2R2RO6kYFG5p9XCcCD+qTT +f9ut6ktrimTJ6Gk+uQWkIfcKYEr1pg7qd/5RhvwtvptJNPO0AVRzEn6UyvVnGfeA +W86HkUva1glNpP8KBFDr94bLGOc= +-----END ENCRYPTED PRIVATE KEY-----