blob: 051bf2006b983085552c897273edf2bb80a8dcc7 [file] [log] [blame]
Vitaly Buka4615e0d2015-10-14 15:35:12 -07001// Copyright 2015 The Weave Authors. All rights reserved.
Vitaly Buka7ce499f2015-06-09 08:04:11 -07002// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Vitaly Buka912b6982015-07-06 11:13:03 -07005#ifndef LIBWEAVE_SRC_PRIVET_SECURITY_DELEGATE_H_
6#define LIBWEAVE_SRC_PRIVET_SECURITY_DELEGATE_H_
Vitaly Buka7ce499f2015-06-09 08:04:11 -07007
8#include <memory>
9#include <set>
10#include <string>
11
12#include <base/time/time.h>
Vitaly Buka7ce499f2015-06-09 08:04:11 -070013
Stefan Sauer2d16dfa2015-09-25 17:08:35 +020014#include "src/privet/privet_types.h"
Vitaly Buka7ce499f2015-06-09 08:04:11 -070015
Vitaly Bukab6f015a2015-07-09 14:59:23 -070016namespace weave {
17namespace privet {
Vitaly Buka7ce499f2015-06-09 08:04:11 -070018
Vitaly Buka7ce499f2015-06-09 08:04:11 -070019// Interface to provide Security related logic for |PrivetHandler|.
20class SecurityDelegate {
21 public:
Vitaly Buka3bfb13d2015-11-24 14:46:13 -080022 virtual ~SecurityDelegate() {}
Vitaly Buka7ce499f2015-06-09 08:04:11 -070023
24 // Creates access token for the given scope, user id and |time|.
Vitaly Buka41aa8092015-12-09 20:04:34 -080025 virtual std::string CreateAccessToken(const UserInfo& user_info) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070026
27 // Validates |token| and returns scope and user id parsed from that.
28 virtual UserInfo ParseAccessToken(const std::string& token,
29 base::Time* time) const = 0;
30
31 // Returns list of pairing methods by device.
32 virtual std::set<PairingType> GetPairingTypes() const = 0;
33
34 // Returns list of crypto methods supported by devices.
35 virtual std::set<CryptoType> GetCryptoTypes() const = 0;
36
37 // Returns true if |auth_code| provided by client is valid. Client should
38 // obtain |auth_code| during pairing process.
39 virtual bool IsValidPairingCode(const std::string& auth_code) const = 0;
40
41 virtual bool StartPairing(PairingType mode,
42 CryptoType crypto,
43 std::string* session_id,
44 std::string* device_commitment,
Vitaly Buka0801a1f2015-08-14 10:03:46 -070045 ErrorPtr* error) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070046
47 virtual bool ConfirmPairing(const std::string& session_id,
48 const std::string& client_commitment,
49 std::string* fingerprint,
50 std::string* signature,
Vitaly Buka0801a1f2015-08-14 10:03:46 -070051 ErrorPtr* error) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070052
53 virtual bool CancelPairing(const std::string& session_id,
Vitaly Buka0801a1f2015-08-14 10:03:46 -070054 ErrorPtr* error) = 0;
Vitaly Buka7ce499f2015-06-09 08:04:11 -070055};
56
Vitaly Bukab6f015a2015-07-09 14:59:23 -070057} // namespace privet
58} // namespace weave
Vitaly Buka7ce499f2015-06-09 08:04:11 -070059
Vitaly Buka912b6982015-07-06 11:13:03 -070060#endif // LIBWEAVE_SRC_PRIVET_SECURITY_DELEGATE_H_