Polyjuice Util v0.1.0 Polyjuice.Util.JSON View Source
JSON-related functions.
Link to this section Summary
Link to this section Functions
Encode a value as canonical JSON.
See https://matrix.org/docs/spec/appendices#canonical-json for more information about canonical JSON.
Examples:
iex> Polyjuice.Util.JSON.canonical_json(%{"a" => true, "b" => false, "c" => nil, "d" => 42, "e" => [], "f" => %{}})
{:ok, "{\"a\":true,\"b\":false,\"c\":null,\"d\":42,\"e\":[],\"f\":{}}"}
iex> Polyjuice.Util.JSON.canonical_json(%{"本"=>2,"日"=>1})
{:ok, "{\"日\":1,\"本\":2}"}
iex> Polyjuice.Util.JSON.canonical_json("a日\t\"\\\x01\x0f\x10\x1f")
{:ok, "\"a日\\t\\\"\\\\\\u0001\\u000F\\u0010\\u001F\""}
iex> Polyjuice.Util.JSON.canonical_json([1,2,3,4])
{:ok, "[1,2,3,4]"}
Unknown or invalid values will cause an error
iex> Polyjuice.Util.JSON.canonical_json([{}])
:error
iex> Polyjuice.Util.JSON.canonical_json([:foo])
:error
iex> Polyjuice.Util.JSON.canonical_json([0x40000000000000])
:error
iex> Polyjuice.Util.JSON.canonical_json([1.1])
:error
Link to this function
sign(val, user, key)
View Sourcesign(val :: map(), user :: String.t(), key :: Polyjuice.Util.SigningKey.t()) :: {:ok, map()} | :error
Sign a JSON object.
See https://matrix.org/docs/spec/appendices#signing-json for more information about signing JSON.
Examples:
iex> Polyjuice.Util.JSON.sign(
...> %{},
...> "domain",
...> Polyjuice.Util.Ed25519.SigningKey.from_base64("YJDBA9Xnr2sVqXD9Vj7XVUnmFZcZrlw8Md7kMW+3XA1", "1")
...> )
{
:ok,
%{
"signatures" => %{
"domain" => %{
"ed25519:1" => "K8280/U9SSy9IVtjBuVeLr+HpOB4BQFWbg+UZaADMtTdGYI7Geitb76LTrr5QV/7Xg4ahLwYGYZzuHGZKM5ZAQ"
}
}
}
}
iex> Polyjuice.Util.JSON.sign(
...> %{"one" => 1, "two" => "Two"},
...> "domain",
...> Polyjuice.Util.Ed25519.SigningKey.from_base64("YJDBA9Xnr2sVqXD9Vj7XVUnmFZcZrlw8Md7kMW+3XA1", "1")
...> )
{
:ok,
%{
"one" => 1,
"signatures" => %{
"domain" => %{
"ed25519:1" => "KqmLSbO39/Bzb0QIYE82zqLwsA+PDzYIpIRA2sRQ4sL53+sN6/fpNSoqE7BP7vBZhG6kYdD13EIMJpvhJI+6Bw"
}
},
"two" => "Two"
}
}
Link to this function
verify(val, user, key)
View Sourceverify(val :: map(), user :: String.t(), key :: Polyjuice.Util.VerifyKey.t()) :: boolean()
Verify a signed JSON object.
See https://matrix.org/docs/spec/appendices#signing-json for more information about signing JSON.
Examples:
iex> Polyjuice.Util.JSON.verify(
...> %{
...> "signatures" => %{
...> "domain" => %{
...> "ed25519:1" => "K8280/U9SSy9IVtjBuVeLr+HpOB4BQFWbg+UZaADMtTdGYI7Geitb76LTrr5QV/7Xg4ahLwYGYZzuHGZKM5ZAQ"
...> }
...> }
...> },
...> "domain",
...> Polyjuice.Util.Ed25519.VerifyKey.from_base64("XGX0JRS2Af3be3knz2fBiRbApjm2Dh61gXDJA8kcJNI", "1")
...> )
true
iex> Polyjuice.Util.JSON.verify(
...> %{
...> "one" => 1,
...> "signatures" => %{
...> "domain" => %{
...> "ed25519:1" => "KqmLSbO39/Bzb0QIYE82zqLwsA+PDzYIpIRA2sRQ4sL53+sN6/fpNSoqE7BP7vBZhG6kYdD13EIMJpvhJI+6Bw"
...> }
...> },
...> "two" => "Two"
...> },
...> "domain",
...> Polyjuice.Util.Ed25519.VerifyKey.from_base64("XGX0JRS2Af3be3knz2fBiRbApjm2Dh61gXDJA8kcJNI", "1")
...> )
true
Missing signature:
iex> Polyjuice.Util.JSON.verify(
...> %{
...> "signatures" => %{
...> "domain" => %{
...> "ed25519:2" => "K8280/U9SSy9IVtjBuVeLr+HpOB4BQFWbg+UZaADMtTdGYI7Geitb76LTrr5QV/7Xg4ahLwYGYZzuHGZKM5ZAQ"
...> }
...> }
...> },
...> "domain",
...> Polyjuice.Util.Ed25519.VerifyKey.from_base64("XGX0JRS2Af3be3knz2fBiRbApjm2Dh61gXDJA8kcJNI", "1")
...> )
false
Incorrect signature:
iex> Polyjuice.Util.JSON.verify(
...> %{
...> "signatures" => %{
...> "domain" => %{
...> "ed25519:1" => "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000"
...> }
...> }
...> },
...> "domain",
...> Polyjuice.Util.Ed25519.VerifyKey.from_base64("XGX0JRS2Af3be3knz2fBiRbApjm2Dh61gXDJA8kcJNI", "1")
...> )
false