blob: 2ee58f59ff07bc914a34e6fb8cbfc0441e0eb3d3 [file] [log] [blame]
Andrew de los Reyes0c440052010-08-20 11:25:54 -07001// Copyright (c) 2010 The Chromium OS 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 <string>
6#include <vector>
7#include <gtest/gtest.h>
8#include "base/logging.h"
9#include "update_engine/payload_signer.h"
10#include "update_engine/update_metadata.pb.h"
11#include "update_engine/utils.h"
12
13using std::string;
14using std::vector;
15
16// Note: the test key was generated with the following command:
17// openssl genrsa -out unittest_key.pem 1024
18
Andrew de los Reyes0c440052010-08-20 11:25:54 -070019namespace chromeos_update_engine {
20
Andrew de los Reyes932bc4c2010-08-23 18:14:09 -070021const char* kUnittestPrivateKeyPath = "unittest_key.pem";
22
Andrew de los Reyes0c440052010-08-20 11:25:54 -070023//class PayloadSignerTest : public ::testing::Test {};
24
25TEST(PayloadSignerTest, SimpleTest) {
26 // Some data and its corresponding signature:
27 const string kDataToSign = "This is some data to sign.";
28 const char kExpectedSignature[] = {
Andrew de los Reyes932bc4c2010-08-23 18:14:09 -070029 0x00, 0x8d, 0x20, 0x22, 0x87, 0xd3, 0xd0, 0xeb,
30 0x85, 0x80, 0xde, 0x76, 0xa4, 0x5a, 0xac, 0xdc,
31 0xa8, 0xe0, 0x6e, 0x10, 0x98, 0xc3, 0xa4, 0x55,
32 0x48, 0xbf, 0x15, 0x98, 0x32, 0xda, 0xbe, 0x21,
33 0x3d, 0xa8, 0x1a, 0xb6, 0xf9, 0x93, 0x03, 0x70,
34 0x44, 0x1b, 0xec, 0x39, 0xe3, 0xd4, 0xfd, 0x6b,
35 0xff, 0x84, 0xee, 0x60, 0xbe, 0xed, 0x9e, 0x5b,
36 0xac, 0xd5, 0xd6, 0x1a, 0xf9, 0x4e, 0xdb, 0x6d,
37 0x11, 0x9e, 0x01, 0xb1, 0xcb, 0x55, 0x05, 0x52,
38 0x8c, 0xad, 0xb6, 0x8e, 0x9f, 0xf7, 0xc2, 0x1a,
39 0x26, 0xb3, 0x96, 0xd2, 0x4a, 0xfd, 0x7c, 0x96,
40 0x53, 0x38, 0x3a, 0xcf, 0xab, 0x95, 0x83, 0xbd,
41 0x8e, 0xe1, 0xbd, 0x07, 0x12, 0xa2, 0x80, 0x18,
42 0xca, 0x64, 0x91, 0xee, 0x9d, 0x9d, 0xe3, 0x69,
43 0xc0, 0xab, 0x1b, 0x75, 0x9f, 0xf0, 0x64, 0x74,
44 0x01, 0xb3, 0x49, 0xea, 0x87, 0x63, 0x04, 0x29
Andrew de los Reyes0c440052010-08-20 11:25:54 -070045 };
46
47 string data_path;
48 ASSERT_TRUE(
49 utils::MakeTempFile("/tmp/data.XXXXXX", &data_path, NULL));
50 ScopedPathUnlinker data_path_unlinker(data_path);
51 ASSERT_TRUE(utils::WriteFile(data_path.c_str(),
52 kDataToSign.data(),
53 kDataToSign.size()));
54 uint64_t length = 0;
55 EXPECT_TRUE(PayloadSigner::SignatureBlobLength(kUnittestPrivateKeyPath,
56 &length));
57 EXPECT_GT(length, 0);
58 vector<char> signature_blob;
59 EXPECT_TRUE(PayloadSigner::SignPayload(data_path,
60 kUnittestPrivateKeyPath,
61 &signature_blob));
62 EXPECT_EQ(length, signature_blob.size());
63
64 // Check the signature itself
65
66 Signatures signatures;
67 EXPECT_TRUE(signatures.ParseFromArray(&signature_blob[0],
68 signature_blob.size()));
69 EXPECT_EQ(1, signatures.signatures_size());
70 const Signatures_Signature& signature = signatures.signatures(0);
71 EXPECT_EQ(kSignatureMessageVersion, signature.version());
72 const string sig_data = signature.data();
73 ASSERT_EQ(sizeof(kExpectedSignature), sig_data.size());
74 for (size_t i = 0; i < sizeof(kExpectedSignature); i++) {
75 EXPECT_EQ(kExpectedSignature[i], sig_data[i]);
76 }
77}
78
79} // namespace chromeos_update_engine