12e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/** 22e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Copyright(c) 2011 Trusted Logic. All rights reserved. 32e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 42e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Redistribution and use in source and binary forms, with or without 52e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * modification, are permitted provided that the following conditions 62e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * are met: 72e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 82e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * * Redistributions of source code must retain the above copyright 92e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * notice, this list of conditions and the following disclaimer. 102e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * * Redistributions in binary form must reproduce the above copyright 112e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * notice, this list of conditions and the following disclaimer in 122e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * the documentation and/or other materials provided with the 132e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * distribution. 142e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * * Neither the name Trusted Logic nor the names of its 152e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * contributors may be used to endorse or promote products derived 162e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * from this software without specific prior written permission. 172e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 182e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 192e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 202e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 212e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 222e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 232e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 242e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 252e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 262e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 272e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 282e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 292e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley */ 302e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 312e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* 322e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * This API allows parsing manifest files. A manifest is a text file that contains 332e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * a property set. A property is a name-value pair. 342e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 352e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * The BNF syntax of a manifest file is : 362e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 372e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * See Spec of Client Authentication 382e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 392e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Note: for each property, trailing spaces and tabs between the ':' separator 402e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * and the first character of the property value are discarded. 412e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley */ 422e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 432e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 442e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#ifndef __LIB_MANIFEST2_H__ 452e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define __LIB_MANIFEST2_H__ 462e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 472e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#include "s_error.h" 482e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#include "s_type.h" 492e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 502e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#ifdef __cplusplus 512e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleyextern "C" { 522e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#endif 532e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#if 0 542e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} /* balance curly quotes */ 552e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#endif 562e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 572e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* The input file is a compiled manifest */ 582e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define LIB_MANIFEST2_TYPE_COMPILED 1 592e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* The input file is a source manifest */ 602e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define LIB_MANIFEST2_TYPE_SOURCE 2 612e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* The input file is a source manifest with sections */ 622e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#define LIB_MANIFEST2_TYPE_SOURCE_WITH_SECTIONS 3 632e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 642e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleytypedef struct 652e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ 662e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley char* pManifestName; 672e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nType; 682e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint8_t* pManifestContent; 692e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nManifestLength; 702e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nOffset; 712e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nLine; 722e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t nSectionStartOffset; 732e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} 742e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyLIB_MANIFEST2_CONTEXT; 752e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 762e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/* Must be used before libManifest2GetNextItem. 772e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley The fields nType, pManifestContent, nManifestLength, and pManifestName (if applicable) 782e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley must be filled-in before. 792e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley*/ 802e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckleyvoid libManifest2InitContext( 812e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley LIB_MANIFEST2_CONTEXT* pContext); 822e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 832e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley/** 842e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Returns S_ITEM_NOT_FOUND for the last itel 852e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 862e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * If type is LIB_MANIFEST2_TYPE_SOURCE, supports comments, multiple newlines, and leading BOM, 872e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * and checks that properties are not duplicated 882e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * 892e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * If type is LIB_MANIFEST2_TYPE_SOURCE_WITH_SECTIONS, returns *pValue == NULL for a section 902e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * Check that the section name contains only ASCII characters and that there is no duplicate 912e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley * sections (same name, case insensitive) 922e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley **/ 932e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyS_RESULT libManifest2GetNextItem( 942e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley LIB_MANIFEST2_CONTEXT* pContext, 952e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley OUT uint8_t** ppName, 962e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley OUT uint32_t* pNameLength, 972e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley OUT uint8_t** ppValue, 982e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley OUT uint32_t* pValueLength); 992e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 1002e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan BuckleyS_RESULT libManifest2CheckFormat( 1012e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley LIB_MANIFEST2_CONTEXT* pContext, 1022e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley uint32_t* pnItemCount); 1032e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 1042e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#if 0 1052e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley{ /* balance curly quotes */ 1062e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#endif 1072e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#ifdef __cplusplus 1082e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley} /* closes extern "C" */ 1092e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#endif 1102e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley 1112e9e9eca83c3dee85b7815573a8cf1e6d1780741Bryan Buckley#endif /* !defined(__LIB_MANIFEST_H__) */ 112