Git init
[external/xmlsec1.git] / src / skeleton / crypto.c
1 /** 
2  * XMLSec library
3  *
4  * This is free software; see Copyright file in the source
5  * distribution for preciese wording.
6  * 
7  * Copyright (C) 2002-2003 Aleksey Sanin <aleksey@aleksey.com>
8  */
9 #include "globals.h"
10
11 #include <string.h>
12
13 /* TODO: add Skeleton include files */
14
15 #include <xmlsec/xmlsec.h>
16 #include <xmlsec/keys.h>
17 #include <xmlsec/transforms.h>
18 #include <xmlsec/errors.h>
19 #include <xmlsec/dl.h>
20 #include <xmlsec/private.h>
21
22 #include <xmlsec/skeleton/app.h>
23 #include <xmlsec/skeleton/crypto.h>
24
25 static xmlSecCryptoDLFunctionsPtr gXmlSecSkeletonFunctions = NULL;
26
27 /**
28  * xmlSecCryptoGetFunctions_skeleton:
29  *
30  * Gets the pointer to xmlsec-skeleton functions table.
31  *
32  * Returns: the xmlsec-skeleton functions table or NULL if an error occurs.
33  */
34 xmlSecCryptoDLFunctionsPtr
35 xmlSecCryptoGetFunctions_skeleton(void) {
36     static xmlSecCryptoDLFunctions functions;
37     
38     if(gXmlSecSkeletonFunctions != NULL) {
39         return(gXmlSecSkeletonFunctions);
40     }
41
42     memset(&functions, 0, sizeof(functions));
43     gXmlSecSkeletonFunctions = &functions;
44
45     /**  
46      * Crypto Init/shutdown
47      */
48     gXmlSecSkeletonFunctions->cryptoInit                = xmlSecSkeletonInit;
49     gXmlSecSkeletonFunctions->cryptoShutdown            = xmlSecSkeletonShutdown;
50     gXmlSecSkeletonFunctions->cryptoKeysMngrInit        = xmlSecSkeletonKeysMngrInit;
51
52     /**
53      * Key data ids
54      */
55 #ifndef XMLSEC_NO_AES    
56     gXmlSecSkeletonFunctions->keyDataAesGetKlass        = xmlSecSkeletonKeyDataAesGetKlass;
57 #endif /* XMLSEC_NO_AES */
58
59 #ifndef XMLSEC_NO_DES    
60     gXmlSecSkeletonFunctions->keyDataDesGetKlass        = xmlSecSkeletonKeyDataDesGetKlass;
61 #endif /* XMLSEC_NO_DES */
62
63 #ifndef XMLSEC_NO_DSA
64     gXmlSecSkeletonFunctions->keyDataDsaGetKlass        = xmlSecSkeletonKeyDataDsaGetKlass;
65 #endif /* XMLSEC_NO_DSA */    
66
67 #ifndef XMLSEC_NO_GOST
68     gXmlSecSkeletonFunctions->keyDataGost2001GetKlass   = xmlSecSkeletonKeyDataGost2001GetKlass;
69 #endif /* XMLSEC_NO_GOST */    
70
71 #ifndef XMLSEC_NO_HMAC  
72     gXmlSecSkeletonFunctions->keyDataHmacGetKlass       = xmlSecSkeletonKeyDataHmacGetKlass;
73 #endif /* XMLSEC_NO_HMAC */    
74
75 #ifndef XMLSEC_NO_RSA
76     gXmlSecSkeletonFunctions->keyDataRsaGetKlass        = xmlSecSkeletonKeyDataRsaGetKlass;
77 #endif /* XMLSEC_NO_RSA */
78
79 #ifndef XMLSEC_NO_X509
80     gXmlSecSkeletonFunctions->keyDataX509GetKlass               = xmlSecSkeletonKeyDataX509GetKlass;
81     gXmlSecSkeletonFunctions->keyDataRawX509CertGetKlass        = xmlSecSkeletonKeyDataRawX509CertGetKlass;
82 #endif /* XMLSEC_NO_X509 */
83
84     /**
85      * Key data store ids
86      */
87 #ifndef XMLSEC_NO_X509
88     gXmlSecSkeletonFunctions->x509StoreGetKlass                 = xmlSecSkeletonX509StoreGetKlass;
89 #endif /* XMLSEC_NO_X509 */
90
91     /**
92      * Crypto transforms ids
93      */
94 #ifndef XMLSEC_NO_AES    
95     gXmlSecSkeletonFunctions->transformAes128CbcGetKlass        = xmlSecSkeletonTransformAes128CbcGetKlass;
96     gXmlSecSkeletonFunctions->transformAes192CbcGetKlass        = xmlSecSkeletonTransformAes192CbcGetKlass;
97     gXmlSecSkeletonFunctions->transformAes256CbcGetKlass        = xmlSecSkeletonTransformAes256CbcGetKlass;
98     gXmlSecSkeletonFunctions->transformKWAes128GetKlass         = xmlSecSkeletonTransformKWAes128GetKlass;
99     gXmlSecSkeletonFunctions->transformKWAes192GetKlass         = xmlSecSkeletonTransformKWAes192GetKlass;
100     gXmlSecSkeletonFunctions->transformKWAes256GetKlass         = xmlSecSkeletonTransformKWAes256GetKlass;
101 #endif /* XMLSEC_NO_AES */
102
103 #ifndef XMLSEC_NO_DES    
104     gXmlSecSkeletonFunctions->transformDes3CbcGetKlass          = xmlSecSkeletonTransformDes3CbcGetKlass;
105     gXmlSecSkeletonFunctions->transformKWDes3GetKlass           = xmlSecSkeletonTransformKWDes3GetKlass;
106 #endif /* XMLSEC_NO_DES */
107
108 #ifndef XMLSEC_NO_DSA
109     gXmlSecSkeletonFunctions->transformDsaSha1GetKlass          = xmlSecSkeletonTransformDsaSha1GetKlass;
110 #endif /* XMLSEC_NO_DSA */
111
112 #ifndef XMLSEC_NO_GOST
113     gXmlSecSkeletonFunctions->transformGost2001GostR3411_94GetKlass             = xmlSecSkeletonTransformGost2001GostR3411_94GetKlass;
114 #endif /* XMLSEC_GOST */
115
116 #ifndef XMLSEC_NO_HMAC
117     gXmlSecSkeletonFunctions->transformHmacSha1GetKlass         = xmlSecSkeletonTransformHmacSha1GetKlass;
118     gXmlSecSkeletonFunctions->transformHmacRipemd160GetKlass    = xmlSecSkeletonTransformHmacRipemd160GetKlass;
119     gXmlSecSkeletonFunctions->transformHmacMd5GetKlass          = xmlSecSkeletonTransformHmacMd5GetKlass;
120 #endif /* XMLSEC_NO_HMAC */
121
122 #ifndef XMLSEC_NO_RIPEMD160
123     gXmlSecSkeletonFunctions->transformRipemd160GetKlass        = xmlSecSkeletonTransformRipemd160GetKlass;
124 #endif /* XMLSEC_NO_RIPEMD160 */
125
126 #ifndef XMLSEC_NO_RSA
127     gXmlSecSkeletonFunctions->transformRsaSha1GetKlass          = xmlSecSkeletonTransformRsaSha1GetKlass;
128     gXmlSecSkeletonFunctions->transformRsaPkcs1GetKlass         = xmlSecSkeletonTransformRsaPkcs1GetKlass;
129     gXmlSecSkeletonFunctions->transformRsaOaepGetKlass          = xmlSecSkeletonTransformRsaOaepGetKlass;
130 #endif /* XMLSEC_NO_RSA */
131
132 #ifndef XMLSEC_NO_SHA1    
133     gXmlSecSkeletonFunctions->transformSha1GetKlass             = xmlSecSkeletonTransformSha1GetKlass;
134 #endif /* XMLSEC_NO_SHA1 */
135
136 #ifndef XMLSEC_NO_GOST    
137     gXmlSecSkeletonFunctions->transformGostR3411_94GetKlass             = xmlSecSkeletonTransformGostR3411_94GetKlass;
138 #endif /* XMLSEC_NO_GOST */
139
140     /**
141      * High level routines form xmlsec command line utility
142      */ 
143     gXmlSecSkeletonFunctions->cryptoAppInit                     = xmlSecSkeletonAppInit;
144     gXmlSecSkeletonFunctions->cryptoAppShutdown                 = xmlSecSkeletonAppShutdown;
145     gXmlSecSkeletonFunctions->cryptoAppDefaultKeysMngrInit      = xmlSecSkeletonAppDefaultKeysMngrInit;
146     gXmlSecSkeletonFunctions->cryptoAppDefaultKeysMngrAdoptKey  = xmlSecSkeletonAppDefaultKeysMngrAdoptKey;
147     gXmlSecSkeletonFunctions->cryptoAppDefaultKeysMngrLoad      = xmlSecSkeletonAppDefaultKeysMngrLoad;
148     gXmlSecSkeletonFunctions->cryptoAppDefaultKeysMngrSave      = xmlSecSkeletonAppDefaultKeysMngrSave;
149 #ifndef XMLSEC_NO_X509
150     gXmlSecSkeletonFunctions->cryptoAppKeysMngrCertLoad         = xmlSecSkeletonAppKeysMngrCertLoad;
151     gXmlSecSkeletonFunctions->cryptoAppKeysMngrCertLoadMemory   = xmlSecSkeletonAppKeysMngrCertLoadMemory;
152     gXmlSecSkeletonFunctions->cryptoAppPkcs12Load               = xmlSecSkeletonAppPkcs12Load; 
153     gXmlSecSkeletonFunctions->cryptoAppPkcs12LoadMemory         = xmlSecSkeletonAppPkcs12LoadMemory; 
154     gXmlSecSkeletonFunctions->cryptoAppKeyCertLoad              = xmlSecSkeletonAppKeyCertLoad;
155     gXmlSecSkeletonFunctions->cryptoAppKeyCertLoadMemory        = xmlSecSkeletonAppKeyCertLoadMemory;
156 #endif /* XMLSEC_NO_X509 */
157     gXmlSecSkeletonFunctions->cryptoAppKeyLoad                  = xmlSecSkeletonAppKeyLoad; 
158     gXmlSecSkeletonFunctions->cryptoAppKeyLoadMemory            = xmlSecSkeletonAppKeyLoadMemory; 
159     gXmlSecSkeletonFunctions->cryptoAppDefaultPwdCallback       = (void*)xmlSecSkeletonAppGetDefaultPwdCallback();
160
161     return(gXmlSecSkeletonFunctions);
162 }
163
164
165 /**
166  * xmlSecSkeletonInit:
167  * 
168  * XMLSec library specific crypto engine initialization. 
169  *
170  * Returns: 0 on success or a negative value otherwise.
171  */
172 int 
173 xmlSecSkeletonInit (void)  {
174     /* Check loaded xmlsec library version */
175     if(xmlSecCheckVersionExact() != 1) {
176         xmlSecError(XMLSEC_ERRORS_HERE,
177                     NULL,
178                     "xmlSecCheckVersionExact",
179                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
180                     XMLSEC_ERRORS_NO_MESSAGE);
181         return(-1);
182     }
183
184     /* register our klasses */
185     if(xmlSecCryptoDLFunctionsRegisterKeyDataAndTransforms(xmlSecCryptoGetFunctions_skeleton()) < 0) {
186         xmlSecError(XMLSEC_ERRORS_HERE,
187                     NULL,
188                     "xmlSecCryptoDLFunctionsRegisterKeyDataAndTransforms",
189                     XMLSEC_ERRORS_R_XMLSEC_FAILED,
190                     XMLSEC_ERRORS_NO_MESSAGE);
191         return(-1);
192     }
193     return(0);
194
195     /* TODO: if necessary do, additional initialization here */
196 }
197
198 /**
199  * xmlSecSkeletonShutdown:
200  * 
201  * XMLSec library specific crypto engine shutdown. 
202  *
203  * Returns: 0 on success or a negative value otherwise.
204  */
205 int 
206 xmlSecSkeletonShutdown(void) {
207     /* TODO: if necessary, do additional shutdown here */
208     return(0);
209 }
210
211 /**
212  * xmlSecSkeletonKeysMngrInit:
213  * @mngr:               the pointer to keys manager.
214  *
215  * Adds Skeleton specific key data stores in keys manager.
216  *
217  * Returns: 0 on success or a negative value otherwise.
218  */
219 int
220 xmlSecSkeletonKeysMngrInit(xmlSecKeysMngrPtr mngr) {
221     xmlSecAssert2(mngr != NULL, -1);
222
223     /* TODO: add key data stores */
224     return(0);
225 }
226
227