| // Copyright 2015 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 COMPONENTS_GCM_DRIVER_CRYPTO_ENCRYPTION_HEADER_PARSERS_H_ |
| #define COMPONENTS_GCM_DRIVER_CRYPTO_ENCRYPTION_HEADER_PARSERS_H_ |
| |
| #include <stdint.h> |
| #include <string> |
| #include <vector> |
| |
| #include "base/strings/string_piece.h" |
| #include "net/http/http_util.h" |
| |
| namespace gcm { |
| |
| // Iterates over a header that follows the syntax of the Encryption HTTP header |
| // per the Encrypted Content-Encoding for HTTP draft. This header follows the |
| // #list syntax from the extended ABNF syntax defined in section 1.2 of RFC7230. |
| // |
| // https://tools.ietf.org/html/draft-thomson-http-encryption#section-3 |
| // https://tools.ietf.org/html/rfc7230#section-1.2 |
| class EncryptionHeaderIterator { |
| public: |
| EncryptionHeaderIterator(std::string::const_iterator header_begin, |
| std::string::const_iterator header_end); |
| ~EncryptionHeaderIterator(); |
| |
| // Advances the iterator to the next header value, if any. Returns true if |
| // there is a next value. Use the keyid(), salt() and rs() methods to access |
| // the key-value pairs included in the header value. |
| bool GetNext(); |
| |
| const std::string& keyid() const { |
| return keyid_; |
| } |
| |
| const std::string& salt() const { |
| return salt_; |
| } |
| |
| uint64_t rs() const { |
| return rs_; |
| } |
| |
| private: |
| net::HttpUtil::ValuesIterator iterator_; |
| |
| std::string keyid_; |
| std::string salt_; |
| uint64_t rs_; |
| }; |
| |
| // Iterates over a header that follows the syntax of the Crypto-Key HTTP header |
| // per the Encrypted Content-Encoding for HTTP draft. This header follows the |
| // #list syntax from the extended ABNF syntax defined in section 1.2 of RFC7230. |
| // |
| // https://tools.ietf.org/html/draft-thomson-http-encryption#section-4 |
| // https://tools.ietf.org/html/rfc7230#section-1.2 |
| class CryptoKeyHeaderIterator { |
| public: |
| CryptoKeyHeaderIterator(std::string::const_iterator header_begin, |
| std::string::const_iterator header_end); |
| ~CryptoKeyHeaderIterator(); |
| |
| // Advances the iterator to the next header value, if any. Returns true if |
| // there is a next value. Use the keyid(), aesgcm128() and dh() methods to |
| // access the key-value pairs included in the header value. |
| bool GetNext(); |
| |
| const std::string& keyid() const { |
| return keyid_; |
| } |
| |
| const std::string& aesgcm128() const { |
| return aesgcm128_; |
| } |
| |
| const std::string& dh() const { |
| return dh_; |
| } |
| |
| private: |
| net::HttpUtil::ValuesIterator iterator_; |
| |
| std::string keyid_; |
| std::string aesgcm128_; |
| std::string dh_; |
| }; |
| |
| } // namespace gcm |
| |
| #endif // COMPONENTS_GCM_DRIVER_CRYPTO_ENCRYPTION_HEADER_PARSERS_H_ |