LCOV - code coverage report
Current view: top level - boost/capy/bcrypt - result.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 19 19
Test Date: 2025-12-30 20:31:35 Functions: 100.0 % 8 8

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2025 Vinnie Falco (vinnie.falco@gmail.com)
       3              : //
       4              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       5              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       6              : //
       7              : // Official repository: https://github.com/cppalliance/capy
       8              : //
       9              : 
      10              : #ifndef BOOST_CAPY_BCRYPT_RESULT_HPP
      11              : #define BOOST_CAPY_BCRYPT_RESULT_HPP
      12              : 
      13              : #include <boost/capy/detail/config.hpp>
      14              : #include <boost/capy/bcrypt/version.hpp>
      15              : #include <boost/core/detail/string_view.hpp>
      16              : #include <boost/system/error_code.hpp>
      17              : #include <cstddef>
      18              : 
      19              : namespace boost {
      20              : namespace capy {
      21              : namespace bcrypt {
      22              : 
      23              : /** Fixed-size buffer for bcrypt hash output.
      24              : 
      25              :     Stores a bcrypt hash string (max 60 chars) in an
      26              :     inline buffer with no heap allocation.
      27              : 
      28              :     @par Example
      29              :     @code
      30              :     bcrypt::result r = bcrypt::hash("password", 10);
      31              :     core::string_view sv = r;  // or r.str()
      32              :     std::cout << r.c_str();    // null-terminated
      33              :     @endcode
      34              : */
      35              : class result
      36              : {
      37              :     char buf_[61];          // 60 chars + null terminator
      38              :     unsigned char size_;
      39              : 
      40              : public:
      41              :     /** Default constructor.
      42              : 
      43              :         Constructs an empty result.
      44              :     */
      45           22 :     result() noexcept
      46           22 :         : size_(0)
      47              :     {
      48           22 :         buf_[0] = '\0';
      49           22 :     }
      50              : 
      51              :     /** Return the hash as a string_view.
      52              :     */
      53              :     core::string_view
      54           23 :     str() const noexcept
      55              :     {
      56           23 :         return core::string_view(buf_, size_);
      57              :     }
      58              : 
      59              :     /** Implicit conversion to string_view.
      60              :     */
      61              :     operator core::string_view() const noexcept
      62              :     {
      63              :         return str();
      64              :     }
      65              : 
      66              :     /** Return null-terminated C string.
      67              :     */
      68              :     char const*
      69            1 :     c_str() const noexcept
      70              :     {
      71            1 :         return buf_;
      72              :     }
      73              : 
      74              :     /** Return pointer to data.
      75              :     */
      76              :     char const*
      77              :     data() const noexcept
      78              :     {
      79              :         return buf_;
      80              :     }
      81              : 
      82              :     /** Return size in bytes (excludes null terminator).
      83              :     */
      84              :     std::size_t
      85            5 :     size() const noexcept
      86              :     {
      87            5 :         return size_;
      88              :     }
      89              : 
      90              :     /** Check if result is empty.
      91              :     */
      92              :     bool
      93            4 :     empty() const noexcept
      94              :     {
      95            4 :         return size_ == 0;
      96              :     }
      97              : 
      98              :     /** Check if result contains valid data.
      99              :     */
     100              :     explicit
     101            2 :     operator bool() const noexcept
     102              :     {
     103            2 :         return size_ != 0;
     104              :     }
     105              : 
     106              : private:
     107              :     friend BOOST_CAPY_DECL result gen_salt(unsigned, version);
     108              :     friend BOOST_CAPY_DECL result hash(core::string_view, unsigned, version);
     109              :     friend BOOST_CAPY_DECL result hash(core::string_view, core::string_view, system::error_code&);
     110              : 
     111           19 :     char* buf() noexcept { return buf_; }
     112           19 :     void set_size(unsigned char n) noexcept
     113              :     {
     114           19 :         size_ = n;
     115           19 :         buf_[n] = '\0';
     116           19 :     }
     117              : };
     118              : 
     119              : } // bcrypt
     120              : } // capy
     121              : } // boost
     122              : 
     123              : #endif
     124              : 
        

Generated by: LCOV version 2.1