|  | // Copyright 2017 The Chromium Authors | 
|  | // | 
|  | // Licensed under the Apache License, Version 2.0 (the "License"); | 
|  | // you may not use this file except in compliance with the License. | 
|  | // You may obtain a copy of the License at | 
|  | // | 
|  | //     https://www.apache.org/licenses/LICENSE-2.0 | 
|  | // | 
|  | // Unless required by applicable law or agreed to in writing, software | 
|  | // distributed under the License is distributed on an "AS IS" BASIS, | 
|  | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
|  | // See the License for the specific language governing permissions and | 
|  | // limitations under the License. | 
|  |  | 
|  | #ifndef BSSL_PKI_SIMPLE_PATH_BUILDER_DELEGATE_H_ | 
|  | #define BSSL_PKI_SIMPLE_PATH_BUILDER_DELEGATE_H_ | 
|  |  | 
|  | #include <stddef.h> | 
|  |  | 
|  | #include <openssl/base.h> | 
|  | #include <openssl/pki/signature_verify_cache.h> | 
|  |  | 
|  | #include "path_builder.h" | 
|  | #include "signature_algorithm.h" | 
|  |  | 
|  | BSSL_NAMESPACE_BEGIN | 
|  |  | 
|  | class CertErrors; | 
|  |  | 
|  | // SimplePathBuilderDelegate is an implementation of CertPathBuilderDelegate | 
|  | // that uses some default policies: | 
|  | // | 
|  | //   * RSA public keys must be >= |min_rsa_modulus_length_bits|. | 
|  | //   * Signature algorithm can be RSA PKCS#1, RSASSA-PSS or ECDSA | 
|  | //   * Digest algorithm can be SHA256, SHA348 or SHA512. | 
|  | //       * If the |digest_policy| was set to kAllowSha1, then SHA1 is | 
|  | //         additionally accepted. | 
|  | //   * EC named curve can be P-256, P-384, P-521. | 
|  | class OPENSSL_EXPORT SimplePathBuilderDelegate | 
|  | : public CertPathBuilderDelegate { | 
|  | public: | 
|  | enum class DigestPolicy { | 
|  | // Accepts digests of SHA256, SHA348 or SHA512 | 
|  | kStrong, | 
|  |  | 
|  | // Accepts everything that kStrong does, plus SHA1. | 
|  | kWeakAllowSha1, | 
|  |  | 
|  | kMaxValue = kWeakAllowSha1 | 
|  | }; | 
|  |  | 
|  | // Error emitted when a public key is rejected because it is an RSA key with a | 
|  | // modulus size that is too small. | 
|  | static const CertErrorId kRsaModulusTooSmall; | 
|  |  | 
|  | SimplePathBuilderDelegate(size_t min_rsa_modulus_length_bits, | 
|  | DigestPolicy digest_policy); | 
|  |  | 
|  | // Accepts RSA PKCS#1, RSASSA-PSS or ECDA using any of the SHA* digests | 
|  | // (including SHA1). | 
|  | bool IsSignatureAlgorithmAcceptable(SignatureAlgorithm signature_algorithm, | 
|  | CertErrors *errors) override; | 
|  |  | 
|  | // Requires RSA keys be >= |min_rsa_modulus_length_bits_|. | 
|  | bool IsPublicKeyAcceptable(EVP_PKEY *public_key, CertErrors *errors) override; | 
|  |  | 
|  | // No-op implementation. | 
|  | void CheckPathAfterVerification(const CertPathBuilder &path_builder, | 
|  | CertPathBuilderResultPath *path) override; | 
|  |  | 
|  | // No-op implementation. | 
|  | bool IsDeadlineExpired() override; | 
|  |  | 
|  | // No-op implementation. | 
|  | SignatureVerifyCache *GetVerifyCache() override; | 
|  |  | 
|  | // No-op implementation. | 
|  | bool IsDebugLogEnabled() override; | 
|  |  | 
|  | // No-op implementation. | 
|  | void DebugLog(std::string_view msg) override; | 
|  |  | 
|  | // No-op implementation. | 
|  | bool AcceptPreCertificates() override; | 
|  |  | 
|  | private: | 
|  | const size_t min_rsa_modulus_length_bits_; | 
|  | const DigestPolicy digest_policy_; | 
|  | }; | 
|  |  | 
|  | BSSL_NAMESPACE_END | 
|  |  | 
|  | #endif  // BSSL_PKI_SIMPLE_PATH_BUILDER_DELEGATE_H_ |