Changeset 3137


Ignore:
Timestamp:
Aug 9, 2012, 1:30:02 AM (3 years ago)
Author:
wmb
Message:

OLPC ARM - Use software for SHA1 and MD5 hashes instead of the MMP2 hash accelerator, which I haven't gotten to work on MMP3.

Files:
1 added
6 edited

Legend:

Unmodified
Added
Removed
  • cpu/arm/mmp2/hash.fth

    r3071 r3137  
    22purpose: Hashes (MD5, SHA1, SHA-256) using Marvell hardware acceleration
    33
     4[ifdef] use-mmp2-hashes
    45h# 8101 constant dval
    56: dma>hash  ( adr len -- )
     
    120121: sha1-update hash-update  ;
    121122: sha1-final hash-final drop to sha1-digest  ;
    122 
    123 : ebg-set  ( n -- )  h# 292c00 io@  or  h# 292c00 io!  ;
    124 : ebg-clr  ( n -- )  invert  h# 292c00 io@  and  h# 292c00 io!  ;
    125 
    126 0 [if]
    127 \ This is the procedure recommended by the datasheet, but it doesn't work
    128 : init-entropy-digital  ( -- )
    129 \   h# ffffffff ebg-clr   \ All off
    130    h# 00008000 ebg-set   \ Digital entropy mode
    131    h# 00000400 ebg-clr   \ RNG reset
    132    h# 00000200 ebg-set   \ Bias power up
    133    d# 400 us
    134    h# 00000100 ebg-set   \ Fast OSC enable
    135    h# 00000080 ebg-set   \ Slow OSC enable
    136    h# 02000000 ebg-set   \ Downsampling ratio
    137    h# 00110000 ebg-set   \ Slow OSC divider
    138    h# 00000400 ebg-set   \ RNG unreset
    139    h# 00000040 ebg-set   \ Post processor enable
    140    h# 00001000 ebg-set
    141 ;
    142 [else]
    143 \ This procedure works
    144 : init-entropy  ( -- )  \ Using digital method
    145    h# 21117c0 h# 292c00 io!
    146 ;
    147123[then]
    148 
    149 : random-short  ( -- w )
    150    begin  h# 292c04 io@  dup 0>=  while  drop  repeat
    151    h# ffff and
    152 ;
    153 : random-byte  ( -- b )  random-short 2/ h# ff and  ;
    154 : random-long  ( -- l )
    155    random-short random-short wljoin
    156 ;
    157 alias random random-long
    158 
    159 stand-init: Random number generator
    160    h# 1b h# 68 pmua!   \ Ensure WTM clock is enabled
    161    init-entropy
    162 ;
    163124
    164125\ LICENSE_BEGIN
  • cpu/arm/olpc/1.75/crypto-version.fth

    r2008 r3137  
    44
    55\ The bios_verify image
    6 macro: CRYPTO_VERSION 0.5-ARM
     6macro: CRYPTO_VERSION 0.6-ARM
  • cpu/arm/olpc/3.0/crypto-version.fth

    r2727 r3137  
    44
    55\ The bios_verify image
    6 macro: CRYPTO_VERSION 0.5-ARM
     6macro: CRYPTO_VERSION 0.6-ARM
  • cpu/arm/olpc/cl4/crypto-version.fth

    r3055 r3137  
    44
    55\ The bios_verify image
    6 macro: CRYPTO_VERSION 0.5-ARM
     6macro: CRYPTO_VERSION 0.6-ARM
  • cpu/arm/olpc/prefw.fth

    r3049 r3137  
    151151fload ${BP}/cpu/arm/mmp2/socregs.fth   \ MMP2 registers used by many functional units
    152152
    153 fload ${BP}/cpu/arm/mmp2/hash.fth      \ Hashes - SHA1, SHA-256, MD5
     153fload ${BP}/cpu/arm/mmp2/random.fth    \ Random numbers
    154154fload ${BP}/cpu/x86/pc/olpc/crypto.fth \ Cryptographic image validation
     155fload ${BP}/cpu/arm/olpc/swhash.fth    \ Hashes - SHA1, SHA-256, MD5
    155156fload ${BP}/cpu/x86/pc/olpc/lzip.fth   \ Access zip images from memory
    156157
  • ofw/wifi/hmacsha1.fth

    r2004 r3137  
    3737   then
    3838;
     39[ifndef] sha1-n
     40: sha1-n  ( datan$..data1$ n -- digest$ )
     41   sha1-init
     42   0  ?do  sha1-update  loop
     43   sha1-final
     44   sha1-digest /sha1-digest             ( digest$ )
     45;
     46[then]
    3947: hmac-sha1  ( datan$..data1$ n key$ -- digest$ )
    40    ?sha1-reset-key                      ( datan$..data1$ n key$' )
    41    2dup key>keypad >r >r                ( datan$..data1$ n )  ( R: key$ )
     48   ?sha1-reset-key 2>r                  ( datan$..data1$ n )  ( R: key$' )
    4249
    4350   \ sha1-idigest = SHA1(K XOR ipad, text)
    44    keypad h# 36 xor-keypad              ( datan$..data1$ n )  ( R: key$ )
    45    sha1-init                            ( datan$..data1$ n )  ( R: key$ )
    46    keypad /keypad sha1-update           ( datan$..data1$ n )  ( R: key$ )
    47    0  ?do  sha1-update  loop            ( )  ( R: key$ )
    48    sha1-final                           ( )  ( R: key$ )
    49    sha1-digest sha1-idigest /sha1-digest move   ( )  ( R: key$ )
     51   2r@ key>keypad                       ( datan$..data1$ n )  ( R: key$ )
     52   keypad h# 36 xor-keypad              ( datan$..data1$ n )
    5053
    51    \ sha1-digest = SHA1(K XOR opad, sha1-idigest)
    52    r> r> key>keypad                     ( )
     54   keypad /keypad  rot 1+  sha1-n       ( digest$ )           ( R: key$ )
     55   sha1-idigest swap move               ( )                   ( R: key$ )
     56
     57   2r> key>keypad                       ( )
    5358   keypad h# 5c xor-keypad
    54    sha1-init
    55    keypad /keypad sha1-update
    56    sha1-idigest /sha1-digest sha1-update
    57    sha1-final
    5859
    59    sha1-digest /sha1-digest             ( digest$ )
     60   sha1-idigest /sha1-digest  keypad /keypad  2  sha1-n ( digest$ )
    6061;
    6162
     
    7576/sha1-digest buffer: temp2                      \ Current digest
    7677: (pbkdf2-sha1)  ( passphrase$ ssid$ -- )
    77    2over >r >r                                  ( passphrase$ ssid$ )  ( R: passphrase$ )
    78    pbkdf2-cnt-buf 4 2swap 2 r> r> hmac-sha1     ( passphrase$ digest$ )
     78   2over 2>r                                    ( passphrase$ ssid$ )  ( R: passphrase$ )
     79   pbkdf2-cnt-buf 4 2swap 2 2r> hmac-sha1       ( passphrase$ digest$ )
    7980   temp2 swap move                              ( passphrase$ )
    8081   d# 4096 1  do
     
    9091   begin  dup 0>  while                 ( passphrase$ ssid$ psk$ )
    9192      pbkdf2-cnt++                      ( passphrase$ ssid$ psk$ )
    92       >r >r 2over 2over (pbkdf2-sha1)   ( passphrase$ ssid$ )  ( R: psk$ )
    93       r> r> 2dup /sha1-digest min sha1-digest -rot move ( passphrase$ ssid$ psk$ )
     93      2>r 2over 2over (pbkdf2-sha1)     ( passphrase$ ssid$ )  ( R: psk$ )
     94      2r> 2dup /sha1-digest min sha1-digest -rot move   ( passphrase$ ssid$ psk$ )
    9495      /sha1-digest /string              ( passphrase$ ssid$ psk$' )
    9596   repeat  2drop 2drop 2drop            ( )
     
    102103   0 prf-cnt c!
    103104   begin  dup 0>  while                 ( key$ label$ data$ result$ )
    104       >r >r                             ( key$ label$ data$ )  ( R: result$ )
     105      2>r                               ( key$ label$ data$ )  ( R: result$ )
    105106      prf-cnt 1 2over zero$             ( key$ label$ data$ cnt$ data$ zero$ )  ( R: result$ )
    106107      9 pick 9 pick 4                   ( key$ label$ data$ cnt$ data$ zero$ label$ n )  ( R: result$ )
    107108      d# 14 pick d# 14 pick hmac-sha1   ( key$ label$ data$ digest$ )  ( R: result$ )
    108       r> r> 2swap 2over rot min move    ( key$ label$ data$ result$ )
     109      2r> 2swap 2over rot min move      ( key$ label$ data$ result$ )
    109110      /sha1-digest /string              ( key$ label$ data$ result$' )
    110111      prf-cnt c@ 1+ prf-cnt c!          ( key$ label$ data$ result$ )
    111112   repeat  2drop 2drop 2drop 2drop      ( )
    112  
    113113;
    114114
Note: See TracChangeset for help on using the changeset viewer.