Logo Search packages:      
Sourcecode: chromium-browser version File versions  Download package

osxsigner.h

/*
 * Copyright (c) 2000-2001 Apple Computer, Inc. All Rights Reserved.
 * 
 * The contents of this file constitute Original Code as defined in and are
 * subject to the Apple Public Source License Version 1.2 (the 'License').
 * You may not use this file except in compliance with the License. Please obtain
 * a copy of the License at http://www.apple.com/publicsource and read it before
 * using this file.
 * 
 * This Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESS
 * OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, INCLUDING WITHOUT
 * LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
 * PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. Please see the License for the
 * specific language governing rights and limitations under the License.
 */


//
// osxsigner - MacOS X's standard code signing algorithm.
//
#ifndef _H_OSXSIGNER
#define _H_OSXSIGNER

#include <security_utilities/osxcode.h>
#include <security_cdsa_client/cspclient.h>
#include <string>

namespace Security {
namespace CodeSigning {


//
// The OSX standard signer object
//
class OSXSigner : public Signer {
      class Digester; friend class Digester;
public:
      class OSXSignature;

      OSXSigner();
      OSXSignature *sign(const Signable &target);
      bool verify(const Signable &target, const Signature *signature);
      
      OSXSignature *restore(u_int32_t type, const void *data, size_t length);

public:
      class OSXSignature : public Signature {
      public:
            static const size_t hashLength = 20;      // length of signature data
            typedef uint8 Hash[hashLength];
            
            OSXSignature(const void *src) { memcpy(mData, src, hashLength); }
            
            bool operator == (const Signature &other) const
            {
                  if (const OSXSignature *sig = dynamic_cast<const OSXSignature *>(&other))
                        return !memcmp(mData, sig->mData, hashLength);
                  else
                        return false;
            }
            
            bool operator == (void *bytes) const
            { return !memcmp(mData, bytes, hashLength); }
            
            u_int32_t type() const        { return standardOSXSignature; }
            const void *data() const { return mData; }
            size_t length() const   { return hashLength; }
      
      private:
            uint8 mData[hashLength];
      };
      
private:
      class Digester : public State, public CssmClient::Digest {
      public:
            Digester(OSXSigner &sgn) : State(sgn), CssmClient::Digest(sgn.csp, CSSM_ALGID_SHA1) { }
            
            void enumerateContents(const void *addr, size_t length);
      };

private:
      // CDSA resources
      CssmClient::CSP csp;
};

} // end namespace CodeSigning
} // end namespace Security


#endif //_H_OSXSIGNER

Generated by  Doxygen 1.6.0   Back to index