Time for an 2014 update…
This commit is contained in:
parent
372c577f83
commit
09687c4926
2520 changed files with 34227 additions and 7318 deletions
52
Task/SHA-1/AutoHotkey/sha-1.ahk
Normal file
52
Task/SHA-1/AutoHotkey/sha-1.ahk
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
str := "Rosetta Code"
|
||||
MsgBox, % "String:`n" (str) "`n`nSHA:`n" SHA(str)
|
||||
|
||||
|
||||
|
||||
; SHA ===============================================================================
|
||||
SHA(string, encoding = "utf-8")
|
||||
{
|
||||
return CalcStringHash(string, 0x8004, encoding)
|
||||
}
|
||||
|
||||
; CalcAddrHash ======================================================================
|
||||
CalcAddrHash(addr, length, algid, byref hash = 0, byref hashlength = 0)
|
||||
{
|
||||
static h := [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "A", "B", "C", "D", "E", "F"]
|
||||
static b := h.minIndex()
|
||||
o := ""
|
||||
if (DllCall("advapi32\CryptAcquireContext", "Ptr*", hProv, "Ptr", 0, "Ptr", 0, "UInt", 24, "UInt", 0xF0000000))
|
||||
{
|
||||
if (DllCall("advapi32\CryptCreateHash", "Ptr", hProv, "UInt", algid, "UInt", 0, "UInt", 0, "Ptr*", hHash))
|
||||
{
|
||||
if (DllCall("advapi32\CryptHashData", "Ptr", hHash, "Ptr", addr, "UInt", length, "UInt", 0))
|
||||
{
|
||||
if (DllCall("advapi32\CryptGetHashParam", "Ptr", hHash, "UInt", 2, "Ptr", 0, "UInt*", hashlength, "UInt", 0))
|
||||
{
|
||||
VarSetCapacity(hash, hashlength, 0)
|
||||
if (DllCall("advapi32\CryptGetHashParam", "Ptr", hHash, "UInt", 2, "Ptr", &hash, "UInt*", hashlength, "UInt", 0))
|
||||
{
|
||||
loop, % hashlength
|
||||
{
|
||||
v := NumGet(hash, A_Index - 1, "UChar")
|
||||
o .= h[(v >> 4) + b] h[(v & 0xf) + b]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
DllCall("advapi32\CryptDestroyHash", "Ptr", hHash)
|
||||
}
|
||||
DllCall("advapi32\CryPtreleaseContext", "Ptr", hProv, "UInt", 0)
|
||||
}
|
||||
return o
|
||||
}
|
||||
|
||||
; CalcStringHash ====================================================================
|
||||
CalcStringHash(string, algid, encoding = "utf-8", byref hash = 0, byref hashlength = 0)
|
||||
{
|
||||
chrlength := (encoding = "cp1200" || encoding = "utf-16") ? 2 : 1
|
||||
length := (StrPut(string, encoding) - 1) * chrlength
|
||||
VarSetCapacity(data, length, 0)
|
||||
StrPut(string, &data, floor(length / chrlength), encoding)
|
||||
return CalcAddrHash(&data, length, algid, hash, hashlength)
|
||||
}
|
||||
|
|
@ -1,6 +1,6 @@
|
|||
sub postfix:<mod2³²>(\x) { x % 2**32 }
|
||||
sub infix:<⊕>(\x,\y) { (x + y)mod2³² }
|
||||
sub S(\n,\X) { (X +< n)mod2³² +| (X +> (32-n)) }
|
||||
sub postfix:<mod2³²> { $^x % 2**32 }
|
||||
sub infix:<⊕> { ($^x + $^y)mod2³² }
|
||||
sub S { ($^x +< $^n)mod2³² +| ($x +> (32-$n)) }
|
||||
|
||||
my \f = -> \B,\C,\D { (B +& C) +| ((+^B)mod2³² +& D) },
|
||||
-> \B,\C,\D { B +^ C +^ D },
|
||||
|
|
@ -12,32 +12,33 @@ my \K = 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6;
|
|||
sub sha1-pad(Blob $msg)
|
||||
{
|
||||
my \bits = 8 * $msg.elems;
|
||||
my @padded = $msg.list, 0x80, 0x00 xx (-(bits div 8 + 1 + 8) % 64);
|
||||
my @padded = $msg.list, 0x80, 0x00 xx (-($msg.elems + 1 + 8) % 64);
|
||||
@padded.map({ :256[$^a,$^b,$^c,$^d] }), (bits +> 32)mod2³², (bits)mod2³²;
|
||||
}
|
||||
|
||||
sub sha1-block(@H is rw, @M)
|
||||
{
|
||||
my @W = @M;
|
||||
@W.push: S(1, @W[$_-3] +^ @W[$_-8] +^ @W[$_-14] +^ @W[$_-16]) for 16..79;
|
||||
@W.push: S(1, [+^] @W[$_ «-« <3 8 14 16>] ) for 16 .. 79;
|
||||
|
||||
my ($A,$B,$C,$D,$E) = @H;
|
||||
for 0..79 -> \t {
|
||||
my \TEMP = S(5,$A) ⊕ f[t div 20]($B,$C,$D) ⊕ $E ⊕ @W[t] ⊕ K[t div 20];
|
||||
$E = $D; $D = $C; $C = S(30,$B); $B = $A; $A = TEMP;
|
||||
($A, $B, $C, $D, $E) =
|
||||
S(5,$A) ⊕ f[t div 20]($B,$C,$D) ⊕ $E ⊕ @W[t] ⊕ K[t div 20],
|
||||
$A, S(30,$B), $C, $D;
|
||||
}
|
||||
@H «⊕=» ($A,$B,$C,$D,$E);
|
||||
@H »⊕=« ($A,$B,$C,$D,$E);
|
||||
}
|
||||
|
||||
sub sha1(Blob $msg)
|
||||
sub sha1(Blob $msg) returns Blob
|
||||
{
|
||||
my @M = sha1-pad($msg);
|
||||
my @H = 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0;
|
||||
sha1-block(@H,@M[$_..$_+15]) for 0,16...^+@M;
|
||||
@H;
|
||||
sha1-block(@H,@M[$_..$_+15]) for 0, 16...^ +@M;
|
||||
Blob.new: map -> $w is rw { reverse gather for ^4 { take $w % 256; $w div= 256 } }, @H;
|
||||
}
|
||||
|
||||
say sha1(.encode('ascii'))».base(16), " $_"
|
||||
say sha1(.encode('ascii')), " $_"
|
||||
for 'abc',
|
||||
'abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq',
|
||||
'Rosetta Code',
|
||||
|
|
|
|||
7
Task/SHA-1/Seed7/sha-1.seed7
Normal file
7
Task/SHA-1/Seed7/sha-1.seed7
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
$ include "seed7_05.s7i";
|
||||
include "msgdigest.s7i";
|
||||
|
||||
const proc: main is func
|
||||
begin
|
||||
writeln(hex(sha1("Rosetta Code")));
|
||||
end func;
|
||||
Loading…
Add table
Add a link
Reference in a new issue