summaryrefslogtreecommitdiffstats
path: root/security/manager/ssl/nsISiteSecurityService.idl
diff options
context:
space:
mode:
Diffstat (limited to 'security/manager/ssl/nsISiteSecurityService.idl')
-rw-r--r--security/manager/ssl/nsISiteSecurityService.idl257
1 files changed, 257 insertions, 0 deletions
diff --git a/security/manager/ssl/nsISiteSecurityService.idl b/security/manager/ssl/nsISiteSecurityService.idl
new file mode 100644
index 0000000000..b90a782374
--- /dev/null
+++ b/security/manager/ssl/nsISiteSecurityService.idl
@@ -0,0 +1,257 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "nsISupports.idl"
+
+interface nsIURI;
+interface nsIObserver;
+interface nsIHttpChannel;
+interface nsITransportSecurityInfo;
+interface nsISimpleEnumerator;
+
+%{C++
+#include "nsStringFwd.h"
+#include "nsTArrayForwardDeclare.h"
+namespace mozilla
+{
+ namespace pkix
+ {
+ class Time;
+ }
+}
+%}
+[ref] native nsCStringTArrayRef(nsTArray<nsCString>);
+[ref] native mozillaPkixTime(mozilla::pkix::Time);
+[ref] native const_OriginAttributesRef(const mozilla::OriginAttributes);
+
+// [infallible] attributes are only allowed on [builtinclass]
+[scriptable, uuid(31313372-842c-4110-bdf1-6aea17c845ad), builtinclass]
+interface nsISiteSecurityState : nsISupports
+{
+ [must_use]
+ readonly attribute ACString hostname;
+ [infallible] readonly attribute long long expireTime;
+ [infallible] readonly attribute short securityPropertyState;
+ [infallible] readonly attribute boolean includeSubdomains;
+
+ [implicit_jscontext, must_use]
+ readonly attribute jsval originAttributes;
+
+ /*
+ * SECURITY_PROPERTY_SET and SECURITY_PROPERTY_UNSET correspond to indicating
+ * a site has or does not have the security property in question,
+ * respectively.
+ * SECURITY_PROPERTY_KNOCKOUT indicates a value on a preloaded
+ * list is being overridden, and the associated site does not have the
+ * security property in question.
+ * SECURITY_PROPERTY_NEGATIVE is used when we've gotten a negative result from
+ * HSTS priming.
+ */
+ const short SECURITY_PROPERTY_UNSET = 0;
+ const short SECURITY_PROPERTY_SET = 1;
+ const short SECURITY_PROPERTY_KNOCKOUT = 2;
+ const short SECURITY_PROPERTY_NEGATIVE = 3;
+};
+
+// This has to be a builtinclass because it derives from a builtinclass.
+[scriptable, uuid(9ff16e40-1029-496c-95c2-bc819872b216), builtinclass]
+interface nsISiteHSTSState : nsISiteSecurityState
+{
+};
+
+[scriptable, uuid(275127f8-dbd7-4681-afbf-6df0c6587a01)]
+interface nsISiteSecurityService : nsISupports
+{
+ const uint32_t HEADER_HSTS = 0;
+ const uint32_t STATIC_PINNING = 1; // was HEADER_HPKP
+ // HEADER_OMS was 2 (but was never implemented)
+
+ const uint32_t Success = 0;
+ const uint32_t ERROR_UNKNOWN = 1;
+ const uint32_t ERROR_UNTRUSTWORTHY_CONNECTION = 2;
+ const uint32_t ERROR_COULD_NOT_PARSE_HEADER = 3;
+ const uint32_t ERROR_NO_MAX_AGE = 4;
+ const uint32_t ERROR_MULTIPLE_MAX_AGES = 5;
+ const uint32_t ERROR_INVALID_MAX_AGE = 6;
+ const uint32_t ERROR_MULTIPLE_INCLUDE_SUBDOMAINS = 7;
+ const uint32_t ERROR_INVALID_INCLUDE_SUBDOMAINS = 8;
+ // The constants that were removed below were used in HPKP processing
+ // (which has been removed entirely).
+ // ERROR_INVALID_PIN was 9
+ // ERROR_MULTIPLE_REPORT_URIS was 10
+ // ERROR_PINSET_DOES_NOT_MATCH_CHAIN was 11
+ // ERROR_NO_BACKUP_PIN was 12
+ const uint32_t ERROR_COULD_NOT_SAVE_STATE = 13;
+ // ERROR_ROOT_NOT_BUILT_IN was 14
+
+ /**
+ * nsISiteSecurityService::IsSecureURI can optionally return a flag
+ * indicating the source of the HSTS cache entry, if it comes from the
+ * preload list, was seen naturally, or is a result of HSTS priming.
+ */
+ const uint32_t SOURCE_UNKNOWN = 0;
+ const uint32_t SOURCE_PRELOAD_LIST = 1;
+ const uint32_t SOURCE_ORGANIC_REQUEST = 2;
+
+ /**
+ * Parses a given HTTP header and records the results internally.
+ * Currently one header type is supported: HSTS (aka STS).
+ * The format of the HSTS header is defined by the HSTS specification:
+ * https://tools.ietf.org/html/rfc6797
+ * and allows a host to specify that future HTTP requests should be
+ * upgraded to HTTPS.
+ *
+ * @param aType the type of security header in question.
+ * @param aSourceURI the URI of the resource with the HTTP header.
+ * @param aHeader the HTTP response header specifying security data.
+ * @param aSecInfo the TransportSecurityInfo of the current channel.
+ * @param aFlags options for this request as defined in nsISocketProvider:
+ * NO_PERMANENT_STORAGE
+ * @param aOriginAttributes the origin attributes that isolate this origin,
+ * (note that this implementation does not isolate
+ * by userContextId because of the risk of man-in-
+ * the-middle attacks before trust-on-second-use
+ * happens).
+ * @param aSource the source of the header, whether it was from the preload
+ * list, an organic header, or HSTS priming, or unknown.
+ * @param aMaxAge the parsed max-age directive of the header.
+ * @param aIncludeSubdomains the parsed includeSubdomains directive.
+ * @param aFailureResult a more specific failure result if NS_ERROR_FAILURE
+ was returned.
+ * @return NS_OK if it succeeds
+ * NS_ERROR_FAILURE if it can't be parsed
+ * NS_SUCCESS_LOSS_OF_INSIGNIFICANT_DATA
+ * if there are unrecognized tokens in the header.
+ */
+ [binaryname(ProcessHeader), noscript, must_use]
+ void processHeaderNative(in uint32_t aType,
+ in nsIURI aSourceURI,
+ in ACString aHeader,
+ in nsITransportSecurityInfo aSecInfo,
+ in uint32_t aFlags,
+ in uint32_t aSource,
+ in const_OriginAttributesRef aOriginAttributes,
+ [optional] out unsigned long long aMaxAge,
+ [optional] out boolean aIncludeSubdomains,
+ [optional] out uint32_t aFailureResult);
+
+ [binaryname(ProcessHeaderScriptable), implicit_jscontext, optional_argc,
+ must_use]
+ void processHeader(in uint32_t aType,
+ in nsIURI aSourceURI,
+ in ACString aHeader,
+ in nsITransportSecurityInfo aSecInfo,
+ in uint32_t aFlags,
+ in uint32_t aSource,
+ [optional] in jsval aOriginAttributes,
+ [optional] out unsigned long long aMaxAge,
+ [optional] out boolean aIncludeSubdomains,
+ [optional] out uint32_t aFailureResult);
+
+ /**
+ * Given a header type, resets state relating to that header of a host,
+ * including the includeSubdomains state that would affect subdomains.
+ * This essentially removes the state for the domain tree rooted at this
+ * host. If any preloaded information is present for that host, that
+ * information will then be used instead of any other previously existing
+ * state.
+ *
+ * @param aType the type of security state in question
+ * @param aURI the URI of the target host
+ * @param aFlags options for this request as defined in nsISocketProvider:
+ * NO_PERMANENT_STORAGE
+ * @param aOriginAttributes the origin attributes that isolate this origin,
+ * (note that this implementation does not isolate
+ * by userContextId because of the risk of man-in-
+ * the-middle attacks before trust-on-second-use
+ * happens).
+ */
+ [implicit_jscontext, optional_argc, must_use]
+ void resetState(in uint32_t aType,
+ in nsIURI aURI,
+ in uint32_t aFlags,
+ [optional] in jsval aOriginAttributes);
+
+ /**
+ * Checks whether or not the URI's hostname has a given security state set.
+ * For example, for HSTS:
+ * The URI is an HSTS URI if either the host has the HSTS state set, or one
+ * of its super-domains has the HSTS "includeSubdomains" flag set.
+ * NOTE: this function makes decisions based only on the
+ * host contained in the URI, and disregards other portions of the URI
+ * such as path and port.
+ *
+ * @param aType the type of security state in question.
+ * @param aURI the URI to query for STS state.
+ * @param aFlags options for this request as defined in nsISocketProvider:
+ * NO_PERMANENT_STORAGE
+ * @param aOriginAttributes the origin attributes that isolate this origin,
+ * (note that this implementation does not isolate
+ * by userContextId because of the risk of man-in-
+ * the-middle attacks before trust-on-second-use
+ * happens).
+ * @param aCached true if we have cached information about this host, even
+ * if the security state is false.
+ * @param aSource the source of the HSTS entry. One of SOURCE_PRELOAD_LIST,
+ * SOURCE_ORGANIC_REQUEST, SOURCE_HSTS_PRIMING, or
+ * SOURCE_UNKNOWN.
+ */
+ [binaryname(IsSecureURI), noscript, must_use]
+ boolean isSecureURINative(in uint32_t aType, in nsIURI aURI,
+ in uint32_t aFlags,
+ in const_OriginAttributesRef aOriginAttributes,
+ [optional] out boolean aCached,
+ [optional] out uint32_t aSource);
+
+ [binaryname(IsSecureURIScriptable), implicit_jscontext, optional_argc,
+ must_use]
+ boolean isSecureURI(in uint32_t aType, in nsIURI aURI, in uint32_t aFlags,
+ [optional] in jsval aOriginAttributes,
+ [optional] out boolean aCached,
+ [optional] out uint32_t aSource);
+
+ /**
+ * Removes all non-preloaded security state by resetting to factory-original
+ * settings.
+ */
+ [must_use]
+ void clearAll();
+
+ /**
+ * Removes all preloaded security state.
+ */
+ [must_use]
+ void clearPreloads();
+
+ /**
+ * Set an HSTS preload entry for a host. The resulting entries will be
+ * permanent and visible from private and non-private contexts. These
+ * entries replace any already set by this mechanism or those built-in to
+ * Gecko.
+ *
+ * @param aHost the hostname (punycode) that the entry applies to
+ * @param aIncludeSubdomains whether this entry also applies to subdomains
+ * @param aExpires the time this entry should expire (millis since epoch)
+ */
+ [must_use]
+ boolean setHSTSPreload(in ACString aHost,
+ in boolean aIncludesSubdomains,
+ in int64_t aExpires);
+
+ /**
+ * Returns an enumerator of the nsISiteSecurityService storage. Each item in
+ * the enumeration is a nsISiteSecurityState that can be QueryInterfaced to
+ * nsISiteHSTSState.
+ * Doesn't include preloaded entries (either the hard-coded ones or the
+ * preloaded-delivered-by-kinto ones).
+ *
+ * @param aType the type of security state in question.
+ */
+ [must_use]
+ nsISimpleEnumerator enumerate(in uint32_t aType);
+};
+
+%{C++
+#define NS_SSSERVICE_CONTRACTID "@mozilla.org/ssservice;1"
+%}