summaryrefslogtreecommitdiff
path: root/verify.c
blob: b9a7a45ca1c0f569c3c843084eac7d61baa91ed9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* gcc -o verify verify.c -I/usr/include/libxml2 $(pkg-config --cflags --libs xmlsec1) && ./verify */
#include <libxml/parser.h>
#include <xmlsec/xmldsig.h>
#include <xmlsec/dl.h>
#include <xmlsec/app.h>
#include <xmlsec/crypto.h>
#include <xmlsec/xmltree.h>
#include <xmlsec/keysmngr.h>
#include <xmlsec/app.h>
#include <xmlsec/xmldsig.h>

int main()
{
	xmlSecInit();
	xmlSecCryptoAppInit(0);
	xmlSecCryptoInit();

	//int const size = 9218;
	//FILE* f = fopen("test.xml", "r");
	int const size = 8785;
	FILE* f = fopen("test2.xml", "r");

	char* buffer = malloc(size);
	fread(buffer, 1, size, f);
	fclose(f);
	xmlDocPtr doc = xmlReadMemory(buffer, size, "noname.xml", NULL, 0);
	if (!doc) {
		fprintf(stderr, "parse\n");
		exit(1);
	}

	xmlNodePtr node = xmlSecFindNode(xmlDocGetRootElement(doc), xmlSecNodeSignature, xmlSecDSigNs);
	if (!node) {
		fprintf(stderr, "find the node\n");
		exit(1);
	}

	xmlSecKeysMngrPtr keys_manager = xmlSecKeysMngrCreate();

	xmlSecDSigCtxPtr dsig_context = xmlSecDSigCtxCreate(keys_manager);
	if (!dsig_context) {
		fprintf(stderr, "make context\n");
		exit(1);
	}

	if (xmlSecDSigCtxVerify(dsig_context, node) < 0) {
		fprintf(stderr, "nope\n");
		exit(1);
	}
}