123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325 |
- /* SPDX-License-Identifier: BSD-2-Clause */
- /*******************************************************************************
- * Copyright 2018, Fraunhofer SIT sponsored by Infineon Technologies AG
- * All rights reserved.
- ******************************************************************************/
- #ifdef HAVE_CONFIG_H
- #include <config.h>
- #endif
- #include <stdarg.h>
- #include <inttypes.h>
- #include <string.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <json-c/json_util.h>
- #include <json-c/json_tokener.h>
- #include <setjmp.h>
- #include <cmocka.h>
- #include "tss2_fapi.h"
- #include "tpm_json_serialize.h"
- #include "tpm_json_deserialize.h"
- #include "ifapi_json_serialize.h"
- #include "ifapi_json_deserialize.h"
- #include "fapi_policy.h"
- #include "util/aux_util.h"
- #define LOGMODULE tests
- #include "util/log.h"
- static void
- cleanup_policy_element(TPMT_POLICYELEMENT *policy)
- {
- switch (policy->type) {
- case POLICYSECRET:
- SAFE_FREE(policy->element.PolicySecret.objectPath);
- break;
- case POLICYAUTHORIZE:
- SAFE_FREE(policy->element.PolicyAuthorize.keyPath);
- SAFE_FREE(policy->element.PolicyAuthorize.keyPEM);
- break;
- case POLICYAUTHORIZENV:
- SAFE_FREE( policy->element.PolicyAuthorizeNv.nvPath);
- SAFE_FREE( policy->element.PolicyAuthorizeNv.policy_buffer);
- break;
- case POLICYSIGNED:
- SAFE_FREE(policy->element.PolicySigned.keyPath);
- SAFE_FREE(policy->element.PolicySigned.keyPEM);
- break;
- case POLICYPCR:
- SAFE_FREE(policy->element.PolicyPCR.pcrs);
- break;
- case POLICYNV:
- SAFE_FREE(policy->element.PolicyNV.nvPath);
- break;
- case POLICYDUPLICATIONSELECT:
- SAFE_FREE(policy->element.PolicyDuplicationSelect.newParentPath);
- break;
- }
- }
- static void cleanup_policy_elements(TPML_POLICYELEMENTS *policy)
- {
- size_t i, j;
- if (policy != NULL) {
- for (i = 0; i < policy->count; i++) {
- if (policy->elements[i].type == POLICYOR) {
- /* Policy with sub policies */
- TPML_POLICYBRANCHES *branches = policy->elements[i].element.PolicyOr.branches;
- for (j = 0; j < branches->count; j++) {
- SAFE_FREE(branches->authorizations[j].name);
- SAFE_FREE(branches->authorizations[j].description);
- cleanup_policy_elements(branches->authorizations[j].policy);
- }
- SAFE_FREE(branches);
- } else {
- cleanup_policy_element(&policy->elements[i]);
- }
- }
- SAFE_FREE(policy);
- }
- }
- /** Free memory allocated during deserialization of policy.
- *
- * The object will not be freed (might be declared on the stack).
- *
- * @param[in] object The policy to be cleaned up.
- *
- */
- static void ifapi_cleanup_policy(TPMS_POLICY *policy)
- {
- if (policy) {
- SAFE_FREE(policy->description);
- SAFE_FREE(policy->policyAuthorizations);
- cleanup_policy_elements(policy->policy);
- }
- }
- /* 6 copies of cleanup functions from ifapi_keystore.c */
- void
- cleanup_ifapi_duplicate(IFAPI_DUPLICATE * duplicate) {
- if (duplicate != NULL) {
- SAFE_FREE(duplicate->certificate);
- }
- }
- void
- cleanup_ifapi_hierarchy(IFAPI_HIERARCHY * hierarchy) {
- if (hierarchy != NULL) {
- SAFE_FREE(hierarchy->description);
- }
- }
- void
- cleanup_ifapi_ext_pub_key(IFAPI_EXT_PUB_KEY * key) {
- if (key != NULL) {
- SAFE_FREE(key->pem_ext_public);
- SAFE_FREE(key->certificate);
- }
- }
- void
- cleanup_ifapi_key(IFAPI_KEY * key) {
- if (key != NULL) {
- SAFE_FREE(key->policyInstance);
- SAFE_FREE(key->serialization.buffer);
- SAFE_FREE(key->private.buffer);
- SAFE_FREE(key->description);
- SAFE_FREE(key->certificate);
- SAFE_FREE(key->appData.buffer);
- }
- }
- void
- cleanup_ifapi_nv(IFAPI_NV * nv) {
- if (nv != NULL) {
- SAFE_FREE(nv->serialization.buffer);
- SAFE_FREE(nv->appData.buffer);
- SAFE_FREE(nv->policyInstance);
- SAFE_FREE(nv->description);
- SAFE_FREE(nv->event_log);
- }
- }
- void
- cleanup_ifapi_object(
- IFAPI_OBJECT * object)
- {
- if (object != NULL) {
- if (object->objectType != IFAPI_OBJ_NONE) {
- if (object->objectType == IFAPI_KEY_OBJ) {
- cleanup_ifapi_key(&object->misc.key);
- } else if (object->objectType == IFAPI_NV_OBJ) {
- cleanup_ifapi_nv(&object->misc.nv);
- } else if (object->objectType == IFAPI_DUPLICATE_OBJ) {
- cleanup_ifapi_duplicate(&object->misc.key_tree);
- } else if (object->objectType == IFAPI_EXT_PUB_KEY_OBJ) {
- cleanup_ifapi_ext_pub_key(&object->misc.ext_pub_key);
- } else if (object->objectType == IFAPI_HIERARCHY_OBJ) {
- cleanup_ifapi_hierarchy(&object->misc.hierarchy);
- }
- ifapi_cleanup_policy(object->policy);
- SAFE_FREE(object->rel_path);
- SAFE_FREE(object->policy);
- object->objectType = IFAPI_OBJ_NONE;
- }
- }
- }
- char * normalize(const char *string) {
- char *string2 = malloc(strlen(string)+1);
- int i;
- int j = 0;
- for(i = 0; string[i] != '\0'; i++) {
- if ((string[i] != '\n' && string[i] != ' ')) {
- string2[j] = string[i];
- j += 1;
- }
- }
- string2[j] = '\0';
- return string2;
- }
- #define CHECK_ERROR(TYPE, SRC, RC) \
- { \
- TYPE out; \
- TSS2_RC rc; \
- json_object *jso = json_tokener_parse((SRC)); \
- assert_non_null(jso); \
- rc = ifapi_json_ ## TYPE ## _deserialize (jso, &out); \
- assert_int_equal (rc, RC); \
- json_object_put(jso); \
- }
- #define CHECK_ERROR_CLEANUP(TYPE, SRC, RC) \
- { \
- TYPE out; \
- TSS2_RC rc; \
- json_object *jso = json_tokener_parse((SRC)); \
- memset(&out, 0, sizeof(TYPE)); \
- assert_non_null(jso); \
- rc = ifapi_json_ ## TYPE ## _deserialize (jso, &out); \
- assert_int_equal (rc, RC); \
- json_object_put(jso); \
- cleanup_ifapi_object(&out); \
- }
- #define CHECK_JSON2(TYPE, SRC, DST, PSERIALIZE) \
- { \
- TYPE out; \
- TSS2_RC rc; \
- json_object *jso = json_tokener_parse((SRC)); \
- if (!jso) fprintf(stderr, "JSON parsing failed\n"); \
- assert_non_null(jso); \
- rc = ifapi_json_ ## TYPE ## _deserialize (jso, &out); \
- if (rc) fprintf(stderr, "Deserialization failed\n"); \
- assert_int_equal (rc, TSS2_RC_SUCCESS); \
- json_object_put(jso); \
- jso = NULL; \
- rc = ifapi_json_ ## TYPE ## _serialize (PSERIALIZE, &jso); \
- assert_int_equal (rc, TSS2_RC_SUCCESS); \
- assert_non_null(jso); \
- const char *jso_string = json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY); \
- assert_non_null(jso_string); \
- char *string1 = normalize(jso_string); \
- char *string2 = normalize(DST); \
- assert_string_equal(string1, string2); \
- json_object_put(jso); \
- free(string1); \
- free(string2); \
- }
- #define CHECK_JSON(TYPE, SRC, DST) \
- CHECK_JSON2(TYPE, SRC, DST, &out)
- #define CHECK_JSON_SIMPLE(TYPE, SRC, DST) \
- CHECK_JSON2(TYPE, SRC, DST, out)
- #define CHECK_JSON_TO_BIN(TYPE, SRC, DST) \
- { \
- TYPE out; \
- TSS2_RC rc; \
- TYPE expected = DST; \
- json_object *jso = json_tokener_parse((SRC)); \
- assert_non_null(jso); \
- rc = ifapi_json_ ## TYPE ## _deserialize (jso, &out); \
- assert_int_equal (rc, TSS2_RC_SUCCESS); \
- json_object_put(jso); \
- assert_true(out == expected); \
- }
- #define CHECK_BIN2(TYPE, BIN, PSERIALIZE) \
- TYPE BIN ## 2; \
- { \
- char *jso_string1, *jso_string2; \
- json_object *jso = NULL; \
- TSS2_RC rc = ifapi_json_ ## TYPE ## _serialize (PSERIALIZE, &jso); \
- jso_string1 = strdup(json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY)); \
- assert_int_equal (rc, TSS2_RC_SUCCESS); \
- rc = ifapi_json_ ## TYPE ## _deserialize (jso, &BIN ## 2); \
- assert_int_equal (rc, TSS2_RC_SUCCESS); \
- json_object_put(jso); \
- jso = NULL; \
- rc = ifapi_json_ ## TYPE ## _serialize (PSERIALIZE ## 2, &jso); \
- jso_string2 = strdup(json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY)); \
- assert_int_equal (rc, TSS2_RC_SUCCESS); \
- if (strcmp(jso_string1, jso_string2)) { \
- fprintf(stderr,"\n jso: %s\n", jso_string1); \
- fprintf(stderr,"\n jso: %s\n", jso_string2); \
- } \
- assert_string_equal(jso_string1, jso_string2); \
- json_object_put(jso); \
- free(jso_string1); \
- free(jso_string2); \
- }
- #define CHECK_BIN(TYPE, BIN) \
- CHECK_BIN2(TYPE, BIN, &BIN)
- #define CHECK_BIN_SIMPLE(TYPE, BIN) \
- CHECK_BIN2(TYPE, BIN, BIN)
- static void
- check_bin(void **state)
- {
- TPM2B_PUBLIC inPublicAES = {
- .size = 0,
- .publicArea = {
- .type = TPM2_ALG_SYMCIPHER,
- .nameAlg = TPM2_ALG_SHA256,
- .objectAttributes = (TPMA_OBJECT_USERWITHAUTH |
- TPMA_OBJECT_SIGN_ENCRYPT |
- TPMA_OBJECT_DECRYPT),
- .authPolicy = {
- .size = 0,
- },
- .parameters.symDetail = {
- .sym = {
- .algorithm = TPM2_ALG_AES,
- .keyBits = {.aes = 128},
- .mode = {.aes = TPM2_ALG_CFB}}
- },
- .unique.sym = {
- .size = 0,
- .buffer = {}
- }
- }
- };
- CHECK_BIN(TPM2B_PUBLIC, inPublicAES);
- TPM2B_PUBLIC inPublicECC = {
- .size = 0,
- .publicArea = {
- .type = TPM2_ALG_ECC,
- .nameAlg = TPM2_ALG_SHA1,
- .objectAttributes = (
- TPMA_OBJECT_USERWITHAUTH |
- TPMA_OBJECT_RESTRICTED |
- TPMA_OBJECT_SIGN_ENCRYPT |
- TPMA_OBJECT_FIXEDTPM |
- TPMA_OBJECT_FIXEDPARENT |
- TPMA_OBJECT_SENSITIVEDATAORIGIN
- ),
- .authPolicy = {
- .size = 0,
- },
- .parameters.eccDetail = {
- .symmetric = {
- .algorithm = TPM2_ALG_NULL,
- .keyBits.aes = 128,
- .mode.aes = TPM2_ALG_ECB,
- },
- .scheme = {
- .scheme = TPM2_ALG_ECDAA,
- .details = { .ecdaa = { .hashAlg = TPM2_ALG_SHA256 }},
- },
- .curveID = TPM2_ECC_BN_P256,
- .kdf = { .scheme = TPM2_ALG_NULL, .details = {} }
- },
- /*
- .parameters.asymDetail.symmetric.algorithm = TPM2_ALG_NULL,
- */
- .unique.ecc = {
- .x = { .size = 0, .buffer = {} } ,
- .y = { .size = 0, .buffer = {} } ,
- },
- },
- };
- CHECK_BIN(TPM2B_PUBLIC, inPublicECC);
- TPM2B_PUBLIC inPublicECC_MGF1 = inPublicECC;
- inPublicECC_MGF1.publicArea.parameters.eccDetail.kdf.scheme = TPM2_ALG_MGF1;
- inPublicECC_MGF1.publicArea.parameters.eccDetail.kdf.details.mgf1.hashAlg = TPM2_ALG_SHA256;
- CHECK_BIN(TPM2B_PUBLIC, inPublicECC_MGF1);
- TPM2B_PUBLIC inPublicECC_KDF12 = inPublicECC;
- inPublicECC_KDF12.publicArea.parameters.eccDetail.kdf.scheme = TPM2_ALG_KDF1_SP800_56A;
- inPublicECC_KDF12.publicArea.parameters.eccDetail.kdf.details.kdf1_sp800_56a.hashAlg = TPM2_ALG_SHA256;
- CHECK_BIN(TPM2B_PUBLIC, inPublicECC_KDF12);
- TPM2B_PUBLIC inPublicECC_KDF13 = inPublicECC;
- inPublicECC_KDF13.publicArea.parameters.eccDetail.kdf.scheme = TPM2_ALG_KDF1_SP800_108;
- inPublicECC_KDF13.publicArea.parameters.eccDetail.kdf.details.kdf1_sp800_108.hashAlg = TPM2_ALG_SHA256;
- CHECK_BIN(TPM2B_PUBLIC, inPublicECC_KDF13);
- TPM2B_PUBLIC inPublicRSA2 = {
- .size = 0,
- .publicArea = {
- .type = TPM2_ALG_RSA,
- .nameAlg = TPM2_ALG_SHA1,
- .objectAttributes = (TPMA_OBJECT_USERWITHAUTH |
- TPMA_OBJECT_SIGN_ENCRYPT |
- TPMA_OBJECT_FIXEDTPM |
- TPMA_OBJECT_FIXEDPARENT |
- TPMA_OBJECT_SENSITIVEDATAORIGIN),
- .authPolicy = {
- .size = 0,
- },
- .parameters.rsaDetail = {
- .symmetric = {
- .algorithm = TPM2_ALG_NULL,
- .keyBits.aes = 128,
- .mode.aes = TPM2_ALG_CFB},
- .scheme = {
- .scheme = TPM2_ALG_RSAPSS,
- .details = {
- .rsapss = { .hashAlg = TPM2_ALG_SHA1 }
- }
- },
- .keyBits = 2048,
- .exponent = 0,
- },
- .unique.rsa = {
- .size = 0,
- .buffer = {},
- },
- },
- };
- TPMS_SIGNATURE_ECC ecc_signature = {
- .hash = TPM2_ALG_SHA1,
- .signatureR = {
- .size = 32,
- .buffer = {
- 0x25, 0xdb, 0x1f, 0x8b, 0xbc, 0xfa, 0xbc, 0x31,
- 0xf8, 0x17, 0x6a, 0xcb, 0xb2, 0xf8, 0x40, 0xa3,
- 0xb6, 0xa5, 0xd3, 0x40, 0x65, 0x9d, 0x37, 0xee,
- 0xd9, 0xfd, 0x52, 0x47, 0xf5, 0x14, 0xd5, 0x98
- },
- },
- .signatureS = {
- .size = 32,
- .buffer = {
- 0xed, 0x62, 0x3e, 0x3d, 0xd2, 0x09, 0x08, 0xcf,
- 0x58, 0x3c, 0x81, 0x4b, 0xbf, 0x65, 0x7e, 0x08,
- 0xab, 0x9f, 0x40, 0xff, 0xea, 0x51, 0xda, 0x21,
- 0x29, 0x8c, 0xe2, 0x4d, 0xeb, 0x34, 0x4c, 0xcc
- }
- }
- };
- CHECK_BIN(TPMS_SIGNATURE_ECC, ecc_signature);
- CHECK_BIN(TPM2B_PUBLIC, inPublicRSA2);
- TPMT_SIG_SCHEME ecc_scheme_ecdsa = { .scheme = TPM2_ALG_ECDSA, .details.ecdsa = TPM2_ALG_SHA1 };
- CHECK_BIN(TPMT_SIG_SCHEME, ecc_scheme_ecdsa);
- TPMT_SIG_SCHEME ecc_scheme_ecdaa = { .scheme = TPM2_ALG_ECDAA, .details.ecdaa = TPM2_ALG_SHA1 };
- CHECK_BIN(TPMT_SIG_SCHEME, ecc_scheme_ecdaa);
- TPMT_SIG_SCHEME rsa_scheme_rsapss = { .scheme = TPM2_ALG_RSAPSS, .details.rsapss = TPM2_ALG_SHA1 };
- CHECK_BIN(TPMT_SIG_SCHEME, rsa_scheme_rsapss);
- TPMT_SIG_SCHEME rsa_scheme_rsassa = { .scheme = TPM2_ALG_RSASSA, .details.rsassa = TPM2_ALG_SHA1 };
- CHECK_BIN(TPMT_SIG_SCHEME, rsa_scheme_rsassa);
- TPMT_SIG_SCHEME sm2_scheme = { .scheme = TPM2_ALG_SM2, .details.sm2 = TPM2_ALG_SHA1 };
- CHECK_BIN(TPMT_SIG_SCHEME, sm2_scheme);
- TPMT_SIG_SCHEME hmac_scheme = { .scheme = TPM2_ALG_HMAC, .details.hmac = TPM2_ALG_SHA1 };
- CHECK_BIN(TPMT_SIG_SCHEME, hmac_scheme);
- TPMT_SIG_SCHEME ecschnorr_scheme = { .scheme = TPM2_ALG_ECSCHNORR, .details.ecschnorr = TPM2_ALG_SHA1 };
- CHECK_BIN(TPMT_SIG_SCHEME, ecschnorr_scheme);
- TPMT_SIG_SCHEME rsa_scheme = { .scheme = TPM2_ALG_NULL };
- CHECK_BIN(TPMT_SIG_SCHEME, rsa_scheme);
- TPMA_NV testNV = 0xffffff0f ;
- CHECK_BIN_SIMPLE(TPMA_NV, testNV);
- TPML_PCR_SELECTION pcr_selection = {
- .count = 3,
- .pcrSelections = {
- {
- .hash = TPM2_ALG_SHA1,
- .sizeofSelect = 3,
- .pcrSelect = { 01, 00, 03 }},
- {
- .hash = TPM2_ALG_SHA256,
- .sizeofSelect = 3,
- .pcrSelect = { 01 ,00 ,03 }},
- {
- .hash = TPM2_ALG_SHA384,
- .sizeofSelect = 3,
- .pcrSelect = { 02, 00, 02 }}
- }
- };
- CHECK_BIN(TPML_PCR_SELECTION, pcr_selection);
- IFAPI_IMA_EVENT imaEvent = {
- .eventData = {
- .size = 0,
- .buffer = { 0 }
- },
- .eventName = "Event"
- };
- CHECK_BIN(IFAPI_IMA_EVENT, imaEvent);
- free(imaEvent2.eventName);
- }
- static void
- check_policy_bin(void **state)
- {
- TPMS_PCRVALUE pcr_value;
- TPML_PCRVALUES *pcr_value_list;
- TPML_POLICYBRANCHES *or_branch_list;
- TPMS_POLICYPCR pcr_policy;
- TPMT_POLICYELEMENT policy_element0;
- TPMT_POLICYELEMENT policy_element1;
- TPMT_POLICYELEMENT policy_element_or;
- TPML_POLICYELEMENTS *policy_elements_or;
- TPML_POLICYELEMENTS *policy_elements0;
- TPML_POLICYELEMENTS *policy_elements1;
- TPMS_POLICY policy;
- TPMS_POLICYBRANCH branch0;
- TPMS_POLICYBRANCH branch1;
- pcr_value.pcr = 16;
- pcr_value.hashAlg = TPM2_ALG_SHA1;
- memset(&pcr_value.digest, 0, sizeof(TPMU_HA));
- memset(&pcr_policy, 0, sizeof(TPMS_POLICYPCR));
- pcr_value_list = calloc(1, sizeof(TPML_PCRVALUES) + sizeof(TPMS_PCRVALUE));
- if (pcr_value_list == NULL) {
- LOG_ERROR("%s", "Out of memory.");
- return;
- }
- pcr_value_list->count = 1;
- pcr_value_list->pcrs[0] = pcr_value;
- pcr_policy.pcrs = pcr_value_list;
- memset(&policy_element0, 0, sizeof(TPMT_POLICYELEMENT));
- policy_element0.element.PolicyPCR = pcr_policy;
- policy_element0.type = POLICYPCR;
- memset(&policy_element1, 0, sizeof(TPMT_POLICYELEMENT));
- policy_element1.element.PolicyPCR = pcr_policy;
- policy_element1.type = POLICYPCR;
- policy_elements0 = calloc(1, sizeof(TPML_POLICYELEMENTS) + sizeof(TPMT_POLICYELEMENT));
- if (policy_elements0 == NULL) {
- LOG_ERROR("%s", "Out of memory.");
- if (pcr_policy.pcrs){
- free(pcr_policy.pcrs);
- }
- return;
- }
- policy_elements0->count = 1;
- policy_elements0->elements[0] = policy_element0;
- policy.policy = policy_elements0;
- policy.description = "hareness description";
- policy.policyAuthorizations = NULL;
- memset(&policy.policyDigests, 0, sizeof(TPML_DIGEST_VALUES));
- //CHECK_BIN(TPMS_POLICY, policy);
- {
- char *jso_string1, *jso_string2;
- json_object *jso = NULL;
- TSS2_RC rc = ifapi_json_TPMS_POLICY_serialize (&policy, &jso);
- jso_string1 = strdup(json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY));
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- rc = ifapi_json_TPMS_POLICY_deserialize (jso, &policy);
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- json_object_put(jso);
- jso = NULL;
- rc = ifapi_json_TPMS_POLICY_serialize (&policy, &jso);
- jso_string2 = strdup(json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY));
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- if (strcmp(jso_string1, jso_string2)) {
- fprintf(stderr,"\n jso: %s\n", jso_string1);
- fprintf(stderr,"\n jso: %s\n", jso_string2);
- }
- assert_string_equal(jso_string1, jso_string2);
- json_object_put(jso);
- free(jso_string1);
- free(jso_string2);
- }
- ifapi_cleanup_policy(&policy);
- or_branch_list = calloc(2, sizeof(TPML_POLICYBRANCHES) + (2 * sizeof(TPMS_POLICYBRANCH)));
- if (or_branch_list == NULL) {
- LOG_ERROR("%s", "Out of memory.");
- return;
- }
- or_branch_list->count = 2;
- policy_elements1 = calloc(1, sizeof(TPML_POLICYELEMENTS) + sizeof(TPMT_POLICYELEMENT));
- if (policy_elements1 == NULL) {
- LOG_ERROR("%s", "Out of memory.");
- if (or_branch_list){
- free(or_branch_list);
- }
- return;
- }
- policy_elements1->count = 1;
- policy_elements1->elements[0] = policy_element1;
- memset(&branch0, 0, sizeof(TPMS_POLICYBRANCH));
- memset(&branch1, 0, sizeof(TPMS_POLICYBRANCH));
- branch0.policy = policy_elements0;
- branch0.name = "branch0";
- branch0.description = "description branch 0";
- branch1.policy = policy_elements1;
- branch1.name = "branch1";
- branch1.description = "description branch 1";
- memcpy(&or_branch_list->authorizations[0], &branch0, sizeof(TPMS_POLICYBRANCH));
- memcpy(&or_branch_list->authorizations[1], &branch1, sizeof(TPMS_POLICYBRANCH));
- //or_policy.pcrs = pcr_branch_list;
- policy_elements_or = calloc(1, sizeof(TPML_POLICYELEMENTS) + sizeof(TPMT_POLICYELEMENT));
- if (policy_elements_or == NULL) {
- LOG_ERROR("%s", "Out of memory.");
- if (or_branch_list) {
- free(or_branch_list);
- }
- return;
- }
- policy_elements_or->count = 1;
- memset(&policy_element_or, 0, sizeof(TPMT_POLICYELEMENT));
- policy_element_or.element.PolicyOr.branches = or_branch_list;
- policy_element_or.type = POLICYOR;
- policy_elements_or->elements[0] = policy_element_or;
- policy.policy = policy_elements_or;
- //CHECK_BIN(TPMS_POLICY, policy);
- {
- char *jso_string1, *jso_string2;
- json_object *jso = NULL;
- TSS2_RC rc = ifapi_json_TPMS_POLICY_serialize (&policy, &jso);
- jso_string1 = strdup(json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY));
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- rc = ifapi_json_TPMS_POLICY_deserialize (jso, &policy);
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- json_object_put(jso);
- jso = NULL;
- rc = ifapi_json_TPMS_POLICY_serialize (&policy, &jso);
- jso_string2 = strdup(json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY));
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- if (strcmp(jso_string1, jso_string2)) {
- fprintf(stderr,"\n jso: %s\n", jso_string1);
- fprintf(stderr,"\n jso: %s\n", jso_string2);
- }
- assert_string_equal(jso_string1, jso_string2);
- json_object_put(jso);
- free(jso_string1);
- free(jso_string2);
- }
- ifapi_cleanup_policy(&policy);
- free(policy_elements_or);
- free(policy_elements0);
- free(policy_elements1);
- free(or_branch_list);
- free(pcr_value_list);
- }
- static void
- check_json_to_bin(void **state)
- {
- CHECK_JSON_TO_BIN(UINT64, "22147483647", 22147483647);
- CHECK_JSON_TO_BIN(UINT64, "\"0xffffffff\"", 0xffffffff);
- CHECK_JSON_TO_BIN(UINT64, "\"0xfffffffff\"", 0xfffffffff);
- CHECK_JSON_TO_BIN(UINT32, "\"0xFfffffff\"", 0xffffffff);
- CHECK_JSON_TO_BIN(UINT16, "\"0xffff\"", 0xffff);
- }
- static void
- check_json_structs(void **state)
- {
- const char *test_json_TPMS_POLICYTEMPLATE =
- "{\n"
- " \"templateHash\": \"0011223344556677889900112233445566778899\"\n"
- "}";
- CHECK_JSON(TPMS_POLICYTEMPLATE, test_json_TPMS_POLICYTEMPLATE, test_json_TPMS_POLICYTEMPLATE);
- const char *test_json_TPM2B_PUBLIC_expected =
- "{\n"
- " \"size\":0,\n"
- " \"publicArea\":{\n"
- " \"type\":\"ECC\",\n"
- " \"nameAlg\":\"SHA1\",\n"
- "\"objectAttributes\":{"
- " \"fixedTPM\":1,"
- " \"stClear\":0,"
- " \"fixedParent\":1,"
- " \"sensitiveDataOrigin\":1,"
- " \"userWithAuth\":1,"
- " \"adminWithPolicy\":0,"
- " \"noDA\":0,"
- " \"encryptedDuplication\":0,"
- " \"restricted\":1,"
- " \"decrypt\":0,"
- " \"sign\":1"
- " },"
- " \"authPolicy\":\"\",\n"
- " \"parameters\":{\n"
- " \"symmetric\":{\n"
- " \"algorithm\":\"NULL\"\n"
- " },\n"
- " \"scheme\":{\n"
- " \"scheme\":\"ECDAA\",\n"
- " \"details\":{\n"
- " \"hashAlg\":\"SHA256\",\n"
- " \"count\":0\n"
- " }\n"
- " },\n"
- " \"curveID\":\"BN_P256\",\n"
- " \"kdf\":{\n"
- " \"scheme\":\"NULL\"\n"
- " }\n"
- " },\n"
- " \"unique\":{\n"
- " \"x\": \"\",\n"
- " \"y\": \"\"\n"
- " }\n"
- " }\n"
- "}";
- const char *test_json_TPM2B_PUBLIC_src=
- "{"
- " \"size\":0,"
- " \"publicArea\":{"
- " \"type\":\"ECC\","
- " \"nameAlg\":\"SHA1\","
- " \"objectAttributes\":["
- " \"fixedTPM\","
- " \"fixedParent\","
- " \"sensitiveDataOrigin\","
- " \"userWithAuth\","
- " \"restricted\","
- " \"sign\""
- " ],"
- " \"authPolicy\":\"\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"NULL\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"ECDAA\","
- " \"details\":{"
- " \"hashAlg\":\"SHA256\","
- " \"count\":0"
- " }"
- " },"
- " \"curveID\":\"ECC_BN_P256\","
- " \"kdf\":{"
- " \"scheme\":\"NULL\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\": \"\",\n"
- " \"y\": \"\"\n"
- " }"
- " }"
- "}"
- "";
- const char *test_json_TPM2B_PUBLIC_dwnc_src =
- "{"
- " \"size\":0,"
- " \"publicArea\":{"
- " \"type\":\"ecc\","
- " \"nameAlg\":\"sha1\","
- " \"objectAttributes\":["
- " \"fixedTPM\","
- " \"fixedParent\","
- " \"sensitiveDataOrigin\","
- " \"userWithAuth\","
- " \"restricted\","
- " \"sign\""
- " ],"
- " \"authPolicy\":\"\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"null\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"ecdaa\","
- " \"details\":{"
- " \"hashAlg\":\"sha256\","
- " \"count\":0"
- " }"
- " },"
- " \"curveID\":\"ecc_BN_P256\","
- " \"kdf\":{"
- " \"scheme\":\"null\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\": \"\",\n"
- " \"y\": \"\"\n"
- " }"
- " }"
- " }"
- "}"
- "";
- CHECK_JSON(TPM2B_PUBLIC, test_json_TPM2B_PUBLIC_src, test_json_TPM2B_PUBLIC_expected);
- CHECK_JSON(TPM2B_PUBLIC, test_json_TPM2B_PUBLIC_dwnc_src, test_json_TPM2B_PUBLIC_expected);
- const char *test_json_TPMS_ATTEST_certify_src =
- "{\n"
- " \"magic\": \"0xff544347\",\n"
- " \"type\": \"ST_ATTEST_CERTIFY\",\n"
- " \"qualifiedSigner\": \"0x00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"0x00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"yes\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"name\": \"0x00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"qualifiedName\": \"0x00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- const char *test_json_TPMS_ATTEST_certify_expt =
- "{\n"
- " \"magic\": \"VALUE\",\n"
- " \"type\": \"ATTEST_CERTIFY\",\n"
- " \"qualifiedSigner\": \"00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"YES\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"name\": \"00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"qualifiedName\": \"00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMS_ATTEST, test_json_TPMS_ATTEST_certify_src, test_json_TPMS_ATTEST_certify_expt);
- const char *test_json_TPMS_ATTEST_sessionaudit_src =
- "{\n"
- " \"magic\": \"0xff544347\",\n"
- " \"type\": \"ST_ATTEST_SESSION_AUDIT\",\n"
- " \"qualifiedSigner\": \"0x00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"0x00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": [12345,0],\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"yes\"\n"
- " },\n"
- " \"firmwareVersion\": [783783,0],\n"
- " \"attested\": {\n"
- " \"exclusiveSession\": \"yes\",\n"
- " \"sessionDigest\": \"0x00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- const char *test_json_TPMS_ATTEST_sessionaudit_expt =
- "{\n"
- " \"magic\": \"VALUE\",\n"
- " \"type\": \"ATTEST_SESSION_AUDIT\",\n"
- " \"qualifiedSigner\": \"00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 53021371269120,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"YES\"\n"
- " },\n"
- " \"firmwareVersion\": [783783,0],\n"
- " \"attested\": {\n"
- " \"exclusiveSession\": \"YES\",\n"
- " \"sessionDigest\": \"00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMS_ATTEST, test_json_TPMS_ATTEST_sessionaudit_src, test_json_TPMS_ATTEST_sessionaudit_expt);
- const char *test_json_TPMS_ATTEST_certifycreation_src =
- "{\n"
- " \"magic\": \"0xff544347\",\n"
- " \"type\": \"ST_ATTEST_CREATION\",\n"
- " \"qualifiedSigner\": \"0x00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"0x00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"yes\"\n"
- " },\n"
- " \"firmwareVersion\": [0,783],\n"
- " \"attested\": {\n"
- " \"objectName\": \"0x00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"creationHash\": \"0x00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- const char *test_json_TPMS_ATTEST_certifycreation_expt =
- "{\n"
- " \"magic\": \"VALUE\",\n"
- " \"type\": \"ATTEST_CREATION\",\n"
- " \"qualifiedSigner\": \"00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"YES\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"objectName\": \"00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"creationHash\": \"00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMS_ATTEST, test_json_TPMS_ATTEST_certifycreation_src, test_json_TPMS_ATTEST_certifycreation_expt);
- const char *test_json_TPMS_ATTEST_commandaudit_src =
- "{\n"
- " \"magic\": \"0xff544347\",\n"
- " \"type\": \"ST_ATTEST_COMMAND_AUDIT\",\n"
- " \"qualifiedSigner\": \"0x00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"0x00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"yes\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"auditCounter\": 456,\n"
- " \"digestAlg\": \"sha1\",\n"
- " \"auditDigest\": \"0x00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"commandDigest\": \"0x00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- const char *test_json_TPMS_ATTEST_commandaudit_expt =
- "{\n"
- " \"magic\": \"VALUE\",\n"
- " \"type\": \"ATTEST_COMMAND_AUDIT\",\n"
- " \"qualifiedSigner\": \"00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"YES\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"auditCounter\": 456,\n"
- " \"digestAlg\": \"SHA1\",\n"
- " \"auditDigest\": \"00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"commandDigest\": \"00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMS_ATTEST, test_json_TPMS_ATTEST_commandaudit_src, test_json_TPMS_ATTEST_commandaudit_expt);
- const char *test_json_TPMS_ATTEST_time_src =
- "{\n"
- " \"magic\": \"0xff544347\",\n"
- " \"type\": \"ST_ATTEST_TIME\",\n"
- " \"qualifiedSigner\": \"0x00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"0x00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"yes\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"time\": {\n"
- " \"time\": 234,\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"yes\"\n"
- " }\n"
- " },\n"
- " \"firmwareVersion\": 783\n"
- " }\n"
- "}";
- const char *test_json_TPMS_ATTEST_time_expt =
- "{\n"
- " \"magic\": \"VALUE\",\n"
- " \"type\": \"ATTEST_TIME\",\n"
- " \"qualifiedSigner\": \"00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"YES\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"time\": {\n"
- " \"time\": 234,\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"YES\"\n"
- " }\n"
- " },\n"
- " \"firmwareVersion\": 783\n"
- " }\n"
- "}";
- CHECK_JSON(TPMS_ATTEST, test_json_TPMS_ATTEST_time_src, test_json_TPMS_ATTEST_time_expt);
- const char *test_json_TPMS_ATTEST_certifynv_src =
- "{\n"
- " \"magic\": \"0xff544347\",\n"
- " \"type\": \"ST_ATTEST_NV\",\n"
- " \"qualifiedSigner\": \"0x00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"0x00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"yes\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"indexName\": \"0x00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"offset\": 10,\n"
- " \"nvContents\": \"0x00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- const char *test_json_TPMS_ATTEST_certifynv_expt =
- "{\n"
- " \"magic\": \"VALUE\",\n"
- " \"type\": \"ATTEST_NV\",\n"
- " \"qualifiedSigner\": \"00010203040506070809a0a1a2a3a4a5a6a7a8a9\",\n"
- " \"extraData\": \"00010203040506070809b0b1b2b3b4b5b6b7b8b9\",\n"
- " \"clockInfo\": {\n"
- " \"clock\": 123,\n"
- " \"resetCount\": 23,\n"
- " \"restartCount\": 1,\n"
- " \"safe\": \"YES\"\n"
- " },\n"
- " \"firmwareVersion\": 783,\n"
- " \"attested\": {\n"
- " \"indexName\": \"00010203040506070809c0c1c2c3c4c5c6c7c8c9\",\n"
- " \"offset\": 10,\n"
- " \"nvContents\": \"00010203040506070809d0d1d2d3d4d5d6d7d8d9\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMS_ATTEST, test_json_TPMS_ATTEST_certifynv_src, test_json_TPMS_ATTEST_certifynv_expt);
- const char *test_json_TPMT_KEYEDHASH_SCHEME_hmac_src =
- "{\n"
- " \"scheme\": \"HMAC\",\n"
- " \"details\": {\n"
- " \"hashAlg\": \"SHA256\"\n"
- " }\n"
- "}";
- const char *test_json_TPMT_KEYEDHASH_SCHEME_hmac_expt =
- "{\n"
- " \"scheme\": \"HMAC\",\n"
- " \"details\": {\n"
- " \"hashAlg\": \"SHA256\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMT_KEYEDHASH_SCHEME, test_json_TPMT_KEYEDHASH_SCHEME_hmac_src, test_json_TPMT_KEYEDHASH_SCHEME_hmac_expt);
- const char *test_json_TPMT_KEYEDHASH_SCHEME_xor_src =
- "{\n"
- " \"scheme\": \"XOR\",\n"
- " \"details\": {\n"
- " \"hashAlg\": \"SHA256\",\n"
- " \"kdf\": \"MGF1\"\n"
- " }\n"
- "}";
- const char *test_json_TPMT_KEYEDHASH_SCHEME_xor_expt =
- "{\n"
- " \"scheme\": \"XOR\",\n"
- " \"details\": {\n"
- " \"hashAlg\": \"SHA256\",\n"
- " \"kdf\": \"MGF1\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMT_KEYEDHASH_SCHEME, test_json_TPMT_KEYEDHASH_SCHEME_xor_src, test_json_TPMT_KEYEDHASH_SCHEME_xor_expt);
- const char *test_json_TPMS_TAGGED_POLICY_sha256_src =
- "{\n"
- " \"handle\":0,"
- " \"policyHash\": {\n"
- " \"hashAlg\":\"SHA256\",\n"
- " \"digest\":\"59215cb6c21a60e26b2cc479334a021113611903795507c1227659e2aef23d16\"\n"
- " }\n"
- "}";
- const char *test_json_TPMS_TAGGED_POLICY_sha256_expt =
- "{\n"
- " \"handle\":0,"
- " \"policyHash\": {\n"
- " \"hashAlg\":\"SHA256\",\n"
- " \"digest\":\"59215cb6c21a60e26b2cc479334a021113611903795507c1227659e2aef23d16\"\n"
- " }\n"
- "}";
- CHECK_JSON(TPMS_TAGGED_POLICY, test_json_TPMS_TAGGED_POLICY_sha256_src, test_json_TPMS_TAGGED_POLICY_sha256_expt);
- const char *test_json_TPMS_ACT_DATA_src =
- "{"
- " \"handle\":0,"
- " \"timeout\":23,"
- " \"attributes\":["
- " \"signaled\""
- " ],"
- "}";
- const char *test_json_TPMS_ACT_DATA_expt =
- "{\n"
- " \"handle\":0,\n"
- " \"timeout\":23,\n"
- " \"attributes\":{"
- " \"signaled\":1,"
- " \"preserveSignaled\":0"
- " }"
- "}";
- CHECK_JSON(TPMS_ACT_DATA, test_json_TPMS_ACT_DATA_src, test_json_TPMS_ACT_DATA_expt);
- }
- static void
- check_json_constants(void **state)
- {
- CHECK_JSON_SIMPLE(TPMI_ALG_HASH, "\"sha1\"", "\"SHA1\"");
- CHECK_JSON_SIMPLE(TPMI_ALG_HASH, "\"0x04\"", "\"SHA1\"");
- CHECK_JSON_SIMPLE(TPMI_ALG_HASH, "4", "\"SHA1\"");
- }
- static void
- check_json_numbers(void **state)
- {
- CHECK_JSON_SIMPLE(UINT16, "10", "10");
- CHECK_JSON_SIMPLE(UINT16, "\"0x0a\"", "10");
- CHECK_JSON_SIMPLE(UINT64, "10000000000000000","[2328306,1874919424]");
- }
- static void
- check_json_bits(void **state)
- {
- CHECK_JSON_SIMPLE(TPMA_NV, "{\"PPWRITE\":1,\"OWNERWRITE\":1}",
- "{\"PPWRITE\":1,\"OWNERWRITE\":1,\"AUTHWRITE\":0,\"POLICYWRITE\":0,\"POLICY_DELETE\":0,"
- "\"WRITELOCKED\":0,\"WRITEALL\":0,\"WRITEDEFINE\":0,\"WRITE_STCLEAR\":0,\"GLOBALLOCK\":0,\"PPREAD\":0,"
- "\"OWNERREAD\":0,\"AUTHREAD\":0,\"POLICYREAD\":0,\"NO_DA\":0,\"ORDERLY\":0,\"CLEAR_STCLEAR\":0,"
- "\"READLOCKED\":0,\"WRITTEN\":0,\"PLATFORMCREATE\":0,\"READ_STCLEAR\":0,\"TPM2_NT\":\"ORDINARY\"}");
- CHECK_JSON_SIMPLE(TPMA_LOCALITY, "3", "{\"ZERO\":1,\"ONE\":1,\"TWO\":0,\"THREE\":0,\"FOUR\":0,\"Extended\":0}");
- CHECK_JSON_SIMPLE(TPMA_LOCALITY,
- "[ \"ZERO\", \"ONE\" ]",
- "{\"ZERO\":1,\"ONE\":1,\"TWO\":0,\"THREE\":0,\"FOUR\":0,\"Extended\":0}");
- CHECK_JSON_SIMPLE(TPMA_NV, "\"0xffffff0f\"",
- "{\"PPWRITE\":1,\"OWNERWRITE\":1,\"AUTHWRITE\":1,\"POLICYWRITE\":1,\"POLICY_DELETE\":1,"
- "\"WRITELOCKED\":1,\"WRITEALL\":1,\"WRITEDEFINE\":1,\"WRITE_STCLEAR\":1,\"GLOBALLOCK\":1,\"PPREAD\":1,"
- "\"OWNERREAD\":1,\"AUTHREAD\":1,\"POLICYREAD\":1,\"NO_DA\":1,\"ORDERLY\":1,\"CLEAR_STCLEAR\":1,"
- "\"READLOCKED\":1,\"WRITTEN\":1,\"PLATFORMCREATE\":1,\"READ_STCLEAR\":1,\"TPM2_NT\":\"ORDINARY\"}");
- CHECK_JSON_SIMPLE(TPMA_LOCALITY, "3", "{\"ZERO\":1,\"ONE\":1,\"TWO\":0,\"THREE\":0,\"FOUR\":0,\"Extended\":0}");
- CHECK_JSON_SIMPLE(TPMA_LOCALITY,
- "{\"ZERO\":1,\"ONE\":1,\"TWO\":0,\"THREE\":0,\"FOUR\":0,\"Extended\":0}",
- "{\"ZERO\":1,\"ONE\":1,\"TWO\":0,\"THREE\":0,\"FOUR\":0,\"Extended\":0}");
- CHECK_JSON_SIMPLE(TPMA_OBJECT,
- "{\"fixedTPM\":1,\"stClear\":1,\"fixedParent\":0,\"sensitiveDataOrigin\":0,\"userWithAuth\":0,"
- "\"adminWithPolicy\":0,\"noDA\":0,\"encryptedDuplication\":0,\"restricted\":0,\"decrypt\":0,\"sign\":0}",
- "{\"fixedTPM\":1,\"stClear\":1,\"fixedParent\":0,\"sensitiveDataOrigin\":0,\"userWithAuth\":0,"
- "\"adminWithPolicy\":0,\"noDA\":0,\"encryptedDuplication\":0,\"restricted\":0,\"decrypt\":0,\"sign\":0}");
- CHECK_JSON_SIMPLE(TPMA_OBJECT,
- "\"0\"",
- "{\"fixedTPM\":0,\"stClear\":0,\"fixedParent\":0,\"sensitiveDataOrigin\":0,\"userWithAuth\":0,"
- "\"adminWithPolicy\":0,\"noDA\":0,\"encryptedDuplication\":0,\"restricted\":0,\"decrypt\":0,\"sign\":0}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "\"0\"",
- "{\"signaled\":0,\"preserveSignaled\":0}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "0",
- "{\"signaled\":0,\"preserveSignaled\":0}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "\"1\"",
- "{\"signaled\":1,\"preserveSignaled\":0}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "1",
- "{\"signaled\":1,\"preserveSignaled\":0}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "\"2\"",
- "{\"signaled\":0,\"preserveSignaled\":1}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "2",
- "{\"signaled\":0,\"preserveSignaled\":1}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "\"3\"",
- "{\"signaled\":1,\"preserveSignaled\":1}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "3",
- "{\"signaled\":1,\"preserveSignaled\":1}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "{\"signaled\":1,\"preserveSignaled\":0}",
- "{\"signaled\":1,\"preserveSignaled\":0}");
- CHECK_JSON_SIMPLE(TPMA_ACT,
- "{\"signaled\":0,\"preserveSignaled\":1}",
- "{\"signaled\":0,\"preserveSignaled\":1}");
- const char *test_json_TPMA_NV_expected =\
- "{"
- " \"PPWRITE\":0,"
- " \"OWNERWRITE\":1,"
- " \"AUTHWRITE\":1,"
- " \"POLICYWRITE\":1,"
- " \"POLICY_DELETE\":1,"
- " \"WRITELOCKED\":0,"
- " \"WRITEALL\":0,"
- " \"WRITEDEFINE\":0,"
- " \"WRITE_STCLEAR\":0,"
- " \"GLOBALLOCK\":0,"
- " \"PPREAD\":0,"
- " \"OWNERREAD\":1,"
- " \"AUTHREAD\":1,"
- " \"POLICYREAD\":1,"
- " \"NO_DA\":0,"
- " \"ORDERLY\":1,"
- " \"CLEAR_STCLEAR\":1,"
- " \"READLOCKED\":1,"
- " \"WRITTEN\":1,"
- " \"PLATFORMCREATE\":0,"
- " \"READ_STCLEAR\":0,"
- " \"TPM2_NT\":\"COUNTER\""
- "}";
- const char *test_json_TPMA_NV_src_array =\
- "["
- " \"nv_ownerwrite\","
- " \"nv_authwrite\","
- " \"nv_policywrite\","
- " \"nv_policy_delete\","
- " \"nv_ownerread\","
- " \"nv_authread\","
- " \"nv_policyread\","
- " \"nv_orderly\","
- " \"nv_clear_stclear\","
- " \"nv_readlocked\","
- " \"nv_written\","
- " {"
- " \"TPM2_NT\": \"NT_COUNTER\""
- " }"
- "]";
- const char *test_json_TPMA_NV_src_struct = \
- "{"
- " \"TPMA_NV_OWNERWRITE\":\"YES\","
- " \"TPMA_NV_AUTHWRITE\":\"yes\","
- " \"TPMA_NV_POLICYWRITE\":\"TPM2_YES\","
- " \"TPMA_NV_POLICY_DELETE\":\"tpm2_yes\","
- " \"TPMA_NV_OWNERREAD\":\"SET\","
- " \"TPMA_NV_AUTHREAD\":\"set\","
- " \"TPMA_NV_POLICYREAD\":1,"
- " \"TPMA_NV_ORDERLY\":1,"
- " \"TPMA_NV_CLEAR_STCLEAR\":1,"
- " \"TPMA_NV_READLOCKED\":1,"
- " \"TPMA_NV_WRITTEN\":1,"
- " \"TPM2_NT\":1"
- " }";
- const char *test_json_TPMA_NV_expected2 = \
- "{"
- " \"PPWRITE\":1,"
- " \"OWNERWRITE\":0,"
- " \"AUTHWRITE\":0,"
- " \"POLICYWRITE\":0,"
- " \"POLICY_DELETE\":0,"
- " \"WRITELOCKED\":0,"
- " \"WRITEALL\":0,"
- " \"WRITEDEFINE\":0,"
- " \"WRITE_STCLEAR\":0,"
- " \"GLOBALLOCK\":0,"
- " \"PPREAD\":0,"
- " \"OWNERREAD\":0,"
- " \"AUTHREAD\":0,"
- " \"POLICYREAD\":0,"
- " \"NO_DA\":0,"
- " \"ORDERLY\":0,"
- " \"CLEAR_STCLEAR\":0,"
- " \"READLOCKED\":0,"
- " \"WRITTEN\":0,"
- " \"PLATFORMCREATE\":0,"
- " \"READ_STCLEAR\":0,"
- " \"TPM2_NT\":\"ORDINARY\""
- "}";
- CHECK_JSON_SIMPLE(TPMA_NV, test_json_TPMA_NV_src_array, test_json_TPMA_NV_expected);
- CHECK_JSON_SIMPLE(TPMA_NV, test_json_TPMA_NV_src_struct, test_json_TPMA_NV_expected);
- CHECK_JSON_SIMPLE(TPMA_NV, "1", test_json_TPMA_NV_expected2);
- }
- static void
- check_json_policy(void **state)
- {
- const char *test_json_policy_nv_src = \
- "{"
- " \"description\":\"Description pol_nv\","
- " \"policyDigests\":["
- " ],"
- " \"policyAuthorizations\":["
- " ],"
- " \"policy\":["
- " {"
- " \"type\": \"POLICYNV\","
- " \"nvPath\": \"myNV\","
- " \"operandB\": \"01030304\""
- " }"
- " ]"
- "}";
- const char *test_json_policy_nv_expected = \
- "{"
- " \"description\":\"Description pol_nv\","
- " \"policyDigests\":["
- " ],"
- " \"policyAuthorizations\":["
- " ],"
- " \"policy\":["
- " {"
- " \"type\": \"POLICYNV\","
- " \"nvPath\": \"myNV\","
- " \"operandB\": \"01030304\""
- " }"
- " ]"
- "}";
- // CHECK_JSON(TPMS_POLICY, test_json_policy_nv_src, test_json_policy_nv_expected);
- {
- TPMS_POLICY out;
- TSS2_RC rc;
- json_object *jso = json_tokener_parse(test_json_policy_nv_src);
- if (!jso) fprintf(stderr, "JSON parsing failed\n");
- assert_non_null(jso);
- rc = ifapi_json_TPMS_POLICY_deserialize (jso, &out);
- if (rc) fprintf(stderr, "Deserialization failed\n");
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- json_object_put(jso);
- jso = NULL;
- rc = ifapi_json_TPMS_POLICY_serialize (&out, &jso);
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- assert_non_null(jso);
- const char *jso_string = json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY);
- assert_non_null(jso_string);
- char *string1 = normalize(jso_string);
- char *string2 = normalize(test_json_policy_nv_expected);
- assert_string_equal(string1, string2);
- json_object_put(jso);
- ifapi_cleanup_policy(&out);
- free(string1);
- free(string2);
- }
- const char *test_json_policy_or_src = \
- "{"
- " \"description\":\"hareness description\","
- " \"policyDigests\":["
- " {"
- " \"hashAlg\":\"SHA256\","
- " \"digest\":\"59215cb6c21a60e26b2cc479334a021113611903795507c1227659e2aef23d16\""
- " }"
- " ],"
- " \"policy\":["
- " {"
- " \"type\":\"POLICYOR\","
- " \"policyDigests\":["
- " {"
- " \"hashAlg\":\"SHA256\","
- " \"digest\":\"59215cb6c21a60e26b2cc479334a021113611903795507c1227659e2aef23d16\""
- " }"
- " ],"
- " \"branches\":["
- " {"
- " \"name\":\"branch1\","
- " \"description\":\"description branch 1\","
- " \"policy\":["
- " {"
- " \"type\":\"POLICYPCR\","
- " \"policyDigests\":["
- " {"
- " \"hashAlg\":\"SHA256\","
- " \"digest\":\"17d552f8e39ad882f6b3c09ae139af59616bf6a63f4093d6d20e9e1b9f7cdb6e\""
- " }"
- " ],"
- " \"pcrs\":["
- " {"
- " \"pcr\":16,"
- " \"hashAlg\":\"SHA1\","
- " \"digest\":\"0000000000000000000000000000000000000000\""
- " }"
- " ]"
- " }"
- " ],"
- " \"policyDigests\":["
- " {"
- " \"hashAlg\":\"SHA256\","
- " \"digest\":\"17d552f8e39ad882f6b3c09ae139af59616bf6a63f4093d6d20e9e1b9f7cdb6e\""
- " }"
- " ]"
- " },"
- " {"
- " \"name\":\"branch1\","
- " \"description\":\"description branch 1\","
- " \"policy\":["
- " {"
- " \"type\":\"POLICYPCR\","
- " \"policyDigests\":["
- " {"
- " \"hashAlg\":\"SHA256\","
- " \"digest\":\"17d552f8e39ad882f6b3c09ae139af59616bf6a63f4093d6d20e9e1b9f7cdb6e\""
- " }"
- " ],"
- " \"pcrs\":["
- " {"
- " \"pcr\":16,"
- " \"hashAlg\":\"SHA1\","
- " \"digest\":\"0000000000000000000000000000000000000000\""
- " }"
- " ]"
- " }"
- " ],"
- " \"policyDigests\":["
- " {"
- " \"hashAlg\":\"SHA256\","
- " \"digest\":\"17d552f8e39ad882f6b3c09ae139af59616bf6a63f4093d6d20e9e1b9f7cdb6e\""
- " }"
- " ]"
- " }"
- " ]"
- " }"
- " ]"
- "}";
- char *test_json_policy_or_expected = strdup(test_json_policy_or_src);
- if (test_json_policy_or_expected == NULL){
- LOG_ERROR("%s", "Out of memory.");
- return;
- }
- // CHECK_JSON(TPMS_POLICY, test_json_policy_or_src, test_json_policy_or_expected);
- {
- TPMS_POLICY out;
- TSS2_RC rc;
- json_object *jso = json_tokener_parse(test_json_policy_or_src);
- if (!jso) fprintf(stderr, "JSON parsing failed\n");
- assert_non_null(jso);
- rc = ifapi_json_TPMS_POLICY_deserialize (jso, &out);
- if (rc) fprintf(stderr, "Deserialization failed\n");
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- json_object_put(jso);
- jso = NULL;
- rc = ifapi_json_TPMS_POLICY_serialize (&out, &jso);
- assert_int_equal (rc, TSS2_RC_SUCCESS);
- assert_non_null(jso);
- const char *jso_string = json_object_to_json_string_ext(jso, JSON_C_TO_STRING_PRETTY);
- assert_non_null(jso_string);
- char *string1 = normalize(jso_string);
- char *string2 = normalize(test_json_policy_or_expected);
- assert_string_equal(string1, string2);
- json_object_put(jso);
- ifapi_cleanup_policy(&out);
- free(string1);
- free(string2);
- }
- free(test_json_policy_or_expected);
- }
- static void
- check_json_tpm2bs(void **state)
- {
- CHECK_JSON(TPM2B_DIGEST, "\"0x0102\"", "\"0102\"");
- CHECK_JSON(TPM2B_DIGEST, "\"0102\"", "\"0102\"");
- CHECK_JSON(TPM2B_DIGEST, "\"caffee\"", "\"caffee\"");
- }
- static void
- check_error(void **state)
- {
- /* Value is > then max value for UINT */
- CHECK_ERROR(UINT16, "\"0x10000\"", TSS2_FAPI_RC_BAD_VALUE);
- CHECK_ERROR(UINT32, "\"0x100000000\"", TSS2_FAPI_RC_BAD_VALUE);
- /* Digest/list is too large*/
- CHECK_ERROR(TPM2B_DIGEST, "\"0x0102222222222222222222222222222222222222222222222222222"
- "22222222222222222222222222222222222222222222222222222222222222222222222222222\"",
- TSS2_FAPI_RC_BAD_VALUE);
- /* Illegal values */
- CHECK_ERROR(TPMI_ALG_HASH, "\"SHA9999\"", TSS2_FAPI_RC_BAD_VALUE);
- CHECK_ERROR(TPM2B_DIGEST, "\"xxxx\"", TSS2_FAPI_RC_BAD_VALUE);
- CHECK_ERROR(TPM2B_DIGEST, "\"0x010x\"", TSS2_FAPI_RC_BAD_VALUE);
- /*
- * Illegal keys
- */
- const char *test_json_key_err1 =
- /* Without persistent handle */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_key_err2 =
- /* Without public */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- " \"persistent_handle\":0,"
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_key_err3 =
- /* Without serialization */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- " \"with_auth\":\"NO\","
- " \"persistent_handle\":0,"
- " \"public\":{"
- " \"size\":122,"
- " \"publicArea\":{"
- " \"type\":\"ECC\","
- " \"nameAlg\":\"SHA256\","
- " \"objectAttributes\":1,"
- " \"authPolicy\":\"837197674484b3f81a90cc8d46a5d724fd52d76e06520b64f2a1da1b331469aa\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"AES\","
- " \"keyBits\":128,"
- " \"mode\":\"CFB\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"NULL\""
- " },"
- " \"curveID\":\"NIST_P256\","
- " \"kdf\":{"
- " \"scheme\":\"NULL\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\":\"78d926c582566a70eedffcda4fe147e1b24fe624305441167fac483a3079b2e7\","
- " \"y\":\"8bdc62992c3382e29687114ea0a9e1ac69f91283ae1d018b6d37859731617c3a\""
- " }"
- " }"
- " },"
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_key_err4 =
- /* Without PolicyInstance */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- " \"with_auth\":\"NO\","
- " \"persistent_handle\":0,"
- " \"public\":{"
- " \"size\":122,"
- " \"publicArea\":{"
- " \"type\":\"ECC\","
- " \"nameAlg\":\"SHA256\","
- " \"objectAttributes\":{"
- " \"fixedTPM\":1,"
- " \"stClear\":0,"
- " \"fixedParent\":1,"
- " \"sensitiveDataOrigin\":1,"
- " \"userWithAuth\":0,"
- " \"adminWithPolicy\":1,"
- " \"noDA\":0,"
- " \"encryptedDuplication\":0,"
- " \"restricted\":1,"
- " \"decrypt\":1,"
- " \"sign\":0"
- " },"
- " \"authPolicy\":\"837197674484b3f81a90cc8d46a5d724fd52d76e06520b64f2a1da1b331469aa\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"AES\","
- " \"keyBits\":128,"
- " \"mode\":\"CFB\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"NULL\""
- " },"
- " \"curveID\":\"NIST_P256\","
- " \"kdf\":{"
- " \"scheme\":\"NULL\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\":\"78d926c582566a70eedffcda4fe147e1b24fe624305441167fac483a3079b2e7\","
- " \"y\":\"8bdc62992c3382e29687114ea0a9e1ac69f91283ae1d018b6d37859731617c3a\""
- " }"
- " }"
- " },"
- " \"serialization\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err4, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_key_err5 =
- /* Without certificate */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- " \"with_auth\":\"NO\","
- " \"persistent_handle\":0,"
- " \"public\":{"
- " \"size\":122,"
- " \"publicArea\":{"
- " \"type\":\"ECC\","
- " \"nameAlg\":\"SHA256\","
- " \"objectAttributes\":{"
- " \"fixedTPM\":1,"
- " \"stClear\":0,"
- " \"fixedParent\":1,"
- " \"sensitiveDataOrigin\":1,"
- " \"userWithAuth\":0,"
- " \"adminWithPolicy\":1,"
- " \"noDA\":0,"
- " \"encryptedDuplication\":0,"
- " \"restricted\":1,"
- " \"decrypt\":1,"
- " \"sign\":0"
- " },"
- " \"authPolicy\":\"837197674484b3f81a90cc8d46a5d724fd52d76e06520b64f2a1da1b331469aa\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"AES\","
- " \"keyBits\":128,"
- " \"mode\":\"CFB\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"NULL\""
- " },"
- " \"curveID\":\"NIST_P256\","
- " \"kdf\":{"
- " \"scheme\":\"NULL\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\":\"78d926c582566a70eedffcda4fe147e1b24fe624305441167fac483a3079b2e7\","
- " \"y\":\"8bdc62992c3382e29687114ea0a9e1ac69f91283ae1d018b6d37859731617c3a\""
- " }"
- " }"
- " },"
- " \"serialization\":\"\","
- " \"policyInstance\":\"\","
- " \"description\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err5, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_key_err6 =
- /* Without description */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- " \"with_auth\":\"NO\","
- " \"persistent_handle\":0,"
- " \"public\":{"
- " \"size\":122,"
- " \"publicArea\":{"
- " \"type\":\"ECC\","
- " \"nameAlg\":\"SHA256\","
- " \"objectAttributes\":{"
- " \"fixedTPM\":1,"
- " \"stClear\":0,"
- " \"fixedParent\":1,"
- " \"sensitiveDataOrigin\":1,"
- " \"userWithAuth\":0,"
- " \"adminWithPolicy\":1,"
- " \"noDA\":0,"
- " \"encryptedDuplication\":0,"
- " \"restricted\":1,"
- " \"decrypt\":1,"
- " \"sign\":0"
- " },"
- " \"authPolicy\":\"837197674484b3f81a90cc8d46a5d724fd52d76e06520b64f2a1da1b331469aa\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"AES\","
- " \"keyBits\":128,"
- " \"mode\":\"CFB\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"NULL\""
- " },"
- " \"curveID\":\"NIST_P256\","
- " \"kdf\":{"
- " \"scheme\":\"NULL\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\":\"78d926c582566a70eedffcda4fe147e1b24fe624305441167fac483a3079b2e7\","
- " \"y\":\"8bdc62992c3382e29687114ea0a9e1ac69f91283ae1d018b6d37859731617c3a\""
- " }"
- " }"
- " },"
- " \"serialization\":\"\","
- " \"policyInstance\":\"\","
- " \"certificate\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err6, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_key_err7 =
- /* Without signing scheme */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- " \"public\":{"
- " \"size\":122,"
- " \"publicArea\":{"
- " \"type\":\"ECC\","
- " \"nameAlg\":\"SHA256\","
- " \"objectAttributes\":{"
- " \"fixedTPM\":1,"
- " \"stClear\":0,"
- " \"fixedParent\":1,"
- " \"sensitiveDataOrigin\":1,"
- " \"userWithAuth\":0,"
- " \"adminWithPolicy\":1,"
- " \"noDA\":0,"
- " \"encryptedDuplication\":0,"
- " \"restricted\":1,"
- " \"decrypt\":1,"
- " \"sign\":0"
- " },"
- " \"authPolicy\":\"837197674484b3f81a90cc8d46a5d724fd52d76e06520b64f2a1da1b331469aa\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"AES\","
- " \"keyBits\":128,"
- " \"mode\":\"CFB\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"NULL\""
- " },"
- " \"curveID\":\"NIST_P256\","
- " \"kdf\":{"
- " \"scheme\":\"NULL\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\":\"78d926c582566a70eedffcda4fe147e1b24fe624305441167fac483a3079b2e7\","
- " \"y\":\"8bdc62992c3382e29687114ea0a9e1ac69f91283ae1d018b6d37859731617c3a\""
- " }"
- " }"
- " },"
- " \"with_auth\":\"NO\","
- " \"persistent_handle\":0,"
- " \"serialization\":\"\","
- " \"policyInstance\":\"\","
- " \"certificate\":\"\","
- " \"description\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err7, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_key_err8 =
- /* Without name */
- "{"
- " \"objectType\":1,"
- " \"system\":\"YES\","
- " \"public\":{"
- " \"size\":122,"
- " \"publicArea\":{"
- " \"type\":\"ECC\","
- " \"nameAlg\":\"SHA256\","
- " \"objectAttributes\":{"
- " \"fixedTPM\":1,"
- " \"stClear\":0,"
- " \"fixedParent\":1,"
- " \"sensitiveDataOrigin\":1,"
- " \"userWithAuth\":0,"
- " \"adminWithPolicy\":1,"
- " \"noDA\":0,"
- " \"encryptedDuplication\":0,"
- " \"restricted\":1,"
- " \"decrypt\":1,"
- " \"sign\":0"
- " },"
- " \"authPolicy\":\"837197674484b3f81a90cc8d46a5d724fd52d76e06520b64f2a1da1b331469aa\","
- " \"parameters\":{"
- " \"symmetric\":{"
- " \"algorithm\":\"AES\","
- " \"keyBits\":128,"
- " \"mode\":\"CFB\""
- " },"
- " \"scheme\":{"
- " \"scheme\":\"NULL\""
- " },"
- " \"curveID\":\"NIST_P256\","
- " \"kdf\":{"
- " \"scheme\":\"NULL\""
- " }"
- " },"
- " \"unique\":{"
- " \"x\":\"78d926c582566a70eedffcda4fe147e1b24fe624305441167fac483a3079b2e7\","
- " \"y\":\"8bdc62992c3382e29687114ea0a9e1ac69f91283ae1d018b6d37859731617c3a\""
- " }"
- " }"
- " },"
- " \"with_auth\":\"NO\","
- " \"persistent_handle\":0,"
- " \"serialization\":\"\","
- " \"policyInstance\":\"\","
- " \"certificate\":\"\","
- " \"description\":\"\","
- " \"signing_scheme\":{"
- " \"scheme\":\"ECDSA\","
- " \"details\":{"
- " \"hashAlg\":\"SHA256\""
- " }"
- " },"
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_key_err8, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_err1 =
- "{"
- " \"objectType\":2,"
- " \"system\":\"NO\","
- " \"with_auth\":\"NO\","
- " \"nv_object\":true,"
- " \"hierarchy\":257,"
- " \"policyInstance\":\"\","
- " \"description\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_nv_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_err2 =
- "{"
- " \"objectType\":2,"
- " \"system\":\"NO\","
- " \"with_auth\":\"NO\","
- " \"nv_object\":true,"
- " \"public\":{"
- " \"size\":0,"
- " \"nvPublic\":{"
- " \"nvIndex\":25165824,"
- " \"nameAlg\":\"SHA256\","
- " \"attributes\":{"
- " \"PPWRITE\":0,"
- " \"OWNERWRITE\":0,"
- " \"AUTHWRITE\":0,"
- " \"POLICYWRITE\":1,"
- " \"POLICY_DELETE\":0,"
- " \"WRITELOCKED\":0,"
- " \"WRITEALL\":0,"
- " \"WRITEDEFINE\":0,"
- " \"WRITE_STCLEAR\":1,"
- " \"GLOBALLOCK\":0,"
- " \"PPREAD\":0,"
- " \"OWNERREAD\":0,"
- " \"AUTHREAD\":0,"
- " \"POLICYREAD\":1,"
- " \"NO_DA\":1,"
- " \"ORDERLY\":0,"
- " \"CLEAR_STCLEAR\":0,"
- " \"READLOCKED\":0,"
- " \"WRITTEN\":0,"
- " \"PLATFORMCREATE\":0,"
- " \"READ_STCLEAR\":1,"
- " \"TPM2_NT\":\"ORDINARY\""
- " },"
- " \"authPolicy\":\"0000000000000000000000000000000000000000000000000000000000000000\","
- " \"dataSize\":1200"
- " }"
- " },"
- " \"serialization\":\"018000000022000b59323f518181d5e607ade494f3ecaf7ba552ddc57fde379b3cf8ca82c009257c00000002002e01800000000b820840080020000000000000000000000000000000000000000000000000000000000000000004b0\","
- " \"policyInstance\":\"\","
- " \"description\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_nv_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_err3 =
- "{"
- " \"objectType\":2,"
- " \"system\":\"NO\","
- " \"with_auth\":\"NO\","
- " \"nv_object\":true,"
- " \"public\":{"
- " \"size\":0,"
- " \"nvPublic\":{"
- " \"nvIndex\":25165824,"
- " \"nameAlg\":\"SHA256\","
- " \"attributes\":{"
- " \"PPWRITE\":0,"
- " \"OWNERWRITE\":0,"
- " \"AUTHWRITE\":0,"
- " \"POLICYWRITE\":1,"
- " \"POLICY_DELETE\":0,"
- " \"WRITELOCKED\":0,"
- " \"WRITEALL\":0,"
- " \"WRITEDEFINE\":0,"
- " \"WRITE_STCLEAR\":1,"
- " \"GLOBALLOCK\":0,"
- " \"PPREAD\":0,"
- " \"OWNERREAD\":0,"
- " \"AUTHREAD\":0,"
- " \"POLICYREAD\":1,"
- " \"NO_DA\":1,"
- " \"ORDERLY\":0,"
- " \"CLEAR_STCLEAR\":0,"
- " \"READLOCKED\":0,"
- " \"WRITTEN\":0,"
- " \"PLATFORMCREATE\":0,"
- " \"READ_STCLEAR\":1,"
- " \"TPM2_NT\":\"ORDINARY\""
- " },"
- " \"authPolicy\":\"0000000000000000000000000000000000000000000000000000000000000000\","
- " \"dataSize\":1200"
- " }"
- " },"
- " \"serialization\":\"018000000022000b59323f518181d5e607ade494f3ecaf7ba552ddc57fde379b3cf8ca82c009257c00000002002e01800000000b820840080020000000000000000000000000000000000000000000000000000000000000000004b0\","
- " \"hierarchy\":257,"
- " \"description\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_nv_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_err4 =
- "{"
- " \"objectType\":2,"
- " \"system\":\"NO\","
- " \"nv_object\":true,"
- " \"public\":{"
- " \"size\":0,"
- " \"nvPublic\":{"
- " \"nvIndex\":25165824,"
- " \"nameAlg\":\"SHA256\","
- " \"attributes\":{"
- " \"PPWRITE\":0,"
- " \"OWNERWRITE\":0,"
- " \"AUTHWRITE\":0,"
- " \"POLICYWRITE\":1,"
- " \"POLICY_DELETE\":0,"
- " \"WRITELOCKED\":0,"
- " \"WRITEALL\":0,"
- " \"WRITEDEFINE\":0,"
- " \"WRITE_STCLEAR\":1,"
- " \"GLOBALLOCK\":0,"
- " \"PPREAD\":0,"
- " \"OWNERREAD\":0,"
- " \"AUTHREAD\":0,"
- " \"POLICYREAD\":1,"
- " \"NO_DA\":1,"
- " \"ORDERLY\":0,"
- " \"CLEAR_STCLEAR\":0,"
- " \"READLOCKED\":0,"
- " \"WRITTEN\":0,"
- " \"PLATFORMCREATE\":0,"
- " \"READ_STCLEAR\":1,"
- " \"TPM2_NT\":\"ORDINARY\""
- " },"
- " \"authPolicy\":\"0000000000000000000000000000000000000000000000000000000000000000\","
- " \"dataSize\":1200"
- " }"
- " },"
- " \"serialization\":\"018000000022000b59323f518181d5e607ade494f3ecaf7ba552ddc57fde379b3cf8ca82c009257c00000002002e01800000000b820840080020000000000000000000000000000000000000000000000000000000000000000004b0\","
- " \"hierarchy\":257,"
- " \"policyInstance\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_nv_err4, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_err5 =
- "{"
- " \"objectType\":2,"
- " \"system\":\"NO\","
- " \"with_auth\":\"NO\","
- " \"nv_object\":true,"
- " \"public\":{"
- " \"size\":0,"
- " \"nvPublic\":{"
- " \"nvIndex\":25165824,"
- " \"nameAlg\":\"SHA256\","
- " \"attributes\":{"
- " \"PPWRITE\":0,"
- " \"OWNERWRITE\":0,"
- " \"AUTHWRITE\":0,"
- " \"POLICYWRITE\":1,"
- " \"POLICY_DELETE\":0,"
- " \"WRITELOCKED\":0,"
- " \"WRITEALL\":0,"
- " \"WRITEDEFINE\":0,"
- " \"WRITE_STCLEAR\":1,"
- " \"GLOBALLOCK\":0,"
- " \"PPREAD\":0,"
- " \"OWNERREAD\":0,"
- " \"AUTHREAD\":0,"
- " \"POLICYREAD\":1,"
- " \"NO_DA\":1,"
- " \"ORDERLY\":0,"
- " \"CLEAR_STCLEAR\":0,"
- " \"READLOCKED\":0,"
- " \"WRITTEN\":0,"
- " \"PLATFORMCREATE\":0,"
- " \"READ_STCLEAR\":1,"
- " \"TPM2_NT\":\"ORDINARY\""
- " },"
- " \"authPolicy\":\"0000000000000000000000000000000000000000000000000000000000000000\","
- " \"dataSize\":1200"
- " }"
- " },"
- " \"serialization\":\"018000000022000b59323f518181d5e607ade494f3ecaf7ba552ddc57fde379b3cf8ca82c009257c00000002002e01800000000b820840080020000000000000000000000000000000000000000000000000000000000000000004b0\","
- " \"hierarchy\":257,"
- " \"description\":\"\","
- "}";
- CHECK_ERROR_CLEANUP(IFAPI_OBJECT, test_json_nv_err5, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_attest_err1 =
- "{"
- " \"magic\":\"VALUE\","
- " \"type\":\"ATTEST_QUOTE\","
- " \"qualifiedSigner\":\"000b5adea4e8b49b3f76db36b9442a29e515263e28bbd9e9263843675bb3cf750202\","
- " \"extraData\":\"6768033e216468247bd031a0a2d9876d79818f8f\","
- " \"clockInfo\":{"
- " \"clock\":8048,"
- " \"resetCount\":639972755,"
- " \"restartCount\":158941495,"
- " \"safe\":\"YES\" }"
- "}";
- CHECK_ERROR(TPMS_ATTEST, test_json_attest_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_attest_err2 =
- "{"
- " \"magic\":\"VALUE\","
- " \"type\":\"ATTEST_QUOTE\","
- " \"qualifiedSigner\":\"000b5adea4e8b49b3f76db36b9442a29e515263e28bbd9e9263843675bb3cf750202\","
- " \"extraData\":\"6768033e216468247bd031a0a2d9876d79818f8f\""
- "}";
- CHECK_ERROR(TPMS_ATTEST, test_json_attest_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_attest_err3 =
- "{"
- " \"magic\":\"VALUE\","
- " \"type\":\"ATTEST_QUOTE\","
- " \"qualifiedSigner\":\"000b5adea4e8b49b3f76db36b9442a29e515263e28bbd9e9263843675bb3cf750202\","
- "}";
- CHECK_ERROR(TPMS_ATTEST, test_json_attest_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_attest_err4 =
- "{"
- " \"magic\":\"VALUE\","
- " \"type\":\"ATTEST_QUOTE\","
- "}";
- CHECK_ERROR(TPMS_ATTEST, test_json_attest_err4, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_attest_err5 =
- "{"
- " \"magic\":\"VALUE\","
- "}";
- CHECK_ERROR(TPMS_ATTEST, test_json_attest_err5, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_attest_err6 =
- "{"
- "}";
- CHECK_ERROR(TPMS_ATTEST, test_json_attest_err6, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_clock_err1 =
- "{"
- " \"clock\":8048,"
- " \"resetCount\":639972755,"
- " \"restartCount\":158941495,"
- "}";
- CHECK_ERROR(TPMS_CLOCK_INFO, test_json_clock_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_clock_err2 =
- "{"
- " \"clock\":8048,"
- " \"resetCount\":639972755,"
- "}";
- CHECK_ERROR(TPMS_CLOCK_INFO, test_json_clock_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_clock_err3 =
- "{"
- " \"clock\":8048,"
- "}";
- CHECK_ERROR(TPMS_CLOCK_INFO, test_json_clock_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_clock_err4 =
- "{"
- "}";
- CHECK_ERROR(TPMS_CLOCK_INFO, test_json_clock_err4, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_command_audit_err1 =
- "{"
- " \"auditCounter\":8048,"
- " \"digestAlg\":\"sha1\","
- " \"auditDigest\":\"0102\","
- "}";
- CHECK_ERROR(TPMS_COMMAND_AUDIT_INFO, test_json_command_audit_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_command_audit_err2 =
- "{"
- " \"auditCounter\":8048,"
- " \"digestAlg\":\"sha1\","
- "}";
- CHECK_ERROR(TPMS_COMMAND_AUDIT_INFO, test_json_command_audit_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_command_audit_err3 =
- "{"
- " \"auditCounter\":8048,"
- "}";
- CHECK_ERROR(TPMS_COMMAND_AUDIT_INFO, test_json_command_audit_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_command_audit_err4 =
- "{"
- "}";
- CHECK_ERROR(TPMS_COMMAND_AUDIT_INFO, test_json_command_audit_err4, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_tk_creation_err1 =
- "{"
- " \"tag\":\"NULL\","
- " \"hierarchy\":\"OWNER\","
- "}";
- CHECK_ERROR(TPMT_TK_CREATION, test_json_tk_creation_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_tk_creation_err2 =
- "{"
- " \"tag\":\"NULL\","
- "}";
- CHECK_ERROR(TPMT_TK_CREATION, test_json_tk_creation_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_tk_creation_err3 =
- "{"
- "}";
- CHECK_ERROR(TPMT_TK_CREATION, test_json_tk_creation_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_certify_info_err1 =
- "{"
- " \"indexName\":\"0102\","
- " \"offset\":0,"
- "}";
- CHECK_ERROR(TPMS_NV_CERTIFY_INFO, test_json_nv_certify_info_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_certify_info_err2 =
- "{"
- " \"indexName\":\"0102\","
- "}";
- CHECK_ERROR(TPMS_NV_CERTIFY_INFO, test_json_nv_certify_info_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_nv_certify_info_err3 =
- "{"
- "}";
- CHECK_ERROR(TPMS_NV_CERTIFY_INFO, test_json_nv_certify_info_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_ecc_err1 =
- "{"
- " \"hash\":\"sha1\","
- " \"signatureR\":\"0102\","
- "}";
- CHECK_ERROR(TPMS_SIGNATURE_ECC, test_json_signature_ecc_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_ecc_err2 =
- "{"
- " \"hash\":\"sha1\","
- "}";
- CHECK_ERROR(TPMS_SIGNATURE_ECC, test_json_signature_ecc_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_ecc_err4 =
- "{"
- "}";
- CHECK_ERROR(TPMS_SIGNATURE_ECC, test_json_signature_ecc_err4, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err1 =
- "{"
- " \"sigAlg\":\"HMAC\","
- " \"signature\":\"0102\","
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err1, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err2 =
- "{"
- " \"sigAlg\":\"ECDSA\","
- " \"signature\":\"0102\","
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err2, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err3 =
- "{"
- " \"sigAlg\":\"ECDAA\","
- " \"signature\":\"0102\","
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err3, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err4 =
- "{"
- " \"sigAlg\":\"SM2\","
- " \"signature\":\"0102\","
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err4, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err5 =
- "{"
- " \"sigAlg\":\"ECSCHNORR\","
- " \"signature\":\"0102\","
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err5, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err6 =
- "{"
- " \"sigAlg\":\"RSASSA\","
- " \"signature\":\"0102\","
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err6, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err7 =
- "{"
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err7, TSS2_FAPI_RC_BAD_VALUE);
- const char *test_json_signature_err8 =
- "{"
- " \"sigAlg\":\"RSASSA\","
- "}";
- CHECK_ERROR(TPMT_SIGNATURE, test_json_signature_err8, TSS2_FAPI_RC_BAD_VALUE);
- }
- static void
- check_tpmjson_tofromtxt(void **state)
- {
- const char *testcase_alg_id[] = { "\"TPM_ALG_ID_SHA1\"", "\"TPM2_ALG_ID_SHA1\"",
- "\"ALG_ID_SHA1\"", "\"SHA1\"", "\"ALG_SHA1\"",
- "\"tpm2_alg_id_sha1\"", "\"sha1\"", "\"0x0004\"" };
- const char *expected_ald_id = { "\"SHA1\"" };
- for (size_t i = 0; i < sizeof(testcase_alg_id) / sizeof(testcase_alg_id[0]); i++) {
- CHECK_JSON_SIMPLE(TPM2_ALG_ID, testcase_alg_id[i], expected_ald_id);
- }
- const char *testcase_ecc_curve[] = { "\"TPM2_ECC_NIST_P256\"", "\"ECC_NIST_P256\"",
- "\"NIST_P256\"", "\"0x0003\"", "\"nist_p256\"" };
- const char *expected_ecc_curve = { "\"NIST_P256\"" };
- for (size_t i = 0; i < sizeof(testcase_ecc_curve) / sizeof(testcase_ecc_curve[0]); i++) {
- CHECK_JSON_SIMPLE(TPM2_ECC_CURVE, testcase_ecc_curve[i], expected_ecc_curve);
- }
- const char *testcase_cc[] = { "\"TPM2_CC_Startup\"", "\"CC_Startup\"",
- "\"Startup\"", "\"0x00000144\"" };
- const char *expected_cc = { "\"Startup\"" };
- for (size_t i = 0; i < sizeof(testcase_cc) / sizeof(testcase_cc[0]); i++) {
- CHECK_JSON_SIMPLE(TPM2_CC, testcase_cc[i], expected_cc);
- }
- const char *testcase_eo[] = { "\"TPM2_EO_EQ\"", "\"EO_EQ\"",
- "\"EQ\"", "\"0x0000\"" };
- const char *expected_eo = { "\"EQ\"" };
- for (size_t i = 0; i < sizeof(testcase_eo) / sizeof(testcase_eo[0]); i++) {
- CHECK_JSON_SIMPLE(TPM2_EO, testcase_eo[i], expected_eo);
- }
- const char *testcase_st[] = { "\"TPM2_ST_NO_SESSIONS\"", "\"ST_NO_SESSIONS\"",
- "\"no_SESSIONS\"", "\"0x8001\"" };
- const char *expected_st = { "\"NO_SESSIONS\"" };
- for (size_t i = 0; i < sizeof(testcase_st) / sizeof(testcase_st[0]); i++) {
- CHECK_JSON_SIMPLE(TPM2_ST, testcase_st[i], expected_st);
- }
- const char *testcase_pt_pcr[] = { "\"TPM2_PT_PCR_EXTEND_L0\"", "\"PT_PCR_EXTEND_L0\"",
- "\"PCR_EXTEND_L0\"", "\"EXTEND_L0\"" };
- const char *expected_pt_pcr = { "\"EXTEND_L0\"" };
- for (size_t i = 0; i < sizeof(testcase_pt_pcr) / sizeof(testcase_pt_pcr[0]); i++) {
- CHECK_JSON_SIMPLE(TPM2_PT_PCR, testcase_pt_pcr[i], expected_pt_pcr);
- }
- const char *testcase_alg_public[] = { "\"TPM2_ALG_RSA\"", "\"ALG_RSA\"",
- "\"RSA\"", "\"0x0001\"" };
- const char *expected_alg_public = { "\"RSA\"" };
- for (size_t i = 0; i < sizeof(testcase_alg_public) / sizeof(testcase_alg_public[0]); i++) {
- CHECK_JSON_SIMPLE(TPMI_ALG_PUBLIC, testcase_alg_public[i], expected_alg_public);
- }
- }
- static void
- check_invalid_json(void **state) {
- json_object *jso = ifapi_parse_json("{\n \"field\", \"value\"");
- assert_null(jso);
- }
- int
- main(int argc, char *argv[])
- {
- const struct CMUnitTest tests[] = {
- cmocka_unit_test(check_tpmjson_tofromtxt),
- cmocka_unit_test(check_json_structs),
- cmocka_unit_test(check_json_constants),
- cmocka_unit_test(check_json_numbers),
- cmocka_unit_test(check_json_bits),
- cmocka_unit_test(check_json_tpm2bs),
- cmocka_unit_test(check_json_to_bin),
- cmocka_unit_test(check_bin),
- cmocka_unit_test(check_policy_bin),
- cmocka_unit_test(check_error),
- cmocka_unit_test(check_json_policy),
- cmocka_unit_test(check_invalid_json),
- };
- return cmocka_run_group_tests(tests, NULL, NULL);
- }
|