Re: question about sha1 driver
avital sela <[email protected]> Tue, 22 Sep 2009 16:17:20 +0300
| Newsgroups | gmane.linux.cryptography,gmane.spam.detected |
|---|---|
| Message-ID | <[email protected]> |
--0015175cac2e1351c704742a6b5c Content-Type: text/plain; charset=ISO-8859-1 Hello, I've written a SHA1 driver for our custom HW running Linux 2.6.28.4. The driver passed all the SHA1 tests but kept failing at hmac(sha1-hw) test 3. During my debugging I added printk-s in the testmgr to also print successful tests. When I did that all the tests passed. All future encryption/decryptions (I set up a tunnel between the board and a server and ping-ed packets back and forth) were processed successfully by the driver. Attached below the output of the testmgr when setting up the tunnel (my driver registers with name sha1-hw and is implemented by "hw_SHA" kernel module ) and of /proc/crypto. Any ideas as to what could be the reason for the failure? Thanks, Avital Modified testmgr output: ================= alg: hash: Test 1 passed for sha1-hw alg: hash: Test 2 passed for sha1-hw alg: hash: Chunking test 1 Passed for sha1-hw alg: hash: setkey passed on test 1 for hmac(md5-generic): ret=0 alg: hash: Test 1 passed for hmac(md5-generic) alg: hash: setkey passed on test 2 for hmac(md5-generic): ret=0 alg: hash: Test 2 passed for hmac(md5-generic) alg: hash: setkey passed on test 3 for hmac(md5-generic): ret=0 alg: hash: Test 3 passed for hmac(md5-generic) alg: hash: setkey passed on test 4 for hmac(md5-generic): ret=0 alg: hash: Test 4 passed for hmac(md5-generic) alg: hash: setkey passed on test 5 for hmac(md5-generic): ret=0 alg: hash: Test 5 passed for hmac(md5-generic) alg: hash: setkey passed on test 6 for hmac(md5-generic): ret=0 alg: hash: Test 6 passed for hmac(md5-generic) alg: hash: setkey passed on test 7 for hmac(md5-generic): ret=0 alg: hash: Test 7 passed for hmac(md5-generic) alg: hash: setkey Passed on chunking test 1 for hmac(md5-generic): ret=0 alg: hash: Chunking test 1 Passed for hmac(md5-generic) alg: hash: setkey passed on test 1 for hmac(sha1-hw): ret=0 alg: hash: Test 1 passed for hmac(sha1-hw) alg: hash: setkey passed on test 2 for hmac(sha1-hw): ret=0 alg: hash: Test 2 passed for hmac(sha1-hw) alg: hash: setkey passed on test 3 for hmac(sha1-hw): ret=0 alg: hash: Test 3 passed for hmac(sha1-hw) alg: hash: setkey passed on test 4 for hmac(sha1-hw): ret=0 alg: hash: Test 4 passed for hmac(sha1-hw) alg: hash: setkey passed on test 5 for hmac(sha1-hw): ret=0 alg: hash: Test 5 passed for hmac(sha1-hw) alg: hash: setkey passed on test 6 for hmac(sha1-hw): ret=0 alg: hash: Test 6 passed for hmac(sha1-hw) alg: hash: setkey passed on test 7 for hmac(sha1-hw): ret=0 alg: hash: Test 7 passed for hmac(sha1-hw) alg: hash: setkey Passed on chunking test 1 for hmac(sha1-hw): ret=0 alg: hash: Chunking test 1 Passed for hmac(sha1-hw) alg: hash: setkey passed on test 1 for xcbc(aes-generic): ret=0 alg: hash: Test 1 passed for xcbc(aes-generic) alg: hash: setkey passed on test 2 for xcbc(aes-generic): ret=0 alg: hash: Test 2 passed for xcbc(aes-generic) alg: hash: setkey passed on test 3 for xcbc(aes-generic): ret=0 alg: hash: Test 3 passed for xcbc(aes-generic) alg: hash: setkey passed on test 4 for xcbc(aes-generic): ret=0 alg: hash: Test 4 passed for xcbc(aes-generic) alg: hash: setkey passed on test 5 for xcbc(aes-generic): ret=0 alg: hash: Test 5 passed for xcbc(aes-generic) alg: hash: setkey passed on test 6 for xcbc(aes-generic): ret=0 alg: hash: Test 6 passed for xcbc(aes-generic) alg: hash: setkey Passed on chunking test 1 for xcbc(aes-generic): ret=0 alg: hash: Chunking test 1 Passed for xcbc(aes-generic) alg: hash: setkey Passed on chunking test 2 for xcbc(aes-generic): ret=0 alg: hash: Chunking test 2 Passed for xcbc(aes-generic) alg: skcipher: Test 1 succeeded on encryption for cbc-aes-hw alg: skcipher: Test 2 succeeded on encryption for cbc-aes-hw alg: skcipher: Test 3 succeeded on encryption for cbc-aes-hw alg: skcipher: Test 4 succeeded on encryption for cbc-aes-hw alg: skcipher: Test 1 succeeded on decryption for cbc-aes-hw alg: skcipher: Test 2 succeeded on decryption for cbc-aes-hw alg: skcipher: Test 3 succeeded on decryption for cbc-aes-hw alg: skcipher: Test 4 succeeded on decryption for cbc-aes-hw output of /proc/crypto ================= name : authenc(hmac(sha1),cbc(aes)) driver : authenc(hmac(sha1-hw),cbc-aes-hw) module : kernel priority : 3300 refcnt : 3 selftest : passed type : aead async : yes blocksize : 16 ivsize : 16 maxauthsize : 20 geniv : <built-in> name : cbc(aes) driver : cbc-aes-hw module : kernel priority : 300 refcnt : 3 selftest : passed type : givcipher async : yes blocksize : 16 min keysize : 16 max keysize : 32 ivsize : 16 geniv : chainiv name : cbc(des3_ede) driver : cbc(des3_ede-generic) module : kernel priority : 0 refcnt : 1 selftest : passed type : blkcipher blocksize : 8 min keysize : 24 max keysize : 24 ivsize : 8 geniv : <default> name : cbc(des) driver : cbc(des-generic) module : kernel priority : 0 refcnt : 1 selftest : passed type : blkcipher blocksize : 8 min keysize : 8 max keysize : 8 ivsize : 8 geniv : <default> name : xcbc(aes) driver : xcbc(aes-generic) module : kernel priority : 100 refcnt : 1 selftest : passed type : hash blocksize : 16 digestsize : 16 name : hmac(sha1) driver : hmac(sha1-hw) module : kernel priority : 300 refcnt : 3 selftest : passed type : hash blocksize : 64 digestsize : 20 name : hmac(md5) driver : hmac(md5-generic) module : kernel priority : 0 refcnt : 1 selftest : passed type : hash blocksize : 64 digestsize : 16 name : sha1 driver : sha1-hw module : hw_SHA priority : 300 refcnt : 3 selftest : passed type : digest blocksize : 64 digestsize : 20 name : cbc(aes) driver : cbc-aes-hw module : hw_AES priority : 300 refcnt : 3 selftest : passed type : blkcipher blocksize : 16 min keysize : 16 max keysize : 32 ivsize : 16 geniv : <default> name : stdrng driver : ansi_cprng module : kernel priority : 100 refcnt : 1 selftest : passed type : rng seedsize : 32 name : stdrng driver : krng module : kernel priority : 200 refcnt : 2 selftest : passed type : rng seedsize : 0 name : aes driver : aes-generic module : kernel priority : 100 refcnt : 1 selftest : passed type : cipher blocksize : 16 min keysize : 16 max keysize : 32 name : des3_ede driver : des3_ede-generic module : kernel priority : 0 refcnt : 1 selftest : passed type : cipher blocksize : 8 min keysize : 24 max keysize : 24 name : des driver : des-generic module : kernel priority : 0 refcnt : 1 selftest : passed type : cipher blocksize : 8 min keysize : 8 max keysize : 8 name : sha1 driver : sha1-generic module : kernel priority : 0 refcnt : 1 selftest : passed type : digest blocksize : 64 digestsize : 20 name : md5 driver : md5-generic module : kernel priority : 0 refcnt : 1 selftest : passed type : digest blocksize : 64 digestsize : --0015175cac2e1351c704742a6b5c Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable <div dir=3D"ltr">Hello,<br><br>I've written a SHA1 driver for our custo= m HW running Linux 2.6.28.4.<br>The driver passed all the SHA1 tests but k= ept failing at hmac(sha1-hw) test 3.<br>During my debugging I added printk-= s in the testmgr to also print successful tests.=A0 When I did that all the= tests passed. All future encryption/decryptions (I set up a tunnel between= the board and a server and ping-ed packets back and forth) were processed = successfully by the driver.=A0 <br> Attached below the output of the testmgr when setting up the tunnel (my dri= ver registers with name sha1-hw and is implemented by "hw_SHA"= =A0 kernel module ) and of /proc/crypto.<br><br><br>Any ideas as to what co= uld be the reason for the failure?=A0 <br> <br>Thanks,<br>Avital<br><br><br>Modified testmgr output:<br>=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D<br><br>alg: hash: Test 1 passed for= sha1-hw<br>alg: hash: Test 2 passed for sha1-hw<br>alg: hash: Chunking tes= t 1 Passed for sha1-hw<br>alg: hash: setkey passed on test 1 for hmac(md5-g= eneric): ret=3D0<br> alg: hash: Test 1 passed for hmac(md5-generic)<br>alg: hash: setkey passed = on test 2 for hmac(md5-generic): ret=3D0<br>alg: hash: Test 2 passed for hm= ac(md5-generic)<br>alg: hash: setkey passed on test 3 for hmac(md5-generic)= : ret=3D0<br> alg: hash: Test 3 passed for hmac(md5-generic)<br>alg: hash: setkey passed = on test 4 for hmac(md5-generic): ret=3D0<br>alg: hash: Test 4 passed for hm= ac(md5-generic)<br>alg: hash: setkey passed on test 5 for hmac(md5-generic)= : ret=3D0<br> alg: hash: Test 5 passed for hmac(md5-generic)<br>alg: hash: setkey passed = on test 6 for hmac(md5-generic): ret=3D0<br>alg: hash: Test 6 passed for hm= ac(md5-generic)<br>alg: hash: setkey passed on test 7 for hmac(md5-generic)= : ret=3D0<br> alg: hash: Test 7 passed for hmac(md5-generic)<br>alg: hash: setkey Passed = on chunking test 1 for hmac(md5-generic): ret=3D0<br>alg: hash: Chunking te= st 1 Passed for hmac(md5-generic)<br>alg: hash: setkey passed on test 1 for= hmac(sha1-hw): ret=3D0<br> alg: hash: Test 1 passed for hmac(sha1-hw)<br>alg: hash: setkey passed on t= est 2 for hmac(sha1-hw): ret=3D0<br>alg: hash: Test 2 passed for hmac(sha1-= hw)<br>alg: hash: setkey passed on test 3 for hmac(sha1-hw): ret=3D0<br>alg= : hash: Test 3 passed for hmac(sha1-hw)<br> alg: hash: setkey passed on test 4 for hmac(sha1-hw): ret=3D0<br>alg: hash:= Test 4 passed for hmac(sha1-hw)<br>alg: hash: setkey passed on test 5 for = hmac(sha1-hw): ret=3D0<br>alg: hash: Test 5 passed for hmac(sha1-hw)<br>alg= : hash: setkey passed on test 6 for hmac(sha1-hw): ret=3D0<br> alg: hash: Test 6 passed for hmac(sha1-hw)<br>alg: hash: setkey passed on t= est 7 for hmac(sha1-hw): ret=3D0<br>alg: hash: Test 7 passed for hmac(sha1-= hw)<br>alg: hash: setkey Passed on chunking test 1 for hmac(sha1-hw): ret= =3D0<br> alg: hash: Chunking test 1 Passed for hmac(sha1-hw)<br>alg: hash: setkey pa= ssed on test 1 for xcbc(aes-generic): ret=3D0<br>alg: hash: Test 1 passed f= or xcbc(aes-generic)<br>alg: hash: setkey passed on test 2 for xcbc(aes-gen= eric): ret=3D0<br> alg: hash: Test 2 passed for xcbc(aes-generic)<br>alg: hash: setkey passed = on test 3 for xcbc(aes-generic): ret=3D0<br>alg: hash: Test 3 passed for xc= bc(aes-generic)<br>alg: hash: setkey passed on test 4 for xcbc(aes-generic)= : ret=3D0<br> alg: hash: Test 4 passed for xcbc(aes-generic)<br>alg: hash: setkey passed = on test 5 for xcbc(aes-generic): ret=3D0<br>alg: hash: Test 5 passed for xc= bc(aes-generic)<br>alg: hash: setkey passed on test 6 for xcbc(aes-generic)= : ret=3D0<br> alg: hash: Test 6 passed for xcbc(aes-generic)<br>alg: hash: setkey Passed = on chunking test 1 for xcbc(aes-generic): ret=3D0<br>alg: hash: Chunking te= st 1 Passed for xcbc(aes-generic)<br>alg: hash: setkey Passed on chunking t= est 2 for xcbc(aes-generic): ret=3D0<br> alg: hash: Chunking test 2 Passed for xcbc(aes-generic)<br>alg: skcipher: T= est 1 succeeded on encryption for cbc-aes-hw<br>alg: skcipher: Test 2 succe= eded on encryption for cbc-aes-hw<br>alg: skcipher: Test 3 succeeded on enc= ryption for cbc-aes-hw<br> alg: skcipher: Test 4 succeeded on encryption for cbc-aes-hw<br>alg: skciph= er: Test 1 succeeded on decryption for cbc-aes-hw<br>alg: skcipher: Test 2 = succeeded on decryption for cbc-aes-hw<br>alg: skcipher: Test 3 succeeded o= n decryption for cbc-aes-hw<br> alg: skcipher: Test 4 succeeded on decryption for cbc-aes-hw<br><br><br><br= >output of /proc/crypto<br>=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D<br><br>name=A0=A0=A0=A0=A0=A0=A0=A0 : authenc(hmac(sha1),cbc(aes))<br>d= river=A0=A0=A0=A0=A0=A0 : authenc(hmac(sha1-hw),cbc-aes-hw)<br> module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 3300<br>refcnt= =A0=A0=A0=A0=A0=A0 : 3<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0= =A0=A0=A0=A0 : aead<br>async=A0=A0=A0=A0=A0=A0=A0 : yes<br>blocksize=A0=A0= =A0 : 16<br>ivsize=A0=A0=A0=A0=A0=A0 : 16<br>maxauthsize=A0 : 20<br>geniv= =A0=A0=A0=A0=A0=A0=A0 : <built-in><br> <br>name=A0=A0=A0=A0=A0=A0=A0=A0 : cbc(aes)<br>driver=A0=A0=A0=A0=A0=A0 : c= bc-aes-hw<br>module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 30= 0<br>refcnt=A0=A0=A0=A0=A0=A0 : 3<br>selftest=A0=A0=A0=A0 : passed<br>type= =A0=A0=A0=A0=A0=A0=A0=A0 : givcipher<br>async=A0=A0=A0=A0=A0=A0=A0 : yes<br= >blocksize=A0=A0=A0 : 16<br> min keysize=A0 : 16<br>max keysize=A0 : 32<br>ivsize=A0=A0=A0=A0=A0=A0 : 16= <br>geniv=A0=A0=A0=A0=A0=A0=A0 : chainiv<br><br>name=A0=A0=A0=A0=A0=A0=A0= =A0 : cbc(des3_ede)<br>driver=A0=A0=A0=A0=A0=A0 : cbc(des3_ede-generic)<br>= module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 0<br>refcnt=A0= =A0=A0=A0=A0=A0 : 1<br> selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0=A0=A0=A0=A0 : blkcipher<b= r>blocksize=A0=A0=A0 : 8<br>min keysize=A0 : 24<br>max keysize=A0 : 24<br>i= vsize=A0=A0=A0=A0=A0=A0 : 8<br>geniv=A0=A0=A0=A0=A0=A0=A0 : <default>= <br><br>name=A0=A0=A0=A0=A0=A0=A0=A0 : cbc(des)<br>driver=A0=A0=A0=A0=A0=A0= : cbc(des-generic)<br> module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 0<br>refcnt=A0= =A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0=A0= =A0=A0=A0 : blkcipher<br>blocksize=A0=A0=A0 : 8<br>min keysize=A0 : 8<br>ma= x keysize=A0 : 8<br>ivsize=A0=A0=A0=A0=A0=A0 : 8<br>geniv=A0=A0=A0=A0=A0=A0= =A0 : <default><br> <br>name=A0=A0=A0=A0=A0=A0=A0=A0 : xcbc(aes)<br>driver=A0=A0=A0=A0=A0=A0 : = xcbc(aes-generic)<br>module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0= =A0 : 100<br>refcnt=A0=A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0=A0=A0 : passed<= br>type=A0=A0=A0=A0=A0=A0=A0=A0 : hash<br>blocksize=A0=A0=A0 : 16<br>digest= size=A0=A0 : 16<br> <br>name=A0=A0=A0=A0=A0=A0=A0=A0 : hmac(sha1)<br>driver=A0=A0=A0=A0=A0=A0 := hmac(sha1-hw)<br>module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0= : 300<br>refcnt=A0=A0=A0=A0=A0=A0 : 3<br>selftest=A0=A0=A0=A0 : passed<br>= type=A0=A0=A0=A0=A0=A0=A0=A0 : hash<br>blocksize=A0=A0=A0 : 64<br>digestsiz= e=A0=A0 : 20<br> <br>name=A0=A0=A0=A0=A0=A0=A0=A0 : hmac(md5)<br>driver=A0=A0=A0=A0=A0=A0 : = hmac(md5-generic)<br>module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0= =A0 : 0<br>refcnt=A0=A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0=A0=A0 : passed<br= >type=A0=A0=A0=A0=A0=A0=A0=A0 : hash<br>blocksize=A0=A0=A0 : 64<br>digestsi= ze=A0=A0 : 16<br> <br>name=A0=A0=A0=A0=A0=A0=A0=A0 : sha1<br>driver=A0=A0=A0=A0=A0=A0 : sha1-= hw<br>module=A0=A0=A0=A0=A0=A0 : hw_SHA<br>priority=A0=A0=A0=A0 : 300<br>re= fcnt=A0=A0=A0=A0=A0=A0 : 3<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0= =A0=A0=A0=A0=A0=A0 : digest<br>blocksize=A0=A0=A0 : 64<br>digestsize=A0=A0 = : 20<br><br>name=A0=A0=A0=A0=A0=A0=A0=A0 : cbc(aes)<br> driver=A0=A0=A0=A0=A0=A0 : cbc-aes-hw<br>module=A0=A0=A0=A0=A0=A0 : hw_AES<= br>priority=A0=A0=A0=A0 : 300<br>refcnt=A0=A0=A0=A0=A0=A0 : 3<br>selftest= =A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0=A0=A0=A0=A0 : blkcipher<br>blocks= ize=A0=A0=A0 : 16<br>min keysize=A0 : 16<br>max keysize=A0 : 32<br>ivsize= =A0=A0=A0=A0=A0=A0 : 16<br> geniv=A0=A0=A0=A0=A0=A0=A0 : <default><br><br>name=A0=A0=A0=A0=A0=A0= =A0=A0 : stdrng<br>driver=A0=A0=A0=A0=A0=A0 : ansi_cprng<br>module=A0=A0=A0= =A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 100<br>refcnt=A0=A0=A0=A0=A0= =A0 : 1<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0=A0=A0=A0=A0 : = rng<br>seedsize=A0=A0=A0=A0 : 32<br> <br>name=A0=A0=A0=A0=A0=A0=A0=A0 : stdrng<br>driver=A0=A0=A0=A0=A0=A0 : krn= g<br>module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 200<br>ref= cnt=A0=A0=A0=A0=A0=A0 : 2<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0= =A0=A0=A0=A0=A0 : rng<br>seedsize=A0=A0=A0=A0 : 0<br><br>name=A0=A0=A0=A0= =A0=A0=A0=A0 : aes<br>driver=A0=A0=A0=A0=A0=A0 : aes-generic<br> module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 100<br>refcnt= =A0=A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0= =A0=A0=A0=A0 : cipher<br>blocksize=A0=A0=A0 : 16<br>min keysize=A0 : 16<br>= max keysize=A0 : 32<br><br>name=A0=A0=A0=A0=A0=A0=A0=A0 : des3_ede<br>drive= r=A0=A0=A0=A0=A0=A0 : des3_ede-generic<br> module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 0<br>refcnt=A0= =A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0=A0= =A0=A0=A0 : cipher<br>blocksize=A0=A0=A0 : 8<br>min keysize=A0 : 24<br>max = keysize=A0 : 24<br><br>name=A0=A0=A0=A0=A0=A0=A0=A0 : des<br>driver=A0=A0= =A0=A0=A0=A0 : des-generic<br> module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 0<br>refcnt=A0= =A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0=A0= =A0=A0=A0 : cipher<br>blocksize=A0=A0=A0 : 8<br>min keysize=A0 : 8<br>max k= eysize=A0 : 8<br><br>name=A0=A0=A0=A0=A0=A0=A0=A0 : sha1<br>driver=A0=A0=A0= =A0=A0=A0 : sha1-generic<br> module=A0=A0=A0=A0=A0=A0 : kernel<br>priority=A0=A0=A0=A0 : 0<br>refcnt=A0= =A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0=A0=A0 : passed<br>type=A0=A0=A0=A0=A0= =A0=A0=A0 : digest<br>blocksize=A0=A0=A0 : 64<br>digestsize=A0=A0 : 20<br><= br>name=A0=A0=A0=A0=A0=A0=A0=A0 : md5<br>driver=A0=A0=A0=A0=A0=A0 : md5-gen= eric<br>module=A0=A0=A0=A0=A0=A0 : kernel<br> priority=A0=A0=A0=A0 : 0<br>refcnt=A0=A0=A0=A0=A0=A0 : 1<br>selftest=A0=A0= =A0=A0 : passed<br>type=A0=A0=A0=A0=A0=A0=A0=A0 : digest<br>blocksize=A0=A0= =A0 : 64<br>digestsize=A0=A0 : <br><br><br></div> --0015175cac2e1351c704742a6b5c-- - Linux-crypto: cryptography in and on the Linux system Archive: http://mail.nl.linux.org/linux-crypto/