gecko-dev/security/ct/CTUtils.h

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

73 lines
2.4 KiB
C
Raw Normal View History

/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* 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 CTUtils_h
#define CTUtils_h
#include <memory>
#include "cryptohi.h"
#include "keyhi.h"
#include "keythi.h"
#include "pk11pub.h"
#include "mozpkix/Input.h"
#include "mozpkix/Result.h"
#define MOZILLA_CT_ARRAY_LENGTH(x) (sizeof(x) / sizeof((x)[0]))
struct DeleteHelper {
void operator()(CERTSubjectPublicKeyInfo* value) {
SECKEY_DestroySubjectPublicKeyInfo(value);
}
void operator()(PK11Context* value) { PK11_DestroyContext(value, true); }
void operator()(PK11SlotInfo* value) { PK11_FreeSlot(value); }
void operator()(SECKEYPublicKey* value) { SECKEY_DestroyPublicKey(value); }
void operator()(SECItem* value) { SECITEM_FreeItem(value, true); }
};
template <class T>
struct MaybeDeleteHelper {
void operator()(T* ptr) {
if (ptr) {
DeleteHelper del;
del(ptr);
}
}
};
typedef std::unique_ptr<CERTSubjectPublicKeyInfo,
MaybeDeleteHelper<CERTSubjectPublicKeyInfo>>
UniqueCERTSubjectPublicKeyInfo;
typedef std::unique_ptr<PK11Context, MaybeDeleteHelper<PK11Context>>
UniquePK11Context;
typedef std::unique_ptr<PK11SlotInfo, MaybeDeleteHelper<PK11SlotInfo>>
UniquePK11SlotInfo;
typedef std::unique_ptr<SECKEYPublicKey, MaybeDeleteHelper<SECKEYPublicKey>>
UniqueSECKEYPublicKey;
typedef std::unique_ptr<SECItem, MaybeDeleteHelper<SECItem>> UniqueSECItem;
namespace mozilla {
namespace ct {
// Reads a TLS-encoded variable length unsigned integer from |in|.
// The integer is expected to be in big-endian order, which is used by TLS.
// Note: checks if the output parameter overflows while reading.
// |length| indicates the size (in bytes) of the serialized integer.
template <size_t length, typename T>
Bug 1493788 - move certificate/binary transparency implementation to its own directory r=jcj Our current certificate transparency implementation (and the start of the binary transparency implementation) can almost be used by itself as a standalone library (for comparison, mozilla::pkix already has this property, as evidenced by the "Library('mozillapkix')" line in security/pkix/moz.build and the "'mozillapkix'" line in the USE_LIBS section of security/manager/ssl/tests/unit/tlsserver/cmd/moz.build). These changes make this code re-usable as a library so that we'll be able to use it in the updater to verify binary/certificate transparency information. This first patch simply moves the code to its own directory. Differential Revision: https://phabricator.services.mozilla.com/D6844 --HG-- rename : security/certverifier/BTInclusionProof.h => security/ct/BTInclusionProof.h rename : security/certverifier/BTVerifier.cpp => security/ct/BTVerifier.cpp rename : security/certverifier/BTVerifier.h => security/ct/BTVerifier.h rename : security/certverifier/Buffer.cpp => security/ct/Buffer.cpp rename : security/certverifier/Buffer.h => security/ct/Buffer.h rename : security/certverifier/CTDiversityPolicy.cpp => security/ct/CTDiversityPolicy.cpp rename : security/certverifier/CTDiversityPolicy.h => security/ct/CTDiversityPolicy.h rename : security/certverifier/CTKnownLogs.h => security/ct/CTKnownLogs.h rename : security/certverifier/CTLog.h => security/ct/CTLog.h rename : security/certverifier/CTLogVerifier.cpp => security/ct/CTLogVerifier.cpp rename : security/certverifier/CTLogVerifier.h => security/ct/CTLogVerifier.h rename : security/certverifier/CTObjectsExtractor.cpp => security/ct/CTObjectsExtractor.cpp rename : security/certverifier/CTObjectsExtractor.h => security/ct/CTObjectsExtractor.h rename : security/certverifier/CTPolicyEnforcer.cpp => security/ct/CTPolicyEnforcer.cpp rename : security/certverifier/CTPolicyEnforcer.h => security/ct/CTPolicyEnforcer.h rename : security/certverifier/CTSerialization.cpp => security/ct/CTSerialization.cpp rename : security/certverifier/CTSerialization.h => security/ct/CTSerialization.h rename : security/certverifier/CTUtils.h => security/ct/CTUtils.h rename : security/certverifier/CTVerifyResult.cpp => security/ct/CTVerifyResult.cpp rename : security/certverifier/CTVerifyResult.h => security/ct/CTVerifyResult.h rename : security/certverifier/MultiLogCTVerifier.cpp => security/ct/MultiLogCTVerifier.cpp rename : security/certverifier/MultiLogCTVerifier.h => security/ct/MultiLogCTVerifier.h rename : security/certverifier/SignedCertificateTimestamp.cpp => security/ct/SignedCertificateTimestamp.cpp rename : security/certverifier/SignedCertificateTimestamp.h => security/ct/SignedCertificateTimestamp.h rename : security/certverifier/SignedTreeHead.h => security/ct/SignedTreeHead.h rename : security/certverifier/moz.build => security/ct/moz.build rename : security/certverifier/tests/gtest/BTSerializationTest.cpp => security/ct/tests/gtest/BTSerializationTest.cpp rename : security/certverifier/tests/gtest/CTDiversityPolicyTest.cpp => security/ct/tests/gtest/CTDiversityPolicyTest.cpp rename : security/certverifier/tests/gtest/CTLogVerifierTest.cpp => security/ct/tests/gtest/CTLogVerifierTest.cpp rename : security/certverifier/tests/gtest/CTObjectsExtractorTest.cpp => security/ct/tests/gtest/CTObjectsExtractorTest.cpp rename : security/certverifier/tests/gtest/CTPolicyEnforcerTest.cpp => security/ct/tests/gtest/CTPolicyEnforcerTest.cpp rename : security/certverifier/tests/gtest/CTSerializationTest.cpp => security/ct/tests/gtest/CTSerializationTest.cpp rename : security/certverifier/tests/gtest/CTTestUtils.cpp => security/ct/tests/gtest/CTTestUtils.cpp rename : security/certverifier/tests/gtest/CTTestUtils.h => security/ct/tests/gtest/CTTestUtils.h rename : security/certverifier/tests/gtest/MultiLogCTVerifierTest.cpp => security/ct/tests/gtest/MultiLogCTVerifierTest.cpp rename : security/certverifier/tests/gtest/moz.build => security/ct/tests/gtest/moz.build extra : moz-landing-system : lando
2018-10-01 16:20:41 +00:00
mozilla::pkix::Result ReadUint(mozilla::pkix::Reader& in, T& out);
// Reads a length-prefixed variable amount of bytes from |in|, updating |out|
// on success. |prefixLength| indicates the number of bytes needed to represent
// the length.
template <size_t prefixLength>
Bug 1493788 - move certificate/binary transparency implementation to its own directory r=jcj Our current certificate transparency implementation (and the start of the binary transparency implementation) can almost be used by itself as a standalone library (for comparison, mozilla::pkix already has this property, as evidenced by the "Library('mozillapkix')" line in security/pkix/moz.build and the "'mozillapkix'" line in the USE_LIBS section of security/manager/ssl/tests/unit/tlsserver/cmd/moz.build). These changes make this code re-usable as a library so that we'll be able to use it in the updater to verify binary/certificate transparency information. This first patch simply moves the code to its own directory. Differential Revision: https://phabricator.services.mozilla.com/D6844 --HG-- rename : security/certverifier/BTInclusionProof.h => security/ct/BTInclusionProof.h rename : security/certverifier/BTVerifier.cpp => security/ct/BTVerifier.cpp rename : security/certverifier/BTVerifier.h => security/ct/BTVerifier.h rename : security/certverifier/Buffer.cpp => security/ct/Buffer.cpp rename : security/certverifier/Buffer.h => security/ct/Buffer.h rename : security/certverifier/CTDiversityPolicy.cpp => security/ct/CTDiversityPolicy.cpp rename : security/certverifier/CTDiversityPolicy.h => security/ct/CTDiversityPolicy.h rename : security/certverifier/CTKnownLogs.h => security/ct/CTKnownLogs.h rename : security/certverifier/CTLog.h => security/ct/CTLog.h rename : security/certverifier/CTLogVerifier.cpp => security/ct/CTLogVerifier.cpp rename : security/certverifier/CTLogVerifier.h => security/ct/CTLogVerifier.h rename : security/certverifier/CTObjectsExtractor.cpp => security/ct/CTObjectsExtractor.cpp rename : security/certverifier/CTObjectsExtractor.h => security/ct/CTObjectsExtractor.h rename : security/certverifier/CTPolicyEnforcer.cpp => security/ct/CTPolicyEnforcer.cpp rename : security/certverifier/CTPolicyEnforcer.h => security/ct/CTPolicyEnforcer.h rename : security/certverifier/CTSerialization.cpp => security/ct/CTSerialization.cpp rename : security/certverifier/CTSerialization.h => security/ct/CTSerialization.h rename : security/certverifier/CTUtils.h => security/ct/CTUtils.h rename : security/certverifier/CTVerifyResult.cpp => security/ct/CTVerifyResult.cpp rename : security/certverifier/CTVerifyResult.h => security/ct/CTVerifyResult.h rename : security/certverifier/MultiLogCTVerifier.cpp => security/ct/MultiLogCTVerifier.cpp rename : security/certverifier/MultiLogCTVerifier.h => security/ct/MultiLogCTVerifier.h rename : security/certverifier/SignedCertificateTimestamp.cpp => security/ct/SignedCertificateTimestamp.cpp rename : security/certverifier/SignedCertificateTimestamp.h => security/ct/SignedCertificateTimestamp.h rename : security/certverifier/SignedTreeHead.h => security/ct/SignedTreeHead.h rename : security/certverifier/moz.build => security/ct/moz.build rename : security/certverifier/tests/gtest/BTSerializationTest.cpp => security/ct/tests/gtest/BTSerializationTest.cpp rename : security/certverifier/tests/gtest/CTDiversityPolicyTest.cpp => security/ct/tests/gtest/CTDiversityPolicyTest.cpp rename : security/certverifier/tests/gtest/CTLogVerifierTest.cpp => security/ct/tests/gtest/CTLogVerifierTest.cpp rename : security/certverifier/tests/gtest/CTObjectsExtractorTest.cpp => security/ct/tests/gtest/CTObjectsExtractorTest.cpp rename : security/certverifier/tests/gtest/CTPolicyEnforcerTest.cpp => security/ct/tests/gtest/CTPolicyEnforcerTest.cpp rename : security/certverifier/tests/gtest/CTSerializationTest.cpp => security/ct/tests/gtest/CTSerializationTest.cpp rename : security/certverifier/tests/gtest/CTTestUtils.cpp => security/ct/tests/gtest/CTTestUtils.cpp rename : security/certverifier/tests/gtest/CTTestUtils.h => security/ct/tests/gtest/CTTestUtils.h rename : security/certverifier/tests/gtest/MultiLogCTVerifierTest.cpp => security/ct/tests/gtest/MultiLogCTVerifierTest.cpp rename : security/certverifier/tests/gtest/moz.build => security/ct/tests/gtest/moz.build extra : moz-landing-system : lando
2018-10-01 16:20:41 +00:00
mozilla::pkix::Result ReadVariableBytes(mozilla::pkix::Reader& in,
mozilla::pkix::Input& out);
} // namespace ct
} // namespace mozilla
#endif // CTUtils_h