15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2010 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef NET_BASE_OPENSSL_PRIVATE_KEY_STORE_H_ 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define NET_BASE_OPENSSL_PRIVATE_KEY_STORE_H_ 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <vector> 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Avoid including <openssl/evp.h> 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef struct evp_pkey_st EVP_PKEY; 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "net/base/net_export.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GURL; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class X509Certificate; 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OpenSSLPrivateKeyStore provides an interface for storing 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// public/private key pairs to system storage on platforms where 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// OpenSSL is used. 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// This class shall only be used from the network thread. 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class NET_EXPORT OpenSSLPrivateKeyStore { 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Called to permanently store a private/public key pair, generated 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // via <keygen> while visiting |url|, to an appropriate system 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // location. Increments |pkey|'s reference count, so the caller is still 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // responsible for calling EVP_PKEY_free on it. 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |url| is the corresponding server URL. 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |pkey| is the key pair handle. 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns false if an error occurred whilst attempting to store the key. 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool StoreKeyPair(const GURL& url, EVP_PKEY* pkey); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Checks that the private key for a given public key is installed. 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // |pub_key| a public key. 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if there is a private key that was previously 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // recorded through StoreKeyPair(). 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // NOTE: Intentionally not implemented on Android because there is no 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // platform API that can perform this operation silently. 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool HasPrivateKey(EVP_PKEY* pub_key); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) OpenSSLPrivateKeyStore(); // not implemented. 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ~OpenSSLPrivateKeyStore(); // not implemented. 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(OpenSSLPrivateKeyStore); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace net 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // NET_BASE_OPENSSL_PRIVATE_KEY_STORE_H_ 54