| Index: net/cert/internal/signature_algorithm.h
|
| diff --git a/net/cert/internal/signature_algorithm.h b/net/cert/internal/signature_algorithm.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9ecf252d6712032d672b794c9777f34d0c56e9e6
|
| --- /dev/null
|
| +++ b/net/cert/internal/signature_algorithm.h
|
| @@ -0,0 +1,114 @@
|
| +// Copyright 2015 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef NET_CERT_INTERNAL_SIGNATURE_ALGORITHM_H_
|
| +#define NET_CERT_INTERNAL_SIGNATURE_ALGORITHM_H_
|
| +
|
| +#include <stdint.h>
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/compiler_specific.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "net/base/net_export.h"
|
| +
|
| +namespace net {
|
| +
|
| +namespace der {
|
| +class Input;
|
| +} // namespace der
|
| +
|
| +// The digest algorithm used within a signature.
|
| +enum class DigestAlgorithm {
|
| + Sha1,
|
| + Sha256,
|
| + Sha384,
|
| + Sha512,
|
| +};
|
| +
|
| +// The signature scheme used within a signature. Parameters are specified
|
| +// separately.
|
| +enum class SignatureAlgorithmId {
|
| + RsaPkcs1, // RSA PKCS#1 v1.5
|
| + RsaPss, // RSASSA-PSS
|
| + Ecdsa, // ECDSA
|
| +};
|
| +
|
| +// Base class for describing algorithm parameters.
|
| +class NET_EXPORT SignatureAlgorithmParameters {
|
| + public:
|
| + SignatureAlgorithmParameters() {}
|
| + virtual ~SignatureAlgorithmParameters(){};
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(SignatureAlgorithmParameters);
|
| +};
|
| +
|
| +// Parameters for an RSASSA-PSS signature algorithm.
|
| +//
|
| +// The trailer is assumed to be 1 and the mask generation algorithm to be MGF1,
|
| +// as that is all that is implemented, and any other values while parsing the
|
| +// AlgorithmIdentifier will thus be rejected.
|
| +class NET_EXPORT RsaPssParameters : public SignatureAlgorithmParameters {
|
| + public:
|
| + RsaPssParameters(DigestAlgorithm mgf1_hash, uint32_t salt_length);
|
| +
|
| + bool Equals(const RsaPssParameters* other) const;
|
| +
|
| + DigestAlgorithm mgf1_hash() const { return mgf1_hash_; }
|
| + uint32_t salt_length() const { return salt_length_; }
|
| +
|
| + private:
|
| + const DigestAlgorithm mgf1_hash_;
|
| + const uint32_t salt_length_;
|
| +};
|
| +
|
| +// SignatureAlgorithm describes a signature algorithm and its parameters. This
|
| +// corresponds to "AlgorithmIdentifier" from RFC 5280.
|
| +class NET_EXPORT SignatureAlgorithm {
|
| + public:
|
| + ~SignatureAlgorithm();
|
| +
|
| + SignatureAlgorithmId algorithm() const { return algorithm_; }
|
| + DigestAlgorithm digest() const { return digest_; }
|
| +
|
| + // Creates a SignatureAlgorithm by parsing a DER-encoded "AlgorithmIdentifier"
|
| + // (RFC 5280). Returns nullptr on failure.
|
| + static scoped_ptr<SignatureAlgorithm> CreateFromDer(
|
| + const der::Input& algorithm_identifier);
|
| +
|
| + // Creates a new SignatureAlgorithm with the given type and parameters.
|
| + static scoped_ptr<SignatureAlgorithm> CreateRsaPkcs1(DigestAlgorithm digest);
|
| + static scoped_ptr<SignatureAlgorithm> CreateEcdsa(DigestAlgorithm digest);
|
| + static scoped_ptr<SignatureAlgorithm> CreateRsaPss(DigestAlgorithm digest,
|
| + DigestAlgorithm mgf1_hash,
|
| + uint32_t salt_length);
|
| +
|
| + // Returns true if |*this| is equivalent to |other|. This compares both the
|
| + // algorithm ID and each parameter for equality.
|
| + bool Equals(const SignatureAlgorithm& other) const WARN_UNUSED_RESULT;
|
| +
|
| + // The following methods retrieve the parameters for the signature algorithm.
|
| + //
|
| + // The correct parameters should be chosen based on the algorithm ID. For
|
| + // instance a SignatureAlgorithm with |algorithm() == RsaPss| should retrieve
|
| + // parameters via ParametersForRsaPss().
|
| + //
|
| + // The returned pointer is non-owned, and has the same lifetime as |this|.
|
| + const RsaPssParameters* ParamsForRsaPss() const;
|
| +
|
| + private:
|
| + SignatureAlgorithm(SignatureAlgorithmId algorithm,
|
| + DigestAlgorithm digest,
|
| + scoped_ptr<SignatureAlgorithmParameters> params);
|
| +
|
| + const SignatureAlgorithmId algorithm_;
|
| + const DigestAlgorithm digest_;
|
| + const scoped_ptr<SignatureAlgorithmParameters> params_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(SignatureAlgorithm);
|
| +};
|
| +
|
| +} // namespace net
|
| +
|
| +#endif // NET_CERT_INTERNAL_SIGNATURE_ALGORITHM_H_
|
|
|