// Copyright 2014 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_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ #define COMPONENTS_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_ #include <stdint.h> #include <memory> #include <optional> #include <vector> #include "base/containers/span.h" #include "third_party/blink/public/platform/web_crypto.h" namespace webcrypto { class GenerateKeyResult; class Status; // AlgorithmImplementation is a base class for *executing* the operations of an // algorithm (generating keys, encrypting, signing, etc.). // // This is in contrast to blink::WebCryptoAlgorithm which instead *describes* // the operation and its parameters. // // AlgorithmImplementation has reasonable default implementations for all // methods which behave as if the operation is it is unsupported, so // implementations need only override the applicable methods. // // Unless stated otherwise methods of AlgorithmImplementation are responsible // for sanitizing their inputs. The following can be assumed: // // * |algorithm.id()| and |key.algorithm.id()| matches the algorithm under // which the implementation was registerd. // * |algorithm| has the correct parameters type for the operation. // * The key usages have already been verified. In fact in the case of calls // to Encrypt()/Decrypt() the corresponding key usages may not be present // (when wrapping/unwrapping). class AlgorithmImplementation { … }; } // namespace webcrypto #endif // COMPONENTS_WEBCRYPTO_ALGORITHM_IMPLEMENTATION_H_