Current section
Files
Jump to
Current section
Files
src/munch@internal@sha512.erl
-module(munch@internal@sha512).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/munch/internal/sha512.gleam").
-export([new/0, new384/0]).
-export_type([state/0]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(false).
-opaque state() :: {state,
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
bitstring(),
integer()}.
-file("src/munch/internal/sha512.gleam", 192).
?DOC(false).
-spec unsigned(integer()) -> integer().
unsigned(Value) ->
munch@internal@bitwise:shr(Value, 0).
-file("src/munch/internal/sha512.gleam", 196).
?DOC(false).
-spec ror_high(integer(), integer(), integer()) -> integer().
ror_high(High, Low, Amount) ->
case Amount < 32 of
true ->
munch@internal@bitwise:'bor'(
munch@internal@bitwise:shr(High, Amount),
munch@internal@bitwise:shl(Low, 32 - Amount)
);
false ->
Amount@1 = Amount - 32,
munch@internal@bitwise:'bor'(
munch@internal@bitwise:shr(Low, Amount@1),
munch@internal@bitwise:shl(High, 32 - Amount@1)
)
end.
-file("src/munch/internal/sha512.gleam", 206).
?DOC(false).
-spec ror_low(integer(), integer(), integer()) -> integer().
ror_low(High, Low, Amount) ->
case Amount < 32 of
true ->
munch@internal@bitwise:'bor'(
munch@internal@bitwise:shr(Low, Amount),
munch@internal@bitwise:shl(High, 32 - Amount)
);
false ->
Amount@1 = Amount - 32,
munch@internal@bitwise:'bor'(
munch@internal@bitwise:shr(High, Amount@1),
munch@internal@bitwise:shl(Low, 32 - Amount@1)
)
end.
-file("src/munch/internal/sha512.gleam", 216).
?DOC(false).
-spec shr64_high(integer(), integer()) -> integer().
shr64_high(High, Amount) ->
munch@internal@bitwise:shr(High, Amount).
-file("src/munch/internal/sha512.gleam", 220).
?DOC(false).
-spec shr64_low(integer(), integer(), integer()) -> integer().
shr64_low(High, Low, Amount) ->
munch@internal@bitwise:'bor'(
munch@internal@bitwise:shr(Low, Amount),
munch@internal@bitwise:shl(High, 32 - Amount)
).
-file("src/munch/internal/sha512.gleam", 224).
?DOC(false).
-spec ch(integer(), integer(), integer()) -> integer().
ch(X, Y, Z) ->
munch@internal@bitwise:'xor'(
Z,
munch@internal@bitwise:'band'(X, munch@internal@bitwise:'xor'(Y, Z))
).
-file("src/munch/internal/sha512.gleam", 228).
?DOC(false).
-spec maj(integer(), integer(), integer()) -> integer().
maj(X, Y, Z) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'band'(X, Y),
munch@internal@bitwise:'band'(Z, munch@internal@bitwise:'xor'(X, Y))
).
-file("src/munch/internal/sha512.gleam", 232).
?DOC(false).
-spec bsig0_high(integer(), integer()) -> integer().
bsig0_high(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_high(High, Low, 28),
ror_high(High, Low, 34)
),
ror_high(High, Low, 39)
).
-file("src/munch/internal/sha512.gleam", 239).
?DOC(false).
-spec bsig0_low(integer(), integer()) -> integer().
bsig0_low(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_low(High, Low, 28),
ror_low(High, Low, 34)
),
ror_low(High, Low, 39)
).
-file("src/munch/internal/sha512.gleam", 246).
?DOC(false).
-spec bsig1_high(integer(), integer()) -> integer().
bsig1_high(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_high(High, Low, 14),
ror_high(High, Low, 18)
),
ror_high(High, Low, 41)
).
-file("src/munch/internal/sha512.gleam", 253).
?DOC(false).
-spec bsig1_low(integer(), integer()) -> integer().
bsig1_low(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_low(High, Low, 14),
ror_low(High, Low, 18)
),
ror_low(High, Low, 41)
).
-file("src/munch/internal/sha512.gleam", 260).
?DOC(false).
-spec ssig0_high(integer(), integer()) -> integer().
ssig0_high(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_high(High, Low, 1),
ror_high(High, Low, 8)
),
shr64_high(High, 7)
).
-file("src/munch/internal/sha512.gleam", 264).
?DOC(false).
-spec ssig0_low(integer(), integer()) -> integer().
ssig0_low(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_low(High, Low, 1),
ror_low(High, Low, 8)
),
shr64_low(High, Low, 7)
).
-file("src/munch/internal/sha512.gleam", 271).
?DOC(false).
-spec ssig1_high(integer(), integer()) -> integer().
ssig1_high(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_high(High, Low, 19),
ror_high(High, Low, 61)
),
shr64_high(High, 6)
).
-file("src/munch/internal/sha512.gleam", 278).
?DOC(false).
-spec ssig1_low(integer(), integer()) -> integer().
ssig1_low(High, Low) ->
munch@internal@bitwise:'xor'(
munch@internal@bitwise:'xor'(
ror_low(High, Low, 19),
ror_low(High, Low, 61)
),
shr64_low(High, Low, 6)
).
-file("src/munch/internal/sha512.gleam", 285).
?DOC(false).
-spec schedule_low(
integer(),
integer(),
integer(),
integer(),
integer(),
integer()
) -> integer().
schedule_low(W2_high, W2_low, W7_low, W15_high, W15_low, W16_low) ->
Sum = ((unsigned(ssig1_low(W2_high, W2_low)) + unsigned(W7_low)) + unsigned(
ssig0_low(W15_high, W15_low)
))
+ unsigned(W16_low),
munch@internal@bitwise:'band'(Sum, 16#ffffffff).
-file("src/munch/internal/sha512.gleam", 294).
?DOC(false).
-spec schedule_high(
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer()
) -> integer().
schedule_high(
W2_high,
W2_low,
W7_high,
W7_low,
W15_high,
W15_low,
W16_high,
W16_low
) ->
Sum = ((unsigned(ssig1_low(W2_high, W2_low)) + unsigned(W7_low)) + unsigned(
ssig0_low(W15_high, W15_low)
))
+ unsigned(W16_low),
munch@internal@bitwise:'band'(
(((ssig1_high(W2_high, W2_low) + W7_high) + ssig0_high(
W15_high,
W15_low
))
+ W16_high)
+ (case 16#100000000 of
0 -> 0;
Gleam@denominator -> Sum div Gleam@denominator
end),
16#ffffffff
).
-file("src/munch/internal/sha512.gleam", 320).
?DOC(false).
-spec round1_low(
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer()
) -> integer().
round1_low(E_high, E_low, F_low, G_low, H_low, K_low, W_low) ->
Sum = (((unsigned(H_low) + unsigned(bsig1_low(E_high, E_low))) + unsigned(
ch(E_low, F_low, G_low)
))
+ unsigned(K_low))
+ unsigned(W_low),
munch@internal@bitwise:'band'(Sum, 16#ffffffff).
-file("src/munch/internal/sha512.gleam", 330).
?DOC(false).
-spec round1_high(
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer()
) -> integer().
round1_high(
E_high,
E_low,
F_high,
F_low,
G_high,
G_low,
H_high,
H_low,
K_high,
K_low,
W_high,
W_low
) ->
Sum = (((unsigned(H_low) + unsigned(bsig1_low(E_high, E_low))) + unsigned(
ch(E_low, F_low, G_low)
))
+ unsigned(K_low))
+ unsigned(W_low),
munch@internal@bitwise:'band'(
((((H_high + bsig1_high(E_high, E_low)) + ch(E_high, F_high, G_high)) + K_high)
+ W_high)
+ (case 16#100000000 of
0 -> 0;
Gleam@denominator -> Sum div Gleam@denominator
end),
16#ffffffff
).
-file("src/munch/internal/sha512.gleam", 362).
?DOC(false).
-spec round2_low(integer(), integer(), integer(), integer()) -> integer().
round2_low(A_high, A_low, B_low, C_low) ->
Sum = unsigned(bsig0_low(A_high, A_low)) + unsigned(
maj(A_low, B_low, C_low)
),
munch@internal@bitwise:'band'(Sum, 16#ffffffff).
-file("src/munch/internal/sha512.gleam", 368).
?DOC(false).
-spec round2_high(
integer(),
integer(),
integer(),
integer(),
integer(),
integer()
) -> integer().
round2_high(A_high, A_low, B_high, B_low, C_high, C_low) ->
Sum = unsigned(bsig0_low(A_high, A_low)) + unsigned(
maj(A_low, B_low, C_low)
),
munch@internal@bitwise:'band'(
(bsig0_high(A_high, A_low) + maj(A_high, B_high, C_high)) + (case 16#100000000 of
0 -> 0;
Gleam@denominator -> Sum div Gleam@denominator
end),
16#ffffffff
).
-file("src/munch/internal/sha512.gleam", 815).
?DOC(false).
-spec rounds(
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
list({integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer()}),
bitstring()
) -> {integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
bitstring()}.
rounds(
Oh0h,
Oh0l,
Oh1h,
Oh1l,
Oh2h,
Oh2l,
Oh3h,
Oh3l,
Oh4h,
Oh4l,
Oh5h,
Oh5l,
Oh6h,
Oh6l,
Oh7h,
Oh7l,
Ah,
Al,
Bh,
Bl,
Ch,
Cl,
Dh,
Dl,
Eh,
El,
Fh,
Fl,
Gh,
Gl,
Hh,
Hl,
W0h,
W0l,
W1h,
W1l,
W2h,
W2l,
W3h,
W3l,
W4h,
W4l,
W5h,
W5l,
W6h,
W6l,
W7h,
W7l,
W8h,
W8l,
W9h,
W9l,
W10h,
W10l,
W11h,
W11l,
W12h,
W12l,
W13h,
W13l,
W14h,
W14l,
W15h,
W15l,
Groups,
Data
) ->
case {Groups, Data} of
{[],
<<W0h@1:32,
W0l@1:32,
W1h@1:32,
W1l@1:32,
W2h@1:32,
W2l@1:32,
W3h@1:32,
W3l@1:32,
W4h@1:32,
W4l@1:32,
W5h@1:32,
W5l@1:32,
W6h@1:32,
W6l@1:32,
W7h@1:32,
W7l@1:32,
W8h@1:32,
W8l@1:32,
W9h@1:32,
W9l@1:32,
W10h@1:32,
W10l@1:32,
W11h@1:32,
W11l@1:32,
W12h@1:32,
W12l@1:32,
W13h@1:32,
W13l@1:32,
W14h@1:32,
W14l@1:32,
W15h@1:32,
W15l@1:32,
Rest/bitstring>>} ->
rounds(
Oh0h,
Oh0l,
Oh1h,
Oh1l,
Oh2h,
Oh2l,
Oh3h,
Oh3l,
Oh4h,
Oh4l,
Oh5h,
Oh5l,
Oh6h,
Oh6l,
Oh7h,
Oh7l,
Oh0h,
Oh0l,
Oh1h,
Oh1l,
Oh2h,
Oh2l,
Oh3h,
Oh3l,
Oh4h,
Oh4l,
Oh5h,
Oh5l,
Oh6h,
Oh6l,
Oh7h,
Oh7l,
W0h@1,
W0l@1,
W1h@1,
W1l@1,
W2h@1,
W2l@1,
W3h@1,
W3l@1,
W4h@1,
W4l@1,
W5h@1,
W5l@1,
W6h@1,
W6l@1,
W7h@1,
W7l@1,
W8h@1,
W8l@1,
W9h@1,
W9l@1,
W10h@1,
W10l@1,
W11h@1,
W11l@1,
W12h@1,
W12l@1,
W13h@1,
W13l@1,
W14h@1,
W14l@1,
W15h@1,
W15l@1,
[{16#428A2F98,
16#D728AE22,
16#71374491,
16#23EF65CD,
16#B5C0FBCF,
16#EC4D3B2F,
16#E9B5DBA5,
16#8189DBBC,
16#3956C25B,
16#F348B538,
16#59F111F1,
16#B605D019,
16#923F82A4,
16#AF194F9B,
16#AB1C5ED5,
16#DA6D8118},
{16#D807AA98,
16#A3030242,
16#12835B01,
16#45706FBE,
16#243185BE,
16#4EE4B28C,
16#550C7DC3,
16#D5FFB4E2,
16#72BE5D74,
16#F27B896F,
16#80DEB1FE,
16#3B1696B1,
16#9BDC06A7,
16#25C71235,
16#C19BF174,
16#CF692694},
{16#E49B69C1,
16#9EF14AD2,
16#EFBE4786,
16#384F25E3,
16#0FC19DC6,
16#8B8CD5B5,
16#240CA1CC,
16#77AC9C65,
16#2DE92C6F,
16#592B0275,
16#4A7484AA,
16#6EA6E483,
16#5CB0A9DC,
16#BD41FBD4,
16#76F988DA,
16#831153B5},
{16#983E5152,
16#EE66DFAB,
16#A831C66D,
16#2DB43210,
16#B00327C8,
16#98FB213F,
16#BF597FC7,
16#BEEF0EE4,
16#C6E00BF3,
16#3DA88FC2,
16#D5A79147,
16#930AA725,
16#06CA6351,
16#E003826F,
16#14292967,
16#0A0E6E70},
{16#27B70A85,
16#46D22FFC,
16#2E1B2138,
16#5C26C926,
16#4D2C6DFC,
16#5AC42AED,
16#53380D13,
16#9D95B3DF,
16#650A7354,
16#8BAF63DE,
16#766A0ABB,
16#3C77B2A8,
16#81C2C92E,
16#47EDAEE6,
16#92722C85,
16#1482353B},
{16#A2BFE8A1,
16#4CF10364,
16#A81A664B,
16#BC423001,
16#C24B8B70,
16#D0F89791,
16#C76C51A3,
16#0654BE30,
16#D192E819,
16#D6EF5218,
16#D6990624,
16#5565A910,
16#F40E3585,
16#5771202A,
16#106AA070,
16#32BBD1B8},
{16#19A4C116,
16#B8D2D0C8,
16#1E376C08,
16#5141AB53,
16#2748774C,
16#DF8EEB99,
16#34B0BCB5,
16#E19B48A8,
16#391C0CB3,
16#C5C95A63,
16#4ED8AA4A,
16#E3418ACB,
16#5B9CCA4F,
16#7763E373,
16#682E6FF3,
16#D6B2B8A3},
{16#748F82EE,
16#5DEFB2FC,
16#78A5636F,
16#43172F60,
16#84C87814,
16#A1F0AB72,
16#8CC70208,
16#1A6439EC,
16#90BEFFFA,
16#23631E28,
16#A4506CEB,
16#DE82BDE9,
16#BEF9A3F7,
16#B2C67915,
16#C67178F2,
16#E372532B},
{16#CA273ECE,
16#EA26619C,
16#D186B8C7,
16#21C0C207,
16#EADA7DD6,
16#CDE0EB1E,
16#F57D4F7F,
16#EE6ED178,
16#06F067AA,
16#72176FBA,
16#0A637DC5,
16#A2C898A6,
16#113F9804,
16#BEF90DAE,
16#1B710B35,
16#131C471B},
{16#28DB77F5,
16#23047D84,
16#32CAAB7B,
16#40C72493,
16#3C9EBE0A,
16#15C9BEBC,
16#431D67C4,
16#9C100D4C,
16#4CC5D4BE,
16#CB3E42B6,
16#597F299C,
16#FC657E2A,
16#5FCB6FAB,
16#3AD6FAEC,
16#6C44198C,
16#4A475817}],
Rest
);
{[], Rest@1} ->
{Oh0h,
Oh0l,
Oh1h,
Oh1l,
Oh2h,
Oh2l,
Oh3h,
Oh3l,
Oh4h,
Oh4l,
Oh5h,
Oh5l,
Oh6h,
Oh6l,
Oh7h,
Oh7l,
Rest@1};
{[{K0h,
K0l,
K1h,
K1l,
K2h,
K2l,
K3h,
K3l,
K4h,
K4l,
K5h,
K5l,
K6h,
K6l,
K7h,
K7l} |
Rest_groups],
_} ->
T1l = round1_low(Eh, El, Fl, Gl, Hl, K0l, W0l),
T1h = round1_high(
Eh,
El,
Fh,
Fl,
Gh,
Gl,
Hh,
Hl,
K0h,
K0l,
W0h,
W0l
),
T2l = round2_low(Ah, Al, Bl, Cl),
T2h = round2_high(Ah, Al, Bh, Bl, Ch, Cl),
Low_sum = unsigned(T1l) + unsigned(T2l),
Hh@1 = munch@internal@bitwise:'band'(
(T1h + T2h) + (case 16#100000000 of
0 -> 0;
Gleam@denominator -> Low_sum div Gleam@denominator
end),
16#ffffffff
),
Hl@1 = munch@internal@bitwise:'band'(Low_sum, 16#ffffffff),
Low_sum@1 = unsigned(Dl) + unsigned(T1l),
Dh@1 = munch@internal@bitwise:'band'(
(Dh + T1h) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@1 -> Low_sum@1 div Gleam@denominator@1
end),
16#ffffffff
),
Dl@1 = munch@internal@bitwise:'band'(Low_sum@1, 16#ffffffff),
T1l@1 = round1_low(Dh@1, Dl@1, El, Fl, Gl, K1l, W1l),
T1h@1 = round1_high(
Dh@1,
Dl@1,
Eh,
El,
Fh,
Fl,
Gh,
Gl,
K1h,
K1l,
W1h,
W1l
),
T2l@1 = round2_low(Hh@1, Hl@1, Al, Bl),
T2h@1 = round2_high(Hh@1, Hl@1, Ah, Al, Bh, Bl),
Low_sum@2 = unsigned(T1l@1) + unsigned(T2l@1),
Gh@1 = munch@internal@bitwise:'band'(
(T1h@1 + T2h@1) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@2 -> Low_sum@2 div Gleam@denominator@2
end),
16#ffffffff
),
Gl@1 = munch@internal@bitwise:'band'(Low_sum@2, 16#ffffffff),
Low_sum@3 = unsigned(Cl) + unsigned(T1l@1),
Ch@1 = munch@internal@bitwise:'band'(
(Ch + T1h@1) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@3 -> Low_sum@3 div Gleam@denominator@3
end),
16#ffffffff
),
Cl@1 = munch@internal@bitwise:'band'(Low_sum@3, 16#ffffffff),
T1l@2 = round1_low(Ch@1, Cl@1, Dl@1, El, Fl, K2l, W2l),
T1h@2 = round1_high(
Ch@1,
Cl@1,
Dh@1,
Dl@1,
Eh,
El,
Fh,
Fl,
K2h,
K2l,
W2h,
W2l
),
T2l@2 = round2_low(Gh@1, Gl@1, Hl@1, Al),
T2h@2 = round2_high(Gh@1, Gl@1, Hh@1, Hl@1, Ah, Al),
Low_sum@4 = unsigned(T1l@2) + unsigned(T2l@2),
Fh@1 = munch@internal@bitwise:'band'(
(T1h@2 + T2h@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@4 -> Low_sum@4 div Gleam@denominator@4
end),
16#ffffffff
),
Fl@1 = munch@internal@bitwise:'band'(Low_sum@4, 16#ffffffff),
Low_sum@5 = unsigned(Bl) + unsigned(T1l@2),
Bh@1 = munch@internal@bitwise:'band'(
(Bh + T1h@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@5 -> Low_sum@5 div Gleam@denominator@5
end),
16#ffffffff
),
Bl@1 = munch@internal@bitwise:'band'(Low_sum@5, 16#ffffffff),
T1l@3 = round1_low(Bh@1, Bl@1, Cl@1, Dl@1, El, K3l, W3l),
T1h@3 = round1_high(
Bh@1,
Bl@1,
Ch@1,
Cl@1,
Dh@1,
Dl@1,
Eh,
El,
K3h,
K3l,
W3h,
W3l
),
T2l@3 = round2_low(Fh@1, Fl@1, Gl@1, Hl@1),
T2h@3 = round2_high(Fh@1, Fl@1, Gh@1, Gl@1, Hh@1, Hl@1),
Low_sum@6 = unsigned(T1l@3) + unsigned(T2l@3),
Eh@1 = munch@internal@bitwise:'band'(
(T1h@3 + T2h@3) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@6 -> Low_sum@6 div Gleam@denominator@6
end),
16#ffffffff
),
El@1 = munch@internal@bitwise:'band'(Low_sum@6, 16#ffffffff),
Low_sum@7 = unsigned(Al) + unsigned(T1l@3),
Ah@1 = munch@internal@bitwise:'band'(
(Ah + T1h@3) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@7 -> Low_sum@7 div Gleam@denominator@7
end),
16#ffffffff
),
Al@1 = munch@internal@bitwise:'band'(Low_sum@7, 16#ffffffff),
T1l@4 = round1_low(Ah@1, Al@1, Bl@1, Cl@1, Dl@1, K4l, W4l),
T1h@4 = round1_high(
Ah@1,
Al@1,
Bh@1,
Bl@1,
Ch@1,
Cl@1,
Dh@1,
Dl@1,
K4h,
K4l,
W4h,
W4l
),
T2l@4 = round2_low(Eh@1, El@1, Fl@1, Gl@1),
T2h@4 = round2_high(Eh@1, El@1, Fh@1, Fl@1, Gh@1, Gl@1),
Low_sum@8 = unsigned(T1l@4) + unsigned(T2l@4),
Dh@2 = munch@internal@bitwise:'band'(
(T1h@4 + T2h@4) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@8 -> Low_sum@8 div Gleam@denominator@8
end),
16#ffffffff
),
Dl@2 = munch@internal@bitwise:'band'(Low_sum@8, 16#ffffffff),
Low_sum@9 = unsigned(Hl@1) + unsigned(T1l@4),
Hh@2 = munch@internal@bitwise:'band'(
(Hh@1 + T1h@4) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@9 -> Low_sum@9 div Gleam@denominator@9
end),
16#ffffffff
),
Hl@2 = munch@internal@bitwise:'band'(Low_sum@9, 16#ffffffff),
T1l@5 = round1_low(Hh@2, Hl@2, Al@1, Bl@1, Cl@1, K5l, W5l),
T1h@5 = round1_high(
Hh@2,
Hl@2,
Ah@1,
Al@1,
Bh@1,
Bl@1,
Ch@1,
Cl@1,
K5h,
K5l,
W5h,
W5l
),
T2l@5 = round2_low(Dh@2, Dl@2, El@1, Fl@1),
T2h@5 = round2_high(Dh@2, Dl@2, Eh@1, El@1, Fh@1, Fl@1),
Low_sum@10 = unsigned(T1l@5) + unsigned(T2l@5),
Ch@2 = munch@internal@bitwise:'band'(
(T1h@5 + T2h@5) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@10 -> Low_sum@10 div Gleam@denominator@10
end),
16#ffffffff
),
Cl@2 = munch@internal@bitwise:'band'(Low_sum@10, 16#ffffffff),
Low_sum@11 = unsigned(Gl@1) + unsigned(T1l@5),
Gh@2 = munch@internal@bitwise:'band'(
(Gh@1 + T1h@5) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@11 -> Low_sum@11 div Gleam@denominator@11
end),
16#ffffffff
),
Gl@2 = munch@internal@bitwise:'band'(Low_sum@11, 16#ffffffff),
T1l@6 = round1_low(Gh@2, Gl@2, Hl@2, Al@1, Bl@1, K6l, W6l),
T1h@6 = round1_high(
Gh@2,
Gl@2,
Hh@2,
Hl@2,
Ah@1,
Al@1,
Bh@1,
Bl@1,
K6h,
K6l,
W6h,
W6l
),
T2l@6 = round2_low(Ch@2, Cl@2, Dl@2, El@1),
T2h@6 = round2_high(Ch@2, Cl@2, Dh@2, Dl@2, Eh@1, El@1),
Low_sum@12 = unsigned(T1l@6) + unsigned(T2l@6),
Bh@2 = munch@internal@bitwise:'band'(
(T1h@6 + T2h@6) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@12 -> Low_sum@12 div Gleam@denominator@12
end),
16#ffffffff
),
Bl@2 = munch@internal@bitwise:'band'(Low_sum@12, 16#ffffffff),
Low_sum@13 = unsigned(Fl@1) + unsigned(T1l@6),
Fh@2 = munch@internal@bitwise:'band'(
(Fh@1 + T1h@6) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@13 -> Low_sum@13 div Gleam@denominator@13
end),
16#ffffffff
),
Fl@2 = munch@internal@bitwise:'band'(Low_sum@13, 16#ffffffff),
T1l@7 = round1_low(Fh@2, Fl@2, Gl@2, Hl@2, Al@1, K7l, W7l),
T1h@7 = round1_high(
Fh@2,
Fl@2,
Gh@2,
Gl@2,
Hh@2,
Hl@2,
Ah@1,
Al@1,
K7h,
K7l,
W7h,
W7l
),
T2l@7 = round2_low(Bh@2, Bl@2, Cl@2, Dl@2),
T2h@7 = round2_high(Bh@2, Bl@2, Ch@2, Cl@2, Dh@2, Dl@2),
Low_sum@14 = unsigned(T1l@7) + unsigned(T2l@7),
Ah@2 = munch@internal@bitwise:'band'(
(T1h@7 + T2h@7) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@14 -> Low_sum@14 div Gleam@denominator@14
end),
16#ffffffff
),
Al@2 = munch@internal@bitwise:'band'(Low_sum@14, 16#ffffffff),
Low_sum@15 = unsigned(El@1) + unsigned(T1l@7),
Eh@2 = munch@internal@bitwise:'band'(
(Eh@1 + T1h@7) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@15 -> Low_sum@15 div Gleam@denominator@15
end),
16#ffffffff
),
El@2 = munch@internal@bitwise:'band'(Low_sum@15, 16#ffffffff),
case Rest_groups of
[] ->
Low_sum@16 = unsigned(Oh0l) + unsigned(Al@2),
H0h = munch@internal@bitwise:'band'(
(Oh0h + Ah@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@16 -> Low_sum@16 div Gleam@denominator@16
end),
16#ffffffff
),
H0l = munch@internal@bitwise:'band'(Low_sum@16, 16#ffffffff),
Low_sum@17 = unsigned(Oh1l) + unsigned(Bl@2),
H1h = munch@internal@bitwise:'band'(
(Oh1h + Bh@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@17 -> Low_sum@17 div Gleam@denominator@17
end),
16#ffffffff
),
H1l = munch@internal@bitwise:'band'(Low_sum@17, 16#ffffffff),
Low_sum@18 = unsigned(Oh2l) + unsigned(Cl@2),
H2h = munch@internal@bitwise:'band'(
(Oh2h + Ch@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@18 -> Low_sum@18 div Gleam@denominator@18
end),
16#ffffffff
),
H2l = munch@internal@bitwise:'band'(Low_sum@18, 16#ffffffff),
Low_sum@19 = unsigned(Oh3l) + unsigned(Dl@2),
H3h = munch@internal@bitwise:'band'(
(Oh3h + Dh@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@19 -> Low_sum@19 div Gleam@denominator@19
end),
16#ffffffff
),
H3l = munch@internal@bitwise:'band'(Low_sum@19, 16#ffffffff),
Low_sum@20 = unsigned(Oh4l) + unsigned(El@2),
H4h = munch@internal@bitwise:'band'(
(Oh4h + Eh@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@20 -> Low_sum@20 div Gleam@denominator@20
end),
16#ffffffff
),
H4l = munch@internal@bitwise:'band'(Low_sum@20, 16#ffffffff),
Low_sum@21 = unsigned(Oh5l) + unsigned(Fl@2),
H5h = munch@internal@bitwise:'band'(
(Oh5h + Fh@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@21 -> Low_sum@21 div Gleam@denominator@21
end),
16#ffffffff
),
H5l = munch@internal@bitwise:'band'(Low_sum@21, 16#ffffffff),
Low_sum@22 = unsigned(Oh6l) + unsigned(Gl@2),
H6h = munch@internal@bitwise:'band'(
(Oh6h + Gh@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@22 -> Low_sum@22 div Gleam@denominator@22
end),
16#ffffffff
),
H6l = munch@internal@bitwise:'band'(Low_sum@22, 16#ffffffff),
Low_sum@23 = unsigned(Oh7l) + unsigned(Hl@2),
H7h = munch@internal@bitwise:'band'(
(Oh7h + Hh@2) + (case 16#100000000 of
0 -> 0;
Gleam@denominator@23 -> Low_sum@23 div Gleam@denominator@23
end),
16#ffffffff
),
H7l = munch@internal@bitwise:'band'(Low_sum@23, 16#ffffffff),
rounds(
H0h,
H0l,
H1h,
H1l,
H2h,
H2l,
H3h,
H3l,
H4h,
H4l,
H5h,
H5l,
H6h,
H6l,
H7h,
H7l,
Ah@2,
Al@2,
Bh@2,
Bl@2,
Ch@2,
Cl@2,
Dh@2,
Dl@2,
Eh@2,
El@2,
Fh@2,
Fl@2,
Gh@2,
Gl@2,
Hh@2,
Hl@2,
W0h,
W0l,
W1h,
W1l,
W2h,
W2l,
W3h,
W3l,
W4h,
W4l,
W5h,
W5l,
W6h,
W6l,
W7h,
W7l,
W8h,
W8l,
W9h,
W9l,
W10h,
W10l,
W11h,
W11l,
W12h,
W12l,
W13h,
W13l,
W14h,
W14l,
W15h,
W15l,
[],
Data
);
_ ->
N0l = schedule_low(W14h, W14l, W9l, W1h, W1l, W0l),
N0h = schedule_high(
W14h,
W14l,
W9h,
W9l,
W1h,
W1l,
W0h,
W0l
),
N1l = schedule_low(W15h, W15l, W10l, W2h, W2l, W1l),
N1h = schedule_high(
W15h,
W15l,
W10h,
W10l,
W2h,
W2l,
W1h,
W1l
),
N2l = schedule_low(N0h, N0l, W11l, W3h, W3l, W2l),
N2h = schedule_high(
N0h,
N0l,
W11h,
W11l,
W3h,
W3l,
W2h,
W2l
),
N3l = schedule_low(N1h, N1l, W12l, W4h, W4l, W3l),
N3h = schedule_high(
N1h,
N1l,
W12h,
W12l,
W4h,
W4l,
W3h,
W3l
),
N4l = schedule_low(N2h, N2l, W13l, W5h, W5l, W4l),
N4h = schedule_high(
N2h,
N2l,
W13h,
W13l,
W5h,
W5l,
W4h,
W4l
),
N5l = schedule_low(N3h, N3l, W14l, W6h, W6l, W5l),
N5h = schedule_high(
N3h,
N3l,
W14h,
W14l,
W6h,
W6l,
W5h,
W5l
),
N6l = schedule_low(N4h, N4l, W15l, W7h, W7l, W6l),
N6h = schedule_high(
N4h,
N4l,
W15h,
W15l,
W7h,
W7l,
W6h,
W6l
),
N7l = schedule_low(N5h, N5l, N0l, W8h, W8l, W7l),
N7h = schedule_high(N5h, N5l, N0h, N0l, W8h, W8l, W7h, W7l),
rounds(
Oh0h,
Oh0l,
Oh1h,
Oh1l,
Oh2h,
Oh2l,
Oh3h,
Oh3l,
Oh4h,
Oh4l,
Oh5h,
Oh5l,
Oh6h,
Oh6l,
Oh7h,
Oh7l,
Ah@2,
Al@2,
Bh@2,
Bl@2,
Ch@2,
Cl@2,
Dh@2,
Dl@2,
Eh@2,
El@2,
Fh@2,
Fl@2,
Gh@2,
Gl@2,
Hh@2,
Hl@2,
W8h,
W8l,
W9h,
W9l,
W10h,
W10l,
W11h,
W11l,
W12h,
W12l,
W13h,
W13l,
W14h,
W14l,
W15h,
W15l,
N0h,
N0l,
N1h,
N1l,
N2h,
N2l,
N3h,
N3l,
N4h,
N4l,
N5h,
N5l,
N6h,
N6l,
N7h,
N7l,
Rest_groups,
Data
)
end
end.
-file("src/munch/internal/sha512.gleam", 708).
?DOC(false).
-spec blocks(
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
bitstring()
) -> {integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
bitstring()}.
blocks(
H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low,
Data
) ->
rounds(
H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low,
H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
[],
Data
).
-file("src/munch/internal/sha512.gleam", 604).
?DOC(false).
-spec finish(state()) -> {integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer(),
integer()}.
finish(State) ->
{state,
H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low,
Buffer,
Length} = State,
Used = (erlang:bit_size(Buffer) + 1) rem 1024,
Zeros = ((896 + 1024) - Used) rem 1024,
Padded = <<Buffer/bitstring, 1:1, 0:(erlang:max(0, Zeros)), Length:128>>,
{H0_high@1,
H0_low@1,
H1_high@1,
H1_low@1,
H2_high@1,
H2_low@1,
H3_high@1,
H3_low@1,
H4_high@1,
H4_low@1,
H5_high@1,
H5_low@1,
H6_high@1,
H6_low@1,
H7_high@1,
H7_low@1,
_} = blocks(
H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low,
Padded
),
{H0_high@1,
H0_low@1,
H1_high@1,
H1_low@1,
H2_high@1,
H2_low@1,
H3_high@1,
H3_low@1,
H4_high@1,
H4_low@1,
H5_high@1,
H5_low@1,
H6_high@1,
H6_low@1,
H7_high@1,
H7_low@1}.
-file("src/munch/internal/sha512.gleam", 530).
?DOC(false).
-spec finish512(state()) -> bitstring().
finish512(State) ->
{H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low} = finish(State),
<<H0_high:32,
H0_low:32,
H1_high:32,
H1_low:32,
H2_high:32,
H2_low:32,
H3_high:32,
H3_low:32,
H4_high:32,
H4_low:32,
H5_high:32,
H5_low:32,
H6_high:32,
H6_low:32,
H7_high:32,
H7_low:32>>.
-file("src/munch/internal/sha512.gleam", 448).
?DOC(false).
-spec update(state(), bitstring()) -> state().
update(State, Data) ->
{state,
H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low,
Buffer,
Length} = State,
Length@1 = Length + erlang:bit_size(Data),
{H0_high@1,
H0_low@1,
H1_high@1,
H1_low@1,
H2_high@1,
H2_low@1,
H3_high@1,
H3_low@1,
H4_high@1,
H4_low@1,
H5_high@1,
H5_low@1,
H6_high@1,
H6_low@1,
H7_high@1,
H7_low@1,
Buffer@1} = blocks(
H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
H6_high,
H6_low,
H7_high,
H7_low,
<<Buffer/bitstring, Data/bitstring>>
),
{state,
H0_high@1,
H0_low@1,
H1_high@1,
H1_low@1,
H2_high@1,
H2_low@1,
H3_high@1,
H3_low@1,
H4_high@1,
H4_low@1,
H5_high@1,
H5_low@1,
H6_high@1,
H6_low@1,
H7_high@1,
H7_low@1,
Buffer@1,
Length@1}.
-file("src/munch/internal/sha512.gleam", 400).
?DOC(false).
-spec new() -> munch@internal@hash:hash().
new() ->
_pipe = {state,
16#6A09E667,
16#F3BCC908,
16#BB67AE85,
16#84CAA73B,
16#3C6EF372,
16#FE94F82B,
16#A54FF53A,
16#5F1D36F1,
16#510E527F,
16#ADE682D1,
16#9B05688C,
16#2B3E6C1F,
16#1F83D9AB,
16#FB41BD6B,
16#5BE0CD19,
16#137E2179,
<<>>,
0},
munch@internal@hash:from(_pipe, fun update/2, fun finish512/1).
-file("src/munch/internal/sha512.gleam", 569).
?DOC(false).
-spec finish384(state()) -> bitstring().
finish384(State) ->
{H0_high,
H0_low,
H1_high,
H1_low,
H2_high,
H2_low,
H3_high,
H3_low,
H4_high,
H4_low,
H5_high,
H5_low,
_,
_,
_,
_} = finish(State),
<<H0_high:32,
H0_low:32,
H1_high:32,
H1_low:32,
H2_high:32,
H2_low:32,
H3_high:32,
H3_low:32,
H4_high:32,
H4_low:32,
H5_high:32,
H5_low:32>>.
-file("src/munch/internal/sha512.gleam", 424).
?DOC(false).
-spec new384() -> munch@internal@hash:hash().
new384() ->
_pipe = {state,
16#CBBB9D5D,
16#C1059ED8,
16#629A292A,
16#367CD507,
16#9159015A,
16#3070DD17,
16#152FECD8,
16#F70E5939,
16#67332667,
16#FFC00B31,
16#8EB44A87,
16#68581511,
16#DB0C2E0D,
16#64F98FA7,
16#47B5481D,
16#BEFA4FA4,
<<>>,
0},
munch@internal@hash:from(_pipe, fun update/2, fun finish384/1).