Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
4
Task/RIPEMD-160/00-META.yaml
Normal file
4
Task/RIPEMD-160/00-META.yaml
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
category:
|
||||
- Checksums
|
||||
from: http://rosettacode.org/wiki/RIPEMD-160
|
||||
9
Task/RIPEMD-160/00-TASK.txt
Normal file
9
Task/RIPEMD-160/00-TASK.txt
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
'''RIPEMD-160''' is another hash function; it computes a 160-bit message digest.
|
||||
|
||||
There is a [http://homes.esat.kuleuven.be/~bosselae/ripemd160.html RIPEMD-160 home page], with test vectors and [http://www.esat.kuleuven.be/~bosselae/ripemd/rmd160.txt pseudocode for RIPEMD-160].
|
||||
For padding the message, RIPEMD-160 acts like [[MD4]] (RFC 1320).
|
||||
|
||||
Find the RIPEMD-160 message digest of a string of [[octet]]s.
|
||||
Use the ASCII encoded string “<tt>Rosetta Code</tt>”.
|
||||
You may either call an RIPEMD-160 library, or implement RIPEMD-160 in your language.
|
||||
|
||||
34
Task/RIPEMD-160/Ada/ripemd-160.ada
Normal file
34
Task/RIPEMD-160/Ada/ripemd-160.ada
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
with Ada.Text_IO;
|
||||
|
||||
with CryptAda.Pragmatics;
|
||||
with CryptAda.Digests.Message_Digests.RIPEMD_160;
|
||||
with CryptAda.Digests.Hashes;
|
||||
with CryptAda.Utils.Format;
|
||||
|
||||
procedure RC_RIPEMD_160 is
|
||||
use CryptAda.Pragmatics;
|
||||
use CryptAda.Digests.Message_Digests;
|
||||
use CryptAda.Digests;
|
||||
|
||||
function To_Byte_Array (Item : String) return Byte_Array is
|
||||
Result : Byte_Array (Item'Range);
|
||||
begin
|
||||
for I in Result'Range loop
|
||||
Result (I) := Byte (Character'Pos (Item (I)));
|
||||
end loop;
|
||||
return Result;
|
||||
end To_Byte_Array;
|
||||
|
||||
Text : constant String := "Rosetta Code";
|
||||
Bytes : constant Byte_Array := To_Byte_Array (Text);
|
||||
Handle : constant Message_Digest_Handle := RIPEMD_160.Get_Message_Digest_Handle;
|
||||
Pointer : constant Message_Digest_Ptr := Get_Message_Digest_Ptr (Handle);
|
||||
Hash : Hashes.Hash;
|
||||
begin
|
||||
Digest_Start (Pointer);
|
||||
Digest_Update (Pointer, Bytes);
|
||||
Digest_End (Pointer, Hash);
|
||||
|
||||
Ada.Text_IO.Put_Line
|
||||
("""" & Text & """: " & CryptAda.Utils.Format.To_Hex_String (Hashes.Get_Bytes (Hash)));
|
||||
end RC_RIPEMD_160;
|
||||
17
Task/RIPEMD-160/C-sharp/ripemd-160.cs
Normal file
17
Task/RIPEMD-160/C-sharp/ripemd-160.cs
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
using System;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
|
||||
class Program
|
||||
{
|
||||
static void Main(string[] args)
|
||||
{
|
||||
string text = "Rosetta Code";
|
||||
byte[] bytes = Encoding.ASCII.GetBytes(text);
|
||||
RIPEMD160 myRIPEMD160 = RIPEMD160Managed.Create();
|
||||
byte[] hashValue = myRIPEMD160.ComputeHash(bytes);
|
||||
var hexdigest = BitConverter.ToString(hashValue).Replace("-", "").ToLower();
|
||||
Console.WriteLine(hexdigest);
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
15
Task/RIPEMD-160/C/ripemd-160.c
Normal file
15
Task/RIPEMD-160/C/ripemd-160.c
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
#ifndef RMDsize
|
||||
#define RMDsize 160
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#if RMDsize == 128
|
||||
#include "rmd128.h"
|
||||
#include "rmd128.c" /* Added to remove errors during compilation */
|
||||
#elif RMDsize == 160
|
||||
#include "rmd160.h"
|
||||
#include "rmd160.c" /* Added to remove errors during compilation */
|
||||
#endif
|
||||
2
Task/RIPEMD-160/Clojure/ripemd-160.clj
Normal file
2
Task/RIPEMD-160/Clojure/ripemd-160.clj
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
(use 'pandect.core)
|
||||
(ripemd160 "Rosetta Code")
|
||||
8
Task/RIPEMD-160/Common-Lisp/ripemd-160.lisp
Normal file
8
Task/RIPEMD-160/Common-Lisp/ripemd-160.lisp
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
(ql:quickload 'ironclad)
|
||||
(defun string-to-ripemd-160 (str)
|
||||
"Return the RIPEMD-160 digest of the given ASCII string."
|
||||
(ironclad:byte-array-to-hex-string
|
||||
(ironclad:digest-sequence :ripemd-160
|
||||
(ironclad:ascii-string-to-byte-array str)))
|
||||
|
||||
(string-to-ripemd-160 "Rosetta Code")
|
||||
5
Task/RIPEMD-160/D/ripemd-160.d
Normal file
5
Task/RIPEMD-160/D/ripemd-160.d
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
void main() {
|
||||
import std.stdio, std.digest.ripemd;
|
||||
|
||||
writefln("%(%02x%)", "Rosetta Code".ripemd160Of);
|
||||
}
|
||||
30
Task/RIPEMD-160/Delphi/ripemd-160.delphi
Normal file
30
Task/RIPEMD-160/Delphi/ripemd-160.delphi
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
program RIPEMD160;
|
||||
|
||||
{$APPTYPE CONSOLE}
|
||||
|
||||
uses
|
||||
System.SysUtils,
|
||||
DCPripemd160;
|
||||
|
||||
function HashRipemd160(const Input: Ansistring): TArray<byte>;
|
||||
var
|
||||
Hasher: TDCP_ripemd160;
|
||||
begin
|
||||
Hasher := TDCP_ripemd160.Create(nil);
|
||||
try
|
||||
Hasher.Init;
|
||||
Hasher.UpdateStr(Input);
|
||||
SetLength(Result, Hasher.HashSize div 8);
|
||||
Hasher.final(Result[0]);
|
||||
finally
|
||||
Hasher.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
for var b in HashRipemd160('Rosetta Code') do
|
||||
begin
|
||||
write(b.ToHexString(2));
|
||||
end;
|
||||
readln;
|
||||
end.
|
||||
3
Task/RIPEMD-160/Factor/ripemd-160.factor
Normal file
3
Task/RIPEMD-160/Factor/ripemd-160.factor
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
USING: checksums checksums.ripemd io math.parser ;
|
||||
|
||||
"Rosetta Code" ripemd-160 checksum-bytes bytes>hex-string print
|
||||
34
Task/RIPEMD-160/Fortran/ripemd-160.f
Normal file
34
Task/RIPEMD-160/Fortran/ripemd-160.f
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
program main
|
||||
use, intrinsic :: iso_c_binding
|
||||
implicit none
|
||||
|
||||
integer, parameter :: DIGEST_LEN = 20
|
||||
integer, parameter :: HASH_LEN = 40
|
||||
|
||||
interface
|
||||
function c_ripemd160(d, n, md) bind(c, name='RIPEMD160')
|
||||
import :: c_char, c_long, c_ptr
|
||||
implicit none
|
||||
character(kind=c_char), intent(in) :: d
|
||||
integer(kind=c_long), intent(in), value :: n
|
||||
character(kind=c_char), intent(in) :: md
|
||||
type(c_ptr) :: c_ripemd160
|
||||
end function c_ripemd160
|
||||
end interface
|
||||
|
||||
print '(a)', ripemd160('Rosetta Code')
|
||||
contains
|
||||
function ripemd160(str) result(hash)
|
||||
character(len=*), intent(in) :: str
|
||||
character(len=HASH_LEN) :: hash
|
||||
|
||||
character(len=DIGEST_LEN) :: raw
|
||||
integer :: i
|
||||
type(c_ptr) :: ptr
|
||||
|
||||
hash = ' '
|
||||
ptr = c_ripemd160(str, len(str, kind=c_long), raw)
|
||||
if (.not. c_associated(ptr)) return
|
||||
write (hash, '(20z2.2)') (raw(i:i), i = 1, DIGEST_LEN)
|
||||
end function ripemd160
|
||||
end program main
|
||||
179
Task/RIPEMD-160/FreeBASIC/ripemd-160.basic
Normal file
179
Task/RIPEMD-160/FreeBASIC/ripemd-160.basic
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
' version 22-10-2016
|
||||
' compile with: fbc -s console
|
||||
|
||||
Function RIPEMD_160(message As String) As String
|
||||
|
||||
#Macro ROtate_left(x, n)
|
||||
(x Shl n Or x Shr (32 - n))
|
||||
#EndMacro
|
||||
|
||||
#Macro f1(x, y, z)
|
||||
(x Xor y Xor z) ' (0 <= j <= 15)
|
||||
#EndMacro
|
||||
|
||||
#Macro f2(x, y, z)
|
||||
((x And y) Or ((Not x) And z)) ' (16 <= j <= 31)
|
||||
#EndMacro
|
||||
|
||||
#Macro f3(x, y, z)
|
||||
((x Or (Not y)) Xor z) ''(32 <= j <= 47)
|
||||
#EndMacro
|
||||
|
||||
#Macro f4(x, y, z)
|
||||
((x And z) Or (y And (Not z))) ''(48 <= j <= 63)
|
||||
#EndMacro
|
||||
|
||||
#Macro f5(x, y, z)
|
||||
(x Xor (y Or (Not z))) ''(64 <= j <= 79)
|
||||
#EndMacro
|
||||
|
||||
Dim As UInteger<32> K(1 To 5), K1(1 To 5)
|
||||
|
||||
K(1) = &H00000000 ' (0 <= j <= 15)
|
||||
K(2) = &H5A827999 ' (16 <= j <= 31)
|
||||
K(3) = &H6ED9EBA1 ' (32 <= j <= 47)
|
||||
K(4) = &H8F1BBCDC ' (48 <= j <= 63)
|
||||
K(5) = &HA953FD4E ' (64 <= j <= 79)
|
||||
K1(1) = &H50A28BE6 ' (0 <= j <= 15)
|
||||
K1(2) = &H5C4DD124 ' (16 <= j <= 31)
|
||||
K1(3) = &H6D703EF3 ' (32 <= j <= 47)
|
||||
K1(4) = &H7A6D76E9 ' (48 <= j <= 63)
|
||||
K1(5) = &H00000000 ' (64 <= j <= 79)
|
||||
|
||||
Dim As UByte r(16 To ...) = _
|
||||
{ 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, _
|
||||
3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, _
|
||||
1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, _
|
||||
4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13 }
|
||||
|
||||
Dim As UByte r1(0 To ...) = _
|
||||
{ 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, _
|
||||
6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, _
|
||||
15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, _
|
||||
8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, _
|
||||
12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11 }
|
||||
|
||||
Dim As UByte s(0 To ...) = _
|
||||
{ 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, _
|
||||
7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, _
|
||||
11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, _
|
||||
11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, _
|
||||
9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 }
|
||||
|
||||
Dim As UByte s1(0 To ...) = _
|
||||
{ 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, _
|
||||
9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, _
|
||||
9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, _
|
||||
15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, _
|
||||
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 }
|
||||
|
||||
Dim As UInteger<32> h0 = &H67452301
|
||||
Dim As UInteger<32> h1 = &HEFCDAB89
|
||||
Dim As UInteger<32> h2 = &H98BADCFE
|
||||
Dim As UInteger<32> h3 = &H10325476
|
||||
Dim As UInteger<32> h4 = &HC3D2E1F0
|
||||
|
||||
Dim As Long i, j
|
||||
|
||||
Dim As ULongInt l = Len(message)
|
||||
' set the first bit after the message to 1
|
||||
message = message + Chr(1 Shl 7)
|
||||
' add one char to the length
|
||||
Dim As ULong padding = 64 - ((l +1) Mod (512 \ 8)) ' 512 \ 8 = 64 char.
|
||||
|
||||
' check if we have enough room for inserting the length
|
||||
If padding < 8 Then padding = padding + 64
|
||||
|
||||
message = message + String(padding, Chr(0)) ' adjust length
|
||||
Dim As ULong l1 = Len(message) ' new length
|
||||
|
||||
l = l * 8 ' orignal length in bits
|
||||
' create ubyte ptr to point to l ( = length in bits)
|
||||
Dim As UByte Ptr ub_ptr = Cast(UByte Ptr, @l)
|
||||
|
||||
For i = 0 To 7 'copy length of message to the last 8 bytes
|
||||
message[l1 -8 + i] = ub_ptr[i]
|
||||
Next
|
||||
|
||||
Dim As UInteger<32> A, B, C, D, E, A1, B1, C1, D1, E1, T, T1
|
||||
|
||||
For i = 0 To (l1 -1) \ 64 ' split into 64 byte block
|
||||
|
||||
' x point to 16 * 4byte block inside the string message
|
||||
Dim As UInteger<32> Ptr X = Cast(UInteger<32> Ptr, @message[i*64])
|
||||
|
||||
A = h0 : B = h1 : C = h2 : D = h3 : E = h4
|
||||
A1 = h0 : B1 = h1 : C1 = h2 : D1 = h3 : E1 = h4
|
||||
|
||||
For j = 0 To 79
|
||||
Select Case As Const j
|
||||
Case 0 To 15
|
||||
T = A + f1(B, C, D) + X[j] '+ K(1)
|
||||
T = ROtate_Left(T, s(j)) + E
|
||||
T1 = A1 + f5(B1, C1, D1) + X[r1(j)] + K1(1)
|
||||
T1 = ROtate_Left(T1, s1(j)) + E1
|
||||
Case 16 To 31
|
||||
T = A + f2(B, C, D) + X[r(j)] + K(2)
|
||||
T = ROtate_Left(T, s(j)) + E
|
||||
T1 = A1 + f4(B1, C1, D1) + X[r1(j)] + K1(2)
|
||||
T1 = ROtate_Left(T1, s1(j)) + E1
|
||||
Case 32 To 47
|
||||
T = A + f3(B, C, D) + X[r(j)] + K(3)
|
||||
T = ROtate_Left(T, s(j)) + E
|
||||
T1 = A1 + f3(B1, C1, D1) + X[r1(j)] + K1(3)
|
||||
T1 = ROtate_Left(T1, s1(j)) + E1
|
||||
Case 48 To 63
|
||||
T = A + f4(B, C, D) + X[r(j)] + K(4)
|
||||
T = ROtate_Left(T, s(j)) + E
|
||||
T1 = A1 + f2(B1, C1, D1) + X[r1(j)] + K1(4)
|
||||
T1 = ROtate_Left(T1, s1(j)) + E1
|
||||
Case 64 To 79
|
||||
T = A + f5(B, C, D) + X[r(j)] + K(5)
|
||||
T = ROtate_Left(T, s(j)) + E
|
||||
T1 = A1 + f1(B1, C1, D1) + X[r1(j)] '+ K1(5)
|
||||
T1 = ROtate_Left(T1, s1(j)) + E1
|
||||
End Select
|
||||
|
||||
A = E : E = D : D = ROtate_Left(C, 10) : C = B : B = T
|
||||
A1 = E1 : E1 = D1 : D1 = ROtate_left(C1, 10) : C1 = B1 : B1 = T1
|
||||
|
||||
Next
|
||||
|
||||
T = h1 + C + D1
|
||||
h1 = h2 + D + E1
|
||||
h2 = h3 + E + A1
|
||||
h3 = h4 + A + B1
|
||||
h4 = h0 + B + C1
|
||||
h0 = T
|
||||
|
||||
Next
|
||||
|
||||
Dim As String answer
|
||||
' convert h0, h1, h2, h3 and h4 in hex, then add, low order first
|
||||
Dim As String hs1 = Hex(h0, 8)
|
||||
For i = 7 To 1 Step -2 : answer += Mid(hs1, i, 2) : Next
|
||||
hs1 = Hex(h1, 8)
|
||||
For i = 7 To 1 Step -2 : answer += Mid(hs1, i, 2) : Next
|
||||
hs1 = Hex(h2, 8)
|
||||
For i = 7 To 1 Step -2 : answer += Mid(hs1, i, 2) : Next
|
||||
hs1 = Hex(h3, 8)
|
||||
For i = 7 To 1 Step -2 : answer += Mid(hs1, i, 2) : Next
|
||||
hs1 = Hex(h4, 8)
|
||||
For i = 7 To 1 Step -2 : answer += Mid(hs1, i, 2) : Next
|
||||
|
||||
Return LCase(answer)
|
||||
|
||||
End Function
|
||||
|
||||
' ------=< MAIN >=------
|
||||
|
||||
Dim As String test = "Rosetta Code"
|
||||
|
||||
Print
|
||||
Print test; " => "; RIPEMD_160(test)
|
||||
|
||||
' empty keyboard buffer
|
||||
While Inkey <> "" : Wend
|
||||
Print : Print "hit any key to end program"
|
||||
Sleep
|
||||
End
|
||||
12
Task/RIPEMD-160/Go/ripemd-160.go
Normal file
12
Task/RIPEMD-160/Go/ripemd-160.go
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
package main
|
||||
|
||||
import (
|
||||
"golang.org/x/crypto/ripemd160"
|
||||
"fmt"
|
||||
)
|
||||
|
||||
func main() {
|
||||
h := ripemd160.New()
|
||||
h.Write([]byte("Rosetta Code"))
|
||||
fmt.Printf("%x\n", h.Sum(nil))
|
||||
}
|
||||
12
Task/RIPEMD-160/Haskell/ripemd-160.hs
Normal file
12
Task/RIPEMD-160/Haskell/ripemd-160.hs
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
import Data.Char (ord)
|
||||
import Crypto.Hash.RIPEMD160 (hash)
|
||||
import Data.ByteString (unpack, pack)
|
||||
import Text.Printf (printf)
|
||||
|
||||
main = putStrLn $ -- output to terminal
|
||||
concatMap (printf "%02x") $ -- to hex string
|
||||
unpack $ -- to array of Word8
|
||||
hash $ -- RIPEMD-160 hash to ByteString
|
||||
pack $ -- to ByteString
|
||||
map (fromIntegral.ord) -- to array of Word8
|
||||
"Rosetta Code"
|
||||
16
Task/RIPEMD-160/Java/ripemd-160.java
Normal file
16
Task/RIPEMD-160/Java/ripemd-160.java
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
import org.bouncycastle.crypto.digests.RIPEMD160Digest;
|
||||
import org.bouncycastle.util.encoders.Hex;
|
||||
|
||||
public class RosettaRIPEMD160
|
||||
{
|
||||
public static void main (String[] argv) throws Exception
|
||||
{
|
||||
byte[] r = "Rosetta Code".getBytes("US-ASCII");
|
||||
RIPEMD160Digest d = new RIPEMD160Digest();
|
||||
d.update (r, 0, r.length);
|
||||
byte[] o = new byte[d.getDigestSize()];
|
||||
d.doFinal (o, 0);
|
||||
Hex.encode (o, System.out);
|
||||
System.out.println();
|
||||
}
|
||||
}
|
||||
24
Task/RIPEMD-160/Julia/ripemd-160.julia
Normal file
24
Task/RIPEMD-160/Julia/ripemd-160.julia
Normal file
|
|
@ -0,0 +1,24 @@
|
|||
using Nettle
|
||||
|
||||
labels = ["\"\" (empty string)", "\"a\"", "\"abc\"",
|
||||
"\"message digest\"", "\"a...z\"",
|
||||
"\"abcdbcde...nopq\"", "\"A...Za...z0...9\"",
|
||||
"8 times \"1234567890\"", "1 million times \"a\""]
|
||||
texts = ["", "a", "abc", "message digest", "abcdefghijklmnopqrstuvwxyz",
|
||||
"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq",
|
||||
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
|
||||
"1234567890" ^ 8, "a" ^ 1_000_000]
|
||||
expects = ["9c1185a5c5e9fc54612808977ee8f548b2258d31",
|
||||
"0bdc9d2d256b3ee9daae347be6f4dc835a467ffe",
|
||||
"8eb208f7e05d987a9b044a8e98c6b087f15a0bfc",
|
||||
"5d0689ef49d2fae572b881b123a85ffa21595f36",
|
||||
"f71c27109c692c1b56bbdceb5b9d2865b3708dbc",
|
||||
"12a053384a9c0c88e405a06c27dcf49ada62eb2b",
|
||||
"b0e20b6e3116640286ed3a87a5713079b21f5189",
|
||||
"9b752e45573d4b39f4dbd3323cab82bf63326bfb",
|
||||
"52783243c1697bdbe16d37f97f68f08325dc1528"]
|
||||
|
||||
for (lab, text, expect) in zip(labels, texts, expects)
|
||||
digest = hexdigest("ripemd160", text)
|
||||
println("# $lab\n -> digest: $digest\n -> expect: $expect")
|
||||
end
|
||||
20
Task/RIPEMD-160/Kotlin/ripemd-160.kotlin
Normal file
20
Task/RIPEMD-160/Kotlin/ripemd-160.kotlin
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
import org.bouncycastle.crypto.digests.RIPEMD160Digest
|
||||
import org.bouncycastle.util.encoders.Hex
|
||||
import kotlin.text.Charsets.US_ASCII
|
||||
|
||||
fun RIPEMD160Digest.inOneGo(input : ByteArray) : ByteArray {
|
||||
val output = ByteArray(digestSize)
|
||||
|
||||
update(input, 0, input.size)
|
||||
doFinal(output, 0)
|
||||
|
||||
return output
|
||||
}
|
||||
|
||||
fun main(args: Array<String>) {
|
||||
val input = "Rosetta Code".toByteArray(US_ASCII)
|
||||
val output = RIPEMD160Digest().inOneGo(input)
|
||||
|
||||
Hex.encode(output, System.out)
|
||||
System.out.flush()
|
||||
}
|
||||
1
Task/RIPEMD-160/Lasso/ripemd-160.lasso
Normal file
1
Task/RIPEMD-160/Lasso/ripemd-160.lasso
Normal file
|
|
@ -0,0 +1 @@
|
|||
cipher_digest("Rosetta Code", -digest='RIPEMD160', -hex)
|
||||
5
Task/RIPEMD-160/Lua/ripemd-160.lua
Normal file
5
Task/RIPEMD-160/Lua/ripemd-160.lua
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/lua
|
||||
|
||||
require "crypto"
|
||||
|
||||
print(crypto.digest("ripemd160", "Rosetta Code"))
|
||||
162
Task/RIPEMD-160/M2000-Interpreter/ripemd-160.m2000
Normal file
162
Task/RIPEMD-160/M2000-Interpreter/ripemd-160.m2000
Normal file
|
|
@ -0,0 +1,162 @@
|
|||
Module Checkit {
|
||||
Function Prepare_RiPeMd_160 {
|
||||
Dim Base 0, K(5), K1(5)
|
||||
K(0)=0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E
|
||||
K1(0)=0x50A28BE6,0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000
|
||||
Dim Base 0,r(80), r1(80), s(80), s1(80)
|
||||
r(0)=0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15
|
||||
r(16)=7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8
|
||||
r(32)= 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12
|
||||
r(48)=1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2
|
||||
r(64)=4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
|
||||
k=r() : k*=4 ' k is a pointer to array. We have to multiply to make them offsets
|
||||
|
||||
r1(0)=5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12
|
||||
r1(16)=6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2
|
||||
r1(32)=15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13
|
||||
r1(48)=8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14
|
||||
r1(64)=12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
|
||||
|
||||
k=r1() : k*=4
|
||||
|
||||
s(0)=11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8
|
||||
s(16)=7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12
|
||||
s(32)=11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5
|
||||
s(48)=11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12
|
||||
s(64)=9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6
|
||||
|
||||
s1(0)=8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6
|
||||
s1(16)=9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11
|
||||
s1(32)=9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5
|
||||
s1(48)=15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8
|
||||
s1(64)=8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
|
||||
|
||||
Dim Base 0, T(5), TT(5)
|
||||
T(0)=lambda ->binary.xor(binary.xor(number,number),number)
|
||||
T(1)=lambda (B,C,D)->binary.or(binary.and(B,C), binary.and(binary.not(B), D))
|
||||
T(2)=lambda ->binary.xor(binary.or(number, binary.not(number)), number)
|
||||
T(3)=lambda (B,C,D)->binary.or(binary.and(B,D), binary.and(C,binary.not(D)))
|
||||
T(4)=lambda ->binary.xor(number, binary.or(number, binary.not(number)))
|
||||
|
||||
\\ no need for variables we read form stack with number
|
||||
TT(0)=lambda ->binary.xor(number, binary.or(number, binary.not(number)))
|
||||
TT(1)=lambda (BB,CC,DD)->binary.or(binary.and(BB,DD), binary.and(CC,binary.not(DD)))
|
||||
TT(2)=lambda ->binary.xor(binary.or(number, binary.not(number)), number)
|
||||
TT(3)=lambda (BB,CC,DD)->binary.or(binary.and(BB,CC), binary.and(binary.not(BB),DD))
|
||||
TT(4)=lambda ->binary.xor(binary.xor(number,number),number)
|
||||
|
||||
\\ return of this function is a lambda function
|
||||
\\ all arrays are closures to this lambda
|
||||
=lambda K(),K1(),TT(), T(),r(),r1(), s(), s1() (&message$, ansi as boolean=true, ansiid=1033)-> {
|
||||
set fast!
|
||||
def h0 = 0x67452301, h1 = 0xEFCDAB89, h2 = 0x98BADCFE
|
||||
def h3 = 0x10325476, h4 = 0xC3D2E1F0
|
||||
def i, j, l, padding, l1, blocks, acc, f64 as boolean=true, oldid
|
||||
if ansi then oldid=locale : locale ansiid
|
||||
\\ we use a buffer of 64 bytes
|
||||
buffer clear message as byte*64
|
||||
l=len(message$)*if(ansi->1,2 )
|
||||
if binary.and(l,63)>55 then padding=64
|
||||
padding+= 64 - (l Mod 64)
|
||||
l1=padding+l+1
|
||||
|
||||
f64=binary.and(l,63)<>0
|
||||
|
||||
blocks=l1 div 64
|
||||
rem
|
||||
Print "blocks:";blocks
|
||||
\\ now prepare the buffer
|
||||
PrepareBuffer()
|
||||
def decimal A, B, C, D, E, AA, BB, CC, DD, EE, T, TT
|
||||
do
|
||||
A = h0 : B = h1 : C = h2 : D = h3 : E = h4
|
||||
AA = h0 : BB = h1 : CC = h2 : DD = h3 : EE = h4
|
||||
for J=0 to 79 {
|
||||
JJ=J DIV 16
|
||||
PUSH binary.add(Binary.Rotate(binary.add(A,T(JJ)(B,C,D),eval(message ,r(j) as long),k(jj)), s(j)), e)
|
||||
A = E : E = D : D = Binary.Rotate(C, 10) : C = B : READ B
|
||||
PUSH binary.add(Binary.Rotate(binary.add(AA,TT(JJ)(BB,CC,DD),eval(message, r1(j) as long),k1(jj)),s1(j)),EE)
|
||||
AA = EE : EE = DD : DD = Binary.Rotate(CC, 10) : CC = BB : READ BB
|
||||
}
|
||||
push binary.add(h1, C, DD)
|
||||
h1 = binary.add(h2, D, EE)
|
||||
h2 = binary.add(h3, E, AA)
|
||||
h3 = binary.add(h4, A, BB)
|
||||
h4 = binary.add(h0, B, CC)
|
||||
Read h0
|
||||
blocks--
|
||||
rem
|
||||
print over $(0,8), blocks : Refresh
|
||||
if blocks=0 then exit
|
||||
PrepareBuffer()
|
||||
always
|
||||
rem
|
||||
print
|
||||
buffer ans as byte*20
|
||||
\\ we put ulong (long is ulong in buffers)
|
||||
Return ans, 0:=h0 as long, 4:=h1 as long,8:=h2 as long, 12:=h3 as long, 16:=h4 as long
|
||||
=ans
|
||||
if ansi then locale oldid
|
||||
set fast
|
||||
Sub PrepareBuffer()
|
||||
|
||||
if l-acc>=64 then
|
||||
LoadPart(64)
|
||||
else.if blocks=1 then
|
||||
return message, 0:=string$(chr$(0),32)
|
||||
if l-acc=0 and f64 then
|
||||
Return message, 56:=l*8 as long, 60 :=binary.shift(l,-29) as long
|
||||
else
|
||||
Return message, l-acc:=0x80, 56:=l*8 as long, 60 :=binary.shift(l,-29) as long
|
||||
if l>acc then LoadPart(l-acc)
|
||||
end if
|
||||
else
|
||||
Return message, l-acc:=0x80
|
||||
LoadPart(l-acc)
|
||||
end if
|
||||
End Sub
|
||||
sub LoadPart(many)
|
||||
\\ str$() convert to ansi, one byte per character
|
||||
\\ using 1033 as Ansi language
|
||||
if ansi then
|
||||
Return message, 0:=str$(mid$(message$,1+acc, many))
|
||||
else
|
||||
Return message, 0:=mid$(message$, 1+acc, many)
|
||||
end if
|
||||
acc+=many
|
||||
end sub
|
||||
}
|
||||
}
|
||||
Module TestHash (RIPEMD){
|
||||
Flush
|
||||
\\ push data to stack of values, as fifo (each entry append to end of stack)
|
||||
Data "b3be159860842cebaa7174c8fff0aa9e50a5199f","Rosetta Code"
|
||||
Data "9c1185a5c5e9fc54612808977ee8f548b2258d31",""
|
||||
Data "0bdc9d2d256b3ee9daae347be6f4dc835a467ffe","a"
|
||||
Data "8eb208f7e05d987a9b044a8e98c6b087f15a0bfc","abc"
|
||||
Data "5d0689ef49d2fae572b881b123a85ffa21595f36", "message digest"
|
||||
Data "f71c27109c692c1b56bbdceb5b9d2865b3708dbc","abcdefghijklmnopqrstuvwxyz"
|
||||
Data "b0e20b6e3116640286ed3a87a5713079b21f5189"
|
||||
Data "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
|
||||
Data "9b752e45573d4b39f4dbd3323cab82bf63326bfb", String$("1234567890",8)
|
||||
rem Data "52783243c1697bdbe16d37f97f68f08325dc1528", String$("a",1000000)
|
||||
|
||||
While not empty
|
||||
Read check$, text$
|
||||
Print "RIPEMD160 for ";quote$(Left$(if$(len(text$)>30->left$(text$,27)+"...", text$),30))
|
||||
\\ pass text$ by reference
|
||||
Display(RIPEMD(&text$))
|
||||
End While
|
||||
|
||||
sub Display(ans)
|
||||
local answer$
|
||||
for i=0 to len(ans)-1
|
||||
answer$+=hex$(eval(ans,i),1)
|
||||
next i
|
||||
Print lcase$(answer$)
|
||||
Print lcase$(answer$)=check$
|
||||
end sub
|
||||
}
|
||||
TestHash Prepare_RiPeMd_160()
|
||||
}
|
||||
Checkit
|
||||
1
Task/RIPEMD-160/Mathematica/ripemd-160.math
Normal file
1
Task/RIPEMD-160/Mathematica/ripemd-160.math
Normal file
|
|
@ -0,0 +1 @@
|
|||
Hash["Rosetta Code", "RIPEMD160", "HexString"]
|
||||
3
Task/RIPEMD-160/Nim/ripemd-160.nim
Normal file
3
Task/RIPEMD-160/Nim/ripemd-160.nim
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
import nimcrypto / [ripemd, hash]
|
||||
|
||||
echo ripemd160.digest("Rosetta Code")
|
||||
7
Task/RIPEMD-160/Objeck/ripemd-160.objeck
Normal file
7
Task/RIPEMD-160/Objeck/ripemd-160.objeck
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
class Hash {
|
||||
function : Main(args : String[]) ~ Nil {
|
||||
in := "Rosetta Code"->ToByteArray();
|
||||
hash := Encryption.Hash->RIPEMD160(in);
|
||||
hash->ToHexString()->PrintLine();
|
||||
}
|
||||
}
|
||||
22
Task/RIPEMD-160/PARI-GP/ripemd-160-1.parigp
Normal file
22
Task/RIPEMD-160/PARI-GP/ripemd-160-1.parigp
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#include <pari/pari.h>
|
||||
#include <openssl/ripemd.h>
|
||||
|
||||
#define HEX(x) (((x) < 10)? (x)+'0': (x)-10+'a')
|
||||
|
||||
GEN plug_ripemd160(char *text)
|
||||
{
|
||||
char md[RIPEMD160_DIGEST_LENGTH];
|
||||
char hash[sizeof(md) * 2 + 1];
|
||||
int i;
|
||||
|
||||
RIPEMD160((unsigned char*)text, strlen(text), (unsigned char*)md);
|
||||
|
||||
for (i = 0; i < sizeof(md); i++) {
|
||||
hash[i+i] = HEX((md[i] >> 4) & 0x0f);
|
||||
hash[i+i+1] = HEX(md[i] & 0x0f);
|
||||
}
|
||||
|
||||
hash[sizeof(md) * 2] = 0;
|
||||
|
||||
return strtoGENstr(hash);
|
||||
}
|
||||
3
Task/RIPEMD-160/PARI-GP/ripemd-160-2.parigp
Normal file
3
Task/RIPEMD-160/PARI-GP/ripemd-160-2.parigp
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
install("plug_ripemd160", "s", "RIPEMD160", "~/libripemd160.so");
|
||||
|
||||
RIPEMD160("Rosetta Code")
|
||||
8
Task/RIPEMD-160/PARI-GP/ripemd-160-3.parigp
Normal file
8
Task/RIPEMD-160/PARI-GP/ripemd-160-3.parigp
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
install(RIPEMD160,"vsLs",,"/usr/lib/x86_64-linux-gnu/libcrypto.so")
|
||||
ripemd160(a)=
|
||||
{
|
||||
my(b=Strchr(vectorsmall(20,i,32)));
|
||||
RIPEMD160(a,length(a),b);
|
||||
Strprintf("%x",fromdigits(Vec(Vecsmall(b)),256));
|
||||
}
|
||||
ripemd160("Rosetta Code")
|
||||
2
Task/RIPEMD-160/Perl/ripemd-160-1.pl
Normal file
2
Task/RIPEMD-160/Perl/ripemd-160-1.pl
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
use Crypt::RIPEMD160;
|
||||
say unpack "H*", Crypt::RIPEMD160->hash("Rosetta Code");
|
||||
2
Task/RIPEMD-160/Perl/ripemd-160-2.pl
Normal file
2
Task/RIPEMD-160/Perl/ripemd-160-2.pl
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
use Crypt::Digest::RIPEMD160 qw/ripemd160_hex/;
|
||||
say ripemd160_hex("Rosetta Code")
|
||||
6
Task/RIPEMD-160/Phix/ripemd-160-1.phix
Normal file
6
Task/RIPEMD-160/Phix/ripemd-160-1.phix
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
-->
|
||||
<span style="color: #008080;">include</span> <span style="color: #000000;">builtins</span><span style="color: #0000FF;">\</span><span style="color: #000000;">ripemd160</span><span style="color: #0000FF;">.</span><span style="color: #000000;">e</span>
|
||||
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">test</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">"Rosetta Code"</span>
|
||||
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #008000;">"\n%s => %s\n"</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">test</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ripemd160</span><span style="color: #0000FF;">(</span><span style="color: #000000;">test</span><span style="color: #0000FF;">)})</span>
|
||||
<!--
|
||||
110
Task/RIPEMD-160/Phix/ripemd-160-2.phix
Normal file
110
Task/RIPEMD-160/Phix/ripemd-160-2.phix
Normal file
|
|
@ -0,0 +1,110 @@
|
|||
-->
|
||||
<span style="color: #000080;font-style:italic;">--
|
||||
-- builtins\ripemd160.e
|
||||
-- ====================
|
||||
--</span>
|
||||
<span style="color: #008080;">function</span> <span style="color: #000000;">rol</span><span style="color: #0000FF;">(</span><span style="color: #004080;">atom</span> <span style="color: #000000;">v</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">integer</span> <span style="color: #000000;">n</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000080;font-style:italic;">-- Programming note: this use of #ilASM{} is more for expediency than efficiency</span>
|
||||
#ilASM{ mov eax,[v]
|
||||
call :%pLoadMint
|
||||
mov ecx,[n]
|
||||
rol eax,cl
|
||||
lea edi,[v]
|
||||
call :%pStoreMint }
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">v</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
|
||||
<span style="color: #008080;">constant</span> <span style="color: #000000;">K</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">#00000000</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#5A827999</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#6ED9EBA1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#8F1BBCDC</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#A953FD4E</span><span style="color: #0000FF;">},</span>
|
||||
<span style="color: #000000;">KK</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">#50A28BE6</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#5C4DD124</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#6D703EF3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#7A6D76E9</span><span style="color: #0000FF;">,</span><span style="color: #000000;">#00000000</span><span style="color: #0000FF;">},</span>
|
||||
<span style="color: #000000;">r</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span> <span style="color: #0000FF;">},</span>
|
||||
<span style="color: #000000;">rr</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span> <span style="color: #0000FF;">},</span>
|
||||
<span style="color: #000000;">s</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span> <span style="color: #0000FF;">},</span>
|
||||
<span style="color: #000000;">ss</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">7</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">9</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">12</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">14</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">8</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">6</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">5</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">15</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">13</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">11</span> <span style="color: #0000FF;">}</span>
|
||||
|
||||
<span style="color: #008080;">global</span> <span style="color: #008080;">function</span> <span style="color: #000000;">ripemd160</span><span style="color: #0000FF;">(</span><span style="color: #004080;">string</span> <span style="color: #000000;">message</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">bool</span> <span style="color: #000000;">asString</span><span style="color: #0000FF;">=</span><span style="color: #004600;">true</span><span style="color: #0000FF;">,</span> <span style="color: #004080;">atom</span> <span style="color: #000000;">pMem</span><span style="color: #0000FF;">=</span><span style="color: #004600;">NULL</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000080;font-style:italic;">--
|
||||
-- Calculate the ripe-md-160 checksum.
|
||||
--
|
||||
-- if asString is true (the default), returns a string representation of the
|
||||
-- checksum (and pMem is ignored)
|
||||
-- if asString is false, returns pMem (for want of anything better), which
|
||||
-- must be a non-NULL pointer to at least 20 bytes of memory.
|
||||
-- </span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">h0</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#67452301</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">h1</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#EFCDAB89</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">h2</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#98BADCFE</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">h3</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#10325476</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">h4</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">#C3D2E1F0</span><span style="color: #0000FF;">,</span>
|
||||
<span style="color: #000000;">mraw</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">t</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">tt</span>
|
||||
|
||||
<span style="color: #004080;">integer</span> <span style="color: #000000;">l</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">message</span><span style="color: #0000FF;">),</span>
|
||||
<span style="color: #000000;">padding</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">64</span> <span style="color: #0000FF;">-</span> <span style="color: #7060A8;">mod</span><span style="color: #0000FF;">(</span><span style="color: #000000;">l</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">64</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">padding</span><span style="color: #0000FF;"><</span><span style="color: #000000;">8</span> <span style="color: #008080;">then</span> <span style="color: #000000;">padding</span> <span style="color: #0000FF;">+=</span> <span style="color: #000000;">64</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
|
||||
<span style="color: #000000;">message</span> <span style="color: #0000FF;">&=</span> <span style="color: #000000;">#80</span> <span style="color: #0000FF;">&</span> <span style="color: #7060A8;">repeat</span><span style="color: #0000FF;">(</span><span style="color: #008000;">'\0'</span><span style="color: #0000FF;">,</span><span style="color: #000000;">padding</span><span style="color: #0000FF;">-</span><span style="color: #000000;">8</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #0000FF;">&</span> <span style="color: #7060A8;">int_to_bytes</span><span style="color: #0000FF;">(</span><span style="color: #000000;">l</span><span style="color: #0000FF;">*</span><span style="color: #000000;">8</span><span style="color: #0000FF;">,</span><span style="color: #000000;">8</span><span style="color: #0000FF;">)</span>
|
||||
|
||||
#ilASM{ mov eax,[message]
|
||||
lea edi,[mraw]
|
||||
shl eax,2 -- ref -> raw address
|
||||
call :%pStoreMint }
|
||||
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">0</span> <span style="color: #008080;">to</span> <span style="color: #7060A8;">length</span><span style="color: #0000FF;">(</span><span style="color: #000000;">message</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">64</span> <span style="color: #008080;">by</span> <span style="color: #000000;">64</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">h0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h4</span><span style="color: #0000FF;">}</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">aa</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cc</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">dd</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">ee</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">h0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h4</span><span style="color: #0000FF;">}</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">j</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">80</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #004080;">integer</span> <span style="color: #000000;">k</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">floor</span><span style="color: #0000FF;">((</span><span style="color: #000000;">j</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">)/</span><span style="color: #000000;">16</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">switch</span> <span style="color: #000000;">k</span>
|
||||
<span style="color: #008080;">case</span> <span style="color: #000000;">0</span><span style="color: #0000FF;">:</span>
|
||||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">tt</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cc</span><span style="color: #0000FF;">,</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #008080;">case</span> <span style="color: #000000;">1</span><span style="color: #0000FF;">:</span>
|
||||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span><span style="color: #000000;">c</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">),</span><span style="color: #000000;">d</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #000000;">tt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cc</span><span style="color: #0000FF;">,</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #008080;">case</span> <span style="color: #000000;">2</span><span style="color: #0000FF;">:</span>
|
||||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">)),</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #000000;">tt</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cc</span><span style="color: #0000FF;">)),</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">case</span> <span style="color: #000000;">3</span><span style="color: #0000FF;">:</span>
|
||||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span><span style="color: #000000;">d</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #000000;">tt</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cc</span><span style="color: #0000FF;">),</span><span style="color: #7060A8;">and_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">),</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #008080;">case</span> <span style="color: #000000;">4</span><span style="color: #0000FF;">:</span>
|
||||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">b</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">or_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span><span style="color: #000000;">not_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">d</span><span style="color: #0000FF;">)))</span>
|
||||
<span style="color: #000000;">tt</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">xor_bits</span><span style="color: #0000FF;">(</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">cc</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">dd</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">switch</span>
|
||||
<span style="color: #000000;">t</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">rol</span><span style="color: #0000FF;">(</span> <span style="color: #000000;">a</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">t</span> <span style="color: #0000FF;">+</span> <span style="color: #7060A8;">peek4u</span><span style="color: #0000FF;">(</span><span style="color: #000000;">mraw</span><span style="color: #0000FF;">+</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span> <span style="color: #000000;">r</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">K</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span> <span style="color: #000000;">s</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">])</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">e</span>
|
||||
<span style="color: #000000;">tt</span> <span style="color: #0000FF;">=</span> <span style="color: #000000;">rol</span><span style="color: #0000FF;">(</span><span style="color: #000000;">aa</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">tt</span> <span style="color: #0000FF;">+</span> <span style="color: #7060A8;">peek4u</span><span style="color: #0000FF;">(</span><span style="color: #000000;">mraw</span><span style="color: #0000FF;">+</span><span style="color: #000000;">i</span><span style="color: #0000FF;">+</span><span style="color: #000000;">rr</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">]*</span><span style="color: #000000;">4</span><span style="color: #0000FF;">)</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">KK</span><span style="color: #0000FF;">[</span><span style="color: #000000;">k</span><span style="color: #0000FF;">+</span><span style="color: #000000;">1</span><span style="color: #0000FF;">],</span> <span style="color: #000000;">ss</span><span style="color: #0000FF;">[</span><span style="color: #000000;">j</span><span style="color: #0000FF;">])</span> <span style="color: #0000FF;">+</span> <span style="color: #000000;">ee</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #000000;">a</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">e</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">b</span> <span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">e</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">d</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">rol</span><span style="color: #0000FF;">(</span><span style="color: #000000;">c</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">),</span> <span style="color: #000000;">b</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">t</span> <span style="color: #0000FF;">}</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #000000;">aa</span><span style="color: #0000FF;">,</span><span style="color: #000000;">ee</span><span style="color: #0000FF;">,</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">,</span><span style="color: #000000;">cc</span><span style="color: #0000FF;">,</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">ee</span><span style="color: #0000FF;">,</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">,</span><span style="color: #000000;">rol</span><span style="color: #0000FF;">(</span><span style="color: #000000;">cc</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">10</span><span style="color: #0000FF;">),</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span><span style="color: #000000;">tt</span><span style="color: #0000FF;">}</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #0000FF;">{</span><span style="color: #000000;">h0</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h1</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h2</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h3</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h4</span><span style="color: #0000FF;">}</span> <span style="color: #0000FF;">=</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">h1</span><span style="color: #0000FF;">+</span><span style="color: #000000;">c</span><span style="color: #0000FF;">+</span><span style="color: #000000;">dd</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h2</span><span style="color: #0000FF;">+</span><span style="color: #000000;">d</span><span style="color: #0000FF;">+</span><span style="color: #000000;">ee</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h3</span><span style="color: #0000FF;">+</span><span style="color: #000000;">e</span><span style="color: #0000FF;">+</span><span style="color: #000000;">aa</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h4</span><span style="color: #0000FF;">+</span><span style="color: #000000;">a</span><span style="color: #0000FF;">+</span><span style="color: #000000;">bb</span><span style="color: #0000FF;">,</span> <span style="color: #000000;">h0</span><span style="color: #0000FF;">+</span><span style="color: #000000;">b</span><span style="color: #0000FF;">+</span><span style="color: #000000;">cc</span><span style="color: #0000FF;">}</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #008080;">not</span> <span style="color: #000000;">asString</span> <span style="color: #008080;">then</span>
|
||||
<span style="color: #008080;">if</span> <span style="color: #000000;">pMem</span><span style="color: #0000FF;">=</span><span style="color: #004600;">NULL</span> <span style="color: #008080;">then</span> <span style="color: #0000FF;">?</span><span style="color: #000000;">9</span><span style="color: #0000FF;">/</span><span style="color: #000000;">0</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #7060A8;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">pMem</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">h0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h4</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">pMem</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
|
||||
<span style="color: #004080;">atom</span> <span style="color: #000000;">mem</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">allocate</span><span style="color: #0000FF;">(</span><span style="color: #000000;">20</span><span style="color: #0000FF;">,</span><span style="color: #004600;">true</span><span style="color: #0000FF;">)</span>
|
||||
<span style="color: #7060A8;">poke4</span><span style="color: #0000FF;">(</span><span style="color: #000000;">mem</span><span style="color: #0000FF;">,{</span><span style="color: #000000;">h0</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h1</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h2</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h3</span><span style="color: #0000FF;">,</span><span style="color: #000000;">h4</span><span style="color: #0000FF;">})</span>
|
||||
<span style="color: #004080;">string</span> <span style="color: #000000;">res</span> <span style="color: #0000FF;">=</span> <span style="color: #008000;">""</span>
|
||||
<span style="color: #008080;">for</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">1</span> <span style="color: #008080;">to</span> <span style="color: #000000;">20</span> <span style="color: #008080;">do</span>
|
||||
<span style="color: #000000;">res</span> <span style="color: #0000FF;">&=</span> <span style="color: #7060A8;">sprintf</span><span style="color: #0000FF;">(</span><span style="color: #008000;">"%02X"</span><span style="color: #0000FF;">,</span><span style="color: #7060A8;">peek</span><span style="color: #0000FF;">(</span><span style="color: #000000;">mem</span><span style="color: #0000FF;">+</span><span style="color: #000000;">i</span><span style="color: #0000FF;">-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">))</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">for</span>
|
||||
<span style="color: #008080;">return</span> <span style="color: #000000;">res</span>
|
||||
<span style="color: #008080;">end</span> <span style="color: #008080;">function</span>
|
||||
<!--
|
||||
160
Task/RIPEMD-160/PicoLisp/ripemd-160.l
Normal file
160
Task/RIPEMD-160/PicoLisp/ripemd-160.l
Normal file
|
|
@ -0,0 +1,160 @@
|
|||
(de *R160-R1 . (1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
||||
8 5 14 2 11 7 16 4 13 1 10 6 3 15 12 9
|
||||
4 11 15 5 10 16 9 2 3 8 1 7 14 12 6 13
|
||||
2 10 12 11 1 9 13 5 14 4 8 16 15 6 7 3
|
||||
5 1 6 10 8 13 3 11 15 2 4 9 12 7 16 14 .))
|
||||
(de *R160-R2 . (6 15 8 1 10 3 12 5 14 7 16 9 2 11 4 13
|
||||
7 12 4 8 1 14 6 11 15 16 9 13 5 10 2 3
|
||||
16 6 2 4 8 15 7 10 12 9 13 3 11 1 5 14
|
||||
9 7 5 2 4 12 16 1 6 13 3 14 10 8 11 15
|
||||
13 16 11 5 2 6 9 8 7 3 14 15 1 4 10 12 .))
|
||||
(de *R160-S1 . (11 14 15 12 5 8 7 9 11 13 14 15 6 7 9 8
|
||||
7 6 8 13 11 9 7 15 7 12 15 9 11 7 13 12
|
||||
11 13 6 7 14 9 13 15 14 8 13 6 5 12 7 5
|
||||
11 12 14 15 14 15 9 8 9 14 5 6 8 6 5 12
|
||||
9 15 5 11 6 8 13 12 5 12 13 14 11 8 5 6 .))
|
||||
(de *R160-S2 . (8 9 9 11 13 15 15 5 7 7 8 11 14 14 12 6
|
||||
9 13 15 7 12 8 9 11 7 7 12 7 6 15 13 11
|
||||
9 7 15 11 8 6 6 14 12 13 5 14 13 13 7 5
|
||||
15 5 8 11 14 14 6 14 6 9 12 9 12 5 15 8
|
||||
8 5 12 9 12 5 14 6 8 13 6 5 15 13 11 11 .))
|
||||
|
||||
(de mod32 (N)
|
||||
(& N `(hex "FFFFFFFF")) )
|
||||
|
||||
(de not32 (N)
|
||||
(x| N `(hex "FFFFFFFF")) )
|
||||
|
||||
(de add32 @
|
||||
(mod32 (pass +)) )
|
||||
|
||||
(de leftRotate (X C)
|
||||
(| (mod32 (>> (- C) X)) (>> (- 32 C) X)) )
|
||||
|
||||
(de ripemd160 (Str)
|
||||
(let Len (length Str)
|
||||
(setq Str
|
||||
(conc
|
||||
(need
|
||||
(- 8 (* 64 (/ (+ Len 1 8 63) 64)))
|
||||
(conc
|
||||
(mapcar char (chop Str))
|
||||
(cons `(hex "80")) )
|
||||
0 )
|
||||
(make
|
||||
(setq Len (* 8 Len))
|
||||
(do 8
|
||||
(link (& Len 255))
|
||||
(setq Len (>> 8 Len )) ) ) ) ) )
|
||||
(let
|
||||
(H0 `(hex "67452301")
|
||||
H1 `(hex "EFCDAB89")
|
||||
H2 `(hex "98BADCFE")
|
||||
H3 `(hex "10325476")
|
||||
H4 `(hex "C3D2E1F0") )
|
||||
(while Str
|
||||
(let
|
||||
(A1 H0 B1 H1 C1 H2 D1 H3 E1 H4
|
||||
A2 H0 B2 H1 C2 H2 D2 H3 E2 H4
|
||||
W (make
|
||||
(do 16
|
||||
(link
|
||||
(apply |
|
||||
(mapcar >> (0 -8 -16 -24) (cut 4 'Str)) ) ) ) ) )
|
||||
(use (Func1 Func2 Hex1 Hex2)
|
||||
(for I 80
|
||||
(cond
|
||||
((>= 16 I)
|
||||
(setq
|
||||
Func1 '(x| B1 C1 D1)
|
||||
Func2 '(x| B2 (| C2 (not32 D2)))
|
||||
Hex1 0
|
||||
Hex2 `(hex "50A28BE6") ) )
|
||||
((>= 32 I)
|
||||
(setq
|
||||
Func1 '(| (& B1 C1) (& (not32 B1) D1))
|
||||
Func2 '(| (& B2 D2) (& C2 (not32 D2)))
|
||||
Hex1 `(hex "5A827999")
|
||||
Hex2 `(hex "5C4DD124") ) )
|
||||
((>= 48 I)
|
||||
(setq
|
||||
Func1 '(x| (| B1 (not32 C1)) D1)
|
||||
Func2 '(x| (| B2 (not32 C2)) D2)
|
||||
Hex1 `(hex "6ED9EBA1")
|
||||
Hex2 `(hex "6D703EF3") ) )
|
||||
((>= 64 I)
|
||||
(setq
|
||||
Func1 '(| (& B1 D1) (& C1 (not32 D1)))
|
||||
Func2 '(| (& B2 C2) (& (not32 B2) D2))
|
||||
Hex1 `(hex "8F1BBCDC")
|
||||
Hex2 `(hex "7A6D76E9") ) )
|
||||
(T
|
||||
(setq
|
||||
Func1 '(x| B1 (| C1 (not32 D1)))
|
||||
Func2 '(x| B2 C2 D2)
|
||||
Hex1 `(hex "A953FD4E")
|
||||
Hex2 0 ) ) )
|
||||
(setq
|
||||
Tmp1
|
||||
(add32
|
||||
(leftRotate
|
||||
(add32
|
||||
A1
|
||||
(eval Func1)
|
||||
(get W (pop '*R160-R1))
|
||||
Hex1 )
|
||||
(pop '*R160-S1) )
|
||||
E1 )
|
||||
Tmp2
|
||||
(add32
|
||||
(leftRotate
|
||||
(add32
|
||||
A2
|
||||
(eval Func2)
|
||||
(get W (pop '*R160-R2))
|
||||
Hex2 )
|
||||
(pop '*R160-S2) )
|
||||
E2 )
|
||||
A1 E1
|
||||
E1 D1
|
||||
D1 (leftRotate C1 10)
|
||||
C1 B1
|
||||
B1 Tmp1
|
||||
|
||||
A2 E2
|
||||
E2 D2
|
||||
D2 (leftRotate C2 10)
|
||||
C2 B2
|
||||
B2 Tmp2 ) ) )
|
||||
(setq
|
||||
Tmp (add32 H1 C1 D2)
|
||||
H1 (add32 H2 D1 E2)
|
||||
H2 (add32 H3 E1 A2)
|
||||
H3 (add32 H4 A1 B2)
|
||||
H4 (add32 H0 B1 C2)
|
||||
H0 Tmp ) ) )
|
||||
(make
|
||||
(for N (list H0 H1 H2 H3 H4)
|
||||
(do 4
|
||||
(link (& N 255))
|
||||
(setq N (>> 8 N)) ) ) ) ) )
|
||||
|
||||
(let Str "Rosetta Code"
|
||||
(println
|
||||
(pack
|
||||
(mapcar
|
||||
'((B) (pad 2 (hex B)))
|
||||
(ripemd160 Str) ) ) )
|
||||
(println
|
||||
(pack
|
||||
(mapcar
|
||||
'((B) (pad 2 (hex B)))
|
||||
(native
|
||||
"libcrypto.so"
|
||||
"RIPEMD160"
|
||||
'(B . 20)
|
||||
Str
|
||||
(length Str)
|
||||
'(NIL (20)) ) ) ) ) )
|
||||
|
||||
(bye)
|
||||
51
Task/RIPEMD-160/PowerShell/ripemd-160-1.psh
Normal file
51
Task/RIPEMD-160/PowerShell/ripemd-160-1.psh
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
function Get-Hash
|
||||
{
|
||||
[CmdletBinding(DefaultParameterSetName="String")]
|
||||
[OutputType([string])]
|
||||
Param
|
||||
(
|
||||
[Parameter(Mandatory=$true,
|
||||
ParameterSetName="String",
|
||||
Position=0)]
|
||||
[string]
|
||||
$String,
|
||||
|
||||
[Parameter(Mandatory=$true,
|
||||
ParameterSetName="FileName",
|
||||
Position=0)]
|
||||
[string]
|
||||
$FileName,
|
||||
|
||||
[Parameter(Mandatory=$false,
|
||||
Position=1)]
|
||||
[ValidateSet("MD5", "RIPEMD160", "SHA1", "SHA256", "SHA384", "SHA512")]
|
||||
[string]
|
||||
$HashType = "MD5"
|
||||
)
|
||||
|
||||
$hashAlgorithm = [System.Security.Cryptography.HashAlgorithm]
|
||||
$stringBuilder = New-Object -TypeName System.Text.StringBuilder
|
||||
|
||||
switch ($PSCmdlet.ParameterSetName)
|
||||
{
|
||||
"String"
|
||||
{
|
||||
$hashAlgorithm::Create($HashType).ComputeHash([System.Text.Encoding]::UTF8.GetBytes($String)) | ForEach-Object {
|
||||
$stringBuilder.Append($_.ToString("x2")) | Out-Null
|
||||
}
|
||||
}
|
||||
"FileName"
|
||||
{
|
||||
$fileStream = New-Object -TypeName System.IO.FileStream -ArgumentList $FileName, ([System.IO.FileMode]::Open)
|
||||
|
||||
$hashAlgorithm::Create($HashType).ComputeHash($fileStream) | ForEach-Object {
|
||||
$stringBuilder.Append($_.ToString("x2")) | Out-Null
|
||||
}
|
||||
|
||||
$fileStream.Close()
|
||||
$fileStream.Dispose()
|
||||
}
|
||||
}
|
||||
|
||||
$stringBuilder.ToString()
|
||||
}
|
||||
1
Task/RIPEMD-160/PowerShell/ripemd-160-2.psh
Normal file
1
Task/RIPEMD-160/PowerShell/ripemd-160-2.psh
Normal file
|
|
@ -0,0 +1 @@
|
|||
Get-Hash "Rosetta Code" -HashType RIPEMD160
|
||||
8
Task/RIPEMD-160/Python/ripemd-160.py
Normal file
8
Task/RIPEMD-160/Python/ripemd-160.py
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
Python 3.3.0 (v3.3.0:bd8afb90ebf2, Sep 29 2012, 10:57:17) [MSC v.1600 64 bit (AMD64)] on win32
|
||||
Type "copyright", "credits" or "license()" for more information.
|
||||
>>> import hashlib
|
||||
>>> h = hashlib.new('ripemd160')
|
||||
>>> h.update(b"Rosetta Code")
|
||||
>>> h.hexdigest()
|
||||
'b3be159860842cebaa7174c8fff0aa9e50a5199f'
|
||||
>>>
|
||||
3
Task/RIPEMD-160/Racket/ripemd-160-1.rkt
Normal file
3
Task/RIPEMD-160/Racket/ripemd-160-1.rkt
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
#lang racket
|
||||
(require (planet soegaard/digest:1:2/digest))
|
||||
(ripemd160 #"Rosetta Code")
|
||||
1
Task/RIPEMD-160/Racket/ripemd-160-2.rkt
Normal file
1
Task/RIPEMD-160/Racket/ripemd-160-2.rkt
Normal file
|
|
@ -0,0 +1 @@
|
|||
"b3be159860842cebaa7174c8fff0aa9e50a5199f"
|
||||
69
Task/RIPEMD-160/Raku/ripemd-160.raku
Normal file
69
Task/RIPEMD-160/Raku/ripemd-160.raku
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
# https://github.com/grondilu/libdigest-raku/blob/master/lib/Digest/RIPEMD.rakumod
|
||||
|
||||
say rmd160 "Rosetta Code";
|
||||
|
||||