// Copyright 2015 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_GCM_MESSAGE_CRYPTOGRAPHER_H_ #define COMPONENTS_GCM_DRIVER_CRYPTO_GCM_MESSAGE_CRYPTOGRAPHER_H_ #include <stddef.h> #include <stdint.h> #include <memory> #include <string> #include <string_view> #include "base/gtest_prod_util.h" namespace gcm { // Messages delivered through GCM may be encrypted according to the IETF Web // Push protocol. We support two versions of ietf-webpush-encryption. The user // of this class must pass in the version to use when constructing an instance. // // https://tools.ietf.org/html/draft-ietf-webpush-encryption-03 // https://tools.ietf.org/html/draft-ietf-webpush-encryption-08 (WGLC) // // This class implements the ability to encrypt or decrypt such messages using // AEAD_AES_128_GCM with a 16-octet authentication tag. The encrypted payload // will be stored in a single record. // // Note that while this class is not responsible for creating or storing the // actual keys, it uses a key derivation function for the actual message // encryption/decryption, thus allowing for the safe re-use of keys in multiple // messages provided that a cryptographically-strong random salt is used. class GCMMessageCryptographer { … }; } // namespace gcm #endif // COMPONENTS_GCM_DRIVER_CRYPTO_GCM_MESSAGE_CRYPTOGRAPHER_H_