Index: content/renderer/webcrypto/webcrypto_impl_openssl.cc |
diff --git a/content/renderer/webcrypto/webcrypto_impl_openssl.cc b/content/renderer/webcrypto/webcrypto_impl_openssl.cc |
index 3170b28b987aac50f1045c9088816e453c59cb05..9faf51da7be1d463314f350038b260be8055af95 100644 |
--- a/content/renderer/webcrypto/webcrypto_impl_openssl.cc |
+++ b/content/renderer/webcrypto/webcrypto_impl_openssl.cc |
@@ -157,6 +157,24 @@ bool AesCbcEncryptDecrypt(CipherOperation cipher_operation, |
return true; |
} |
+bool ExportKeyInternalRaw( |
+ const blink::WebCryptoKey& key, |
+ blink::WebArrayBuffer* buffer) { |
+ |
+ DCHECK(key.handle()); |
+ DCHECK(buffer); |
+ |
+ if (key.type() != blink::WebCryptoKeyTypeSecret || !key.extractable()) |
+ return false; |
+ |
+ const SymKeyHandle* sym_key = reinterpret_cast<SymKeyHandle*>(key.handle()); |
+ |
+ *buffer = webcrypto::CreateArrayBuffer( |
+ webcrypto::Uint8VectorStart(sym_key->key()), sym_key->key().size()); |
+ |
+ return true; |
+} |
+ |
} // namespace |
void WebCryptoImpl::Init() { crypto::EnsureOpenSSLInit(); } |
@@ -370,10 +388,18 @@ bool WebCryptoImpl::ExportKeyInternal( |
blink::WebCryptoKeyFormat format, |
const blink::WebCryptoKey& key, |
blink::WebArrayBuffer* buffer) { |
- // TODO(padolph): Implement raw export |
- // TODO(padolph): Implement spki export |
- // TODO(padolph): Implement pkcs8 export |
- // TODO(padolph): Implement jwk export |
+ switch (format) { |
+ case blink::WebCryptoKeyFormatRaw: |
+ return ExportKeyInternalRaw(key, buffer); |
+ case blink::WebCryptoKeyFormatSpki: |
+ // TODO(padolph): Implement spki export |
+ return false; |
+ case blink::WebCryptoKeyFormatPkcs8: |
+ // TODO(padolph): Implement pkcs8 export |
+ return false; |
+ default: |
+ return false; |
+ } |
return false; |
} |