Author: wmb Date: Thu Aug 9 01:30:02 2012 New Revision: 3137 URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3137
Log: OLPC ARM - Use software for SHA1 and MD5 hashes instead of the MMP2 hash accelerator, which I haven't gotten to work on MMP3.
Added: cpu/arm/mmp2/random.fth Modified: cpu/arm/mmp2/hash.fth cpu/arm/olpc/1.75/crypto-version.fth cpu/arm/olpc/3.0/crypto-version.fth cpu/arm/olpc/cl4/crypto-version.fth cpu/arm/olpc/prefw.fth ofw/wifi/hmacsha1.fth
Modified: cpu/arm/mmp2/hash.fth ============================================================================== --- cpu/arm/mmp2/hash.fth Thu Aug 9 01:27:09 2012 (r3136) +++ cpu/arm/mmp2/hash.fth Thu Aug 9 01:30:02 2012 (r3137) @@ -1,6 +1,7 @@ \ See license at end of file purpose: Hashes (MD5, SHA1, SHA-256) using Marvell hardware acceleration
+[ifdef] use-mmp2-hashes h# 8101 constant dval : dma>hash ( adr len -- ) 4 round-up 2 rshift h# 29080c io! ( adr ) @@ -119,48 +120,8 @@ : sha1-init use-sha1 hash-init ; : sha1-update hash-update ; : sha1-final hash-final drop to sha1-digest ; - -: ebg-set ( n -- ) h# 292c00 io@ or h# 292c00 io! ; -: ebg-clr ( n -- ) invert h# 292c00 io@ and h# 292c00 io! ; - -0 [if] -\ This is the procedure recommended by the datasheet, but it doesn't work -: init-entropy-digital ( -- ) -\ h# ffffffff ebg-clr \ All off - h# 00008000 ebg-set \ Digital entropy mode - h# 00000400 ebg-clr \ RNG reset - h# 00000200 ebg-set \ Bias power up - d# 400 us - h# 00000100 ebg-set \ Fast OSC enable - h# 00000080 ebg-set \ Slow OSC enable - h# 02000000 ebg-set \ Downsampling ratio - h# 00110000 ebg-set \ Slow OSC divider - h# 00000400 ebg-set \ RNG unreset - h# 00000040 ebg-set \ Post processor enable - h# 00001000 ebg-set -; -[else] -\ This procedure works -: init-entropy ( -- ) \ Using digital method - h# 21117c0 h# 292c00 io! -; [then]
-: random-short ( -- w ) - begin h# 292c04 io@ dup 0>= while drop repeat - h# ffff and -; -: random-byte ( -- b ) random-short 2/ h# ff and ; -: random-long ( -- l ) - random-short random-short wljoin -; -alias random random-long - -stand-init: Random number generator - h# 1b h# 68 pmua! \ Ensure WTM clock is enabled - init-entropy -; - \ LICENSE_BEGIN \ Copyright (c) 2010 FirmWorks \
Added: cpu/arm/mmp2/random.fth ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ cpu/arm/mmp2/random.fth Thu Aug 9 01:30:02 2012 (r3137) @@ -0,0 +1,67 @@ +\ See license at end of file +purpose: Random numbers using Marvell hardware acceleration + +0 [if] +: ebg-set ( n -- ) h# 292c00 io@ or h# 292c00 io! ; +: ebg-clr ( n -- ) invert h# 292c00 io@ and h# 292c00 io! ; + +\ This is the procedure recommended by the datasheet, but it doesn't work +: init-entropy-digital ( -- ) +\ h# ffffffff ebg-clr \ All off + h# 00008000 ebg-set \ Digital entropy mode + h# 00000400 ebg-clr \ RNG reset + h# 00000200 ebg-set \ Bias power up + d# 400 us + h# 00000100 ebg-set \ Fast OSC enable + h# 00000080 ebg-set \ Slow OSC enable + h# 02000000 ebg-set \ Downsampling ratio + h# 00110000 ebg-set \ Slow OSC divider + h# 00000400 ebg-set \ RNG unreset + h# 00000040 ebg-set \ Post processor enable + h# 00001000 ebg-set +; +[else] +\ This procedure works +: init-entropy ( -- ) \ Using digital method + h# 21117c0 h# 292c00 io! +; +[then] + +: random-short ( -- w ) + begin h# 292c04 io@ dup 0>= while drop repeat + h# ffff and +; +: random-byte ( -- b ) random-short 2/ h# ff and ; +: random-long ( -- l ) + random-short random-short wljoin +; +alias random random-long + +stand-init: Random number generator + h# 1b h# 68 pmua! \ Ensure WTM clock is enabled + init-entropy +; + +\ LICENSE_BEGIN +\ Copyright (c) 2010 FirmWorks +\ +\ Permission is hereby granted, free of charge, to any person obtaining +\ a copy of this software and associated documentation files (the +\ "Software"), to deal in the Software without restriction, including +\ without limitation the rights to use, copy, modify, merge, publish, +\ distribute, sublicense, and/or sell copies of the Software, and to +\ permit persons to whom the Software is furnished to do so, subject to +\ the following conditions: +\ +\ The above copyright notice and this permission notice shall be +\ included in all copies or substantial portions of the Software. +\ +\ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +\ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +\ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +\ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +\ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +\ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +\ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +\ +\ LICENSE_END
Modified: cpu/arm/olpc/1.75/crypto-version.fth ============================================================================== --- cpu/arm/olpc/1.75/crypto-version.fth Thu Aug 9 01:27:09 2012 (r3136) +++ cpu/arm/olpc/1.75/crypto-version.fth Thu Aug 9 01:30:02 2012 (r3137) @@ -3,4 +3,4 @@ \ macro: KEYS testkeys
\ The bios_verify image -macro: CRYPTO_VERSION 0.5-ARM +macro: CRYPTO_VERSION 0.6-ARM
Modified: cpu/arm/olpc/3.0/crypto-version.fth ============================================================================== --- cpu/arm/olpc/3.0/crypto-version.fth Thu Aug 9 01:27:09 2012 (r3136) +++ cpu/arm/olpc/3.0/crypto-version.fth Thu Aug 9 01:30:02 2012 (r3137) @@ -3,4 +3,4 @@ \ macro: KEYS testkeys
\ The bios_verify image -macro: CRYPTO_VERSION 0.5-ARM +macro: CRYPTO_VERSION 0.6-ARM
Modified: cpu/arm/olpc/cl4/crypto-version.fth ============================================================================== --- cpu/arm/olpc/cl4/crypto-version.fth Thu Aug 9 01:27:09 2012 (r3136) +++ cpu/arm/olpc/cl4/crypto-version.fth Thu Aug 9 01:30:02 2012 (r3137) @@ -3,4 +3,4 @@ \ macro: KEYS testkeys
\ The bios_verify image -macro: CRYPTO_VERSION 0.5-ARM +macro: CRYPTO_VERSION 0.6-ARM
Modified: cpu/arm/olpc/prefw.fth ============================================================================== --- cpu/arm/olpc/prefw.fth Thu Aug 9 01:27:09 2012 (r3136) +++ cpu/arm/olpc/prefw.fth Thu Aug 9 01:30:02 2012 (r3137) @@ -150,8 +150,9 @@
fload ${BP}/cpu/arm/mmp2/socregs.fth \ MMP2 registers used by many functional units
-fload ${BP}/cpu/arm/mmp2/hash.fth \ Hashes - SHA1, SHA-256, MD5 +fload ${BP}/cpu/arm/mmp2/random.fth \ Random numbers fload ${BP}/cpu/x86/pc/olpc/crypto.fth \ Cryptographic image validation +fload ${BP}/cpu/arm/olpc/swhash.fth \ Hashes - SHA1, SHA-256, MD5 fload ${BP}/cpu/x86/pc/olpc/lzip.fth \ Access zip images from memory
fload ${BP}/ofw/inet/loadtcp.fth
Modified: ofw/wifi/hmacsha1.fth ============================================================================== --- ofw/wifi/hmacsha1.fth Thu Aug 9 01:27:09 2012 (r3136) +++ ofw/wifi/hmacsha1.fth Thu Aug 9 01:30:02 2012 (r3137) @@ -36,27 +36,28 @@ sha1-tkey /sha1-digest ( key$ ) then ; +[ifndef] sha1-n +: sha1-n ( datan$..data1$ n -- digest$ ) + sha1-init + 0 ?do sha1-update loop + sha1-final + sha1-digest /sha1-digest ( digest$ ) +; +[then] : hmac-sha1 ( datan$..data1$ n key$ -- digest$ ) - ?sha1-reset-key ( datan$..data1$ n key$' ) - 2dup key>keypad >r >r ( datan$..data1$ n ) ( R: key$ ) + ?sha1-reset-key 2>r ( datan$..data1$ n ) ( R: key$' )
\ sha1-idigest = SHA1(K XOR ipad, text) - keypad h# 36 xor-keypad ( datan$..data1$ n ) ( R: key$ ) - sha1-init ( datan$..data1$ n ) ( R: key$ ) - keypad /keypad sha1-update ( datan$..data1$ n ) ( R: key$ ) - 0 ?do sha1-update loop ( ) ( R: key$ ) - sha1-final ( ) ( R: key$ ) - sha1-digest sha1-idigest /sha1-digest move ( ) ( R: key$ ) + 2r@ key>keypad ( datan$..data1$ n ) ( R: key$ ) + keypad h# 36 xor-keypad ( datan$..data1$ n )
- \ sha1-digest = SHA1(K XOR opad, sha1-idigest) - r> r> key>keypad ( ) + keypad /keypad rot 1+ sha1-n ( digest$ ) ( R: key$ ) + sha1-idigest swap move ( ) ( R: key$ ) + + 2r> key>keypad ( ) keypad h# 5c xor-keypad - sha1-init - keypad /keypad sha1-update - sha1-idigest /sha1-digest sha1-update - sha1-final
- sha1-digest /sha1-digest ( digest$ ) + sha1-idigest /sha1-digest keypad /keypad 2 sha1-n ( digest$ ) ;
\ ---------------------------------------------------------------------------- @@ -74,8 +75,8 @@ /sha1-digest buffer: temp \ Last digest /sha1-digest buffer: temp2 \ Current digest : (pbkdf2-sha1) ( passphrase$ ssid$ -- ) - 2over >r >r ( passphrase$ ssid$ ) ( R: passphrase$ ) - pbkdf2-cnt-buf 4 2swap 2 r> r> hmac-sha1 ( passphrase$ digest$ ) + 2over 2>r ( passphrase$ ssid$ ) ( R: passphrase$ ) + pbkdf2-cnt-buf 4 2swap 2 2r> hmac-sha1 ( passphrase$ digest$ ) temp2 swap move ( passphrase$ ) d# 4096 1 do sha1-digest temp /sha1-digest move ( passphrase$ ) @@ -89,8 +90,8 @@ 0 to pbkdf2-cnt begin dup 0> while ( passphrase$ ssid$ psk$ ) pbkdf2-cnt++ ( passphrase$ ssid$ psk$ ) - >r >r 2over 2over (pbkdf2-sha1) ( passphrase$ ssid$ ) ( R: psk$ ) - r> r> 2dup /sha1-digest min sha1-digest -rot move ( passphrase$ ssid$ psk$ ) + 2>r 2over 2over (pbkdf2-sha1) ( passphrase$ ssid$ ) ( R: psk$ ) + 2r> 2dup /sha1-digest min sha1-digest -rot move ( passphrase$ ssid$ psk$ ) /sha1-digest /string ( passphrase$ ssid$ psk$' ) repeat 2drop 2drop 2drop ( ) ; @@ -101,15 +102,14 @@ : sha1-prf ( key$ label$ data$ result$ -- ) 0 prf-cnt c! begin dup 0> while ( key$ label$ data$ result$ ) - >r >r ( key$ label$ data$ ) ( R: result$ ) + 2>r ( key$ label$ data$ ) ( R: result$ ) prf-cnt 1 2over zero$ ( key$ label$ data$ cnt$ data$ zero$ ) ( R: result$ ) 9 pick 9 pick 4 ( key$ label$ data$ cnt$ data$ zero$ label$ n ) ( R: result$ ) d# 14 pick d# 14 pick hmac-sha1 ( key$ label$ data$ digest$ ) ( R: result$ ) - r> r> 2swap 2over rot min move ( key$ label$ data$ result$ ) + 2r> 2swap 2over rot min move ( key$ label$ data$ result$ ) /sha1-digest /string ( key$ label$ data$ result$' ) prf-cnt c@ 1+ prf-cnt c! ( key$ label$ data$ result$ ) repeat 2drop 2drop 2drop 2drop ( ) - ;
openfirmware@openfirmware.info