//===-- go-sha1.cpp -------------------------------------------------------===//
//
// Copyright 2018 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
//
//===----------------------------------------------------------------------===//
//
// Implements LLVM-specific sha1 utilities for use by the gofrontend code.
//

#include "go-sha1.h"

#include "llvm/ADT/ArrayRef.h"
#include "llvm/Support/SHA1.h"

class Llvm_Sha1_Helper : public Go_sha1_helper
{
 public:

  Llvm_Sha1_Helper() : ctx_(new llvm::SHA1()) { }

  ~Llvm_Sha1_Helper();

  // Incorporate 'len' bytes from 'buffer' into checksum.
  void process_bytes(const void* buffer, size_t len);

  // Finalize checksum and return in the form of a string.
  std::string finish();

 private:
  std::unique_ptr<llvm::SHA1> ctx_;
};

Llvm_Sha1_Helper::~Llvm_Sha1_Helper()
{
}

void
Llvm_Sha1_Helper::process_bytes(const void* buffer, size_t len)
{
  uint8_t *data = static_cast<uint8_t*>(const_cast<void*>(buffer));
  llvm::ArrayRef<uint8_t> aref(data, len);
  ctx_->update(aref);
}

std::string
Llvm_Sha1_Helper::finish()
{
  std::string result(ctx_->final().str(), 0, checksum_len);
  return result;
}

Go_sha1_helper*
go_create_sha1_helper()
{
  return new Llvm_Sha1_Helper();
}
