1// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef NET_BASE_SSL_INFO_H_
6#define NET_BASE_SSL_INFO_H_
7#pragma once
8
9#include <vector>
10
11#include "base/memory/ref_counted.h"
12#include "net/base/net_export.h"
13#include "net/base/x509_cert_types.h"
14
15namespace net {
16
17class X509Certificate;
18
19// SSL connection info.
20// This is really a struct.  All members are public.
21class NET_EXPORT SSLInfo {
22 public:
23  SSLInfo();
24  SSLInfo(const SSLInfo& info);
25  ~SSLInfo();
26  SSLInfo& operator=(const SSLInfo& info);
27
28  void Reset();
29
30  bool is_valid() const { return cert != NULL; }
31
32  // Adds the specified |error| to the cert status.
33  void SetCertError(int error);
34
35  // The SSL certificate.
36  scoped_refptr<X509Certificate> cert;
37
38  // Bitmask of status info of |cert|, representing, for example, known errors
39  // and extended validation (EV) status.
40  // See cert_status_flags.h for values.
41  int cert_status;
42
43  // The security strength, in bits, of the SSL cipher suite.
44  // 0 means the connection is not encrypted.
45  // -1 means the security strength is unknown.
46  int security_bits;
47
48  // Information about the SSL connection itself. See
49  // ssl_connection_status_flags.h for values. The protocol version,
50  // ciphersuite, and compression in use are encoded within.
51  int connection_status;
52
53  // If the certificate is valid, then this is true iff it was rooted at a
54  // standard CA root. (As opposed to a user-installed root.)
55  bool is_issued_by_known_root;
56
57  // The hashes of the SubjectPublicKeyInfos from each certificate in the chain.
58  std::vector<SHA1Fingerprint> public_key_hashes;
59};
60
61}  // namespace net
62
63#endif  // NET_BASE_SSL_INFO_H_
64