| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef CONTENT_CHILD_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ | 5 #ifndef CONTENT_CHILD_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ |
| 6 #define CONTENT_CHILD_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ | 6 #define CONTENT_CHILD_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ |
| 7 | 7 |
| 8 #include <stdint.h> | 8 #include <stdint.h> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 67 const CryptoData& data, | 67 const CryptoData& data, |
| 68 bool* signature_match) const; | 68 bool* signature_match) const; |
| 69 | 69 |
| 70 // This method corresponds to Web Crypto's crypto.subtle.digest(). | 70 // This method corresponds to Web Crypto's crypto.subtle.digest(). |
| 71 virtual Status Digest(const blink::WebCryptoAlgorithm& algorithm, | 71 virtual Status Digest(const blink::WebCryptoAlgorithm& algorithm, |
| 72 const CryptoData& data, | 72 const CryptoData& data, |
| 73 std::vector<uint8_t>* buffer) const; | 73 std::vector<uint8_t>* buffer) const; |
| 74 | 74 |
| 75 // This method corresponds to Web Crypto's crypto.subtle.generateKey(). | 75 // This method corresponds to Web Crypto's crypto.subtle.generateKey(). |
| 76 // | 76 // |
| 77 // Implementations MUST verify |usage_mask| and return an error if it is not | 77 // Implementations MUST verify |usages| and return an error if it is not |
| 78 // appropriate. | 78 // appropriate. |
| 79 virtual Status GenerateKey(const blink::WebCryptoAlgorithm& algorithm, | 79 virtual Status GenerateKey(const blink::WebCryptoAlgorithm& algorithm, |
| 80 bool extractable, | 80 bool extractable, |
| 81 blink::WebCryptoKeyUsageMask usage_mask, | 81 blink::WebCryptoKeyUsageMask usages, |
| 82 GenerateKeyResult* result) const; | 82 GenerateKeyResult* result) const; |
| 83 | 83 |
| 84 // ----------------------------------------------- | 84 // ----------------------------------------------- |
| 85 // Key import | 85 // Key import |
| 86 // ----------------------------------------------- | 86 // ----------------------------------------------- |
| 87 | 87 |
| 88 // VerifyKeyUsagesBeforeImportKey() must be called before either | 88 // VerifyKeyUsagesBeforeImportKey() must be called before either |
| 89 // importing a key, or unwrapping a key. | 89 // importing a key, or unwrapping a key. |
| 90 // | 90 // |
| 91 // Implementations should return an error if the requested usages are invalid | 91 // Implementations should return an error if the requested usages are invalid |
| 92 // when importing for the specified format. | 92 // when importing for the specified format. |
| 93 // | 93 // |
| 94 // For instance, importing an RSA-SSA key with 'spki' format and Sign usage | 94 // For instance, importing an RSA-SSA key with 'spki' format and Sign usage |
| 95 // is invalid. The 'spki' format implies it will be a public key, and public | 95 // is invalid. The 'spki' format implies it will be a public key, and public |
| 96 // keys do not support signing. | 96 // keys do not support signing. |
| 97 // | 97 // |
| 98 // When called with format=JWK the key type may be unknown. The | 98 // When called with format=JWK the key type may be unknown. The |
| 99 // ImportKeyJwk() must do the final usage check. | 99 // ImportKeyJwk() must do the final usage check. |
| 100 virtual Status VerifyKeyUsagesBeforeImportKey( | 100 virtual Status VerifyKeyUsagesBeforeImportKey( |
| 101 blink::WebCryptoKeyFormat format, | 101 blink::WebCryptoKeyFormat format, |
| 102 blink::WebCryptoKeyUsageMask usage_mask) const; | 102 blink::WebCryptoKeyUsageMask usages) const; |
| 103 | 103 |
| 104 // This method corresponds to Web Crypto's | 104 // This method corresponds to Web Crypto's |
| 105 // crypto.subtle.importKey(format='raw'). | 105 // crypto.subtle.importKey(format='raw'). |
| 106 virtual Status ImportKeyRaw(const CryptoData& key_data, | 106 virtual Status ImportKeyRaw(const CryptoData& key_data, |
| 107 const blink::WebCryptoAlgorithm& algorithm, | 107 const blink::WebCryptoAlgorithm& algorithm, |
| 108 bool extractable, | 108 bool extractable, |
| 109 blink::WebCryptoKeyUsageMask usage_mask, | 109 blink::WebCryptoKeyUsageMask usages, |
| 110 blink::WebCryptoKey* key) const; | 110 blink::WebCryptoKey* key) const; |
| 111 | 111 |
| 112 // This method corresponds to Web Crypto's | 112 // This method corresponds to Web Crypto's |
| 113 // crypto.subtle.importKey(format='pkcs8'). | 113 // crypto.subtle.importKey(format='pkcs8'). |
| 114 virtual Status ImportKeyPkcs8(const CryptoData& key_data, | 114 virtual Status ImportKeyPkcs8(const CryptoData& key_data, |
| 115 const blink::WebCryptoAlgorithm& algorithm, | 115 const blink::WebCryptoAlgorithm& algorithm, |
| 116 bool extractable, | 116 bool extractable, |
| 117 blink::WebCryptoKeyUsageMask usage_mask, | 117 blink::WebCryptoKeyUsageMask usages, |
| 118 blink::WebCryptoKey* key) const; | 118 blink::WebCryptoKey* key) const; |
| 119 | 119 |
| 120 // This method corresponds to Web Crypto's | 120 // This method corresponds to Web Crypto's |
| 121 // crypto.subtle.importKey(format='spki'). | 121 // crypto.subtle.importKey(format='spki'). |
| 122 virtual Status ImportKeySpki(const CryptoData& key_data, | 122 virtual Status ImportKeySpki(const CryptoData& key_data, |
| 123 const blink::WebCryptoAlgorithm& algorithm, | 123 const blink::WebCryptoAlgorithm& algorithm, |
| 124 bool extractable, | 124 bool extractable, |
| 125 blink::WebCryptoKeyUsageMask usage_mask, | 125 blink::WebCryptoKeyUsageMask usages, |
| 126 blink::WebCryptoKey* key) const; | 126 blink::WebCryptoKey* key) const; |
| 127 | 127 |
| 128 // This method corresponds to Web Crypto's | 128 // This method corresponds to Web Crypto's |
| 129 // crypto.subtle.importKey(format='jwk'). | 129 // crypto.subtle.importKey(format='jwk'). |
| 130 virtual Status ImportKeyJwk(const CryptoData& key_data, | 130 virtual Status ImportKeyJwk(const CryptoData& key_data, |
| 131 const blink::WebCryptoAlgorithm& algorithm, | 131 const blink::WebCryptoAlgorithm& algorithm, |
| 132 bool extractable, | 132 bool extractable, |
| 133 blink::WebCryptoKeyUsageMask usage_mask, | 133 blink::WebCryptoKeyUsageMask usages, |
| 134 blink::WebCryptoKey* key) const; | 134 blink::WebCryptoKey* key) const; |
| 135 | 135 |
| 136 // ----------------------------------------------- | 136 // ----------------------------------------------- |
| 137 // Key export | 137 // Key export |
| 138 // ----------------------------------------------- | 138 // ----------------------------------------------- |
| 139 | 139 |
| 140 virtual Status ExportKeyRaw(const blink::WebCryptoKey& key, | 140 virtual Status ExportKeyRaw(const blink::WebCryptoKey& key, |
| 141 std::vector<uint8_t>* buffer) const; | 141 std::vector<uint8_t>* buffer) const; |
| 142 | 142 |
| 143 virtual Status ExportKeyPkcs8(const blink::WebCryptoKey& key, | 143 virtual Status ExportKeyPkcs8(const blink::WebCryptoKey& key, |
| 144 std::vector<uint8_t>* buffer) const; | 144 std::vector<uint8_t>* buffer) const; |
| 145 | 145 |
| 146 virtual Status ExportKeySpki(const blink::WebCryptoKey& key, | 146 virtual Status ExportKeySpki(const blink::WebCryptoKey& key, |
| 147 std::vector<uint8_t>* buffer) const; | 147 std::vector<uint8_t>* buffer) const; |
| 148 | 148 |
| 149 virtual Status ExportKeyJwk(const blink::WebCryptoKey& key, | 149 virtual Status ExportKeyJwk(const blink::WebCryptoKey& key, |
| 150 std::vector<uint8_t>* buffer) const; | 150 std::vector<uint8_t>* buffer) const; |
| 151 }; | 151 }; |
| 152 | 152 |
| 153 } // namespace webcrypto | 153 } // namespace webcrypto |
| 154 | 154 |
| 155 } // namespace content | 155 } // namespace content |
| 156 | 156 |
| 157 #endif // CONTENT_CHILD_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ | 157 #endif // CONTENT_CHILD_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ |
| OLD | NEW |