blob: a4190b35647f954e934f46c9aa290c28e46734b2 [file] [log] [blame]
[email protected]8f1504b2013-03-07 13:43:101// 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#ifndef REMOTING_BASE_RSA_KEY_PAIR_H_
6#define REMOTING_BASE_RSA_KEY_PAIR_H_
7
dcheng0765c492016-04-06 22:41:538#include <memory>
[email protected]8f1504b2013-03-07 13:43:109#include <string>
10
avi5a080f012015-12-22 23:15:4311#include "base/macros.h"
[email protected]8f1504b2013-03-07 13:43:1012#include "base/memory/ref_counted.h"
[email protected]8f1504b2013-03-07 13:43:1013
14namespace crypto {
15class RSAPrivateKey;
16} // namespace crypto
17
18namespace remoting {
19
20class RsaKeyPair : public base::RefCountedThreadSafe<RsaKeyPair> {
21 public:
22 // Generates a new (random) private key.
23 static scoped_refptr<RsaKeyPair> Generate();
24
25 // Loads a private key from a base64-encoded string. Returns true on success.
26 static scoped_refptr<RsaKeyPair> FromString(const std::string& key_base64);
27
28 // Returns a base64 encoded string representing the private key.
29 std::string ToString() const;
30
31 // Generates a DER-encoded self-signed certificate using the key pair. Returns
32 // empty string if cert generation fails (e.g. it may happen when the system
33 // clock is off).
34 std::string GenerateCertificate() const;
35
36 // Returns a base64-encoded string representing the public key.
37 std::string GetPublicKey() const;
38
39 // Returns a base64-encoded signature for the message.
40 std::string SignMessage(const std::string& message) const;
41
42 crypto::RSAPrivateKey* private_key() { return key_.get(); }
43
44 private:
45 friend class base::RefCountedThreadSafe<RsaKeyPair>;
dcheng0765c492016-04-06 22:41:5346 RsaKeyPair(std::unique_ptr<crypto::RSAPrivateKey> key);
[email protected]8f1504b2013-03-07 13:43:1047 virtual ~RsaKeyPair();
48
dcheng0765c492016-04-06 22:41:5349 std::unique_ptr<crypto::RSAPrivateKey> key_;
[email protected]8f1504b2013-03-07 13:43:1050
51 DISALLOW_COPY_AND_ASSIGN(RsaKeyPair);
52};
53
54} // namespace remoting
55
56#endif // REMOTING_BASE_RSA_KEY_PAIR_H_