blob: 03e791f40ebec90c2c509770a08dd73de63402fe [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
8#include <string>
9
avi5a080f012015-12-22 23:15:4310#include "base/macros.h"
[email protected]8f1504b2013-03-07 13:43:1011#include "base/memory/ref_counted.h"
12#include "base/memory/scoped_ptr.h"
13
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>;
46 RsaKeyPair(scoped_ptr<crypto::RSAPrivateKey> key);
47 virtual ~RsaKeyPair();
48
49 scoped_ptr<crypto::RSAPrivateKey> key_;
50
51 DISALLOW_COPY_AND_ASSIGN(RsaKeyPair);
52};
53
54} // namespace remoting
55
56#endif // REMOTING_BASE_RSA_KEY_PAIR_H_