/xmlbench/trunk

To get this branch, use:
bzr branch http://darksoft.org/webbzr/xmlbench/trunk
1 by Suren A. Chilingaryan
Initial import
1
#include <assert.h>
2
/**
3
 * load_rsa_keys:
4
 * @key_file:		the key filename.
5
 *
6
 * Creates simple keys manager and load RSA key from #key_file in it.
7
 * The caller is responsible for destroing returned keys manager using
8
 * @xmlSecKeysMngrDestroy.
9
 *
10
 * Returns the pointer to newly created keys manager or NULL if an error
11
 * occurs.
12
 */
13
 
14
xmlSecKeysMngrPtr 
15
load_rsa_keys(const char* key_file, const char* cert_file, const char* key_name) {
16
    xmlSecKeysMngrPtr mngr;
17
    xmlSecKeyPtr key;
18
    
19
    assert(key_file);
20
    assert(key_name);
21
    
22
    /* create and initialize keys manager, we use a simple list based
23
     * keys manager, implement your own xmlSecKeysStore klass if you need
24
     * something more sophisticated 
25
     */
26
    mngr = xmlSecKeysMngrCreate();
27
    if(mngr == NULL) {
28
	fprintf(stderr, "Error: failed to create keys manager.\n");
29
	return(NULL);
30
    }
31
    if(xmlSecCryptoAppDefaultKeysMngrInit(mngr) < 0) {
32
	fprintf(stderr, "Error: failed to initialize keys manager.\n");
33
	xmlSecKeysMngrDestroy(mngr);
34
	return(NULL);
35
    }    
36
    
37
    /* load private RSA key */
38
39
#if XMLSEC_VERSION_MINOR >= 2
40
    if (!cert_file)
41
	key = xmlSecCryptoAppKeyLoad(key_file, xmlSecKeyDataFormatCertPem /*Der,Binary,Unknown*/, NULL/*pwd*/, NULL/*pwd callback*/, NULL/*pwd callback ctx*/);
42
    else
43
#endif
44
	key = xmlSecCryptoAppKeyLoad(key_file, xmlSecKeyDataFormatPem /*Der,Binary,Unknown*/, NULL/*pwd*/, NULL/*pwd callback*/, NULL/*pwd callback ctx*/);
45
    
46
    if(key == NULL) {
47
        fprintf(stderr,"Error: failed to load rsa key from file \"%s\"\n", key_file);
48
        xmlSecKeysMngrDestroy(mngr);
49
        return(NULL);
50
    }
51
    
52
    if (cert_file) {
53
        if(xmlSecCryptoAppKeyCertLoad(key, cert_file, xmlSecKeyDataFormatPem) < 0) {
54
		fprintf(stderr,"Error: failed to load pem certificate \"%s\"\n", cert_file);
55
		return(NULL);
56
	}
57
    }
58
    
59
60
    /* set key name to the file name, this is just an example! */
61
    if(xmlSecKeySetName(key, BAD_CAST key_name) < 0) {
62
        fprintf(stderr,"Error: failed to set key name for key from \"%s\"\n", key_file);
63
        xmlSecKeyDestroy(key);	
64
	xmlSecKeysMngrDestroy(mngr);
65
	return(NULL);
66
    }
67
	
68
    /* add key to keys manager, from now on keys manager is responsible 
69
     * for destroying key 
70
     */
71
    if(xmlSecCryptoAppDefaultKeysMngrAdoptKey(mngr, key) < 0) {
72
        fprintf(stderr,"Error: failed to add key from \"%s\" to keys manager\n", key_file);
73
        xmlSecKeyDestroy(key);
74
        xmlSecKeysMngrDestroy(mngr);
75
        return(NULL);
76
    }
77
78
    return(mngr);
79
}