[openfirmware] [commit] r3140 - cpu/arm/olpc

repository service svn at openfirmware.info
Thu Aug 9 03:49:54 CEST 2012


Author: wmb
Date: Thu Aug  9 03:49:54 2012
New Revision: 3140
URL: http://tracker.coreboot.org/trac/openfirmware/changeset/3140

Log:
OLPC ARM - Checked in swhash.fth

Added:
   cpu/arm/olpc/swhash.fth

Added: cpu/arm/olpc/swhash.fth
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ cpu/arm/olpc/swhash.fth	Thu Aug  9 03:49:54 2012	(r3140)
@@ -0,0 +1,45 @@
+: sha1     ( data$ -- hash$ )  load-crypto throw  " sha1"   crypto-hash  ;
+: sha-256  ( data$ -- hash$ )  load-crypto throw  " sha256" crypto-hash  ;
+: md5      ( data$ -- hash$ )  load-crypto throw  " md5"    crypto-hash  ;
+
+: convert-crypto-args  ( data$n..data$1 n -- 0 data$n..data$1 )
+   \ signature-bad? wants the end of data to be marked by a 0 length
+   \ so we move the n data strings to the return stack, push a 0,
+   \ then move the strings back.  We can't use do..loop because it
+   \ interferes with the return stack.
+   dup                ( data$n..data$1 n rem )
+   begin  dup  while  ( data$n..data$1 n rem )
+      2swap 2>r       ( data$n..data$m n rem  r: data$ .. )
+      1-              ( data$n..data$m n rem' r: data$ .. )
+   repeat             (                n 0    r: data$ .. )
+   drop               (                n      r: data$ .. )
+
+   0 swap             ( 0              n      r: data$ .. )
+   begin  dup  while  (                rem    r: data$ .. )
+      2r> rot         ( 0 data$n ..    rem    r: data$ .. )
+      1-              ( 0 data$n ..    rem'   r: data$ .. )
+   repeat             ( 0 data$n..     0      r: data$ .. )
+   drop               ( 0 data$n..data$1 )
+;   
+
+d# 128 buffer: hashbuf
+: hash-n  ( data$n..data$1 n hashname$ -- result$ )
+   load-crypto throw
+   2>r                  ( data$n..data$1 n    r: hashname$ )
+
+   convert-crypto-args  ( 0 data$n..data$1    r: hashname$ )
+
+   \ The 0 above hashlen tells the crypto function to perform the hash
+   \ only, without signature checking, returning the length of the
+   \ hash result in hashlen.
+   hashbuf d# 128  hashlen 0  2r>   ( 0 data$.. sig$ key$ hashname$ )
+
+   signature-bad?  h# fffff and  abort" Hash failed"   ( )
+   hashbuf hashlen @
+;
+
+\ For use by hmacsha1 in the wifi supplicant package
+d# 20 constant /sha1-digest
+alias sha1-digest hashbuf
+
+: sha1-n  ( data$n..data$1 n -- digest$ )  " sha1" hash-n  ;



More information about the openfirmware mailing list