mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 04:05:49 +00:00
a028ea5c2d
--HG-- rename : security/manager/boot/src/CertBlocklist.cpp => security/manager/ssl/CertBlocklist.cpp rename : security/manager/boot/src/CertBlocklist.h => security/manager/ssl/CertBlocklist.h rename : security/manager/boot/src/DataStorage.cpp => security/manager/ssl/DataStorage.cpp rename : security/manager/boot/src/DataStorage.h => security/manager/ssl/DataStorage.h rename : security/manager/boot/src/PublicKeyPinningService.cpp => security/manager/ssl/PublicKeyPinningService.cpp rename : security/manager/boot/src/PublicKeyPinningService.h => security/manager/ssl/PublicKeyPinningService.h rename : security/manager/boot/src/RootCertificateTelemetryUtils.cpp => security/manager/ssl/RootCertificateTelemetryUtils.cpp rename : security/manager/boot/src/RootCertificateTelemetryUtils.h => security/manager/ssl/RootCertificateTelemetryUtils.h rename : security/manager/boot/src/RootHashes.inc => security/manager/ssl/RootHashes.inc rename : security/manager/boot/src/StaticHPKPins.errors => security/manager/ssl/StaticHPKPins.errors rename : security/manager/boot/src/StaticHPKPins.h => security/manager/ssl/StaticHPKPins.h rename : security/manager/boot/src/nsEntropyCollector.cpp => security/manager/ssl/nsEntropyCollector.cpp rename : security/manager/boot/src/nsEntropyCollector.h => security/manager/ssl/nsEntropyCollector.h rename : security/manager/boot/public/nsIBufEntropyCollector.idl => security/manager/ssl/nsIBufEntropyCollector.idl rename : security/manager/boot/public/nsICertBlocklist.idl => security/manager/ssl/nsICertBlocklist.idl rename : security/manager/boot/public/nsISSLStatusProvider.idl => security/manager/ssl/nsISSLStatusProvider.idl rename : security/manager/boot/public/nsISecurityUITelemetry.idl => security/manager/ssl/nsISecurityUITelemetry.idl rename : security/manager/boot/src/nsSTSPreloadList.errors => security/manager/ssl/nsSTSPreloadList.errors rename : security/manager/boot/src/nsSTSPreloadList.inc => security/manager/ssl/nsSTSPreloadList.inc rename : security/manager/boot/src/nsSecureBrowserUIImpl.cpp => security/manager/ssl/nsSecureBrowserUIImpl.cpp rename : security/manager/boot/src/nsSecureBrowserUIImpl.h => security/manager/ssl/nsSecureBrowserUIImpl.h rename : security/manager/boot/src/nsSecurityHeaderParser.cpp => security/manager/ssl/nsSecurityHeaderParser.cpp rename : security/manager/boot/src/nsSecurityHeaderParser.h => security/manager/ssl/nsSecurityHeaderParser.h rename : security/manager/boot/src/nsSiteSecurityService.cpp => security/manager/ssl/nsSiteSecurityService.cpp rename : security/manager/boot/src/nsSiteSecurityService.h => security/manager/ssl/nsSiteSecurityService.h
75 lines
2.6 KiB
C++
75 lines
2.6 KiB
C++
/* 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/. */
|
|
|
|
#ifndef nsSecurityHeaderParser_h__
|
|
#define nsSecurityHeaderParser_h__
|
|
|
|
#include "nsString.h"
|
|
#include "mozilla/LinkedList.h"
|
|
#include "nsCOMPtr.h"
|
|
|
|
// Utility class for handing back parsed directives and (optional) values
|
|
class nsSecurityHeaderDirective : public mozilla::LinkedListElement<nsSecurityHeaderDirective> {
|
|
public:
|
|
nsAutoCString mName;
|
|
nsAutoCString mValue;
|
|
};
|
|
|
|
// This class parses security-related HTTP headers like
|
|
// Strict-Transport-Security. The Augmented Backus-Naur Form syntax for this
|
|
// header is reproduced below, for reference:
|
|
//
|
|
// Strict-Transport-Security = "Strict-Transport-Security" ":"
|
|
// [ directive ] *( ";" [ directive ] )
|
|
//
|
|
// directive = directive-name [ "=" directive-value ]
|
|
// directive-name = token
|
|
// directive-value = token | quoted-string
|
|
//
|
|
// where:
|
|
//
|
|
// token = <token, defined in [RFC2616], Section 2.2>
|
|
// quoted-string = <quoted-string, defined in [RFC2616], Section 2.2>/
|
|
//
|
|
// For further reference, see [RFC6797], Section 6.1
|
|
|
|
class nsSecurityHeaderParser {
|
|
public:
|
|
explicit nsSecurityHeaderParser(const char *aHeader);
|
|
~nsSecurityHeaderParser();
|
|
|
|
// Only call Parse once.
|
|
nsresult Parse();
|
|
// The caller does not take ownership of the memory returned here.
|
|
mozilla::LinkedList<nsSecurityHeaderDirective> *GetDirectives();
|
|
|
|
private:
|
|
bool Accept(char aChr);
|
|
bool Accept(bool (*aClassifier) (signed char));
|
|
void Expect(char aChr);
|
|
void Advance();
|
|
void Header(); // header = [ directive ] *( ";" [ directive ] )
|
|
void Directive(); // directive = directive-name [ "=" directive-value ]
|
|
void DirectiveName(); // directive-name = token
|
|
void DirectiveValue(); // directive-value = token | quoted-string
|
|
void Token(); // token = 1*<any CHAR except CTLs or separators>
|
|
void QuotedString(); // quoted-string = (<"> *( qdtext | quoted-pair ) <">)
|
|
void QuotedText(); // qdtext = <any TEXT except <"> and "\">
|
|
void QuotedPair(); // quoted-pair = "\" CHAR
|
|
|
|
// LWS = [CRLF] 1*( SP | HT )
|
|
void LWSMultiple(); // Handles *( LWS )
|
|
void LWSCRLF(); // Handles the [CRLF] part of LWS
|
|
void LWS(); // Handles the 1*( SP | HT ) part of LWS
|
|
|
|
mozilla::LinkedList<nsSecurityHeaderDirective> mDirectives;
|
|
const char *mCursor;
|
|
nsSecurityHeaderDirective *mDirective;
|
|
|
|
nsAutoCString mOutput;
|
|
bool mError;
|
|
};
|
|
|
|
#endif /* nsSecurityHeaderParser_h__ */
|