1*47e946e7SWyllys Ingersoll /* 2*47e946e7SWyllys Ingersoll * Common Public License Version 0.5 3*47e946e7SWyllys Ingersoll * 4*47e946e7SWyllys Ingersoll * THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF 5*47e946e7SWyllys Ingersoll * THIS COMMON PUBLIC LICENSE ("AGREEMENT"). ANY USE, 6*47e946e7SWyllys Ingersoll * REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES 7*47e946e7SWyllys Ingersoll * RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT. 8*47e946e7SWyllys Ingersoll * 9*47e946e7SWyllys Ingersoll * 1. DEFINITIONS 10*47e946e7SWyllys Ingersoll * 11*47e946e7SWyllys Ingersoll * "Contribution" means: 12*47e946e7SWyllys Ingersoll * a) in the case of the initial Contributor, the 13*47e946e7SWyllys Ingersoll * initial code and documentation distributed under 14*47e946e7SWyllys Ingersoll * this Agreement, and 15*47e946e7SWyllys Ingersoll * 16*47e946e7SWyllys Ingersoll * b) in the case of each subsequent Contributor: 17*47e946e7SWyllys Ingersoll * i) changes to the Program, and 18*47e946e7SWyllys Ingersoll * ii) additions to the Program; 19*47e946e7SWyllys Ingersoll * 20*47e946e7SWyllys Ingersoll * where such changes and/or additions to the Program 21*47e946e7SWyllys Ingersoll * originate from and are distributed by that 22*47e946e7SWyllys Ingersoll * particular Contributor. A Contribution 'originates' 23*47e946e7SWyllys Ingersoll * from a Contributor if it was added to the Program 24*47e946e7SWyllys Ingersoll * by such Contributor itself or anyone acting on such 25*47e946e7SWyllys Ingersoll * Contributor's behalf. Contributions do not include 26*47e946e7SWyllys Ingersoll * additions to the Program which: (i) are separate 27*47e946e7SWyllys Ingersoll * modules of software distributed in conjunction with 28*47e946e7SWyllys Ingersoll * the Program under their own license agreement, and 29*47e946e7SWyllys Ingersoll * (ii) are not derivative works of the Program. 30*47e946e7SWyllys Ingersoll * 31*47e946e7SWyllys Ingersoll * 32*47e946e7SWyllys Ingersoll * "Contributor" means any person or entity that distributes 33*47e946e7SWyllys Ingersoll * the Program. 34*47e946e7SWyllys Ingersoll * 35*47e946e7SWyllys Ingersoll * "Licensed Patents " mean patent claims licensable by a 36*47e946e7SWyllys Ingersoll * Contributor which are necessarily infringed by the use or 37*47e946e7SWyllys Ingersoll * sale of its Contribution alone or when combined with the 38*47e946e7SWyllys Ingersoll * Program. 39*47e946e7SWyllys Ingersoll * 40*47e946e7SWyllys Ingersoll * "Program" means the Contributions distributed in 41*47e946e7SWyllys Ingersoll * accordance with this Agreement. 42*47e946e7SWyllys Ingersoll * 43*47e946e7SWyllys Ingersoll * "Recipient" means anyone who receives the Program under 44*47e946e7SWyllys Ingersoll * this Agreement, including all Contributors. 45*47e946e7SWyllys Ingersoll * 46*47e946e7SWyllys Ingersoll * 2. GRANT OF RIGHTS 47*47e946e7SWyllys Ingersoll * 48*47e946e7SWyllys Ingersoll * a) Subject to the terms of this Agreement, each 49*47e946e7SWyllys Ingersoll * Contributor hereby grants Recipient a 50*47e946e7SWyllys Ingersoll * no - exclusive, worldwide, royalt - free copyright 51*47e946e7SWyllys Ingersoll * license to reproduce, prepare derivative works of, 52*47e946e7SWyllys Ingersoll * publicly display, publicly perform, distribute and 53*47e946e7SWyllys Ingersoll * sublicense the Contribution of such Contributor, if 54*47e946e7SWyllys Ingersoll * any, and such derivative works, in source code and 55*47e946e7SWyllys Ingersoll * object code form. 56*47e946e7SWyllys Ingersoll * 57*47e946e7SWyllys Ingersoll * b) Subject to the terms of this Agreement, each 58*47e946e7SWyllys Ingersoll * Contributor hereby grants Recipient a 59*47e946e7SWyllys Ingersoll * no - exclusive, worldwide, royalt - free patent 60*47e946e7SWyllys Ingersoll * license under Licensed Patents to make, use, sell, 61*47e946e7SWyllys Ingersoll * offer to sell, import and otherwise transfer the 62*47e946e7SWyllys Ingersoll * Contribution of such Contributor, if any, in source 63*47e946e7SWyllys Ingersoll * code and object code form. This patent license 64*47e946e7SWyllys Ingersoll * shall apply to the combination of the Contribution 65*47e946e7SWyllys Ingersoll * and the Program if, at the time the Contribution is 66*47e946e7SWyllys Ingersoll * added by the Contributor, such addition of the 67*47e946e7SWyllys Ingersoll * Contribution causes such combination to be covered 68*47e946e7SWyllys Ingersoll * by the Licensed Patents. The patent license shall 69*47e946e7SWyllys Ingersoll * not apply to any other combinations which include 70*47e946e7SWyllys Ingersoll * the Contribution. No hardware per se is licensed 71*47e946e7SWyllys Ingersoll * hereunder. 72*47e946e7SWyllys Ingersoll * 73*47e946e7SWyllys Ingersoll * c) Recipient understands that although each 74*47e946e7SWyllys Ingersoll * Contributor grants the licenses to its 75*47e946e7SWyllys Ingersoll * Contributions set forth herein, no assurances are 76*47e946e7SWyllys Ingersoll * provided by any Contributor that the Program does 77*47e946e7SWyllys Ingersoll * not infringe the patent or other intellectual 78*47e946e7SWyllys Ingersoll * property rights of any other entity. Each 79*47e946e7SWyllys Ingersoll * Contributor disclaims any liability to Recipient 80*47e946e7SWyllys Ingersoll * for claims brought by any other entity based on 81*47e946e7SWyllys Ingersoll * infringement of intellectual property rights or 82*47e946e7SWyllys Ingersoll * otherwise. As a condition to exercising the rights 83*47e946e7SWyllys Ingersoll * and licenses granted hereunder, each Recipient 84*47e946e7SWyllys Ingersoll * hereby assumes sole responsibility to secure any 85*47e946e7SWyllys Ingersoll * other intellectual property rights needed, if any. 86*47e946e7SWyllys Ingersoll * 87*47e946e7SWyllys Ingersoll * For example, if a third party patent license is 88*47e946e7SWyllys Ingersoll * required to allow Recipient to distribute the 89*47e946e7SWyllys Ingersoll * Program, it is Recipient's responsibility to 90*47e946e7SWyllys Ingersoll * acquire that license before distributing the 91*47e946e7SWyllys Ingersoll * Program. 92*47e946e7SWyllys Ingersoll * 93*47e946e7SWyllys Ingersoll * d) Each Contributor represents that to its 94*47e946e7SWyllys Ingersoll * knowledge it has sufficient copyright rights in its 95*47e946e7SWyllys Ingersoll * Contribution, if any, to grant the copyright 96*47e946e7SWyllys Ingersoll * license set forth in this Agreement. 97*47e946e7SWyllys Ingersoll * 98*47e946e7SWyllys Ingersoll * 3. REQUIREMENTS 99*47e946e7SWyllys Ingersoll * 100*47e946e7SWyllys Ingersoll * A Contributor may choose to distribute the Program in 101*47e946e7SWyllys Ingersoll * object code form under its own license agreement, provided 102*47e946e7SWyllys Ingersoll * that: 103*47e946e7SWyllys Ingersoll * a) it complies with the terms and conditions of 104*47e946e7SWyllys Ingersoll * this Agreement; and 105*47e946e7SWyllys Ingersoll * 106*47e946e7SWyllys Ingersoll * b) its license agreement: 107*47e946e7SWyllys Ingersoll * i) effectively disclaims on behalf of all 108*47e946e7SWyllys Ingersoll * Contributors all warranties and conditions, express 109*47e946e7SWyllys Ingersoll * and implied, including warranties or conditions of 110*47e946e7SWyllys Ingersoll * title and no - infringement, and implied warranties 111*47e946e7SWyllys Ingersoll * or conditions of merchantability and fitness for a 112*47e946e7SWyllys Ingersoll * particular purpose; 113*47e946e7SWyllys Ingersoll * 114*47e946e7SWyllys Ingersoll * ii) effectively excludes on behalf of all 115*47e946e7SWyllys Ingersoll * Contributors all liability for damages, including 116*47e946e7SWyllys Ingersoll * direct, indirect, special, incidental and 117*47e946e7SWyllys Ingersoll * consequential damages, such as lost profits; 118*47e946e7SWyllys Ingersoll * 119*47e946e7SWyllys Ingersoll * iii) states that any provisions which differ from 120*47e946e7SWyllys Ingersoll * this Agreement are offered by that Contributor 121*47e946e7SWyllys Ingersoll * alone and not by any other party; and 122*47e946e7SWyllys Ingersoll * 123*47e946e7SWyllys Ingersoll * iv) states that source code for the Program is 124*47e946e7SWyllys Ingersoll * available from such Contributor, and informs 125*47e946e7SWyllys Ingersoll * licensees how to obtain it in a reasonable manner 126*47e946e7SWyllys Ingersoll * on or through a medium customarily used for 127*47e946e7SWyllys Ingersoll * software exchange. 128*47e946e7SWyllys Ingersoll * 129*47e946e7SWyllys Ingersoll * When the Program is made available in source code form: 130*47e946e7SWyllys Ingersoll * a) it must be made available under this Agreement; 131*47e946e7SWyllys Ingersoll * and 132*47e946e7SWyllys Ingersoll * b) a copy of this Agreement must be included with 133*47e946e7SWyllys Ingersoll * each copy of the Program. 134*47e946e7SWyllys Ingersoll * 135*47e946e7SWyllys Ingersoll * Contributors may not remove or alter any copyright notices 136*47e946e7SWyllys Ingersoll * contained within the Program. 137*47e946e7SWyllys Ingersoll * 138*47e946e7SWyllys Ingersoll * Each Contributor must identify itself as the originator of 139*47e946e7SWyllys Ingersoll * its Contribution, if any, in a manner that reasonably 140*47e946e7SWyllys Ingersoll * allows subsequent Recipients to identify the originator of 141*47e946e7SWyllys Ingersoll * the Contribution. 142*47e946e7SWyllys Ingersoll * 143*47e946e7SWyllys Ingersoll * 144*47e946e7SWyllys Ingersoll * 4. COMMERCIAL DISTRIBUTION 145*47e946e7SWyllys Ingersoll * 146*47e946e7SWyllys Ingersoll * Commercial distributors of software may accept certain 147*47e946e7SWyllys Ingersoll * responsibilities with respect to end users, business 148*47e946e7SWyllys Ingersoll * partners and the like. While this license is intended to 149*47e946e7SWyllys Ingersoll * facilitate the commercial use of the Program, the 150*47e946e7SWyllys Ingersoll * Contributor who includes the Program in a commercial 151*47e946e7SWyllys Ingersoll * product offering should do so in a manner which does not 152*47e946e7SWyllys Ingersoll * create potential liability for other Contributors. 153*47e946e7SWyllys Ingersoll * Therefore, if a Contributor includes the Program in a 154*47e946e7SWyllys Ingersoll * commercial product offering, such Contributor ("Commercial 155*47e946e7SWyllys Ingersoll * Contributor") hereby agrees to defend and indemnify every 156*47e946e7SWyllys Ingersoll * other Contributor ("Indemnified Contributor") against any 157*47e946e7SWyllys Ingersoll * losses, damages and costs (collectively "Losses") arising 158*47e946e7SWyllys Ingersoll * from claims, lawsuits and other legal actions brought by a 159*47e946e7SWyllys Ingersoll * third party against the Indemnified Contributor to the 160*47e946e7SWyllys Ingersoll * extent caused by the acts or omissions of such Commercial 161*47e946e7SWyllys Ingersoll * Contributor in connection with its distribution of the 162*47e946e7SWyllys Ingersoll * Program in a commercial product offering. The obligations 163*47e946e7SWyllys Ingersoll * in this section do not apply to any claims or Losses 164*47e946e7SWyllys Ingersoll * relating to any actual or alleged intellectual property 165*47e946e7SWyllys Ingersoll * infringement. In order to qualify, an Indemnified 166*47e946e7SWyllys Ingersoll * Contributor must: a) promptly notify the Commercial 167*47e946e7SWyllys Ingersoll * Contributor in writing of such claim, and b) allow the 168*47e946e7SWyllys Ingersoll * Commercial Contributor to control, and cooperate with the 169*47e946e7SWyllys Ingersoll * Commercial Contributor in, the defense and any related 170*47e946e7SWyllys Ingersoll * settlement negotiations. The Indemnified Contributor may 171*47e946e7SWyllys Ingersoll * participate in any such claim at its own expense. 172*47e946e7SWyllys Ingersoll * 173*47e946e7SWyllys Ingersoll * 174*47e946e7SWyllys Ingersoll * For example, a Contributor might include the Program in a 175*47e946e7SWyllys Ingersoll * commercial product offering, Product X. That Contributor 176*47e946e7SWyllys Ingersoll * is then a Commercial Contributor. If that Commercial 177*47e946e7SWyllys Ingersoll * Contributor then makes performance claims, or offers 178*47e946e7SWyllys Ingersoll * warranties related to Product X, those performance claims 179*47e946e7SWyllys Ingersoll * and warranties are such Commercial Contributor's 180*47e946e7SWyllys Ingersoll * responsibility alone. Under this section, the Commercial 181*47e946e7SWyllys Ingersoll * Contributor would have to defend claims against the other 182*47e946e7SWyllys Ingersoll * Contributors related to those performance claims and 183*47e946e7SWyllys Ingersoll * warranties, and if a court requires any other Contributor 184*47e946e7SWyllys Ingersoll * to pay any damages as a result, the Commercial Contributor 185*47e946e7SWyllys Ingersoll * must pay those damages. 186*47e946e7SWyllys Ingersoll * 187*47e946e7SWyllys Ingersoll * 188*47e946e7SWyllys Ingersoll * 5. NO WARRANTY 189*47e946e7SWyllys Ingersoll * 190*47e946e7SWyllys Ingersoll * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE 191*47e946e7SWyllys Ingersoll * PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT 192*47e946e7SWyllys Ingersoll * WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR 193*47e946e7SWyllys Ingersoll * IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR 194*47e946e7SWyllys Ingersoll * CONDITIONS OF TITLE, NO - INFRINGEMENT, MERCHANTABILITY OR 195*47e946e7SWyllys Ingersoll * FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely 196*47e946e7SWyllys Ingersoll * responsible for determining the appropriateness of using 197*47e946e7SWyllys Ingersoll * and distributing the Program and assumes all risks 198*47e946e7SWyllys Ingersoll * associated with its exercise of rights under this 199*47e946e7SWyllys Ingersoll * Agreement, including but not limited to the risks and 200*47e946e7SWyllys Ingersoll * costs of program errors, compliance with applicable laws, 201*47e946e7SWyllys Ingersoll * damage to or loss of data, programs or equipment, and 202*47e946e7SWyllys Ingersoll * unavailability or interruption of operations. 203*47e946e7SWyllys Ingersoll * 204*47e946e7SWyllys Ingersoll * 6. DISCLAIMER OF LIABILITY 205*47e946e7SWyllys Ingersoll * EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER 206*47e946e7SWyllys Ingersoll * RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY 207*47e946e7SWyllys Ingersoll * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 208*47e946e7SWyllys Ingersoll * OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION 209*47e946e7SWyllys Ingersoll * LOST PROFITS), HOWEVER CAUSED AND ON ANY THEORY OF 210*47e946e7SWyllys Ingersoll * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 211*47e946e7SWyllys Ingersoll * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 212*47e946e7SWyllys Ingersoll * OF THE USE OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE 213*47e946e7SWyllys Ingersoll * OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE 214*47e946e7SWyllys Ingersoll * POSSIBILITY OF SUCH DAMAGES. 215*47e946e7SWyllys Ingersoll * 216*47e946e7SWyllys Ingersoll * 7. GENERAL 217*47e946e7SWyllys Ingersoll * 218*47e946e7SWyllys Ingersoll * If any provision of this Agreement is invalid or 219*47e946e7SWyllys Ingersoll * unenforceable under applicable law, it shall not affect 220*47e946e7SWyllys Ingersoll * the validity or enforceability of the remainder of the 221*47e946e7SWyllys Ingersoll * terms of this Agreement, and without further action by the 222*47e946e7SWyllys Ingersoll * parties hereto, such provision shall be reformed to the 223*47e946e7SWyllys Ingersoll * minimum extent necessary to make such provision valid and 224*47e946e7SWyllys Ingersoll * enforceable. 225*47e946e7SWyllys Ingersoll * 226*47e946e7SWyllys Ingersoll * 227*47e946e7SWyllys Ingersoll * If Recipient institutes patent litigation against a 228*47e946e7SWyllys Ingersoll * Contributor with respect to a patent applicable to 229*47e946e7SWyllys Ingersoll * software (including a cros - claim or counterclaim in a 230*47e946e7SWyllys Ingersoll * lawsuit), then any patent licenses granted by that 231*47e946e7SWyllys Ingersoll * Contributor to such Recipient under this Agreement shall 232*47e946e7SWyllys Ingersoll * terminate as of the date such litigation is filed. In 233*47e946e7SWyllys Ingersoll * addition, If Recipient institutes patent litigation 234*47e946e7SWyllys Ingersoll * against any entity (including a cros - claim or 235*47e946e7SWyllys Ingersoll * counterclaim in a lawsuit) alleging that the Program 236*47e946e7SWyllys Ingersoll * itself (excluding combinations of the Program with other 237*47e946e7SWyllys Ingersoll * software or hardware) infringes such Recipient's 238*47e946e7SWyllys Ingersoll * patent(s), then such Recipient's rights granted under 239*47e946e7SWyllys Ingersoll * Section 2(b) shall terminate as of the date such 240*47e946e7SWyllys Ingersoll * litigation is filed. 241*47e946e7SWyllys Ingersoll * 242*47e946e7SWyllys Ingersoll * All Recipient's rights under this Agreement shall 243*47e946e7SWyllys Ingersoll * terminate if it fails to comply with any of the material 244*47e946e7SWyllys Ingersoll * terms or conditions of this Agreement and does not cure 245*47e946e7SWyllys Ingersoll * such failure in a reasonable period of time after becoming 246*47e946e7SWyllys Ingersoll * aware of such noncompliance. If all Recipient's rights 247*47e946e7SWyllys Ingersoll * under this Agreement terminate, Recipient agrees to cease 248*47e946e7SWyllys Ingersoll * use and distribution of the Program as soon as reasonably 249*47e946e7SWyllys Ingersoll * practicable. However, Recipient's obligations under this 250*47e946e7SWyllys Ingersoll * Agreement and any licenses granted by Recipient relating 251*47e946e7SWyllys Ingersoll * to the Program shall continue and survive. 252*47e946e7SWyllys Ingersoll * 253*47e946e7SWyllys Ingersoll * Everyone is permitted to copy and distribute copies of 254*47e946e7SWyllys Ingersoll * this Agreement, but in order to avoid inconsistency the 255*47e946e7SWyllys Ingersoll * Agreement is copyrighted and may only be modified in the 256*47e946e7SWyllys Ingersoll * following manner. The Agreement Steward reserves the right 257*47e946e7SWyllys Ingersoll * to publish new versions (including revisions) of this 258*47e946e7SWyllys Ingersoll * Agreement from time to time. No one other than the 259*47e946e7SWyllys Ingersoll * Agreement Steward has the right to modify this Agreement. 260*47e946e7SWyllys Ingersoll * 261*47e946e7SWyllys Ingersoll * IBM is the initial Agreement Steward. IBM may assign the 262*47e946e7SWyllys Ingersoll * responsibility to serve as the Agreement Steward to a 263*47e946e7SWyllys Ingersoll * suitable separate entity. Each new version of the 264*47e946e7SWyllys Ingersoll * Agreement will be given a distinguishing version number. 265*47e946e7SWyllys Ingersoll * The Program (including Contributions) may always be 266*47e946e7SWyllys Ingersoll * distributed subject to the version of the Agreement under 267*47e946e7SWyllys Ingersoll * which it was received. In addition, after a new version of 268*47e946e7SWyllys Ingersoll * the Agreement is published, Contributor may elect to 269*47e946e7SWyllys Ingersoll * distribute the Program (including its Contributions) under 270*47e946e7SWyllys Ingersoll * the new version. Except as expressly stated in Sections 271*47e946e7SWyllys Ingersoll * 2(a) and 2(b) above, Recipient receives no rights or 272*47e946e7SWyllys Ingersoll * licenses to the intellectual property of any Contributor 273*47e946e7SWyllys Ingersoll * under this Agreement, whether expressly, by implication, 274*47e946e7SWyllys Ingersoll * estoppel or otherwise. All rights in the Program not 275*47e946e7SWyllys Ingersoll * expressly granted under this Agreement are reserved. 276*47e946e7SWyllys Ingersoll * 277*47e946e7SWyllys Ingersoll * 278*47e946e7SWyllys Ingersoll * This Agreement is governed by the laws of the State of New 279*47e946e7SWyllys Ingersoll * York and the intellectual property laws of the United 280*47e946e7SWyllys Ingersoll * States of America. No party to this Agreement will bring a 281*47e946e7SWyllys Ingersoll * legal action under this Agreement more than one year after 282*47e946e7SWyllys Ingersoll * the cause of action arose. Each party waives its rights to 283*47e946e7SWyllys Ingersoll * a jury trial in any resulting litigation. 284*47e946e7SWyllys Ingersoll * 285*47e946e7SWyllys Ingersoll * 286*47e946e7SWyllys Ingersoll * 287*47e946e7SWyllys Ingersoll * (C) COPYRIGHT International Business Machines Corp. 2001, 2002 288*47e946e7SWyllys Ingersoll */ 289*47e946e7SWyllys Ingersoll /* 290*47e946e7SWyllys Ingersoll * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 291*47e946e7SWyllys Ingersoll * Use is subject to license terms. 292*47e946e7SWyllys Ingersoll */ 293*47e946e7SWyllys Ingersoll #include "tpmtok_int.h" 294*47e946e7SWyllys Ingersoll 295*47e946e7SWyllys Ingersoll CK_RV 296*47e946e7SWyllys Ingersoll hwf_object_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) 297*47e946e7SWyllys Ingersoll { 298*47e946e7SWyllys Ingersoll CK_ATTRIBUTE * attr = NULL; 299*47e946e7SWyllys Ingersoll CK_BBOOL found; 300*47e946e7SWyllys Ingersoll 301*47e946e7SWyllys Ingersoll found = template_attribute_find(tmpl, CKA_HW_FEATURE_TYPE, &attr); 302*47e946e7SWyllys Ingersoll if (! found) { 303*47e946e7SWyllys Ingersoll if (mode == MODE_CREATE) { 304*47e946e7SWyllys Ingersoll return (CKR_TEMPLATE_INCOMPLETE); 305*47e946e7SWyllys Ingersoll } 306*47e946e7SWyllys Ingersoll } 307*47e946e7SWyllys Ingersoll 308*47e946e7SWyllys Ingersoll return (template_check_required_base_attributes(tmpl, mode)); 309*47e946e7SWyllys Ingersoll } 310*47e946e7SWyllys Ingersoll 311*47e946e7SWyllys Ingersoll CK_RV 312*47e946e7SWyllys Ingersoll clock_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) 313*47e946e7SWyllys Ingersoll { 314*47e946e7SWyllys Ingersoll CK_ATTRIBUTE *attr = NULL; 315*47e946e7SWyllys Ingersoll CK_BBOOL found; 316*47e946e7SWyllys Ingersoll 317*47e946e7SWyllys Ingersoll if (mode == MODE_CREATE) { 318*47e946e7SWyllys Ingersoll found = template_attribute_find(tmpl, CKA_VALUE, &attr); 319*47e946e7SWyllys Ingersoll if (! found) { 320*47e946e7SWyllys Ingersoll return (CKR_TEMPLATE_INCOMPLETE); 321*47e946e7SWyllys Ingersoll } 322*47e946e7SWyllys Ingersoll } 323*47e946e7SWyllys Ingersoll 324*47e946e7SWyllys Ingersoll return (hwf_object_check_required_attributes(tmpl, mode)); 325*47e946e7SWyllys Ingersoll } 326*47e946e7SWyllys Ingersoll 327*47e946e7SWyllys Ingersoll CK_RV 328*47e946e7SWyllys Ingersoll counter_check_required_attributes(TEMPLATE *tmpl, CK_ULONG mode) 329*47e946e7SWyllys Ingersoll { 330*47e946e7SWyllys Ingersoll CK_ATTRIBUTE *attr = NULL; 331*47e946e7SWyllys Ingersoll CK_BBOOL found; 332*47e946e7SWyllys Ingersoll 333*47e946e7SWyllys Ingersoll if (mode == MODE_CREATE) { 334*47e946e7SWyllys Ingersoll found = template_attribute_find(tmpl, CKA_VALUE, &attr); 335*47e946e7SWyllys Ingersoll if (! found) { 336*47e946e7SWyllys Ingersoll return (CKR_TEMPLATE_INCOMPLETE); 337*47e946e7SWyllys Ingersoll } 338*47e946e7SWyllys Ingersoll 339*47e946e7SWyllys Ingersoll found = template_attribute_find(tmpl, CKA_HAS_RESET, &attr); 340*47e946e7SWyllys Ingersoll if (! found) { 341*47e946e7SWyllys Ingersoll return (CKR_TEMPLATE_INCOMPLETE); 342*47e946e7SWyllys Ingersoll } 343*47e946e7SWyllys Ingersoll 344*47e946e7SWyllys Ingersoll found = template_attribute_find(tmpl, CKA_RESET_ON_INIT, &attr); 345*47e946e7SWyllys Ingersoll if (! found) { 346*47e946e7SWyllys Ingersoll return (CKR_TEMPLATE_INCOMPLETE); 347*47e946e7SWyllys Ingersoll } 348*47e946e7SWyllys Ingersoll } 349*47e946e7SWyllys Ingersoll 350*47e946e7SWyllys Ingersoll return (hwf_object_check_required_attributes(tmpl, mode)); 351*47e946e7SWyllys Ingersoll } 352*47e946e7SWyllys Ingersoll 353*47e946e7SWyllys Ingersoll 354*47e946e7SWyllys Ingersoll // hwf_object_validate_attribute() 355*47e946e7SWyllys Ingersoll // 356*47e946e7SWyllys Ingersoll CK_RV 357*47e946e7SWyllys Ingersoll hwf_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode) 358*47e946e7SWyllys Ingersoll { 359*47e946e7SWyllys Ingersoll switch (attr->type) { 360*47e946e7SWyllys Ingersoll case CKA_HW_FEATURE_TYPE: 361*47e946e7SWyllys Ingersoll if (mode == MODE_CREATE) 362*47e946e7SWyllys Ingersoll return (CKR_OK); 363*47e946e7SWyllys Ingersoll else 364*47e946e7SWyllys Ingersoll return (CKR_ATTRIBUTE_READ_ONLY); 365*47e946e7SWyllys Ingersoll 366*47e946e7SWyllys Ingersoll default: 367*47e946e7SWyllys Ingersoll return (template_validate_base_attribute(tmpl, 368*47e946e7SWyllys Ingersoll attr, mode)); 369*47e946e7SWyllys Ingersoll } 370*47e946e7SWyllys Ingersoll } 371*47e946e7SWyllys Ingersoll 372*47e946e7SWyllys Ingersoll CK_RV 373*47e946e7SWyllys Ingersoll clock_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode) { 374*47e946e7SWyllys Ingersoll switch (attr->type) { 375*47e946e7SWyllys Ingersoll case CKA_VALUE: 376*47e946e7SWyllys Ingersoll return (CKR_OK); 377*47e946e7SWyllys Ingersoll 378*47e946e7SWyllys Ingersoll default: 379*47e946e7SWyllys Ingersoll return (hwf_validate_attribute(tmpl, attr, mode)); 380*47e946e7SWyllys Ingersoll } 381*47e946e7SWyllys Ingersoll } 382*47e946e7SWyllys Ingersoll 383*47e946e7SWyllys Ingersoll CK_RV 384*47e946e7SWyllys Ingersoll counter_validate_attribute(TEMPLATE *tmpl, CK_ATTRIBUTE *attr, CK_ULONG mode) 385*47e946e7SWyllys Ingersoll { 386*47e946e7SWyllys Ingersoll switch (attr->type) { 387*47e946e7SWyllys Ingersoll case CKA_VALUE: 388*47e946e7SWyllys Ingersoll /* Fall Through */ 389*47e946e7SWyllys Ingersoll case CKA_HAS_RESET: 390*47e946e7SWyllys Ingersoll /* Fall Through */ 391*47e946e7SWyllys Ingersoll case CKA_RESET_ON_INIT: 392*47e946e7SWyllys Ingersoll return (CKR_ATTRIBUTE_READ_ONLY); 393*47e946e7SWyllys Ingersoll 394*47e946e7SWyllys Ingersoll default: 395*47e946e7SWyllys Ingersoll return (hwf_validate_attribute(tmpl, attr, mode)); 396*47e946e7SWyllys Ingersoll } 397*47e946e7SWyllys Ingersoll } 398*47e946e7SWyllys Ingersoll 399*47e946e7SWyllys Ingersoll 400*47e946e7SWyllys Ingersoll CK_RV 401*47e946e7SWyllys Ingersoll clock_set_default_attributes(TEMPLATE *tmpl) 402*47e946e7SWyllys Ingersoll { 403*47e946e7SWyllys Ingersoll CK_ATTRIBUTE *value_attr; 404*47e946e7SWyllys Ingersoll 405*47e946e7SWyllys Ingersoll value_attr = (CK_ATTRIBUTE *)malloc(sizeof (CK_ATTRIBUTE)); 406*47e946e7SWyllys Ingersoll 407*47e946e7SWyllys Ingersoll if (! value_attr) { 408*47e946e7SWyllys Ingersoll return (CKR_HOST_MEMORY); 409*47e946e7SWyllys Ingersoll } 410*47e946e7SWyllys Ingersoll 411*47e946e7SWyllys Ingersoll value_attr->type = CKA_VALUE; 412*47e946e7SWyllys Ingersoll value_attr->ulValueLen = 0; 413*47e946e7SWyllys Ingersoll value_attr->pValue = NULL; 414*47e946e7SWyllys Ingersoll 415*47e946e7SWyllys Ingersoll (void) template_update_attribute(tmpl, value_attr); 416*47e946e7SWyllys Ingersoll 417*47e946e7SWyllys Ingersoll return (CKR_OK); 418*47e946e7SWyllys Ingersoll } 419*47e946e7SWyllys Ingersoll 420*47e946e7SWyllys Ingersoll CK_RV 421*47e946e7SWyllys Ingersoll counter_set_default_attributes(TEMPLATE *tmpl) 422*47e946e7SWyllys Ingersoll { 423*47e946e7SWyllys Ingersoll CK_ATTRIBUTE *value_attr; 424*47e946e7SWyllys Ingersoll CK_ATTRIBUTE *hasreset_attr; 425*47e946e7SWyllys Ingersoll CK_ATTRIBUTE *resetoninit_attr; 426*47e946e7SWyllys Ingersoll 427*47e946e7SWyllys Ingersoll value_attr = (CK_ATTRIBUTE *)malloc(sizeof (CK_ATTRIBUTE)); 428*47e946e7SWyllys Ingersoll hasreset_attr = (CK_ATTRIBUTE *)malloc(sizeof (CK_ATTRIBUTE) + 429*47e946e7SWyllys Ingersoll sizeof (CK_BBOOL)); 430*47e946e7SWyllys Ingersoll resetoninit_attr = (CK_ATTRIBUTE *)malloc(sizeof (CK_ATTRIBUTE) + 431*47e946e7SWyllys Ingersoll sizeof (CK_BBOOL)); 432*47e946e7SWyllys Ingersoll 433*47e946e7SWyllys Ingersoll if (! value_attr || ! hasreset_attr || ! resetoninit_attr) { 434*47e946e7SWyllys Ingersoll if (value_attr) free(value_attr); 435*47e946e7SWyllys Ingersoll if (hasreset_attr) free(hasreset_attr); 436*47e946e7SWyllys Ingersoll if (resetoninit_attr) free(resetoninit_attr); 437*47e946e7SWyllys Ingersoll return (CKR_HOST_MEMORY); 438*47e946e7SWyllys Ingersoll } 439*47e946e7SWyllys Ingersoll 440*47e946e7SWyllys Ingersoll value_attr->type = CKA_VALUE; 441*47e946e7SWyllys Ingersoll value_attr->ulValueLen = 0; 442*47e946e7SWyllys Ingersoll value_attr->pValue = NULL; 443*47e946e7SWyllys Ingersoll 444*47e946e7SWyllys Ingersoll hasreset_attr->type = CKA_HAS_RESET; 445*47e946e7SWyllys Ingersoll hasreset_attr->ulValueLen = sizeof (CK_BBOOL); 446*47e946e7SWyllys Ingersoll hasreset_attr->pValue = (CK_BYTE *)hasreset_attr + 447*47e946e7SWyllys Ingersoll sizeof (CK_ATTRIBUTE); 448*47e946e7SWyllys Ingersoll *(CK_BBOOL *)hasreset_attr->pValue = FALSE; 449*47e946e7SWyllys Ingersoll 450*47e946e7SWyllys Ingersoll /* Hmm... Not sure if we should be setting this here. */ 451*47e946e7SWyllys Ingersoll resetoninit_attr->type = CKA_RESET_ON_INIT; 452*47e946e7SWyllys Ingersoll resetoninit_attr->ulValueLen = sizeof (CK_BBOOL); 453*47e946e7SWyllys Ingersoll resetoninit_attr->pValue = (CK_BYTE *)resetoninit_attr + 454*47e946e7SWyllys Ingersoll sizeof (CK_ATTRIBUTE); 455*47e946e7SWyllys Ingersoll *(CK_BBOOL *)resetoninit_attr->pValue = FALSE; 456*47e946e7SWyllys Ingersoll 457*47e946e7SWyllys Ingersoll (void) template_update_attribute(tmpl, value_attr); 458*47e946e7SWyllys Ingersoll (void) template_update_attribute(tmpl, hasreset_attr); 459*47e946e7SWyllys Ingersoll (void) template_update_attribute(tmpl, resetoninit_attr); 460*47e946e7SWyllys Ingersoll 461*47e946e7SWyllys Ingersoll return (CKR_OK); 462*47e946e7SWyllys Ingersoll } 463