1f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org/* 2f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Copyright 2004 The WebRTC Project Authors. All rights reserved. 3f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * 4f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * Use of this source code is governed by a BSD-style license 5f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * that can be found in the LICENSE file in the root of the source 6f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * tree. An additional intellectual property rights grant can be found 7f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * in the file PATENTS. All contributing project authors may 8f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org * be found in the AUTHORS file in the root of the source tree. 9f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org */ 10f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 11f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#ifndef WEBRTC_BASE_OPENSSLDIGEST_H_ 12f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#define WEBRTC_BASE_OPENSSLDIGEST_H_ 13f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 14f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include <openssl/evp.h> 15f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 16f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#include "webrtc/base/messagedigest.h" 17f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 18f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgnamespace rtc { 19f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 20f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org// An implementation of the digest class that uses OpenSSL. 21f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.orgclass OpenSSLDigest : public MessageDigest { 22f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org public: 23f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Creates an OpenSSLDigest with |algorithm| as the hash algorithm. 24f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org explicit OpenSSLDigest(const std::string& algorithm); 2567186fe00cc68cbe03aa66d17fb4962458ca96d2kwiberg@webrtc.org ~OpenSSLDigest() override; 26f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Returns the digest output size (e.g. 16 bytes for MD5). 2767186fe00cc68cbe03aa66d17fb4962458ca96d2kwiberg@webrtc.org size_t Size() const override; 28f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Updates the digest with |len| bytes from |buf|. 2967186fe00cc68cbe03aa66d17fb4962458ca96d2kwiberg@webrtc.org void Update(const void* buf, size_t len) override; 30f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Outputs the digest value to |buf| with length |len|. 3167186fe00cc68cbe03aa66d17fb4962458ca96d2kwiberg@webrtc.org size_t Finish(void* buf, size_t len) override; 32f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 33f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Helper function to look up a digest's EVP by name. 34f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org static bool GetDigestEVP(const std::string &algorithm, 35f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const EVP_MD** md); 36f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Helper function to look up a digest's name by EVP. 37f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org static bool GetDigestName(const EVP_MD* md, 38f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org std::string* algorithm); 39f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org // Helper function to get the length of a digest. 40f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org static bool GetDigestSize(const std::string &algorithm, 41f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org size_t* len); 42f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 43f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org private: 44f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org EVP_MD_CTX ctx_; 45f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org const EVP_MD* md_; 46f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org}; 47f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 48f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org} // namespace rtc 49f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org 50f048872e915a3ee229044ec4bc541f6cbf9e4de1henrike@webrtc.org#endif // WEBRTC_BASE_OPENSSLDIGEST_H_ 51