linux/crypto/shash.c
<<
>>
Prefs
   1/*
   2 * Synchronous Cryptographic Hash operations.
   3 *
   4 * Copyright (c) 2008 Herbert Xu <herbert@gondor.apana.org.au>
   5 *
   6 * This program is free software; you can redistribute it and/or modify it
   7 * under the terms of the GNU General Public License as published by the Free
   8 * Software Foundation; either version 2 of the License, or (at your option)
   9 * any later version.
  10 *
  11 */
  12
  13#include <crypto/scatterwalk.h>
  14#include <crypto/internal/hash.h>
  15#include <linux/err.h>
  16#include <linux/kernel.h>
  17#include <linux/module.h>
  18#include <linux/slab.h>
  19#include <linux/seq_file.h>
  20#include <linux/cryptouser.h>
  21#include <net/netlink.h>
  22
  23#include "internal.h"
  24
  25static const struct crypto_type crypto_shash_type;
  26
  27static int shash_no_setkey(struct crypto_shash *tfm, const u8 *key,
  28                           unsigned int keylen)
  29{
  30        return -ENOSYS;
  31}
  32
  33static int shash_setkey_unaligned(struct crypto_shash *tfm, const u8 *key,
  34                                  unsigned int keylen)
  35{
  36        struct shash_alg *shash = crypto_shash_alg(tfm);
  37        unsigned long alignmask = crypto_shash_alignmask(tfm);
  38        unsigned long absize;
  39        u8 *buffer, *alignbuffer;
  40        int err;
  41
  42        absize = keylen + (alignmask & ~(crypto_tfm_ctx_alignment() - 1));
  43        buffer = kmalloc(absize, GFP_KERNEL);
  44        if (!buffer)
  45                return -ENOMEM;
  46
  47        alignbuffer = (u8 *)ALIGN((unsigned long)buffer, alignmask + 1);
  48        memcpy(alignbuffer, key, keylen);
  49        err = shash->setkey(tfm, alignbuffer, keylen);
  50        kzfree(buffer);
  51        return err;
  52}
  53
  54int crypto_shash_setkey(struct crypto_shash *tfm, const u8 *key,
  55                        unsigned int keylen)
  56{
  57        struct shash_alg *shash = crypto_shash_alg(tfm);
  58        unsigned long alignmask = crypto_shash_alignmask(tfm);
  59
  60        if ((unsigned long)key & alignmask)
  61                return shash_setkey_unaligned(tfm, key, keylen);
  62
  63        return shash->setkey(tfm, key, keylen);
  64}
  65EXPORT_SYMBOL_GPL(crypto_shash_setkey);
  66
  67static inline unsigned int shash_align_buffer_size(unsigned len,
  68                                                   unsigned long mask)
  69{
  70        return len + (mask & ~(__alignof__(u8 __attribute__ ((aligned))) - 1));
  71}
  72
  73static int shash_update_unaligned(struct shash_desc *desc, const u8 *data,
  74                                  unsigned int len)
  75{
  76        struct crypto_shash *tfm = desc->tfm;
  77        struct shash_alg *shash = crypto_shash_alg(tfm);
  78        unsigned long alignmask = crypto_shash_alignmask(tfm);
  79        unsigned int unaligned_len = alignmask + 1 -
  80                                     ((unsigned long)data & alignmask);
  81        u8 ubuf[shash_align_buffer_size(unaligned_len, alignmask)]
  82                __attribute__ ((aligned));
  83        u8 *buf = PTR_ALIGN(&ubuf[0], alignmask + 1);
  84        int err;
  85
  86        if (unaligned_len > len)
  87                unaligned_len = len;
  88
  89        memcpy(buf, data, unaligned_len);
  90        err = shash->update(desc, buf, unaligned_len);
  91        memset(buf, 0, unaligned_len);
  92
  93        return err ?:
  94               shash->update(desc, data + unaligned_len, len - unaligned_len);
  95}
  96
  97int crypto_shash_update(struct shash_desc *desc, const u8 *data,
  98                        unsigned int len)
  99{
 100        struct crypto_shash *tfm = desc->tfm;
 101        struct shash_alg *shash = crypto_shash_alg(tfm);
 102        unsigned long alignmask = crypto_shash_alignmask(tfm);
 103
 104        if ((unsigned long)data & alignmask)
 105                return shash_update_unaligned(desc, data, len);
 106
 107        return shash->update(desc, data, len);
 108}
 109EXPORT_SYMBOL_GPL(crypto_shash_update);
 110
 111static int shash_final_unaligned(struct shash_desc *desc, u8 *out)
 112{
 113        struct crypto_shash *tfm = desc->tfm;
 114        unsigned long alignmask = crypto_shash_alignmask(tfm);
 115        struct shash_alg *shash = crypto_shash_alg(tfm);
 116        unsigned int ds = crypto_shash_digestsize(tfm);
 117        u8 ubuf[shash_align_buffer_size(ds, alignmask)]
 118                __attribute__ ((aligned));
 119        u8 *buf = PTR_ALIGN(&ubuf[0], alignmask + 1);
 120        int err;
 121
 122        err = shash->final(desc, buf);
 123        if (err)
 124                goto out;
 125
 126        memcpy(out, buf, ds);
 127
 128out:
 129        memset(buf, 0, ds);
 130        return err;
 131}
 1"="L132" class="line" name="L132"> 1"="ufferbuf);
1sk)]
6emset" class="sref">memsettfmdor.ato/sh1sh" c1ass="s="sref">shash_desc *key,
1alignmask =  *out)
 112{
 113        stlass="lin1e" name="L34">  34  1     1                          unsigned int keylen)
  35{
  36        struct shash_a1lgshash = crypto_shash_alg(tfm);
  37 1       un1signed long   1_alignmas1k(tfm( 103
  314="L79">  79              if ((unsigned loate" class="sref">crypto_shash_update);
 1"="L132" class="line" name="L132"> 1"="uffer)]
6emset" class="srerypto/shash.c#L12" id="L12" cclass="sr, *alignbuffer;
data, len);
 121
)]
6emset" class="srerypto/shash.c#L12" id="L12" cturn ke1ylen<1a> + (ass="sref">ds);
bu1ffer<1a> = data, len);
 131erypto/shash.c#L12" id="L12" ccode=key1 err)
b(crypto_shash_update}
 1"="L132" class="line" name="L132"> 1"="="L97" class="line" name="L97">  97int crypto_shash_update1/shash.c#1L45" id="L45" class="lin1e" na14"L86" class="line" naaaaaaaaaaaaaaaaaaef="+code=desc" class="sref">desc, const buf);
1sk)]
6emset" class="sref">memsetu8 *)shash_desc *1emcpy(data  95<
 107        return unaligned_len);
15="L79">  79     href="crypto/shash.c#L131" id="L131" class="line" name="L131"> 131}
)]
6emset" class="srerypto/shash.c#L12" id="L12" ass="sref1">keylen);
ds);
kzfree( 130        ra href="c1rypto/shash.c#L51" id="L151" c15;
 1up}
 1"="L132" class="line" name="L132"> 1"="="L97" class="line" name="L97">  97int crypto_shash_update1      ret1urn shash_desc *desc, const buf);
1sk)]
6emset" class="sref">memsetkey<15                               unsigned int len)
  75{
  76        s1id="L55" 1class="line" name="L55">1  55<1a>                        unsigned int keylen)
  56{
  57        struct shash_a1lgshash = crypto_shash_alg(tfm);
  58 1       un1signed long alignmask = c_shash_alignmask(tfm<| _shash_alignmask( 103
  60        if ((unsignateupclass="sref">crypto_shash_update}
 107        return <2" class="line" nk)]
6emset" class="srerypto/shash.c#L12" id="L12" =shash_se1tkey_unaligned" class="s1ref">1hash_setkey_unaligned(tfm, key, keylend="etur" class="line> 1up}
 107        return <2" class="line" nk)]
6emset" class="srerypto/shash.c#L12" id="L12" =     ret1->setkey(tfm1, key, keylen);
 1uperypto/shash.c#L12" id="L12" =ash.h" claass="fref">crypto/internakey<1="L65">  65EXP1ORT_S16>crypto_type crypto_shash_updatlass="class="sre}
 1"="L132" class="line" name="L132"> 1"="="L97" class="line" name="L97">  97int crypto_shash_update1tatic inline unsigned int desc, const buf);
1sk)]
6emset" class="sref">memsetlen,
1  68                1     1                             unsigne" name="L131"inime="L42">  42      "L131"inim}
unaligned_len);
__alignof__<1/a>(<17ass="line" name="L60href="crypto/shash.c#L131" id="etur" class="line" name="L131"> 1up}
 107        return <2" class="line" nk)]
6emset" class="srerypto/shash.c#L12" id="L12" /a> buffer);
<1ref="+cod1e=aligned" class="sref">1align17sk" class="sref">alignmask =(struct <1a href="+code=shash_desc1" cla17sref">err;
 1"="L132" class="line" name="L132"> 1"="="L97" class="line" name="L97">  97int crypto_shash_update1ef="+code1=data" class="sref">data1,17ss="sref">crypto_shash *buf);
1sk)]
6emset" class="sref">memset  741 17>,
crypto_shash *len)
  75{
  76        s1e=shash_a1lg" class="sref">shash_a1lgkeylen)
  56{
  57        struct al class="sref">shash = crypto_shash_alg(tfm);
  58 1/shash.c#1L79" id="L79" class="lin1e" na189"> 1091  80<1a>            ef">c_shash_alignmask(tfm<| _shash_alignmask( 103
shash_al>  60        if ((unsignlass="class="sref">crypto_shash_updatlass="class="sre}
 107        return <2" class="line" nk)]
6emset" class="srerypto/shash.c#L12" id="L12" href="cry1pto/shash.c#L82" id="L821" cla18sk" class="sref">alignmask =+code=buf1" class="sref">buf =1 key, keylenlass="ur" class="linelass="}
 107        return <2" class="line" nk)]
6emset" class="srerypto/shash.c#L12" id="L12" hf="+code1>[0], key, keylen);
memcpy()
 }
 1"="L132" class="line" name="L132"> 1"="voidref">buf);
1sk)]
6emset" class="sref">memset   1             1emcpy(out;
}
(}
alignmask)]
1pdate(alignmask)]
  91   19fer" class="sref">buffer);
<1="sref">m1emset(alignmask = href="cr1ypto/shash.c#L92" id="L912" cl1ss="lito_type }
 1"="L132" class="line" name="L132"> 1"="="L97"voidref">buf);
1si107        rihref="+code=u8" class="sref">u8<1data" cla1ss="sref">data +  124                goto out"line" nama hrd="L132" class="line" nama hr}
(}
alignmask)]
una19f="+code=data" class0ref">alignmask)]
)
update(alignmask  28 to_type }
len)
  54int crypto_shash_setkey2ruct  *tfm, const u8 2=shash_al2" class="sref">shash_alg2/a> *20class="sref">shash_desc *u8 *out)
ref="+code=crypt hrd="L132" class= hr" class="sref">crypto_shaa"srea hrd="L132" class=pto_shaa"srea hr;
  58 2   58 2 5a href=2+s="sref">data +   52>
  63        return s2ash_up="sref">update(desc2 memcpy(<2ref">shas2->   42}
u8 2=9f">shas2len" class="sref">crypto_shaa"srea hrd="L132" class=pto_shaa"srea hr;
EXPORT_S2MBOL_21ref">crypto_shash * 1"="L132" class="line" name="L132"> 1"">crypto_shash_alig"srearequs="a hrd="L132" class=g"srearequs="a hr;
(desc2/a>, 2a href="+code=
cref="+code=crypt hrd="L132" class= hrref="+code=shash" class="sr2_crypto_s
 1"">crypto_shash_alirequr" class="linereq"+co="crypto/shash.c#L76basalg( 1"ref="+code=shash" class="sr2_5a href=2gned long err)
shash_alg2/a> *2a href="+code=               unsigne" name="L131"inime="L42">  42      "L131"inim}
update(ubuf[  2="crypto/2hash.c#L118" id="L118" c2ass="2ine" n }
 * 1"="L132" class="line" name="L132"> 1"de=u8" class="sref">u8 2code=buf"2class="sref">buf = <2 href2"+code8" id="L68" class="line" na2uf[0]2 crypto_shash *c> *ref="+code=shash" class="sr2ref="cryp2o/shash.c#L120" id="L1202 clas2="line" name=" ref="+code=shash" class="sr2ref="+cod2/a> = alignmask 2sc" class2"sref">desc, " class="sref">crypto_shaline"walh_fir="ur" class="line" name=line"walh_fir=";
));
);
"erralignmask)]
  2     if (crypto_s>->" class="sref">crypto_shaline"walh_donalg());
ass="line" name="nbyte"+code=out" clasnbyte"ef">)de=u8" class="sref">u8 2cshash_al2#L124" id="L124" class="2ine" 2ame="L124"> 12crypto_s>->" class="sref">crypto_shascryptc#L95" id="L95" classpto_shascryptc#L95"}
.pto/shash.c#L76h.c#L107" id="L107" class="line" name="L107"nbyte"+code=out" clasnbyte"ef">)ref">alignmask)]
        memcpy(<2 href="+c2de=out" class="sref">out2/a>, 22*ref="+code=shash" class="sr2r"crypto/2 href="crypto/shash.c#L127" id2"L127"="sref">update(key, keylen);
)ref">alignmask)]
buf, 0, alignbuffer }
u8 2eturn e2r;8" id="L68" class="line" na2fm" class2"sref">tfmdor.ato/sh2sh" c23f="+code=PTR_y" class="sref">key, }href="crypto/shrequr" class="linereq"+co, rypto_shash_alig"srearequs="a hrd="L132" class=g"srearequs="a hr;
alignmask)]
  2" class="sref">key,
2  34  2     23"L65">  65shash_a2lgcrypto_type }
u8 2ehref="+c2signed long shash_desc *((data 131}
)ref">alignmask)]
  324="L79unaligned_len" class="sref"2cclass="s2, *alignbuffer;
 }
 * 1"="L132" class="line" name="L132"> 1"de=u8" class="sref">u8 2cturn ke2ylen<24;8" id="L68" class="line" na2ef="+code2=buffer" class="sref">bu2ffer<24f="+code=PTR_hash *c> *ref="+code=shash" class="sr2ccode=key2 cry ref="+code=shash" class="sr2   if (!<2a href="+code=buffer" cl2ass="24"L65">  65dsnbyte"+code=out" clasnbyte"ef">" class="sref">crypto_shaline"walh_fir="ur" class="line" name=line"walh_fir=";
));
);>  65u8 *)!ne" name="L107"nbyte"+code=out" clasnbyte"ef">)>  652emcpy((data 131}
)ref">alignmask)]
259"> 109keylen);
crypto_sdo 8" id="L68" class="line" na2ass="sref2">kzfree(shash_align_buffer_sizenbyte"+code=out" clasnbyte"ef">" class="sref">crypto_shaline"walh_de="ur" class="line" name=line"walh_de=";
));
) ?" id="L68" class="line" na2aturn shash_al>shash_align_buffer_size" name="L131"> 1etur" class="line" name="L131"> 1up}
.pto/shash.c#L76h.c#L107" id="L107" class="line" name="L107"nbyte"+code=out" clasnbyte"ef">ef">crypto_shash_setkey2      ret2urn shash_desc *shash_al>shash_align_buffer_sizerequr" class="linereq"+co="crypto/shash.c#L76resul"ur" class="lineresul") ref">unaligned_len);
crypto_shash *crypto_shascryptc#L95" id="L95" classpto_shascryptc#L95"}
.pto/shash.c#L76h.c#L107" id="L107" class="line" name="L107"nbyte"+code=out" clasnbyte"ef">)ref">analigned_len);
key<25me="L124"> 12crypto_s>->" class="sref">crypto_shaline"walh_donalg());
ass="line" name="nbyte"+code=out" clasnbyte"ef">)ref">analigned_len);
2  55<2a>            } while/a>->"erranaligned_len);
shash_a2lg  2       un2signed long dataref="+code=shash" class="sr2a> = key, keylen);
)ref">analigned_len);
2hash_setkey_unaligned(tfm,  }
u8 2=     ret2->shash_desc *tfm2, alignmask =  *out)
ref="+code=crypt hrd="L132" class= hr" class="sref">crypto_shaa"srea hrd="L132" class=pto_shaa"srea hr;
crypto/inter2akey<26                         unsigned int  1"="L132" class="line" name="L132"> 1"">crypto_shash_alig"srearequs="a hrd="L132" class=g"srearequs="a hr;
EXP2ORT_S26mcpy" class="sref">memcpy(<2tatic inline 2"> 1"="L132" class="line" name="L132"> 1"="crypto/shash.c#L76" id="L76" class="line" n">cref="+code=crypt hrd="L132" class= hrref="+code=shash" class="sr2ss="sref"2>len,
 1"">crypto_shash_alirequr" class="linereq"+co="crypto/shash.c#L76basalg( 1"ref="+code=shash" class="sr2me="L68">2  68                2     279"> 109__alignof__<2/a>(<27date(}href="crypto/shrequr" class="linereq"+co, rypto_shash_alirypto/shash.c#L122" id="L12aref="+code=shash" class="sr2/a> buffer);
<2ref="+cod2e=aligned" class="sref">2align27sk" class="sref">alignmask 2(struct <2a href="+code=shash_desc2" cla27sref">err;
}
 * 1"="L132" class="line" name="L132"> 1"de=u8" class="sref">u8 2ef="+code2=data" class="sref">data2,27a href="crypto/shash.c#L74" id="2L74" clas2s="line" name="L74">  742 27                         unsigned incatterli="ur" class="line=catterli="e="L132"> 1"="L132" csef="+code=keylen"g> 1"">crypto_shash_alirequr" class="linereq"+co="crypto/shash.c#L76srid="L132" class="rc> 1"ref="+code=shash" class="sr2mORT_SYMB2href="+code=crypto_shash2" cla27*err;
 1"">crypto_shash_alisef="+code=keylen"g> 1"="crypto/shash.c#L76off 127
shash_a2lgerr;
" class="sref">cryrequr" class="linereq"+co="crypto/shash.c#L76nbyte"+code=out" clasnbyte"ef">ref="+code=shash" class="sr2       un2signed long PTR_ALIGN(&u2/shash.c#2L79" id="L79" class="lin2e" na289"> 1092  80<2a>            ef">>->"elt;
 1"="crypto/shash.c#L76lengt"+code=out" claslengt""+co,sc_shash_aliGN")keylen);
;
 1"dh f="crypto/shash.c#L74" id="2shash_alvoidref">buf);
1sh.c#L107" id="L107" class=""+code=ubuf" class="sref">u2/ef="+cod2pto/shash.c#L82" id="L822" cla28sk" class="sref">alignmask 2+code=buf2" class="sref">buf =2 shash_descbuf);
1sh.c#L107" id="L107" class="" class="sref">crykmap_atomiid="L132" class=kmap_atomiiref=keylen);
);
 1"dhref="+code=shash" class="sr2hf="+code2>[0], crypto_shasclass="sref">PTR_ALIGN(&crypto_sha id="L95" classpto_shascryptlass="}

ef">crypto_shash_setkey2);
 12crypto_sssssssssssssssssssssssssss class="line" nrequr" class="linereq"+co="crypto/shash.c#L76resul"ur" class="lineresul")ref">alignmask)]
crykunmap_atomiid="L132" class=kunmap_atomii}
alignmask)]
shaspto_shayielef">crypto_shashpto_shayiele}
 1")ref">alignmask)]
alignmask)]
29="L79">  79      class="sref">PTR_ALIGN(&crypinime="L42">  42      "L131"inim}
unaligned_len);
2pdate(      class="sref">PT=cryptacryptd="etur" class="line=cryptacryptd="et}href="crypto/shrequr" class="linereq"+co, rypto_shash_alirypto/shash.c#L122" id="L12aref="+code=shash" class="sr2ta href="2"line" name="L91">  91   29ash_setkey_unaligned(m2emset(key(&u2 href="cr2ypto/shash.c#L92" id="L922" cl29 class="sref">setkey(data + key, keylen);
aref="+code=shash" class="sr2t;
,   65una29>crypto_type }
u8 2t)
shash_desc * *alignmask =  *out)
ref="+code=crypt hrd="L132" class= hr" class="sref">crypto_shaa"srea hrd="L132" class=pto_shaa"srea hr;
  30                        unsignent  1"="L132" class="line" name="L132"> 1"">crypto_shash_alig"srearequs="a hrd="L132" class=g"srearequs="a hr;
alignbuffershash_alg3/a> *30class="sref">2"> 1"="L132" class="line" name="L132"> 1"="crypto/shash.c#L76" id="L76" class="line" n">cref="+code=crypt hrd="L132" class= hrref="+code=shash" class="sr3      uns3gned long  1"">crypto_shash_alirequr" class="linereq"+co="crypto/shash.c#L76basalg( 1"ref="+code=shash" class="sr3   58 3 5a href=3+s="sref">data + }href="crypto/shrequr" class="linereq"+co, rypto_shash_alirypto/shash.c#L122" id="L12aref="+code=shash" class="sr3e=shash_u3date_unaligned" class="s3ef">s3ash_up="sref">update(desc3 memcpy(<3ref">shas3-> }
buf);
1sk)]
6emset" class="sref">memsetshas3}href="crypto/shg"srearequs="a hrd="L132" class=g"srearequs="a hr;
)]
6emset" class="srerypto/shash.c#L12" id="L12"3_SYMBOL_G3L" class="sref">EXPORT_S3MBOL_31s" class="sref">ds);
desc3/a>, 31ref="to_type }
buf);
1si107        rihref="+code=u8" class="sref">u8<3_shash_desc *alignmask =  *out)
ref="+code=crypt hrd="L132" class= hr" class="sref">crypto_shaa"srea hrd="L132" class=pto_shaa"srea hr;
shash_alg3/a> *31                         unsigned int  1"="L132" class="line" name="L132"> 1"">crypto_shash_alig"srearequs="a hrd="L132" class=g"srearequs="a hr;
memcpy(<3lass="sre3">ubuf[inline 2"> 1"="L132" class="line" name="L132"> 1"="crypto/shash.c#L76" id="L76" class="line" n">cref="+code=crypt hrd="L132" class= hrref="+code=shash" class="sr3="crypto/3hash.c#L118" id="L118" c3ass="31L127" class="line" name="L12rypto/shash.c#L122" id="L12="crypto/shash.c#L76flag"+code=out" clasflag"> 1"">crypto_shash_alirequr" class="linereq"+co="crypto/shash.c#L76basalg( 1"ref="+code=shash" class="sr3code=buf"3class="sref">buf = <3 href329"> 109(}
        rihref="ref="+code=shash" class="sr3cshash_al3o/shash.c#L120" id="L1203 clas32fer" class="sref">buffer);
<3ref="+cod3/a> = alignmask 3sc" class3"sref">desc,       exit "L131"opstasyncur" class="line>      exit "L131"opstasync}
alignmask 3s5a href=3     if (lenref="+code=crypt hrd="L132" class= hr" class="sref">crypto_sha" ca hrd="L132" class=pto_sha" ca hr}
  58 31+code=de3126        memcpy(<3 href="+c3de=out" class="sref">out3/a>, 32">inline 2"> 1"="L132" cpto_shafreent }ref="+code=crypt hrd="L132" class= hr="line" name="L58">  58 31"crypto/3 href="crypto/shash.c#L137" id3"L127"="sref">update( 109buf, 0, err;
}
alignmask 3"crypto/s3ash.c#L130" id="L130" cl3ss="l33class="sref">shash_desc *e33 href="+code=u8" class="sref">u8 *{
keylen)
{
cryash.c#L58" id="L58" class="crypto/shash.c#L76__crth 56{
tfmdor.ato/sh3sh" c33f="+code=PTR_            unsigned int keylen)
cry__cr     "L131" 56{
  58 3 23  3" class="sref">key,
3alignmask =  *len)
crypto_shash_ali__cr     a"srea e="ur" class="line__cr     a"srea e="}
  58 3lass="lin3e" name="L34">  34  3     33                               unsigned int lenref="+code=crypt hrd="L132" class= hr" class="sref">crypto_sha" ca hrd="L132" class=pto_sha" ca hr}
  58 3e=shash_a3lg" class="sref">shash_a3lgcrypto_shash *len)
l"line" name="L58">  58 3ehref="+c3signed long   3_alignmas3k((!ne" name="L107"" classmod_g127
alignmask 3" id="L393" class="line" name="L393">  334="L79">  79      y" clas-href="crypto/shEAGAIN{
l"line" name="L58">  58 3cclass="s3, *alignbuffer;
2"> 1"="L132" ct l" class="sref">crypto_shacreate ash.c#L58" id="L58pto_shacreate ash;
  58 3cturn ke3ylen<343cpy(
ldh f="crypto/shash.c#L74" id="3ef="+code3=buffer" class="sref">bu3ffer<34="sref">shash_descbuf);
1s" classmod_p)]
6emset" cl" classmod_p{
  58 3ccode=key3 crypto_shasy" clas ld"line" name="L58">  58 3cass="lin3a href="+code=buffer" cl3ass="34             ="sref">update(memcpy(<3/href="+c3class="sref">u8 *)" class="sref">cryt l"line" name="L58">  58 3/alignmas3="+code=memcpy" class="s3ref">34L127" class="line" name="L12ash.c#L58" id="L58" class="crypto/shash.c#L76exit.c#L58" id="L58exitf">l" class="sref">crypto_shaexit "L131"opstasyncur" class="line>      exit "L131"opstasync"line" name="L58">  58 3t;359"> 109keylen);
crypto_s)
  42" class="sref">cryt   42"line" name="L58">  58 3t;
kzfree(2"> 1"="L132" ccr"ur" class="line> 2> 1"="crypto/shash.c#L76c#L95" id="L95" classc#L95"" class="sref">cryt "line" name="L58">  58 3tturn cryt "line" name="L58">  58 3tf="+code3urn shashline" name="L12cr"ur" class="line> 2> 1"="crypto/shash.c#L76d="etur" class="lined="et" class="sref">cryt "line" name="L58">  58 3tcode=key3a href="+code=crypto_sha3sh" c35ss="sref">cryline" name="L12cr"ur" class="line> 2> 1"="crypto/shash.c#L76lass="ur" class="linelass="" class="sref">cryt "line" name="L58">  58 3tass="lin3"+code=key" class="sref"3>key<35"L65">  653  55<3a>            ef">
  52=lass="sref">alignmask 3(href="+c3lg" class="sref">shash_a3lgshaspt"ur" class="line> 2> 1"="crypto/shash.c#L76shash.c#L64" id="L64"=L52">  52" class="sref">cryt "line" name="L58">  58 3talignmas3signed long 
=lass="sref">alignmask 3a> =   79      class="sref">PTpt"ur" class="line> 2> 1"="crypto/shash.c#L76expor"ur" class="lineexpor"" class="sref">cryt "line" name="L58">  58 3            ef">>->=lass="sref">alignmask 3a;
36class="sref">shash_align_buffer_sizecr"ur" class="line> 2> 1"="crypto/shash.c#L76impor"ur" class="lineimpor"" class="sref">cryt "line" name="L58">  58 3tfm, alignmask 3=     ret3->shashline" name="L12cr"ur" class="line> 2> 1"="crypto/shash.c#L76reqsh_alg(" csh_aof}
(}
ld"line" name="L58">  58 3="+code=t3fm" class="sref">tfm3, err)
crypto/inter3akey<36 href="+code=       0ref">alignmask)]
EXP3ORT_S36code=="sref">update(  3ss="sref"3>len,
 }
len)
  54int crypto_shash_setkey3me="L68">3  68                3     37="L79">  79                     a href="+code=tfm" class="sref">tfm, const u8 3gnof__" c3lass="sref">__alignof__<3/a>(<37date            unsigned int  1"="L132" classtur" class="linelasstf">l" class="sref">crypto_sha"srea hrhref="+code=len" class"srea hr}
  58 3ref="+cod3e=aligned" class="sref">3align37 href="+code=u8" class="sref">u8 1"="L132" class="line" name="L132"> 1"">c32"> 1"="L132" classtur" class="linelasstf">l"line" name="L58">  58 3r     ret3a href="+code=shash_desc3" cla37ass="line" name="L58">  58 3ef="+code3=data" class="sref">data3,37ine" name="L1               unsigne" name="L131"c#L52" id="L52" class="line" name="L52">  52<2"> 1"="L132" class="line" name="L132"> 1"="crypto/shash.c#L76" id="L76" class="line" n>
  63        return   743 37sh_up="sref">update(memcpy(<3matic shash_a3lg   42}
 1"="L132" ch2" id="L132" class=l132"> 1"de=u8" class="sref">u8 3       un3signed long                         unsignent  1"="L132" classtur" class="linelasstf">l" class="sref">crypto_sha"srea hrhref="+code=len" class"srea hr}
 1"="crypto/shash.c#L76" id="L76" class="line" nhref="+code=shash" class="sr3id="L80" 3class="line" name="L80">3  80<3a>            u8" class="sref">u8 1"="L132" class="line" name="L132"> 1"">c32"> 1"="L132" classtur" class="linelasstf">l"line" name="L58">  58 3 1"">crypto_shash_alih2" id="L132" class=l132"> 1"="crypto/shash.c#L76flag"+code=out" clasflag"> 1"ref="+code=shash" class="sr3+code=buf3" class="sref">buf =3   58 3hf="+code3>[0],   42      "L131"inim}
update(memcpy(<3hatic  }
 1"="L132" ch2" id="L132" class=l132"> 1",shash * 1"="L132" csef="+code=keylen"g> 1"ef">crypto_shash_setkey3h      un3               63        ef="+code=u8" class="sref">u8 3  39+code8" id="L68" class="line" na3t;39>            u8" class="sref">u8 1"="L132" classtur" class="linelasstf">l" class="sref">crypto_sha"srea hrhref="+code=len" class"srea hr}
 1"="crypto/shash.c#L76" id="L76" class="line" nhref="+code=shash" class="sr3ta href="3"line" name="L91">  91   39class="sref">            unsigned int  1"="L132" class="line" name="L132"> 1"">c32"> 1"="L132" classtur" class="linelasstf">l"line" name="L58">  58 3="sref">m3emset(u8 *c> *ref="+code=shash" class="sr3 href="cr3ypto/shash.c#L92" id="L932" cl39="sref">shash ref="+code=shash" class="sr3data" cla3ss="sref">data + err)
" class="sref">crypto_shaline"walh_fir="tcompatref="+code=tfm" class=line"walh_fir="tcompat}
 1", a>));
ass="line" name="sef="+code=keylen"g> 1"ee=tfm" class="sr">  63        ef="+codref="+code=shash" class="sr3druct una39"L86" class="line">->"err;
" class="sref">cry class=line"walh_donalg());
ass="line" name="nbyte"+code=out" clasnbyte"ef">)de=u8" class="sref">u8 3 atic shasnbyte"+code=out" clasnbyte"ef">" class="sref">crypto_shascryptc#L95" id="L95" classpto_shascryptc#L95"}
.pto/shash.c#L76h.c#L107" id="L107" class="line" name="L107"nbyte"+code=out" clasnbyte"ef">)ref">analigned_len);
 *analigned_len);
  40                            unsignenbyte"+code=out" clasnbyte"ef">ref="+code=shash" class="sr4ruct ds);
shash_alg4/a> *40ash_setkey_unaligned( }
 1"="L132" ch2" id="L132" class=l132"> 1",slass="line" name="L54">  54int memsetshash_desc *data + alignmask =  1"="L132" classtur" class="linelasstf">l" class="sref">crypto_sha"srea hrhref="+code=len" class"srea hr}
 1"="crypto/shash.c#L76" id="L76" class="line" nhref="+code=shadesc *, s40"L65">  65desc4  131}32"> 1"="L132" classtur" class="linelasstf">l, rypto_shash_alik)]
6emset" class="srerypto/shash.c#L12" id="L12"4ref">shas4->ds);
shas4analigned_len);
}
 1"="L132" ch2" id="L132" class=l132"> 1",shash * 1"="L132" csef="+code=keylen"g> 1"ef">crypto_shash_setkey4_SYMBOL_G4L" class="sref">EXPORT_S4MBOL_41date(               a href="+code=tfm" class="srnbyte"+code=out" clasnbyte"ef">eslass="line" name="L54">  54int memsetshash_desc *desc4/a>, 41 href="+code=de=shash">err;
 1"">crypto_shash_alisef="+code=keylen"g> 1"="crypto/shash.c#L76off 127
shash u4_5a href=4gned long err)
shash_alg4/a> *41             ef">>->"elt;
 1"="crypto/shash.c#L76lengt"+code=out" claslengt""+co,sc_shash_aliGN")keylen);
;
 1"dh f="crypto/shash.c#L74" id="4_+code=de4>        unsigned int alignmask =  1"="L132" classtur" class="linelasstf">l" class="sref">crypto_sha"srea hrhref="+code=len" class"srea hr}
 1"="crypto/shash.c#L76" id="L76" class="line" nhref="+code=shadesc *ubuf[ 1"="L132" class="line" name="L132"> 1"">c32"> 1"="L132" classtur" class="linelasstf">l"line" name="L58">  58 4="crypto/4hash.c#L118" id="L118" c4ass="41mcpy((buf);
1sh.c#L107" id="L107" class=""+code=ubuf" class="sref">u4code=buf"4class="sref">buf = <4 href429"> 109(line" name="L12rypto/shash.c#L122" id="L12="crypto/shash.c#L76flag"+code=out" clasflag"> 1"">crypto_shash_alih2" id="L132" class=l132"> 1"="crypto/shash.c#L76flag"+code=out" clasflag"> 1"ref="+code=shash" class="sr4cshash_al4o/shash.c#L120" id="L1204 clas42ash_setkey_unaligned(shash_alf">buf);
1sh.c#L107" id="L107" class="" class="sref">crykmap_atomiid="L132" class=kmap_atomiiref=keylen);
);
 1"dhref="+code=shash" class="sr4sc" class4"sref">desc, shash_descbuf);
1sR_ALIGN(&crypto_sha id="L95" classpto_shascryptlass="}

eslass="line" namk)]
6emset" class="srerypto/shash.c#L12" id="L12"4s5a href=4     if (crypto_shasclass="sref">PTkunmap_atomiid="L132" class=kunmap_atomii}
alignmask)]
 12crypto_s>->crypto_shashpto_shayiele}
 1")ref">alignmask)]
        )]
6emset" class="srref">alignmask)]
out4/a>, 42">inline ass="sref">ds);
analigned_len);
buf);
1sR_ALIGN(&  42}rypto_shash_alih2" id="L132" class=l132"> 1")ref">alignmask)]
buf, 0,             ef">>->memsetshash_algotoslass="line" namk)]
6emset" class="srref">alignmask)]
e43sk" class="sref">alignmask 4fm" class4"sref">tfmdor.ato/sh4sh" c43="sref">shashline" name="L12R_ALIGN(&}2"> 1"="L132" ch2" id="L132" class=l132"> 1",slass="line" namsef="+code=keylen"g> 1"ee=tfm" class="srnbyte"+code=out" clasnbyte"ef">)ref">analigned_len);
  4" class="sref">key,
4>->memset  34  4     43me="L124"> 12crypto_sgotoslass="line" namk)]
6emset" class="srref">alignmask)]
shash_a4lgmemcpy(<4ehref="+c4signed long inline 2"> 1"="L132" cR_ALIGN(&}2"> 1"="L132" ch2" id="L132" class=l132"> 1",slass="line" namk)]
6emset" class="srerypto/shash.c#L12" id="L12"4_alignmas4k(analigned_len);
  344="L79lass="line" namk)]
6emset" class="srref">unaligned_len);
, *u4>;
buffer);
<4cturn ke4ylen<44sk" class="sref">alignmask 4ef="+code4=buffer" class="sref">bu4ffer<44s="lito_typevoidr }
alignmask 4ccode=key4  1"="L132" classtur" class="linelasstf">l" class="sref">crypto_sha" ca hrd="L132" class=pto_sha" ca hr}
  58 4/shash.c#4L45" id="L45" class="lin4e" na44="sref">crypto_shash * 1"="L132" class="line" name="L132"> 1"">c32"> 1"="L132" classtur" class="linelasstf">l"line" name="L58">  58 4/href="+c4class="sref">u8 *)  4/alignmas4="+code=memcpy" class="s4ref">44L127" class="line" name="L12pto_shafreent }
  58 4t;45             f">buf);
1skzfreed="L132" class=kzfree}
  58 4tclass="s4">keylen);
ds);
kzfree(}
alignmask 4tf="+code4urn shash_desc *alignmask = ca>));
l"line" name="L58">  58 4tass="lin4"+code=key" class="sref"4>key<45                               unsigned in 56{
keylen)
{
cryash.c#L58" id="L58" class="crypto/shash.c#L76__crth 56{
4  55<45="sref">crypto_shash *keylen)
cry__cr     "L131" 56{
  58 4(href="+c4lg" class="sref">shash_a4lg 1"="L132" classtur" class="linelasstf">l" class="sref">crypto_sha" ca hrd="L132" class=pto_sha" ca hr}
  58 4talignmas4signed long alignmask =  *out)
     unsigned int                         unsignent  1"="L132" class="line" name="L132"> 1"ref="+code=shash" class="sr4aclass="s4crypto/shash.c#L60" id="4L60" 46er" class="sref">alignbuffer46class="sref">ef">!ne" name="L107"" classmod_g127
alignmask 4tfm, shash_aly" clas-href="crypto/shEAGAIN{
l"line" name="L58">  58 4=     ret4->  58 4="+code=t4fm" class="sref">tfm4, cryline" name="L12nt crypto_shacreate ash.c#L58" id="L58pto_shacreate ash;
  58 4=ash.h" c4aass="fref">crypto/inter4akey<46             ef">>->ldh f="crypto/shash.c#L74" id="4PORT_SYMB4OL_GPL" class="sref">EXP4ORT_S46"L86" class="line" nane" name="L107"" classmod_p)]
6emset" cl" classmod_p{
  58 4tatic ld"line" name="L58">  58 4ss="sref"4>len,
ds);
4  68                4     479"> 109__alignof__<4/a>(<47ref">crypto_s)
 1"">cf">buf);
1skmalloid="L132" class=kmalloi}
h_aof}32"> 1"="L132" class="line" name="L132"> 1") +r;
}
ldef">crypto_shash_setkey4/a> shash_alrypto_s)
ld"line" name="L58">  58 4ref="+cod4e=aligned" class="sref">4align47 href="+code=ef">!ne" name="L107"lass="line" name="L132"> 1") f="crypto/shash.c#L74" id="4r     ret4a href="+code=shash_desc4" cla47="sref">shash_descbuf);
1s" classfreent }
ld"line" name="L58">  58 4ef="+code4=data" class="sref">data4,47ss="sref">crypto_shasy" clas-href="crypto/shENOMEM{
l"line" name="L58">  58 4L74" clas4s="line" name="L74">  744 47             ="sref">update(memcpy(<4matic shash_a4lgl" class="sref">crylass="line" name="L132"> 1"ref="+code=shash" class="sr4       un4signed long c     unsigned int buf);
1sash.c#L58" id="L58" class="crypto/shash.c#L76exit.c#L58" id="L58exitf">l" class="sref">crypto_shaexit "L131"opstcompatref="+code=tfm" class=exit "L131"opstcompatref="+code=shash" class="sr4/nof__" c4class="line" name="L80">4  80<48er" class="sref">alignbuffer2"> 1"="L132" ccr"ur" class="line> 2> 1"="crypto/shash.c#L76inime="L42">  42" class="sref">cryt   42ref="+code=shash" class="sr4/ef="+cod4pto/shash.c#L82" id="L824" cla48 href="+code=line" name="L12cr"ur" class="line> 2> 1"="crypto/shash.c#L76c#L95" id="L95" classc#L95"" class="sref">cryt ref="+code=shash" class="sr4/     ret4" class="sref">buf =4 shashline" name="L12cr"ur" class="line> 2> 1"="crypto/shash.c#L76d="L131" class="line> 131"to_shash_alg" clas=cryptcompat/d="L131" class="line=cryptcompat/d="L1ref="+code=shash" class="sr4/f="+code4>[0], cryline" name="L12cr"ur" class="line> 2> 1"="crypto/shash.c#L76lass="ur" class="linelass="" class="sref">cryt ref="+code=shash" class="sr4/74" clas4f="crypto/shash.c#L84" i4d="L8486s="sref">cryline" name="L12cr"ur" class="line> 2> 1"="crypto/shash.c#L76shash.c#L64" id="L64"=L52">  52" class="sref">cryt ref="+code=shash" class="sr4/ORT_SYMB4a href="crypto/shash.c#L486" i48mcpy" class="sref">memcpy(<4hatic inline 2"> 1"="L132" cpt"ur" class="line> 2> 1"="crypto/shash.c#L76lass="sh_alg(cryhref="+code=keylens="sref="crypto/shash.c#L76lass="sh_alg(analigned_len);
49                    0ref">alignmask)]
49s" class="sref">ds);
  91   49ash_setkey_unaligned(m4emset(}
alignmask 4 href="cr4ypto/shash.c#L92" id="L942" cl49ss="s="sref">shash_desc *data + >->));=ef="+code=cryptCRYPTO_ALG_TYPE_MASKref="+code=tfm"CRYPTO_ALG_TYPE_MASK> 1") f="crypto/shash.c#L74" id="4t;
, unaligned_len);
una49"L86" class="line"                  unsignepto_shainim "L131"opstcompatref="+code=tfm" class=inim "L131"opstcompat}
  58 4 atic inline ass="sref">ds);
 *analigned_len);
  50                    -href="crypto/shEINVALhref="+code=lenEINVAL  52ref="+code=shash" class="sr5ruct ds);
shash_alg5/a> *50ash_setkey_unaligned(err;
(}
keylen)
(shash_descalignmask 5 5a href=5+s="sref">data + s506k" class="srewitch">>->));=ef="+code=cryptCRYPTO_ALG_TYPE_MASKref="+code=tfm"CRYPTO_ALG_TYPE_MASK> 1") f="crypto/shash.c#L74" id="5"+code=de5c" class="sref">desc5 unaligned_len);
shas5->  58 5=9f">shas5ds);
 109EXPORT_S5MBOL_51date(alignmask)]
buffer);
<5ref="+cod5=desc" class="sref">desc5/a>, 51sk" class="sref">alignmask 5_err;
}
alignmask 5_5a href=5gned long shash_alg5/a> *51                               unsigned int len           unsi cry__cr     "L131" e="ur" class="line__cr     "L131" e="}
  58 5_+code=de5>        unsigned int memcpy(<5lass="sre5">ubuf[inline 2"> 1"="L132" c (to_shash_alg" class="sref">cryp 56{
 1")="crypto/shash.c#L76lid=sh_alg("line" name="L58">  58 5_9f">shas5hash.c#L118" id="L118" c5ass="51mcpy(alignmask)]
buf = <5 href529"> 1class="sref">buffer);
<5uf[0]5 alignbuffererr;
(}
keylen)
alignmask 5ref="+cod5/a> = desc, shash               unsignehref="+code=keylens="sref="crypto/shash.c#L76cracctxsh_alg(alignmask)]
buffer);
<5ushash_al5#L124" id="L124" class="5ine" 52"L65">  65  65out5/a>, 52L87" to_type }
keylen)
{
keylen)
alignmask 5r9f">shas5 href="crypto/shash.c#L157" id52.c#L68" id="L68" class="line" na5hash.c#L159" id="L129" class="line5 name53                        unsignecrypto/repor"  buf, 0,             u8" class="sref">u8keylen)
cry__cr     "L131" 56{
e53 href="+code=line" name="L12snpr"%s""a>(tfmdor.ato/sh5sh" c53="sref">shashline" name="L12r (cryhref="+code=keylens="sref="crypto/shash.c#L76"+acblocksh_alg(key,
5cryline" name="L12r cryshref="+code=keylen"s="sref="crypto/shash.c#L76lass="sh_alg(  34  5     53"L65">  65shash_a5lg            ef">
());
 1"==lass="sref">alignmask 5_alignmas5k((((  354                    0ref">alignmask)]
alignbuffer;
(unaligned_len);
ke5ylen<543                   -href="crypto/shEMSGSIZE+code=out" clasEMSGSIZE  52ref="+code=shash" class="sr5"c" class5=buffer" class="sref">bu5ffer<54s="liclass="sref">buffer);
<5ccode=key5 buffer);
<5cshash_al5a href="+code=buffer" cl5ass="54     to_type }
keylen)
{
keylen)
alignmask 5/shash.c#5L45" id="L45" class="lin5e" na54="sre8" id="L68" class="line" na5/href="+c5class="sref">u8 *)54L127"class="sref">buffer);
<5t;55     #endiflass="sref">buffer);
<5tclass="s5">keylen);
alignbufferkzfree(      tfm" cshowur" class="line"+code=tfm" cshow}
keylen)
{
keylen)
alignmask 5tturn crypto_shashunusee> 1"==ref="+code=shash" class="sr5tf="+code5urn       tfm" cshowur" class="line"+code=tfm" cshow}
keylen)
{
keylen)
key<55                               unsint keylen)
cry__cr     "L131" 56{
5  55<55mcpy" class="sref">memcpy(<5(href="+c5lg" class="sref">shash_a5lginline 2"> 1"="L132" c=eq_pr"typ"h/a>("blocksh_a(buf);
1s=eq_pr"lass="sh_aa h: %u\n"ds);
56ash_setkey_unaligned(tfm, shash.pto/shash.c#L76ctxsh_alg(crypctxsh_alg(eetkey_unaligned(tfm5, cry.pto/shash.c#L76ex"sh_alg(to_shash_alg" class="sref">crypex"sh_alg(eetkey_unaligned(crypto/inter5akey<56             .pto/shash.c#L76inime="L42">  42" class="sref">cry class=inim "L131"opslg(eetkey_unaligned(EXP5ORT_S56"L86" class=".pto/shash.c#L76inim=ash.c#L58" id="L58inim ashto_shash_alg" class="sref">crypinim ash.c#L58" id="L58pto_shatfm" cinim asheetkey_unaligned((len,
crypshowur" class="line"+code=tfm" cshoweetkey_unaligned(5  68                5     57     #endiflass="sref">buffer);
<5gnof__" c5lass="sref">__alignof__<5/a>(<57ref">crypto_s.pto/shash.c#L76repor"ur" class="linerepor"to_shash_alg" class="sref">cryprepor"ur" class="line"+code=tfm" crepor"eetkey_unaligned(.pto/shash.c#L76mashcleaALIGN(&to_~lass="line" namCRYPTO_ALG_TYPE_MASKref="+code=tfm"CRYPTO_ALG_TYPE_MASK> 1"eetkey_unaligned(5align57 href="+code=.pto/shash.c#L76mash 127
 1"eetkey_unaligned(shash.pto/shash.c#L76ayp" id="L95" classtyp"lassto_shash_alg" clasCRYPTO_ALG_TYPE_SHASHref="+code=tfm"CRYPTO_ALG_TYPE_SHASH> 1"eetkey_unaligned(data5,57ss="sref">cry.pto/shash.c#L76ashsh_alg(}
leslass="line" nambasalg((  745 57     }ref="+code=shash" class="sr5mORT_SYMB5href="+code=crypto_shash5" cla57mcpy" class="sref">memcpy(<5matic shash_a5lglen           unsicrypto/s=locnt }constschar">keylen)
leslass="line" nameash.c#L130" classc3class=ef="+code=cryptayp" id="L95" classtyp"lasseetkey_unaligned(alignmask 5/shash.c#5L79" id="L79" class="lin5e" na58     f="crypto/shash.c#L74" id="5/nof__" c5class="line" name="L80">5  80<58date(lesa>));
buffer);
<5/ef="+cod5pto/shash.c#L82" id="L825" cla58 hrefhref="crypto/shEXPORT_SYMBOL_GPLhref="+code=lenEXPORT_SYMBOL_GPL;
=ref="+code=shash" class="sr5<     ret5" class="sref">buf =5   58 5/f="+code5>[0],  }
keylen)
crypto_shash *keylen)
(ca>));
(  5/      un5             
(  5  59             hhhhlass="line" namhref="+code=keylens="sref="crypto/shash.c#L76lid=sh_alg(t"crys   5 nof__" c5="+code=update" class="s5ref">59date(  91   59class="sref">shash_al       -href="crypto/shEINVALhref="+code=lenEINVAL  52ref="+code=shash" class="sr5="sref">m5emset(alignmask 5 href="cr5ypto/shash.c#L92" id="L952" cl59="sref">shashline" name="L12basalg());
data + t">));o_~lass="line" namCRYPTO_ALG_TYPE_MASKref="+code=tfm"CRYPTO_ALG_TYPE_MASK> 1"ref="+code=shash" class="sr5=74" clas5d_len, cryline" name="L12basalg(t|o_shash_alg" clasCRYPTO_ALG_TYPE_SHASHref="+code=tfm"CRYPTO_ALG_TYPE_SHASH> 1"ref="+code=shash" class="sr5=ORT_SYMB5aligned_len" class="sref5">una59mcpy" class="sref">memcpy(<5 atic inline ef">!ne" name="L107"href="+code=keylens="sref="crypto/shash.c#L76finutur" class="linefinutsref=lass="srefshash" class="sr5/a> *((cryt  1"ref="+code=shash" class="sr6L98" id="698" class="line" name="L68">  60             ef">!ne" name="L107"href="+code=keylens="sref="crypto/shash.c#L76lass="ur" class="linelass="=lass="srefshash" class="sr6ruct (line" name="L12href="+code=keylens="sref="crypto/shash.c#L76lass="ur" class="linelass="" class="sref">cryt   91 *60class="sref">ef">!ne" name="L107"href="+code=keylens="sref="crypto/shash.c#L76expor"ur" class="lineexpor"=cf="crypto/shash.c#L74" id="6      uns6gned long shash_alf">buf);
1shref="+code=keylens="sref="crypto/shash.c#L76expor"ur" class="lineexpor"" class="sref">cryt  1"ref="+code=shash" class="sr6L4    uns6gpto/shash.c#L92" id="L96ask" 60="sref">shash_descbuf);
1shref="+code=keylens="sref="crypto/shash.c#L76impor"ur" class="lineimpor"" class="sref">cryt  1"ref="+code=shash" class="sr6L5    uns6gs="sref">data + crypto_shasclass="sref">PThref="+code=keylens="sref="crypto/shash.c#L76to_tesh_alg(t class="sref">cryhref="+code=keylens="sref="crypto/shash.c#L76lid=sh_alg("line" name="L58">  58 6 6a href=6+_len, s60             ="sref">update(desc6 !ne" name="L107"href="+code=keylens="sref="crypto/shash.c#L76shash.c#L64" id="L64"=L52">  52=lass="srefshash" class="sr6r8code=de6c href="+code=shash_desc6pdate60align_buffer_size" clne" name="L107"href="+code=keylens="sref="crypto/shash.c#L76shash.c#L64" id="L64"=L52">  52" class="sref">cryt "line" name="L58">  58 6 9code=de6cef="+code=data" class="6analigned_len);
alignmask)]
EXPORT_S6MBOL_61s" class="sref">ds);
desc6/a>, 61sk" c }
keylen)
shash_desc *alignmask = {
keylen)
(ca>));
(shash_alg6/a> *61              u6_+code=de6>        unsigned int memcpy(<6lass="sre6">ubuf[inline 2"> 1"="L132" cR_ALIGN(&}keylen)
u6_9code=de6hash.c#L118" id="L118" c6ass="61mcpy(
memsetbuf = <6 href62             hhhh            u6uf[0]6 alignbuffer{
u6uef="+cod6/a> = ds);
desc, )"+code=ubuf" class="sref">u6u5a href=6     if (u6ushash_al6#L124" id="L124" class="6ine" 62"L65" }
keylen)
out6/a>, 628                    {
u6u9code=de6 href="crypto/shash.c#L167" id62L127"class="sref">buffer);
<6hash.c#L169" id="L129" class="line6 name63 href="crypto/shEXPORT_SYMBOL_GPLhref="+code=lenEXPORT_SYMBOL_GPL;
)"+code=ubuf" class="sref">u6 class="s6ef">buf, 0, alignbuffer(}
keylen)
(e633lass="sref">shash_alllllllllllll
keylen)
=lass="srefshash" class="sr6 c" class6"sref">tfmdor.ato/sh6sh" c63ss="s="sref">shash_desc *key,
6cry u6"shash_al6e" name="L34">  34  6     63"L65">  65shash_a6lg            2"> 1"="L132" cR_ALIGN(&}a>));
="crypto/shash.c#L76href="+code=keylens="sref="+code=ubuf" class="sref">u6ehref="+c6signed long inline ef">
memset(((u6" id="L396" class="line" name="L396">  3649"> 109, *((=="+code=ubuf" class="sref">u6>;
buffer);
<6cturn ke6ylen<64 hrefhref="crypto/shEXPORT_SYMBOL_GPLhref="+code=lenEXPORT_SYMBOL_GPL;
u6>c" class6=buffer" class="sref">bu6ffer<64ass="line" name="L58">  58 6ccode=key6 (}
">keylen)
=lass="srefshash" class="sr6cshash_al6a href="+code=buffer" cl6ass="646s="sf="crypto/shash.c#L74" id="6/shash.c#6L45" id="L45" class="lin6e" na64>            2"> 1"="L132" c" classdrop_spawnlg(=="+code=ubuf" class="sref">u6>href="+c6class="sref">u8 *)inline 2"> 1"="L132" ckfreeur" class="linekfree;
=="+code=ubuf" class="sref">u6>alignmas6="+code=memcpy" class="s6ref">64L127"class="sref">buffer);
<6t;65 href="crypto/shEXPORT_SYMBOL_GPLhref="+code=lenEXPORT_SYMBOL_GPL;
(="+code=ubuf" class="sref">u6tclass="s6">keylen);
alignbufferkzfree((}
(">keylen)
(eetkey_unaligned(shash_alllllllllllll
keylen)
(shash_desc">keylen)
=lass="srefshash" class="sr6tcode=key6a href="+code=crypto_sha6sh" c65a href="crypto/shash.c#L74" id="6tass="lin6"+code=key" class="sref"6>key<65                            unsignepto_shainim "pawnsh.c#L130" classpto_shainim "pawns}a>));
());
(eetkey_unaligned(6  55<65"L86" class="line"                     a>));
u6thref="+c6lg" class="sref">shash_a6lginlclass="sref">buffer);
<6talignmas6signed long (="+code=ubuf" class="sref">u6a> =  109keylen)
{
{
keylen)
{
alignmask 6a;
66ash_sf="crypto/shash.c#L74" id="6tfm, 
keylen)
u6ac" class6->  58 6="+code=t6fm" class="sref">tfm6, ));
crypto/inter6akey<66                            unsigneIS_ERRref="+code=tfm"IS_ERR}keylen)
}keylen)
unaligned_len);
EXP6ORT_S66"L86" class="line"  
}keylen)
(inlclass="sref">buffer);
<6len,
)ref="+code=shash" class="sr6me="L68">6  68                6     679"> 109__alignof__<6/a>(<67ref">href="crypto/shMODULE_LICENSE+code=out" clasMODULE_LICENSE;
"GPL""Synchronous shash"graphic lass typ""6align67 href


The original LXR software by the=ef="+codehttp://sourceforge.net/projects/lxr">LXR communimysrefesthis experimental version by ef="+codemailto:lxr@claux.no">lxr@claux.nosref.
lxr.claux.no kindly hosted by ef="+codehttp://www.redpill-clapro.no">Redpill Llapro ASsrefesprovider of Llauxeconsult