| // Copyright 2026 Google LLC | |
| // | |
| // Licensed under the Apache License, Version 2.0 (the "License"); | |
| // you may not use this file except in compliance with the License. | |
| // You may obtain a copy of the License at | |
| // | |
| // https://www.apache.org/licenses/LICENSE-2.0 | |
| // | |
| // Unless required by applicable law or agreed to in writing, software | |
| // distributed under the License is distributed on an "AS IS" BASIS, | |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| // See the License for the specific language governing permissions and | |
| // limitations under the License. | |
| // | |
| #include "testing/pem.h" | |
| #include <string> | |
| #include "absl/status/status.h" | |
| #include "absl/status/status_macros.h" // IWYU pragma: keep | |
| #include "absl/status/status_matchers.h" | |
| #include "absl/strings/string_view.h" | |
| #include "gmock/gmock.h" | |
| #include "gtest/gtest.h" | |
| #include "tink/signature/ecdsa_parameters.h" | |
| #include "tink/signature/ed25519_parameters.h" | |
| #include "tink/signature/rsa_ssa_pss_parameters.h" | |
| namespace credentio { | |
| namespace { | |
| using ::absl_testing::IsOk; | |
| using ::absl_testing::StatusIs; | |
| using ::crypto::tink::EcdsaParameters; | |
| using ::crypto::tink::Ed25519Parameters; | |
| using ::crypto::tink::RsaSsaPssParameters; | |
| using ::testing::HasSubstr; | |
| constexpr absl::string_view kPemKeyP256 = R"(-----BEGIN PRIVATE KEY----- | |
| MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgYUrTw5gDocgm/uqt | |
| 9Y0uHuYZ+qUORlv4tsVvsC+RafyhRANCAARhNXddv5HV8eddKtCGlJ2rFUjyDZWK | |
| iVqaBIXOc3nsxuyQuprla45ifAN/nO9vsAWP6OjOVYcgS/MLvjpQHOrm | |
| -----END PRIVATE KEY-----)"; | |
| constexpr absl::string_view kPemKeyP384 = R"(-----BEGIN PRIVATE KEY----- | |
| MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDcgueympOc5A87sQYu | |
| QQqtX50rK0OMz9aowmNXDnEXm4U62eevBJVSUATFyxkZ0qChZANiAASe9I/03xH0 | |
| SB3lclDxJpnHk8tsq1aqZbBl0G5giE3h/KpRd1303+spJAv1UZZhbduuWzycEo1s | |
| EtjDR7qk4+cSrE2ii9ltavHCQJQUsfYkmcesZJh9KpHi8LIhyY50e40= | |
| -----END PRIVATE KEY-----)"; | |
| constexpr absl::string_view kPemKeyP521 = R"(-----BEGIN PRIVATE KEY----- | |
| MIHuAgEAMBAGByqGSM49AgEGBSuBBAAjBIHWMIHTAgEBBEIAr8855XdpHWs9YBRm | |
| oiy+QZeG5KB14Kl2Rr4DRLgt3258xfm8fuDRHluuJEHZQibrn86u50KkMNVT1qgD | |
| zlqLkwChgYkDgYYABAG/tAXbStwpjnpW6Mla6JboL4VPNfAM+YlgtwTj63j5TN0N | |
| n6krb6JG1yM3fxzEf0BL58wbV/quMxozEQfGxtmyzQEYlJmaWOaXangUvVuY3QAf | |
| v9PLp4egCYvH2iooca4rv64wEhVErXSF8Zre976ITX5p4LUX4Q3DECdnbom2yU2q | |
| qQ== | |
| -----END PRIVATE KEY-----)"; | |
| constexpr absl::string_view kPemKeyEd25519 = R"(-----BEGIN PRIVATE KEY----- | |
| MC4CAQAwBQYDK2VwBCIEIKdWv26hzGxk0up0J6859Q+ELEu/FBMg/PAn7dlxACK8 | |
| -----END PRIVATE KEY-----)"; | |
| constexpr absl::string_view kPemKeyRsa1024 = R"(-----BEGIN PRIVATE KEY----- | |
| MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBALFa2Jbkosxnt8JT | |
| bry40Mk0kUY/VdFI4Y2RzyzwT6Zx8xY4BqAF8fpjmYjwqezvnA3VwgLDso0TuyVE | |
| OLWcF3rdrxnHSLnuao4CrizKgJJyVOJRpkBtwpGoz4tMzl2lyLv7TI0wL5t5oH8A | |
| 7iggeJC0ElTOITVBwcpAlvsZ9pbzAgMBAAECgYABK6DPSh367FpNmYBbFXsnQMYO | |
| qR9XXLxEU2iDGujjp8/bXy5IAxIIPX0HZtMwQZqNitIXc5QrkyxCgDNBm5CaF6bR | |
| CVJW/TlJ4W+l1g5cG5SnahNfVBlEDf0hlIkf3sFZ5XwL77tq7Ft6JQ7caqWTgaw7 | |
| plfL1GpAywUuuStCkQJBAOggRSVjxeLWAPaX3J/PuqxrtjgyjtkkEK8upoz41k+5 | |
| 24SCSbBtDcMBLfR2GrcpVKWi/S5rMONVXc9giVQqa0MCQQDDmHxbPBNg8k53zCne | |
| N/8rkGOaUWt05XEjiz+CJ5BJM3w7og+Ky+6fmM3rnVuJ3mKtz+2goX55AqUagz+M | |
| ZHKRAkACrmS+EtH1Vc17C7QDsI2SckgPjB30SiNbMqm/1Rv8ncP4WtzpCclv6DKU | |
| sUyLsxGEPEa6Y4iUB6dmvtG3RCorAkALfw7wHdvVuug5ylo7oXbyDI6OJ3L1b/by | |
| a+DTuZeVdd07dA8NzWa9IrIXwyv6MoQCS1JgOp3AZxNlN4moqs7BAkBdYa/HFdWv | |
| rbAP9L4Sm0BdSH3ZC6Vvn/u3uXAe7teLoAE4lZsbePmOBAGZW2vmlMEK3cnLk/mt | |
| nBJ6QgwSnpno | |
| -----END PRIVATE KEY-----)"; | |
| constexpr absl::string_view kPemKeyRsa2048 = R"(-----BEGIN PRIVATE KEY----- | |
| MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC4KLDzI35zPSEW | |
| Tbt2ZdmlKbvghqmJHWchoiptOPzfkCGdn4gzX5VZZHS+knS5fY/iI6a+o1qXdPkp | |
| 40/p+yPyyQHbFpfid+wiRgCClZHYtPik6XI8OgVunBGQGBF9EACgEwqIB1Hw4yop | |
| VS9EZigeEXHM7GGuwhG/BpAsRMBbdxKjwtnR0iz8KDeb0Mz6UNi90CtxkBS3wqBv | |
| en6/nQZYJ2WfNt+uArQw8x8uSnuBHqhjTbOi4BLbi+OgfPRfXR0u6kWQWYOqu43D | |
| Kbv3s1N0mjqITFavoYvNLRe6krbbA7s08H1OZ0vZXIdy00loYqwcUNLWzSY1P3pj | |
| D5+OjifnAgMBAAECggEAJmCoe4rei7JmBkldsy9He4Fme0Rk6UOc3ef3EnrpS8e0 | |
| Ea6Qyi/1pkLmh15q/8rYZMaMNbdCJkUEtcN+wGKLW8mi3t7m+RWHup6+9XepBLG2 | |
| DVvu5/kpb6MLj+1MG7Vtg+5j5/QqkdotS57KcmUdoCJ/hjaOpsYfv6DlA6yyL30W | |
| iepLSeEJrwmIeSVZZ2U21jfBPfl8bWR21KhSpu2H6uCbbn3mLNJR2Vd0RFvuNxYe | |
| HvbaGgRqmhnrv9XzW31UrF4yfVVMeRoeerzjiFHSUzLCAq002L8C9udeyVNqab6U | |
| 6kSwBVAKpowmhQ7yWkzPN9kmAlsOuhxSX0xr1gTZMQKBgQDwOlH26CaVkHuUknVu | |
| Le3PmHSG8zVCTGBXeovje+c9OYPXC4KbtcbdRGCtMUTkglCHuZ381N1K7uXC7eJ4 | |
| OaCFMrN+ChQnWcoN3QqXGDuzFwPjoIESVHbiZ2X5VkwpYlQ4qnV2JvqghmKu87Wz | |
| wDBfLmwE0/gTCMy+s2Cra9isMQKBgQDEP/tT6zXng3TwI0YynRCQ3+FuO+SE7tIj | |
| JbOoyKaFdF2KkFe9mN9QiLJkkiqW8rpGBMZT6/bBF394b1EujBYYNgriCadP/mHo | |
| U3M8NKTfViwfAHnlzS5vSrk5w5iJHqgrJgcu0R/pf0qJ3qfhrd96gyz7dNylYp5E | |
| XgcfzS9HlwKBgQCbEQpXlwNRCDK9dMzYkk0v8/lEIzn90c9eqHwkG5bornesGIH2 | |
| gSAdNEYzhdoypuvUsLyKt90gwZUOfv/xG0HCuTej5F2eCRekW0q6vanLsM+R38lx | |
| S5RyEMyCZnJDRHWZHm80FXUyqYyJ4kcoAKc4yX5wn2NC5itD7gY4oST8AQKBgGvk | |
| OQoz39i93sY+vlMJIphjXQ47gzDKE2EbUyBR36qzBNIu9O3ZY7xkyp6b9Sozm9Du | |
| wxJUQb56aqwNlvYeMe9xlp4abI9/7NfLOSk6UAIw3+TTYDDEkujAjgCB1hRcdFv0 | |
| djJ46jB2uMX/URCzhI9YGpzL7JpIE3bGsuf66ClVAoGAfIfimDz5JdUyqDNN3Sqi | |
| MUBPmZywDxymF9gl6iSB2scenRYmFz9b0mGrs1+45lPDKxlTmd4E/YrTwDh1VSCs | |
| cQLS9rLBwTyXY+j17DUfYfRUczaF0aZrrpjcT9jkF0AKVTBRaw3+jtd3GV6OtopW | |
| uPwS26qT7r9KF5Df73qDGkI= | |
| -----END PRIVATE KEY-----)"; | |
| constexpr absl::string_view kPemKeyRsa3072 = R"(-----BEGIN PRIVATE KEY----- | |
| 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 | |
| dVMvgoGxsF6YKmXFRRLcNcRS | |
| -----END PRIVATE KEY-----)"; | |
| constexpr absl::string_view kPemKeyRsa4096 = R"(-----BEGIN PRIVATE KEY----- | |
| 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 | |
| C4Yc1VEuRRkvHG4duH9NL6soWRHT | |
| -----END PRIVATE KEY-----)"; | |
| TEST(LoadTestKeyFromPemTest, FailsOnInvalidPem) { | |
| absl::StatusOr<EcdsaParameters> params = | |
| EcdsaParameters::Builder() | |
| .SetCurveType(EcdsaParameters::CurveType::kNistP256) | |
| .SetHashType(EcdsaParameters::HashType::kSha256) | |
| .SetSignatureEncoding(EcdsaParameters::SignatureEncoding::kDer) | |
| .SetVariant(EcdsaParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| EXPECT_THAT(LoadTestKeyFromPem("not pem data", *params), | |
| StatusIs(absl::StatusCode::kInvalidArgument)); | |
| } | |
| TEST(LoadTestKeyFromPemTest, P256) { | |
| absl::StatusOr<EcdsaParameters> params = | |
| EcdsaParameters::Builder() | |
| .SetCurveType(EcdsaParameters::CurveType::kNistP256) | |
| .SetHashType(EcdsaParameters::HashType::kSha256) | |
| .SetSignatureEncoding(EcdsaParameters::SignatureEncoding::kIeeeP1363) | |
| .SetVariant(EcdsaParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| auto signer = LoadTestKeyFromPem(kPemKeyP256, *params); | |
| ABSL_ASSERT_OK(signer); | |
| EXPECT_THAT((*signer)->Sign("data to sign"), IsOk()); | |
| } | |
| TEST(LoadTestKeyFromPemTest, P384) { | |
| absl::StatusOr<EcdsaParameters> params = | |
| EcdsaParameters::Builder() | |
| .SetCurveType(EcdsaParameters::CurveType::kNistP384) | |
| .SetHashType(EcdsaParameters::HashType::kSha384) | |
| .SetSignatureEncoding(EcdsaParameters::SignatureEncoding::kIeeeP1363) | |
| .SetVariant(EcdsaParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| auto signer = LoadTestKeyFromPem(kPemKeyP384, *params); | |
| ABSL_ASSERT_OK(signer); | |
| EXPECT_THAT((*signer)->Sign("data to sign"), IsOk()); | |
| } | |
| TEST(LoadTestKeyFromPemTest, P521) { | |
| absl::StatusOr<EcdsaParameters> params = | |
| EcdsaParameters::Builder() | |
| .SetCurveType(EcdsaParameters::CurveType::kNistP521) | |
| .SetHashType(EcdsaParameters::HashType::kSha512) | |
| .SetSignatureEncoding(EcdsaParameters::SignatureEncoding::kIeeeP1363) | |
| .SetVariant(EcdsaParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| auto signer = LoadTestKeyFromPem(kPemKeyP521, *params); | |
| ABSL_ASSERT_OK(signer); | |
| EXPECT_THAT((*signer)->Sign("data to sign"), IsOk()); | |
| } | |
| TEST(LoadTestKeyFromPemTest, ED25519) { | |
| absl::StatusOr<Ed25519Parameters> params = | |
| Ed25519Parameters::Create(Ed25519Parameters::Variant::kNoPrefix); | |
| ABSL_ASSERT_OK(params); | |
| auto signer = LoadTestKeyFromPem(kPemKeyEd25519, *params); | |
| ABSL_ASSERT_OK(signer); | |
| EXPECT_THAT((*signer)->Sign("data to sign"), IsOk()); | |
| } | |
| TEST(LoadTestKeyFromPemTest, RSA2048) { | |
| absl::StatusOr<RsaSsaPssParameters> params = | |
| RsaSsaPssParameters::Builder() | |
| .SetModulusSizeInBits(2048) | |
| .SetSigHashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetMgf1HashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetSaltLengthInBytes(32) | |
| .SetVariant(RsaSsaPssParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| auto signer = LoadTestKeyFromPem(kPemKeyRsa2048, *params); | |
| ABSL_ASSERT_OK(signer); | |
| EXPECT_THAT((*signer)->Sign("data to sign"), IsOk()); | |
| } | |
| TEST(LoadTestKeyFromPemTest, RSA3072) { | |
| absl::StatusOr<RsaSsaPssParameters> params = | |
| RsaSsaPssParameters::Builder() | |
| .SetModulusSizeInBits(3072) | |
| .SetSigHashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetMgf1HashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetSaltLengthInBytes(32) | |
| .SetVariant(RsaSsaPssParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| auto signer = LoadTestKeyFromPem(kPemKeyRsa3072, *params); | |
| ABSL_ASSERT_OK(signer); | |
| EXPECT_THAT((*signer)->Sign("data to sign"), IsOk()); | |
| } | |
| TEST(LoadTestKeyFromPemTest, RSA4096) { | |
| absl::StatusOr<RsaSsaPssParameters> params = | |
| RsaSsaPssParameters::Builder() | |
| .SetModulusSizeInBits(4096) | |
| .SetSigHashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetMgf1HashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetSaltLengthInBytes(32) | |
| .SetVariant(RsaSsaPssParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| auto signer = LoadTestKeyFromPem(kPemKeyRsa4096, *params); | |
| ABSL_ASSERT_OK(signer); | |
| EXPECT_THAT((*signer)->Sign("data to sign"), IsOk()); | |
| } | |
| TEST(LoadTestKeyFromPemTest, WrongKeySize_Fails) { | |
| absl::StatusOr<RsaSsaPssParameters> params = | |
| RsaSsaPssParameters::Builder() | |
| .SetModulusSizeInBits(3072) | |
| .SetSigHashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetMgf1HashType(RsaSsaPssParameters::HashType::kSha256) | |
| .SetSaltLengthInBytes(32) | |
| .SetVariant(RsaSsaPssParameters::Variant::kNoPrefix) | |
| .Build(); | |
| ABSL_ASSERT_OK(params); | |
| EXPECT_THAT(LoadTestKeyFromPem(kPemKeyRsa4096, *params), | |
| StatusIs(absl::StatusCode::kInvalidArgument)); | |
| } | |
| TEST(LoadOcspResponseFromPemTest, FailsOnInvalidPem) { | |
| EXPECT_THAT(LoadOcspResponseFromPem("not pem data"), | |
| StatusIs(absl::StatusCode::kInvalidArgument)); | |
| } | |
| TEST(LoadOcspResponseFromPemTest, Succeeds) { | |
| constexpr absl::string_view kPemOcsp = R"(-----BEGIN OCSP RESPONSE----- | |
| ZmFrZSBvY3NwIHJlc3BvbnNl | |
| -----END OCSP RESPONSE-----)"; | |
| auto der = LoadOcspResponseFromPem(kPemOcsp); | |
| ABSL_ASSERT_OK(der); | |
| EXPECT_EQ(*der, "fake ocsp response"); | |
| } | |
| TEST(LoadOcspResponseFromPemTest, FailsOnMultipleBlocks) { | |
| constexpr absl::string_view kPemOcspMultiple = | |
| R"(-----BEGIN OCSP RESPONSE----- | |
| ZmFrZSBvY3NwIHJlc3BvbnNlIDE= | |
| -----END OCSP RESPONSE----- | |
| -----BEGIN OCSP RESPONSE----- | |
| ZmFrZSBvY3NwIHJlc3BvbnNlIDI= | |
| -----END OCSP RESPONSE-----)"; | |
| EXPECT_THAT(LoadOcspResponseFromPem(kPemOcspMultiple), | |
| StatusIs(absl::StatusCode::kInvalidArgument, | |
| HasSubstr("Multiple OCSP RESPONSE blocks found"))); | |
| } | |
| } // namespace | |
| } // namespace credentio |