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);
}
}
|