1// Copyright 2014 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#include "content/child/webcrypto/openssl/sym_key_openssl.h" 6 7#include <vector> 8#include <openssl/rand.h> 9 10#include "content/child/webcrypto/crypto_data.h" 11#include "content/child/webcrypto/openssl/key_openssl.h" 12#include "content/child/webcrypto/status.h" 13#include "crypto/openssl_util.h" 14#include "third_party/WebKit/public/platform/WebCryptoKeyAlgorithm.h" 15 16namespace content { 17 18namespace webcrypto { 19 20Status GenerateSecretKeyOpenSsl(const blink::WebCryptoKeyAlgorithm& algorithm, 21 bool extractable, 22 blink::WebCryptoKeyUsageMask usage_mask, 23 unsigned keylen_bytes, 24 blink::WebCryptoKey* key) { 25 crypto::OpenSSLErrStackTracer err_tracer(FROM_HERE); 26 27 std::vector<unsigned char> random_bytes(keylen_bytes, 0); 28 29 if (keylen_bytes > 0) { 30 if (!(RAND_bytes(&random_bytes[0], keylen_bytes))) 31 return Status::OperationError(); 32 } 33 34 *key = 35 blink::WebCryptoKey::create(new SymKeyOpenSsl(CryptoData(random_bytes)), 36 blink::WebCryptoKeyTypeSecret, 37 extractable, 38 algorithm, 39 usage_mask); 40 return Status::Success(); 41} 42 43Status ImportKeyRawOpenSsl(const CryptoData& key_data, 44 const blink::WebCryptoKeyAlgorithm& algorithm, 45 bool extractable, 46 blink::WebCryptoKeyUsageMask usage_mask, 47 blink::WebCryptoKey* key) { 48 *key = blink::WebCryptoKey::create(new SymKeyOpenSsl(key_data), 49 blink::WebCryptoKeyTypeSecret, 50 extractable, 51 algorithm, 52 usage_mask); 53 return Status::Success(); 54} 55 56} // namespace webcrypto 57 58} // namespace content 59