1*3f982cf4SFabien Sanglard // Copyright 2019 The Chromium Authors. All rights reserved. 2*3f982cf4SFabien Sanglard // Use of this source code is governed by a BSD-style license that can be 3*3f982cf4SFabien Sanglard // found in the LICENSE file. 4*3f982cf4SFabien Sanglard 5*3f982cf4SFabien Sanglard #include "util/crypto/sha2.h" 6*3f982cf4SFabien Sanglard 7*3f982cf4SFabien Sanglard #include <stddef.h> 8*3f982cf4SFabien Sanglard 9*3f982cf4SFabien Sanglard #include <memory> 10*3f982cf4SFabien Sanglard 11*3f982cf4SFabien Sanglard #include "util/crypto/secure_hash.h" 12*3f982cf4SFabien Sanglard #include "util/std_util.h" 13*3f982cf4SFabien Sanglard 14*3f982cf4SFabien Sanglard namespace openscreen { 15*3f982cf4SFabien Sanglard SHA256HashString(absl::string_view str,uint8_t output[SHA256_DIGEST_LENGTH])16*3f982cf4SFabien SanglardError SHA256HashString(absl::string_view str, 17*3f982cf4SFabien Sanglard uint8_t output[SHA256_DIGEST_LENGTH]) { 18*3f982cf4SFabien Sanglard bssl::UniquePtr<EVP_MD_CTX> context(EVP_MD_CTX_new()); 19*3f982cf4SFabien Sanglard if (!EVP_Digest(str.data(), str.size(), output, nullptr, EVP_sha256(), 20*3f982cf4SFabien Sanglard nullptr)) { 21*3f982cf4SFabien Sanglard return Error::Code::kSha256HashFailure; 22*3f982cf4SFabien Sanglard } 23*3f982cf4SFabien Sanglard 24*3f982cf4SFabien Sanglard return Error::None(); 25*3f982cf4SFabien Sanglard } 26*3f982cf4SFabien Sanglard SHA256HashString(absl::string_view str)27*3f982cf4SFabien SanglardErrorOr<std::string> SHA256HashString(absl::string_view str) { 28*3f982cf4SFabien Sanglard std::string output(SHA256_DIGEST_LENGTH, 0); 29*3f982cf4SFabien Sanglard const Error error = 30*3f982cf4SFabien Sanglard SHA256HashString(str, reinterpret_cast<uint8_t*>(data(output))); 31*3f982cf4SFabien Sanglard if (error != Error::None()) { 32*3f982cf4SFabien Sanglard return error; 33*3f982cf4SFabien Sanglard } 34*3f982cf4SFabien Sanglard 35*3f982cf4SFabien Sanglard return output; 36*3f982cf4SFabien Sanglard } 37*3f982cf4SFabien Sanglard 38*3f982cf4SFabien Sanglard } // namespace openscreen 39