//+-------------------------------------------------------------------------- // // Copyright (c) Microsoft Corporation. All rights reserved. // // Abstract: // Contains the definition of public interfaces related to OPC digital signature. // // Include from msopc.h. // Import from msopc.idl. // // //---------------------------------------------------------------------------- cpp_quote("//+-------------------------------------------------------------------------") cpp_quote("//") cpp_quote("// Microsoft Windows") cpp_quote("// Copyright (c) Microsoft Corporation. All rights reserved.") cpp_quote("//") cpp_quote("//--------------------------------------------------------------------------") import "oaidl.idl"; import "wincrypt.idl"; // for CERT_CONTEXT cpp_quote("#if (NTDDI_VERSION >= NTDDI_WIN7)") // // Forward declarations // interface IOpcSignaturePartReference; interface IOpcSignatureRelationshipReference; interface IOpcRelationshipSelector; interface IOpcSignatureReference; interface IOpcSignatureCustomObject; interface IOpcDigitalSignature; interface IOpcSigningOptions; interface IOpcDigitalSignatureManager; // // Enumerator Interfaces // interface IOpcSignaturePartReferenceEnumerator; interface IOpcSignatureRelationshipReferenceEnumerator; interface IOpcRelationshipSelectorEnumerator; interface IOpcSignatureReferenceEnumerator; interface IOpcSignatureCustomObjectEnumerator; interface IOpcCertificateEnumerator; interface IOpcDigitalSignatureEnumerator; // // Set Interfaces // interface IOpcSignaturePartReferenceSet; interface IOpcSignatureRelationshipReferenceSet; interface IOpcRelationshipSelectorSet; interface IOpcSignatureReferenceSet; interface IOpcSignatureCustomObjectSet; interface IOpcCertificateSet; //==========================ENUMs============================================// typedef enum OPC_SIGNATURE_VALIDATION_RESULT { OPC_SIGNATURE_VALID = 0, OPC_SIGNATURE_INVALID = -1, } OPC_SIGNATURE_VALIDATION_RESULT; typedef enum { OPC_CANONICALIZATION_NONE = 0, OPC_CANONICALIZATION_C14N = 1, OPC_CANONICALIZATION_C14N_WITH_COMMENTS = 2 } OPC_CANONICALIZATION_METHOD; typedef enum { OPC_RELATIONSHIP_SELECT_BY_ID = 0, // Sign the relationships selected by the relationship Id. OPC_RELATIONSHIP_SELECT_BY_TYPE = 1, // Sign the relationships selected by the relationship Type. } OPC_RELATIONSHIP_SELECTOR; typedef enum { OPC_RELATIONSHIP_SIGN_USING_SELECTORS = 0, OPC_RELATIONSHIP_SIGN_PART = 1 } OPC_RELATIONSHIPS_SIGNING_OPTION; typedef enum { OPC_CERTIFICATE_IN_CERTIFICATE_PART = 0, OPC_CERTIFICATE_IN_SIGNATURE_PART = 1, OPC_CERTIFICATE_NOT_EMBEDDED = 2 } OPC_CERTIFICATE_EMBEDDING_OPTION; typedef enum { OPC_SIGNATURE_TIME_FORMAT_MILLISECONDS = 0, OPC_SIGNATURE_TIME_FORMAT_SECONDS = 1, OPC_SIGNATURE_TIME_FORMAT_MINUTES = 2, OPC_SIGNATURE_TIME_FORMAT_DAYS = 3, OPC_SIGNATURE_TIME_FORMAT_MONTHS = 4, OPC_SIGNATURE_TIME_FORMAT_YEARS = 5 } OPC_SIGNATURE_TIME_FORMAT; //==========================INTERFACEs============================================// [ object, uuid(e24231ca-59f4-484e-b64b-36eeda36072c), nonextensible, pointer_default(unique) ] interface IOpcSignaturePartReference : IUnknown { HRESULT GetPartName( [out, retval] IOpcPartUri **partName ); HRESULT GetContentType( [out, string, retval] LPWSTR *contentType ); HRESULT GetDigestMethod( [out, string, retval] LPWSTR *digestMethod ); HRESULT GetDigestValue( [out, size_is(, *count)] UINT8** digestValue, [out] UINT32* count ); HRESULT GetTransformMethod( [out, retval] OPC_CANONICALIZATION_METHOD* transformMethod ); } [ object, uuid(f8f26c7f-b28f-4899-84c8-5d5639ede75f), nonextensible, pointer_default(ref) ] interface IOpcRelationshipSelector : IUnknown { HRESULT GetSelectorType( [out, retval] OPC_RELATIONSHIP_SELECTOR *selector ); HRESULT GetSelectionCriterion( [out, string, retval] LPWSTR *selectionCriterion ); } [ object, uuid(57babac6-9d4a-4e50-8b86-e5d4051eae7c), nonextensible, pointer_default(unique) ] interface IOpcSignatureRelationshipReference : IUnknown { HRESULT GetSourceUri( [out, retval] IOpcUri **sourceUri ); HRESULT GetDigestMethod( [out, string, retval] LPWSTR *digestMethod ); HRESULT GetDigestValue( [out, size_is(, *count)] UINT8** digestValue, [out] UINT32* count ); HRESULT GetTransformMethod( [out, retval] OPC_CANONICALIZATION_METHOD* transformMethod ); HRESULT GetRelationshipSigningOption( [out, retval] OPC_RELATIONSHIPS_SIGNING_OPTION* relationshipSigningOption ); HRESULT GetRelationshipSelectorEnumerator( [out, retval] IOpcRelationshipSelectorEnumerator** selectorEnumerator ); } [ object, uuid(1b47005e-3011-4edc-be6f-0f65e5ab0342), nonextensible, pointer_default(unique) ] interface IOpcSignatureReference : IUnknown { HRESULT GetId( [out, string, retval] LPWSTR *referenceId ); HRESULT GetUri( [out, retval] IUri **referenceUri ); HRESULT GetType( [out, string, retval] LPWSTR *type ); HRESULT GetTransformMethod( [out, retval] OPC_CANONICALIZATION_METHOD* transformMethod ); HRESULT GetDigestMethod( [out, string, retval] LPWSTR *digestMethod ); HRESULT GetDigestValue( [out, size_is(, *count)] UINT8** digestValue, [out] UINT32* count ); } [ object, uuid(5d77a19e-62c1-44e7-becd-45da5ae51a56), nonextensible, pointer_default(unique) ] interface IOpcSignatureCustomObject : IUnknown { // Custom Object Contents as valid xml markup [optional] // This includes the and tags which gives applications // complete control over xml namespaces. HRESULT GetXml( [out, size_is(, *count)] UINT8** xmlMarkup, [out] UINT32* count ); } [ object, uuid(80eb1561-8c77-49cf-8266-459b356ee99a), nonextensible, pointer_default(ref) ] interface IOpcSignaturePartReferenceEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL* hasNext ); HRESULT MovePrevious( [out, retval] BOOL* hasPrevious ); HRESULT GetCurrent( [out, retval] IOpcSignaturePartReference** partReference ); HRESULT Clone( [out, retval] IOpcSignaturePartReferenceEnumerator **copy ); }; [ object, uuid(5e50a181-a91b-48ac-88d2-bca3d8f8c0b1), nonextensible, pointer_default(ref) ] interface IOpcRelationshipSelectorEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL* hasNext ); HRESULT MovePrevious( [out, retval] BOOL* hasPrevious ); HRESULT GetCurrent( [out, retval] IOpcRelationshipSelector** relationshipSelector ); HRESULT Clone( [out, retval] IOpcRelationshipSelectorEnumerator **copy ); }; [ object, uuid(773ba3e4-f021-48e4-aa04-9816db5d3495), nonextensible, pointer_default(ref) ] interface IOpcSignatureRelationshipReferenceEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL* hasNext ); HRESULT MovePrevious( [out, retval] BOOL* hasPrevious ); HRESULT GetCurrent( [out, retval] IOpcSignatureRelationshipReference** relationshipReference ); HRESULT Clone( [out, retval] IOpcSignatureRelationshipReferenceEnumerator **copy ); }; [ object, uuid(cfa59a45-28b1-4868-969e-fa8097fdc12a), nonextensible, pointer_default(ref) ] interface IOpcSignatureReferenceEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL* hasNext ); HRESULT MovePrevious( [out, retval] BOOL* hasPrevious ); HRESULT GetCurrent( [out, retval] IOpcSignatureReference** reference ); HRESULT Clone( [out, retval] IOpcSignatureReferenceEnumerator **copy ); }; [ object, uuid(5ee4fe1d-e1b0-4683-8079-7ea0fcf80b4c), nonextensible, pointer_default(ref) ] interface IOpcSignatureCustomObjectEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL* hasNext ); HRESULT MovePrevious( [out, retval] BOOL* hasPrevious ); HRESULT GetCurrent( [out, retval] IOpcSignatureCustomObject** customObject ); HRESULT Clone( [out, retval] IOpcSignatureCustomObjectEnumerator **copy ); }; [ object, uuid(85131937-8f24-421f-b439-59ab24d140b8), local, nonextensible, pointer_default(ref) ] interface IOpcCertificateEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL* hasNext ); HRESULT MovePrevious( [out, retval] BOOL* hasPrevious ); HRESULT GetCurrent( [out, retval] const CERT_CONTEXT** certificate ); HRESULT Clone( [out, retval] IOpcCertificateEnumerator **copy ); }; [ object, uuid(967b6882-0ba3-4358-b9e7-b64c75063c5e), nonextensible, pointer_default(ref) ] interface IOpcDigitalSignatureEnumerator : IUnknown { HRESULT MoveNext( [out, retval] BOOL* hasNext ); HRESULT MovePrevious( [out, retval] BOOL* hasPrevious ); HRESULT GetCurrent( [out, retval] IOpcDigitalSignature** digitalSignature ); HRESULT Clone( [out, retval] IOpcDigitalSignatureEnumerator **copy ); }; // // Set Interfaces // [ object, uuid(6c9fe28c-ecd9-4b22-9d36-7fdde670fec0), nonextensible, pointer_default(ref) ] interface IOpcSignaturePartReferenceSet : IUnknown { HRESULT Create( [in] IOpcPartUri* partUri, [in, unique] LPCWSTR digestMethod, [in] OPC_CANONICALIZATION_METHOD transformMethod, [out, retval] IOpcSignaturePartReference** partReference ); HRESULT Delete( [in] IOpcSignaturePartReference* partReference ); HRESULT GetEnumerator( [out, retval] IOpcSignaturePartReferenceEnumerator** partReferenceEnumerator ); } [ object, uuid(6e34c269-a4d3-47c0-b5c4-87ff2b3b6136), nonextensible, pointer_default(ref) ] interface IOpcRelationshipSelectorSet : IUnknown { HRESULT Create( [in] OPC_RELATIONSHIP_SELECTOR selector, [in] LPCWSTR selectionCriterion, [out, retval] IOpcRelationshipSelector** relationshipSelector ); HRESULT Delete( [in] IOpcRelationshipSelector* relationshipSelector ); HRESULT GetEnumerator( [out, retval] IOpcRelationshipSelectorEnumerator** relationshipSelectorEnumerator ); } [ object, uuid(9f863ca5-3631-404c-828d-807e0715069b), nonextensible, pointer_default(ref) ] interface IOpcSignatureRelationshipReferenceSet : IUnknown { HRESULT Create( [in] IOpcUri* sourceUri, [in, unique] LPCWSTR digestMethod, [in] OPC_RELATIONSHIPS_SIGNING_OPTION relationshipSigningOption, [in, unique] IOpcRelationshipSelectorSet* selectorSet, [in] OPC_CANONICALIZATION_METHOD transformMethod, [out, retval] IOpcSignatureRelationshipReference** relationshipReference ); HRESULT CreateRelationshipSelectorSet( [out] IOpcRelationshipSelectorSet** selectorSet ); HRESULT Delete( [in] IOpcSignatureRelationshipReference* relationshipReference ); HRESULT GetEnumerator( [out, retval] IOpcSignatureRelationshipReferenceEnumerator** relationshipReferenceEnumerator ); } [ object, uuid(f3b02d31-ab12-42dd-9e2f-2b16761c3c1e), nonextensible, pointer_default(ref) ] interface IOpcSignatureReferenceSet : IUnknown { HRESULT Create( [in] IUri *referenceUri, [in, unique] LPCWSTR referenceId, [in, unique] LPCWSTR type, [in, unique] LPCWSTR digestMethod, // can be NULL and we will use default digest method [in] OPC_CANONICALIZATION_METHOD transformMethod, [out, retval] IOpcSignatureReference **reference ); HRESULT Delete( [in] IOpcSignatureReference *reference ); HRESULT GetEnumerator( [out, retval] IOpcSignatureReferenceEnumerator** referenceEnumerator ); } [ object, uuid(8f792ac5-7947-4e11-bc3d-2659ff046ae1), nonextensible, pointer_default(ref) ] interface IOpcSignatureCustomObjectSet : IUnknown { HRESULT Create( [in, size_is(count)] const UINT8* xmlMarkup, [in] UINT32 count, [out, retval] IOpcSignatureCustomObject **customObject ); HRESULT Delete( [in] IOpcSignatureCustomObject *customObject ); HRESULT GetEnumerator( [out,retval] IOpcSignatureCustomObjectEnumerator** customObjectEnumerator ); } [ object, uuid(56ea4325-8e2d-4167-b1a4-e486d24c8fa7), local, // It has to be loacl to make MIDL accept void*, which is a field in CERT_CONTEXT nonextensible, pointer_default(ref) ] interface IOpcCertificateSet : IUnknown { HRESULT Add( [in] const CERT_CONTEXT* certificate ); HRESULT Remove( [in] const CERT_CONTEXT* certificate ); HRESULT GetEnumerator( [out, retval] IOpcCertificateEnumerator** certificateEnumerator ); } [ object, uuid(52ab21dd-1cd0-4949-bc80-0c1232d00cb4), local, nonextensible, pointer_default(unique) ] interface IOpcDigitalSignature : IUnknown { HRESULT GetNamespaces( [out, size_is(, *count)] LPWSTR** prefixes, [out, size_is(, *count)] LPWSTR** namespaces, [out] UINT32* count ); HRESULT GetSignatureId( [out, string, retval] LPWSTR* signatureId ); HRESULT GetSignaturePartName( [out, retval] IOpcPartUri** signaturePartName ); HRESULT GetSignatureMethod( [out, string, retval] LPWSTR* signatureMethod ); HRESULT GetCanonicalizationMethod( [out, retval] OPC_CANONICALIZATION_METHOD* canonicalizationMethod ); HRESULT GetSignatureValue( [out, size_is(, *count)] UINT8** signatureValue, [out] UINT32* count ); HRESULT GetSignaturePartReferenceEnumerator( [out, retval] IOpcSignaturePartReferenceEnumerator** partReferenceEnumerator ); HRESULT GetSignatureRelationshipReferenceEnumerator( [out, retval] IOpcSignatureRelationshipReferenceEnumerator ** relationshipReferenceEnumerator ); HRESULT GetSigningTime( [out, string, retval] LPWSTR *signingTime ); HRESULT GetTimeFormat( [out, retval] OPC_SIGNATURE_TIME_FORMAT* timeFormat ); HRESULT GetPackageObjectReference( [out, retval] IOpcSignatureReference** packageObjectReference ); HRESULT GetCertificateEnumerator( [out, retval] IOpcCertificateEnumerator** certificateEnumerator ); HRESULT GetCustomReferenceEnumerator( [out, retval] IOpcSignatureReferenceEnumerator** customReferenceEnumerator ); HRESULT GetCustomObjectEnumerator( [out, retval] IOpcSignatureCustomObjectEnumerator** customObjectEnumerator ); HRESULT GetSignatureXml( [out, size_is(, *count)] UINT8** signatureXml, [out] UINT32* count ); }; [ object, uuid(50d2d6a5-7aeb-46c0-b241-43ab0e9b407e), nonextensible, pointer_default(ref) ] interface IOpcSigningOptions : IUnknown { HRESULT GetSignatureId( [out, string, retval] LPWSTR* signatureId ); HRESULT SetSignatureId( [in] LPCWSTR signatureId ); HRESULT GetSignatureMethod( [out, string, retval] LPWSTR* signatureMethod ); HRESULT SetSignatureMethod( [in] LPCWSTR signatureMethod ); HRESULT GetDefaultDigestMethod( [out, string, retval] LPWSTR* digestMethod ); HRESULT SetDefaultDigestMethod( [in] LPCWSTR digestMethod ); HRESULT GetCertificateEmbeddingOption( [out, retval] OPC_CERTIFICATE_EMBEDDING_OPTION* embeddingOption ); HRESULT SetCertificateEmbeddingOption( [in] OPC_CERTIFICATE_EMBEDDING_OPTION embeddingOption ); // Time Format HRESULT GetTimeFormat( [out, retval] OPC_SIGNATURE_TIME_FORMAT* timeFormat ); HRESULT SetTimeFormat( [in] OPC_SIGNATURE_TIME_FORMAT timeFormat ); HRESULT GetSignaturePartReferenceSet( [out, retval] IOpcSignaturePartReferenceSet** partReferenceSet ); HRESULT GetSignatureRelationshipReferenceSet( [out, retval] IOpcSignatureRelationshipReferenceSet** relationshipReferenceSet ); HRESULT GetCustomObjectSet( [out, retval] IOpcSignatureCustomObjectSet** customObjectSet ); HRESULT GetCustomReferenceSet( [out, retval] IOpcSignatureReferenceSet** customReferenceSet ); HRESULT GetCertificateSet( [out, retval] IOpcCertificateSet** certificateSet ); HRESULT GetSignaturePartName( [out, retval] IOpcPartUri** signaturePartName ); HRESULT SetSignaturePartName( [in, unique] IOpcPartUri* signaturePartName ); }; [ object, uuid(d5e62a0b-696d-462f-94df-72e33cef2659), local, nonextensible, pointer_default(ref) ] interface IOpcDigitalSignatureManager : IUnknown { HRESULT GetSignatureOriginPartName( [out, retval] IOpcPartUri** signatureOriginPartName ); HRESULT SetSignatureOriginPartName( [in, unique] IOpcPartUri* signatureOriginPartName ); HRESULT GetSignatureEnumerator( [out, retval] IOpcDigitalSignatureEnumerator** signatureEnumerator ); HRESULT RemoveSignature( [in] IOpcPartUri* signaturePartName ); HRESULT CreateSigningOptions( [out, retval] IOpcSigningOptions** signingOptions ); HRESULT Validate( [in] IOpcDigitalSignature* signature, [in] const CERT_CONTEXT* certificate, [out, retval] OPC_SIGNATURE_VALIDATION_RESULT* validationResult ); HRESULT Sign( [in] const CERT_CONTEXT* certificate, [in] IOpcSigningOptions* signingOptions, [out, retval] IOpcDigitalSignature** digitalSignature ); HRESULT ReplaceSignatureXml( [in] IOpcPartUri* signaturePartName, [in, size_is(count)] const UINT8* newSignatureXml, [in] UINT32 count, [out, retval] IOpcDigitalSignature** digitalSignature ); }; cpp_quote("#endif // (NTDDI >= NTDDI_WIN7)")