VirtualBox

source: vbox/trunk/src/VBox/Runtime/common/crypto/spc-template.h@ 106061

Last change on this file since 106061 was 106061, checked in by vboxsync, 3 months ago

Copyright year updates by scm.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 8.6 KB
Line 
1/* $Id: spc-template.h 106061 2024-09-16 14:03:52Z vboxsync $ */
2/** @file
3 * IPRT - Crypto - Microsoft SPC / Authenticode, Code Generator Template.
4 */
5
6/*
7 * Copyright (C) 2006-2024 Oracle and/or its affiliates.
8 *
9 * This file is part of VirtualBox base platform packages, as
10 * available from https://www.virtualbox.org.
11 *
12 * This program is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU General Public License
14 * as published by the Free Software Foundation, in version 3 of the
15 * License.
16 *
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * General Public License for more details.
21 *
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, see <https://www.gnu.org/licenses>.
24 *
25 * The contents of this file may alternatively be used under the terms
26 * of the Common Development and Distribution License Version 1.0
27 * (CDDL), a copy of it is provided in the "COPYING.CDDL" file included
28 * in the VirtualBox distribution, in which case the provisions of the
29 * CDDL are applicable instead of those of the GPL.
30 *
31 * You may elect to license modified versions of this file under the
32 * terms and conditions of either the GPL or the CDDL or both.
33 *
34 * SPDX-License-Identifier: GPL-3.0-only OR CDDL-1.0
35 */
36
37#define RTASN1TMPL_DECL RTDECL
38
39
40/*
41 * One SPC Serialized Page Hashes V2 Object.
42 */
43#define RTASN1TMPL_TYPE RTCRSPCSERIALIZEDPAGEHASHES
44#define RTASN1TMPL_EXT_NAME RTCrSpcSerializedPageHashes
45#define RTASN1TMPL_INT_NAME rtCrSpcSerializedPageHashes
46RTASN1TMPL_BEGIN_SETCORE();
47RTASN1TMPL_MEMBER( RawData, RTASN1OCTETSTRING, RTAsn1OctetString);
48RTASN1TMPL_EXEC_DECODE( rc = RTCrSpcSerializedPageHashes_UpdateDerivedData(pThis) ) /* no ; */
49RTASN1TMPL_EXEC_CLONE( rc = RTCrSpcSerializedPageHashes_UpdateDerivedData(pThis) ) /* no ; */
50RTASN1TMPL_END_SETCORE();
51#undef RTASN1TMPL_TYPE
52#undef RTASN1TMPL_EXT_NAME
53#undef RTASN1TMPL_INT_NAME
54
55
56/*
57 * One SPC Serialized Object Attribute.
58 */
59#define RTASN1TMPL_TYPE RTCRSPCSERIALIZEDOBJECTATTRIBUTE
60#define RTASN1TMPL_EXT_NAME RTCrSpcSerializedObjectAttribute
61#define RTASN1TMPL_INT_NAME rtCrSpcSerializedObjectAttribute
62RTASN1TMPL_BEGIN_SEQCORE();
63RTASN1TMPL_MEMBER( Type, RTASN1OBJID, RTAsn1ObjId);
64RTASN1TMPL_MEMBER_DYN_BEGIN( Type, RTCRSPCSERIALIZEDOBJECTATTRIBUTETYPE, enmType, Allocation);
65RTASN1TMPL_MEMBER_DYN( u, pPageHashes, V1Hashes, RTCRSPCSERIALIZEDPAGEHASHES, RTCrSpcSerializedPageHashes, Allocation,
66 Type, enmType, RTCRSPCSERIALIZEDOBJECTATTRIBUTETYPE_PAGE_HASHES_V1, RTCRSPC_PE_IMAGE_HASHES_V1_OID);
67RTASN1TMPL_MEMBER_DYN( u, pPageHashes, V2Hashes, RTCRSPCSERIALIZEDPAGEHASHES, RTCrSpcSerializedPageHashes, Allocation,
68 Type, enmType, RTCRSPCSERIALIZEDOBJECTATTRIBUTETYPE_PAGE_HASHES_V2, RTCRSPC_PE_IMAGE_HASHES_V2_OID);
69RTASN1TMPL_MEMBER_DYN_DEFAULT( u, pCore, RTASN1CORE, RTAsn1Core, Allocation,
70 Type, enmType, RTCRSPCSERIALIZEDOBJECTATTRIBUTETYPE_UNKNOWN);
71RTASN1TMPL_MEMBER_DYN_END( Type, RTCRSPCSERIALIZEDOBJECTATTRIBUTETYPE, enmType, Allocation);
72RTASN1TMPL_END_SEQCORE();
73#undef RTASN1TMPL_TYPE
74#undef RTASN1TMPL_EXT_NAME
75#undef RTASN1TMPL_INT_NAME
76
77/*
78 * Set of SPC Serialized Object Attributes.
79 */
80#define RTASN1TMPL_TYPE RTCRSPCSERIALIZEDOBJECTATTRIBUTES
81#define RTASN1TMPL_EXT_NAME RTCrSpcSerializedObjectAttributes
82#define RTASN1TMPL_INT_NAME rtCrSpcSerializedObjectAttributes
83RTASN1TMPL_SET_OF(RTCRSPCSERIALIZEDOBJECTATTRIBUTE, RTCrSpcSerializedObjectAttribute);
84#undef RTASN1TMPL_TYPE
85#undef RTASN1TMPL_EXT_NAME
86#undef RTASN1TMPL_INT_NAME
87
88
89/*
90 * One SPC Serialized Object.
91 */
92#define RTASN1TMPL_TYPE RTCRSPCSERIALIZEDOBJECT
93#define RTASN1TMPL_EXT_NAME RTCrSpcSerializedObject
94#define RTASN1TMPL_INT_NAME rtCrSpcSerializedObject
95RTASN1TMPL_BEGIN_SEQCORE();
96RTASN1TMPL_MEMBER_EX( Uuid, RTASN1OCTETSTRING, RTAsn1OctetString,
97 RTASN1TMPL_MEMBER_CONSTR_MIN_MAX(Uuid, RTASN1OCTETSTRING, RTAsn1OctetString, 16, 16, RT_NOTHING));
98RTASN1TMPL_MEMBER( SerializedData, RTASN1OCTETSTRING, RTAsn1OctetString);
99RTASN1TMPL_EXEC_DECODE( rc = rtCrSpcSerializedObject_DecodeMore(pCursor, fFlags, pThis, pszErrorTag) ) /* no ; */
100RTASN1TMPL_END_SEQCORE();
101#undef RTASN1TMPL_TYPE
102#undef RTASN1TMPL_EXT_NAME
103#undef RTASN1TMPL_INT_NAME
104
105
106/*
107 * Choosy SPC strings.
108 */
109#define RTASN1TMPL_TYPE RTCRSPCSTRING
110#define RTASN1TMPL_EXT_NAME RTCrSpcString
111#define RTASN1TMPL_INT_NAME rtCrSpcString
112RTASN1TMPL_BEGIN_PCHOICE();
113RTASN1TMPL_PCHOICE_ITAG_CP( 0, RTCRSPCSTRINGCHOICE_UCS2, u.pUcs2, Ucs2, RTASN1STRING, RTAsn1BmpString);
114RTASN1TMPL_PCHOICE_ITAG_CP( 1, RTCRSPCSTRINGCHOICE_ASCII, u.pAscii, Ascii, RTASN1STRING, RTAsn1Ia5String);
115RTASN1TMPL_END_PCHOICE();
116#undef RTASN1TMPL_TYPE
117#undef RTASN1TMPL_EXT_NAME
118#undef RTASN1TMPL_INT_NAME
119
120
121/*
122 * SPC Link.
123 */
124#define RTASN1TMPL_TYPE RTCRSPCLINK
125#define RTASN1TMPL_EXT_NAME RTCrSpcLink
126#define RTASN1TMPL_INT_NAME rtCrSpcLink
127RTASN1TMPL_BEGIN_PCHOICE();
128RTASN1TMPL_PCHOICE_ITAG_CP( 0, RTCRSPCLINKCHOICE_URL, u.pUrl, Url, RTASN1STRING, RTAsn1Ia5String);
129RTASN1TMPL_PCHOICE_ITAG( 1, RTCRSPCLINKCHOICE_MONIKER, u.pMoniker, Moniker, RTCRSPCSERIALIZEDOBJECT, RTCrSpcSerializedObject);
130RTASN1TMPL_PCHOICE_XTAG( 2, RTCRSPCLINKCHOICE_FILE, u.pT2, CtxTag2, File, RTCRSPCSTRING, RTCrSpcString);
131RTASN1TMPL_END_PCHOICE();
132#undef RTASN1TMPL_TYPE
133#undef RTASN1TMPL_EXT_NAME
134#undef RTASN1TMPL_INT_NAME
135
136
137/*
138 * SPC PE Image Data.
139 *
140 * Note! This is not correctly declared in available specifications. The file
141 * member is tagged. Seeing the '--#public--' comment in the specs,
142 * one can't only guess that there are other alternatives in that part
143 * of the structure that microsoft does not wish to document.
144 */
145#define RTASN1TMPL_TYPE RTCRSPCPEIMAGEDATA
146#define RTASN1TMPL_EXT_NAME RTCrSpcPeImageData
147#define RTASN1TMPL_INT_NAME rtCrSpcPeImageData
148RTASN1TMPL_BEGIN_SEQCORE();
149/** @todo The flags defaults to includeResources. Could be expressed here rather
150 * than left to the user to deal with. */
151RTASN1TMPL_MEMBER_OPT_ITAG_EX( Flags, RTASN1BITSTRING, RTAsn1BitString, ASN1_TAG_BIT_STRING, RTASN1TMPL_ITAG_F_UP,
152 RTASN1TMPL_MEMBER_CONSTR_BITSTRING_MIN_MAX(Flags, 0, 3, RT_NOTHING));
153RTASN1TMPL_MEMBER_OPT_XTAG_EX( T0, CtxTag0, File, RTCRSPCLINK, RTCrSpcLink, 0, \
154 RTASN1TMPL_MEMBER_CONSTR_PRESENT(T0.File, RTCrSpcLink, RT_NOTHING));
155RTASN1TMPL_END_SEQCORE();
156#undef RTASN1TMPL_TYPE
157#undef RTASN1TMPL_EXT_NAME
158#undef RTASN1TMPL_INT_NAME
159
160
161/*
162 * SPC Attribute Type And Optional Value.
163 *
164 * Note! The value doesn't look very optional in available examples and specs.
165 * The available specs also claim there is an explicit 0 tag around the
166 * data, which isn't there is in signed executables. Gotta love Microsoft...
167 */
168#define RTASN1TMPL_TYPE RTCRSPCATTRIBUTETYPEANDOPTIONALVALUE
169#define RTASN1TMPL_EXT_NAME RTCrSpcAttributeTypeAndOptionalValue
170#define RTASN1TMPL_INT_NAME rtCrSpcAttributeTypeAndOptionalValue
171RTASN1TMPL_BEGIN_SEQCORE();
172RTASN1TMPL_MEMBER( Type, RTASN1OBJID, RTAsn1ObjId);
173RTASN1TMPL_MEMBER_DYN_BEGIN( Type, RTCRSPCAAOVTYPE, enmType, Allocation);
174RTASN1TMPL_MEMBER_DYN( uValue, pPeImage, PeImage, RTCRSPCPEIMAGEDATA, RTCrSpcPeImageData, Allocation,
175 Type, enmType, RTCRSPCAAOVTYPE_PE_IMAGE_DATA, RTCRSPCPEIMAGEDATA_OID);
176RTASN1TMPL_MEMBER_DYN_DEFAULT( uValue, pCore, RTASN1CORE, RTAsn1Core, Allocation,
177 Type, enmType, RTCRSPCAAOVTYPE_UNKNOWN);
178RTASN1TMPL_MEMBER_DYN_END( Type, RTCRSPCAAOVTYPE, enmType, Allocation);
179RTASN1TMPL_END_SEQCORE();
180#undef RTASN1TMPL_TYPE
181#undef RTASN1TMPL_EXT_NAME
182#undef RTASN1TMPL_INT_NAME
183
184
185/*
186 * SPC Indirect Data Content.
187 */
188#define RTASN1TMPL_TYPE RTCRSPCINDIRECTDATACONTENT
189#define RTASN1TMPL_EXT_NAME RTCrSpcIndirectDataContent
190#define RTASN1TMPL_INT_NAME rtCrSpcIndirectDataContent
191RTASN1TMPL_BEGIN_SEQCORE();
192RTASN1TMPL_MEMBER( Data, RTCRSPCATTRIBUTETYPEANDOPTIONALVALUE, RTCrSpcAttributeTypeAndOptionalValue);
193RTASN1TMPL_MEMBER( DigestInfo, RTCRPKCS7DIGESTINFO, RTCrPkcs7DigestInfo);
194RTASN1TMPL_END_SEQCORE();
195#undef RTASN1TMPL_TYPE
196#undef RTASN1TMPL_EXT_NAME
197#undef RTASN1TMPL_INT_NAME
198
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette