This reverts commit 09feb0f3d9
.
(In order to make WebRTC happy this also needs to be reverted.)
kris/onging/CECPQ3_patch15
@@ -21,8 +21,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
// kTag128 is an ASN.1 structure with a universal tag with number 128. | |||
static const uint8_t kTag128[] = { | |||
0x1f, 0x81, 0x00, 0x01, 0x00, | |||
@@ -71,12 +69,10 @@ static bool TestLargeTags() { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main() { | |||
CRYPTO_library_init(); | |||
if (!bssl::TestLargeTags()) { | |||
if (!TestLargeTags()) { | |||
return 1; | |||
} | |||
@@ -43,8 +43,6 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
#if !defined(OPENSSL_WINDOWS) | |||
static int closesocket(int sock) { | |||
return close(sock); | |||
@@ -341,7 +339,7 @@ static bool ReadASN1(bool should_succeed, const uint8_t *data, size_t data_len, | |||
if (!ok) { | |||
out = nullptr; | |||
} | |||
ScopedBytes out_storage(out); | |||
ScopedOpenSSLBytes out_storage(out); | |||
if (should_succeed != (ok == 1)) { | |||
return false; | |||
@@ -371,7 +369,7 @@ static bool TestASN1() { | |||
static const size_t kLargePayloadLen = 8000; | |||
static const uint8_t kLargePrefix[] = {0x30, 0x82, kLargePayloadLen >> 8, | |||
kLargePayloadLen & 0xff}; | |||
ScopedBytes large(reinterpret_cast<uint8_t *>( | |||
ScopedOpenSSLBytes large(reinterpret_cast<uint8_t *>( | |||
OPENSSL_malloc(sizeof(kLargePrefix) + kLargePayloadLen))); | |||
if (!large) { | |||
return false; | |||
@@ -412,8 +410,6 @@ static bool TestASN1() { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(void) { | |||
CRYPTO_library_init(); | |||
@@ -432,10 +428,10 @@ int main(void) { | |||
} | |||
#endif | |||
if (!bssl::TestSocketConnect() || | |||
!bssl::TestPrintf() || | |||
!bssl::TestZeroCopyBioPairs() || | |||
!bssl::TestASN1()) { | |||
if (!TestSocketConnect() || | |||
!TestPrintf() || | |||
!TestZeroCopyBioPairs() || | |||
!TestASN1()) { | |||
return 1; | |||
} | |||
@@ -90,8 +90,6 @@ | |||
#include "../crypto/test/test_util.h" | |||
namespace bssl { | |||
static int HexToBIGNUM(ScopedBIGNUM *out, const char *in) { | |||
BIGNUM *raw = NULL; | |||
int ret = BN_hex2bn(&raw, in); | |||
@@ -134,8 +132,8 @@ static bool ExpectBIGNUMsEqual(FileTest *t, const char *operation, | |||
return true; | |||
} | |||
ScopedString expected_str(BN_bn2hex(expected)); | |||
ScopedString actual_str(BN_bn2hex(actual)); | |||
ScopedOpenSSLString expected_str(BN_bn2hex(expected)); | |||
ScopedOpenSSLString actual_str(BN_bn2hex(actual)); | |||
if (!expected_str || !actual_str) { | |||
return false; | |||
} | |||
@@ -999,7 +997,7 @@ static bool TestASN1() { | |||
CBB_cleanup(&cbb); | |||
return false; | |||
} | |||
ScopedBytes delete_der(der); | |||
ScopedOpenSSLBytes delete_der(der); | |||
if (der_len != test.der_len || | |||
memcmp(der, reinterpret_cast<const uint8_t*>(test.der), der_len) != 0) { | |||
fprintf(stderr, "Bad serialization.\n"); | |||
@@ -1265,8 +1263,6 @@ static bool TestSmallPrime(BN_CTX *ctx) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char *argv[]) { | |||
CRYPTO_library_init(); | |||
@@ -1275,24 +1271,24 @@ int main(int argc, char *argv[]) { | |||
return 1; | |||
} | |||
bssl::ScopedBN_CTX ctx(BN_CTX_new()); | |||
ScopedBN_CTX ctx(BN_CTX_new()); | |||
if (!ctx) { | |||
return 1; | |||
} | |||
if (!bssl::TestBN2BinPadded(ctx.get()) || | |||
!bssl::TestDec2BN(ctx.get()) || | |||
!bssl::TestHex2BN(ctx.get()) || | |||
!bssl::TestASC2BN(ctx.get()) || | |||
!bssl::TestMPI() || | |||
!bssl::TestRand() || | |||
!bssl::TestASN1() || | |||
!bssl::TestNegativeZero(ctx.get()) || | |||
!bssl::TestBadModulus(ctx.get()) || | |||
!bssl::TestExpModZero() || | |||
!bssl::TestSmallPrime(ctx.get())) { | |||
if (!TestBN2BinPadded(ctx.get()) || | |||
!TestDec2BN(ctx.get()) || | |||
!TestHex2BN(ctx.get()) || | |||
!TestASC2BN(ctx.get()) || | |||
!TestMPI() || | |||
!TestRand() || | |||
!TestASN1() || | |||
!TestNegativeZero(ctx.get()) || | |||
!TestBadModulus(ctx.get()) || | |||
!TestExpModZero() || | |||
!TestSmallPrime(ctx.get())) { | |||
return 1; | |||
} | |||
return bssl::FileTestMain(bssl::RunTest, ctx.get(), argv[1]); | |||
return FileTestMain(RunTest, ctx.get(), argv[1]); | |||
} |
@@ -29,8 +29,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
static bool TestSkip() { | |||
static const uint8_t kData[] = {1, 2, 3}; | |||
CBS data; | |||
@@ -294,7 +292,7 @@ static bool TestCBBBasic() { | |||
return false; | |||
} | |||
ScopedBytes scoper(buf); | |||
ScopedOpenSSLBytes scoper(buf); | |||
return buf_len == sizeof(kExpected) && memcmp(buf, kExpected, buf_len) == 0; | |||
} | |||
@@ -339,7 +337,7 @@ static bool TestCBBFinishChild() { | |||
CBB_cleanup(&cbb); | |||
return false; | |||
} | |||
ScopedBytes scoper(out_buf); | |||
ScopedOpenSSLBytes scoper(out_buf); | |||
return out_size == 1 && out_buf[0] == 0; | |||
} | |||
@@ -372,7 +370,7 @@ static bool TestCBBPrefixed() { | |||
return false; | |||
} | |||
ScopedBytes scoper(buf); | |||
ScopedOpenSSLBytes scoper(buf); | |||
return buf_len == sizeof(kExpected) && memcmp(buf, kExpected, buf_len) == 0; | |||
} | |||
@@ -412,7 +410,7 @@ static bool TestCBBDiscardChild() { | |||
if (!CBB_finish(cbb.get(), &buf, &buf_len)) { | |||
return false; | |||
} | |||
ScopedBytes scoper(buf); | |||
ScopedOpenSSLBytes scoper(buf); | |||
static const uint8_t kExpected[] = { | |||
0xaa, | |||
@@ -458,7 +456,7 @@ static bool TestCBBMisuse() { | |||
CBB_cleanup(&cbb); | |||
return false; | |||
} | |||
ScopedBytes scoper(buf); | |||
ScopedOpenSSLBytes scoper(buf); | |||
if (buf_len != 3 || | |||
memcmp(buf, "\x01\x01\x02", 3) != 0) { | |||
@@ -482,7 +480,7 @@ static bool TestCBBASN1() { | |||
CBB_cleanup(&cbb); | |||
return false; | |||
} | |||
ScopedBytes scoper(buf); | |||
ScopedOpenSSLBytes scoper(buf); | |||
if (buf_len != sizeof(kExpected) || memcmp(buf, kExpected, buf_len) != 0) { | |||
return false; | |||
@@ -557,7 +555,7 @@ static bool DoBerConvert(const char *name, | |||
fprintf(stderr, "%s: CBS_asn1_ber_to_der failed.\n", name); | |||
return false; | |||
} | |||
ScopedBytes scoper(out); | |||
ScopedOpenSSLBytes scoper(out); | |||
if (out == NULL) { | |||
if (ber_len != der_len || | |||
@@ -670,7 +668,7 @@ static bool TestImplicitString() { | |||
int ok = CBS_get_asn1_implicit_string(&in, &out, &storage, | |||
CBS_ASN1_CONTEXT_SPECIFIC | 0, | |||
CBS_ASN1_OCTETSTRING); | |||
ScopedBytes scoper(storage); | |||
ScopedOpenSSLBytes scoper(storage); | |||
if (static_cast<bool>(ok) != test.ok) { | |||
fprintf(stderr, "CBS_get_asn1_implicit_string unexpectedly %s\n", | |||
@@ -749,7 +747,7 @@ static bool TestASN1Uint64() { | |||
CBB_cleanup(&cbb); | |||
return false; | |||
} | |||
ScopedBytes scoper(out); | |||
ScopedOpenSSLBytes scoper(out); | |||
if (len != test->encoding_len || memcmp(out, test->encoding, len) != 0) { | |||
return false; | |||
} | |||
@@ -799,29 +797,27 @@ static bool TestCBBReserve() { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(void) { | |||
CRYPTO_library_init(); | |||
if (!bssl::TestSkip() || | |||
!bssl::TestGetUint() || | |||
!bssl::TestGetPrefixed() || | |||
!bssl::TestGetPrefixedBad() || | |||
!bssl::TestGetASN1() || | |||
!bssl::TestCBBBasic() || | |||
!bssl::TestCBBFixed() || | |||
!bssl::TestCBBFinishChild() || | |||
!bssl::TestCBBMisuse() || | |||
!bssl::TestCBBPrefixed() || | |||
!bssl::TestCBBDiscardChild() || | |||
!bssl::TestCBBASN1() || | |||
!bssl::TestBerConvert() || | |||
!bssl::TestImplicitString() || | |||
!bssl::TestASN1Uint64() || | |||
!bssl::TestGetOptionalASN1Bool() || | |||
!bssl::TestZero() || | |||
!bssl::TestCBBReserve()) { | |||
if (!TestSkip() || | |||
!TestGetUint() || | |||
!TestGetPrefixed() || | |||
!TestGetPrefixedBad() || | |||
!TestGetASN1() || | |||
!TestCBBBasic() || | |||
!TestCBBFixed() || | |||
!TestCBBFinishChild() || | |||
!TestCBBMisuse() || | |||
!TestCBBPrefixed() || | |||
!TestCBBDiscardChild() || | |||
!TestCBBASN1() || | |||
!TestBerConvert() || | |||
!TestImplicitString() || | |||
!TestASN1Uint64() || | |||
!TestGetOptionalASN1Bool() || | |||
!TestZero() || | |||
!TestCBBReserve()) { | |||
return 1; | |||
} | |||
@@ -25,8 +25,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
// This program tests an AEAD against a series of test vectors from a file, | |||
// using the FileTest format. As an example, here's a valid test case: | |||
// | |||
@@ -329,7 +327,7 @@ static const struct KnownAEAD kAEADs[] = { | |||
{ "", NULL, false }, | |||
}; | |||
static int Main(int argc, char **argv) { | |||
int main(int argc, char **argv) { | |||
CRYPTO_library_init(); | |||
if (argc != 3) { | |||
@@ -362,9 +360,3 @@ static int Main(int argc, char **argv) { | |||
return FileTestMain(TestAEAD, const_cast<EVP_AEAD*>(aead), argv[2]); | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
return bssl::Main(argc, argv); | |||
} |
@@ -65,8 +65,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
static const EVP_CIPHER *GetCipher(const std::string &name) { | |||
if (name == "DES-CBC") { | |||
return EVP_des_cbc(); | |||
@@ -286,8 +284,6 @@ static bool TestCipher(FileTest *t, void *arg) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
CRYPTO_library_init(); | |||
@@ -296,5 +292,5 @@ int main(int argc, char **argv) { | |||
return 1; | |||
} | |||
return bssl::FileTestMain(bssl::TestCipher, nullptr, argv[1]); | |||
return FileTestMain(TestCipher, nullptr, argv[1]); | |||
} |
@@ -22,8 +22,6 @@ | |||
#include "../test/test_util.h" | |||
namespace bssl { | |||
static void dump(const uint8_t *got, const uint8_t *want, size_t len) { | |||
hexdump(stderr, "got :", got, len); | |||
hexdump(stderr, "want:", want, len); | |||
@@ -143,10 +141,8 @@ static int rfc_4493_test_vectors(void) { | |||
return 1; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
if (!bssl::rfc_4493_test_vectors()) { | |||
if (!rfc_4493_test_vectors()) { | |||
return 1; | |||
} | |||
@@ -20,8 +20,6 @@ | |||
#include "../test/file_test.h" | |||
namespace bssl { | |||
static bool TestSignature(FileTest *t, void *arg) { | |||
std::vector<uint8_t> private_key, public_key, message, expected_signature; | |||
if (!t->GetBytes(&private_key, "PRIV") || | |||
@@ -55,13 +53,11 @@ static bool TestSignature(FileTest *t, void *arg) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
if (argc != 2) { | |||
fprintf(stderr, "%s <test input.txt>\n", argv[0]); | |||
return 1; | |||
} | |||
return bssl::FileTestMain(bssl::TestSignature, nullptr, argv[1]); | |||
return FileTestMain(TestSignature, nullptr, argv[1]); | |||
} |
@@ -22,8 +22,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
struct SPAKE2Run { | |||
bool Run() { | |||
ScopedSPAKE2_CTX alice(SPAKE2_CTX_new( | |||
@@ -156,15 +154,13 @@ static bool TestCorruptMessages() { | |||
return true; | |||
} | |||
} // namespace bssl | |||
/* TODO(agl): add tests with fixed vectors once SPAKE2 is nailed down. */ | |||
int main(int argc, char **argv) { | |||
if (!bssl::TestSPAKE2() || | |||
!bssl::TestWrongPassword() || | |||
!bssl::TestWrongNames() || | |||
!bssl::TestCorruptMessages()) { | |||
if (!TestSPAKE2() || | |||
!TestWrongPassword() || | |||
!TestWrongNames() || | |||
!TestCorruptMessages()) { | |||
return 1; | |||
} | |||
@@ -71,7 +71,25 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
static bool RunBasicTests(); | |||
static bool RunRFC5114Tests(); | |||
static bool TestBadY(); | |||
static bool TestASN1(); | |||
int main(int argc, char *argv[]) { | |||
CRYPTO_library_init(); | |||
if (!RunBasicTests() || | |||
!RunRFC5114Tests() || | |||
!TestBadY() || | |||
!TestASN1()) { | |||
ERR_print_errors_fp(stderr); | |||
return 1; | |||
} | |||
printf("PASS\n"); | |||
return 0; | |||
} | |||
static int GenerateCallback(int p, int n, BN_GENCB *arg) { | |||
char c = '*'; | |||
@@ -557,7 +575,7 @@ static bool TestASN1() { | |||
!CBB_finish(cbb.get(), &der, &der_len)) { | |||
return false; | |||
} | |||
ScopedBytes free_der(der); | |||
ScopedOpenSSLBytes free_der(der); | |||
if (der_len != sizeof(kParams) || memcmp(der, kParams, der_len) != 0) { | |||
return false; | |||
} | |||
@@ -599,27 +617,10 @@ static bool TestASN1() { | |||
!CBB_finish(cbb.get(), &der, &der_len)) { | |||
return false; | |||
} | |||
ScopedBytes free_der2(der); | |||
ScopedOpenSSLBytes free_der2(der); | |||
if (der_len != sizeof(kParamsDSA) || memcmp(der, kParamsDSA, der_len) != 0) { | |||
return false; | |||
} | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char *argv[]) { | |||
CRYPTO_library_init(); | |||
if (!bssl::RunBasicTests() || | |||
!bssl::RunRFC5114Tests() || | |||
!bssl::TestBadY() || | |||
!bssl::TestASN1()) { | |||
ERR_print_errors_fp(stderr); | |||
return 1; | |||
} | |||
printf("PASS\n"); | |||
return 0; | |||
} |
@@ -26,8 +26,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
struct MD { | |||
// name is the name of the digest. | |||
const char* name; | |||
@@ -245,7 +243,7 @@ static int TestGetters() { | |||
return true; | |||
} | |||
static int Main() { | |||
int main(void) { | |||
CRYPTO_library_init(); | |||
for (size_t i = 0; i < sizeof(kTestVectors) / sizeof(kTestVectors[0]); i++) { | |||
@@ -262,9 +260,3 @@ static int Main() { | |||
printf("PASS\n"); | |||
return 0; | |||
} | |||
} // namespace bssl | |||
int main() { | |||
return bssl::Main(); | |||
} |
@@ -26,8 +26,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
// kECKeyWithoutPublic is an ECPrivateKey with the optional publicKey field | |||
// omitted. | |||
static const uint8_t kECKeyWithoutPublic[] = { | |||
@@ -163,8 +161,8 @@ static bool Testd2i_ECPrivateKey() { | |||
fprintf(stderr, "Failed to get public key in affine coordinates.\n"); | |||
return false; | |||
} | |||
ScopedString x_hex(BN_bn2hex(x.get())); | |||
ScopedString y_hex(BN_bn2hex(y.get())); | |||
ScopedOpenSSLString x_hex(BN_bn2hex(x.get())); | |||
ScopedOpenSSLString y_hex(BN_bn2hex(y.get())); | |||
if (!x_hex || !y_hex) { | |||
return false; | |||
} | |||
@@ -473,17 +471,15 @@ static bool ForEachCurve(bool (*test_func)(int nid)) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(void) { | |||
CRYPTO_library_init(); | |||
if (!bssl::Testd2i_ECPrivateKey() || | |||
!bssl::TestZeroPadding() || | |||
!bssl::TestSpecifiedCurve() || | |||
!bssl::ForEachCurve(bssl::TestSetAffine) || | |||
!bssl::ForEachCurve(bssl::TestAddingEqualPoints) || | |||
!bssl::TestArbitraryCurve()) { | |||
if (!Testd2i_ECPrivateKey() || | |||
!TestZeroPadding() || | |||
!TestSpecifiedCurve() || | |||
!ForEachCurve(TestSetAffine) || | |||
!ForEachCurve(TestAddingEqualPoints) || | |||
!TestArbitraryCurve()) { | |||
fprintf(stderr, "failed\n"); | |||
return 1; | |||
} | |||
@@ -64,9 +64,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
enum Api { | |||
kEncodedApi, | |||
kRawApi, | |||
@@ -85,7 +82,7 @@ static bool VerifyECDSASig(Api api, const uint8_t *digest, | |||
if (!ECDSA_SIG_to_bytes(&der, &der_len, ecdsa_sig)) { | |||
return false; | |||
} | |||
ScopedBytes delete_der(der); | |||
ScopedOpenSSLBytes delete_der(der); | |||
actual_result = ECDSA_verify(0, digest, digest_len, der, der_len, eckey); | |||
break; | |||
} | |||
@@ -331,7 +328,7 @@ static bool TestECDSA_SIG_max_len(size_t order_len) { | |||
if (!ECDSA_SIG_to_bytes(&der, &der_len, sig.get())) { | |||
return false; | |||
} | |||
ScopedBytes delete_der(der); | |||
ScopedOpenSSLBytes delete_der(der); | |||
size_t max_len = ECDSA_SIG_max_len(order_len); | |||
if (max_len != der_len) { | |||
@@ -343,8 +340,6 @@ static bool TestECDSA_SIG_max_len(size_t order_len) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
static size_t BitsToBytes(size_t bits) { | |||
return (bits / 8) + (7 + (bits % 8)) / 8; | |||
} | |||
@@ -352,12 +347,12 @@ static size_t BitsToBytes(size_t bits) { | |||
int main(void) { | |||
CRYPTO_library_init(); | |||
if (!bssl::TestBuiltin(stdout) || | |||
!bssl::TestECDSA_SIG_max_len(BitsToBytes(224)) || | |||
!bssl::TestECDSA_SIG_max_len(BitsToBytes(256)) || | |||
!bssl::TestECDSA_SIG_max_len(BitsToBytes(384)) || | |||
!bssl::TestECDSA_SIG_max_len(BitsToBytes(521)) || | |||
!bssl::TestECDSA_SIG_max_len(BitsToBytes(10000))) { | |||
if (!TestBuiltin(stdout) || | |||
!TestECDSA_SIG_max_len(BitsToBytes(224)) || | |||
!TestECDSA_SIG_max_len(BitsToBytes(256)) || | |||
!TestECDSA_SIG_max_len(BitsToBytes(384)) || | |||
!TestECDSA_SIG_max_len(BitsToBytes(521)) || | |||
!TestECDSA_SIG_max_len(BitsToBytes(10000))) { | |||
printf("\nECDSA test failed\n"); | |||
ERR_print_errors_fp(stdout); | |||
return 1; | |||
@@ -30,8 +30,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
// 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[] = { | |||
@@ -673,7 +671,7 @@ static bool Testd2i_PrivateKey(void) { | |||
return true; | |||
} | |||
static int Main() { | |||
int main(void) { | |||
CRYPTO_library_init(); | |||
if (!TestEVP_DigestSignInit()) { | |||
@@ -721,9 +719,3 @@ static int Main() { | |||
printf("PASS\n"); | |||
return 0; | |||
} | |||
} // namespace bssl | |||
int main() { | |||
return bssl::Main(); | |||
} |
@@ -77,8 +77,6 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
// evp_test dispatches between multiple test types. PrivateKey tests take a key | |||
// name parameter and single block, decode it as a PEM private key, and save it | |||
// under that key name. Decrypt, Sign, and Verify tests take a previously | |||
@@ -151,7 +149,7 @@ static bool ImportKey(FileTest *t, KeyMap *key_map, | |||
!CBB_finish(cbb.get(), &der, &der_len)) { | |||
return false; | |||
} | |||
ScopedBytes free_der(der); | |||
ScopedOpenSSLBytes free_der(der); | |||
std::vector<uint8_t> output = input; | |||
if (t->HasAttribute("Output") && | |||
@@ -255,8 +253,6 @@ static bool TestEVP(FileTest *t, void *arg) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
CRYPTO_library_init(); | |||
if (argc != 2) { | |||
@@ -264,6 +260,6 @@ int main(int argc, char **argv) { | |||
return 1; | |||
} | |||
bssl::KeyMap map; | |||
return bssl::FileTestMain(bssl::TestEVP, &map, argv[1]); | |||
KeyMap map; | |||
return FileTestMain(TestEVP, &map, argv[1]); | |||
} |
@@ -68,8 +68,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
static const EVP_MD *GetDigest(const std::string &name) { | |||
if (name == "MD5") { | |||
return EVP_md5(); | |||
@@ -154,8 +152,6 @@ static bool TestHMAC(FileTest *t, void *arg) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char *argv[]) { | |||
CRYPTO_library_init(); | |||
@@ -164,5 +160,5 @@ int main(int argc, char *argv[]) { | |||
return 1; | |||
} | |||
return bssl::FileTestMain(bssl::TestHMAC, nullptr, argv[1]); | |||
return FileTestMain(TestHMAC, nullptr, argv[1]); | |||
} |
@@ -25,8 +25,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
static const unsigned kNumTests = 1000; | |||
static bool TestNoise(void) { | |||
@@ -148,11 +146,9 @@ static bool TestKeys(void) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(void) { | |||
if (!bssl::TestKeys() || | |||
!bssl::TestNoise()) { | |||
if (!TestKeys() || | |||
!TestNoise()) { | |||
return 1; | |||
} | |||
printf("PASS\n"); | |||
@@ -23,8 +23,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
// Set to 10 for quick execution. Tested up to 1,000,000. | |||
static const int kNumTests = 10; | |||
@@ -130,13 +128,11 @@ static bool TestInvalidAcceptMsg(void) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(void) { | |||
for (int i = 0; i < bssl::kNumTests; i++) { | |||
if (!bssl::TestKeys() || | |||
!bssl::TestInvalidSK() || | |||
!bssl::TestInvalidAcceptMsg()) { | |||
for (int i = 0; i < kNumTests; i++) { | |||
if (!TestKeys() || | |||
!TestInvalidSK() || | |||
!TestInvalidAcceptMsg()) { | |||
return 1; | |||
} | |||
} | |||
@@ -24,8 +24,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
static bool TestNewhope(FileTest *t, void *arg) { | |||
ScopedNEWHOPE_POLY a(NEWHOPE_POLY_new()); | |||
ScopedNEWHOPE_POLY s(NEWHOPE_POLY_new()), sp(NEWHOPE_POLY_new()); | |||
@@ -112,8 +110,6 @@ static bool TestNewhope(FileTest *t, void *arg) { | |||
} | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
CRYPTO_library_init(); | |||
@@ -122,5 +118,5 @@ int main(int argc, char **argv) { | |||
return 1; | |||
} | |||
return bssl::FileTestMain(bssl::TestNewhope, nullptr, argv[1]); | |||
return FileTestMain(TestNewhope, nullptr, argv[1]); | |||
} |
@@ -681,8 +681,6 @@ static const uint8_t kWindows[] = { | |||
0xfe, 0x3a, 0x66, 0x47, 0x40, 0x49, 0x02, 0x02, 0x07, 0xd0, | |||
}; | |||
namespace bssl { | |||
static const char kPassword[] = "foo"; | |||
static bool Test(const char *name, const uint8_t *der, size_t der_len) { | |||
@@ -757,15 +755,13 @@ static bool TestCompat(const uint8_t *der, size_t der_len) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
CRYPTO_library_init(); | |||
if (!bssl::Test("OpenSSL", kOpenSSL, sizeof(kOpenSSL)) || | |||
!bssl::Test("NSS", kNSS, sizeof(kNSS)) || | |||
!bssl::Test("Windows", kWindows, sizeof(kWindows)) || | |||
!bssl::TestCompat(kWindows, sizeof(kWindows))) { | |||
if (!Test("OpenSSL", kOpenSSL, sizeof(kOpenSSL)) || | |||
!Test("NSS", kNSS, sizeof(kNSS)) || | |||
!Test("Windows", kWindows, sizeof(kWindows)) || | |||
!TestCompat(kWindows, sizeof(kWindows))) { | |||
return 1; | |||
} | |||
@@ -62,9 +62,7 @@ static const uint8_t kDER[] = { | |||
0xd6, 0x2d, | |||
}; | |||
namespace bssl { | |||
static bool Test(const uint8_t *der, size_t der_len) { | |||
static bool test(const uint8_t *der, size_t der_len) { | |||
const uint8_t *data = der; | |||
ScopedX509_SIG sig(d2i_X509_SIG(NULL, &data, der_len)); | |||
if (sig.get() == NULL || data != der + der_len) { | |||
@@ -83,10 +81,8 @@ static bool Test(const uint8_t *der, size_t der_len) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
if (!bssl::Test(kDER, sizeof(kDER))) { | |||
if (!test(kDER, sizeof(kDER))) { | |||
return 1; | |||
} | |||
@@ -24,8 +24,6 @@ | |||
#include "../test/file_test.h" | |||
namespace bssl { | |||
static bool TestSIMD(FileTest *t, unsigned excess, | |||
const std::vector<uint8_t> &key, | |||
const std::vector<uint8_t> &in, | |||
@@ -121,8 +119,6 @@ static bool TestPoly1305(FileTest *t, void *arg) { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
CRYPTO_library_init(); | |||
@@ -131,5 +127,5 @@ int main(int argc, char **argv) { | |||
return 1; | |||
} | |||
return bssl::FileTestMain(bssl::TestPoly1305, nullptr, argv[1]); | |||
return FileTestMain(TestPoly1305, nullptr, argv[1]); | |||
} |
@@ -523,8 +523,6 @@ static const uint8_t kExponent1RSAKey[] = { | |||
0xdd, 0x02, 0x01, 0x01, | |||
}; | |||
namespace bssl { | |||
static bool TestRSA(const uint8_t *der, size_t der_len, | |||
const uint8_t *oaep_ciphertext, | |||
size_t oaep_ciphertext_len) { | |||
@@ -857,7 +855,7 @@ static bool TestASN1() { | |||
if (!RSA_private_key_to_bytes(&der, &der_len, rsa.get())) { | |||
return false; | |||
} | |||
ScopedBytes delete_der(der); | |||
ScopedOpenSSLBytes delete_der(der); | |||
if (der_len != sizeof(kKey1) - 1 || memcmp(der, kKey1, der_len) != 0) { | |||
return false; | |||
} | |||
@@ -880,7 +878,7 @@ static bool TestASN1() { | |||
if (!RSA_public_key_to_bytes(&der2, &der2_len, rsa.get())) { | |||
return false; | |||
} | |||
ScopedBytes delete_der2(der2); | |||
ScopedOpenSSLBytes delete_der2(der2); | |||
if (der_len != der2_len || memcmp(der, der2, der_len) != 0) { | |||
return false; | |||
} | |||
@@ -924,32 +922,30 @@ static bool TestBadExponent() { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char *argv[]) { | |||
CRYPTO_library_init(); | |||
if (!bssl::TestRSA(kKey1, sizeof(kKey1) - 1, kOAEPCiphertext1, | |||
sizeof(kOAEPCiphertext1) - 1) || | |||
!bssl::TestRSA(kKey2, sizeof(kKey2) - 1, kOAEPCiphertext2, | |||
sizeof(kOAEPCiphertext2) - 1) || | |||
!bssl::TestRSA(kKey3, sizeof(kKey3) - 1, kOAEPCiphertext3, | |||
sizeof(kOAEPCiphertext3) - 1) || | |||
!bssl::TestOnlyDGiven() || | |||
!bssl::TestRecoverCRTParams() || | |||
!bssl::TestBadKey() || | |||
!bssl::TestMultiPrimeKey(2, kTwoPrimeKey, sizeof(kTwoPrimeKey) - 1, | |||
kTwoPrimeEncryptedMessage, | |||
sizeof(kTwoPrimeEncryptedMessage)) || | |||
!bssl::TestMultiPrimeKey(3, kThreePrimeKey, sizeof(kThreePrimeKey) - 1, | |||
kThreePrimeEncryptedMessage, | |||
sizeof(kThreePrimeEncryptedMessage)) || | |||
!bssl::TestMultiPrimeKey(6, kSixPrimeKey, sizeof(kSixPrimeKey) - 1, | |||
kSixPrimeEncryptedMessage, | |||
sizeof(kSixPrimeEncryptedMessage)) || | |||
!bssl::TestMultiPrimeKeygen() || | |||
!bssl::TestASN1() || | |||
!bssl::TestBadExponent()) { | |||
if (!TestRSA(kKey1, sizeof(kKey1) - 1, kOAEPCiphertext1, | |||
sizeof(kOAEPCiphertext1) - 1) || | |||
!TestRSA(kKey2, sizeof(kKey2) - 1, kOAEPCiphertext2, | |||
sizeof(kOAEPCiphertext2) - 1) || | |||
!TestRSA(kKey3, sizeof(kKey3) - 1, kOAEPCiphertext3, | |||
sizeof(kOAEPCiphertext3) - 1) || | |||
!TestOnlyDGiven() || | |||
!TestRecoverCRTParams() || | |||
!TestBadKey() || | |||
!TestMultiPrimeKey(2, kTwoPrimeKey, sizeof(kTwoPrimeKey) - 1, | |||
kTwoPrimeEncryptedMessage, | |||
sizeof(kTwoPrimeEncryptedMessage)) || | |||
!TestMultiPrimeKey(3, kThreePrimeKey, sizeof(kThreePrimeKey) - 1, | |||
kThreePrimeEncryptedMessage, | |||
sizeof(kThreePrimeEncryptedMessage)) || | |||
!TestMultiPrimeKey(6, kSixPrimeKey, sizeof(kSixPrimeKey) - 1, | |||
kSixPrimeEncryptedMessage, | |||
sizeof(kSixPrimeEncryptedMessage)) || | |||
!TestMultiPrimeKeygen() || | |||
!TestASN1() || | |||
!TestBadExponent()) { | |||
return 1; | |||
} | |||
@@ -25,8 +25,6 @@ | |||
#include <openssl/err.h> | |||
namespace bssl { | |||
FileTest::FileTest(const char *path) { | |||
file_ = fopen(path, "r"); | |||
if (file_ == nullptr) { | |||
@@ -302,5 +300,3 @@ int FileTestMain(bool (*run_test)(FileTest *t, void *arg), void *arg, | |||
printf("PASS\n"); | |||
return 0; | |||
} | |||
} // namespace bssl |
@@ -30,9 +30,6 @@ OPENSSL_MSVC_PRAGMA(warning(disable: 4702)) | |||
OPENSSL_MSVC_PRAGMA(warning(pop)) | |||
namespace bssl { | |||
// File-based test framework. | |||
// | |||
// This module provides a file-based test framework. The file format is based on | |||
@@ -156,7 +153,5 @@ class FileTest { | |||
int FileTestMain(bool (*run_test)(FileTest *t, void *arg), void *arg, | |||
const char *path); | |||
} // namespace bssl | |||
#endif /* OPENSSL_HEADER_CRYPTO_TEST_FILE_TEST_H */ |
@@ -15,8 +15,6 @@ | |||
#ifndef OPENSSL_HEADER_CRYPTO_TEST_SCOPED_TYPES_H | |||
#define OPENSSL_HEADER_CRYPTO_TEST_SCOPED_TYPES_H | |||
#include <openssl/base.h> | |||
#include <stdint.h> | |||
#include <stdio.h> | |||
@@ -42,7 +40,28 @@ | |||
#include <openssl/stack.h> | |||
#include <openssl/x509.h> | |||
namespace bssl { | |||
template<typename T, void (*func)(T*)> | |||
struct OpenSSLDeleter { | |||
void operator()(T *obj) { | |||
func(obj); | |||
} | |||
}; | |||
template<typename StackType, typename T, void (*func)(T*)> | |||
struct OpenSSLStackDeleter { | |||
void operator()(StackType *obj) { | |||
sk_pop_free(reinterpret_cast<_STACK*>(obj), | |||
reinterpret_cast<void (*)(void *)>(func)); | |||
} | |||
}; | |||
template<typename T> | |||
struct OpenSSLFree { | |||
void operator()(T *buf) { | |||
OPENSSL_free(buf); | |||
} | |||
}; | |||
struct FileCloser { | |||
void operator()(FILE *file) { | |||
@@ -50,48 +69,77 @@ struct FileCloser { | |||
} | |||
}; | |||
using ScopedASN1_TYPE = ScopedType<ASN1_TYPE, ASN1_TYPE_free>; | |||
using ScopedBIO = ScopedType<BIO, BIO_vfree>; | |||
using ScopedBIGNUM = ScopedType<BIGNUM, BN_free>; | |||
using ScopedBN_CTX = ScopedType<BN_CTX, BN_CTX_free>; | |||
using ScopedBN_MONT_CTX = ScopedType<BN_MONT_CTX, BN_MONT_CTX_free>; | |||
using ScopedCMAC_CTX = ScopedType<CMAC_CTX, CMAC_CTX_free>; | |||
using ScopedDH = ScopedType<DH, DH_free>; | |||
using ScopedECDSA_SIG = ScopedType<ECDSA_SIG, ECDSA_SIG_free>; | |||
using ScopedEC_GROUP = ScopedType<EC_GROUP, EC_GROUP_free>; | |||
using ScopedEC_KEY = ScopedType<EC_KEY, EC_KEY_free>; | |||
using ScopedEC_POINT = ScopedType<EC_POINT, EC_POINT_free>; | |||
using ScopedEVP_PKEY = ScopedType<EVP_PKEY, EVP_PKEY_free>; | |||
using ScopedEVP_PKEY_CTX = ScopedType<EVP_PKEY_CTX, EVP_PKEY_CTX_free>; | |||
using ScopedNEWHOPE_POLY = ScopedType<NEWHOPE_POLY, NEWHOPE_POLY_free>; | |||
using ScopedPKCS8_PRIV_KEY_INFO = | |||
ScopedType<PKCS8_PRIV_KEY_INFO, PKCS8_PRIV_KEY_INFO_free>; | |||
using ScopedPKCS12 = ScopedType<PKCS12, PKCS12_free>; | |||
using ScopedSPAKE2_CTX = ScopedType<SPAKE2_CTX, SPAKE2_CTX_free>; | |||
using ScopedRSA = ScopedType<RSA, RSA_free>; | |||
using ScopedX509 = ScopedType<X509, X509_free>; | |||
using ScopedX509_ALGOR = ScopedType<X509_ALGOR, X509_ALGOR_free>; | |||
using ScopedX509_SIG = ScopedType<X509_SIG, X509_SIG_free>; | |||
using ScopedX509_STORE_CTX = ScopedType<X509_STORE_CTX, X509_STORE_CTX_free>; | |||
using ScopedX509Stack = ScopedStack<STACK_OF(X509), X509, X509_free>; | |||
using ScopedCBB = ScopedContext<CBB, void, CBB_zero, CBB_cleanup>; | |||
using ScopedEVP_AEAD_CTX = | |||
ScopedContext<EVP_AEAD_CTX, void, EVP_AEAD_CTX_zero, EVP_AEAD_CTX_cleanup>; | |||
using ScopedEVP_CIPHER_CTX = | |||
ScopedContext<EVP_CIPHER_CTX, int, EVP_CIPHER_CTX_init, | |||
EVP_CIPHER_CTX_cleanup>; | |||
using ScopedEVP_MD_CTX = | |||
ScopedContext<EVP_MD_CTX, int, EVP_MD_CTX_init, EVP_MD_CTX_cleanup>; | |||
using ScopedHMAC_CTX = | |||
ScopedContext<HMAC_CTX, void, HMAC_CTX_init, HMAC_CTX_cleanup>; | |||
using ScopedBytes = std::unique_ptr<uint8_t, Free<uint8_t>>; | |||
using ScopedString = std::unique_ptr<char, Free<char>>; | |||
template<typename T, void (*func)(T*)> | |||
using ScopedOpenSSLType = std::unique_ptr<T, OpenSSLDeleter<T, func>>; | |||
using ScopedFILE = std::unique_ptr<FILE, FileCloser>; | |||
template<typename StackType, typename T, void (*func)(T*)> | |||
using ScopedOpenSSLStack = | |||
std::unique_ptr<StackType, OpenSSLStackDeleter<StackType, T, func>>; | |||
template<typename T, typename CleanupRet, void (*init_func)(T*), | |||
CleanupRet (*cleanup_func)(T*)> | |||
class ScopedOpenSSLContext { | |||
public: | |||
ScopedOpenSSLContext() { | |||
init_func(&ctx_); | |||
} | |||
~ScopedOpenSSLContext() { | |||
cleanup_func(&ctx_); | |||
} | |||
T *get() { return &ctx_; } | |||
const T *get() const { return &ctx_; } | |||
void Reset() { | |||
cleanup_func(&ctx_); | |||
init_func(&ctx_); | |||
} | |||
private: | |||
T ctx_; | |||
}; | |||
using ScopedASN1_TYPE = ScopedOpenSSLType<ASN1_TYPE, ASN1_TYPE_free>; | |||
using ScopedBIO = ScopedOpenSSLType<BIO, BIO_vfree>; | |||
using ScopedBIGNUM = ScopedOpenSSLType<BIGNUM, BN_free>; | |||
using ScopedBN_CTX = ScopedOpenSSLType<BN_CTX, BN_CTX_free>; | |||
using ScopedBN_MONT_CTX = ScopedOpenSSLType<BN_MONT_CTX, BN_MONT_CTX_free>; | |||
using ScopedCMAC_CTX = ScopedOpenSSLType<CMAC_CTX, CMAC_CTX_free>; | |||
using ScopedDH = ScopedOpenSSLType<DH, DH_free>; | |||
using ScopedECDSA_SIG = ScopedOpenSSLType<ECDSA_SIG, ECDSA_SIG_free>; | |||
using ScopedEC_GROUP = ScopedOpenSSLType<EC_GROUP, EC_GROUP_free>; | |||
using ScopedEC_KEY = ScopedOpenSSLType<EC_KEY, EC_KEY_free>; | |||
using ScopedEC_POINT = ScopedOpenSSLType<EC_POINT, EC_POINT_free>; | |||
using ScopedEVP_PKEY = ScopedOpenSSLType<EVP_PKEY, EVP_PKEY_free>; | |||
using ScopedEVP_PKEY_CTX = ScopedOpenSSLType<EVP_PKEY_CTX, EVP_PKEY_CTX_free>; | |||
using ScopedNEWHOPE_POLY = ScopedOpenSSLType<NEWHOPE_POLY, NEWHOPE_POLY_free>; | |||
using ScopedPKCS8_PRIV_KEY_INFO = ScopedOpenSSLType<PKCS8_PRIV_KEY_INFO, | |||
PKCS8_PRIV_KEY_INFO_free>; | |||
using ScopedPKCS12 = ScopedOpenSSLType<PKCS12, PKCS12_free>; | |||
using ScopedSPAKE2_CTX = ScopedOpenSSLType<SPAKE2_CTX, SPAKE2_CTX_free>; | |||
using ScopedRSA = ScopedOpenSSLType<RSA, RSA_free>; | |||
using ScopedX509 = ScopedOpenSSLType<X509, X509_free>; | |||
using ScopedX509_ALGOR = ScopedOpenSSLType<X509_ALGOR, X509_ALGOR_free>; | |||
using ScopedX509_SIG = ScopedOpenSSLType<X509_SIG, X509_SIG_free>; | |||
using ScopedX509_STORE_CTX = ScopedOpenSSLType<X509_STORE_CTX, X509_STORE_CTX_free>; | |||
using ScopedX509Stack = ScopedOpenSSLStack<STACK_OF(X509), X509, X509_free>; | |||
} // namespace bssl | |||
using ScopedCBB = ScopedOpenSSLContext<CBB, void, CBB_zero, CBB_cleanup>; | |||
using ScopedEVP_AEAD_CTX = ScopedOpenSSLContext<EVP_AEAD_CTX, void, | |||
EVP_AEAD_CTX_zero, | |||
EVP_AEAD_CTX_cleanup>; | |||
using ScopedEVP_CIPHER_CTX = ScopedOpenSSLContext<EVP_CIPHER_CTX, int, | |||
EVP_CIPHER_CTX_init, | |||
EVP_CIPHER_CTX_cleanup>; | |||
using ScopedEVP_MD_CTX = ScopedOpenSSLContext<EVP_MD_CTX, int, EVP_MD_CTX_init, | |||
EVP_MD_CTX_cleanup>; | |||
using ScopedHMAC_CTX = ScopedOpenSSLContext<HMAC_CTX, void, HMAC_CTX_init, | |||
HMAC_CTX_cleanup>; | |||
using ScopedOpenSSLBytes = std::unique_ptr<uint8_t, OpenSSLFree<uint8_t>>; | |||
using ScopedOpenSSLString = std::unique_ptr<char, OpenSSLFree<char>>; | |||
using ScopedFILE = std::unique_ptr<FILE, FileCloser>; | |||
#endif // OPENSSL_HEADER_CRYPTO_TEST_SCOPED_TYPES_H |
@@ -27,8 +27,6 @@ | |||
#include "../test/scoped_types.h" | |||
namespace bssl { | |||
static const char kCrossSigningRootPEM[] = | |||
"-----BEGIN CERTIFICATE-----\n" | |||
"MIICcTCCAdqgAwIBAgIIagJHiPvE0MowDQYJKoZIhvcNAQELBQAwPDEaMBgGA1UE\n" | |||
@@ -459,15 +457,13 @@ static bool TestSignCtx() { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
CRYPTO_library_init(); | |||
if (!bssl::TestVerify() || | |||
!bssl::TestPSS() || | |||
!bssl::TestBadPSSParameters() || | |||
!bssl::TestSignCtx()) { | |||
if (!TestVerify() || | |||
!TestPSS() || | |||
!TestBadPSSParameters() || | |||
!TestSignCtx()) { | |||
return 1; | |||
} | |||
@@ -67,8 +67,6 @@ | |||
#endif | |||
#if defined(__cplusplus) | |||
#include <memory> | |||
extern "C" { | |||
#endif | |||
@@ -292,44 +290,6 @@ typedef void *OPENSSL_BLOCK; | |||
#if defined(__cplusplus) | |||
} /* extern C */ | |||
namespace bssl { | |||
template<typename T, void (*func)(T*)> | |||
struct Deleter { | |||
void operator()(T *obj) { | |||
func(obj); | |||
} | |||
}; | |||
template<typename T, void (*func)(T*)> | |||
using ScopedType = std::unique_ptr<T, Deleter<T, func>>; | |||
template<typename T, typename CleanupRet, void (*init_func)(T*), | |||
CleanupRet (*cleanup_func)(T*)> | |||
class ScopedContext { | |||
public: | |||
ScopedContext() { | |||
init_func(&ctx_); | |||
} | |||
~ScopedContext() { | |||
cleanup_func(&ctx_); | |||
} | |||
T *get() { return &ctx_; } | |||
const T *get() const { return &ctx_; } | |||
void Reset() { | |||
cleanup_func(&ctx_); | |||
init_func(&ctx_); | |||
} | |||
private: | |||
T ctx_; | |||
}; | |||
} // namespace bssl | |||
#endif | |||
#endif /* OPENSSL_HEADER_BASE_H */ |
@@ -133,18 +133,6 @@ OPENSSL_EXPORT int BIO_vsnprintf(char *buf, size_t n, const char *format, | |||
#if defined(__cplusplus) | |||
} /* extern C */ | |||
namespace bssl { | |||
template<typename T> | |||
struct Free { | |||
void operator()(T *buf) { | |||
OPENSSL_free(buf); | |||
} | |||
}; | |||
} // namespace bssl | |||
#endif | |||
#endif /* OPENSSL_HEADER_MEM_H */ |
@@ -290,22 +290,6 @@ OPENSSL_EXPORT _STACK *sk_deep_copy(const _STACK *sk, | |||
#if defined(__cplusplus) | |||
} /* extern C */ | |||
namespace bssl { | |||
template<typename StackType, typename T, void (*func)(T*)> | |||
struct StackDeleter { | |||
void operator()(StackType *obj) { | |||
sk_pop_free(reinterpret_cast<_STACK*>(obj), | |||
reinterpret_cast<void (*)(void *)>(func)); | |||
} | |||
}; | |||
template <typename StackType, typename T, void (*func)(T *)> | |||
using ScopedStack = | |||
std::unique_ptr<StackType, StackDeleter<StackType, T, func>>; | |||
} // namespace bssl | |||
#endif | |||
#endif /* OPENSSL_HEADER_STACK_H */ |
@@ -33,190 +33,6 @@ | |||
#include "../crypto/test/test_util.h" | |||
// kOpenSSLSession is a serialized SSL_SESSION generated from openssl | |||
// s_client -sess_out. | |||
static const char kOpenSSLSession[] = | |||
"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" | |||
"i4gv7Y5oliyn"; | |||
// kCustomSession is a custom serialized SSL_SESSION generated by | |||
// filling in missing fields from |kOpenSSLSession|. This includes | |||
// providing |peer_sha256|, so |peer| is not serialized. | |||
static const char kCustomSession[] = | |||
"MIIBdgIBAQICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBLADBAEF"; | |||
// kBoringSSLSession is a serialized SSL_SESSION generated from bssl client. | |||
static const char kBoringSSLSession[] = | |||
"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" | |||
"lQI5kQsO/jgu0R0FmvZNPm8PBx2vLB6PYDni+jZTEznUXiYr2z2oFL0y6xgDKFIE" | |||
"ceWrMz3hOLsHNoRinHnqFjD0X8Ar6HFr5PkCAwEAAaOB8DCB7TAfBgNVHSMEGDAW" | |||
"gBRI5mj5K9KylddH2CMgEE8zmJCf1DAdBgNVHQ4EFgQUwHqYaI2J+6sFZAwRfap9" | |||
"ZbjKzE4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMw" | |||
"MTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9zZWN1cmVjYS5j" | |||
"cmwwTgYDVR0gBEcwRTBDBgRVHSAAMDswOQYIKwYBBQUHAgEWLWh0dHBzOi8vd3d3" | |||
"Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeTANBgkqhkiG9w0BAQUF" | |||
"AAOBgQB24RJuTksWEoYwBrKBCM/wCMfHcX5m7sLt1Dsf//DwyE7WQziwuTB9GNBV" | |||
"g6JqyzYRnOhIZqNtf7gT1Ef+i1pcc/yu2RsyGTirlzQUqpbS66McFAhJtrvlke+D" | |||
"NusdVm/K2rxzY5Dkf3s+Iss9B+1fOHSc4wNQTqGvmO5h8oQ/Eg=="; | |||
// kBadSessionExtraField is a custom serialized SSL_SESSION generated by replacing | |||
// the final (optional) element of |kCustomSession| with tag number 30. | |||
static const char kBadSessionExtraField[] = | |||
"MIIBdgIBAQICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBL4DBAEF"; | |||
// kBadSessionVersion is a custom serialized SSL_SESSION generated by replacing | |||
// the version of |kCustomSession| with 2. | |||
static const char kBadSessionVersion[] = | |||
"MIIBdgIBAgICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBLADBAEF"; | |||
// kBadSessionTrailingData is a custom serialized SSL_SESSION with trailing data | |||
// appended. | |||
static const char kBadSessionTrailingData[] = | |||
"MIIBdgIBAQICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBLADBAEFAAAA"; | |||
namespace bssl { | |||
struct ExpectedCipher { | |||
unsigned long id; | |||
int in_group_flag; | |||
@@ -585,6 +401,188 @@ static bool TestCipherRules() { | |||
return true; | |||
} | |||
// kOpenSSLSession is a serialized SSL_SESSION generated from openssl | |||
// s_client -sess_out. | |||
static const char kOpenSSLSession[] = | |||
"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" | |||
"i4gv7Y5oliyn"; | |||
// kCustomSession is a custom serialized SSL_SESSION generated by | |||
// filling in missing fields from |kOpenSSLSession|. This includes | |||
// providing |peer_sha256|, so |peer| is not serialized. | |||
static const char kCustomSession[] = | |||
"MIIBdgIBAQICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBLADBAEF"; | |||
// kBoringSSLSession is a serialized SSL_SESSION generated from bssl client. | |||
static const char kBoringSSLSession[] = | |||
"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" | |||
"lQI5kQsO/jgu0R0FmvZNPm8PBx2vLB6PYDni+jZTEznUXiYr2z2oFL0y6xgDKFIE" | |||
"ceWrMz3hOLsHNoRinHnqFjD0X8Ar6HFr5PkCAwEAAaOB8DCB7TAfBgNVHSMEGDAW" | |||
"gBRI5mj5K9KylddH2CMgEE8zmJCf1DAdBgNVHQ4EFgQUwHqYaI2J+6sFZAwRfap9" | |||
"ZbjKzE4wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwOgYDVR0fBDMw" | |||
"MTAvoC2gK4YpaHR0cDovL2NybC5nZW90cnVzdC5jb20vY3Jscy9zZWN1cmVjYS5j" | |||
"cmwwTgYDVR0gBEcwRTBDBgRVHSAAMDswOQYIKwYBBQUHAgEWLWh0dHBzOi8vd3d3" | |||
"Lmdlb3RydXN0LmNvbS9yZXNvdXJjZXMvcmVwb3NpdG9yeTANBgkqhkiG9w0BAQUF" | |||
"AAOBgQB24RJuTksWEoYwBrKBCM/wCMfHcX5m7sLt1Dsf//DwyE7WQziwuTB9GNBV" | |||
"g6JqyzYRnOhIZqNtf7gT1Ef+i1pcc/yu2RsyGTirlzQUqpbS66McFAhJtrvlke+D" | |||
"NusdVm/K2rxzY5Dkf3s+Iss9B+1fOHSc4wNQTqGvmO5h8oQ/Eg=="; | |||
// kBadSessionExtraField is a custom serialized SSL_SESSION generated by replacing | |||
// the final (optional) element of |kCustomSession| with tag number 30. | |||
static const char kBadSessionExtraField[] = | |||
"MIIBdgIBAQICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBL4DBAEF"; | |||
// kBadSessionVersion is a custom serialized SSL_SESSION generated by replacing | |||
// the version of |kCustomSession| with 2. | |||
static const char kBadSessionVersion[] = | |||
"MIIBdgIBAgICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBLADBAEF"; | |||
// kBadSessionTrailingData is a custom serialized SSL_SESSION with trailing data | |||
// appended. | |||
static const char kBadSessionTrailingData[] = | |||
"MIIBdgIBAQICAwMEAsAvBCAG5Q1ndq4Yfmbeo1zwLkNRKmCXGdNgWvGT3cskV0yQ" | |||
"kAQwJlrlzkAWBOWiLj/jJ76D7l+UXoizP2KI2C7I2FccqMmIfFmmkUy32nIJ0mZH" | |||
"IWoJoQYCBFRDO46iBAICASykAwQBAqUDAgEUphAEDnd3dy5nb29nbGUuY29tqAcE" | |||
"BXdvcmxkqQUCAwGJwKqBpwSBpBwUQvoeOk0Kg36SYTcLEkXqKwOBfF9vE4KX0Nxe" | |||
"LwjcDTpsuh3qXEaZ992r1N38VDcyS6P7I6HBYN9BsNHM362zZnY27GpTw+Kwd751" | |||
"CLoXFPoaMOe57dbBpXoro6Pd3BTbf/Tzr88K06yEOTDKPNj3+inbMaVigtK4PLyP" | |||
"q+Topyzvx9USFgRvyuoxn0Hgb+R0A3j6SLRuyOdAi4gv7Y5oliynrSIEIAYGBgYG" | |||
"BgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGBgYGrgMEAQevAwQBBLADBAEFAAAA"; | |||
static bool DecodeBase64(std::vector<uint8_t> *out, const char *in) { | |||
size_t len; | |||
if (!EVP_DecodedLength(&len, strlen(in))) { | |||
@@ -621,7 +619,7 @@ static bool TestSSL_SESSIONEncoding(const char *input_b64) { | |||
// Verify the SSL_SESSION encoding round-trips. | |||
size_t encoded_len; | |||
ScopedBytes encoded; | |||
ScopedOpenSSLBytes encoded; | |||
uint8_t *encoded_raw; | |||
if (!SSL_SESSION_to_bytes(session.get(), &encoded_raw, &encoded_len)) { | |||
fprintf(stderr, "SSL_SESSION_to_bytes failed\n"); | |||
@@ -710,7 +708,7 @@ static bool CipherGetRFCName(std::string *out, uint16_t value) { | |||
if (cipher == NULL) { | |||
return false; | |||
} | |||
ScopedString rfc_name(SSL_CIPHER_get_rfc_name(cipher)); | |||
ScopedOpenSSLString rfc_name(SSL_CIPHER_get_rfc_name(cipher)); | |||
if (!rfc_name) { | |||
return false; | |||
} | |||
@@ -1355,39 +1353,33 @@ static bool TestSetFD() { | |||
return true; | |||
} | |||
} // namespace bssl | |||
int main() { | |||
CRYPTO_library_init(); | |||
if (!bssl::TestCipherRules() || | |||
!bssl::TestSSL_SESSIONEncoding(kOpenSSLSession) || | |||
!bssl::TestSSL_SESSIONEncoding(kCustomSession) || | |||
!bssl::TestSSL_SESSIONEncoding(kBoringSSLSession) || | |||
!bssl::TestBadSSL_SESSIONEncoding(kBadSessionExtraField) || | |||
!bssl::TestBadSSL_SESSIONEncoding(kBadSessionVersion) || | |||
!bssl::TestBadSSL_SESSIONEncoding(kBadSessionTrailingData) || | |||
if (!TestCipherRules() || | |||
!TestSSL_SESSIONEncoding(kOpenSSLSession) || | |||
!TestSSL_SESSIONEncoding(kCustomSession) || | |||
!TestSSL_SESSIONEncoding(kBoringSSLSession) || | |||
!TestBadSSL_SESSIONEncoding(kBadSessionExtraField) || | |||
!TestBadSSL_SESSIONEncoding(kBadSessionVersion) || | |||
!TestBadSSL_SESSIONEncoding(kBadSessionTrailingData) || | |||
// TODO(svaldez): Update this when TLS 1.3 is enabled by default. | |||
!bssl::TestDefaultVersion(SSL3_VERSION, TLS1_2_VERSION, &TLS_method) || | |||
!bssl::TestDefaultVersion(SSL3_VERSION, SSL3_VERSION, &SSLv3_method) || | |||
!bssl::TestDefaultVersion(TLS1_VERSION, TLS1_VERSION, &TLSv1_method) || | |||
!bssl::TestDefaultVersion(TLS1_1_VERSION, TLS1_1_VERSION, | |||
&TLSv1_1_method) || | |||
!bssl::TestDefaultVersion(TLS1_2_VERSION, TLS1_2_VERSION, | |||
&TLSv1_2_method) || | |||
!bssl::TestDefaultVersion(TLS1_1_VERSION, TLS1_2_VERSION, &DTLS_method) || | |||
!bssl::TestDefaultVersion(TLS1_1_VERSION, TLS1_1_VERSION, | |||
&DTLSv1_method) || | |||
!bssl::TestDefaultVersion(TLS1_2_VERSION, TLS1_2_VERSION, | |||
&DTLSv1_2_method) || | |||
!bssl::TestCipherGetRFCName() || | |||
!bssl::TestPaddingExtension() || | |||
!bssl::TestClientCAList() || | |||
!bssl::TestInternalSessionCache() || | |||
!bssl::TestSequenceNumber(false /* TLS */) || | |||
!bssl::TestSequenceNumber(true /* DTLS */) || | |||
!bssl::TestOneSidedShutdown() || | |||
!bssl::TestSetFD()) { | |||
!TestDefaultVersion(SSL3_VERSION, TLS1_2_VERSION, &TLS_method) || | |||
!TestDefaultVersion(SSL3_VERSION, SSL3_VERSION, &SSLv3_method) || | |||
!TestDefaultVersion(TLS1_VERSION, TLS1_VERSION, &TLSv1_method) || | |||
!TestDefaultVersion(TLS1_1_VERSION, TLS1_1_VERSION, &TLSv1_1_method) || | |||
!TestDefaultVersion(TLS1_2_VERSION, TLS1_2_VERSION, &TLSv1_2_method) || | |||
!TestDefaultVersion(TLS1_1_VERSION, TLS1_2_VERSION, &DTLS_method) || | |||
!TestDefaultVersion(TLS1_1_VERSION, TLS1_1_VERSION, &DTLSv1_method) || | |||
!TestDefaultVersion(TLS1_2_VERSION, TLS1_2_VERSION, &DTLSv1_2_method) || | |||
!TestCipherGetRFCName() || | |||
!TestPaddingExtension() || | |||
!TestClientCAList() || | |||
!TestInternalSessionCache() || | |||
!TestSequenceNumber(false /* TLS */) || | |||
!TestSequenceNumber(true /* DTLS */) || | |||
!TestOneSidedShutdown() || | |||
!TestSetFD()) { | |||
ERR_print_errors_fp(stderr); | |||
return 1; | |||
} | |||
@@ -20,8 +20,6 @@ | |||
#include <openssl/mem.h> | |||
namespace bssl { | |||
namespace { | |||
extern const BIO_METHOD g_async_bio_method; | |||
@@ -188,5 +186,3 @@ void AsyncBioEnforceWriteQuota(BIO *bio, bool enforce) { | |||
} | |||
a->enforce_write_quota = enforce; | |||
} | |||
} // namespace bssl |
@@ -20,8 +20,6 @@ | |||
#include "../../crypto/test/scoped_types.h" | |||
namespace bssl { | |||
// AsyncBioCreate creates a filter BIO for testing asynchronous state | |||
// machines which consume a stream socket. Reads and writes will fail | |||
// and return EAGAIN unless explicitly allowed. Each async BIO has a | |||
@@ -43,7 +41,5 @@ void AsyncBioAllowWrite(BIO *bio, size_t count); | |||
// AsyncBioEnforceWriteQuota configures where |bio| enforces its write quota. | |||
void AsyncBioEnforceWriteQuota(BIO *bio, bool enforce); | |||
} // namespace bssl | |||
#endif // HEADER_ASYNC_BIO |
@@ -62,8 +62,6 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) | |||
#include "test_config.h" | |||
namespace bssl { | |||
#if !defined(OPENSSL_WINDOWS) | |||
static int closesocket(int sock) { | |||
return close(sock); | |||
@@ -286,7 +284,7 @@ static const SSL_PRIVATE_KEY_METHOD g_async_private_key_method = { | |||
}; | |||
template<typename T> | |||
struct SystemFree { | |||
struct Free { | |||
void operator()(T *buf) { | |||
free(buf); | |||
} | |||
@@ -297,7 +295,7 @@ static bool GetCertificate(SSL *ssl, ScopedX509 *out_x509, | |||
const TestConfig *config = GetTestConfig(ssl); | |||
if (!config->digest_prefs.empty()) { | |||
std::unique_ptr<char, SystemFree<char>> digest_prefs( | |||
std::unique_ptr<char, Free<char>> digest_prefs( | |||
strdup(config->digest_prefs.c_str())); | |||
std::vector<int> digest_list; | |||
@@ -1557,7 +1555,7 @@ class StderrDelimiter { | |||
~StderrDelimiter() { fprintf(stderr, "--- DONE ---\n"); } | |||
}; | |||
static int Main(int argc, char **argv) { | |||
int main(int argc, char **argv) { | |||
// To distinguish ASan's output from ours, add a trailing message to stderr. | |||
// Anything following this line will be considered an error. | |||
StderrDelimiter delimiter; | |||
@@ -1613,9 +1611,3 @@ static int Main(int argc, char **argv) { | |||
return 0; | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
return bssl::Main(argc, argv); | |||
} |
@@ -22,8 +22,6 @@ | |||
#include <openssl/mem.h> | |||
namespace bssl { | |||
namespace { | |||
extern const BIO_METHOD g_packeted_bio_method; | |||
@@ -304,5 +302,3 @@ bool PacketedBioAdvanceClock(BIO *bio) { | |||
memset(&data->timeout, 0, sizeof(data->timeout)); | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -29,8 +29,6 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) | |||
#endif | |||
namespace bssl { | |||
// PacketedBioCreate creates a filter BIO which implements a reliable in-order | |||
// blocking datagram socket. It internally maintains a clock and honors | |||
// |BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT| based on it. | |||
@@ -49,7 +47,5 @@ timeval PacketedBioGetClock(const BIO *bio); | |||
// there is a pending timeout. Otherwise, it returns false. | |||
bool PacketedBioAdvanceClock(BIO *bio); | |||
} // namespace bssl | |||
#endif // HEADER_PACKETED_BIO |
@@ -20,13 +20,9 @@ | |||
#include "../../crypto/test/scoped_types.h" | |||
namespace bssl { | |||
using ScopedSSL = ScopedType<SSL, SSL_free>; | |||
using ScopedSSL_CTX = ScopedType<SSL_CTX, SSL_CTX_free>; | |||
using ScopedSSL_SESSION = ScopedType<SSL_SESSION, SSL_SESSION_free>; | |||
} // namespace bssl | |||
using ScopedSSL = ScopedOpenSSLType<SSL, SSL_free>; | |||
using ScopedSSL_CTX = ScopedOpenSSLType<SSL_CTX, SSL_CTX_free>; | |||
using ScopedSSL_SESSION = ScopedOpenSSLType<SSL_SESSION, SSL_SESSION_free>; | |||
#endif // OPENSSL_HEADER_SSL_TEST_SCOPED_TYPES_H |
@@ -22,8 +22,6 @@ | |||
#include <openssl/base64.h> | |||
namespace bssl { | |||
namespace { | |||
template <typename T> | |||
@@ -215,5 +213,3 @@ bool ParseConfig(int argc, char **argv, TestConfig *out_config) { | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -18,8 +18,6 @@ | |||
#include <string> | |||
namespace bssl { | |||
struct TestConfig { | |||
int port = 0; | |||
bool is_server = false; | |||
@@ -113,7 +111,5 @@ struct TestConfig { | |||
bool ParseConfig(int argc, char **argv, TestConfig *out_config); | |||
} // namespace bssl | |||
#endif // HEADER_TEST_CONFIG |
@@ -23,8 +23,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
bool ParseKeyValueArguments(std::map<std::string, std::string> *out_args, | |||
const std::vector<std::string> &args, | |||
const struct argument *templates) { | |||
@@ -104,5 +102,3 @@ bool GetUnsigned(unsigned *out, const std::string &arg_name, | |||
*out = num; | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -25,8 +25,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
bool Ciphers(const std::vector<std::string> &args) { | |||
if (args.size() != 1) { | |||
fprintf(stderr, "Usage: bssl ciphers <cipher suite string>\n"); | |||
@@ -66,5 +64,3 @@ bool Ciphers(const std::vector<std::string> &args) { | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -26,8 +26,6 @@ | |||
#include "transport_common.h" | |||
namespace bssl { | |||
static const struct argument kArguments[] = { | |||
{ | |||
"-connect", kRequiredArgument, | |||
@@ -328,5 +326,3 @@ bool Client(const std::vector<std::string> &args) { | |||
return ok; | |||
} | |||
} // namespace bssl |
@@ -18,8 +18,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
const uint8_t kDERRSAPrivate2048[] = { | |||
0x30, 0x82, 0x04, 0xa3, 0x02, 0x01, 0x00, 0x02, 0x82, 0x01, 0x01, 0x00, | |||
0xd0, 0x02, 0xde, 0x5d, 0x19, 0x33, 0x48, 0x15, 0xc7, 0x86, 0xde, 0xa3, | |||
@@ -434,5 +432,3 @@ const uint8_t kDERRSAPrivate3Prime2048[] = { | |||
}; | |||
const size_t kDERRSAPrivate3Prime2048Len = sizeof(kDERRSAPrivate3Prime2048); | |||
} // namespace bssl |
@@ -44,8 +44,6 @@ typedef int ssize_t; | |||
#include "internal.h" | |||
namespace bssl { | |||
struct close_delete { | |||
void operator()(int *fd) { | |||
BORINGSSL_CLOSE(*fd); | |||
@@ -478,5 +476,3 @@ bool SHA384Sum(const std::vector<std::string> &args) { | |||
bool SHA512Sum(const std::vector<std::string> &args) { | |||
return DigestSum(EVP_sha512(), args); | |||
} | |||
} // namespace bssl |
@@ -22,8 +22,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
static const struct argument kArguments[] = { | |||
{ | |||
"-out-public", kRequiredArgument, "The file to write the public key to", | |||
@@ -67,5 +65,3 @@ bool GenerateEd25519Key(const std::vector<std::string> &args) { | |||
WriteToFile(args_map["-out-private"], private_key, | |||
sizeof(private_key)); | |||
} | |||
} // namespace bssl |
@@ -22,8 +22,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
static const struct argument kArguments[] = { | |||
{ | |||
"-nprimes", kOptionalArgument, | |||
@@ -69,5 +67,3 @@ bool GenerateRSAKey(const std::vector<std::string> &args) { | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -44,8 +44,6 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) | |||
#define BORINGSSL_WRITE write | |||
#endif | |||
namespace bssl { | |||
enum ArgumentType { | |||
kRequiredArgument, | |||
kOptionalArgument, | |||
@@ -90,7 +88,5 @@ extern const size_t kDERRSAPrivate4096Len; | |||
extern const uint8_t kDERRSAPrivate3Prime2048[]; | |||
extern const size_t kDERRSAPrivate3Prime2048Len; | |||
} // namespace bssl | |||
#endif /* !OPENSSL_HEADER_TOOL_INTERNAL_H */ |
@@ -39,8 +39,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
#if defined(OPENSSL_WINDOWS) | |||
typedef int read_result_t; | |||
#else | |||
@@ -142,5 +140,3 @@ bool DoPKCS12(const std::vector<std::string> &args) { | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -23,8 +23,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
static const struct argument kArguments[] = { | |||
{ | |||
"-hex", kBooleanArgument, | |||
@@ -95,5 +93,3 @@ bool Rand(const std::vector<std::string> &args) { | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -21,8 +21,6 @@ | |||
#include "transport_common.h" | |||
namespace bssl { | |||
static const struct argument kArguments[] = { | |||
{ | |||
"-accept", kRequiredArgument, | |||
@@ -152,5 +150,3 @@ bool Server(const std::vector<std::string> &args) { | |||
SSL_CTX_free(ctx); | |||
return ok; | |||
} | |||
} // namespace bssl |
@@ -41,8 +41,6 @@ OPENSSL_MSVC_PRAGMA(warning(pop)) | |||
#include "internal.h" | |||
namespace bssl { | |||
// TimeResults represents the results of benchmarking a function. | |||
struct TimeResults { | |||
// num_calls is the number of function calls done in the time period. | |||
@@ -632,5 +630,3 @@ bool Speed(const std::vector<std::string> &args) { | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -29,8 +29,6 @@ | |||
#include "internal.h" | |||
namespace bssl { | |||
typedef bool (*tool_func_t)(const std::vector<std::string> &args); | |||
struct Tool { | |||
@@ -81,8 +79,7 @@ static tool_func_t FindTool(const std::string &name) { | |||
} | |||
} | |||
static int Main(int argc, char **argv) { | |||
int main(int argc, char **argv) { | |||
#if defined(OPENSSL_WINDOWS) | |||
// Read and write in binary mode. This makes bssl on Windows consistent with | |||
// bssl on other platforms, and also makes it consistent with MSYS's commands | |||
@@ -127,9 +124,3 @@ static int Main(int argc, char **argv) { | |||
return !tool(args); | |||
} | |||
} // namespace bssl | |||
int main(int argc, char **argv) { | |||
return bssl::Main(argc, argv); | |||
} |
@@ -51,8 +51,6 @@ typedef int ssize_t; | |||
#include "transport_common.h" | |||
namespace bssl { | |||
#if !defined(OPENSSL_WINDOWS) | |||
static int closesocket(int sock) { | |||
return close(sock); | |||
@@ -539,5 +537,3 @@ bool DoSMTPStartTLS(int sock) { | |||
return true; | |||
} | |||
} // namespace bssl |
@@ -18,9 +18,6 @@ | |||
#include <openssl/ssl.h> | |||
#include <string.h> | |||
namespace bssl { | |||
// InitSocketLibrary calls the Windows socket init functions, if needed. | |||
bool InitSocketLibrary(); | |||
@@ -46,7 +43,4 @@ bool TransferData(SSL *ssl, int sock); | |||
// returns true on success and false otherwise. | |||
bool DoSMTPStartTLS(int sock); | |||
} // namespace bssl | |||
#endif /* !OPENSSL_HEADER_TOOL_TRANSPORT_COMMON_H */ |
@@ -72,7 +72,6 @@ type HeaderDecl struct { | |||
const ( | |||
cppGuard = "#if defined(__cplusplus)" | |||
endif = "#endif" | |||
commentStart = "/* " | |||
commentEnd = " */" | |||
) | |||
@@ -293,14 +292,8 @@ func (config *Config) parseHeader(path string) (*HeaderFile, error) { | |||
if len(lines) == 0 || lines[0] != "extern \"C\" {" { | |||
return nil, errors.New("no extern \"C\" found after C++ guard") | |||
} | |||
for i, line := range lines { | |||
if line == endif { | |||
lines = lines[i+1:] | |||
lineNo += i + 1 | |||
break | |||
} | |||
} | |||
lineNo += 2 | |||
lines = lines[2:] | |||
header := &HeaderFile{ | |||
Name: filepath.Base(path), | |||