10 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
14 #include <linux/module.h>
17 #include <linux/types.h>
18 #include <crypto/sha.h>
61 unsigned int len,
unsigned int partial)
63 unsigned int done = 0;
65 if ((sctx->
count[0] += len) < len)
79 memcpy(sctx->
buf, data + done, len - done);
90 if ((sctx->
count[0] += len) < len)
94 __sha512_sparc64_update(sctx, data, len, partial);
102 unsigned int i,
index, padlen;
117 if ((sctx->
count[0] += padlen) < padlen)
119 memcpy(sctx->
buf + index, padding, padlen);
121 __sha512_sparc64_update(sctx, padding, padlen, index);
123 __sha512_sparc64_update(sctx, (
const u8 *)&bits,
sizeof(bits), 112);
126 for (i = 0; i < 8; i++)
130 memset(sctx, 0,
sizeof(*sctx));
139 sha512_sparc64_final(desc, D);
149 .init = sha512_sparc64_init,
150 .update = sha512_sparc64_update,
151 .final = sha512_sparc64_final,
154 .cra_name =
"sha512",
155 .cra_driver_name=
"sha512-sparc64",
165 .init = sha384_sparc64_init,
166 .update = sha512_sparc64_update,
167 .final = sha384_sparc64_final,
170 .cra_name =
"sha384",
171 .cra_driver_name=
"sha384-sparc64",
179 static bool __init sparc64_has_sha512_opcode(
void)
186 __asm__ __volatile__(
"rd %%asr26, %0" :
"=r" (cfr));
193 static int __init sha512_sparc64_mod_init(
void)
195 if (sparc64_has_sha512_opcode()) {
206 pr_info(
"Using sparc64 sha512 opcode optimized SHA-512/SHA-384 implementation\n");
209 pr_info(
"sparc64 sha512 opcode not available.\n");
213 static void __exit sha512_sparc64_mod_fini(
void)
223 MODULE_DESCRIPTION(
"SHA-384 and SHA-512 Secure Hash Algorithm, sparc64 sha512 opcode accelerated");