serpent_generic.c (8dd06ef34b6e2f41b29fbf5fc1663780f2524285) | serpent_generic.c (784506a1df57737fc8460fd644b30ac8fecaedf0) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Cryptographic API. 4 * 5 * Serpent Cipher Algorithm. 6 * 7 * Copyright (C) 2002 Dag Arne Osvik <osvik@ii.uib.no> | 1// SPDX-License-Identifier: GPL-2.0-or-later 2/* 3 * Cryptographic API. 4 * 5 * Serpent Cipher Algorithm. 6 * 7 * Copyright (C) 2002 Dag Arne Osvik <osvik@ii.uib.no> |
8 * 2003 Herbert Valerio Riedel <hvr@gnu.org> 9 * 10 * Added tnepres support: 11 * Ruben Jesus Garcia Hernandez <ruben@ugr.es>, 18.10.2004 12 * Based on code by hvr | |
13 */ 14 15#include <linux/init.h> 16#include <linux/module.h> 17#include <linux/errno.h> 18#include <asm/byteorder.h> 19#include <linux/crypto.h> 20#include <linux/types.h> --- 550 unchanged lines hidden (view full) --- 571 572static void serpent_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) 573{ 574 struct serpent_ctx *ctx = crypto_tfm_ctx(tfm); 575 576 __serpent_decrypt(ctx, dst, src); 577} 578 | 8 */ 9 10#include <linux/init.h> 11#include <linux/module.h> 12#include <linux/errno.h> 13#include <asm/byteorder.h> 14#include <linux/crypto.h> 15#include <linux/types.h> --- 550 unchanged lines hidden (view full) --- 566 567static void serpent_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) 568{ 569 struct serpent_ctx *ctx = crypto_tfm_ctx(tfm); 570 571 __serpent_decrypt(ctx, dst, src); 572} 573 |
579static int tnepres_setkey(struct crypto_tfm *tfm, const u8 *key, 580 unsigned int keylen) 581{ 582 u8 rev_key[SERPENT_MAX_KEY_SIZE]; 583 int i; 584 585 for (i = 0; i < keylen; ++i) 586 rev_key[keylen - i - 1] = key[i]; 587 588 return serpent_setkey(tfm, rev_key, keylen); 589} 590 591static void tnepres_encrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) 592{ 593 const u32 * const s = (const u32 * const)src; 594 u32 * const d = (u32 * const)dst; 595 596 u32 rs[4], rd[4]; 597 598 rs[0] = swab32(s[3]); 599 rs[1] = swab32(s[2]); 600 rs[2] = swab32(s[1]); 601 rs[3] = swab32(s[0]); 602 603 serpent_encrypt(tfm, (u8 *)rd, (u8 *)rs); 604 605 d[0] = swab32(rd[3]); 606 d[1] = swab32(rd[2]); 607 d[2] = swab32(rd[1]); 608 d[3] = swab32(rd[0]); 609} 610 611static void tnepres_decrypt(struct crypto_tfm *tfm, u8 *dst, const u8 *src) 612{ 613 const u32 * const s = (const u32 * const)src; 614 u32 * const d = (u32 * const)dst; 615 616 u32 rs[4], rd[4]; 617 618 rs[0] = swab32(s[3]); 619 rs[1] = swab32(s[2]); 620 rs[2] = swab32(s[1]); 621 rs[3] = swab32(s[0]); 622 623 serpent_decrypt(tfm, (u8 *)rd, (u8 *)rs); 624 625 d[0] = swab32(rd[3]); 626 d[1] = swab32(rd[2]); 627 d[2] = swab32(rd[1]); 628 d[3] = swab32(rd[0]); 629} 630 631static struct crypto_alg srp_algs[2] = { { | 574static struct crypto_alg srp_alg = { |
632 .cra_name = "serpent", 633 .cra_driver_name = "serpent-generic", 634 .cra_priority = 100, 635 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 636 .cra_blocksize = SERPENT_BLOCK_SIZE, 637 .cra_ctxsize = sizeof(struct serpent_ctx), 638 .cra_alignmask = 3, 639 .cra_module = THIS_MODULE, 640 .cra_u = { .cipher = { 641 .cia_min_keysize = SERPENT_MIN_KEY_SIZE, 642 .cia_max_keysize = SERPENT_MAX_KEY_SIZE, 643 .cia_setkey = serpent_setkey, 644 .cia_encrypt = serpent_encrypt, 645 .cia_decrypt = serpent_decrypt } } | 575 .cra_name = "serpent", 576 .cra_driver_name = "serpent-generic", 577 .cra_priority = 100, 578 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 579 .cra_blocksize = SERPENT_BLOCK_SIZE, 580 .cra_ctxsize = sizeof(struct serpent_ctx), 581 .cra_alignmask = 3, 582 .cra_module = THIS_MODULE, 583 .cra_u = { .cipher = { 584 .cia_min_keysize = SERPENT_MIN_KEY_SIZE, 585 .cia_max_keysize = SERPENT_MAX_KEY_SIZE, 586 .cia_setkey = serpent_setkey, 587 .cia_encrypt = serpent_encrypt, 588 .cia_decrypt = serpent_decrypt } } |
646}, { 647 .cra_name = "tnepres", 648 .cra_driver_name = "tnepres-generic", 649 .cra_flags = CRYPTO_ALG_TYPE_CIPHER, 650 .cra_blocksize = SERPENT_BLOCK_SIZE, 651 .cra_ctxsize = sizeof(struct serpent_ctx), 652 .cra_alignmask = 3, 653 .cra_module = THIS_MODULE, 654 .cra_u = { .cipher = { 655 .cia_min_keysize = SERPENT_MIN_KEY_SIZE, 656 .cia_max_keysize = SERPENT_MAX_KEY_SIZE, 657 .cia_setkey = tnepres_setkey, 658 .cia_encrypt = tnepres_encrypt, 659 .cia_decrypt = tnepres_decrypt } } 660} }; | 589}; |
661 662static int __init serpent_mod_init(void) 663{ | 590 591static int __init serpent_mod_init(void) 592{ |
664 return crypto_register_algs(srp_algs, ARRAY_SIZE(srp_algs)); | 593 return crypto_register_alg(&srp_alg); |
665} 666 667static void __exit serpent_mod_fini(void) 668{ | 594} 595 596static void __exit serpent_mod_fini(void) 597{ |
669 crypto_unregister_algs(srp_algs, ARRAY_SIZE(srp_algs)); | 598 crypto_unregister_alg(&srp_alg); |
670} 671 672subsys_initcall(serpent_mod_init); 673module_exit(serpent_mod_fini); 674 675MODULE_LICENSE("GPL"); | 599} 600 601subsys_initcall(serpent_mod_init); 602module_exit(serpent_mod_fini); 603 604MODULE_LICENSE("GPL"); |
676MODULE_DESCRIPTION("Serpent and tnepres (kerneli compatible serpent reversed) Cipher Algorithm"); | 605MODULE_DESCRIPTION("Serpent Cipher Algorithm"); |
677MODULE_AUTHOR("Dag Arne Osvik <osvik@ii.uib.no>"); | 606MODULE_AUTHOR("Dag Arne Osvik <osvik@ii.uib.no>"); |
678MODULE_ALIAS_CRYPTO("tnepres"); | |
679MODULE_ALIAS_CRYPTO("serpent"); 680MODULE_ALIAS_CRYPTO("serpent-generic"); | 607MODULE_ALIAS_CRYPTO("serpent"); 608MODULE_ALIAS_CRYPTO("serpent-generic"); |