pin_hash.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
1// Copyright (c) 2012 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 "remoting/host/pin_hash.h"
6
7#include "base/base64.h"
8#include "base/logging.h"
9#include "remoting/protocol/authentication_method.h"
10#include "remoting/protocol/me2me_host_authenticator_factory.h"
11
12namespace remoting {
13
14std::string MakeHostPinHash(const std::string& host_id,
15                            const std::string& pin) {
16  std::string hash = protocol::AuthenticationMethod::ApplyHashFunction(
17      protocol::AuthenticationMethod::HMAC_SHA256, host_id, pin);
18  std::string hash_base64;
19  if (!base::Base64Encode(hash, &hash_base64)) {
20    LOG(FATAL) << "Base64Encode failed";
21  }
22  return "hmac:" + hash_base64;
23}
24
25bool VerifyHostPinHash(const std::string& hash,
26                       const std::string& host_id,
27                       const std::string& pin) {
28  remoting::protocol::SharedSecretHash hash_parsed;
29  if (!hash_parsed.Parse(hash)) {
30    LOG(FATAL) << "Invalid hash.";
31    return false;
32  }
33  std::string hash_calculated =
34      remoting::protocol::AuthenticationMethod::ApplyHashFunction(
35          hash_parsed.hash_function, host_id, pin);
36  return hash_calculated == hash_parsed.value;
37}
38
39}  // namespace remoting
40