static void addInput(CuTest *tc, KSI_BlockSigner *bs, int genMeta) { int res = KSI_UNKNOWN_ERROR; size_t i; KSI_DataHash *hsh = NULL; KSI_MetaData *md = NULL; for (i = 0; input_data[i] != NULL; i++) { res = KSI_DataHash_create(ctx, input_data[i], strlen(input_data[i]), KSI_HASHALG_SHA2_256, &hsh); CuAssert(tc, "Unable to create data hash.", res == KSI_OK && hsh != NULL); if (genMeta) { char clientId[100]; KSI_snprintf(clientId, sizeof(clientId), "Client-%d", i); res = createMetaData(clientId, &md); CuAssert(tc, "Unable to create metadata.", res == KSI_OK && md != NULL); res = KSI_BlockSigner_addLeaf(bs, hsh, 0, md, NULL); CuAssert(tc, "Unable to add leaf with meta data.", res == KSI_OK); KSI_MetaData_free(md); md = NULL; } else { res = KSI_BlockSigner_add(bs, hsh); CuAssert(tc, "Unable to add data hash to the block signer.", res == KSI_OK); } KSI_DataHash_free(hsh); hsh = NULL; } }
int main(int argc , char *argv[]) { printf("initFile %s\n\n", VER); if (argc < 2) { printf("initFile <create/show> <file>\n"); printf(" or\n"); printf("initFile <create> <file> <chunk_size>\n"); exit(1); } if (strcmp("create", argv[1]) == 0) { int64_t chunk_size = (argc == 4 ? atoll(argv[3]) : 0); if (chunk_size > MAX_CHUNK_SIZE) { cout << "Error: chunk size can be bigger than "; cout << MAX_CHUNK_SIZE << "." << endl; exit(1); } createMetaData(argv[2], chunk_size != 0 ? &chunk_size : NULL); } if (strcmp("show", argv[1]) == 0) { showMetaData(argv[2]); } exit(0); }
static void testMedaData(CuTest *tc) { #define TEST_AGGR_RESPONSE_FILE "resource/tlv/test_meta_data_response.tlv" int res = KSI_UNKNOWN_ERROR; KSI_BlockSigner *bs = NULL; KSI_MetaData *md = NULL; char data[] = "LAPTOP"; char *clientId[] = { "Alice", "Bob", "Claire", NULL }; size_t i; KSI_DataHash *hsh = NULL; KSI_BlockSignerHandle *hndl[] = {NULL, NULL, NULL}; KSI_Signature *sig = NULL; char *id = NULL; res = KSI_DataHash_create(ctx, data, strlen(data), KSI_HASHALG_SHA2_256, &hsh); CuAssert(tc, "Unable to create data hash.", res == KSI_OK && hsh != NULL); res = KSI_BlockSigner_new(ctx, KSI_HASHALG_SHA2_256, NULL, NULL, &bs); CuAssert(tc, "Unable to create block signer instance.", res == KSI_OK && bs != NULL); for (i = 0; clientId[i] != NULL; i++) { res = createMetaData(clientId[i], &md); CuAssert(tc, "Unable to create meta-data.", res == KSI_OK && md != NULL); res = KSI_BlockSigner_addLeaf(bs, hsh, 0, md, &hndl[i]); CuAssert(tc, "Unable to add leaf to the block signer.", res == KSI_OK && hndl[i] != NULL); KSI_MetaData_free(md); md = NULL; } res = KSI_CTX_setAggregator(ctx, getFullResourcePathUri(TEST_AGGR_RESPONSE_FILE), TEST_USER, TEST_PASS); CuAssert(tc, "Unable to set aggregator file URI.", res == KSI_OK); res = KSI_BlockSigner_close(bs, NULL); CuAssert(tc, "Unable to close the blocksigner.", res == KSI_OK); /* Loop over all the handles, and extract the signature. */ for (i = 0; clientId[i] != NULL; i++) { char expId[0xff]; /* Extract the signature. */ res = KSI_BlockSignerHandle_getSignature(hndl[i], &sig); CuAssert(tc, "Unable to extract signature.", res == KSI_OK && sig != NULL); /* Verify the signature. */ res = KSI_verifySignature(ctx, sig); CuAssert(tc, "Unable to verify the extracted signature.", res == KSI_OK); /* Extract the id attribution. */ res = KSI_Signature_getSignerIdentity(sig, &id); CuAssert(tc, "Unable to extract the signer identity.", res == KSI_OK && id != NULL); /* Create the expected id value. */ KSI_snprintf(expId, sizeof(expId), "%s :: %s", "GT :: GT :: release test :: anon http", clientId[i]); CuAssert(tc, "Client id not what expected.", !strcmp(id, expId)); /* Cleanup. */ KSI_Signature_free(sig); sig = NULL; KSI_free(id); id = NULL; KSI_BlockSignerHandle_free(hndl[i]); } KSI_DataHash_free(hsh); KSI_MetaData_free(md); KSI_BlockSigner_free(bs); #undef TEST_AGGR_RESPONSE_FILE }