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 16 namespace content { 17 18 namespace webcrypto { 19 20 Status 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 43 Status 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