diff options
Diffstat (limited to 'extensions/common/crx_file.cc')
-rw-r--r-- | extensions/common/crx_file.cc | 81 |
1 files changed, 0 insertions, 81 deletions
diff --git a/extensions/common/crx_file.cc b/extensions/common/crx_file.cc deleted file mode 100644 index 73e7f7b..0000000 --- a/extensions/common/crx_file.cc +++ /dev/null @@ -1,81 +0,0 @@ -// Copyright (c) 2012 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. - -#include "extensions/common/crx_file.h" - -namespace extensions { - -namespace { - -// The current version of the crx format. -static const uint32 kCurrentVersion = 2; - -// The current version of the crx diff format. -static const uint32 kCurrentDiffVersion = 0; - -// The maximum size the crx parser will tolerate for a public key. -static const uint32 kMaxPublicKeySize = 1 << 16; - -// The maximum size the crx parser will tolerate for a signature. -static const uint32 kMaxSignatureSize = 1 << 16; - -} // namespace - -// The magic string embedded in the header. -const char kCrxFileHeaderMagic[] = "Cr24"; -const char kCrxDiffFileHeaderMagic[] = "CrOD"; - -scoped_ptr<CrxFile> CrxFile::Parse(const CrxFile::Header& header, - CrxFile::Error* error) { - if (HeaderIsValid(header, error)) - return scoped_ptr<CrxFile>(new CrxFile(header)); - return scoped_ptr<CrxFile>(); -} - -scoped_ptr<CrxFile> CrxFile::Create(const uint32 key_size, - const uint32 signature_size, - CrxFile::Error* error) { - CrxFile::Header header; - memcpy(&header.magic, kCrxFileHeaderMagic, kCrxFileHeaderMagicSize); - header.version = kCurrentVersion; - header.key_size = key_size; - header.signature_size = signature_size; - if (HeaderIsValid(header, error)) - return scoped_ptr<CrxFile>(new CrxFile(header)); - return scoped_ptr<CrxFile>(); -} - -CrxFile::CrxFile(const Header& header) : header_(header) { -} - -bool CrxFile::HeaderIsDelta(const CrxFile::Header& header) { - return !strncmp(kCrxDiffFileHeaderMagic, header.magic, sizeof(header.magic)); -} - -bool CrxFile::HeaderIsValid(const CrxFile::Header& header, - CrxFile::Error* error) { - bool valid = false; - bool diffCrx = false; - if (!strncmp(kCrxDiffFileHeaderMagic, header.magic, sizeof(header.magic))) - diffCrx = true; - if (strncmp(kCrxFileHeaderMagic, header.magic, sizeof(header.magic)) && - !diffCrx) - *error = kWrongMagic; - else if (header.version != kCurrentVersion - && !(diffCrx && header.version == kCurrentDiffVersion)) - *error = kInvalidVersion; - else if (header.key_size > kMaxPublicKeySize) - *error = kInvalidKeyTooLarge; - else if (header.key_size == 0) - *error = kInvalidKeyTooSmall; - else if (header.signature_size > kMaxSignatureSize) - *error = kInvalidSignatureTooLarge; - else if (header.signature_size == 0) - *error = kInvalidSignatureTooSmall; - else - valid = true; - return valid; -} - -} // namespace extensions |