diff options
Diffstat (limited to 'crypto/algapi.c')
-rw-r--r-- | crypto/algapi.c | 65 |
1 files changed, 63 insertions, 2 deletions
diff --git a/crypto/algapi.c b/crypto/algapi.c index 8383282de1dd..e65cb50cf4af 100644 --- a/crypto/algapi.c +++ b/crypto/algapi.c | |||
@@ -472,7 +472,7 @@ int crypto_check_attr_type(struct rtattr **tb, u32 type) | |||
472 | } | 472 | } |
473 | EXPORT_SYMBOL_GPL(crypto_check_attr_type); | 473 | EXPORT_SYMBOL_GPL(crypto_check_attr_type); |
474 | 474 | ||
475 | struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask) | 475 | const char *crypto_attr_alg_name(struct rtattr *rta) |
476 | { | 476 | { |
477 | struct crypto_attr_alg *alga; | 477 | struct crypto_attr_alg *alga; |
478 | 478 | ||
@@ -486,7 +486,21 @@ struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask) | |||
486 | alga = RTA_DATA(rta); | 486 | alga = RTA_DATA(rta); |
487 | alga->name[CRYPTO_MAX_ALG_NAME - 1] = 0; | 487 | alga->name[CRYPTO_MAX_ALG_NAME - 1] = 0; |
488 | 488 | ||
489 | return crypto_alg_mod_lookup(alga->name, type, mask); | 489 | return alga->name; |
490 | } | ||
491 | EXPORT_SYMBOL_GPL(crypto_attr_alg_name); | ||
492 | |||
493 | struct crypto_alg *crypto_attr_alg(struct rtattr *rta, u32 type, u32 mask) | ||
494 | { | ||
495 | const char *name; | ||
496 | int err; | ||
497 | |||
498 | name = crypto_attr_alg_name(rta); | ||
499 | err = PTR_ERR(name); | ||
500 | if (IS_ERR(name)) | ||
501 | return ERR_PTR(err); | ||
502 | |||
503 | return crypto_alg_mod_lookup(name, type, mask); | ||
490 | } | 504 | } |
491 | EXPORT_SYMBOL_GPL(crypto_attr_alg); | 505 | EXPORT_SYMBOL_GPL(crypto_attr_alg); |
492 | 506 | ||
@@ -605,6 +619,53 @@ int crypto_tfm_in_queue(struct crypto_queue *queue, struct crypto_tfm *tfm) | |||
605 | } | 619 | } |
606 | EXPORT_SYMBOL_GPL(crypto_tfm_in_queue); | 620 | EXPORT_SYMBOL_GPL(crypto_tfm_in_queue); |
607 | 621 | ||
622 | static inline void crypto_inc_byte(u8 *a, unsigned int size) | ||
623 | { | ||
624 | u8 *b = (a + size); | ||
625 | u8 c; | ||
626 | |||
627 | for (; size; size--) { | ||
628 | c = *--b + 1; | ||
629 | *b = c; | ||
630 | if (c) | ||
631 | break; | ||
632 | } | ||
633 | } | ||
634 | |||
635 | void crypto_inc(u8 *a, unsigned int size) | ||
636 | { | ||
637 | __be32 *b = (__be32 *)(a + size); | ||
638 | u32 c; | ||
639 | |||
640 | for (; size >= 4; size -= 4) { | ||
641 | c = be32_to_cpu(*--b) + 1; | ||
642 | *b = cpu_to_be32(c); | ||
643 | if (c) | ||
644 | return; | ||
645 | } | ||
646 | |||
647 | crypto_inc_byte(a, size); | ||
648 | } | ||
649 | EXPORT_SYMBOL_GPL(crypto_inc); | ||
650 | |||
651 | static inline void crypto_xor_byte(u8 *a, const u8 *b, unsigned int size) | ||
652 | { | ||
653 | for (; size; size--) | ||
654 | *a++ ^= *b++; | ||
655 | } | ||
656 | |||
657 | void crypto_xor(u8 *dst, const u8 *src, unsigned int size) | ||
658 | { | ||
659 | u32 *a = (u32 *)dst; | ||
660 | u32 *b = (u32 *)src; | ||
661 | |||
662 | for (; size >= 4; size -= 4) | ||
663 | *a++ ^= *b++; | ||
664 | |||
665 | crypto_xor_byte((u8 *)a, (u8 *)b, size); | ||
666 | } | ||
667 | EXPORT_SYMBOL_GPL(crypto_xor); | ||
668 | |||
608 | static int __init crypto_algapi_init(void) | 669 | static int __init crypto_algapi_init(void) |
609 | { | 670 | { |
610 | crypto_init_proc(); | 671 | crypto_init_proc(); |