Packages

Pure Gleam implementation of the SPARX family of lightweight block ciphers (SPARX-64/128, SPARX-128/128, SPARX-128/256)

Current section

Files

Jump to
sparx src sparx@uint16.erl
Raw

src/sparx@uint16.erl

-module(sparx@uint16).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/sparx/uint16.gleam").
-export([from_int/1, unsafe_from_int/1, to_int/1, bitwise_shift_left/2, bitwise_shift_right/2, bitwise_or/2, bitwise_and/2, bitwise_exclusive_or/2]).
-export_type([uint16/0]).
-opaque uint16() :: {uint16, integer()}.
-file("src/sparx/uint16.gleam", 7).
-spec from_int(integer()) -> {ok, uint16()} | {error, nil}.
from_int(N) ->
case N of
I when (I < 0) orelse (I > 65535) ->
{error, nil};
_ ->
{ok, {uint16, N}}
end.
-file("src/sparx/uint16.gleam", 14).
-spec unsafe_from_int(integer()) -> uint16().
unsafe_from_int(N) ->
{uint16, erlang:'band'(N, 16#ffff)}.
-file("src/sparx/uint16.gleam", 18).
-spec to_int(uint16()) -> integer().
to_int(U) ->
{uint16, V} = U,
V.
-file("src/sparx/uint16.gleam", 23).
-spec bitwise_shift_left(uint16(), integer()) -> uint16().
bitwise_shift_left(U, N) ->
{uint16, V} = U,
{uint16, erlang:'band'(erlang:'bsl'(V, N), 16#ffff)}.
-file("src/sparx/uint16.gleam", 28).
-spec bitwise_shift_right(uint16(), integer()) -> uint16().
bitwise_shift_right(U, N) ->
{uint16, V} = U,
{uint16, erlang:'bsr'(V, N)}.
-file("src/sparx/uint16.gleam", 33).
-spec bitwise_or(uint16(), uint16()) -> uint16().
bitwise_or(A, B) ->
{uint16, Av} = A,
{uint16, Bv} = B,
{uint16, erlang:'bor'(Av, Bv)}.
-file("src/sparx/uint16.gleam", 39).
-spec bitwise_and(uint16(), uint16()) -> uint16().
bitwise_and(A, B) ->
{uint16, Av} = A,
{uint16, Bv} = B,
{uint16, erlang:'band'(Av, Bv)}.
-file("src/sparx/uint16.gleam", 45).
-spec bitwise_exclusive_or(uint16(), uint16()) -> uint16().
bitwise_exclusive_or(A, B) ->
{uint16, Av} = A,
{uint16, Bv} = B,
{uint16, erlang:'bxor'(Av, Bv)}.