1 /* 2 * Scatterlist Cryptographic API. 3 * 4 * Copyright (c) 2002 James Morris <[email protected]> 5 * Copyright (c) 2002 David S. Miller ([email protected]) 6 * Copyright (c) 2005 Herbert Xu <[email protected]> 7 * 8 * Portions derived from Cryptoapi, by Alexander Kjeldaas <[email protected]> 9 * and Nettle, by Niels Möller. 10 * 11 * This program is free software; you can redistribute it and/or modify it 12 * under the terms of the GNU General Public License as published by the Free 13 * Software Foundation; either version 2 of the License, or (at your option) 14 * any later version. 15 * 16 */ 17 #ifndef _LINUX_CRYPTO_H 18 #define _LINUX_CRYPTO_H 19 20 #include <linux/atomic.h> 21 #include <linux/module.h> 22 #include <linux/kernel.h> 23 #include <linux/list.h> 24 #include <linux/slab.h> 25 #include <linux/string.h> 26 #include <linux/uaccess.h> 27 28 /* 29 * Algorithm masks and types. 30 */ 31 #define CRYPTO_ALG_TYPE_MASK 0x0000000f 32 #define CRYPTO_ALG_TYPE_CIPHER 0x00000001 33 #define CRYPTO_ALG_TYPE_COMPRESS 0x00000002 34 #define CRYPTO_ALG_TYPE_AEAD 0x00000003 35 #define CRYPTO_ALG_TYPE_BLKCIPHER 0x00000004 36 #define CRYPTO_ALG_TYPE_ABLKCIPHER 0x00000005 37 #define CRYPTO_ALG_TYPE_GIVCIPHER 0x00000006 38 #define CRYPTO_ALG_TYPE_DIGEST 0x00000008 39 #define CRYPTO_ALG_TYPE_HASH 0x00000008 40 #define CRYPTO_ALG_TYPE_SHASH 0x00000009 41 #define CRYPTO_ALG_TYPE_AHASH 0x0000000a 42 #define CRYPTO_ALG_TYPE_RNG 0x0000000c 43 #define CRYPTO_ALG_TYPE_PCOMPRESS 0x0000000f 44 45 #define CRYPTO_ALG_TYPE_HASH_MASK 0x0000000e 46 #define CRYPTO_ALG_TYPE_AHASH_MASK 0x0000000c 47 #define CRYPTO_ALG_TYPE_BLKCIPHER_MASK 0x0000000c 48 49 #define CRYPTO_ALG_LARVAL 0x00000010 50 #define CRYPTO_ALG_DEAD 0x00000020 51 #define CRYPTO_ALG_DYING 0x00000040 52 #define CRYPTO_ALG_ASYNC 0x00000080 53 54 /* 55 * Set this bit if and only if the algorithm requires another algorithm of 56 * the same type to handle corner cases. 57 */ 58 #define CRYPTO_ALG_NEED_FALLBACK 0x00000100 59 60 /* 61 * This bit is set for symmetric key ciphers that have already been wrapped 62 * with a generic IV generator to prevent them from being wrapped again. 63 */ 64 #define CRYPTO_ALG_GENIV 0x00000200 65 66 /* 67 * Set if the algorithm has passed automated run-time testing. Note that 68 * if there is no run-time testing for a given algorithm it is considered 69 * to have passed. 70 */ 71 72 #define CRYPTO_ALG_TESTED 0x00000400 73 74 /* 75 * Set if the algorithm is an instance that is build from templates. 76 */ 77 #define CRYPTO_ALG_INSTANCE 0x00000800 78 79 /* 80 * Transform masks and values (for crt_flags). 81 */ 82 #define CRYPTO_TFM_REQ_MASK 0x000fff00 83 #define CRYPTO_TFM_RES_MASK 0xfff00000 84 85 #define CRYPTO_TFM_REQ_WEAK_KEY 0x00000100 86 #define CRYPTO_TFM_REQ_MAY_SLEEP 0x00000200 87 #define CRYPTO_TFM_REQ_MAY_BACKLOG 0x00000400 88 #define CRYPTO_TFM_RES_WEAK_KEY 0x00100000 89 #define CRYPTO_TFM_RES_BAD_KEY_LEN 0x00200000 90 #define CRYPTO_TFM_RES_BAD_KEY_SCHED 0x00400000 91 #define CRYPTO_TFM_RES_BAD_BLOCK_LEN 0x00800000 92 #define CRYPTO_TFM_RES_BAD_FLAGS 0x01000000 93 94 /* 95 * Miscellaneous stuff. 96 */ 97 #define CRYPTO_MAX_ALG_NAME 64 98 99 /* 100 * The macro CRYPTO_MINALIGN_ATTR (along with the void * type in the actual 101 * declaration) is used to ensure that the crypto_tfm context structure is 102 * aligned correctly for the given architecture so that there are no alignment 103 * faults for C data types. In particular, this is required on platforms such 104 * as arm where pointers are 32-bit aligned but there are data types such as 105 * u64 which require 64-bit alignment. 106 */ 107 #define CRYPTO_MINALIGN ARCH_KMALLOC_MINALIGN 108 109 #define CRYPTO_MINALIGN_ATTR __attribute__ ((__aligned__(CRYPTO_MINALIGN))) 110 111 struct scatterlist; 112 struct crypto_ablkcipher; 113 struct crypto_async_request; 114 struct crypto_aead; 115 struct crypto_blkcipher; 116 struct crypto_hash; 117 struct crypto_rng; 118 struct crypto_tfm; 119 struct crypto_type; 120 struct aead_givcrypt_request; 121 struct skcipher_givcrypt_request; 122 123 typedef void (*crypto_completion_t)(struct crypto_async_request *req, int err); 124 125 struct crypto_async_request { 126 struct list_head list; 127 crypto_completion_t complete; 128 void *data; 129 struct crypto_tfm *tfm; 130 131 u32 flags; 132 }; 133 134 struct ablkcipher_request { 135 struct crypto_async_request base; 136 137 unsigned int nbytes; 138 139 void *info; 140 141 struct scatterlist *src; 142 struct scatterlist *dst; 143 144 void *__ctx[] CRYPTO_MINALIGN_ATTR; 145 }; 146 147 /** 148 * struct aead_request - AEAD request 149 * @base: Common attributes for async crypto requests 150 * @assoclen: Length in bytes of associated data for authentication 151 * @cryptlen: Length of data to be encrypted or decrypted 152 * @iv: Initialisation vector 153 * @assoc: Associated data 154 * @src: Source data 155 * @dst: Destination data 156 * @__ctx: Start of private context data 157 */ 158 struct aead_request { 159 struct crypto_async_request base; 160 161 unsigned int assoclen; 162 unsigned int cryptlen; 163 164 u8 *iv; 165 166 struct scatterlist *assoc; 167 struct scatterlist *src; 168 struct scatterlist *dst; 169 170 void *__ctx[] CRYPTO_MINALIGN_ATTR; 171 }; 172 173 struct blkcipher_desc { 174 struct crypto_blkcipher *tfm; 175 void *info; 176 u32 flags; 177 }; 178 179 struct cipher_desc { 180 struct crypto_tfm *tfm; 181 void (*crfn)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); 182 unsigned int (*prfn)(const struct cipher_desc *desc, u8 *dst, 183 const u8 *src, unsigned int nbytes); 184 void *info; 185 }; 186 187 struct hash_desc { 188 struct crypto_hash *tfm; 189 u32 flags; 190 }; 191 192 /* 193 * Algorithms: modular crypto algorithm implementations, managed 194 * via crypto_register_alg() and crypto_unregister_alg(). 195 */ 196 struct ablkcipher_alg { 197 int (*setkey)(struct crypto_ablkcipher *tfm, const u8 *key, 198 unsigned int keylen); 199 int (*encrypt)(struct ablkcipher_request *req); 200 int (*decrypt)(struct ablkcipher_request *req); 201 int (*givencrypt)(struct skcipher_givcrypt_request *req); 202 int (*givdecrypt)(struct skcipher_givcrypt_request *req); 203 204 const char *geniv; 205 206 unsigned int min_keysize; 207 unsigned int max_keysize; 208 unsigned int ivsize; 209 }; 210 211 struct aead_alg { 212 int (*setkey)(struct crypto_aead *tfm, const u8 *key, 213 unsigned int keylen); 214 int (*setauthsize)(struct crypto_aead *tfm, unsigned int authsize); 215 int (*encrypt)(struct aead_request *req); 216 int (*decrypt)(struct aead_request *req); 217 int (*givencrypt)(struct aead_givcrypt_request *req); 218 int (*givdecrypt)(struct aead_givcrypt_request *req); 219 220 const char *geniv; 221 222 unsigned int ivsize; 223 unsigned int maxauthsize; 224 }; 225 226 struct blkcipher_alg { 227 int (*setkey)(struct crypto_tfm *tfm, const u8 *key, 228 unsigned int keylen); 229 int (*encrypt)(struct blkcipher_desc *desc, 230 struct scatterlist *dst, struct scatterlist *src, 231 unsigned int nbytes); 232 int (*decrypt)(struct blkcipher_desc *desc, 233 struct scatterlist *dst, struct scatterlist *src, 234 unsigned int nbytes); 235 236 const char *geniv; 237 238 unsigned int min_keysize; 239 unsigned int max_keysize; 240 unsigned int ivsize; 241 }; 242 243 struct cipher_alg { 244 unsigned int cia_min_keysize; 245 unsigned int cia_max_keysize; 246 int (*cia_setkey)(struct crypto_tfm *tfm, const u8 *key, 247 unsigned int keylen); 248 void (*cia_encrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); 249 void (*cia_decrypt)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); 250 }; 251 252 struct compress_alg { 253 int (*coa_compress)(struct crypto_tfm *tfm, const u8 *src, 254 unsigned int slen, u8 *dst, unsigned int *dlen); 255 int (*coa_decompress)(struct crypto_tfm *tfm, const u8 *src, 256 unsigned int slen, u8 *dst, unsigned int *dlen); 257 }; 258 259 struct rng_alg { 260 int (*rng_make_random)(struct crypto_rng *tfm, u8 *rdata, 261 unsigned int dlen); 262 int (*rng_reset)(struct crypto_rng *tfm, u8 *seed, unsigned int slen); 263 264 unsigned int seedsize; 265 }; 266 267 268 #define cra_ablkcipher cra_u.ablkcipher 269 #define cra_aead cra_u.aead 270 #define cra_blkcipher cra_u.blkcipher 271 #define cra_cipher cra_u.cipher 272 #define cra_compress cra_u.compress 273 #define cra_rng cra_u.rng 274 275 struct crypto_alg { 276 struct list_head cra_list; 277 struct list_head cra_users; 278 279 u32 cra_flags; 280 unsigned int cra_blocksize; 281 unsigned int cra_ctxsize; 282 unsigned int cra_alignmask; 283 284 int cra_priority; 285 atomic_t cra_refcnt; 286 287 char cra_name[CRYPTO_MAX_ALG_NAME]; 288 char cra_driver_name[CRYPTO_MAX_ALG_NAME]; 289 290 const struct crypto_type *cra_type; 291 292 union { 293 struct ablkcipher_alg ablkcipher; 294 struct aead_alg aead; 295 struct blkcipher_alg blkcipher; 296 struct cipher_alg cipher; 297 struct compress_alg compress; 298 struct rng_alg rng; 299 } cra_u; 300 301 int (*cra_init)(struct crypto_tfm *tfm); 302 void (*cra_exit)(struct crypto_tfm *tfm); 303 void (*cra_destroy)(struct crypto_alg *alg); 304 305 struct module *cra_module; 306 }; 307 308 /* 309 * Algorithm registration interface. 310 */ 311 int crypto_register_alg(struct crypto_alg *alg); 312 int crypto_unregister_alg(struct crypto_alg *alg); 313 314 /* 315 * Algorithm query interface. 316 */ 317 int crypto_has_alg(const char *name, u32 type, u32 mask); 318 319 /* 320 * Transforms: user-instantiated objects which encapsulate algorithms 321 * and core processing logic. Managed via crypto_alloc_*() and 322 * crypto_free_*(), as well as the various helpers below. 323 */ 324 325 struct ablkcipher_tfm { 326 int (*setkey)(struct crypto_ablkcipher *tfm, const u8 *key, 327 unsigned int keylen); 328 int (*encrypt)(struct ablkcipher_request *req); 329 int (*decrypt)(struct ablkcipher_request *req); 330 int (*givencrypt)(struct skcipher_givcrypt_request *req); 331 int (*givdecrypt)(struct skcipher_givcrypt_request *req); 332 333 struct crypto_ablkcipher *base; 334 335 unsigned int ivsize; 336 unsigned int reqsize; 337 }; 338 339 struct aead_tfm { 340 int (*setkey)(struct crypto_aead *tfm, const u8 *key, 341 unsigned int keylen); 342 int (*encrypt)(struct aead_request *req); 343 int (*decrypt)(struct aead_request *req); 344 int (*givencrypt)(struct aead_givcrypt_request *req); 345 int (*givdecrypt)(struct aead_givcrypt_request *req); 346 347 struct crypto_aead *base; 348 349 unsigned int ivsize; 350 unsigned int authsize; 351 unsigned int reqsize; 352 }; 353 354 struct blkcipher_tfm { 355 void *iv; 356 int (*setkey)(struct crypto_tfm *tfm, const u8 *key, 357 unsigned int keylen); 358 int (*encrypt)(struct blkcipher_desc *desc, struct scatterlist *dst, 359 struct scatterlist *src, unsigned int nbytes); 360 int (*decrypt)(struct blkcipher_desc *desc, struct scatterlist *dst, 361 struct scatterlist *src, unsigned int nbytes); 362 }; 363 364 struct cipher_tfm { 365 int (*cit_setkey)(struct crypto_tfm *tfm, 366 const u8 *key, unsigned int keylen); 367 void (*cit_encrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); 368 void (*cit_decrypt_one)(struct crypto_tfm *tfm, u8 *dst, const u8 *src); 369 }; 370 371 struct hash_tfm { 372 int (*init)(struct hash_desc *desc); 373 int (*update)(struct hash_desc *desc, 374 struct scatterlist *sg, unsigned int nsg); 375 int (*final)(struct hash_desc *desc, u8 *out); 376 int (*digest)(struct hash_desc *desc, struct scatterlist *sg, 377 unsigned int nsg, u8 *out); 378 int (*setkey)(struct crypto_hash *tfm, const u8 *key, 379 unsigned int keylen); 380 unsigned int digestsize; 381 }; 382 383 struct compress_tfm { 384 int (*cot_compress)(struct crypto_tfm *tfm, 385 const u8 *src, unsigned int slen, 386 u8 *dst, unsigned int *dlen); 387 int (*cot_decompress)(struct crypto_tfm *tfm, 388 const u8 *src, unsigned int slen, 389 u8 *dst, unsigned int *dlen); 390 }; 391 392 struct rng_tfm { 393 int (*rng_gen_random)(struct crypto_rng *tfm, u8 *rdata, 394 unsigned int dlen); 395 int (*rng_reset)(struct crypto_rng *tfm, u8 *seed, unsigned int slen); 396 }; 397 398 #define crt_ablkcipher crt_u.ablkcipher 399 #define crt_aead crt_u.aead 400 #define crt_blkcipher crt_u.blkcipher 401 #define crt_cipher crt_u.cipher 402 #define crt_hash crt_u.hash 403 #define crt_compress crt_u.compress 404 #define crt_rng crt_u.rng 405 406 struct crypto_tfm { 407 408 u32 crt_flags; 409 410 union { 411 struct ablkcipher_tfm ablkcipher; 412 struct aead_tfm aead; 413 struct blkcipher_tfm blkcipher; 414 struct cipher_tfm cipher; 415 struct hash_tfm hash; 416 struct compress_tfm compress; 417 struct rng_tfm rng; 418 } crt_u; 419 420 void (*exit)(struct crypto_tfm *tfm); 421 422 struct crypto_alg *__crt_alg; 423 424 void *__crt_ctx[] CRYPTO_MINALIGN_ATTR; 425 }; 426 427 struct crypto_ablkcipher { 428 struct crypto_tfm base; 429 }; 430 431 struct crypto_aead { 432 struct crypto_tfm base; 433 }; 434 435 struct crypto_blkcipher { 436 struct crypto_tfm base; 437 }; 438 439 struct crypto_cipher { 440 struct crypto_tfm base; 441 }; 442 443 struct crypto_comp { 444 struct crypto_tfm base; 445 }; 446 447 struct crypto_hash { 448 struct crypto_tfm base; 449 }; 450 451 struct crypto_rng { 452 struct crypto_tfm base; 453 }; 454 455 enum { 456 CRYPTOA_UNSPEC, 457 CRYPTOA_ALG, 458 CRYPTOA_TYPE, 459 CRYPTOA_U32, 460 __CRYPTOA_MAX, 461 }; 462 463 #define CRYPTOA_MAX (__CRYPTOA_MAX - 1) 464 465 /* Maximum number of (rtattr) parameters for each template. */ 466 #define CRYPTO_MAX_ATTRS 32 467 468 struct crypto_attr_alg { 469 char name[CRYPTO_MAX_ALG_NAME]; 470 }; 471 472 struct crypto_attr_type { 473 u32 type; 474 u32 mask; 475 }; 476 477 struct crypto_attr_u32 { 478 u32 num; 479 }; 480 481 /* 482 * Transform user interface. 483 */ 484 485 struct crypto_tfm *crypto_alloc_base(const char *alg_name, u32 type, u32 mask); 486 void crypto_destroy_tfm(void *mem, struct crypto_tfm *tfm); 487 488 static inline void crypto_free_tfm(struct crypto_tfm *tfm) 489 { 490 return crypto_destroy_tfm(tfm, tfm); 491 } 492 493 int alg_test(const char *driver, const char *alg, u32 type, u32 mask); 494 495 /* 496 * Transform helpers which query the underlying algorithm. 497 */ 498 static inline const char *crypto_tfm_alg_name(struct crypto_tfm *tfm) 499 { 500 return tfm->__crt_alg->cra_name; 501 } 502 503 static inline const char *crypto_tfm_alg_driver_name(struct crypto_tfm *tfm) 504 { 505 return tfm->__crt_alg->cra_driver_name; 506 } 507 508 static inline int crypto_tfm_alg_priority(struct crypto_tfm *tfm) 509 { 510 return tfm->__crt_alg->cra_priority; 511 } 512 513 static inline const char *crypto_tfm_alg_modname(struct crypto_tfm *tfm) 514 { 515 return module_name(tfm->__crt_alg->cra_module); 516 } 517 518 static inline u32 crypto_tfm_alg_type(struct crypto_tfm *tfm) 519 { 520 return tfm->__crt_alg->cra_flags & CRYPTO_ALG_TYPE_MASK; 521 } 522 523 static inline unsigned int crypto_tfm_alg_blocksize(struct crypto_tfm *tfm) 524 { 525 return tfm->__crt_alg->cra_blocksize; 526 } 527 528 static inline unsigned int crypto_tfm_alg_alignmask(struct crypto_tfm *tfm) 529 { 530 return tfm->__crt_alg->cra_alignmask; 531 } 532 533 static inline u32 crypto_tfm_get_flags(struct crypto_tfm *tfm) 534 { 535 return tfm->crt_flags; 536 } 537 538 static inline void crypto_tfm_set_flags(struct crypto_tfm *tfm, u32 flags) 539 { 540 tfm->crt_flags |= flags; 541 } 542 543 static inline void crypto_tfm_clear_flags(struct crypto_tfm *tfm, u32 flags) 544 { 545 tfm->crt_flags &= ~flags; 546 } 547 548 static inline void *crypto_tfm_ctx(struct crypto_tfm *tfm) 549 { 550 return tfm->__crt_ctx; 551 } 552 553 static inline unsigned int crypto_tfm_ctx_alignment(void) 554 { 555 struct crypto_tfm *tfm; 556 return __alignof__(tfm->__crt_ctx); 557 } 558 559 /* 560 * API wrappers. 561 */ 562 static inline struct crypto_ablkcipher *__crypto_ablkcipher_cast( 563 struct crypto_tfm *tfm) 564 { 565 return (struct crypto_ablkcipher *)tfm; 566 } 567 568 static inline u32 crypto_skcipher_type(u32 type) 569 { 570 type &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_GENIV); 571 type |= CRYPTO_ALG_TYPE_BLKCIPHER; 572 return type; 573 } 574 575 static inline u32 crypto_skcipher_mask(u32 mask) 576 { 577 mask &= ~(CRYPTO_ALG_TYPE_MASK | CRYPTO_ALG_GENIV); 578 mask |= CRYPTO_ALG_TYPE_BLKCIPHER_MASK; 579 return mask; 580 } 581 582 struct crypto_ablkcipher *crypto_alloc_ablkcipher(const char *alg_name, 583 u32 type, u32 mask); 584 585 static inline struct crypto_tfm *crypto_ablkcipher_tfm( 586 struct crypto_ablkcipher *tfm) 587 { 588 return &tfm->base; 589 } 590 591 static inline void crypto_free_ablkcipher(struct crypto_ablkcipher *tfm) 592 { 593 crypto_free_tfm(crypto_ablkcipher_tfm(tfm)); 594 } 595 596 static inline int crypto_has_ablkcipher(const char *alg_name, u32 type, 597 u32 mask) 598 { 599 return crypto_has_alg(alg_name, crypto_skcipher_type(type), 600 crypto_skcipher_mask(mask)); 601 } 602 603 static inline struct ablkcipher_tfm *crypto_ablkcipher_crt( 604 struct crypto_ablkcipher *tfm) 605 { 606 return &crypto_ablkcipher_tfm(tfm)->crt_ablkcipher; 607 } 608 609 static inline unsigned int crypto_ablkcipher_ivsize( 610 struct crypto_ablkcipher *tfm) 611 { 612 return crypto_ablkcipher_crt(tfm)->ivsize; 613 } 614 615 static inline unsigned int crypto_ablkcipher_blocksize( 616 struct crypto_ablkcipher *tfm) 617 { 618 return crypto_tfm_alg_blocksize(crypto_ablkcipher_tfm(tfm)); 619 } 620 621 static inline unsigned int crypto_ablkcipher_alignmask( 622 struct crypto_ablkcipher *tfm) 623 { 624 return crypto_tfm_alg_alignmask(crypto_ablkcipher_tfm(tfm)); 625 } 626 627 static inline u32 crypto_ablkcipher_get_flags(struct crypto_ablkcipher *tfm) 628 { 629 return crypto_tfm_get_flags(crypto_ablkcipher_tfm(tfm)); 630 } 631 632 static inline void crypto_ablkcipher_set_flags(struct crypto_ablkcipher *tfm, 633 u32 flags) 634 { 635 crypto_tfm_set_flags(crypto_ablkcipher_tfm(tfm), flags); 636 } 637 638 static inline void crypto_ablkcipher_clear_flags(struct crypto_ablkcipher *tfm, 639 u32 flags) 640 { 641 crypto_tfm_clear_flags(crypto_ablkcipher_tfm(tfm), flags); 642 } 643 644 static inline int crypto_ablkcipher_setkey(struct crypto_ablkcipher *tfm, 645 const u8 *key, unsigned int keylen) 646 { 647 struct ablkcipher_tfm *crt = crypto_ablkcipher_crt(tfm); 648 649 return crt->setkey(crt->base, key, keylen); 650 } 651 652 static inline struct crypto_ablkcipher *crypto_ablkcipher_reqtfm( 653 struct ablkcipher_request *req) 654 { 655 return __crypto_ablkcipher_cast(req->base.tfm); 656 } 657 658 static inline int crypto_ablkcipher_encrypt(struct ablkcipher_request *req) 659 { 660 struct ablkcipher_tfm *crt = 661 crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req)); 662 return crt->encrypt(req); 663 } 664 665 static inline int crypto_ablkcipher_decrypt(struct ablkcipher_request *req) 666 { 667 struct ablkcipher_tfm *crt = 668 crypto_ablkcipher_crt(crypto_ablkcipher_reqtfm(req)); 669 return crt->decrypt(req); 670 } 671 672 static inline unsigned int crypto_ablkcipher_reqsize( 673 struct crypto_ablkcipher *tfm) 674 { 675 return crypto_ablkcipher_crt(tfm)->reqsize; 676 } 677 678 static inline void ablkcipher_request_set_tfm( 679 struct ablkcipher_request *req, struct crypto_ablkcipher *tfm) 680 { 681 req->base.tfm = crypto_ablkcipher_tfm(crypto_ablkcipher_crt(tfm)->base); 682 } 683 684 static inline struct ablkcipher_request *ablkcipher_request_cast( 685 struct crypto_async_request *req) 686 { 687 return container_of(req, struct ablkcipher_request, base); 688 } 689 690 static inline struct ablkcipher_request *ablkcipher_request_alloc( 691 struct crypto_ablkcipher *tfm, gfp_t gfp) 692 { 693 struct ablkcipher_request *req; 694 695 req = kmalloc(sizeof(struct ablkcipher_request) + 696 crypto_ablkcipher_reqsize(tfm), gfp); 697 698 if (likely(req)) 699 ablkcipher_request_set_tfm(req, tfm); 700 701 return req; 702 } 703 704 static inline void ablkcipher_request_free(struct ablkcipher_request *req) 705 { 706 kzfree(req); 707 } 708 709 static inline void ablkcipher_request_set_callback( 710 struct ablkcipher_request *req, 711 u32 flags, crypto_completion_t complete, void *data) 712 { 713 req->base.complete = complete; 714 req->base.data = data; 715 req->base.flags = flags; 716 } 717 718 static inline void ablkcipher_request_set_crypt( 719 struct ablkcipher_request *req, 720 struct scatterlist *src, struct scatterlist *dst, 721 unsigned int nbytes, void *iv) 722 { 723 req->src = src; 724 req->dst = dst; 725 req->nbytes = nbytes; 726 req->info = iv; 727 } 728 729 static inline struct crypto_aead *__crypto_aead_cast(struct crypto_tfm *tfm) 730 { 731 return (struct crypto_aead *)tfm; 732 } 733 734 struct crypto_aead *crypto_alloc_aead(const char *alg_name, u32 type, u32 mask); 735 736 static inline struct crypto_tfm *crypto_aead_tfm(struct crypto_aead *tfm) 737 { 738 return &tfm->base; 739 } 740 741 static inline void crypto_free_aead(struct crypto_aead *tfm) 742 { 743 crypto_free_tfm(crypto_aead_tfm(tfm)); 744 } 745 746 static inline struct aead_tfm *crypto_aead_crt(struct crypto_aead *tfm) 747 { 748 return &crypto_aead_tfm(tfm)->crt_aead; 749 } 750 751 static inline unsigned int crypto_aead_ivsize(struct crypto_aead *tfm) 752 { 753 return crypto_aead_crt(tfm)->ivsize; 754 } 755 756 static inline unsigned int crypto_aead_authsize(struct crypto_aead *tfm) 757 { 758 return crypto_aead_crt(tfm)->authsize; 759 } 760 761 static inline unsigned int crypto_aead_blocksize(struct crypto_aead *tfm) 762 { 763 return crypto_tfm_alg_blocksize(crypto_aead_tfm(tfm)); 764 } 765 766 static inline unsigned int crypto_aead_alignmask(struct crypto_aead *tfm) 767 { 768 return crypto_tfm_alg_alignmask(crypto_aead_tfm(tfm)); 769 } 770 771 static inline u32 crypto_aead_get_flags(struct crypto_aead *tfm) 772 { 773 return crypto_tfm_get_flags(crypto_aead_tfm(tfm)); 774 } 775 776 static inline void crypto_aead_set_flags(struct crypto_aead *tfm, u32 flags) 777 { 778 crypto_tfm_set_flags(crypto_aead_tfm(tfm), flags); 779 } 780 781 static inline void crypto_aead_clear_flags(struct crypto_aead *tfm, u32 flags) 782 { 783 crypto_tfm_clear_flags(crypto_aead_tfm(tfm), flags); 784 } 785 786 static inline int crypto_aead_setkey(struct crypto_aead *tfm, const u8 *key, 787 unsigned int keylen) 788 { 789 struct aead_tfm *crt = crypto_aead_crt(tfm); 790 791 return crt->setkey(crt->base, key, keylen); 792 } 793 794 int crypto_aead_setauthsize(struct crypto_aead *tfm, unsigned int authsize); 795 796 static inline struct crypto_aead *crypto_aead_reqtfm(struct aead_request *req) 797 { 798 return __crypto_aead_cast(req->base.tfm); 799 } 800 801 static inline int crypto_aead_encrypt(struct aead_request *req) 802 { 803 return crypto_aead_crt(crypto_aead_reqtfm(req))->encrypt(req); 804 } 805 806 static inline int crypto_aead_decrypt(struct aead_request *req) 807 { 808 return crypto_aead_crt(crypto_aead_reqtfm(req))->decrypt(req); 809 } 810 811 static inline unsigned int crypto_aead_reqsize(struct crypto_aead *tfm) 812 { 813 return crypto_aead_crt(tfm)->reqsize; 814 } 815 816 static inline void aead_request_set_tfm(struct aead_request *req, 817 struct crypto_aead *tfm) 818 { 819 req->base.tfm = crypto_aead_tfm(crypto_aead_crt(tfm)->base); 820 } 821 822 static inline struct aead_request *aead_request_alloc(struct crypto_aead *tfm, 823 gfp_t gfp) 824 { 825 struct aead_request *req; 826 827 req = kmalloc(sizeof(*req) + crypto_aead_reqsize(tfm), gfp); 828 829 if (likely(req)) 830 aead_request_set_tfm(req, tfm); 831 832 return req; 833 } 834 835 static inline void aead_request_free(struct aead_request *req) 836 { 837 kzfree(req); 838 } 839 840 static inline void aead_request_set_callback(struct aead_request *req, 841 u32 flags, 842 crypto_completion_t complete, 843 void *data) 844 { 845 req->base.complete = complete; 846 req->base.data = data; 847 req->base.flags = flags; 848 } 849 850 static inline void aead_request_set_crypt(struct aead_request *req, 851 struct scatterlist *src, 852 struct scatterlist *dst, 853 unsigned int cryptlen, u8 *iv) 854 { 855 req->src = src; 856 req->dst = dst; 857 req->cryptlen = cryptlen; 858 req->iv = iv; 859 } 860 861 static inline void aead_request_set_assoc(struct aead_request *req, 862 struct scatterlist *assoc, 863 unsigned int assoclen) 864 { 865 req->assoc = assoc; 866 req->assoclen = assoclen; 867 } 868 869 static inline struct crypto_blkcipher *__crypto_blkcipher_cast( 870 struct crypto_tfm *tfm) 871 { 872 return (struct crypto_blkcipher *)tfm; 873 } 874 875 static inline struct crypto_blkcipher *crypto_blkcipher_cast( 876 struct crypto_tfm *tfm) 877 { 878 BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_BLKCIPHER); 879 return __crypto_blkcipher_cast(tfm); 880 } 881 882 static inline struct crypto_blkcipher *crypto_alloc_blkcipher( 883 const char *alg_name, u32 type, u32 mask) 884 { 885 type &= ~CRYPTO_ALG_TYPE_MASK; 886 type |= CRYPTO_ALG_TYPE_BLKCIPHER; 887 mask |= CRYPTO_ALG_TYPE_MASK; 888 889 return __crypto_blkcipher_cast(crypto_alloc_base(alg_name, type, mask)); 890 } 891 892 static inline struct crypto_tfm *crypto_blkcipher_tfm( 893 struct crypto_blkcipher *tfm) 894 { 895 return &tfm->base; 896 } 897 898 static inline void crypto_free_blkcipher(struct crypto_blkcipher *tfm) 899 { 900 crypto_free_tfm(crypto_blkcipher_tfm(tfm)); 901 } 902 903 static inline int crypto_has_blkcipher(const char *alg_name, u32 type, u32 mask) 904 { 905 type &= ~CRYPTO_ALG_TYPE_MASK; 906 type |= CRYPTO_ALG_TYPE_BLKCIPHER; 907 mask |= CRYPTO_ALG_TYPE_MASK; 908 909 return crypto_has_alg(alg_name, type, mask); 910 } 911 912 static inline const char *crypto_blkcipher_name(struct crypto_blkcipher *tfm) 913 { 914 return crypto_tfm_alg_name(crypto_blkcipher_tfm(tfm)); 915 } 916 917 static inline struct blkcipher_tfm *crypto_blkcipher_crt( 918 struct crypto_blkcipher *tfm) 919 { 920 return &crypto_blkcipher_tfm(tfm)->crt_blkcipher; 921 } 922 923 static inline struct blkcipher_alg *crypto_blkcipher_alg( 924 struct crypto_blkcipher *tfm) 925 { 926 return &crypto_blkcipher_tfm(tfm)->__crt_alg->cra_blkcipher; 927 } 928 929 static inline unsigned int crypto_blkcipher_ivsize(struct crypto_blkcipher *tfm) 930 { 931 return crypto_blkcipher_alg(tfm)->ivsize; 932 } 933 934 static inline unsigned int crypto_blkcipher_blocksize( 935 struct crypto_blkcipher *tfm) 936 { 937 return crypto_tfm_alg_blocksize(crypto_blkcipher_tfm(tfm)); 938 } 939 940 static inline unsigned int crypto_blkcipher_alignmask( 941 struct crypto_blkcipher *tfm) 942 { 943 return crypto_tfm_alg_alignmask(crypto_blkcipher_tfm(tfm)); 944 } 945 946 static inline u32 crypto_blkcipher_get_flags(struct crypto_blkcipher *tfm) 947 { 948 return crypto_tfm_get_flags(crypto_blkcipher_tfm(tfm)); 949 } 950 951 static inline void crypto_blkcipher_set_flags(struct crypto_blkcipher *tfm, 952 u32 flags) 953 { 954 crypto_tfm_set_flags(crypto_blkcipher_tfm(tfm), flags); 955 } 956 957 static inline void crypto_blkcipher_clear_flags(struct crypto_blkcipher *tfm, 958 u32 flags) 959 { 960 crypto_tfm_clear_flags(crypto_blkcipher_tfm(tfm), flags); 961 } 962 963 static inline int crypto_blkcipher_setkey(struct crypto_blkcipher *tfm, 964 const u8 *key, unsigned int keylen) 965 { 966 return crypto_blkcipher_crt(tfm)->setkey(crypto_blkcipher_tfm(tfm), 967 key, keylen); 968 } 969 970 static inline int crypto_blkcipher_encrypt(struct blkcipher_desc *desc, 971 struct scatterlist *dst, 972 struct scatterlist *src, 973 unsigned int nbytes) 974 { 975 desc->info = crypto_blkcipher_crt(desc->tfm)->iv; 976 return crypto_blkcipher_crt(desc->tfm)->encrypt(desc, dst, src, nbytes); 977 } 978 979 static inline int crypto_blkcipher_encrypt_iv(struct blkcipher_desc *desc, 980 struct scatterlist *dst, 981 struct scatterlist *src, 982 unsigned int nbytes) 983 { 984 return crypto_blkcipher_crt(desc->tfm)->encrypt(desc, dst, src, nbytes); 985 } 986 987 static inline int crypto_blkcipher_decrypt(struct blkcipher_desc *desc, 988 struct scatterlist *dst, 989 struct scatterlist *src, 990 unsigned int nbytes) 991 { 992 desc->info = crypto_blkcipher_crt(desc->tfm)->iv; 993 return crypto_blkcipher_crt(desc->tfm)->decrypt(desc, dst, src, nbytes); 994 } 995 996 static inline int crypto_blkcipher_decrypt_iv(struct blkcipher_desc *desc, 997 struct scatterlist *dst, 998 struct scatterlist *src, 999 unsigned int nbytes) 1000 { 1001 return crypto_blkcipher_crt(desc->tfm)->decrypt(desc, dst, src, nbytes); 1002 } 1003 1004 static inline void crypto_blkcipher_set_iv(struct crypto_blkcipher *tfm, 1005 const u8 *src, unsigned int len) 1006 { 1007 memcpy(crypto_blkcipher_crt(tfm)->iv, src, len); 1008 } 1009 1010 static inline void crypto_blkcipher_get_iv(struct crypto_blkcipher *tfm, 1011 u8 *dst, unsigned int len) 1012 { 1013 memcpy(dst, crypto_blkcipher_crt(tfm)->iv, len); 1014 } 1015 1016 static inline struct crypto_cipher *__crypto_cipher_cast(struct crypto_tfm *tfm) 1017 { 1018 return (struct crypto_cipher *)tfm; 1019 } 1020 1021 static inline struct crypto_cipher *crypto_cipher_cast(struct crypto_tfm *tfm) 1022 { 1023 BUG_ON(crypto_tfm_alg_type(tfm) != CRYPTO_ALG_TYPE_CIPHER); 1024 return __crypto_cipher_cast(tfm); 1025 } 1026 1027 static inline struct crypto_cipher *crypto_alloc_cipher(const char *alg_name, 1028 u32 type, u32 mask) 1029 { 1030 type &= ~CRYPTO_ALG_TYPE_MASK; 1031 type |= CRYPTO_ALG_TYPE_CIPHER; 1032 mask |= CRYPTO_ALG_TYPE_MASK; 1033 1034 return __crypto_cipher_cast(crypto_alloc_base(alg_name, type, mask)); 1035 } 1036 1037 static inline struct crypto_tfm *crypto_cipher_tfm(struct crypto_cipher *tfm) 1038 { 1039 return &tfm->base; 1040 } 1041 1042 static inline void crypto_free_cipher(struct crypto_cipher *tfm) 1043 { 1044 crypto_free_tfm(crypto_cipher_tfm(tfm)); 1045 } 1046 1047 static inline int crypto_has_cipher(const char *alg_name, u32 type, u32 mask) 1048 { 1049 type &= ~CRYPTO_ALG_TYPE_MASK; 1050 type |= CRYPTO_ALG_TYPE_CIPHER; 1051 mask |= CRYPTO_ALG_TYPE_MASK; 1052 1053 return crypto_has_alg(alg_name, type, mask); 1054 } 1055 1056 static inline struct cipher_tfm *crypto_cipher_crt(struct crypto_cipher *tfm) 1057 { 1058 return &crypto_cipher_tfm(tfm)->crt_cipher; 1059 } 1060 1061 static inline unsigned int crypto_cipher_blocksize(struct crypto_cipher *tfm) 1062 { 1063 return crypto_tfm_alg_blocksize(crypto_cipher_tfm(tfm)); 1064 } 1065 1066 static inline unsigned int crypto_cipher_alignmask(struct crypto_cipher *tfm) 1067 { 1068 return crypto_tfm_alg_alignmask(crypto_cipher_tfm(tfm)); 1069 } 1070 1071 static inline u32 crypto_cipher_get_flags(struct crypto_cipher *tfm) 1072 { 1073 return crypto_tfm_get_flags(crypto_cipher_tfm(tfm)); 1074 } 1075 1076 static inline void crypto_cipher_set_flags(struct crypto_cipher *tfm, 1077 u32 flags) 1078 { 1079 crypto_tfm_set_flags(crypto_cipher_tfm(tfm), flags); 1080 } 1081 1082 static inline void crypto_cipher_clear_flags(struct crypto_cipher *tfm, 1083 u32 flags) 1084 { 1085 crypto_tfm_clear_flags(crypto_cipher_tfm(tfm), flags); 1086 } 1087 1088 static inline int crypto_cipher_setkey(struct crypto_cipher *tfm, 1089 const u8 *key, unsigned int keylen) 1090 { 1091 return crypto_cipher_crt(tfm)->cit_setkey(crypto_cipher_tfm(tfm), 1092 key, keylen); 1093 } 1094 1095 static inline void crypto_cipher_encrypt_one(struct crypto_cipher *tfm, 1096 u8 *dst, const u8 *src) 1097 { 1098 crypto_cipher_crt(tfm)->cit_encrypt_one(crypto_cipher_tfm(tfm), 1099 dst, src); 1100 } 1101 1102 static inline void crypto_cipher_decrypt_one(struct crypto_cipher *tfm, 1103 u8 *dst, const u8 *src) 1104 { 1105 crypto_cipher_crt(tfm)->cit_decrypt_one(crypto_cipher_tfm(tfm), 1106 dst, src); 1107 } 1108 1109 static inline struct crypto_hash *__crypto_hash_cast(struct crypto_tfm *tfm) 1110 { 1111 return (struct crypto_hash *)tfm; 1112 } 1113 1114 static inline struct crypto_hash *crypto_hash_cast(struct crypto_tfm *tfm) 1115 { 1116 BUG_ON((crypto_tfm_alg_type(tfm) ^ CRYPTO_ALG_TYPE_HASH) & 1117 CRYPTO_ALG_TYPE_HASH_MASK); 1118 return __crypto_hash_cast(tfm); 1119 } 1120 1121 static inline struct crypto_hash *crypto_alloc_hash(const char *alg_name, 1122 u32 type, u32 mask) 1123 { 1124 type &= ~CRYPTO_ALG_TYPE_MASK; 1125 mask &= ~CRYPTO_ALG_TYPE_MASK; 1126 type |= CRYPTO_ALG_TYPE_HASH; 1127 mask |= CRYPTO_ALG_TYPE_HASH_MASK; 1128 1129 return __crypto_hash_cast(crypto_alloc_base(alg_name, type, mask)); 1130 } 1131 1132 static inline struct crypto_tfm *crypto_hash_tfm(struct crypto_hash *tfm) 1133 { 1134 return &tfm->base; 1135 } 1136 1137 static inline void crypto_free_hash(struct crypto_hash *tfm) 1138 { 1139 crypto_free_tfm(crypto_hash_tfm(tfm)); 1140 } 1141 1142 static inline int crypto_has_hash(const char *alg_name, u32 type, u32 mask) 1143 { 1144 type &= ~CRYPTO_ALG_TYPE_MASK; 1145 mask &= ~CRYPTO_ALG_TYPE_MASK; 1146 type |= CRYPTO_ALG_TYPE_HASH; 1147 mask |= CRYPTO_ALG_TYPE_HASH_MASK; 1148 1149 return crypto_has_alg(alg_name, type, mask); 1150 } 1151 1152 static inline struct hash_tfm *crypto_hash_crt(struct crypto_hash *tfm) 1153 { 1154 return &crypto_hash_tfm(tfm)->crt_hash; 1155 } 1156 1157 static inline unsigned int crypto_hash_blocksize(struct crypto_hash *tfm) 1158 { 1159 return crypto_tfm_alg_blocksize(crypto_hash_tfm(tfm)); 1160 } 1161 1162 static inline unsigned int crypto_hash_alignmask(struct crypto_hash *tfm) 1163 { 1164 return crypto_tfm_alg_alignmask(crypto_hash_tfm(tfm)); 1165 } 1166 1167 static inline unsigned int crypto_hash_digestsize(struct crypto_hash *tfm) 1168 { 1169 return crypto_hash_crt(tfm)->digestsize; 1170 } 1171 1172 static inline u32 crypto_hash_get_flags(struct crypto_hash *tfm) 1173 { 1174 return crypto_tfm_get_flags(crypto_hash_tfm(tfm)); 1175 } 1176 1177 static inline void crypto_hash_set_flags(struct crypto_hash *tfm, u32 flags) 1178 { 1179 crypto_tfm_set_flags(crypto_hash_tfm(tfm), flags); 1180 } 1181 1182 static inline void crypto_hash_clear_flags(struct crypto_hash *tfm, u32 flags) 1183 { 1184 crypto_tfm_clear_flags(crypto_hash_tfm(tfm), flags); 1185 } 1186 1187 static inline int crypto_hash_init(struct hash_desc *desc) 1188 { 1189 return crypto_hash_crt(desc->tfm)->init(desc); 1190 } 1191 1192 static inline int crypto_hash_update(struct hash_desc *desc, 1193 struct scatterlist *sg, 1194 unsigned int nbytes) 1195 { 1196 return crypto_hash_crt(desc->tfm)->update(desc, sg, nbytes); 1197 } 1198 1199 static inline int crypto_hash_final(struct hash_desc *desc, u8 *out) 1200 { 1201 return crypto_hash_crt(desc->tfm)->final(desc, out); 1202 } 1203 1204 static inline int crypto_hash_digest(struct hash_desc *desc, 1205 struct scatterlist *sg, 1206 unsigned int nbytes, u8 *out) 1207 { 1208 return crypto_hash_crt(desc->tfm)->digest(desc, sg, nbytes, out); 1209 } 1210 1211 static inline int crypto_hash_setkey(struct crypto_hash *hash, 1212 const u8 *key, unsigned int keylen) 1213 { 1214 return crypto_hash_crt(hash)->setkey(hash, key, keylen); 1215 } 1216 1217 static inline struct crypto_comp *__crypto_comp_cast(struct crypto_tfm *tfm) 1218 { 1219 return (struct crypto_comp *)tfm; 1220 } 1221 1222 static inline struct crypto_comp *crypto_comp_cast(struct crypto_tfm *tfm) 1223 { 1224 BUG_ON((crypto_tfm_alg_type(tfm) ^ CRYPTO_ALG_TYPE_COMPRESS) & 1225 CRYPTO_ALG_TYPE_MASK); 1226 return __crypto_comp_cast(tfm); 1227 } 1228 1229 static inline struct crypto_comp *crypto_alloc_comp(const char *alg_name, 1230 u32 type, u32 mask) 1231 { 1232 type &= ~CRYPTO_ALG_TYPE_MASK; 1233 type |= CRYPTO_ALG_TYPE_COMPRESS; 1234 mask |= CRYPTO_ALG_TYPE_MASK; 1235 1236 return __crypto_comp_cast(crypto_alloc_base(alg_name, type, mask)); 1237 } 1238 1239 static inline struct crypto_tfm *crypto_comp_tfm(struct crypto_comp *tfm) 1240 { 1241 return &tfm->base; 1242 } 1243 1244 static inline void crypto_free_comp(struct crypto_comp *tfm) 1245 { 1246 crypto_free_tfm(crypto_comp_tfm(tfm)); 1247 } 1248 1249 static inline int crypto_has_comp(const char *alg_name, u32 type, u32 mask) 1250 { 1251 type &= ~CRYPTO_ALG_TYPE_MASK; 1252 type |= CRYPTO_ALG_TYPE_COMPRESS; 1253 mask |= CRYPTO_ALG_TYPE_MASK; 1254 1255 return crypto_has_alg(alg_name, type, mask); 1256 } 1257 1258 static inline const char *crypto_comp_name(struct crypto_comp *tfm) 1259 { 1260 return crypto_tfm_alg_name(crypto_comp_tfm(tfm)); 1261 } 1262 1263 static inline struct compress_tfm *crypto_comp_crt(struct crypto_comp *tfm) 1264 { 1265 return &crypto_comp_tfm(tfm)->crt_compress; 1266 } 1267 1268 static inline int crypto_comp_compress(struct crypto_comp *tfm, 1269 const u8 *src, unsigned int slen, 1270 u8 *dst, unsigned int *dlen) 1271 { 1272 return crypto_comp_crt(tfm)->cot_compress(crypto_comp_tfm(tfm), 1273 src, slen, dst, dlen); 1274 } 1275 1276 static inline int crypto_comp_decompress(struct crypto_comp *tfm, 1277 const u8 *src, unsigned int slen, 1278 u8 *dst, unsigned int *dlen) 1279 { 1280 return crypto_comp_crt(tfm)->cot_decompress(crypto_comp_tfm(tfm), 1281 src, slen, dst, dlen); 1282 } 1283 1284 #endif /* _LINUX_CRYPTO_H */ 1285 1286