x_privet_token_unittest.cc revision a3f7b4e666c476898878fa745f637129375cd889
1// Copyright 2013 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 "cloud_print/gcp20/prototype/x_privet_token.h"
6
7#include <stdio.h>
8
9#include "base/base64.h"
10#include "base/basictypes.h"
11#include "base/format_macros.h"
12#include "base/logging.h"
13#include "base/sha1.h"
14#include "base/strings/string_number_conversions.h"
15#include "base/strings/stringprintf.h"
16#include "base/time/time.h"
17#include "testing/gtest/include/gtest/gtest.h"
18
19TEST(XPrivetTokenTest, Generation) {
20  std::string secret = "E3E92296-E290-4E77-B678-6AEF256C30C8";
21  uint64 gen_time = 1372444784;
22  uint64 issue_time = gen_time;
23
24  XPrivetToken xtoken(secret, base::Time::FromTimeT(gen_time));
25
26  std::string issue_time_str = base::StringPrintf("%"PRIu64, issue_time);
27  std::string sha1_val = base::SHA1HashString(secret + ":" + issue_time_str);
28
29  EXPECT_STRCASEEQ("2216828f9eefc3931c1b9a110dcca3dbec23571d",
30                   base::HexEncode(sha1_val.data(), sha1_val.size()).c_str());
31
32  std::string base64_val;
33  base::Base64Encode(sha1_val + ":" + issue_time_str, &base64_val);
34
35  EXPECT_EQ(base64_val, xtoken.GenerateXTokenWithTime(issue_time));
36
37  EXPECT_NE(xtoken.GenerateXTokenWithTime(issue_time),
38            xtoken.GenerateXTokenWithTime(issue_time + 1));
39}
40
41TEST(XPrivetTokenTest, CheckingValid) {
42  base::Time gen_time = base::Time::FromTimeT(1372444784);
43  XPrivetToken xtoken("9CEEA1AD-BC24-4D5A-8AB4-A6CE3E0CC4CD", gen_time);
44
45  std::string token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT());
46  EXPECT_TRUE(xtoken.CheckValidXToken(token));
47
48  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 1);
49  EXPECT_TRUE(xtoken.CheckValidXToken(token));
50
51  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 55);
52  EXPECT_TRUE(xtoken.CheckValidXToken(token));
53
54  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 60*60 - 5);
55  EXPECT_TRUE(xtoken.CheckValidXToken(token));
56
57  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 60*60 + 10);
58  EXPECT_TRUE(xtoken.CheckValidXToken(token));
59
60  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 - 1);
61  EXPECT_TRUE(xtoken.CheckValidXToken(token));
62}
63
64TEST(XPrivetTokenTest, CheckingInvalid) {
65  base::Time gen_time = base::Time::FromTimeT(1372444784);
66  XPrivetToken xtoken("9CEEA1AD-BC24-4D5A-8AB4-A6CE3E0CC4CD", gen_time);
67
68  // Meaningless tokens:
69
70  std::string token = "CEEA1AD9CEEA1AD9CEEA1AD9CEEA1AD";
71  EXPECT_FALSE(xtoken.CheckValidXToken(token));
72
73  base::Base64Encode("CEEA1AD9CEEA1AD9CEEA1AD9CEEA1AD", &token);
74  EXPECT_FALSE(xtoken.CheckValidXToken(token));
75
76  base::Base64Encode("CEEA1AD9CEEA:1AD9CEEA1AD9CEEA1AD", &token);
77  EXPECT_FALSE(xtoken.CheckValidXToken(token));
78
79  base::Base64Encode("CEEA1AD9CEEA:1AD9CEEA1AD9:CEEA1AD", &token);
80  EXPECT_FALSE(xtoken.CheckValidXToken(token));
81
82  base::Base64Encode("CEEA1AD9CEEA:123456", &token);
83  EXPECT_FALSE(xtoken.CheckValidXToken(token));
84
85  base::Base64Encode("CEEA1AD9CEEA:", &token);
86  EXPECT_FALSE(xtoken.CheckValidXToken(token));
87
88  base::Base64Encode("CEEA1AD9CEEA:1372444784", &token);
89  EXPECT_FALSE(xtoken.CheckValidXToken(token));
90
91  EXPECT_FALSE(xtoken.CheckValidXToken(""));
92
93  // Expired tokens:
94
95  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 + 1);
96  EXPECT_FALSE(xtoken.CheckValidXToken(token));
97
98  token = xtoken.GenerateXTokenWithTime(gen_time.ToTimeT() + 7*24*60*60 - 1023);
99  EXPECT_FALSE(xtoken.CheckValidXToken(token));
100
101  // Tokens with different secret:
102
103  XPrivetToken another("6F02AC4E-6F37-4078-AF42-5EE5D8180284", gen_time);
104
105  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() - 24*60*60 - 1);
106  EXPECT_FALSE(xtoken.CheckValidXToken(token));
107
108  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() - 24*60*60 + 1);
109  EXPECT_FALSE(xtoken.CheckValidXToken(token));
110
111  token = another.GenerateXTokenWithTime(gen_time.ToTimeT());
112  EXPECT_FALSE(xtoken.CheckValidXToken(token));
113
114  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 1);
115  EXPECT_FALSE(xtoken.CheckValidXToken(token));
116
117  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 - 1);
118  EXPECT_FALSE(xtoken.CheckValidXToken(token));
119
120  token = another.GenerateXTokenWithTime(gen_time.ToTimeT() + 24*60*60 + 1);
121  EXPECT_FALSE(xtoken.CheckValidXToken(token));
122}
123
124