| OLD | NEW |
| (Empty) |
| 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 #ifndef CONTENT_CHILD_WEBCRYPTO_NSS_KEY_NSS_H_ | |
| 6 #define CONTENT_CHILD_WEBCRYPTO_NSS_KEY_NSS_H_ | |
| 7 | |
| 8 #include <stdint.h> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "crypto/scoped_nss_types.h" | |
| 12 #include "third_party/WebKit/public/platform/WebCryptoKey.h" | |
| 13 | |
| 14 namespace content { | |
| 15 | |
| 16 namespace webcrypto { | |
| 17 | |
| 18 class CryptoData; | |
| 19 class PrivateKeyNss; | |
| 20 class PublicKeyNss; | |
| 21 class SymKeyNss; | |
| 22 | |
| 23 // Base key class for all NSS keys, used to safely cast between types. Each key | |
| 24 // maintains a copy of its serialized form in either 'raw', 'pkcs8', or 'spki' | |
| 25 // format. This is to allow structured cloning of keys synchronously from the | |
| 26 // target Blink thread without having to lock access to the key. | |
| 27 class KeyNss : public blink::WebCryptoKeyHandle { | |
| 28 public: | |
| 29 explicit KeyNss(const CryptoData& serialized_key_data); | |
| 30 ~KeyNss() override; | |
| 31 | |
| 32 virtual SymKeyNss* AsSymKey(); | |
| 33 virtual PublicKeyNss* AsPublicKey(); | |
| 34 virtual PrivateKeyNss* AsPrivateKey(); | |
| 35 | |
| 36 const std::vector<uint8_t>& serialized_key_data() const { | |
| 37 return serialized_key_data_; | |
| 38 } | |
| 39 | |
| 40 private: | |
| 41 const std::vector<uint8_t> serialized_key_data_; | |
| 42 }; | |
| 43 | |
| 44 class SymKeyNss : public KeyNss { | |
| 45 public: | |
| 46 ~SymKeyNss() override; | |
| 47 SymKeyNss(crypto::ScopedPK11SymKey key, const CryptoData& raw_key_data); | |
| 48 | |
| 49 static SymKeyNss* Cast(const blink::WebCryptoKey& key); | |
| 50 | |
| 51 PK11SymKey* key() { return key_.get(); } | |
| 52 SymKeyNss* AsSymKey() override; | |
| 53 | |
| 54 const std::vector<uint8_t>& raw_key_data() const { | |
| 55 return serialized_key_data(); | |
| 56 } | |
| 57 | |
| 58 private: | |
| 59 crypto::ScopedPK11SymKey key_; | |
| 60 | |
| 61 DISALLOW_COPY_AND_ASSIGN(SymKeyNss); | |
| 62 }; | |
| 63 | |
| 64 class PublicKeyNss : public KeyNss { | |
| 65 public: | |
| 66 ~PublicKeyNss() override; | |
| 67 PublicKeyNss(crypto::ScopedSECKEYPublicKey key, const CryptoData& spki_data); | |
| 68 | |
| 69 static PublicKeyNss* Cast(const blink::WebCryptoKey& key); | |
| 70 | |
| 71 SECKEYPublicKey* key() { return key_.get(); } | |
| 72 PublicKeyNss* AsPublicKey() override; | |
| 73 | |
| 74 const std::vector<uint8_t>& spki_data() const { | |
| 75 return serialized_key_data(); | |
| 76 } | |
| 77 | |
| 78 private: | |
| 79 crypto::ScopedSECKEYPublicKey key_; | |
| 80 | |
| 81 DISALLOW_COPY_AND_ASSIGN(PublicKeyNss); | |
| 82 }; | |
| 83 | |
| 84 class PrivateKeyNss : public KeyNss { | |
| 85 public: | |
| 86 ~PrivateKeyNss() override; | |
| 87 PrivateKeyNss(crypto::ScopedSECKEYPrivateKey key, | |
| 88 const CryptoData& pkcs8_data); | |
| 89 | |
| 90 static PrivateKeyNss* Cast(const blink::WebCryptoKey& key); | |
| 91 | |
| 92 SECKEYPrivateKey* key() { return key_.get(); } | |
| 93 PrivateKeyNss* AsPrivateKey() override; | |
| 94 | |
| 95 const std::vector<uint8_t>& pkcs8_data() const { | |
| 96 return serialized_key_data(); | |
| 97 } | |
| 98 | |
| 99 private: | |
| 100 crypto::ScopedSECKEYPrivateKey key_; | |
| 101 | |
| 102 DISALLOW_COPY_AND_ASSIGN(PrivateKeyNss); | |
| 103 }; | |
| 104 | |
| 105 } // namespace webcrypto | |
| 106 | |
| 107 } // namespace content | |
| 108 | |
| 109 #endif // CONTENT_CHILD_WEBCRYPTO_NSS_KEY_NSS_H_ | |
| OLD | NEW |