18 lines
606 B
Plaintext
18 lines
606 B
Plaintext
// Contract replicating "normal" Aeternity authentication
|
|
contract BasicAuth =
|
|
record state = { nonce : int, owner : address }
|
|
|
|
entrypoint init() = { nonce = 1, owner = Call.caller }
|
|
|
|
stateful entrypoint authorize(n : int, s : signature) : bool =
|
|
require(n >= state.nonce, "Nonce too low")
|
|
require(n =< state.nonce, "Nonce too high")
|
|
put(state{ nonce = n + 1 })
|
|
switch(Auth.tx_hash)
|
|
None => abort("Not in Auth context")
|
|
Some(tx_hash) => Crypto.verify_sig(to_sign(tx_hash, n), state.owner, s)
|
|
|
|
entrypoint to_sign(h : hash, n : int) =
|
|
Crypto.blake2b((h, n))
|
|
|