1 // Copyright 2018 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "services/network/public/cpp/digitally_signed_mojom_traits.h"
6
7 #include "base/test/gtest_util.h"
8 #include "mojo/public/cpp/test_support/test_utils.h"
9 #include "net/cert/signed_certificate_timestamp.h"
10 #include "services/network/public/mojom/digitally_signed.mojom.h"
11 #include "testing/gtest/include/gtest/gtest.h"
12
13 namespace network {
14 namespace {
15
TEST(DigitallySignedTraitsTest,Roundtrips)16 TEST(DigitallySignedTraitsTest, Roundtrips) {
17 for (auto sig_alg : {net::ct::DigitallySigned::SIG_ALGO_ANONYMOUS,
18 net::ct::DigitallySigned::SIG_ALGO_RSA,
19 net::ct::DigitallySigned::SIG_ALGO_DSA,
20 net::ct::DigitallySigned::SIG_ALGO_ECDSA}) {
21 for (auto hash_alg : {net::ct::DigitallySigned::HASH_ALGO_NONE,
22 net::ct::DigitallySigned::HASH_ALGO_MD5,
23 net::ct::DigitallySigned::HASH_ALGO_SHA1,
24 net::ct::DigitallySigned::HASH_ALGO_SHA224,
25 net::ct::DigitallySigned::HASH_ALGO_SHA256,
26 net::ct::DigitallySigned::HASH_ALGO_SHA384,
27 net::ct::DigitallySigned::HASH_ALGO_SHA512}) {
28 net::ct::DigitallySigned original;
29 original.hash_algorithm = hash_alg;
30 original.signature_algorithm = sig_alg;
31 original.signature_data.assign(5, static_cast<char>(hash_alg));
32
33 net::ct::DigitallySigned copied;
34 EXPECT_TRUE(mojo::test::SerializeAndDeserialize<mojom::DigitallySigned>(
35 &original, &copied))
36 << "with hash " << hash_alg << " and sig " << sig_alg;
37 EXPECT_EQ(original.hash_algorithm, copied.hash_algorithm);
38 EXPECT_EQ(original.signature_algorithm, copied.signature_algorithm);
39 EXPECT_EQ(original.signature_data, copied.signature_data);
40 }
41 }
42 }
43
TEST(DigitallySignedTraitsTest,EmptySignatureRejected)44 TEST(DigitallySignedTraitsTest, EmptySignatureRejected) {
45 net::ct::DigitallySigned original;
46 original.hash_algorithm = net::ct::DigitallySigned::HASH_ALGO_SHA256;
47 original.signature_algorithm = net::ct::DigitallySigned::SIG_ALGO_ECDSA;
48 original.signature_data.clear();
49
50 net::ct::DigitallySigned copied;
51 EXPECT_FALSE(mojo::test::SerializeAndDeserialize<mojom::DigitallySigned>(
52 &original, &copied));
53 }
54
TEST(DigitallySignedTraitsTest,OutOfBoundsEnumsRejected)55 TEST(DigitallySignedTraitsTest, OutOfBoundsEnumsRejected) {
56 net::ct::DigitallySigned original;
57 original.hash_algorithm =
58 static_cast<net::ct::DigitallySigned::HashAlgorithm>(-1);
59 original.signature_algorithm = net::ct::DigitallySigned::SIG_ALGO_ECDSA;
60 original.signature_data.assign(32, '\x01');
61
62 net::ct::DigitallySigned copied;
63 EXPECT_DCHECK_DEATH(
64 mojo::test::SerializeAndDeserialize<mojom::DigitallySigned>(&original,
65 &copied));
66 }
67
68 } // namespace
69 } // namespace network
70