| // Copyright 2014 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 CONTENT_CHILD_WEBCRYPTO_WEBCRYPTO_IMPL_H_ |
| #define CONTENT_CHILD_WEBCRYPTO_WEBCRYPTO_IMPL_H_ |
| |
| #include "base/basictypes.h" |
| #include "base/compiler_specific.h" |
| #include "third_party/WebKit/public/platform/WebCrypto.h" |
| #include "third_party/WebKit/public/platform/WebCryptoAlgorithm.h" |
| #include "third_party/WebKit/public/platform/WebVector.h" |
| |
| namespace content { |
| |
| // Wrapper around the Blink WebCrypto asynchronous interface, which forwards to |
| // the synchronous platform (NSS or OpenSSL) implementation. |
| // |
| // WebCryptoImpl is threadsafe. |
| // |
| // EnsureInit() must be called prior to using methods on WebCryptoImpl(). |
| class WebCryptoImpl : public blink::WebCrypto { |
| public: |
| WebCryptoImpl(); |
| |
| // TODO(eroman): Once Blink and Chromium repositories are merged, use |
| // "override" in place of virtual. |
| |
| virtual ~WebCryptoImpl(); |
| |
| virtual void encrypt(const blink::WebCryptoAlgorithm& algorithm, |
| const blink::WebCryptoKey& key, |
| const unsigned char* data, |
| unsigned int data_size, |
| blink::WebCryptoResult result); |
| virtual void decrypt(const blink::WebCryptoAlgorithm& algorithm, |
| const blink::WebCryptoKey& key, |
| const unsigned char* data, |
| unsigned int data_size, |
| blink::WebCryptoResult result); |
| virtual void digest(const blink::WebCryptoAlgorithm& algorithm, |
| const unsigned char* data, |
| unsigned int data_size, |
| blink::WebCryptoResult result); |
| virtual void generateKey(const blink::WebCryptoAlgorithm& algorithm, |
| bool extractable, |
| blink::WebCryptoKeyUsageMask usages, |
| blink::WebCryptoResult result); |
| virtual void importKey(blink::WebCryptoKeyFormat format, |
| const unsigned char* key_data, |
| unsigned int key_data_size, |
| const blink::WebCryptoAlgorithm& algorithm, |
| bool extractable, |
| blink::WebCryptoKeyUsageMask usages, |
| blink::WebCryptoResult result); |
| virtual void exportKey(blink::WebCryptoKeyFormat format, |
| const blink::WebCryptoKey& key, |
| blink::WebCryptoResult result); |
| virtual void sign(const blink::WebCryptoAlgorithm& algorithm, |
| const blink::WebCryptoKey& key, |
| const unsigned char* data, |
| unsigned int data_size, |
| blink::WebCryptoResult result); |
| virtual void verifySignature(const blink::WebCryptoAlgorithm& algorithm, |
| const blink::WebCryptoKey& key, |
| const unsigned char* signature, |
| unsigned int signature_size, |
| const unsigned char* data, |
| unsigned int data_size, |
| blink::WebCryptoResult result); |
| virtual void wrapKey(blink::WebCryptoKeyFormat format, |
| const blink::WebCryptoKey& key, |
| const blink::WebCryptoKey& wrapping_key, |
| const blink::WebCryptoAlgorithm& wrap_algorithm, |
| blink::WebCryptoResult result); |
| virtual void unwrapKey( |
| blink::WebCryptoKeyFormat format, |
| const unsigned char* wrapped_key, |
| unsigned wrapped_key_size, |
| const blink::WebCryptoKey& wrapping_key, |
| const blink::WebCryptoAlgorithm& unwrap_algorithm, |
| const blink::WebCryptoAlgorithm& unwrapped_key_algorithm, |
| bool extractable, |
| blink::WebCryptoKeyUsageMask usages, |
| blink::WebCryptoResult result); |
| |
| // This method returns a digestor object that can be used to synchronously |
| // compute a digest one chunk at a time. Thus, the consume does not need to |
| // hold onto a large buffer with all the data to digest. Chunks can be given |
| // one at a time and the digest will be computed piecemeal. The allocated |
| // WebCrytpoDigestor that is returned by createDigestor must be freed by the |
| // caller. |
| virtual blink::WebCryptoDigestor* createDigestor( |
| blink::WebCryptoAlgorithmId algorithm_id); |
| |
| virtual bool deserializeKeyForClone( |
| const blink::WebCryptoKeyAlgorithm& algorithm, |
| blink::WebCryptoKeyType type, |
| bool extractable, |
| blink::WebCryptoKeyUsageMask usages, |
| const unsigned char* key_data, |
| unsigned key_data_size, |
| blink::WebCryptoKey& key); |
| |
| virtual bool serializeKeyForClone(const blink::WebCryptoKey& key, |
| blink::WebVector<unsigned char>& key_data); |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(WebCryptoImpl); |
| }; |
| |
| } // namespace content |
| |
| #endif // CONTENT_CHILD_WEBCRYPTO_WEBCRYPTO_IMPL_H_ |