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.
5 #include "remoting/host/pin_hash.h"
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"
14 std::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";
22 return "hmac:" + hash_base64
;
25 bool 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.";
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
;
39 } // namespace remoting