// Copyright 2017 The Chromium Authors // 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_MESSAGE_PAYLOAD_PARSER_H_ #define COMPONENTS_GCM_DRIVER_CRYPTO_MESSAGE_PAYLOAD_PARSER_H_ #include <stdint.h> #include <optional> #include <string_view> #include "base/check.h" namespace gcm { enum class GCMDecryptionResult; // Parses and validates the binary message payload included in messages that // are encrypted per draft-ietf-webpush-encryption-08: // // https://tools.ietf.org/html/draft-ietf-httpbis-encryption-encoding-08#section-2.1 // // In summary, such messages start with a binary header block that includes the // parameters needed to decrypt the content, other than the key. All content // following this binary header is considered the ciphertext. // // +-----------+--------+-----------+-----------------+ // | salt (16) | rs (4) | idlen (1) | public_key (65) | // +-----------+--------+-----------+-----------------+ // // Specific to Web Push encryption, the `public_key` parameter of this header // must be set to the ECDH public key of the sender. This is a point on the // P-256 elliptic curve in uncompressed form, 65 bytes long starting with 0x04. // // https://tools.ietf.org/html/draft-ietf-webpush-encryption-08#section-3.1 class MessagePayloadParser { … }; } // namespace gcm #endif // COMPONENTS_GCM_DRIVER_CRYPTO_MESSAGE_PAYLOAD_PARSER_H_