Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package aws-c-cal for openSUSE:Factory checked in at 2025-04-04 17:34:23 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/aws-c-cal (Old) and /work/SRC/openSUSE:Factory/.aws-c-cal.new.1907 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "aws-c-cal" Fri Apr 4 17:34:23 2025 rev:17 rq:1267113 version:0.8.9 Changes: -------- --- /work/SRC/openSUSE:Factory/aws-c-cal/aws-c-cal.changes 2025-03-26 21:25:10.342870600 +0100 +++ /work/SRC/openSUSE:Factory/.aws-c-cal.new.1907/aws-c-cal.changes 2025-04-04 17:34:27.277370914 +0200 @@ -1,0 +2,9 @@ +Wed Apr 2 14:58:17 UTC 2025 - John Paul Adrian Glaubitz <adrian.glaub...@suse.com> + +- Update to version 0.8.9 + * RSA PKCS8 support by @DmitriyMusatkin in (#212) +- from version 0.8.8 + * Fix module export to respect ed25519 flag by @DmitriyMusatkin in (#210) + * Fix FindCrypto behavior on win by @DmitriyMusatkin in (#211) + +------------------------------------------------------------------- Old: ---- v0.8.7.tar.gz New: ---- v0.8.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ aws-c-cal.spec ++++++ --- /var/tmp/diff_new_pack.bzhnkB/_old 2025-04-04 17:34:29.425460634 +0200 +++ /var/tmp/diff_new_pack.bzhnkB/_new 2025-04-04 17:34:29.453461803 +0200 @@ -19,7 +19,7 @@ %define library_version 1.0.0 %define library_soversion 0unstable Name: aws-c-cal -Version: 0.8.7 +Version: 0.8.9 Release: 0 Summary: AWS C99 wrapper for cryptography primitives License: Apache-2.0 ++++++ v0.8.7.tar.gz -> v0.8.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/.github/workflows/ci.yml new/aws-c-cal-0.8.9/.github/workflows/ci.yml --- old/aws-c-cal-0.8.7/.github/workflows/ci.yml 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/.github/workflows/ci.yml 2025-04-01 22:25:21.000000000 +0200 @@ -179,7 +179,7 @@ - name: Build ${{ env.PACKAGE_NAME }} run: | python -c "from urllib.request import urlretrieve; urlretrieve('${{ env.BUILDER_HOST }}/${{ env.BUILDER_SOURCE }}/${{ env.BUILDER_VERSION }}/builder.pyz?run=${{ env.RUN }}', 'builder.pyz')" - AWS_TEST_FIPS=1 python builder.pyz build -p ${{ env.PACKAGE_NAME }} --variant=aws-lc-fips --cmake-extra=-DFIPS=ON --cmake-extra=-DPERL_EXECUTABLE=perl --cmake-extra=-DGO_EXECUTABLE=go + AWS_TEST_FIPS=1 python builder.pyz build -p ${{ env.PACKAGE_NAME }} --variant=aws-lc-fips --cmake-extra=-DFIPS=ON --cmake-extra=-DPERL_EXECUTABLE=perl --cmake-extra=-DGO_EXECUTABLE=go --cmake-extra=-DCMAKE_POLICY_VERSION_MINIMUM=3.5 windows: runs-on: windows-2022 # latest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/cmake/aws-c-cal-config.cmake new/aws-c-cal-0.8.9/cmake/aws-c-cal-config.cmake --- old/aws-c-cal-0.8.7/cmake/aws-c-cal-config.cmake 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/cmake/aws-c-cal-config.cmake 2025-04-01 22:25:21.000000000 +0200 @@ -2,8 +2,8 @@ find_dependency(aws-c-common) -if (NOT @BYO_CRYPTO@ AND NOT WIN32 AND NOT APPLE) # if NOT BYO_CRYPTO AND NOT WIN32 AND NOT APPLE - if (@USE_OPENSSL@ AND NOT ANDROID) # if USE_OPENSSL AND NOT ANDROID +if (NOT @BYO_CRYPTO@ AND (@AWS_USE_LIBCRYPTO_TO_SUPPORT_ED25519_EVERYWHERE@ OR (NOT WIN32 AND NOT APPLE))) + if (@USE_OPENSSL@ AND NOT ANDROID) # aws-c-cal has been built with a dependency on OpenSSL::Crypto, # therefore consumers of this library have a dependency on OpenSSL and must have it found find_dependency(OpenSSL REQUIRED) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/cmake/modules/Findcrypto.cmake new/aws-c-cal-0.8.9/cmake/modules/Findcrypto.cmake --- old/aws-c-cal-0.8.7/cmake/modules/Findcrypto.cmake 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/cmake/modules/Findcrypto.cmake 2025-04-01 22:25:21.000000000 +0200 @@ -41,7 +41,7 @@ ) find_library(crypto_SHARED_LIBRARY - NAMES libcrypto.so libcrypto.dylib + NAMES libcrypto.so libcrypto.dylib crypto.dll HINTS ${CMAKE_PREFIX_PATH}/build/crypto ${CMAKE_PREFIX_PATH}/build @@ -56,7 +56,7 @@ ) find_library(crypto_STATIC_LIBRARY - NAMES libcrypto.a + NAMES libcrypto.a crypto.lib HINTS ${CMAKE_PREFIX_PATH}/build/crypto ${CMAKE_PREFIX_PATH}/build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/include/aws/cal/exports.h new/aws-c-cal-0.8.9/include/aws/cal/exports.h --- old/aws-c-cal-0.8.7/include/aws/cal/exports.h 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/include/aws/cal/exports.h 2025-04-01 22:25:21.000000000 +0200 @@ -4,7 +4,7 @@ * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ -#if defined(AWS_C_RT_USE_WINDOWS_DLL_SEMANTICS) || defined(WIN32) +#if defined(AWS_CRT_USE_WINDOWS_DLL_SEMANTICS) || defined(_WIN32) # ifdef AWS_CAL_USE_IMPORT_EXPORT # ifdef AWS_CAL_EXPORTS # define AWS_CAL_API __declspec(dllexport) @@ -15,14 +15,14 @@ # define AWS_CAL_API # endif /* AWS_CAL_USE_IMPORT_EXPORT */ -#else /* defined (AWS_C_RT_USE_WINDOWS_DLL_SEMANTICS) || defined (WIN32) */ +#else /* defined (AWS_CRT_USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32) */ -# if ((__GNUC__ >= 4) || defined(__clang__)) && defined(AWS_CAL_USE_IMPORT_EXPORT) && defined(AWS_CAL_EXPORTS) +# if defined(AWS_CAL_USE_IMPORT_EXPORT) && defined(AWS_CAL_EXPORTS) # define AWS_CAL_API __attribute__((visibility("default"))) # else # define AWS_CAL_API -# endif /* __GNUC__ >= 4 || defined(__clang__) */ +# endif -#endif /* defined (AWS_C_RT_USE_WINDOWS_DLL_SEMANTICS) || defined (WIN32) */ +#endif /* defined (AWS_CRT_USE_WINDOWS_DLL_SEMANTICS) || defined (_WIN32) */ #endif /* AWS_CAL_EXPORTS_H */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/include/aws/cal/rsa.h new/aws-c-cal-0.8.9/include/aws/cal/rsa.h --- old/aws-c-cal-0.8.7/include/aws/cal/rsa.h 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/include/aws/cal/rsa.h 2025-04-01 22:25:21.000000000 +0200 @@ -54,6 +54,15 @@ struct aws_byte_cursor key); /** + * Creates an RSA private key from PrivateKeyInfo as defined in rfc 5208 (aka PKCS8). + * Returns a new instance of aws_rsa_key_pair if the key was successfully built. + * Otherwise returns NULL. + */ +AWS_CAL_API struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_private_key_pkcs8( + struct aws_allocator *allocator, + struct aws_byte_cursor key); + +/** * Adds one to an RSA key pair's ref count. * Returns key_pair pointer. */ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/source/rsa.c new/aws-c-cal-0.8.9/source/rsa.c --- old/aws-c-cal-0.8.7/source/rsa.c 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/source/rsa.c 2025-04-01 22:25:21.000000000 +0200 @@ -14,6 +14,9 @@ typedef struct aws_rsa_key_pair *(aws_rsa_key_pair_new_from_private_pkcs1_fn)(struct aws_allocator *allocator, struct aws_byte_cursor private_key); +typedef struct aws_rsa_key_pair *(aws_rsa_key_pair_new_from_private_pkcs8_fn)(struct aws_allocator *allocator, + struct aws_byte_cursor private_key); + #ifndef BYO_CRYPTO extern struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_public_key_pkcs1_impl( @@ -24,6 +27,10 @@ struct aws_allocator *allocator, struct aws_byte_cursor private_key); +struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_private_key_pkcs8_impl( + struct aws_allocator *allocator, + struct aws_byte_cursor private_key); + #else /* BYO_CRYPTO */ struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_public_key_pkcs1_impl( @@ -41,6 +48,14 @@ (void)private_key; abort(); } + +struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_private_key_pkcs8_impl( + struct aws_allocator *allocator, + struct aws_byte_cursor private_key) { + (void)allocator; + (void)private_key; + abort(); +} #endif /* BYO_CRYPTO */ static aws_rsa_key_pair_new_from_public_pkcs1_fn *s_rsa_key_pair_new_from_public_key_pkcs1_fn = @@ -49,6 +64,9 @@ static aws_rsa_key_pair_new_from_private_pkcs1_fn *s_rsa_key_pair_new_from_private_key_pkcs1_fn = aws_rsa_key_pair_new_from_private_key_pkcs1_impl; +static aws_rsa_key_pair_new_from_private_pkcs8_fn *s_rsa_key_pair_new_from_private_key_pkcs8_fn = + aws_rsa_key_pair_new_from_private_key_pkcs8_impl; + struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_public_key_pkcs1( struct aws_allocator *allocator, struct aws_byte_cursor public_key) { @@ -61,6 +79,12 @@ return s_rsa_key_pair_new_from_private_key_pkcs1_fn(allocator, private_key); } +AWS_CAL_API struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_private_key_pkcs8( + struct aws_allocator *allocator, + struct aws_byte_cursor key) { + return s_rsa_key_pair_new_from_private_key_pkcs8_fn(allocator, key); +} + void aws_rsa_key_pair_base_clean_up(struct aws_rsa_key_pair *key_pair) { aws_byte_buf_clean_up_secure(&key_pair->priv); aws_byte_buf_clean_up_secure(&key_pair->pub); @@ -286,3 +310,107 @@ return AWS_OP_SUCCESS; } + +#ifndef BYO_CRYPTO + +static uint8_t s_rsa_encryption_oid[] = {0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01}; + +/** + * There are likely tens of algo specifiers for rsa out there. + * But in practice mostly everyone uses rsaEncryption oid for key at rest. + * So for now just support that and we can add other ones later if needed. + * Even though its technically encryption oid, most crypto libs are lax + * and allow the key to be used for all operations. + */ +static struct aws_byte_cursor s_rsa_encryption_oid_cur = { + .ptr = (s_rsa_encryption_oid), + .len = sizeof(s_rsa_encryption_oid), +}; + +/** + * Win and Mac dont provide native support for loading pkcs8 keys, so + * for simplicity and consistency just parse pkcs1 key from pkcs8 and + * use it with existing pkcs1 loader. + */ +struct aws_rsa_key_pair *aws_rsa_key_pair_new_from_private_key_pkcs8_impl( + struct aws_allocator *allocator, + struct aws_byte_cursor private_key) { + + struct aws_der_decoder *decoder = aws_der_decoder_new(allocator, private_key); + + if (decoder == NULL) { + return NULL; + } + + /** + * Format of pkcs8 is as follows. + * PrivateKeyInfo ::= SEQUENCE { + * version Version, -- INTEGER (0) + * algorithm AlgorithmIdentifier, + * privateKey OCTET STRING, -- contains DER encoded key + * attributes [0] IMPLICIT SET OF Attribute OPTIONAL + * } + * AlgorithmIdentifier ::= SEQUENCE { + * algorithm OBJECT IDENTIFIER, + * parameters ANY DEFINED BY algorithm OPTIONAL + * } + */ + + struct aws_rsa_key_pair *key_pair = NULL; + + if (!aws_der_decoder_next(decoder) || aws_der_decoder_tlv_type(decoder) != AWS_DER_SEQUENCE) { + aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED); + goto on_done; + } + + /* version */ + struct aws_byte_cursor version_cur; + if (!aws_der_decoder_next(decoder) || aws_der_decoder_tlv_unsigned_integer(decoder, &version_cur)) { + aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED); + goto on_done; + } + + if (version_cur.len != 1 || version_cur.ptr[0] != 0) { + aws_raise_error(AWS_ERROR_CAL_UNSUPPORTED_KEY_FORMAT); + goto on_done; + } + + /* oid */ + struct aws_byte_cursor oid_cur; + if (!aws_der_decoder_next(decoder) || aws_der_decoder_tlv_type(decoder) != AWS_DER_SEQUENCE) { + aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED); + goto on_done; + } + + if (!aws_der_decoder_next(decoder) || aws_der_decoder_tlv_type(decoder) != AWS_DER_OBJECT_IDENTIFIER || + aws_der_decoder_tlv_blob(decoder, &oid_cur)) { + aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED); + goto on_done; + } + + if (!aws_byte_cursor_eq(&s_rsa_encryption_oid_cur, &oid_cur)) { + aws_raise_error(AWS_ERROR_CAL_UNSUPPORTED_KEY_FORMAT); + goto on_done; + } + + /* skip additional params */ + if (!aws_der_decoder_next(decoder)) { + aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED); + goto on_done; + } + + /* key */ + struct aws_byte_cursor key; + if (!aws_der_decoder_next(decoder) || aws_der_decoder_tlv_string(decoder, &key)) { + aws_raise_error(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED); + goto on_done; + } + + key_pair = aws_rsa_key_pair_new_from_private_key_pkcs1(allocator, key); + +on_done: + aws_der_decoder_destroy(decoder); + return key_pair; +} + +#endif diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/tests/CMakeLists.txt new/aws-c-cal-0.8.9/tests/CMakeLists.txt --- old/aws-c-cal-0.8.7/tests/CMakeLists.txt 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/tests/CMakeLists.txt 2025-04-01 22:25:21.000000000 +0200 @@ -89,6 +89,7 @@ add_test_case(rsa_decrypt_oaep512) add_test_case(rsa_signing_mismatch_pkcs1_sha256) add_test_case(rsa_signing_mismatch_pkcs1_sha1) +add_test_case(rsa_encryption_roundtrip_pkcs15_from_user_pkcs8) add_test_case(aes_cbc_NIST_CBCGFSbox256_case_1) add_test_case(aes_cbc_NIST_CBCVarKey256_case_254) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/aws-c-cal-0.8.7/tests/rsa_test.c new/aws-c-cal-0.8.9/tests/rsa_test.c --- old/aws-c-cal-0.8.7/tests/rsa_test.c 2025-03-14 19:45:06.000000000 +0100 +++ new/aws-c-cal-0.8.9/tests/rsa_test.c 2025-04-01 22:25:21.000000000 +0200 @@ -102,6 +102,33 @@ "tZI9TCH4Sq33MGEjf2MyW0XMXC56dA2VOPSTHGKaoKmyn7L9G4WfDFcYmCdvmLkR" "7wAz2Dyxr6ImChSWD/y2ddz1U+H39uqRxwIkwJ7TbDflYNXgsAOOlUg="; +static const char *TEST_PKCS8_RSA_PRIVATE_KEY_2048 = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDN0jYhXzsI1lSA" + "j+3uxraUu/78uHJlCcTifQlVUftgEzJth7WNGvrJ8bDLUHwV04cTYSkydgsivjms" + "XFgzuTCOLiHX0ik/RT1fOvOpk0gte2gCfPIACUAkTlGXKJ+v+1kqnWFmZFNvtkz2" + "fmLIRq9ZrXWORVmySCeoSfvyygxkmfTUfGieFr8LMFSB6VoWKA/vOk0sMF/5PRxm" + "JESS4pOMjWQ3QHpLdjsgUAnxsThLVMbaA5JXdHnFHlgkTbL/OSY06EUzuZ0dJpTU" + "qSBbaz6qewlIO4eM9d2N+5d/mt5nn4rU7yuLGlJE/U9UpSutuvkCkqosST9yKBz7" + "YUhK7WyPAgMBAAECggEAYrHEZyhFJK2yA5wA2hjLgHLNiN3hbPXMRVbz3MfdJGrQ" + "KZmDw1AGpkORJU1I0yaFhRN4L8xO9rAE89OsL9FDqUoRzG3ofYB0N3ALW2tWlwiw" + "DVFgsge9jCtKEJPYTwjV7wtcoz7Ei7L9IM3mDGdoujXlQv2aT1UuPxKLEBc27h3Q" + "KZZL0QbA33SmO24BUx9Y741hIXsVvoce0MQM1TPwEGH18qYpffb3kCBTwFEySx+q" + "JFwadZiK1JPQgpELrXZT0VuARD2Ze8Z7c0b6668wYiwJ2mmf4l0NTLk67mIIfG1w" + "NNNzHme/UGQEjSjUU9TFWLVHU9enumPv5UeLx3wvgQKBgQD7k6pCk8kkUcjjq0sq" + "92Coy1DMlZg9ictcusJ5pfe1ZdW01iX/S/88ZOxk1X27jTWcHarAeA+ci4LzDWPG" + "I61Hy4kJFOJB6Sx3hDSnfNvuIC/7zrcWLNzvfAeDYmPhAqi1K4HYFN7Ipa/1+Uew" + "kWVllcUHRz5zWU+oYVXDsjARrwKBgQDRcJowibhaG4UUMzRsyyEK1l/w+z75L8A7" + "2ZA+wMqyUo9LPgJRYvEHHRQTHDGCzP81IUaAK2OfWrD5Jnn6r4Il7+cQ+xCHKiMD" + "rBhnL9dG4lVAWgdZPyWXfrdT3mqpZ3UgfWysvph8s48QdLA3ku7PpTfchwtSdXQP" + "cxhEItlrIQKBgQDTTB8AdCfIfXiA3+nuWH+yxbFDY5HOfeF0LNgSXDdFABcSH5si" + "Za4mB44U0ssbr2qLiM9VgIF8NiDyCxj13hk359dc7VFrknBqoXuoANKnmhkzIVfd" + "JCkca8vTqdvBrP4NzFDuL/k+BQtZSNnRjwze2X/2sPve3fBtt/LUvuBouQKBgQC9" + "T1Cv6uxN1m410grjA8C8MQXLpu5HAxh5gLBXaKBPCz0mv8gMlKhUy73ngCZomq9b" + "8NXu6ElGMw2gR10ecSHs9KohuS45XqcDnLz6GE44bkCsyDO4QdHS2+EN2A8FTNSc" + "J4Lhqe3fWdZJA5B8yz09R5P0q8RaJnxfsqMOg4mOwQKBgQC+N5xLCRa/n1kJ11we" + "rnOe2POS+zuThhi1aMn0LLPIDwVMktymV7F8JegbdYB5KjxyxzDPcpRDRKCXvAew" + "QiaCZLRyigBqDpDP4l3uIp1OEzWLYuEAWwnErC7fuPm0TFAy5ecegxW7eXasDy2C" + "dJJcK3yV8NRVOzr2voGRmr4d7w=="; + static int s_rsa_encryption_roundtrip_from_user( struct aws_allocator *allocator, enum aws_rsa_encryption_algorithm algo) { @@ -122,6 +149,26 @@ return AWS_OP_SUCCESS; } +static int s_rsa_encryption_roundtrip_from_user_pkcs8( + struct aws_allocator *allocator, + enum aws_rsa_encryption_algorithm algo) { + struct aws_byte_buf key_buf; + ASSERT_SUCCESS(s_byte_buf_decoded_from_base64_cur( + allocator, aws_byte_cursor_from_c_str(TEST_PKCS8_RSA_PRIVATE_KEY_2048), &key_buf)); + + struct aws_rsa_key_pair *key_pair = + aws_rsa_key_pair_new_from_private_key_pkcs8(allocator, aws_byte_cursor_from_buf(&key_buf)); + + ASSERT_NOT_NULL(key_pair); + + s_rsa_encryption_roundtrip_helper(allocator, key_pair, algo); + + aws_rsa_key_pair_release(key_pair); + aws_byte_buf_clean_up_secure(&key_buf); + + return AWS_OP_SUCCESS; +} + static int s_rsa_encryption_roundtrip_pkcs1_from_user(struct aws_allocator *allocator, void *ctx) { (void)ctx; @@ -135,6 +182,40 @@ } AWS_TEST_CASE(rsa_encryption_roundtrip_pkcs1_from_user, s_rsa_encryption_roundtrip_pkcs1_from_user); +static int s_rsa_encryption_roundtrip_pkcs15_from_user_pkcs8(struct aws_allocator *allocator, void *ctx) { + (void)ctx; + + aws_cal_library_test_init(allocator); + + ASSERT_SUCCESS(s_rsa_encryption_roundtrip_from_user_pkcs8(allocator, AWS_CAL_RSA_ENCRYPTION_PKCS1_5)); + + aws_cal_library_clean_up(); + + return AWS_OP_SUCCESS; +} +AWS_TEST_CASE(rsa_encryption_roundtrip_pkcs15_from_user_pkcs8, s_rsa_encryption_roundtrip_pkcs15_from_user_pkcs8); + +static int s_rsa_pkcs8_key_load_error(struct aws_allocator *allocator, void *ctx) { + (void)ctx; + + aws_cal_library_test_init(allocator); + + struct aws_byte_buf key_buf; + ASSERT_SUCCESS(s_byte_buf_decoded_from_base64_cur( + allocator, aws_byte_cursor_from_c_str(TEST_PKCS1_RSA_PRIVATE_KEY_2048), &key_buf)); + + struct aws_rsa_key_pair *key_pair = + aws_rsa_key_pair_new_from_private_key_pkcs8(allocator, aws_byte_cursor_from_buf(&key_buf)); + + ASSERT_NULL(key_pair); + ASSERT_INT_EQUALS(AWS_ERROR_CAL_MALFORMED_ASN1_ENCOUNTERED, aws_last_error()); + + aws_cal_library_clean_up(); + + return AWS_OP_SUCCESS; +} +AWS_TEST_CASE(rsa_pkcs8_key_load_error, s_rsa_pkcs8_key_load_error); + static int s_rsa_encryption_roundtrip_oaep_sha256_from_user(struct aws_allocator *allocator, void *ctx) { (void)ctx;