SOL9 2.0 Class: CryptObject

 SOL9 C++ Class Library  SOL9 Samples  SOL9 Tutorial  SOL9 FAQ  SOL9 ClassTree 

Source code

/*
 * CryptObject.h 
 * Copyright (c) 2011 Antillia.com TOSHIYUKI ARAI. ALL RIGHTS RESERVED. 
 */


// SOL9
// 2009/03/15

#pragma once

#include <sol/Object.h>
#include <wincrypt.h>

#include <sol/Bytes.h>


namespace SOL {

class CryptObject :public Object {

private:
    HCERTSTORE hStore;
    HCRYPTMSG hMsg; 

    DWORD dwEncoding;
    DWORD dwContentType;
    DWORD dwFormatType;

public:
    /**
     * Constructor
     */
    CryptObject()
    :hStore(NULL),
     hMsg(NULL) 
    {

    }

public:
    /**
     *
     * @param fileName A pointer to a NULL-terminated Unicode string that contains 
     *                    the path and name of the file to query.

     * Open a signed file of fileName and get handles of HCERTSTORE and HCRYPTMSG.
     *
      @param expectedContentTypeFlags Indicates the expected content type. 
                CERT_QUERY_CONTENT_FLAG_ALL 
                CERT_QUERY_CONTENT_FLAG_CERT 
                CERT_QUERY_CONTENT_FLAG_CERT_PAIR
                CERT_QUERY_CONTENT_FLAG_CRL
                CERT_QUERY_CONTENT_FLAG_CTL
                CERT_QUERY_CONTENT_FLAG_PFX
                CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD
                CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
                CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED
                CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
                CERT_QUERY_CONTENT_FLAG_PKCS10
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
 
      @param expectedFormatTypeFlags Indicates the expected format of the returned type.
                CERT_QUERY_FORMAT_FLAG_ALL 
                CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED
                CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED 
                CERT_QUERY_FORMAT_FLAG_BINARY
 
     */
    int query(__in const CERT_BLOB* blob, 
            __in DWORD expectedContentType=CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
            __in DWORD expectedFormatType=CERT_QUERY_FORMAT_FLAG_BINARY) 
    {

        int rc = NO_ERROR;
        /*
            BOOL WINAPI CryptQueryObject(
              __in   DWORD dwObjectType,
              __in   const void *pvObject,
              __in   DWORD dwExpectedContentTypeFlags,
              __in   DWORD dwExpectedFormatTypeFlags,
              __in   DWORD dwFlags,
             __out  DWORD *pdwMsgAndCertEncodingType,
             __out  DWORD *pdwContentType,
             __out  DWORD *pdwFormatType,
             __out  HCERTSTORE *phCertStore,
            __out  HCRYPTMSG *phMsg,
            __out  const void **ppvContext
        );

        */
        if (CryptQueryObject(CERT_QUERY_OBJECT_BLOB,
                                   blob,
                                   expectedContentType,    //CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
                                   expectedFormatType,        //CERT_QUERY_FORMAT_FLAG_BINARY,
                                   0,
                                   &dwEncoding,
                                   &dwContentType,
                                   &dwFormatType,

                                   &hStore,
                                   &hMsg,
                                   NULL) != TRUE) {
            return GetLastError();
        }

        return rc;
    } 


    public:
    /**
     *
     * @param fileName A pointer to a NULL-terminated Unicode string that contains 
     *                    the path and name of the file to query.

     * Open a signed file of fileName and get handles of HCERTSTORE and HCRYPTMSG.
     *
      @param expectedContentTypeFlags Indicates the expected content type. 
                CERT_QUERY_CONTENT_FLAG_ALL 
                CERT_QUERY_CONTENT_FLAG_CERT 
                CERT_QUERY_CONTENT_FLAG_CERT_PAIR
                CERT_QUERY_CONTENT_FLAG_CRL
                CERT_QUERY_CONTENT_FLAG_CTL
                CERT_QUERY_CONTENT_FLAG_PFX
                CERT_QUERY_CONTENT_FLAG_PFX_AND_LOAD
                CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED
                CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED
                CERT_QUERY_CONTENT_FLAG_PKCS7_UNSIGNED
                CERT_QUERY_CONTENT_FLAG_PKCS10
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_CERT
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_CRL
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_CTL
                CERT_QUERY_CONTENT_FLAG_SERIALIZED_STORE
 
      @param expectedFormatTypeFlags Indicates the expected format of the returned type.
                CERT_QUERY_FORMAT_FLAG_ALL 
                CERT_QUERY_FORMAT_FLAG_ASN_ASCII_HEX_ENCODED
                CERT_QUERY_FORMAT_FLAG_BASE64_ENCODED 
                CERT_QUERY_FORMAT_FLAG_BINARY
 
     */
    int query(__in const wchar_t* fileName, 
            __in DWORD expectedContentType=CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
            __in DWORD expectedFormatType=CERT_QUERY_FORMAT_FLAG_BINARY) 
    {

        int rc = NO_ERROR;
        /*
            BOOL WINAPI CryptQueryObject(
              __in   DWORD dwObjectType,
              __in   const void *pvObject,
              __in   DWORD dwExpectedContentTypeFlags,
              __in   DWORD dwExpectedFormatTypeFlags,
              __in   DWORD dwFlags,
             __out  DWORD *pdwMsgAndCertEncodingType,
             __out  DWORD *pdwContentType,
             __out  DWORD *pdwFormatType,
             __out  HCERTSTORE *phCertStore,
            __out  HCRYPTMSG *phMsg,
            __out  const void **ppvContext
        );

        */
        if (CryptQueryObject(CERT_QUERY_OBJECT_FILE,
                                   fileName,
                                   expectedContentType,    //CERT_QUERY_CONTENT_FLAG_PKCS7_SIGNED_EMBED,
                                   expectedFormatType,        //CERT_QUERY_FORMAT_FLAG_BINARY,
                                   0,
                                   &dwEncoding,
                                   &dwContentType,
                                   &dwFormatType,

                                   &hStore,
                                   &hMsg,
                                   NULL) != TRUE) {
            return GetLastError();
        }

        return rc;
    } 

public:
    ~CryptObject()
    {
    }


public:
    HCERTSTORE getCertStore() {
        return hStore; 
    }

public:
    HCRYPTMSG getCryptMsg() {
        return hMsg; 
    }

};


}

Last modified: 1 Feb 2012

Copyright (c) 2009-2012 Antillia.com ALL RIGHTS RESERVED.