1 /* 2 * XML Security Library (http://www.aleksey.com/xmlsec). 3 * 4 * This is free software; see Copyright file in the source 5 * distribution for preciese wording. 6 * 7 * Copyright (C) 2002-2016 Aleksey Sanin <aleksey@aleksey.com>. All Rights Reserved. 8 */ 9 #ifndef __XMLSEC_GCRYPT_CRYPTO_H__ 10 #define __XMLSEC_GCRYPT_CRYPTO_H__ 11 12 #include <xmlsec/xmlsec.h> 13 #include <xmlsec/keys.h> 14 #include <xmlsec/transforms.h> 15 #include <xmlsec/dl.h> 16 17 #include <gcrypt.h> 18 19 #ifdef __cplusplus 20 extern "C" { 21 #endif /* __cplusplus */ 22 23 XMLSEC_CRYPTO_EXPORT xmlSecCryptoDLFunctionsPtr xmlSecCryptoGetFunctions_gcrypt(void); 24 25 /******************************************************************** 26 * 27 * Init shutdown 28 * 29 ********************************************************************/ 30 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptInit (void); 31 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptShutdown (void); 32 33 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeysMngrInit (xmlSecKeysMngrPtr mngr); 34 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptGenerateRandom (xmlSecBufferPtr buffer, 35 xmlSecSize size); 36 37 38 /******************************************************************** 39 * 40 * AES transforms 41 * 42 *******************************************************************/ 43 #ifndef XMLSEC_NO_AES 44 /** 45 * xmlSecGCryptKeyDataAesId: 46 * 47 * The AES key data klass. 48 */ 49 #define xmlSecGCryptKeyDataAesId \ 50 xmlSecGCryptKeyDataAesGetKlass() 51 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecGCryptKeyDataAesGetKlass (void); 52 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeyDataAesSet (xmlSecKeyDataPtr data, 53 const xmlSecByte* buf, 54 xmlSecSize bufSize); 55 /** 56 * xmlSecGCryptTransformAes128CbcId: 57 * 58 * The AES128 CBC cipher transform klass. 59 */ 60 #define xmlSecGCryptTransformAes128CbcId \ 61 xmlSecGCryptTransformAes128CbcGetKlass() 62 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformAes128CbcGetKlass(void); 63 64 /** 65 * xmlSecGCryptTransformAes192CbcId: 66 * 67 * The AES192 CBC cipher transform klass. 68 */ 69 #define xmlSecGCryptTransformAes192CbcId \ 70 xmlSecGCryptTransformAes192CbcGetKlass() 71 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformAes192CbcGetKlass(void); 72 73 /** 74 * xmlSecGCryptTransformAes256CbcId: 75 * 76 * The AES256 CBC cipher transform klass. 77 */ 78 #define xmlSecGCryptTransformAes256CbcId \ 79 xmlSecGCryptTransformAes256CbcGetKlass() 80 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformAes256CbcGetKlass(void); 81 82 /** 83 * xmlSecGCryptTransformKWAes128Id: 84 * 85 * The AES 128 key wrap transform klass. 86 */ 87 #define xmlSecGCryptTransformKWAes128Id \ 88 xmlSecGCryptTransformKWAes128GetKlass() 89 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformKWAes128GetKlass(void); 90 91 /** 92 * xmlSecGCryptTransformKWAes192Id: 93 * 94 * The AES 192 key wrap transform klass. 95 */ 96 #define xmlSecGCryptTransformKWAes192Id \ 97 xmlSecGCryptTransformKWAes192GetKlass() 98 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformKWAes192GetKlass(void); 99 100 /** 101 * xmlSecGCryptTransformKWAes256Id: 102 * 103 * The AES 256 key wrap transform klass. 104 */ 105 #define xmlSecGCryptTransformKWAes256Id \ 106 xmlSecGCryptTransformKWAes256GetKlass() 107 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformKWAes256GetKlass(void); 108 109 110 #endif /* XMLSEC_NO_AES */ 111 112 /******************************************************************** 113 * 114 * DES transforms 115 * 116 *******************************************************************/ 117 #ifndef XMLSEC_NO_DES 118 /** 119 * xmlSecGCryptKeyDataDesId: 120 * 121 * The DES key data klass. 122 */ 123 #define xmlSecGCryptKeyDataDesId \ 124 xmlSecGCryptKeyDataDesGetKlass() 125 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecGCryptKeyDataDesGetKlass (void); 126 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeyDataDesSet (xmlSecKeyDataPtr data, 127 const xmlSecByte* buf, 128 xmlSecSize bufSize); 129 130 /** 131 * xmlSecGCryptTransformDes3CbcId: 132 * 133 * The DES3 CBC cipher transform klass. 134 */ 135 #define xmlSecGCryptTransformDes3CbcId \ 136 xmlSecGCryptTransformDes3CbcGetKlass() 137 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformDes3CbcGetKlass(void); 138 139 /** 140 * xmlSecGCryptTransformKWDes3Id: 141 * 142 * The DES3 KW transform klass. 143 */ 144 #define xmlSecGCryptTransformKWDes3Id \ 145 xmlSecGCryptTransformKWDes3GetKlass() 146 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformKWDes3GetKlass(void); 147 148 #endif /* XMLSEC_NO_DES */ 149 150 /******************************************************************** 151 * 152 * DSA transform 153 * 154 *******************************************************************/ 155 #ifndef XMLSEC_NO_DSA 156 157 /** 158 * xmlSecGCryptKeyDataDsaId: 159 * 160 * The DSA key klass. 161 */ 162 #define xmlSecGCryptKeyDataDsaId \ 163 xmlSecGCryptKeyDataDsaGetKlass() 164 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecGCryptKeyDataDsaGetKlass (void); 165 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeyDataDsaAdoptKey (xmlSecKeyDataPtr data, 166 gcry_sexp_t dsa_key); 167 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeyDataDsaAdoptKeyPair (xmlSecKeyDataPtr data, 168 gcry_sexp_t pub_key, 169 gcry_sexp_t priv_key); 170 XMLSEC_CRYPTO_EXPORT gcry_sexp_t xmlSecGCryptKeyDataDsaGetPublicKey (xmlSecKeyDataPtr data); 171 XMLSEC_CRYPTO_EXPORT gcry_sexp_t xmlSecGCryptKeyDataDsaGetPrivateKey (xmlSecKeyDataPtr data); 172 173 #ifndef XMLSEC_NO_SHA1 174 /** 175 * xmlSecGCryptTransformDsaSha1Id: 176 * 177 * The DSA SHA1 signature transform klass. 178 */ 179 #define xmlSecGCryptTransformDsaSha1Id \ 180 xmlSecGCryptTransformDsaSha1GetKlass() 181 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformDsaSha1GetKlass(void); 182 #endif /* XMLSEC_NO_SHA1 */ 183 184 #endif /* XMLSEC_NO_DSA */ 185 186 187 188 /******************************************************************** 189 * 190 * HMAC transforms 191 * 192 *******************************************************************/ 193 #ifndef XMLSEC_NO_HMAC 194 195 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptHmacGetMinOutputLength(void); 196 XMLSEC_CRYPTO_EXPORT void xmlSecGCryptHmacSetMinOutputLength(int min_length); 197 198 /** 199 * xmlSecGCryptKeyDataHmacId: 200 * 201 * The HMAC key klass. 202 */ 203 #define xmlSecGCryptKeyDataHmacId \ 204 xmlSecGCryptKeyDataHmacGetKlass() 205 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecGCryptKeyDataHmacGetKlass (void); 206 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeyDataHmacSet (xmlSecKeyDataPtr data, 207 const xmlSecByte* buf, 208 xmlSecSize bufSize); 209 210 #ifndef XMLSEC_NO_MD5 211 /** 212 * xmlSecGCryptTransformHmacMd5Id: 213 * 214 * The HMAC with MD5 signature transform klass. 215 */ 216 #define xmlSecGCryptTransformHmacMd5Id \ 217 xmlSecGCryptTransformHmacMd5GetKlass() 218 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformHmacMd5GetKlass(void); 219 220 #endif /* XMLSEC_NO_MD5 */ 221 222 #ifndef XMLSEC_NO_RIPEMD160 223 /** 224 * xmlSecGCryptTransformHmacRipemd160Id: 225 * 226 * The HMAC with RipeMD160 signature transform klass. 227 */ 228 #define xmlSecGCryptTransformHmacRipemd160Id \ 229 xmlSecGCryptTransformHmacRipemd160GetKlass() 230 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformHmacRipemd160GetKlass(void); 231 #endif /* XMLSEC_NO_RIPEMD160 */ 232 233 #ifndef XMLSEC_NO_SHA1 234 /** 235 * xmlSecGCryptTransformHmacSha1Id: 236 * 237 * The HMAC with SHA1 signature transform klass. 238 */ 239 #define xmlSecGCryptTransformHmacSha1Id \ 240 xmlSecGCryptTransformHmacSha1GetKlass() 241 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformHmacSha1GetKlass(void); 242 #endif /* XMLSEC_NO_SHA1 */ 243 244 #ifndef XMLSEC_NO_SHA256 245 /** 246 * xmlSecGCryptTransformHmacSha256Id: 247 * 248 * The HMAC with SHA256 signature transform klass. 249 */ 250 #define xmlSecGCryptTransformHmacSha256Id \ 251 xmlSecGCryptTransformHmacSha256GetKlass() 252 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformHmacSha256GetKlass(void); 253 #endif /* XMLSEC_NO_SHA256 */ 254 255 #ifndef XMLSEC_NO_SHA384 256 /** 257 * xmlSecGCryptTransformHmacSha384Id: 258 * 259 * The HMAC with SHA384 signature transform klass. 260 */ 261 #define xmlSecGCryptTransformHmacSha384Id \ 262 xmlSecGCryptTransformHmacSha384GetKlass() 263 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformHmacSha384GetKlass(void); 264 #endif /* XMLSEC_NO_SHA384 */ 265 266 #ifndef XMLSEC_NO_SHA512 267 /** 268 * xmlSecGCryptTransformHmacSha512Id: 269 * 270 * The HMAC with SHA512 signature transform klass. 271 */ 272 #define xmlSecGCryptTransformHmacSha512Id \ 273 xmlSecGCryptTransformHmacSha512GetKlass() 274 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformHmacSha512GetKlass(void); 275 #endif /* XMLSEC_NO_SHA512 */ 276 277 #endif /* XMLSEC_NO_HMAC */ 278 279 /******************************************************************** 280 * 281 * RSA transforms 282 * 283 *******************************************************************/ 284 #ifndef XMLSEC_NO_RSA 285 286 /** 287 * xmlSecGCryptKeyDataRsaId: 288 * 289 * The RSA key klass. 290 */ 291 #define xmlSecGCryptKeyDataRsaId \ 292 xmlSecGCryptKeyDataRsaGetKlass() 293 XMLSEC_CRYPTO_EXPORT xmlSecKeyDataId xmlSecGCryptKeyDataRsaGetKlass (void); 294 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeyDataRsaAdoptKey (xmlSecKeyDataPtr data, 295 gcry_sexp_t rsa_key); 296 XMLSEC_CRYPTO_EXPORT int xmlSecGCryptKeyDataRsaAdoptKeyPair (xmlSecKeyDataPtr data, 297 gcry_sexp_t pub_key, 298 gcry_sexp_t priv_key); 299 XMLSEC_CRYPTO_EXPORT gcry_sexp_t xmlSecGCryptKeyDataRsaGetPublicKey (xmlSecKeyDataPtr data); 300 XMLSEC_CRYPTO_EXPORT gcry_sexp_t xmlSecGCryptKeyDataRsaGetPrivateKey (xmlSecKeyDataPtr data); 301 302 #ifndef XMLSEC_NO_MD5 303 /** 304 * xmlSecGCryptTransformRsaMd5Id: 305 * 306 * The RSA-MD5 signature transform klass. 307 */ 308 #define xmlSecGCryptTransformRsaMd5Id \ 309 xmlSecGCryptTransformRsaMd5GetKlass() 310 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformRsaMd5GetKlass(void); 311 #endif /* XMLSEC_NO_MD5 */ 312 313 #ifndef XMLSEC_NO_RIPEMD160 314 /** 315 * xmlSecGCryptTransformRsaRipemd160Id: 316 * 317 * The RSA-RIPEMD160 signature transform klass. 318 */ 319 #define xmlSecGCryptTransformRsaRipemd160Id \ 320 xmlSecGCryptTransformRsaRipemd160GetKlass() 321 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformRsaRipemd160GetKlass(void); 322 #endif /* XMLSEC_NO_RIPEMD160 */ 323 324 #ifndef XMLSEC_NO_SHA1 325 /** 326 * xmlSecGCryptTransformRsaSha1Id: 327 * 328 * The RSA-SHA1 signature transform klass. 329 */ 330 #define xmlSecGCryptTransformRsaSha1Id \ 331 xmlSecGCryptTransformRsaSha1GetKlass() 332 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformRsaSha1GetKlass(void); 333 #endif /* XMLSEC_NO_SHA1 */ 334 335 #ifndef XMLSEC_NO_SHA256 336 /** 337 * xmlSecGCryptTransformRsaSha256Id: 338 * 339 * The RSA-SHA256 signature transform klass. 340 */ 341 #define xmlSecGCryptTransformRsaSha256Id \ 342 xmlSecGCryptTransformRsaSha256GetKlass() 343 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformRsaSha256GetKlass(void); 344 #endif /* XMLSEC_NO_SHA256 */ 345 346 #ifndef XMLSEC_NO_SHA384 347 /** 348 * xmlSecGCryptTransformRsaSha384Id: 349 * 350 * The RSA-SHA384 signature transform klass. 351 */ 352 #define xmlSecGCryptTransformRsaSha384Id \ 353 xmlSecGCryptTransformRsaSha384GetKlass() 354 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformRsaSha384GetKlass(void); 355 #endif /* XMLSEC_NO_SHA384 */ 356 357 #ifndef XMLSEC_NO_SHA512 358 /** 359 * xmlSecGCryptTransformRsaSha512Id: 360 * 361 * The RSA-SHA512 signature transform klass. 362 */ 363 #define xmlSecGCryptTransformRsaSha512Id \ 364 xmlSecGCryptTransformRsaSha512GetKlass() 365 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformRsaSha512GetKlass(void); 366 #endif /* XMLSEC_NO_SHA512 */ 367 368 #endif /* XMLSEC_NO_RSA */ 369 370 371 /******************************************************************** 372 * 373 * SHA transforms 374 * 375 *******************************************************************/ 376 #ifndef XMLSEC_NO_SHA1 377 /** 378 * xmlSecGCryptTransformSha1Id: 379 * 380 * The HMAC with SHA1 signature transform klass. 381 */ 382 #define xmlSecGCryptTransformSha1Id \ 383 xmlSecGCryptTransformSha1GetKlass() 384 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformSha1GetKlass(void); 385 #endif /* XMLSEC_NO_SHA1 */ 386 387 #ifndef XMLSEC_NO_SHA256 388 /** 389 * xmlSecGCryptTransformSha256Id: 390 * 391 * The HMAC with SHA256 signature transform klass. 392 */ 393 #define xmlSecGCryptTransformSha256Id \ 394 xmlSecGCryptTransformSha256GetKlass() 395 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformSha256GetKlass(void); 396 #endif /* XMLSEC_NO_SHA256 */ 397 398 #ifndef XMLSEC_NO_SHA384 399 /** 400 * xmlSecGCryptTransformSha384Id: 401 * 402 * The HMAC with SHA384 signature transform klass. 403 */ 404 #define xmlSecGCryptTransformSha384Id \ 405 xmlSecGCryptTransformSha384GetKlass() 406 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformSha384GetKlass(void); 407 #endif /* XMLSEC_NO_SHA384 */ 408 409 #ifndef XMLSEC_NO_SHA512 410 /** 411 * xmlSecGCryptTransformSha512Id: 412 * 413 * The HMAC with SHA512 signature transform klass. 414 */ 415 #define xmlSecGCryptTransformSha512Id \ 416 xmlSecGCryptTransformSha512GetKlass() 417 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformSha512GetKlass(void); 418 #endif /* XMLSEC_NO_SHA512 */ 419 420 /******************************************************************** 421 * 422 * Md5 transforms 423 * 424 *******************************************************************/ 425 #ifndef XMLSEC_NO_MD5 426 /** 427 * xmlSecGCryptTransformMd5Id: 428 * 429 * The MD5 digest transform klass. 430 */ 431 #define xmlSecGCryptTransformMd5Id \ 432 xmlSecGCryptTransformMd5GetKlass() 433 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformMd5GetKlass(void); 434 #endif /* XMLSEC_NO_MD5 */ 435 436 437 /******************************************************************** 438 * 439 * RipeMD160 transforms 440 * 441 *******************************************************************/ 442 #ifndef XMLSEC_NO_RIPEMD160 443 /** 444 * xmlSecGCryptTransformRipemd160Id: 445 * 446 * The RIPEMD160 digest transform klass. 447 */ 448 #define xmlSecGCryptTransformRipemd160Id \ 449 xmlSecGCryptTransformRipemd160GetKlass() 450 XMLSEC_CRYPTO_EXPORT xmlSecTransformId xmlSecGCryptTransformRipemd160GetKlass(void); 451 #endif /* XMLSEC_NO_RIPEMD160 */ 452 453 454 #ifdef __cplusplus 455 } 456 #endif /* __cplusplus */ 457 458 #endif /* __XMLSEC_GCRYPT_CRYPTO_H__ */ 459 460 #define __XMLSEC_GCRYPT_CRYPTO_H__ 461