AWS API Dlang, hmac sha256 function.

Rikki Cattermole via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Oct 3 05:50:58 PDT 2015


On 04/10/15 1:49 AM, holo wrote:
> On Saturday, 3 October 2015 at 12:22:11 UTC, Rikki Cattermole wrote:
>> On 04/10/15 1:09 AM, holo wrote:
>>> On Saturday, 3 October 2015 at 05:02:58 UTC, Rikki Cattermole wrote:
>>>> On 03/10/15 6:01 PM, Rikki Cattermole wrote:
>>>>> On 03/10/15 4:54 PM, holo wrote:
>>>>>> [...]
>>>>>
>>>>> By the looks of that error message with paths, botan isn't actually
>>>>> added as a dependency. Can you please paste the dub file?
>>>>
>>>> Ohhhh wait nevermind.
>>>> Use dub to compile/run your program. You are using the shebang line!
>>>>
>>>> $ dub run
>>>>
>>>>>> [...]
>>>>>
>>>>> I can't say for certain if it is not exact. The reason I did not
>>>>> answer
>>>>> it is because I am not familiar with environment or any of what you
>>>>> are
>>>>> doing.
>>>>> I can unfortunately only point you in the right direction.
>>>
>>> Thank you for explaining how to use dub.
>>>
>>> I find out in master branch of phobos on git hub is included hmac.d
>>> module which will be added in next release of phobos so i think that
>>> will be best solution for me to stick with standard library for
>>> beginning.
>>>
>>> https://github.com/D-Programming-Language/phobos/tree/master/std
>>>
>>> I downloaded hmac.d and new version of digest.d file and place them in
>>> my phobos library. I think it exactly contains what i need but when im
>>> trying to test it i have such error:
>>>
>>> $ ./app.d
>>> ./app.d(9): Error: template std.digest.hmac.hmac cannot deduce function
>>> from argument types !(SHA!(512, 256))(immutable(ubyte)[]), candidates
>>> are:
>>> /usr/include/dlang/dmd/std/digest/hmac.d(202): std.digest.hmac.hmac(H)
>>> if (isDigest!H && hasBlockSize!H)
>>> /usr/include/dlang/dmd/std/digest/hmac.d(208): std.digest.hmac.hmac(H,
>>> ulong blockSize)(scope const(ubyte)[] secret) if (isDigest!H)
>>> Failed: ["dmd", "-v", "-o-", "./app.d", "-I."]
>>>
>>>
>>>
>>> My test code (based on unint test from module) looks like that:
>>>
>>> #!/usr/bin/rdmd
>>>
>>> import std.stdio;
>>> import std.digest.sha, std.digest.hmac;
>>> import std.string : representation;
>>>
>>> void main()
>>> {
>>>      auto hmac = hmac!SHA256("secretkey".representation);
>>>      auto digest = hmac.put("texttohash".representation).finish;
>>>      writeln(digest);
>>> }
>>>
>>> Am i using it correctly?
>>
>> By the looks of things the problem is with SHA256, I'm guessing it
>> doesn't have its block size defined.
>> https://github.com/D-Programming-Language/phobos/blob/master/std/digest/digest.d#L394
>>
>> You'll also need to update sha.d as well. Otherwise it looks good.
>
> I updated sha.d and now im getting following error:
>
> $ ./app.d
> /usr/include/dlang/dmd/std/digest/sha.d(225): Error: pure function
> 'std.digest.sha.SHA!(512u, 160u).SHA.transform' cannot call impure
> function 'core.cpuid.ssse3'
> /usr/include/dlang/dmd/std/digest/digest.d(285): Error: template
> instance std.range.primitives.isOutputRange!(SHA!(512u, 160u),
> const(ubyte)[]) error instantiating
> /usr/include/dlang/dmd/std/digest/digest.d(851): instantiated from here:
> isDigest!(SHA!(512u, 160u))
> /usr/include/dlang/dmd/std/digest/sha.d(1179):        while looking for
> match for WrapperDigest!(SHA!(512u, 160u))
> Failed: ["dmd", "-v", "-o-", "./app.d", "-I."]

And one more file (ssse3.d) needs to be updated.
You are going to be playing whack a mole I think for a while.


More information about the Digitalmars-d-learn mailing list