| Index: components/gcm_driver/crypto/encryption_header_parsers.h
|
| diff --git a/components/gcm_driver/crypto/encryption_header_parsers.h b/components/gcm_driver/crypto/encryption_header_parsers.h
|
| index 79fe7d20ca2423fe44242291a4a67f3d120b8406..45ec454cd5e0f26aa124e0653ced93a81a933282 100644
|
| --- a/components/gcm_driver/crypto/encryption_header_parsers.h
|
| +++ b/components/gcm_driver/crypto/encryption_header_parsers.h
|
| @@ -9,55 +9,84 @@
|
| #include <string>
|
| #include <vector>
|
|
|
| -namespace gcm {
|
| +#include "base/strings/string_piece.h"
|
| +#include "net/http/http_util.h"
|
|
|
| -// Structure representing the parsed values from the Encryption HTTP header.
|
| -// |salt| is stored after having been base64url decoded.
|
| -struct EncryptionHeaderValues {
|
| - std::string keyid;
|
| - std::string salt;
|
| - uint64_t rs;
|
| -};
|
| +namespace gcm {
|
|
|
| -// Parses |input| following the syntax of the Encryption HTTP header. The parsed
|
| -// values will be stored in the |*values| argument.
|
| -//
|
| -// https://tools.ietf.org/html/draft-thomson-http-encryption-02#section-3
|
| -//
|
| -// This header follows the #list syntax from the extended ABNF syntax
|
| -// defined in section 1.2 of RFC 7230:
|
| +// 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
|
| -//
|
| -// Returns whether the |input| could be successfully parsed, and the resulting
|
| -// values are now available in the |*values| argument. Does not modify |*values|
|
| -// unless parsing was successful.
|
| -bool ParseEncryptionHeader(const std::string& input,
|
| - std::vector<EncryptionHeaderValues>* values);
|
| -
|
| -// Structure representing the parsed values from the Crypto-Key HTTP header.
|
| -// |aesgcm128| and |dh| are stored after having been base64url decoded.
|
| -struct CryptoKeyHeaderValues {
|
| - std::string keyid;
|
| - std::string aesgcm128;
|
| - std::string dh;
|
| +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_;
|
| };
|
|
|
| -// Parses |input| following the syntax of the Crypto-Key HTTP header. The parsed
|
| -// values will be stored in the |*values| argument.
|
| -//
|
| -// https://tools.ietf.org/html/draft-thomson-http-encryption-02#section-4
|
| -//
|
| -// This header follows the #list syntax from the extended ABNF syntax
|
| -// defined in section 1.2 of RFC 7230:
|
| +// 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
|
| -//
|
| -// Returns whether the |input| could be successfully parsed, and the resulting
|
| -// values are now available in the |*values| argument. Does not modify |*values|
|
| -// unless parsing was successful.
|
| -bool ParseCryptoKeyHeader(const std::string& input,
|
| - std::vector<CryptoKeyHeaderValues>* values);
|
| +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
|
|
|
|
|