View mode: basic / threaded / horizontal-split · Log in · Help
March 23, 2006
Re: Crypto, deimos, and ares
Sean Kelly wrote:
> Regan Heath wrote:
> 
>> You might be interested in some existing crypto work I've done:
>>   http://svn.dsource.org/projects/deimos/trunk/etc/crypto/hash/
>>
>> The library "deimos" never really got off the ground, I think it may 
>> be tome to salvage what can be salvaged from deimos and put it 
>> somewhere else, perhaps in "Ares", Shaun? If the crypto stuff is 
>> unsuitable for any reason let me know and I can re-work it.
> 
> 
> That's a bit past the level of what I've been focusing on, but it's 
> certainly a candidate for eventual inclusion.
> 
> 
> Sean

I've seriously considered adding a crypto package to Mango; particularly 
in support of network-oriented apps (MD4, MD5, SHA1, some SSL support, 
and so on). Perhaps that might be a reasonable home for the time being?

Should only need support for void[], right?
March 23, 2006
Re: Crypto, deimos, and ares
kris wrote:
> Sean Kelly wrote:
>> Regan Heath wrote:
>>
>>> You might be interested in some existing crypto work I've done:
>>>   http://svn.dsource.org/projects/deimos/trunk/etc/crypto/hash/
>>>
>>> The library "deimos" never really got off the ground, I think it may 
>>> be tome to salvage what can be salvaged from deimos and put it 
>>> somewhere else, perhaps in "Ares", Shaun? If the crypto stuff is 
>>> unsuitable for any reason let me know and I can re-work it.
>>
>>
>> That's a bit past the level of what I've been focusing on, but it's 
>> certainly a candidate for eventual inclusion.
> 
> I've seriously considered adding a crypto package to Mango; particularly 
> in support of network-oriented apps (MD4, MD5, SHA1, some SSL support, 
> and so on). Perhaps that might be a reasonable home for the time being?

Definately.  As I mentioned in my other post, I'd like to have a crypto 
filter anyway :-)

> Should only need support for void[], right?

Aye.


Sean
March 24, 2006
Re: Crypto, deimos, and ares
On Thu, 23 Mar 2006 15:15:03 -0800, kris <foo@bar.com> wrote:
> Sean Kelly wrote:
>> Regan Heath wrote:
>>
>>> You might be interested in some existing crypto work I've done:
>>>   http://svn.dsource.org/projects/deimos/trunk/etc/crypto/hash/
>>>
>>> The library "deimos" never really got off the ground, I think it may  
>>> be tome to salvage what can be salvaged from deimos and put it  
>>> somewhere else, perhaps in "Ares", Shaun? If the crypto stuff is  
>>> unsuitable for any reason let me know and I can re-work it.
>>   That's a bit past the level of what I've been focusing on, but it's  
>> certainly a candidate for eventual inclusion.
>>   Sean
>
> I've seriously considered adding a crypto package to Mango; particularly  
> in support of network-oriented apps (MD4, MD5, SHA1, some SSL support,  
> and so on). Perhaps that might be a reasonable home for the time being?
>
> Should only need support for void[], right?

(this is essentially a reply to everyone on this thread)

Yes, I believe so.

Kris you're welcome to place the crypto code I wrote into Mango. I believe  
I put a BSD stlye license on it, let me know if that is a problem.

The interface I used is essentially the same as the std.md5 one in phobos.

It's all done with structs and mixins (which essentially emulates class  
inheritance). The reason I used structs was to make it easy to copy/store  
a hash state i.e. you just assign one MD5 to another and it copies the  
context data. Not sure if that is a good enough reason now, perhaps  
classes with dup methods would be better.

Essentially there are some basic methods:

  void start();
  void update(void[] input);
  void finish(T digest);
  void sum(T digest, void[] input);

which are mixed into the real implementation.

The idea behind these methods is that you can call "sum" if you have all  
the data at once (sum calls the other 3, meaning you cannot mix it with  
calls to the other), or you can call start, then update any number of  
times, and finally finish. The latter 3 methods make it easy to integrate  
with a stream, for example.

Each real implementation defines a trasform method in the form:

  void transform(ubyte[] input);

which is called by the mixed methods to process the data, in addition the  
following methods:

  void padMessage(ubyte[] at);
  void padLength(ubyte[] at, ulong length);

are called to perform the padding, and:

  void extend();

was required to handle MD2 being a little different to the others.

This design pattern and interface works for: MD2, MD4, MD5, SHA0, SHA1,  
SHA256, SHA512, and Tiger. Does it work for blowfish as well? What does  
the .NET API look like?

Regan
March 24, 2006
Re: Crypto, deimos, and ares
kris wrote:
> Sean Kelly wrote:
>> Regan Heath wrote:
>>
>>> You might be interested in some existing crypto work I've done:
>>>   http://svn.dsource.org/projects/deimos/trunk/etc/crypto/hash/
>>>
>>> The library "deimos" never really got off the ground, I think it may 
>>> be tome to salvage what can be salvaged from deimos and put it 
>>> somewhere else, perhaps in "Ares", Shaun? If the crypto stuff is 
>>> unsuitable for any reason let me know and I can re-work it.
>>
>>
>> That's a bit past the level of what I've been focusing on, but it's 
>> certainly a candidate for eventual inclusion.
>>
>>
>> Sean
> 
> I've seriously considered adding a crypto package to Mango; particularly 
> in support of network-oriented apps (MD4, MD5, SHA1, some SSL support, 
> and so on). Perhaps that might be a reasonable home for the time being?
> 
> Should only need support for void[], right?

As I foresee the eventual oneness of Ares + Mango, sure.
March 24, 2006
Re: Crypto, deimos, and ares
Regan Heath wrote:
> On Thu, 23 Mar 2006 15:15:03 -0800, kris <foo@bar.com> wrote:
> 
>> Sean Kelly wrote:
>>
>>> Regan Heath wrote:
>>>
>>>> You might be interested in some existing crypto work I've done:
>>>>   http://svn.dsource.org/projects/deimos/trunk/etc/crypto/hash/
>>>>
>>>> The library "deimos" never really got off the ground, I think it 
>>>> may  be tome to salvage what can be salvaged from deimos and put it  
>>>> somewhere else, perhaps in "Ares", Shaun? If the crypto stuff is  
>>>> unsuitable for any reason let me know and I can re-work it.
>>>
>>>   That's a bit past the level of what I've been focusing on, but 
>>> it's  certainly a candidate for eventual inclusion.
>>>   Sean
>>
>>
>> I've seriously considered adding a crypto package to Mango; 
>> particularly  in support of network-oriented apps (MD4, MD5, SHA1, 
>> some SSL support,  and so on). Perhaps that might be a reasonable home 
>> for the time being?
>>
>> Should only need support for void[], right?
> 
> 
> (this is essentially a reply to everyone on this thread)
> 
> Yes, I believe so.
> 
> Kris you're welcome to place the crypto code I wrote into Mango. I 
> believe  I put a BSD stlye license on it, let me know if that is a problem.
> 
> The interface I used is essentially the same as the std.md5 one in phobos.
> 
> It's all done with structs and mixins (which essentially emulates class  
> inheritance). The reason I used structs was to make it easy to 
> copy/store  a hash state i.e. you just assign one MD5 to another and it 
> copies the  context data. Not sure if that is a good enough reason now, 
> perhaps  classes with dup methods would be better.
> 
> Essentially there are some basic methods:
> 
>   void start();
>   void update(void[] input);
>   void finish(T digest);
>   void sum(T digest, void[] input);
> 
> which are mixed into the real implementation.
> 
> The idea behind these methods is that you can call "sum" if you have 
> all  the data at once (sum calls the other 3, meaning you cannot mix it 
> with  calls to the other), or you can call start, then update any number 
> of  times, and finally finish. The latter 3 methods make it easy to 
> integrate  with a stream, for example.
> 
> Each real implementation defines a trasform method in the form:
> 
>   void transform(ubyte[] input);
> 
> which is called by the mixed methods to process the data, in addition 
> the  following methods:
> 
>   void padMessage(ubyte[] at);
>   void padLength(ubyte[] at, ulong length);
> 
> are called to perform the padding, and:
> 
>   void extend();
> 
> was required to handle MD2 being a little different to the others.
> 
> This design pattern and interface works for: MD2, MD4, MD5, SHA0, SHA1,  
> SHA256, SHA512, and Tiger. Does it work for blowfish as well? What does  
> the .NET API look like?
> 
> Regan

That all sounds great (though I'll admit to being more than a bit leery 
of D mixins). I'll take a look at the license, and get back to you via 
the Deimos forum?

- Kris
March 28, 2006
Re: Crypto, deimos, and ares
On Thu, 23 Mar 2006 16:20:02 -0800, kris <foo@bar.com> wrote:
> That all sounds great (though I'll admit to being more than a bit leery  
> of D mixins). I'll take a look at the license, and get back to you via  
> the Deimos forum?

I just went ahead and converted my hashing code from the struct+mixin  
approach to a class+factory approach. The source included in the attached  
zip file hash.zip is public domain, this includes:

  base.d
  factory.d
  md2.d
  md4.d
  md5.d
  sha0.d
  sha1.d
  sha256.d
  sha512.d
  tiger.d

I would very much like to see my code appear in any library that  
needs/wants it. It'd be nice to get a mention somewhere too, y'know for my  
ego n'all.

Regan
March 28, 2006
Re: Crypto, deimos, and ares
Regan Heath wrote:
> On Thu, 23 Mar 2006 16:20:02 -0800, kris <foo@bar.com> wrote:
> 
>> That all sounds great (though I'll admit to being more than a bit 
>> leery  of D mixins). I'll take a look at the license, and get back to 
>> you via  the Deimos forum?
> 
> 
> I just went ahead and converted my hashing code from the struct+mixin  
> approach to a class+factory approach. The source included in the 
> attached  zip file hash.zip is public domain, this includes:
> 
>   base.d
>   factory.d
>   md2.d
>   md4.d
>   md5.d
>   sha0.d
>   sha1.d
>   sha256.d
>   sha512.d
>   tiger.d
> 
> I would very much like to see my code appear in any library that  
> needs/wants it. It'd be nice to get a mention somewhere too, y'know for 
> my  ego n'all.
> 
> Regan


Nice! It's now got a home in mango.crypto.*

- Kris
Next ›   Last »
1 2
Top | Discussion index | About this forum | D home