/* Copyright (c) 2014, Google Inc. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include <stdint.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <utility> #include <vector> #include <gtest/gtest.h> #include <openssl/bytestring.h> #include <openssl/crypto.h> #include <openssl/dh.h> #include <openssl/digest.h> #include <openssl/err.h> #include <openssl/pkcs8.h> #include <openssl/rsa.h> #include "../internal.h" #include "../test/test_util.h" // kExampleRSAKeyDER is an RSA private key in ASN.1, DER format. Of course, you // should never use this key anywhere but in an example. static const uint8_t kExampleRSAKeyDER[] = …; static const uint8_t kExampleDSAKeyDER[] = …; static const uint8_t kMsg[] = …; static const uint8_t kSignature[] = …; // kExampleRSAKeyPKCS8 is kExampleRSAKeyDER encoded in a PKCS #8 // PrivateKeyInfo. static const uint8_t kExampleRSAKeyPKCS8[] = …; // kExampleECKeyDER is a sample EC private key encoded as an ECPrivateKey // structure. static const uint8_t kExampleECKeyDER[] = …; // kExampleECKeyPKCS8 is a sample EC private key encoded as a PKCS#8 // PrivateKeyInfo. static const uint8_t kExampleECKeyPKCS8[] = …; // kExampleECKeySpecifiedCurvePKCS8 is a sample EC private key encoded as a // PKCS#8 PrivateKeyInfo with P-256's parameters spelled out rather than using // the curve OID. static const uint8_t kExampleECKeySpecifiedCurvePKCS8[] = …; // kExampleBadECKeyDER is a sample EC private key encoded as an ECPrivateKey // structure. The private key is equal to the order and will fail to import. static const uint8_t kExampleBadECKeyDER[] = …; // kExampleBadECKeyDER2 is a sample EC private key encoded as an ECPrivateKey // structure, but with the curve OID swapped out for 1.1.1.1.1.1.1.1.1. It is // then concatenated with an ECPrivateKey wrapped in a PrivateKeyInfo, // optional public key omitted, and with the private key chopped off. static const uint8_t kExampleBadECKeyDER2[] = …; // kInvalidPrivateKey is an invalid private key. See // https://rt.openssl.org/Ticket/Display.html?id=4131. static const uint8_t kInvalidPrivateKey[] = …; static bssl::UniquePtr<EVP_PKEY> LoadExampleRSAKey() { … } TEST(EVPExtraTest, DigestSignInit) { … } TEST(EVPExtraTest, DigestVerifyInit) { … } TEST(EVPExtraTest, VerifyRecover) { … } static void TestValidPrivateKey(const uint8_t *input, size_t input_len, int expected_id) { … } TEST(EVPExtraTest, d2i_AutoPrivateKey) { … } static bssl::UniquePtr<EVP_PKEY> ParsePrivateKey(int type, const uint8_t *in, size_t len) { … } static std::string PrintToString(const EVP_PKEY *pkey, int indent, int (*print_func)(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx)) { … } TEST(EVPExtraTest, Print) { … } // Tests loading a bad key in PKCS8 format. TEST(EVPExtraTest, BadECKey) { … } // Tests |EVP_marshal_public_key| on an empty key. TEST(EVPExtraTest, MarshalEmptyPublicKey) { … } TEST(EVPExtraTest, d2i_PrivateKey) { … } TEST(EVPExtraTest, Ed25519) { … } static void ExpectECGroupOnly(const EVP_PKEY *pkey, int nid) { … } static void ExpectECGroupAndKey(const EVP_PKEY *pkey, int nid) { … } TEST(EVPExtraTest, ECKeygen) { … } TEST(EVPExtraTest, DHKeygen) { … } // Test that |EVP_PKEY_keygen| works for Ed25519. TEST(EVPExtraTest, Ed25519Keygen) { … } // Test that OpenSSL's legacy TLS-specific APIs in EVP work correctly. When we // target OpenSSL 3.0, these should be renamed to // |EVP_PKEY_get1_encoded_public_key|. TEST(EVPExtraTest, TLSEncodedPoint) { … } TEST(EVPExtraTest, Parameters) { … } TEST(EVPExtraTest, RawKeyUnsupported) { … }