Thanks for sharing. Another good example of calling the win32 api too.

On Fri, Sep 6, 2013 at 2:18 PM, Pascal Jasmin <[email protected]>wrote:

>
>
> updated function including cleanup code and optimization for hashing
> several strings (can hash data that is passed to tochar first)
> It also actually does match the wikipedia test suite.  Its just backwards.
>
>
> CreateHash =: 3 : 0
>
>  CryptAcquireContext(aProv =. ,
> _1);(<0);(<0);PROV_RSA_AES;CRYPT_VERIFYCONTEXT
> out =. aProv CreateHash L:0  y
>  CryptReleaseContext ({. aProv);0
> out
> :
>   a=. > y
>  CryptCreateHash ({. x) ; 32780 ; 0 ; 0 ; (m=. , _1)
> CryptHashData ({. m) ; (a) ; (# a) ; 0
>
> CryptGetHashParam ({. m); HP_HASHVAL ; ((o2=. , 32 $ ' ' ) ); (,32) ; 0
> CryptDestroyHash ({. m)
> _3 ic o2 NB.memr o, 0 32
> )
>
>    > _2 ([: |."1 <\"1) L:0 hfd each CreateHash'The quick brown fox jumps
> over the lazy dog';'The quick brown fox jumps over the lazy dog.'
>
> ┌──┬──┬──┬──┬──┬──┬──┬──┐
> │d7│a8│fb│b3│07│d7│80│94│
> ├──┼──┼──┼──┼──┼──┼──┼──┤
> │69│ca│9a│bc│b0│08│2e│4f│
> ├──┼──┼──┼──┼──┼──┼──┼──┤
> │8d│56│51│e4│6d│3c│db│76│
> ├──┼──┼──┼──┼──┼──┼──┼──┤
> │2d│02│d0│bf│37│c9│e5│92│
> └──┴──┴──┴──┴──┴──┴──┴──┘
>
> ┌──┬──┬──┬──┬──┬──┬──┬──┐
> │ef│53│7f│25│c8│95│bf│a7│
> ├──┼──┼──┼──┼──┼──┼──┼──┤
> │82│52│65│29│a9│b6│3d│97│
> ├──┼──┼──┼──┼──┼──┼──┼──┤
> │aa│63│15│64│d5│d7│89│c2│
> ├──┼──┼──┼──┼──┼──┼──┼──┤
> │b7│65│44│8c│86│35│fb│6c│
> └──┴──┴──┴──┴──┴──┴──┴──┘
>
>
>
> ----- Original Message -----
> From: Pascal Jasmin <[email protected]>
> To: "[email protected]" <[email protected]>
> Cc:
> Sent: Friday, September 6, 2013 12:40:56 PM
> Subject: Re: [Jprogramming] SHA 256
>
> Thank you bill and joe and everyone for your help.
>
> Here is code that does something, though the wikipedia test case (
> http://en.wikipedia.org/wiki/Sha-2) fails, but I don't know if that is
> because hfd is not the right function.
>
> Question: when you avoid mema calls, then will the memory release itself
> when the function call ends?
>
> PROV_RSA_AES =: 24
> CALG_SHA_256  =: 32780
>
> HP_HASHVAL =: 2
> CRYPT_VERIFYCONTEXT =: 4026531840
> CryptAcquireContext =: ('advapi32.dll CryptAcquireContextA i *x *c *c i
> i') & cd
> CryptReleaseContext =: 'advapi32.dll CryptReleaseContext i i i' & cd
>
> CryptCreateHash =: 'advapi32.dll CryptCreateHash i x i i i *x' & cd
>
> CryptDestroyHash =: 'advapi32.dll CryptDestroyHash i i' & cd
>
> CryptHashData =: 'advapi32.dll CryptHashData i x *c i i' & cd
>
> CryptGetHashParam =: 'advapi32.dll CryptGetHashParam i x i *c *i i' & cd
>
>
> CreateHash =: 3 : 0
> NB. o =. mema 32
>
>  CryptAcquireContext(aProv =. ,
> _1);(<0);(<0);PROV_RSA_AES;CRYPT_VERIFYCONTEXT
>
>  CryptCreateHash ({. aProv) ; CALG_SHA_256 ; 0 ; 0 ; (m=. , _1)
> CryptHashData ({. m) ; (y) ; (# y) ; 0
>
> CryptGetHashParam ({. m); HP_HASHVAL ; (o2=. , 32 $ ' ' ); (,32) ; 0
> NB. _3 ic memr o, 0 32
> _3 ic o2
> )
>
>    hfd  CreateHash 'The quick brown fox jumps over the lazy dog'
> 9480d707b3fba8d7
> 4f2e08b0bc9aca69
> 76db3c6de451568d
> 92e5c937bfd0022d
>    hfd  CreateHash 'The quick brown fox jumps over the lazy dog.'
> a7bf95c8257f53ef
> 973db6a929655282
> c289d7d5641563aa
> 6cfb35868c4465b7
>     CreateHash 'The quick brown fox jumps over the lazy dog'
> _7745954930992895785 5705507333096524393 8564505559054767757
> _7861656333226868179
>
>
>
> ----- Original Message -----
> From: bill lam <[email protected]>
> To: [email protected]
> Cc:
> Sent: Friday, September 6, 2013 11:44:44 AM
> Subject: Re: [Jprogramming] SHA 256
>
> I googled found that sha256 needs aes provider. I'm not sure if
> that will need privilege, please try it by yourself.
>
> [1]
> http://nagareshwar.securityxploded.com/2010/10/22/cryptocode-generate-sha1sha256-hash-using-windows-cryptography-library/
>
> Пт, 06 сен 2013, Pascal Jasmin писал(а):
> > the change produces some success.  It turns out I had the wrong value
> for ALGid (2nd param)
> >
> > I get success with passing the CALG_ID value for SHA1, but SHA256
> (32780) seems to fail on my system
> >
> > CryptCreateHash ({. a2) ; 32772 ; 0 ; 0 ; (m=. , _1) NB. SHA1 hash
> >
> >
> >
> >
> > ----- Original Message -----
> > From: bill lam <[email protected]>
> > To: [email protected]
> > Cc:
> > Sent: Friday, September 6, 2013 10:32:17 AM
> > Subject: Re: [Jprogramming] SHA 256
> >
> > I guess it should be
> >
> > CryptCreateHash =: 'advapi32.dll CryptCreateHash i x i i i *x' & cd
> > CryptCreateHash ({.a); ALG_SID_SHA_256; 0 ; 0 ; (m=.,_1)
> >
> > untested.
> > Пт, 06 сен 2013, Joe Bogner писал(а):
> > > I haven't worked out all the signatures, but I noticed that
> > > CryptAcquireContext was returning zero in your version
> > >
> > > This version returns 1 and correctly populates a value in a
> > >
> > > CryptAcquireContext =: 'advapi32.dll CryptAcquireContextA i *x *c *c i
> i' &
> > > cd
> > > CryptAcquireContext
> (a=.,_1);(<0);(<0);PROV_RSA_FULL;CRYPT_VERIFYCONTEXT
> > >
> > > I haven't been able to use that context in CryptCreateHash yet
> > >
> > > I was thinking that I could do this:
> > >
> > > CryptCreateHash =: 'advapi32.dll CryptCreateHash i *x i i i *x' & cd
> > > CryptCreateHash a; ALG_SID_SHA_256; 0 ; 0 ; (m=.,_1)
> > >
> > > Yet that's returning 0 and m is _1
> > >
> > >
> > >
> > >
> > > On Fri, Sep 6, 2013 at 7:31 AM, Henry Rich <[email protected]>
> wrote:
> > >
> > > > On rereading, I think I am wrong here.  Ignore this.
> > > >
> > > > Henry Rich
> > > >
> > > >
> > > > On 9/6/2013 5:22 AM, Henry Rich wrote:
> > > >
> > > >> I'm looking at
> > > >>
> > > >> CryptCreateHash =: 'advapi32.dll CryptCreateHash i *i i i i *i' & cd
> > > >> err =. CryptCreateHash (<a); ALG_SID_SHA_256 ; 0 ; 0 ; (<<h)
> > > >>
> > > >> and I don't understand why this doesn't give an error on parameters
> a
> > > >> and h.  They correspond to *i descriptors, but they are scalar
> boxes.  I
> > > >> thought they needed to be scalars, so I would use
> > > >>
> > > >> err =. CryptCreateHash a; ALG_SID_SHA_256 ; 0 ; 0 ; h
> > > >>
> > > >> Similar cases later on
> > > >>
> > > >>
> > > >> Untested.
> > > >>
> > > >> Henry Rich
> > > >>
> > > >> On 9/6/2013 12:10 AM, Pascal Jasmin wrote:
> > > >>
> > > >>> I'm trying to get sha256 from microsoft's library working.
> > > >>>
> > > >>> MS documentation on the last call in my function:
> > > >>> http://msdn.microsoft.com/en-**us/library/windows/desktop/**
> > > >>> aa379947(v=vs.85).aspx<
> http://msdn.microsoft.com/en-us/library/windows/desktop/aa379947(v=vs.85).aspx
> >
> > > >>>
> > > >>>
> > > >>> The problem is that the 3rd param to CryptGetHashParam is a
> pointer to
> > > >>> a byte array, and should hold the hash result, but I'm unable to
> see
> > > >>> it change.  The 2nd param in CryptHashData may also be called
> > > >>> incorrectly here.
> > > >>>
> > > >>> any help?
> > > >>>
> > > >>>
> > > >>> ALG_SID_SHA_256 =: 12
> > > >>> ALG_CLASS_HASH =: 32768
> > > >>> PROV_RSA_FULL =:1
> > > >>> PROV_RSA_AES =: 24
> > > >>> HP_HASHVAL =: 2
> > > >>> CRYPT_VERIFYCONTEXT =: 4026531840
> > > >>> CryptAcquireContext =: ('advapi32.dll CryptAcquireContextA i *i c
> c i
> > > >>> i') & cd
> > > >>> NB.(ByRef phProv As Long, ByVal pszContainer As String, ByVal
> > > >>> pszProvider As String, ByVal dwProvType As Long, ByVal dwFlags As
> Long)
> > > >>> CryptReleaseContext =: 'advapi32.dll CryptReleaseContext i i i' &
> cd
> > > >>> NB. (ByVal hProv As Long, ByVal dwFlags As Long) As Long
> > > >>> CryptCreateHash =: 'advapi32.dll CryptCreateHash i *i i i i *i' &
> cd
> > > >>> NB.(ByVal hProv As Long, ByVal Algid As Long, ByVal hKey As Long,
> > > >>> ByVal dwFlags As Long, ByRef phHash As Long) As Long
> > > >>> CryptDestroyHash =: 'advapi32.dll CryptDestroyHash i i' & cd
> > > >>> NB.(ByVal hHash As Long) As Long
> > > >>> CryptHashData =: 'advapi32.dll CryptHashData i *i *c i i' & cd
> > > >>> NB.(ByVal hHash As Long, pbData As Any, ByVal cbData As Long, ByVal
> > > >>> dwFlags As Long) As Long
> > > >>> CryptGetHashParam =: 'advapi32.dll CryptGetHashParam i *i i *c *i
> i' & cd
> > > >>> NB.(ByVal hHash As Long, ByVal dwParam As Long, pbData As Any,
> ByRef
> > > >>> pcbData As Long, ByVal dwFlags As Long) As Long
> > > >>>
> > > >>>
> > > >>>
> > > >>> CreateHash =: 3 : 0
> > > >>> a =. mema 8
> > > >>> h =. mema 128
> > > >>> o =. mema 32
> > > >>>
> > > >>> err=. CryptAcquireContext (<a);' ';' ';PROV_RSA_FULL;CRYPT_**
> > > >>> VERIFYCONTEXT
> > > >>> err =. CryptCreateHash (<a); ALG_SID_SHA_256 ; 0 ; 0 ; (<<h)
> > > >>> y memw o, 0 , # y
> > > >>> CryptHashData (<h) ; (y) ; (# y) ; 0
> > > >>> CryptGetHashParam (<h); HP_HASHVAL ; (<o ); (,32) ; 0
> > > >>> NB. memr o, 0, # y
> > > >>> )
> > > >>>
> > > >>>
> > > >>> vb code that i adapted this from:
> > > >>> http://khoiriyyah.blogspot.ca/**2012/06/vb6-hash-class-md5-**
> > > >>> sha-1-sha-256-sha.html<
> http://khoiriyyah.blogspot.ca/2012/06/vb6-hash-class-md5-sha-1-sha-256-sha.html
> >
> > > >>>
> > > >>> ------------------------------**------------------------------**
> > > >>> ----------
> > > >>> For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> > > >>>
> > > >>>  ------------------------------**------------------------------**
> > > >> ----------
> > > >> For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> > > >>
> > > >>  ------------------------------**------------------------------**
> > > > ----------
> > > > For information about J forums see
> http://www.jsoftware.com/**forums.htm<http://www.jsoftware.com/forums.htm>
> > > >
> > > ----------------------------------------------------------------------
> > > For information about J forums see http://www.jsoftware.com/forums.htm
> >
> > --
> > regards,
> > ====================================================
> > GPG key 1024D/4434BAB3 2008-08-24
> > gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
> > ----------------------------------------------------------------------
> > For information about J forums see http://www.jsoftware.com/forums.htm
>
> --
> regards,
> ====================================================
> GPG key 1024D/4434BAB3 2008-08-24
> gpg --keyserver subkeys.pgp.net --recv-keys 4434BAB3
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to