|  | // Copyright 2015 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef COMPONENTS_GCM_DRIVER_CRYPTO_P256_KEY_UTIL_H_ | 
|  | #define COMPONENTS_GCM_DRIVER_CRYPTO_P256_KEY_UTIL_H_ | 
|  |  | 
|  | #include <string> | 
|  |  | 
|  | #include "base/compiler_specific.h" | 
|  | #include "base/strings/string_piece.h" | 
|  |  | 
|  | namespace gcm { | 
|  |  | 
|  | // Creates a new key pair for key exchanges using elliptic-curve Diffie- | 
|  | // Hellman using the NIST P-256 curve. Returns whether the key pair could be | 
|  | // created successfully, and was written to the out arguments. | 
|  | // | 
|  | // The |out_private_key| will be an ASN.1-encoded PKCS#8 EncryptedPrivateKeyInfo | 
|  | // block, |out_public_key_x509| an X.509 SubjectPublicKeyInfo block and | 
|  | // |out_public_key| an octet string in uncompressed form per SEC1 2.3.3. | 
|  | bool CreateP256KeyPair(std::string* out_private_key, | 
|  | std::string* out_public_key_x509, | 
|  | std::string* out_public_key) WARN_UNUSED_RESULT; | 
|  |  | 
|  | // Computes the shared secret between |private_key| and |peer_public_key|. The | 
|  | // |public_key| associated with the |private_key| is necessary for NSS. Returns | 
|  | // whether the secret could be computed, and was written to the out argument. | 
|  | // | 
|  | // The |private_key| must be an ASN.1-encoded PKCS#8 EncryptedPrivateKeyInfo | 
|  | // block together, where |public_key_x509| must be an X.509 SubjectPublicKeyInfo | 
|  | // block. This is necessary for NSS to be able to import the |private_key|. | 
|  | // | 
|  | // The |peer_public_key| must be an octet string in uncompressed form per | 
|  | // SEC1 2.3.3. | 
|  | bool ComputeSharedP256Secret(const base::StringPiece& private_key, | 
|  | const base::StringPiece& public_key_x509, | 
|  | const base::StringPiece& peer_public_key, | 
|  | std::string* out_shared_secret) WARN_UNUSED_RESULT; | 
|  |  | 
|  | }  // namespace gcm | 
|  |  | 
|  | #endif  // COMPONENTS_GCM_DRIVER_CRYPTO_P256_KEY_UTIL_H_ |