Jump to content

Anyone got a SHA-256 function for PHP4?


chigley

Recommended Posts

Hi guys,

 

Been trying to make sense of the SHA-256 algorithm for days now, but the specification just doesn't make any sense. I've found a few classes when Googling about but ideally I just need a standalone function. I found this pseudocode on the Wikipedia article but I can't make much sense of it really!

 

Note: All variables are unsigned 32 bits and wrap modulo 232 when calculating

Initialize variables
(first 32 bits of the fractional parts of the square roots of the first 8 primes 2..19):
h0 := 0x6a09e667
h1 := 0xbb67ae85
h2 := 0x3c6ef372
h3 := 0xa54ff53a
h4 := 0x510e527f
h5 := 0x9b05688c
h6 := 0x1f83d9ab
h7 := 0x5be0cd19

Initialize table of round constants
(first 32 bits of the fractional parts of the cube roots of the first 64 primes 2..311):
k[0..63] :=
  0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
  0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
  0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
  0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
  0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
  0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
  0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
  0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2

Pre-processing:
append the bit '1' to the message
append k bits '0', where k is the minimum number >= 0 such that the resulting message
   length (in bits) is congruent to 448 (mod 512)
append length of message (before pre-processing), in bits, as 64-bit big-endian integer

Process the message in successive 512-bit chunks:
break message into 512-bit chunks
for each chunk
   break chunk into sixteen 32-bit big-endian words w[0..15]

   Extend the sixteen 32-bit words into sixty-four 32-bit words:
   for i from 16 to 63
       s0 := (w[i-15] rightrotate 7) xor (w[i-15] rightrotate 18) xor (w[i-15] rightshift 3)
       s1 := (w[i-2] rightrotate 17) xor (w[i-2] rightrotate 19) xor (w[i-2] rightshift 10)
       w[i] := w[i-16] + s0 + w[i-7] + s1

   Initialize hash value for this chunk:
   a := h0
   b := h1
   c := h2
   d := h3
   e := h4
   f := h5
   g := h6
   h := h7

   Main loop:
   for i from 0 to 63
       s0 := (a rightrotate 2) xor (a rightrotate 13) xor (a rightrotate 22)
       maj := (a and b) xor (a and c) xor (b and c)
       t2 := s0 + maj
       s1 := (e rightrotate 6) xor (e rightrotate 11) xor (e rightrotate 25)
       ch := (e and f) xor ((not e) and g)
       t1 := h + s1 + ch + k[i] + w[i]

       h := g
       g := f
       f := e
       e := d + t1
       d := c
       c := b
       b := a
       a := t1 + t2

   Add this chunk's hash to result so far:
   h0 := h0 + a
   h1 := h1 + b 
   h2 := h2 + c
   h3 := h3 + d
   h4 := h4 + e
   h5 := h5 + f
   h6 := h6 + g 
   h7 := h7 + h

Produce the final hash value (big-endian):
digest = hash = h0 append h1 append h2 append h3 append h4 append h5 append h6 append h7

 

If any of you can help I'd really appreciate it :)

 

Chigley

Link to comment
Share on other sites

That's out of the question :P I need a function that will work on any server without calling any of my sites, some of them will have the default functions disabled so I really need a standalone. I just don't understand this bit of the Wiki:

 

Pre-processing:
append the bit '1' to the message
append k bits '0', where k is the minimum number >= 0 such that the resulting message
    length (in bits) is congruent to 448 (mod 512)
append length of message (before pre-processing), in bits, as 64-bit big-endian integer

 

Nor do I understand most of it to be honest...

 

Thanks

Link to comment
Share on other sites

Where can I find this? The PHP source isn't very easy to navigate... I've tried looking for function sources before but don't know where to find them in the PHP source.

 

Thanks a lot for your help :)

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.