// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at http://mozilla.org/MPL/2.0/.

import "poly1305.cry" as poly1305;

print "Proving Poly1305 spec...";
prove_print abc {{ poly1305::allTestsPass }};

print "Loading LLVM bitcode...";
m <- llvm_load_module "../../../dist/Debug/lib/libfreeblpriv3.so.bc";

let SpecPoly1305 n = do {
  llvm_ptr "output" (llvm_array 16 (llvm_int 8));
  output <- llvm_var "*output" (llvm_array 16 (llvm_int 8));

  llvm_ptr "input" (llvm_array n (llvm_int 8));
  input <- llvm_var "*input" (llvm_array n (llvm_int 8));

  llvm_var "len1" (llvm_int 64);
  llvm_ptr "k1" (llvm_array 32 (llvm_int 8));
  k1 <- llvm_var "*k1" (llvm_array 32 (llvm_int 8));

  llvm_assert_eq "*input" {{ zero : [n][8] }};
  llvm_assert_eq "len1" {{ `n : [64] }};

  llvm_assert_eq "*k1" {{ zero : [32][8] }};

  let res = {{ poly1305::Poly1305 input (take`{16} k1) (drop`{16} k1) }};
  llvm_ensure_eq "*output" {{ res }};

  llvm_verify_tactic abc;
};

print "Proving equality for a single block...";
// This is currently disabled as it takes way too long. We need to help Z3
// prove this before we can enable it on Taskcluster.
//time (llvm_verify m "Hacl_Poly1305_64_crypto_onetimeauth" [] (SpecPoly1305 16));
