keccak

Keccak in Forth



Keccak: Hash and encryption

Keccak is the crypto primitive for SHA-3, and can be used as hash as well as pseudo random number generator or as authenticated encryption/decryption.

Keccak uses 64 bits by default, a 32 bit version will follow.

User functions

Crypto primitives

  • st0 ( -- ) clear state
  • keccakf ( -- ) the diffusion function
  • >sponge ( addr u -- ) Absorb string into state (string must be cell-sized)
  • >duplex ( addr u -- ) Absorb and encrypt string
  • duplex> ( addr u -- ) Absorb and decrypt string
  • padded ( addr1 u1 u2 -- addr2 u2 ) Pad string

Usage examples

  • hash256 ( addr u -- ) compute a 256 bit hash (not identical to sha-3)

    : hash256 ( addr u -- )
      st0  bounds ?DO
          I I' over - $88 umin
          dup $88 u< IF $88 padded  THEN  >sponge
          keccakf
      $88 +LOOP ;
    
  • end256 ( addr u1 key u2 -- ) encode message with key

    : enc256 ( addr u1 key u2 -- )
      st0 >sponge keccakf
      bounds ?DO
          I I' over - $88 umin
          dup $88 u< IF
              2dup $88 padded >duplex
              kpad -rot move
          ELSE  >duplex  THEN
          keccakf
      $88 +LOOP ;
    
  • dec256 ( addr u1 key u2 -- ) decode message with key

    : dec256 ( addr u1 key u2 -- )
      st0 >sponge keccakf
      bounds ?DO
          I I' over - $88 umin
          dup $88 u< IF
              2dup $88 padded >duplex
              kpad -rot move
          ELSE  >duplex  THEN
          keccakf
      $88 +LOOP ;
    

by BerndPaysan

avatar of BerndPaysan

Versions

1.1.2, 1.1.1, 1.1.0, 1.0.0

Download current as zip

Tags

pd, forth-20xx

Dependencies

None

Dependents

None