_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EEC2Ev:
   63|  98.0k|      AlignmentBuffer() : m_position(0) {}
_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE5clearEv:
   72|   167k|      void clear() {
   73|   167k|         clear_mem(m_buffer.data(), m_buffer.size());
   74|   167k|         m_position = 0;
   75|   167k|      }
_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EED2Ev:
   65|  98.0k|      ~AlignmentBuffer() { secure_scrub_memory(m_buffer.data(), m_buffer.size()); }
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EEC2Ev:
   63|   183k|      AlignmentBuffer() : m_position(0) {}
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE5clearEv:
   72|  1.98M|      void clear() {
   73|  1.98M|         clear_mem(m_buffer.data(), m_buffer.size());
   74|  1.98M|         m_position = 0;
   75|  1.98M|      }
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EED2Ev:
   65|   183k|      ~AlignmentBuffer() { secure_scrub_memory(m_buffer.data(), m_buffer.size()); }
_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE21handle_unaligned_dataERNS_12BufferSlicerE:
  167|   396k|      [[nodiscard]] std::optional<std::span<const T>> handle_unaligned_data(BufferSlicer& slicer) {
  168|       |         // When the final block is to be deferred, we would need to store and
  169|       |         // hold a buffer that contains exactly one block until more data is
  170|       |         // passed or it is explicitly consumed.
  171|   396k|         const size_t defer = (defers_final_block()) ? 1 : 0;
  ------------------
  |  Branch (171:31): [True: 0, False: 396k]
  ------------------
  172|       |
  173|   396k|         if(in_alignment() && slicer.remaining() >= m_buffer.size() + defer) {
  ------------------
  |  Branch (173:13): [True: 160k, False: 235k]
  |  Branch (173:31): [True: 182, False: 160k]
  ------------------
  174|       |            // We are currently in alignment and the passed-in data source
  175|       |            // contains enough data to benefit from aligned processing.
  176|       |            // Therefore, we don't copy anything into the intermittent buffer.
  177|    182|            return std::nullopt;
  178|    182|         }
  179|       |
  180|       |         // Fill the buffer with as much input data as needed to reach alignment
  181|       |         // or until the input source is depleted.
  182|   396k|         const auto elements_to_consume = std::min(m_buffer.size() - m_position, slicer.remaining());
  183|   396k|         append(slicer.take(elements_to_consume));
  184|       |
  185|       |         // If we collected enough data, we push out one full block. When
  186|       |         // deferring the final block is enabled, we additionally check that
  187|       |         // more input data is available to continue processing a consecutive
  188|       |         // block.
  189|   396k|         if(ready_to_consume() && (!defers_final_block() || !slicer.empty())) {
  ------------------
  |  Branch (189:13): [True: 91.6k, False: 304k]
  |  Branch (189:36): [True: 91.6k, False: 0]
  |  Branch (189:61): [True: 0, False: 0]
  ------------------
  190|  91.6k|            return consume();
  191|   304k|         } else {
  192|   304k|            return std::nullopt;
  193|   304k|         }
  194|   396k|      }
_ZNK5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE18defers_final_blockEv:
  234|   580k|      constexpr bool defers_final_block() const {
  235|   580k|         return FINAL_BLOCK_STRATEGY == AlignmentBufferFinalBlock::must_be_deferred;
  236|   580k|      }
_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE6appendENSt3__14spanIKhLm18446744073709551615EEE:
   91|   465k|      void append(std::span<const T> elements) {
   92|   465k|         BOTAN_ASSERT_NOMSG(elements.size() <= elements_until_alignment());
  ------------------
  |  |   60|   465k|   do {                                                                     \
  |  |   61|   465k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 465k]
  |  |  ------------------
  |  |   62|   465k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|   465k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 465k]
  |  |  ------------------
  ------------------
   93|   465k|         std::copy(elements.begin(), elements.end(), m_buffer.begin() + m_position);
   94|   465k|         m_position += elements.size();
   95|   465k|      }
_ZNK5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE24elements_until_alignmentEv:
  222|   676k|      size_t elements_until_alignment() const { return m_buffer.size() - m_position; }
_ZNK5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE16ready_to_consumeEv:
  232|   706k|      bool ready_to_consume() const { return m_position == m_buffer.size(); }
_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE7consumeEv:
  201|   166k|      [[nodiscard]] std::span<const T> consume() {
  202|   166k|         BOTAN_ASSERT_NOMSG(ready_to_consume());
  ------------------
  |  |   60|   166k|   do {                                                                     \
  |  |   61|   166k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 166k]
  |  |  ------------------
  |  |   62|   166k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|   166k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 166k]
  |  |  ------------------
  ------------------
  203|   166k|         m_position = 0;
  204|   166k|         return m_buffer;
  205|   166k|      }
_ZNK5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE12in_alignmentEv:
  227|   885k|      bool in_alignment() const { return m_position == 0; }
_ZNK5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE23aligned_data_to_processERNS_12BufferSlicerE:
  127|  91.8k|      [[nodiscard]] std::tuple<std::span<const uint8_t>, size_t> aligned_data_to_process(BufferSlicer& slicer) const {
  128|  91.8k|         BOTAN_ASSERT_NOMSG(in_alignment());
  ------------------
  |  |   60|  91.8k|   do {                                                                     \
  |  |   61|  91.8k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 91.8k]
  |  |  ------------------
  |  |   62|  91.8k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  91.8k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 91.8k]
  |  |  ------------------
  ------------------
  129|       |
  130|       |         // When the final block is to be deferred, the last block must not be
  131|       |         // selected for processing if there is no (unaligned) extra input data.
  132|  91.8k|         const size_t defer = (defers_final_block()) ? 1 : 0;
  ------------------
  |  Branch (132:31): [True: 0, False: 91.8k]
  ------------------
  133|  91.8k|         const size_t full_blocks_to_process = (slicer.remaining() - defer) / m_buffer.size();
  134|  91.8k|         return {slicer.take(full_blocks_to_process * m_buffer.size()), full_blocks_to_process};
  135|  91.8k|      }
_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE18fill_up_with_zerosEv:
   80|  74.4k|      void fill_up_with_zeros() {
   81|  74.4k|         if(!ready_to_consume()) {
  ------------------
  |  Branch (81:13): [True: 73.2k, False: 1.25k]
  ------------------
   82|  73.2k|            clear_mem(&m_buffer[m_position], elements_until_alignment());
   83|  73.2k|            m_position = m_buffer.size();
   84|  73.2k|         }
   85|  74.4k|      }
_ZN5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE20directly_modify_lastEm:
  114|  69.0k|      std::span<T> directly_modify_last(size_t elements) {
  115|  69.0k|         BOTAN_ASSERT_NOMSG(size() >= elements);
  ------------------
  |  |   60|  69.0k|   do {                                                                     \
  |  |   61|  69.0k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 69.0k]
  |  |  ------------------
  |  |   62|  69.0k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  69.0k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 69.0k]
  |  |  ------------------
  ------------------
  116|  69.0k|         return std::span(m_buffer).last(elements);
  117|  69.0k|      }
_ZNK5Botan15AlignmentBufferIhLm64ELNS_25AlignmentBufferFinalBlockE0EE4sizeEv:
  218|  69.0k|      constexpr size_t size() const { return m_buffer.size(); }
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE21handle_unaligned_dataERNS_12BufferSlicerE:
  167|  3.87M|      [[nodiscard]] std::optional<std::span<const T>> handle_unaligned_data(BufferSlicer& slicer) {
  168|       |         // When the final block is to be deferred, we would need to store and
  169|       |         // hold a buffer that contains exactly one block until more data is
  170|       |         // passed or it is explicitly consumed.
  171|  3.87M|         const size_t defer = (defers_final_block()) ? 1 : 0;
  ------------------
  |  Branch (171:31): [True: 0, False: 3.87M]
  ------------------
  172|       |
  173|  3.87M|         if(in_alignment() && slicer.remaining() >= m_buffer.size() + defer) {
  ------------------
  |  Branch (173:13): [True: 3.18M, False: 692k]
  |  Branch (173:31): [True: 1.73M, False: 1.44M]
  ------------------
  174|       |            // We are currently in alignment and the passed-in data source
  175|       |            // contains enough data to benefit from aligned processing.
  176|       |            // Therefore, we don't copy anything into the intermittent buffer.
  177|  1.73M|            return std::nullopt;
  178|  1.73M|         }
  179|       |
  180|       |         // Fill the buffer with as much input data as needed to reach alignment
  181|       |         // or until the input source is depleted.
  182|  2.14M|         const auto elements_to_consume = std::min(m_buffer.size() - m_position, slicer.remaining());
  183|  2.14M|         append(slicer.take(elements_to_consume));
  184|       |
  185|       |         // If we collected enough data, we push out one full block. When
  186|       |         // deferring the final block is enabled, we additionally check that
  187|       |         // more input data is available to continue processing a consecutive
  188|       |         // block.
  189|  2.14M|         if(ready_to_consume() && (!defers_final_block() || !slicer.empty())) {
  ------------------
  |  Branch (189:13): [True: 49.6k, False: 2.09M]
  |  Branch (189:36): [True: 49.6k, False: 0]
  |  Branch (189:61): [True: 0, False: 0]
  ------------------
  190|  49.6k|            return consume();
  191|  2.09M|         } else {
  192|  2.09M|            return std::nullopt;
  193|  2.09M|         }
  194|  2.14M|      }
_ZNK5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE18defers_final_blockEv:
  234|  5.70M|      constexpr bool defers_final_block() const {
  235|  5.70M|         return FINAL_BLOCK_STRATEGY == AlignmentBufferFinalBlock::must_be_deferred;
  236|  5.70M|      }
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE6appendENSt3__14spanIKhLm18446744073709551615EEE:
   91|  3.55M|      void append(std::span<const T> elements) {
   92|  3.55M|         BOTAN_ASSERT_NOMSG(elements.size() <= elements_until_alignment());
  ------------------
  |  |   60|  3.55M|   do {                                                                     \
  |  |   61|  3.55M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 3.55M]
  |  |  ------------------
  |  |   62|  3.55M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  3.55M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 3.55M]
  |  |  ------------------
  ------------------
   93|  3.55M|         std::copy(elements.begin(), elements.end(), m_buffer.begin() + m_position);
   94|  3.55M|         m_position += elements.size();
   95|  3.55M|      }
_ZNK5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE24elements_until_alignmentEv:
  222|  7.80M|      size_t elements_until_alignment() const { return m_buffer.size() - m_position; }
_ZNK5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE16ready_to_consumeEv:
  232|  6.44M|      bool ready_to_consume() const { return m_position == m_buffer.size(); }
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE7consumeEv:
  201|  1.46M|      [[nodiscard]] std::span<const T> consume() {
  202|  1.46M|         BOTAN_ASSERT_NOMSG(ready_to_consume());
  ------------------
  |  |   60|  1.46M|   do {                                                                     \
  |  |   61|  1.46M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 1.46M]
  |  |  ------------------
  |  |   62|  1.46M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  1.46M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 1.46M]
  |  |  ------------------
  ------------------
  203|  1.46M|         m_position = 0;
  204|  1.46M|         return m_buffer;
  205|  1.46M|      }
_ZNK5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE12in_alignmentEv:
  227|  9.53M|      bool in_alignment() const { return m_position == 0; }
_ZNK5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE23aligned_data_to_processERNS_12BufferSlicerE:
  127|  1.78M|      [[nodiscard]] std::tuple<std::span<const uint8_t>, size_t> aligned_data_to_process(BufferSlicer& slicer) const {
  128|  1.78M|         BOTAN_ASSERT_NOMSG(in_alignment());
  ------------------
  |  |   60|  1.78M|   do {                                                                     \
  |  |   61|  1.78M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 1.78M]
  |  |  ------------------
  |  |   62|  1.78M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  1.78M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 1.78M]
  |  |  ------------------
  ------------------
  129|       |
  130|       |         // When the final block is to be deferred, the last block must not be
  131|       |         // selected for processing if there is no (unaligned) extra input data.
  132|  1.78M|         const size_t defer = (defers_final_block()) ? 1 : 0;
  ------------------
  |  Branch (132:31): [True: 0, False: 1.78M]
  ------------------
  133|  1.78M|         const size_t full_blocks_to_process = (slicer.remaining() - defer) / m_buffer.size();
  134|  1.78M|         return {slicer.take(full_blocks_to_process * m_buffer.size()), full_blocks_to_process};
  135|  1.78M|      }
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE18fill_up_with_zerosEv:
   80|  1.41M|      void fill_up_with_zeros() {
   81|  1.41M|         if(!ready_to_consume()) {
  ------------------
  |  Branch (81:13): [True: 1.41M, False: 88]
  ------------------
   82|  1.41M|            clear_mem(&m_buffer[m_position], elements_until_alignment());
   83|  1.41M|            m_position = m_buffer.size();
   84|  1.41M|         }
   85|  1.41M|      }
_ZN5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE20directly_modify_lastEm:
  114|  1.41M|      std::span<T> directly_modify_last(size_t elements) {
  115|  1.41M|         BOTAN_ASSERT_NOMSG(size() >= elements);
  ------------------
  |  |   60|  1.41M|   do {                                                                     \
  |  |   61|  1.41M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 1.41M]
  |  |  ------------------
  |  |   62|  1.41M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  1.41M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 1.41M]
  |  |  ------------------
  ------------------
  116|  1.41M|         return std::span(m_buffer).last(elements);
  117|  1.41M|      }
_ZNK5Botan15AlignmentBufferIhLm128ELNS_25AlignmentBufferFinalBlockE0EE4sizeEv:
  218|  1.41M|      constexpr size_t size() const { return m_buffer.size(); }

_ZN5Botan14expand_top_bitIhEET_S1_Qsr3std11is_integralIS1_EE5value:
   25|   123M|{
   26|   123M|   return static_cast<T>(0) - (a >> (sizeof(T) * 8 - 1));
   27|   123M|}
_ZN5Botan14expand_top_bitImEET_S1_Qsr3std11is_integralIS1_EE5value:
   25|  2.65G|{
   26|  2.65G|   return static_cast<T>(0) - (a >> (sizeof(T) * 8 - 1));
   27|  2.65G|}
_ZN5Botan10ct_is_zeroImEET_S1_Qsr3std11is_integralIS1_EE5value:
   35|  1.96G|{
   36|  1.96G|   return expand_top_bit<T>(~x & (x - 1));
   37|  1.96G|}
_ZN5Botan6chooseImEET_S1_S1_S1_:
  180|  7.72G|inline constexpr T choose(T mask, T a, T b) {
  181|       |   //return (mask & a) | (~mask & b);
  182|  7.72G|   return (b ^ (mask & (a ^ b)));
  183|  7.72G|}
_ZN5Botan10ct_is_zeroIhEET_S1_Qsr3std11is_integralIS1_EE5value:
   35|   670k|{
   36|   670k|   return expand_top_bit<T>(~x & (x - 1));
   37|   670k|}
_ZN5Botan6chooseIhEET_S1_S1_S1_:
  180|   123M|inline constexpr T choose(T mask, T a, T b) {
  181|       |   //return (mask & a) | (~mask & b);
  182|   123M|   return (b ^ (mask & (a ^ b)));
  183|   123M|}
_ZN5Botan6chooseIjEET_S1_S1_S1_:
  180|  28.8M|inline constexpr T choose(T mask, T a, T b) {
  181|       |   //return (mask & a) | (~mask & b);
  182|  28.8M|   return (b ^ (mask & (a ^ b)));
  183|  28.8M|}
_ZN5Botan8majorityIjEET_S1_S1_S1_:
  186|  13.6M|inline constexpr T majority(T a, T b, T c) {
  187|       |   /*
  188|       |   Considering each bit of a, b, c individually
  189|       |
  190|       |   If a xor b is set, then c is the deciding vote.
  191|       |
  192|       |   If a xor b is not set then either a and b are both set or both unset.
  193|       |   In either case the value of c doesn't matter, and examining b (or a)
  194|       |   allows us to determine which case we are in.
  195|       |   */
  196|  13.6M|   return choose(a ^ b, c, b);
  197|  13.6M|}
_ZN5Botan8majorityImEET_S1_S1_S1_:
  186|   257M|inline constexpr T majority(T a, T b, T c) {
  187|       |   /*
  188|       |   Considering each bit of a, b, c individually
  189|       |
  190|       |   If a xor b is set, then c is the deciding vote.
  191|       |
  192|       |   If a xor b is not set then either a and b are both set or both unset.
  193|       |   In either case the value of c doesn't matter, and examining b (or a)
  194|       |   allows us to determine which case we are in.
  195|       |   */
  196|   257M|   return choose(a ^ b, c, b);
  197|   257M|}
_ZN5Botan8high_bitImEEmT_Qsr3std11is_unsignedIS1_EE5value:
   60|   377k|{
   61|   377k|   size_t hb = 0;
   62|       |
   63|  2.64M|   for(size_t s = 8 * sizeof(T) / 2; s > 0; s /= 2) {
  ------------------
  |  Branch (63:38): [True: 2.26M, False: 377k]
  ------------------
   64|  2.26M|      const size_t z = s * ((~ct_is_zero(n >> s)) & 1);
   65|  2.26M|      hb += z;
   66|  2.26M|      n >>= z;
   67|  2.26M|   }
   68|       |
   69|   377k|   hb += n;
   70|       |
   71|   377k|   return hb;
   72|   377k|}
_ZN5Botan3ctzImEEmT_Qsr3std11is_integralIS1_EE5value:
  104|  3.49k|{
  105|       |   /*
  106|       |   * If n == 0 then this function will compute 8*sizeof(T)-1, so
  107|       |   * initialize lb to 1 if n == 0 to produce the expected result.
  108|       |   */
  109|  3.49k|   size_t lb = ct_is_zero(n) & 1;
  110|       |
  111|  24.4k|   for(size_t s = 8 * sizeof(T) / 2; s > 0; s /= 2) {
  ------------------
  |  Branch (111:38): [True: 20.9k, False: 3.49k]
  ------------------
  112|  20.9k|      const T mask = (static_cast<T>(1) << s) - 1;
  113|  20.9k|      const size_t z = s * (ct_is_zero(n & mask) & 1);
  114|  20.9k|      lb += z;
  115|  20.9k|      n >>= z;
  116|  20.9k|   }
  117|       |
  118|  3.49k|   return lb;
  119|  3.49k|}

_ZN5Botan13reverse_bytesEj:
   35|  3.91M|inline constexpr uint32_t reverse_bytes(uint32_t x) {
   36|  3.91M|#if BOTAN_COMPILER_HAS_BUILTIN(__builtin_bswap32)
   37|  3.91M|   return __builtin_bswap32(x);
   38|       |#else
   39|       |   // MSVC at least recognizes this as a bswap
   40|       |   return ((x & 0x000000FF) << 24) | ((x & 0x0000FF00) << 8) | ((x & 0x00FF0000) >> 8) | ((x & 0xFF000000) >> 24);
   41|       |#endif
   42|  3.91M|}
_ZN5Botan13reverse_bytesEm:
   50|  66.6M|inline constexpr uint64_t reverse_bytes(uint64_t x) {
   51|  66.6M|#if BOTAN_COMPILER_HAS_BUILTIN(__builtin_bswap64)
   52|  66.6M|   return __builtin_bswap64(x);
   53|       |#else
   54|       |   uint32_t hi = static_cast<uint32_t>(x >> 32);
   55|       |   uint32_t lo = static_cast<uint32_t>(x);
   56|       |
   57|       |   hi = reverse_bytes(hi);
   58|       |   lo = reverse_bytes(lo);
   59|       |
   60|       |   return (static_cast<uint64_t>(lo) << 32) | hi;
   61|       |#endif
   62|  66.6M|}

_ZN5Botan5CRC245clearEv:
   31|   128k|      void clear() override { m_crc = 0XCE04B7L; }
_ZNK5Botan5CRC2413output_lengthEv:
   25|  35.7k|      size_t output_length() const override { return 3; }
_ZN5Botan5CRC24D2Ev:
   35|  46.1k|      ~CRC24() override { clear(); }
_ZN5Botan5CRC24C2Ev:
   33|  46.1k|      CRC24() { clear(); }

_ZN5Botan2CT4MaskIhEC2Eh:
  286|   211M|      constexpr Mask(T m) : m_mask(m) {}
_ZN5Botan2CT4MaskIhE15is_within_rangeEhhh:
  156|  87.7M|      static constexpr Mask<T> is_within_range(T v, T l, T u) {
  157|       |         //return Mask<T>::is_gte(v, l) & Mask<T>::is_lte(v, u);
  158|       |
  159|  87.7M|         const T v_lt_l = v ^ ((v ^ l) | ((v - l) ^ v));
  160|  87.7M|         const T v_gt_u = u ^ ((u ^ v) | ((u - v) ^ u));
  161|  87.7M|         const T either = v_lt_l | v_gt_u;
  162|  87.7M|         return ~Mask<T>(expand_top_bit(either));
  163|  87.7M|      }
_ZNK5Botan2CT4MaskIhEcoEv:
  219|  88.3M|      constexpr Mask<T> operator~() const { return Mask<T>(~value()); }
_ZNK5Botan2CT4MaskIhE5valueEv:
  283|   211M|      constexpr T value() const { return m_mask; }
_ZN5Botan2CT4MaskIhE9is_any_ofEhSt16initializer_listIhE:
  165|  29.2M|      static constexpr Mask<T> is_any_of(T v, std::initializer_list<T> accepted) {
  166|  29.2M|         T accept = 0;
  167|       |
  168|   116M|         for(auto a : accepted) {
  ------------------
  |  Branch (168:21): [True: 116M, False: 29.2M]
  ------------------
  169|   116M|            const T diff = a ^ v;
  170|   116M|            const T eq_zero = ~diff & (diff - 1);
  171|   116M|            accept |= eq_zero;
  172|   116M|         }
  173|       |
  174|  29.2M|         return Mask<T>(expand_top_bit(accept));
  175|  29.2M|      }
_ZNK5Botan2CT4MaskIhE7as_boolEv:
  278|  25.6k|      constexpr bool as_bool() const { return unpoisoned_value() != 0; }
_ZNK5Botan2CT4MaskIhE16unpoisoned_valueEv:
  269|  25.6k|      constexpr T unpoisoned_value() const {
  270|  25.6k|         T r = value();
  271|  25.6k|         CT::unpoison(r);
  272|  25.6k|         return r;
  273|  25.6k|      }
_ZN5Botan2CT8unpoisonIhEEvRT_:
   68|  25.6k|constexpr inline void unpoison(T& p) {
   69|       |#if defined(BOTAN_HAS_VALGRIND)
   70|       |   if(!std::is_constant_evaluated()) {
   71|       |      VALGRIND_MAKE_MEM_DEFINED(&p, sizeof(T));
   72|       |   }
   73|       |#endif
   74|       |
   75|  25.6k|   BOTAN_UNUSED(p);
  ------------------
  |  |  118|  25.6k|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
   76|  25.6k|}
_ZN5Botan2CT4MaskImE7is_zeroEm:
  129|  1.38G|      static constexpr Mask<T> is_zero(T x) { return Mask<T>(ct_is_zero<T>(x)); }
_ZNK5Botan2CT4MaskImE5valueEv:
  283|  9.30G|      constexpr T value() const { return m_mask; }
_ZNK5Botan2CT4MaskImEcoEv:
  219|   774M|      constexpr Mask<T> operator~() const { return Mask<T>(~value()); }
_ZN5Botan2CT4MaskImE6expandEm:
  115|   725M|      static constexpr Mask<T> expand(T v) { return ~Mask<T>::is_zero(v); }
_ZNK5Botan2CT4MaskImE6selectEmm:
  234|  7.20G|      constexpr T select(T x, T y) const { return choose(value(), x, y); }
_ZN5Botan2CT16conditional_swapImEEvbRT_S3_:
  311|   942k|constexpr inline void conditional_swap(bool cnd, T& x, T& y) {
  312|   942k|   const auto swap = CT::Mask<T>::expand(cnd);
  313|       |
  314|   942k|   T t0 = swap.select(y, x);
  315|   942k|   T t1 = swap.select(x, y);
  316|   942k|   x = t0;
  317|   942k|   y = t1;
  318|   942k|}
_ZN5Botan2CT4MaskIhE5is_ltEhh:
  139|  5.95M|      static constexpr Mask<T> is_lt(T x, T y) { return Mask<T>(expand_top_bit<T>(x ^ ((x ^ y) | ((x - y) ^ x)))); }
_ZN5Botan2CT4MaskIhE7is_zeroEh:
  129|   670k|      static constexpr Mask<T> is_zero(T x) { return Mask<T>(ct_is_zero<T>(x)); }
_ZNK5Botan2CT4MaskIhE6selectEhh:
  234|   123M|      constexpr T select(T x, T y) const { return choose(value(), x, y); }
_ZN5Botan2CT8is_equalIhEENS0_4MaskIT_EEPKS3_S6_m:
  345|  25.6k|constexpr inline CT::Mask<T> is_equal(const T x[], const T y[], size_t len) {
  346|  25.6k|   if(std::is_constant_evaluated()) {
  ------------------
  |  Branch (346:7): [Folded, False: 25.6k]
  ------------------
  347|      0|      T difference = 0;
  348|       |
  349|      0|      for(size_t i = 0; i != len; ++i) {
  ------------------
  |  Branch (349:25): [True: 0, False: 0]
  ------------------
  350|      0|         difference = difference | (x[i] ^ y[i]);
  351|      0|      }
  352|       |
  353|      0|      return CT::Mask<T>::is_zero(difference);
  354|  25.6k|   } else {
  355|  25.6k|      volatile T difference = 0;
  356|       |
  357|   847k|      for(size_t i = 0; i != len; ++i) {
  ------------------
  |  Branch (357:25): [True: 821k, False: 25.6k]
  ------------------
  358|   821k|         difference = difference | (x[i] ^ y[i]);
  359|   821k|      }
  360|       |
  361|  25.6k|      return CT::Mask<T>::is_zero(difference);
  362|  25.6k|   }
  363|  25.6k|}
_ZN5Botan2CT4MaskImE6is_lteEmm:
  149|  49.3M|      static constexpr Mask<T> is_lte(T x, T y) { return ~Mask<T>::is_gt(x, y); }
_ZN5Botan2CT4MaskImE5is_gtEmm:
  144|  49.3M|      static constexpr Mask<T> is_gt(T x, T y) { return Mask<T>::is_lt(y, x); }
_ZN5Botan2CT4MaskImEC2Em:
  286|  3.48G|      constexpr Mask(T m) : m_mask(m) {}
_ZN5Botan2CT4MaskImE5is_ltEmm:
  139|   685M|      static constexpr Mask<T> is_lt(T x, T y) { return Mask<T>(expand_top_bit<T>(x ^ ((x ^ y) | ((x - y) ^ x)))); }
_ZNK5Botan2CT4MaskImE13if_set_returnEm:
  224|  1.21G|      constexpr T if_set_return(T x) const { return m_mask & x; }
_ZN5Botan2CT4MaskImE8is_equalEmm:
  134|   643M|      static constexpr Mask<T> is_equal(T x, T y) { return Mask<T>::is_zero(static_cast<T>(x ^ y)); }
_ZN5Botan2CT8unpoisonImEEvRT_:
   68|  46.6M|constexpr inline void unpoison(T& p) {
   69|       |#if defined(BOTAN_HAS_VALGRIND)
   70|       |   if(!std::is_constant_evaluated()) {
   71|       |      VALGRIND_MAKE_MEM_DEFINED(&p, sizeof(T));
   72|       |   }
   73|       |#endif
   74|       |
   75|  46.6M|   BOTAN_UNUSED(p);
  ------------------
  |  |  118|  46.6M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
   76|  46.6M|}
_ZN5Botan2CT20conditional_copy_memImEENS0_4MaskIT_EES3_PS3_PKS3_S7_m:
  298|  11.4M|constexpr inline Mask<T> conditional_copy_mem(T cnd, T* to, const T* from0, const T* from1, size_t elems) {
  299|  11.4M|   const auto mask = CT::Mask<T>::expand(cnd);
  300|  11.4M|   return CT::conditional_copy_mem(mask, to, from0, from1, elems);
  301|  11.4M|}
_ZN5Botan2CT20conditional_copy_memImEENS0_4MaskIT_EES4_PS3_PKS3_S7_m:
  292|  11.4M|constexpr inline Mask<T> conditional_copy_mem(Mask<T> mask, T* to, const T* from0, const T* from1, size_t elems) {
  293|  11.4M|   mask.select_n(to, from0, from1, elems);
  294|  11.4M|   return mask;
  295|  11.4M|}
_ZNK5Botan2CT4MaskImE8select_nEPmPKmS5_m:
  251|   111M|      constexpr void select_n(T output[], const T x[], const T y[], size_t len) const {
  252|   949M|         for(size_t i = 0; i != len; ++i) {
  ------------------
  |  Branch (252:28): [True: 838M, False: 111M]
  ------------------
  253|   838M|            output[i] = this->select(x[i], y[i]);
  254|   838M|         }
  255|   111M|      }
_ZNK5Botan2CT4MaskImE11select_maskES2_S2_:
  245|   579M|      Mask<T> select_mask(Mask<T> x, Mask<T> y) const { return Mask<T>(select(x.value(), y.value())); }
_ZN5Botan2CT4MaskImEoRES2_:
  196|  54.0k|      Mask<T>& operator|=(Mask<T> o) {
  197|  54.0k|         m_mask |= o.value();
  198|  54.0k|         return (*this);
  199|  54.0k|      }
_ZN5Botan2CT4MaskImEaNES2_:
  180|   513k|      Mask<T>& operator&=(Mask<T> o) {
  181|   513k|         m_mask &= o.value();
  182|   513k|         return (*this);
  183|   513k|      }
_ZN5Botan2CT20conditional_swap_ptrIPKmEEvbRT_S5_:
  321|   471k|constexpr inline void conditional_swap_ptr(bool cnd, T& x, T& y) {
  322|   471k|   uintptr_t xp = reinterpret_cast<uintptr_t>(x);
  323|   471k|   uintptr_t yp = reinterpret_cast<uintptr_t>(y);
  324|       |
  325|   471k|   conditional_swap<uintptr_t>(cnd, xp, yp);
  326|       |
  327|   471k|   x = reinterpret_cast<T>(xp);
  328|   471k|   y = reinterpret_cast<T>(yp);
  329|   471k|}
_ZNK5Botan2CT4MaskImE7as_boolEv:
  278|  6.60M|      constexpr bool as_bool() const { return unpoisoned_value() != 0; }
_ZNK5Botan2CT4MaskImE16unpoisoned_valueEv:
  269|  6.60M|      constexpr T unpoisoned_value() const {
  270|  6.60M|         T r = value();
  271|  6.60M|         CT::unpoison(r);
  272|  6.60M|         return r;
  273|  6.60M|      }
_ZN5Botan2CT8unpoisonIKmEEvRT_:
   68|   377k|constexpr inline void unpoison(T& p) {
   69|       |#if defined(BOTAN_HAS_VALGRIND)
   70|       |   if(!std::is_constant_evaluated()) {
   71|       |      VALGRIND_MAKE_MEM_DEFINED(&p, sizeof(T));
   72|       |   }
   73|       |#endif
   74|       |
   75|   377k|   BOTAN_UNUSED(p);
  ------------------
  |  |  118|   377k|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
   76|   377k|}
_ZN5Botan2CT4MaskIhE6expandEh:
  115|   644k|      static constexpr Mask<T> expand(T v) { return ~Mask<T>::is_zero(v); }
_ZN5Botan2CTorENS0_4MaskImEES2_:
  214|  28.3M|      friend Mask<T> operator|(Mask<T> x, Mask<T> y) { return Mask<T>(x.value() | y.value()); }
_ZN5Botan2CTeoENS0_4MaskImEES2_:
  209|   272k|      friend Mask<T> operator^(Mask<T> x, Mask<T> y) { return Mask<T>(x.value() ^ y.value()); }
_ZN5Botan2CT22conditional_assign_memImEENS0_4MaskIT_EES3_PS3_PKS3_m:
  304|  31.6M|constexpr inline Mask<T> conditional_assign_mem(T cnd, T* sink, const T* src, size_t elems) {
  305|  31.6M|   const auto mask = CT::Mask<T>::expand(cnd);
  306|  31.6M|   mask.select_n(sink, src, sink, elems);
  307|  31.6M|   return mask;
  308|  31.6M|}
_ZN5Botan2CT4MaskImE3setEv:
  105|  55.0k|      static constexpr Mask<T> set() { return Mask<T>(static_cast<T>(~0)); }
_ZN5Botan2CT6poisonImEEvPKT_m:
   46|  55.0k|inline void poison(const T* p, size_t n) {
   47|       |#if defined(BOTAN_HAS_VALGRIND)
   48|       |   if(!std::is_constant_evaluated()) {
   49|       |      VALGRIND_MAKE_MEM_UNDEFINED(p, n * sizeof(T));
   50|       |   }
   51|       |#endif
   52|       |
   53|  55.0k|   BOTAN_UNUSED(p, n);
  ------------------
  |  |  118|  55.0k|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
   54|  55.0k|}
_ZN5Botan2CT4MaskImE15if_set_zero_outEPmm:
  260|  55.0k|      constexpr void if_set_zero_out(T buf[], size_t elems) {
  261|   336k|         for(size_t i = 0; i != elems; ++i) {
  ------------------
  |  Branch (261:28): [True: 281k, False: 55.0k]
  ------------------
  262|   281k|            buf[i] = this->if_not_set_return(buf[i]);
  263|   281k|         }
  264|  55.0k|      }
_ZNK5Botan2CT4MaskImE17if_not_set_returnEm:
  229|   284k|      constexpr T if_not_set_return(T x) const { return ~m_mask & x; }
_ZN5Botan2CT8unpoisonImEEvPKT_m:
   57|  55.0k|constexpr inline void unpoison(const T* p, size_t n) {
   58|       |#if defined(BOTAN_HAS_VALGRIND)
   59|       |   if(!std::is_constant_evaluated()) {
   60|       |      VALGRIND_MAKE_MEM_DEFINED(p, n * sizeof(T));
   61|       |   }
   62|       |#endif
   63|       |
   64|  55.0k|   BOTAN_UNUSED(p, n);
  ------------------
  |  |  118|  55.0k|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
   65|  55.0k|}
_ZN5Botan2CT8unpoisonIlEEvRT_:
   68|   126M|constexpr inline void unpoison(T& p) {
   69|       |#if defined(BOTAN_HAS_VALGRIND)
   70|       |   if(!std::is_constant_evaluated()) {
   71|       |      VALGRIND_MAKE_MEM_DEFINED(&p, sizeof(T));
   72|       |   }
   73|       |#endif
   74|       |
   75|   126M|   BOTAN_UNUSED(p);
  ------------------
  |  |  118|   126M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
   76|   126M|}
_ZN5Botan2CTanENS0_4MaskImEES2_:
  204|  34.2M|      friend Mask<T> operator&(Mask<T> x, Mask<T> y) { return Mask<T>(x.value() & y.value()); }
_ZN5Botan2CT4MaskImE7clearedEv:
  110|    437|      static constexpr Mask<T> cleared() { return Mask<T>(0); }
_ZN5Botan2CT9all_zerosImEENS0_4MaskIT_EEPKS3_m:
  332|  11.7M|constexpr inline CT::Mask<T> all_zeros(const T elem[], size_t len) {
  333|  11.7M|   T sum = 0;
  334|  80.9M|   for(size_t i = 0; i != len; ++i) {
  ------------------
  |  Branch (334:22): [True: 69.2M, False: 11.7M]
  ------------------
  335|  69.2M|      sum |= elem[i];
  336|  69.2M|   }
  337|  11.7M|   return CT::Mask<T>::is_zero(sum);
  338|  11.7M|}

_ZN5Botan9ct_divideERKNS_6BigIntES2_:
   49|  34.5k|inline BigInt ct_divide(const BigInt& x, const BigInt& y) {
   50|  34.5k|   BigInt q, r;
   51|  34.5k|   ct_divide(x, y, q, r);
   52|  34.5k|   return q;
   53|  34.5k|}

_ZNK5Botan12DL_PublicKey5groupEv:
   29|  20.6k|      const DL_Group& group() const { return m_group; }
_ZNK5Botan12DL_PublicKey10public_keyEv:
   31|  6.67k|      const BigInt& public_key() const { return m_public_key; }

_ZN5Botan8FE_25519C2Ei:
   29|  59.5M|      FE_25519(int init = 0) {
   30|  59.5M|         if(init != 0 && init != 1) {
  ------------------
  |  Branch (30:13): [True: 77.2k, False: 59.5M]
  |  Branch (30:26): [True: 0, False: 77.2k]
  ------------------
   31|      0|            throw Invalid_Argument("Invalid FE_25519 initial value");
   32|      0|         }
   33|  59.5M|         clear_mem(m_fe, 10);
   34|  59.5M|         m_fe[0] = init;
   35|  59.5M|      }
_ZN5Botan8FE_25519D2Ev:
   24|   123M|      ~FE_25519() { secure_scrub_memory(m_fe, sizeof(m_fe)); }
_ZN5Botan8FE_25519C2ESt16initializer_listIiE:
   37|  1.56k|      FE_25519(std::initializer_list<int32_t> x) {
   38|  1.56k|         if(x.size() != 10) {
  ------------------
  |  Branch (38:13): [True: 0, False: 1.56k]
  ------------------
   39|      0|            throw Invalid_Argument("Invalid FE_25519 initializer list");
   40|      0|         }
   41|  1.56k|         copy_mem(m_fe, x.begin(), 10);
   42|  1.56k|      }
_ZN5Botan8FE_25519C2Ellllllllll:
   53|  64.3M|               int64_t h9) {
   54|  64.3M|         m_fe[0] = static_cast<int32_t>(h0);
   55|  64.3M|         m_fe[1] = static_cast<int32_t>(h1);
   56|  64.3M|         m_fe[2] = static_cast<int32_t>(h2);
   57|  64.3M|         m_fe[3] = static_cast<int32_t>(h3);
   58|  64.3M|         m_fe[4] = static_cast<int32_t>(h4);
   59|  64.3M|         m_fe[5] = static_cast<int32_t>(h5);
   60|  64.3M|         m_fe[6] = static_cast<int32_t>(h6);
   61|  64.3M|         m_fe[7] = static_cast<int32_t>(h7);
   62|  64.3M|         m_fe[8] = static_cast<int32_t>(h8);
   63|  64.3M|         m_fe[9] = static_cast<int32_t>(h9);
   64|  64.3M|      }
_ZNK5Botan8FE_255197is_zeroEv:
   75|  36.0k|      bool is_zero() const {
   76|  36.0k|         uint8_t s[32];
   77|  36.0k|         to_bytes(s);
   78|       |
   79|  36.0k|         uint8_t sum = 0;
   80|  1.18M|         for(size_t i = 0; i != 32; ++i) {
  ------------------
  |  Branch (80:28): [True: 1.15M, False: 36.0k]
  ------------------
   81|  1.15M|            sum |= s[i];
   82|  1.15M|         }
   83|       |
   84|  36.0k|         return (sum == 0);
   85|  36.0k|      }
_ZNK5Botan8FE_2551911is_negativeEv:
   91|  51.6k|      bool is_negative() const {
   92|       |         // TODO could avoid most of the to_bytes computation here
   93|  51.6k|         uint8_t s[32];
   94|  51.6k|         to_bytes(s);
   95|  51.6k|         return s[0] & 1;
   96|  51.6k|      }
_ZN5Botan8FE_255193addERKS0_S2_:
   98|  22.3M|      static FE_25519 add(const FE_25519& a, const FE_25519& b) {
   99|  22.3M|         FE_25519 z;
  100|   246M|         for(size_t i = 0; i != 10; ++i) {
  ------------------
  |  Branch (100:28): [True: 223M, False: 22.3M]
  ------------------
  101|   223M|            z[i] = a[i] + b[i];
  102|   223M|         }
  103|  22.3M|         return z;
  104|  22.3M|      }
_ZN5Botan8FE_255193subERKS0_S2_:
  106|  26.5M|      static FE_25519 sub(const FE_25519& a, const FE_25519& b) {
  107|  26.5M|         FE_25519 z;
  108|   292M|         for(size_t i = 0; i != 10; ++i) {
  ------------------
  |  Branch (108:28): [True: 265M, False: 26.5M]
  ------------------
  109|   265M|            z[i] = a[i] - b[i];
  110|   265M|         }
  111|  26.5M|         return z;
  112|  26.5M|      }
_ZN5Botan8FE_255196negateERKS0_:
  114|  5.26k|      static FE_25519 negate(const FE_25519& a) {
  115|  5.26k|         FE_25519 z;
  116|  57.9k|         for(size_t i = 0; i != 10; ++i) {
  ------------------
  |  Branch (116:28): [True: 52.6k, False: 5.26k]
  ------------------
  117|  52.6k|            z[i] = -a[i];
  118|  52.6k|         }
  119|  5.26k|         return z;
  120|  5.26k|      }
_ZN5Botan8FE_255193sqrERKS0_:
  125|  19.6M|      static FE_25519 sqr(const FE_25519& a) { return sqr_iter(a, 1); }
_ZNK5Botan8FE_25519ixEm:
  132|  2.00G|      int32_t operator[](size_t i) const { return m_fe[i]; }
_ZN5Botan8FE_25519ixEm:
  134|   489M|      int32_t& operator[](size_t i) { return m_fe[i]; }
_ZN5Botan12fe_frombytesERNS_8FE_25519EPKh:
  150|  25.9k|inline void fe_frombytes(fe& x, const uint8_t* b) {
  151|  25.9k|   x.from_bytes(b);
  152|  25.9k|}
_ZN5Botan10fe_tobytesEPhRKNS_8FE_25519E:
  154|  25.6k|inline void fe_tobytes(uint8_t* b, const fe& x) {
  155|  25.6k|   x.to_bytes(b);
  156|  25.6k|}
_ZN5Botan7fe_copyERNS_8FE_25519ERKS0_:
  158|   205k|inline void fe_copy(fe& a, const fe& b) {
  159|   205k|   a = b;
  160|   205k|}
_ZN5Botan12fe_isnonzeroERKNS_8FE_25519E:
  162|  36.0k|inline int fe_isnonzero(const fe& x) {
  163|  36.0k|   return x.is_zero() ? 0 : 1;
  ------------------
  |  Branch (163:11): [True: 25.9k, False: 10.0k]
  ------------------
  164|  36.0k|}
_ZN5Botan13fe_isnegativeERKNS_8FE_25519E:
  166|  51.6k|inline int fe_isnegative(const fe& x) {
  167|  51.6k|   return x.is_negative();
  168|  51.6k|}
_ZN5Botan4fe_0ERNS_8FE_25519E:
  170|  25.6k|inline void fe_0(fe& x) {
  171|  25.6k|   x = FE_25519();
  172|  25.6k|}
_ZN5Botan4fe_1ERNS_8FE_25519E:
  174|  77.2k|inline void fe_1(fe& x) {
  175|  77.2k|   x = FE_25519(1);
  176|  77.2k|}
_ZN5Botan6fe_addERNS_8FE_25519ERKS0_S3_:
  178|  22.3M|inline void fe_add(fe& x, const fe& a, const fe& b) {
  179|  22.3M|   x = FE_25519::add(a, b);
  180|  22.3M|}
_ZN5Botan6fe_subERNS_8FE_25519ERKS0_S3_:
  182|  26.5M|inline void fe_sub(fe& x, const fe& a, const fe& b) {
  183|  26.5M|   x = FE_25519::sub(a, b);
  184|  26.5M|}
_ZN5Botan6fe_negERNS_8FE_25519ERKS0_:
  186|  5.26k|inline void fe_neg(fe& x, const fe& z) {
  187|  5.26k|   x = FE_25519::negate(z);
  188|  5.26k|}
_ZN5Botan6fe_mulERNS_8FE_25519ERKS0_S3_:
  190|  37.8M|inline void fe_mul(fe& x, const fe& a, const fe& b) {
  191|  37.8M|   x = FE_25519::mul(a, b);
  192|  37.8M|}
_ZN5Botan5fe_sqERNS_8FE_25519ERKS0_:
  194|  19.6M|inline void fe_sq(fe& x, const fe& z) {
  195|  19.6M|   x = FE_25519::sqr(z);
  196|  19.6M|}
_ZN5Botan10fe_sq_iterERNS_8FE_25519ERKS0_m:
  198|   464k|inline void fe_sq_iter(fe& x, const fe& z, size_t iter) {
  199|   464k|   x = FE_25519::sqr_iter(z, iter);
  200|   464k|}
_ZN5Botan6fe_sq2ERNS_8FE_25519ERKS0_:
  202|  6.46M|inline void fe_sq2(fe& x, const fe& z) {
  203|  6.46M|   x = FE_25519::sqr2(z);
  204|  6.46M|}
_ZN5Botan9fe_invertERNS_8FE_25519ERKS0_:
  206|  25.6k|inline void fe_invert(fe& x, const fe& z) {
  207|  25.6k|   x = FE_25519::invert(z);
  208|  25.6k|}
_ZN5Botan11fe_pow22523ERNS_8FE_25519ERKS0_:
  210|  25.9k|inline void fe_pow22523(fe& x, const fe& y) {
  211|  25.9k|   x = FE_25519::pow_22523(y);
  212|  25.9k|}

_ZN5Botan6load_3EPKh:
   19|   489k|inline uint64_t load_3(const uint8_t in[3]) {
   20|   489k|   return static_cast<uint64_t>(in[0]) | (static_cast<uint64_t>(in[1]) << 8) | (static_cast<uint64_t>(in[2]) << 16);
   21|   489k|}
_ZN5Botan6load_4EPKh:
   23|   385k|inline uint64_t load_4(const uint8_t* in) {
   24|   385k|   return load_le<uint32_t>(in, 0);
   25|   385k|}
_ZN5Botan8redc_mulERlS0_S0_S0_S0_S0_S0_:
   58|   359k|inline void redc_mul(int64_t& s1, int64_t& s2, int64_t& s3, int64_t& s4, int64_t& s5, int64_t& s6, int64_t& X) {
   59|   359k|   s1 += X * 666643;
   60|   359k|   s2 += X * 470296;
   61|   359k|   s3 += X * 654183;
   62|   359k|   s4 -= X * 997805;
   63|   359k|   s5 += X * 136657;
   64|   359k|   s6 -= X * 683901;
   65|   359k|   X = 0;
   66|   359k|}
_ZN5Botan5carryILm26ELl1EEEvRlS1_QaagtT_Li0EltT_Li64E:
   30|   538M|{
   31|   538M|   const int64_t X1 = (static_cast<int64_t>(1) << S);
   32|   538M|   const int64_t X2 = (static_cast<int64_t>(1) << (S - 1));
   33|   538M|   int64_t c = (h0 + X2) >> S;
   34|   538M|   h1 += c * MUL;
   35|   538M|   h0 -= c * X1;
   36|   538M|}
_ZN5Botan5carryILm25ELl1EEEvRlS1_QaagtT_Li0EltT_Li64E:
   30|   307M|{
   31|   307M|   const int64_t X1 = (static_cast<int64_t>(1) << S);
   32|   307M|   const int64_t X2 = (static_cast<int64_t>(1) << (S - 1));
   33|   307M|   int64_t c = (h0 + X2) >> S;
   34|   307M|   h1 += c * MUL;
   35|   307M|   h0 -= c * X1;
   36|   307M|}
_ZN5Botan5carryILm25ELl19EEEvRlS1_QaagtT_Li0EltT_Li64E:
   30|  76.8M|{
   31|  76.8M|   const int64_t X1 = (static_cast<int64_t>(1) << S);
   32|  76.8M|   const int64_t X2 = (static_cast<int64_t>(1) << (S - 1));
   33|  76.8M|   int64_t c = (h0 + X2) >> S;
   34|  76.8M|   h1 += c * MUL;
   35|  76.8M|   h0 -= c * X1;
   36|  76.8M|}
_ZN5Botan6carry0ILm26EEEvRiS1_QaagtT_Li0EltT_Li32E:
   51|   566k|{
   52|   566k|   const int32_t X1 = (static_cast<int64_t>(1) << S);
   53|   566k|   int32_t c = h0 >> S;
   54|   566k|   h1 += c;
   55|   566k|   h0 -= c * X1;
   56|   566k|}
_ZN5Botan6carry0ILm25EEEvRiS1_QaagtT_Li0EltT_Li32E:
   51|   453k|{
   52|   453k|   const int32_t X1 = (static_cast<int64_t>(1) << S);
   53|   453k|   int32_t c = h0 >> S;
   54|   453k|   h1 += c;
   55|   453k|   h0 -= c * X1;
   56|   453k|}
_ZN5Botan5carryILm21ELl1EEEvRlS1_QaagtT_Li0EltT_Li64E:
   30|   590k|{
   31|   590k|   const int64_t X1 = (static_cast<int64_t>(1) << S);
   32|   590k|   const int64_t X2 = (static_cast<int64_t>(1) << (S - 1));
   33|   590k|   int64_t c = (h0 + X2) >> S;
   34|   590k|   h1 += c * MUL;
   35|   590k|   h0 -= c * X1;
   36|   590k|}
_ZN5Botan6carry0ILm21EEEvRlS1_QaagtT_Li0EltT_Li64E:
   41|   616k|{
   42|   616k|   const int64_t X1 = (static_cast<int64_t>(1) << S);
   43|   616k|   int64_t c = h0 >> S;
   44|   616k|   h1 += c;
   45|   616k|   h0 -= c * X1;
   46|   616k|}

_ZN5Botan4EMSAD2Ev:
   25|  20.6k|      virtual ~EMSA() = default;

_ZN9Botan_FFI16write_vec_outputINSt3__19allocatorIhEEEEiPhPmRKNS1_6vectorIhT_EE:
  201|   429k|int write_vec_output(uint8_t out[], size_t* out_len, const std::vector<uint8_t, Alloc>& buf) {
  202|   429k|   return write_output(out, out_len, buf.data(), buf.size());
  203|   429k|}
_ZN9Botan_FFI12write_outputEPhPmPKhm:
  181|   429k|inline int write_output(uint8_t out[], size_t* out_len, const uint8_t buf[], size_t buf_len) {
  182|   429k|   if(out_len == nullptr) {
  ------------------
  |  Branch (182:7): [True: 0, False: 429k]
  ------------------
  183|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
  184|      0|   }
  185|       |
  186|   429k|   const size_t avail = *out_len;
  187|   429k|   *out_len = buf_len;
  188|       |
  189|   429k|   if((avail >= buf_len) && (out != nullptr)) {
  ------------------
  |  Branch (189:7): [True: 429k, False: 0]
  |  Branch (189:29): [True: 429k, False: 0]
  ------------------
  190|   429k|      Botan::copy_mem(out, buf, buf_len);
  191|   429k|      return BOTAN_FFI_SUCCESS;
  192|   429k|   } else {
  193|      0|      if(out != nullptr) {
  ------------------
  |  Branch (193:10): [True: 0, False: 0]
  ------------------
  194|      0|         Botan::clear_mem(out, avail);
  195|      0|      }
  196|      0|      return BOTAN_FFI_ERROR_INSUFFICIENT_BUFFER_SPACE;
  197|      0|   }
  198|   429k|}
_ZN19botan_pubkey_structC2ENSt3__110unique_ptrIN5Botan10Public_KeyENS0_14default_deleteIS3_EEEE:
   53|  93.3k|         explicit NAME(std::unique_ptr<TYPE> x) : botan_struct(std::move(x)) {} \
_ZN15botan_mp_structC2ENSt3__110unique_ptrIN5Botan6BigIntENS0_14default_deleteIS3_EEEE:
   53|   159k|         explicit NAME(std::unique_ptr<TYPE> x) : botan_struct(std::move(x)) {} \
_ZN16botan_rng_structC2ENSt3__110unique_ptrIN5Botan21RandomNumberGeneratorENS0_14default_deleteIS3_EEEE:
   53|  48.1k|         explicit NAME(std::unique_ptr<TYPE> x) : botan_struct(std::move(x)) {} \
_ZN9Botan_FFI12botan_structIN5Botan6BigIntELj3358112210EEC2ENSt3__110unique_ptrIS2_NS4_14default_deleteIS2_EEEE:
   35|   159k|      botan_struct(std::unique_ptr<T> obj) : m_magic(MAGIC), m_obj(std::move(obj)) {}
_ZN9Botan_FFI12botan_structIN5Botan6BigIntELj3358112210EED2Ev:
   37|   159k|      virtual ~botan_struct() {
   38|   159k|         m_magic = 0;
   39|   159k|         m_obj.reset();
   40|   159k|      }
_ZNK9Botan_FFI12botan_structIN5Botan6BigIntELj3358112210EE8magic_okEv:
   42|   479k|      bool magic_ok() const { return (m_magic == MAGIC); }
_ZNK9Botan_FFI12botan_structIN5Botan6BigIntELj3358112210EE10unsafe_getEv:
   44|   319k|      T* unsafe_get() const { return m_obj.get(); }
_ZN9Botan_FFI8safe_getIN5Botan6BigIntELj3358112210EEERT_PNS_12botan_structIS3_XT0_EEE:
   63|   159k|T& safe_get(botan_struct<T, M>* p) {
   64|   159k|   if(!p) {
  ------------------
  |  Branch (64:7): [True: 0, False: 159k]
  ------------------
   65|      0|      throw FFI_Error("Null pointer argument", BOTAN_FFI_ERROR_NULL_POINTER);
   66|      0|   }
   67|   159k|   if(p->magic_ok() == false) {
  ------------------
  |  Branch (67:7): [True: 0, False: 159k]
  ------------------
   68|      0|      throw FFI_Error("Bad magic in ffi object", BOTAN_FFI_ERROR_INVALID_OBJECT);
   69|      0|   }
   70|       |
   71|   159k|   if(T* t = p->unsafe_get()) {
  ------------------
  |  Branch (71:10): [True: 159k, False: 0]
  ------------------
   72|   159k|      return *t;
   73|   159k|   }
   74|       |
   75|      0|   throw FFI_Error("Invalid object pointer", BOTAN_FFI_ERROR_INVALID_OBJECT);
   76|   159k|}
ffi_mp.cpp:_ZN9Botan_FFI15botan_ffi_visitIN5Botan6BigIntELj3358112210EZ17botan_mp_from_binE3$_0EEiPNS_12botan_structIT_XT0_EEET1_PKc:
   81|   159k|int botan_ffi_visit(botan_struct<T, M>* o, F func, const char* func_name) {
   82|   159k|   using RetT = std::invoke_result_t<F, T&>;
   83|   159k|   static_assert(std::is_void_v<RetT> || std::is_same_v<RetT, BOTAN_FFI_ERROR> || std::is_same_v<RetT, int>,
   84|   159k|                 "BOTAN_FFI_DO must be used with a block that returns either nothing, int or BOTAN_FFI_ERROR");
   85|       |
   86|   159k|   if(!o) {
  ------------------
  |  Branch (86:7): [True: 0, False: 159k]
  ------------------
   87|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
   88|      0|   }
   89|       |
   90|   159k|   if(o->magic_ok() == false) {
  ------------------
  |  Branch (90:7): [True: 0, False: 159k]
  ------------------
   91|      0|      return BOTAN_FFI_ERROR_INVALID_OBJECT;
   92|      0|   }
   93|       |
   94|   159k|   T* p = o->unsafe_get();
   95|   159k|   if(p == nullptr) {
  ------------------
  |  Branch (95:7): [True: 0, False: 159k]
  ------------------
   96|      0|      return BOTAN_FFI_ERROR_INVALID_OBJECT;
   97|      0|   }
   98|       |
   99|   159k|   if constexpr(std::is_void_v<RetT>) {
  100|   159k|      return ffi_guard_thunk(func_name, [&] {
  101|   159k|         func(*p);
  102|   159k|         return BOTAN_FFI_SUCCESS;
  103|   159k|      });
  104|       |   } else {
  105|       |      return ffi_guard_thunk(func_name, [&] { return func(*p); });
  106|       |   }
  107|   159k|}
ffi_mp.cpp:_ZZN9Botan_FFI15botan_ffi_visitIN5Botan6BigIntELj3358112210EZ17botan_mp_from_binE3$_0EEiPNS_12botan_structIT_XT0_EEET1_PKcENKUlvE_clEv:
  100|   159k|      return ffi_guard_thunk(func_name, [&] {
  101|   159k|         func(*p);
  102|   159k|         return BOTAN_FFI_SUCCESS;
  103|   159k|      });
ffi_mp.cpp:_ZZ17botan_mp_from_binENK3$_0clIN5Botan6BigIntEEEDaRT_:
  124|   159k|#define BOTAN_FFI_VISIT(obj, lambda) botan_ffi_visit(obj, lambda, __func__)
_ZN9Botan_FFI17ffi_delete_objectIN5Botan6BigIntELj3358112210EEEiPNS_12botan_structIT_XT0_EEEPKc:
  127|   159k|int ffi_delete_object(botan_struct<T, M>* obj, const char* func_name) {
  128|   159k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|   159k|      if(obj == nullptr) {
  131|   159k|         return BOTAN_FFI_SUCCESS;
  132|   159k|      }
  133|       |
  134|   159k|      if(obj->magic_ok() == false) {
  135|   159k|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|   159k|      }
  137|       |
  138|   159k|      delete obj;
  139|   159k|      return BOTAN_FFI_SUCCESS;
  140|   159k|   });
  141|   159k|}
_ZZN9Botan_FFI17ffi_delete_objectIN5Botan6BigIntELj3358112210EEEiPNS_12botan_structIT_XT0_EEEPKcENKUlvE_clEv:
  128|   159k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|   159k|      if(obj == nullptr) {
  ------------------
  |  Branch (130:10): [True: 0, False: 159k]
  ------------------
  131|      0|         return BOTAN_FFI_SUCCESS;
  132|      0|      }
  133|       |
  134|   159k|      if(obj->magic_ok() == false) {
  ------------------
  |  Branch (134:10): [True: 0, False: 159k]
  ------------------
  135|      0|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|      0|      }
  137|       |
  138|   159k|      delete obj;
  139|   159k|      return BOTAN_FFI_SUCCESS;
  140|   159k|   });
_ZNK9Botan_FFI12botan_structIN5Botan21RandomNumberGeneratorELj1224866241EE8magic_okEv:
   42|  48.1k|      bool magic_ok() const { return (m_magic == MAGIC); }
_ZN9Botan_FFI8safe_getIN5Botan10Public_KeyELj740844825EEERT_PNS_12botan_structIS3_XT0_EEE:
   63|  93.3k|T& safe_get(botan_struct<T, M>* p) {
   64|  93.3k|   if(!p) {
  ------------------
  |  Branch (64:7): [True: 0, False: 93.3k]
  ------------------
   65|      0|      throw FFI_Error("Null pointer argument", BOTAN_FFI_ERROR_NULL_POINTER);
   66|      0|   }
   67|  93.3k|   if(p->magic_ok() == false) {
  ------------------
  |  Branch (67:7): [True: 0, False: 93.3k]
  ------------------
   68|      0|      throw FFI_Error("Bad magic in ffi object", BOTAN_FFI_ERROR_INVALID_OBJECT);
   69|      0|   }
   70|       |
   71|  93.3k|   if(T* t = p->unsafe_get()) {
  ------------------
  |  Branch (71:10): [True: 93.3k, False: 0]
  ------------------
   72|  93.3k|      return *t;
   73|  93.3k|   }
   74|       |
   75|      0|   throw FFI_Error("Invalid object pointer", BOTAN_FFI_ERROR_INVALID_OBJECT);
   76|  93.3k|}
_ZNK9Botan_FFI12botan_structIN5Botan10Public_KeyELj740844825EE8magic_okEv:
   42|   186k|      bool magic_ok() const { return (m_magic == MAGIC); }
_ZNK9Botan_FFI12botan_structIN5Botan10Public_KeyELj740844825EE10unsafe_getEv:
   44|  93.3k|      T* unsafe_get() const { return m_obj.get(); }
_ZN25botan_pk_op_verify_structC2ENSt3__110unique_ptrIN5Botan11PK_VerifierENS0_14default_deleteIS3_EEEE:
   53|  88.6k|         explicit NAME(std::unique_ptr<TYPE> x) : botan_struct(std::move(x)) {} \
_ZN9Botan_FFI12botan_structIN5Botan11PK_VerifierELj730986806EEC2ENSt3__110unique_ptrIS2_NS4_14default_deleteIS2_EEEE:
   35|  88.6k|      botan_struct(std::unique_ptr<T> obj) : m_magic(MAGIC), m_obj(std::move(obj)) {}
_ZN9Botan_FFI12botan_structIN5Botan11PK_VerifierELj730986806EED2Ev:
   37|  88.6k|      virtual ~botan_struct() {
   38|  88.6k|         m_magic = 0;
   39|  88.6k|         m_obj.reset();
   40|  88.6k|      }
_ZN9Botan_FFI17ffi_delete_objectIN5Botan11PK_VerifierELj730986806EEEiPNS_12botan_structIT_XT0_EEEPKc:
  127|  88.6k|int ffi_delete_object(botan_struct<T, M>* obj, const char* func_name) {
  128|  88.6k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|  88.6k|      if(obj == nullptr) {
  131|  88.6k|         return BOTAN_FFI_SUCCESS;
  132|  88.6k|      }
  133|       |
  134|  88.6k|      if(obj->magic_ok() == false) {
  135|  88.6k|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|  88.6k|      }
  137|       |
  138|  88.6k|      delete obj;
  139|  88.6k|      return BOTAN_FFI_SUCCESS;
  140|  88.6k|   });
  141|  88.6k|}
_ZZN9Botan_FFI17ffi_delete_objectIN5Botan11PK_VerifierELj730986806EEEiPNS_12botan_structIT_XT0_EEEPKcENKUlvE_clEv:
  128|  88.6k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|  88.6k|      if(obj == nullptr) {
  ------------------
  |  Branch (130:10): [True: 0, False: 88.6k]
  ------------------
  131|      0|         return BOTAN_FFI_SUCCESS;
  132|      0|      }
  133|       |
  134|  88.6k|      if(obj->magic_ok() == false) {
  ------------------
  |  Branch (134:10): [True: 0, False: 88.6k]
  ------------------
  135|      0|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|      0|      }
  137|       |
  138|  88.6k|      delete obj;
  139|  88.6k|      return BOTAN_FFI_SUCCESS;
  140|  88.6k|   });
_ZNK9Botan_FFI12botan_structIN5Botan11PK_VerifierELj730986806EE8magic_okEv:
   42|   265k|      bool magic_ok() const { return (m_magic == MAGIC); }
ffi_pk_op.cpp:_ZN9Botan_FFI15botan_ffi_visitIN5Botan11PK_VerifierELj730986806EZ25botan_pk_op_verify_updateE3$_0EEiPNS_12botan_structIT_XT0_EEET1_PKc:
   81|  88.6k|int botan_ffi_visit(botan_struct<T, M>* o, F func, const char* func_name) {
   82|  88.6k|   using RetT = std::invoke_result_t<F, T&>;
   83|  88.6k|   static_assert(std::is_void_v<RetT> || std::is_same_v<RetT, BOTAN_FFI_ERROR> || std::is_same_v<RetT, int>,
   84|  88.6k|                 "BOTAN_FFI_DO must be used with a block that returns either nothing, int or BOTAN_FFI_ERROR");
   85|       |
   86|  88.6k|   if(!o) {
  ------------------
  |  Branch (86:7): [True: 0, False: 88.6k]
  ------------------
   87|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
   88|      0|   }
   89|       |
   90|  88.6k|   if(o->magic_ok() == false) {
  ------------------
  |  Branch (90:7): [True: 0, False: 88.6k]
  ------------------
   91|      0|      return BOTAN_FFI_ERROR_INVALID_OBJECT;
   92|      0|   }
   93|       |
   94|  88.6k|   T* p = o->unsafe_get();
   95|  88.6k|   if(p == nullptr) {
  ------------------
  |  Branch (95:7): [True: 0, False: 88.6k]
  ------------------
   96|      0|      return BOTAN_FFI_ERROR_INVALID_OBJECT;
   97|      0|   }
   98|       |
   99|  88.6k|   if constexpr(std::is_void_v<RetT>) {
  100|  88.6k|      return ffi_guard_thunk(func_name, [&] {
  101|  88.6k|         func(*p);
  102|  88.6k|         return BOTAN_FFI_SUCCESS;
  103|  88.6k|      });
  104|       |   } else {
  105|       |      return ffi_guard_thunk(func_name, [&] { return func(*p); });
  106|       |   }
  107|  88.6k|}
_ZNK9Botan_FFI12botan_structIN5Botan11PK_VerifierELj730986806EE10unsafe_getEv:
   44|   177k|      T* unsafe_get() const { return m_obj.get(); }
ffi_pk_op.cpp:_ZZN9Botan_FFI15botan_ffi_visitIN5Botan11PK_VerifierELj730986806EZ25botan_pk_op_verify_updateE3$_0EEiPNS_12botan_structIT_XT0_EEET1_PKcENKUlvE_clEv:
  100|  88.6k|      return ffi_guard_thunk(func_name, [&] {
  101|  88.6k|         func(*p);
  102|  88.6k|         return BOTAN_FFI_SUCCESS;
  103|  88.6k|      });
ffi_pk_op.cpp:_ZZ25botan_pk_op_verify_updateENK3$_0clIN5Botan11PK_VerifierEEEDaRT_:
  124|  88.6k|#define BOTAN_FFI_VISIT(obj, lambda) botan_ffi_visit(obj, lambda, __func__)
ffi_pk_op.cpp:_ZN9Botan_FFI15botan_ffi_visitIN5Botan11PK_VerifierELj730986806EZ25botan_pk_op_verify_finishE3$_0EEiPNS_12botan_structIT_XT0_EEET1_PKc:
   81|  88.6k|int botan_ffi_visit(botan_struct<T, M>* o, F func, const char* func_name) {
   82|  88.6k|   using RetT = std::invoke_result_t<F, T&>;
   83|  88.6k|   static_assert(std::is_void_v<RetT> || std::is_same_v<RetT, BOTAN_FFI_ERROR> || std::is_same_v<RetT, int>,
   84|  88.6k|                 "BOTAN_FFI_DO must be used with a block that returns either nothing, int or BOTAN_FFI_ERROR");
   85|       |
   86|  88.6k|   if(!o) {
  ------------------
  |  Branch (86:7): [True: 0, False: 88.6k]
  ------------------
   87|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
   88|      0|   }
   89|       |
   90|  88.6k|   if(o->magic_ok() == false) {
  ------------------
  |  Branch (90:7): [True: 0, False: 88.6k]
  ------------------
   91|      0|      return BOTAN_FFI_ERROR_INVALID_OBJECT;
   92|      0|   }
   93|       |
   94|  88.6k|   T* p = o->unsafe_get();
   95|  88.6k|   if(p == nullptr) {
  ------------------
  |  Branch (95:7): [True: 0, False: 88.6k]
  ------------------
   96|      0|      return BOTAN_FFI_ERROR_INVALID_OBJECT;
   97|      0|   }
   98|       |
   99|       |   if constexpr(std::is_void_v<RetT>) {
  100|       |      return ffi_guard_thunk(func_name, [&] {
  101|       |         func(*p);
  102|       |         return BOTAN_FFI_SUCCESS;
  103|       |      });
  104|  88.6k|   } else {
  105|  88.6k|      return ffi_guard_thunk(func_name, [&] { return func(*p); });
  106|  88.6k|   }
  107|  88.6k|}
ffi_pk_op.cpp:_ZZN9Botan_FFI15botan_ffi_visitIN5Botan11PK_VerifierELj730986806EZ25botan_pk_op_verify_finishE3$_0EEiPNS_12botan_structIT_XT0_EEET1_PKcENKUlvE_clEv:
  105|  88.6k|      return ffi_guard_thunk(func_name, [&] { return func(*p); });
ffi_pk_op.cpp:_ZZ25botan_pk_op_verify_finishENK3$_0clIN5Botan11PK_VerifierEEEDaRT_:
  124|   265k|#define BOTAN_FFI_VISIT(obj, lambda) botan_ffi_visit(obj, lambda, __func__)
  ------------------
  |  Branch (124:59): [True: 9.30k, False: 79.3k]
  ------------------
_ZN9Botan_FFI12botan_structIN5Botan10Public_KeyELj740844825EEC2ENSt3__110unique_ptrIS2_NS4_14default_deleteIS2_EEEE:
   35|  93.3k|      botan_struct(std::unique_ptr<T> obj) : m_magic(MAGIC), m_obj(std::move(obj)) {}
_ZN9Botan_FFI12botan_structIN5Botan10Public_KeyELj740844825EED2Ev:
   37|  93.3k|      virtual ~botan_struct() {
   38|  93.3k|         m_magic = 0;
   39|  93.3k|         m_obj.reset();
   40|  93.3k|      }
_ZN9Botan_FFI17ffi_delete_objectIN5Botan10Public_KeyELj740844825EEEiPNS_12botan_structIT_XT0_EEEPKc:
  127|  94.4k|int ffi_delete_object(botan_struct<T, M>* obj, const char* func_name) {
  128|  94.4k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|  94.4k|      if(obj == nullptr) {
  131|  94.4k|         return BOTAN_FFI_SUCCESS;
  132|  94.4k|      }
  133|       |
  134|  94.4k|      if(obj->magic_ok() == false) {
  135|  94.4k|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|  94.4k|      }
  137|       |
  138|  94.4k|      delete obj;
  139|  94.4k|      return BOTAN_FFI_SUCCESS;
  140|  94.4k|   });
  141|  94.4k|}
_ZZN9Botan_FFI17ffi_delete_objectIN5Botan10Public_KeyELj740844825EEEiPNS_12botan_structIT_XT0_EEEPKcENKUlvE_clEv:
  128|  94.4k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|  94.4k|      if(obj == nullptr) {
  ------------------
  |  Branch (130:10): [True: 1.04k, False: 93.3k]
  ------------------
  131|  1.04k|         return BOTAN_FFI_SUCCESS;
  132|  1.04k|      }
  133|       |
  134|  93.3k|      if(obj->magic_ok() == false) {
  ------------------
  |  Branch (134:10): [True: 0, False: 93.3k]
  ------------------
  135|      0|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|      0|      }
  137|       |
  138|  93.3k|      delete obj;
  139|  93.3k|      return BOTAN_FFI_SUCCESS;
  140|  93.3k|   });
_ZN9Botan_FFI12botan_structIN5Botan21RandomNumberGeneratorELj1224866241EEC2ENSt3__110unique_ptrIS2_NS4_14default_deleteIS2_EEEE:
   35|  48.1k|      botan_struct(std::unique_ptr<T> obj) : m_magic(MAGIC), m_obj(std::move(obj)) {}
_ZN9Botan_FFI12botan_structIN5Botan21RandomNumberGeneratorELj1224866241EED2Ev:
   37|  48.1k|      virtual ~botan_struct() {
   38|  48.1k|         m_magic = 0;
   39|  48.1k|         m_obj.reset();
   40|  48.1k|      }
_ZN9Botan_FFI17ffi_delete_objectIN5Botan21RandomNumberGeneratorELj1224866241EEEiPNS_12botan_structIT_XT0_EEEPKc:
  127|  48.1k|int ffi_delete_object(botan_struct<T, M>* obj, const char* func_name) {
  128|  48.1k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|  48.1k|      if(obj == nullptr) {
  131|  48.1k|         return BOTAN_FFI_SUCCESS;
  132|  48.1k|      }
  133|       |
  134|  48.1k|      if(obj->magic_ok() == false) {
  135|  48.1k|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|  48.1k|      }
  137|       |
  138|  48.1k|      delete obj;
  139|  48.1k|      return BOTAN_FFI_SUCCESS;
  140|  48.1k|   });
  141|  48.1k|}
_ZZN9Botan_FFI17ffi_delete_objectIN5Botan21RandomNumberGeneratorELj1224866241EEEiPNS_12botan_structIT_XT0_EEEPKcENKUlvE_clEv:
  128|  48.1k|   return ffi_guard_thunk(func_name, [=]() -> int {
  129|       |      // ignore delete of null objects
  130|  48.1k|      if(obj == nullptr) {
  ------------------
  |  Branch (130:10): [True: 0, False: 48.1k]
  ------------------
  131|      0|         return BOTAN_FFI_SUCCESS;
  132|      0|      }
  133|       |
  134|  48.1k|      if(obj->magic_ok() == false) {
  ------------------
  |  Branch (134:10): [True: 0, False: 48.1k]
  ------------------
  135|      0|         return BOTAN_FFI_ERROR_INVALID_OBJECT;
  136|      0|      }
  137|       |
  138|  48.1k|      delete obj;
  139|  48.1k|      return BOTAN_FFI_SUCCESS;
  140|  48.1k|   });

_ZN5Botan10fmt_detail6do_fmtINSt3__117basic_string_viewIcNS2_11char_traitsIcEEEEJEEEvRNS2_19basic_ostringstreamIcS5_NS2_9allocatorIcEEEES6_RKT_DpRKT0_:
   25|  1.11k|void do_fmt(std::ostringstream& oss, std::string_view format, const T& val, const Ts&... rest) {
   26|  1.11k|   size_t i = 0;
   27|       |
   28|  2.22k|   while(i < format.size()) {
  ------------------
  |  Branch (28:10): [True: 2.22k, False: 0]
  ------------------
   29|  2.22k|      if(format[i] == '{' && (format.size() > (i + 1)) && format.at(i + 1) == '}') {
  ------------------
  |  Branch (29:10): [True: 1.11k, False: 1.11k]
  |  Branch (29:30): [True: 1.11k, False: 0]
  |  Branch (29:59): [True: 1.11k, False: 0]
  ------------------
   30|  1.11k|         oss << val;
   31|  1.11k|         return do_fmt(oss, format.substr(i + 2), rest...);
   32|  1.11k|      } else {
   33|  1.11k|         oss << format[i];
   34|  1.11k|      }
   35|       |
   36|  1.11k|      i += 1;
   37|  1.11k|   }
   38|  1.11k|}
_ZN5Botan10fmt_detail6do_fmtERNSt3__119basic_ostringstreamIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_17basic_string_viewIcS4_EE:
   20|  6.97k|inline void do_fmt(std::ostringstream& oss, std::string_view format) {
   21|  6.97k|   oss << format;
   22|  6.97k|}
_ZN5Botan3fmtIJmEEENSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_17basic_string_viewIcS4_EEDpRKT_:
   53|  5.80k|std::string fmt(std::string_view format, const T&... args) {
   54|  5.80k|   std::ostringstream oss;
   55|  5.80k|   oss.imbue(std::locale::classic());
   56|  5.80k|   fmt_detail::do_fmt(oss, format, args...);
   57|  5.80k|   return oss.str();
   58|  5.80k|}
_ZN5Botan10fmt_detail6do_fmtImJEEEvRNSt3__119basic_ostringstreamIcNS2_11char_traitsIcEENS2_9allocatorIcEEEENS2_17basic_string_viewIcS5_EERKT_DpRKT0_:
   25|  5.80k|void do_fmt(std::ostringstream& oss, std::string_view format, const T& val, const Ts&... rest) {
   26|  5.80k|   size_t i = 0;
   27|       |
   28|  40.6k|   while(i < format.size()) {
  ------------------
  |  Branch (28:10): [True: 40.6k, False: 0]
  ------------------
   29|  40.6k|      if(format[i] == '{' && (format.size() > (i + 1)) && format.at(i + 1) == '}') {
  ------------------
  |  Branch (29:10): [True: 5.80k, False: 34.8k]
  |  Branch (29:30): [True: 5.80k, False: 0]
  |  Branch (29:59): [True: 5.80k, False: 0]
  ------------------
   30|  5.80k|         oss << val;
   31|  5.80k|         return do_fmt(oss, format.substr(i + 2), rest...);
   32|  34.8k|      } else {
   33|  34.8k|         oss << format[i];
   34|  34.8k|      }
   35|       |
   36|  34.8k|      i += 1;
   37|  34.8k|   }
   38|  5.80k|}
_ZN5Botan10fmt_detail6do_fmtIPKcJEEEvRNSt3__119basic_ostringstreamIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_17basic_string_viewIcS7_EERKT_DpRKT0_:
   25|     54|void do_fmt(std::ostringstream& oss, std::string_view format, const T& val, const Ts&... rest) {
   26|     54|   size_t i = 0;
   27|       |
   28|    108|   while(i < format.size()) {
  ------------------
  |  Branch (28:10): [True: 108, False: 0]
  ------------------
   29|    108|      if(format[i] == '{' && (format.size() > (i + 1)) && format.at(i + 1) == '}') {
  ------------------
  |  Branch (29:10): [True: 54, False: 54]
  |  Branch (29:30): [True: 54, False: 0]
  |  Branch (29:59): [True: 54, False: 0]
  ------------------
   30|     54|         oss << val;
   31|     54|         return do_fmt(oss, format.substr(i + 2), rest...);
   32|     54|      } else {
   33|     54|         oss << format[i];
   34|     54|      }
   35|       |
   36|     54|      i += 1;
   37|     54|   }
   38|     54|}
_ZN5Botan10fmt_detail6do_fmtIPKcJS3_EEEvRNSt3__119basic_ostringstreamIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_17basic_string_viewIcS7_EERKT_DpRKT0_:
   25|     54|void do_fmt(std::ostringstream& oss, std::string_view format, const T& val, const Ts&... rest) {
   26|     54|   size_t i = 0;
   27|       |
   28|    270|   while(i < format.size()) {
  ------------------
  |  Branch (28:10): [True: 270, False: 0]
  ------------------
   29|    270|      if(format[i] == '{' && (format.size() > (i + 1)) && format.at(i + 1) == '}') {
  ------------------
  |  Branch (29:10): [True: 54, False: 216]
  |  Branch (29:30): [True: 54, False: 0]
  |  Branch (29:59): [True: 54, False: 0]
  ------------------
   30|     54|         oss << val;
   31|     54|         return do_fmt(oss, format.substr(i + 2), rest...);
   32|    216|      } else {
   33|    216|         oss << format[i];
   34|    216|      }
   35|       |
   36|    216|      i += 1;
   37|    216|   }
   38|     54|}
_ZN5Botan3fmtIJPKcS2_S2_EEENSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEENS3_17basic_string_viewIcS6_EEDpRKT_:
   53|     54|std::string fmt(std::string_view format, const T&... args) {
   54|     54|   std::ostringstream oss;
   55|     54|   oss.imbue(std::locale::classic());
   56|     54|   fmt_detail::do_fmt(oss, format, args...);
   57|     54|   return oss.str();
   58|     54|}
_ZN5Botan10fmt_detail6do_fmtIPKcJS3_S3_EEEvRNSt3__119basic_ostringstreamIcNS4_11char_traitsIcEENS4_9allocatorIcEEEENS4_17basic_string_viewIcS7_EERKT_DpRKT0_:
   25|     54|void do_fmt(std::ostringstream& oss, std::string_view format, const T& val, const Ts&... rest) {
   26|     54|   size_t i = 0;
   27|       |
   28|     54|   while(i < format.size()) {
  ------------------
  |  Branch (28:10): [True: 54, False: 0]
  ------------------
   29|     54|      if(format[i] == '{' && (format.size() > (i + 1)) && format.at(i + 1) == '}') {
  ------------------
  |  Branch (29:10): [True: 54, False: 0]
  |  Branch (29:30): [True: 54, False: 0]
  |  Branch (29:59): [True: 54, False: 0]
  ------------------
   30|     54|         oss << val;
   31|     54|         return do_fmt(oss, format.substr(i + 2), rest...);
   32|     54|      } else {
   33|      0|         oss << format[i];
   34|      0|      }
   35|       |
   36|      0|      i += 1;
   37|      0|   }
   38|     54|}
_ZN5Botan3fmtIJPKcNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEEEEENS3_12basic_stringIcS6_NS3_9allocatorIcEEEES7_DpRKT_:
   53|  1.11k|std::string fmt(std::string_view format, const T&... args) {
   54|  1.11k|   std::ostringstream oss;
   55|  1.11k|   oss.imbue(std::locale::classic());
   56|  1.11k|   fmt_detail::do_fmt(oss, format, args...);
   57|  1.11k|   return oss.str();
   58|  1.11k|}
_ZN5Botan10fmt_detail6do_fmtIPKcJNSt3__117basic_string_viewIcNS4_11char_traitsIcEEEEEEEvRNS4_19basic_ostringstreamIcS7_NS4_9allocatorIcEEEES8_RKT_DpRKT0_:
   25|  1.11k|void do_fmt(std::ostringstream& oss, std::string_view format, const T& val, const Ts&... rest) {
   26|  1.11k|   size_t i = 0;
   27|       |
   28|  1.11k|   while(i < format.size()) {
  ------------------
  |  Branch (28:10): [True: 1.11k, False: 0]
  ------------------
   29|  1.11k|      if(format[i] == '{' && (format.size() > (i + 1)) && format.at(i + 1) == '}') {
  ------------------
  |  Branch (29:10): [True: 1.11k, False: 0]
  |  Branch (29:30): [True: 1.11k, False: 0]
  |  Branch (29:59): [True: 1.11k, False: 0]
  ------------------
   30|  1.11k|         oss << val;
   31|  1.11k|         return do_fmt(oss, format.substr(i + 2), rest...);
   32|  1.11k|      } else {
   33|      0|         oss << format[i];
   34|      0|      }
   35|       |
   36|      0|      i += 1;
   37|      0|   }
   38|  1.11k|}

_ZN5Botan24Keccak_Permutation_roundEPmPKmm:
   15|   586k|inline void Keccak_Permutation_round(uint64_t T[25], const uint64_t A[25], uint64_t RC) {
   16|   586k|   const uint64_t C0 = A[0] ^ A[5] ^ A[10] ^ A[15] ^ A[20];
   17|   586k|   const uint64_t C1 = A[1] ^ A[6] ^ A[11] ^ A[16] ^ A[21];
   18|   586k|   const uint64_t C2 = A[2] ^ A[7] ^ A[12] ^ A[17] ^ A[22];
   19|   586k|   const uint64_t C3 = A[3] ^ A[8] ^ A[13] ^ A[18] ^ A[23];
   20|   586k|   const uint64_t C4 = A[4] ^ A[9] ^ A[14] ^ A[19] ^ A[24];
   21|       |
   22|   586k|   const uint64_t D0 = rotl<1>(C0) ^ C3;
   23|   586k|   const uint64_t D1 = rotl<1>(C1) ^ C4;
   24|   586k|   const uint64_t D2 = rotl<1>(C2) ^ C0;
   25|   586k|   const uint64_t D3 = rotl<1>(C3) ^ C1;
   26|   586k|   const uint64_t D4 = rotl<1>(C4) ^ C2;
   27|       |
   28|   586k|   const uint64_t B00 = A[0] ^ D1;
   29|   586k|   const uint64_t B01 = rotl<44>(A[6] ^ D2);
   30|   586k|   const uint64_t B02 = rotl<43>(A[12] ^ D3);
   31|   586k|   const uint64_t B03 = rotl<21>(A[18] ^ D4);
   32|   586k|   const uint64_t B04 = rotl<14>(A[24] ^ D0);
   33|   586k|   T[0] = B00 ^ (~B01 & B02) ^ RC;
   34|   586k|   T[1] = B01 ^ (~B02 & B03);
   35|   586k|   T[2] = B02 ^ (~B03 & B04);
   36|   586k|   T[3] = B03 ^ (~B04 & B00);
   37|   586k|   T[4] = B04 ^ (~B00 & B01);
   38|       |
   39|   586k|   const uint64_t B05 = rotl<28>(A[3] ^ D4);
   40|   586k|   const uint64_t B06 = rotl<20>(A[9] ^ D0);
   41|   586k|   const uint64_t B07 = rotl<3>(A[10] ^ D1);
   42|   586k|   const uint64_t B08 = rotl<45>(A[16] ^ D2);
   43|   586k|   const uint64_t B09 = rotl<61>(A[22] ^ D3);
   44|   586k|   T[5] = B05 ^ (~B06 & B07);
   45|   586k|   T[6] = B06 ^ (~B07 & B08);
   46|   586k|   T[7] = B07 ^ (~B08 & B09);
   47|   586k|   T[8] = B08 ^ (~B09 & B05);
   48|   586k|   T[9] = B09 ^ (~B05 & B06);
   49|       |
   50|   586k|   const uint64_t B10 = rotl<1>(A[1] ^ D2);
   51|   586k|   const uint64_t B11 = rotl<6>(A[7] ^ D3);
   52|   586k|   const uint64_t B12 = rotl<25>(A[13] ^ D4);
   53|   586k|   const uint64_t B13 = rotl<8>(A[19] ^ D0);
   54|   586k|   const uint64_t B14 = rotl<18>(A[20] ^ D1);
   55|   586k|   T[10] = B10 ^ (~B11 & B12);
   56|   586k|   T[11] = B11 ^ (~B12 & B13);
   57|   586k|   T[12] = B12 ^ (~B13 & B14);
   58|   586k|   T[13] = B13 ^ (~B14 & B10);
   59|   586k|   T[14] = B14 ^ (~B10 & B11);
   60|       |
   61|   586k|   const uint64_t B15 = rotl<27>(A[4] ^ D0);
   62|   586k|   const uint64_t B16 = rotl<36>(A[5] ^ D1);
   63|   586k|   const uint64_t B17 = rotl<10>(A[11] ^ D2);
   64|   586k|   const uint64_t B18 = rotl<15>(A[17] ^ D3);
   65|   586k|   const uint64_t B19 = rotl<56>(A[23] ^ D4);
   66|   586k|   T[15] = B15 ^ (~B16 & B17);
   67|   586k|   T[16] = B16 ^ (~B17 & B18);
   68|   586k|   T[17] = B17 ^ (~B18 & B19);
   69|   586k|   T[18] = B18 ^ (~B19 & B15);
   70|   586k|   T[19] = B19 ^ (~B15 & B16);
   71|       |
   72|   586k|   const uint64_t B20 = rotl<62>(A[2] ^ D3);
   73|   586k|   const uint64_t B21 = rotl<55>(A[8] ^ D4);
   74|   586k|   const uint64_t B22 = rotl<39>(A[14] ^ D0);
   75|   586k|   const uint64_t B23 = rotl<41>(A[15] ^ D1);
   76|   586k|   const uint64_t B24 = rotl<2>(A[21] ^ D2);
   77|   586k|   T[20] = B20 ^ (~B21 & B22);
   78|   586k|   T[21] = B21 ^ (~B22 & B23);
   79|   586k|   T[22] = B22 ^ (~B23 & B24);
   80|   586k|   T[23] = B23 ^ (~B24 & B20);
   81|   586k|   T[24] = B24 ^ (~B20 & B21);
   82|   586k|}

_ZN5Botan12get_byte_varImEEhmT_:
   65|  45.7k|inline constexpr uint8_t get_byte_var(size_t byte_num, T input) {
   66|  45.7k|   return static_cast<uint8_t>(input >> (((~byte_num) & (sizeof(T) - 1)) << 3));
   67|  45.7k|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0ETkNSt3__117unsigned_integralEjTkNS_6ranges23contiguous_output_rangeIhEENS3_4spanIhLm4EEEEEvT0_OT1_:
  491|   391k|inline constexpr void store_any(InT in, OutR&& out_range) {
  492|   391k|   ranges::assert_exact_byte_length<sizeof(InT)>(out_range);
  493|   391k|   std::span out{out_range};
  494|       |
  495|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  496|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  497|       |   // in a `constexpr` context.
  498|   391k|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (498:7): [Folded, False: 391k]
  ------------------
  499|      0|      return fallback_store_any<endianness, InT>(in, std::forward<OutR>(out_range));
  500|   391k|   } else {
  501|       |      if constexpr(sizeof(InT) == 1) {
  502|       |         out[0] = static_cast<uint8_t>(in);
  503|       |      } else if constexpr(is_native(endianness)) {
  504|       |         typecast_copy(out, in);
  505|   391k|      } else if constexpr(is_opposite(endianness)) {
  506|   391k|         typecast_copy(out, reverse_bytes(in));
  507|       |      } else {
  508|       |         static_assert(native_endianness_is_unknown<endianness>());
  509|       |         return fallback_store_any<endianness, InT>(in, std::forward<OutR>(out_range));
  510|       |      }
  511|   391k|   }
  512|   391k|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0ENS0_10AutoDetectETkNS0_20unsigned_integralishEmQoosr3stdE7same_asIS3_T0_Esr3stdE7same_asIT1_S4_EEEvS5_Ph:
  677|  1.77M|inline constexpr void store_any(T in, uint8_t out[]) {
  678|       |   // asserts that *out points to enough bytes to write into
  679|  1.77M|   store_any<endianness, InT>(in, std::span<uint8_t, sizeof(T)>(out, sizeof(T)));
  680|  1.77M|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0ENS0_10AutoDetectETkNS0_20unsigned_integralishEmTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm8EEEQsr3stdE7same_asIS3_T0_EEEvT1_OT2_:
  612|  1.77M|inline constexpr void store_any(T in, OutR&& out_range) {
  613|  1.77M|   store_any<endianness, T>(in, std::forward<OutR>(out_range));
  614|  1.77M|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0ETkNSt3__117unsigned_integralEmTkNS_6ranges23contiguous_output_rangeIhEENS3_4spanIhLm8EEEEEvT0_OT1_:
  491|  13.0M|inline constexpr void store_any(InT in, OutR&& out_range) {
  492|  13.0M|   ranges::assert_exact_byte_length<sizeof(InT)>(out_range);
  493|  13.0M|   std::span out{out_range};
  494|       |
  495|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  496|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  497|       |   // in a `constexpr` context.
  498|  13.0M|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (498:7): [Folded, False: 13.0M]
  ------------------
  499|      0|      return fallback_store_any<endianness, InT>(in, std::forward<OutR>(out_range));
  500|  13.0M|   } else {
  501|       |      if constexpr(sizeof(InT) == 1) {
  502|       |         out[0] = static_cast<uint8_t>(in);
  503|       |      } else if constexpr(is_native(endianness)) {
  504|       |         typecast_copy(out, in);
  505|  13.0M|      } else if constexpr(is_opposite(endianness)) {
  506|  13.0M|         typecast_copy(out, reverse_bytes(in));
  507|       |      } else {
  508|       |         static_assert(native_endianness_is_unknown<endianness>());
  509|       |         return fallback_store_any<endianness, InT>(in, std::forward<OutR>(out_range));
  510|       |      }
  511|  13.0M|   }
  512|  13.0M|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE1ENS0_10AutoDetectETkNS0_20unsigned_integralishEmQoosr3stdE7same_asIS3_T0_Esr3stdE7same_asIT1_S4_EEEvS5_Ph:
  677|  79.1k|inline constexpr void store_any(T in, uint8_t out[]) {
  678|       |   // asserts that *out points to enough bytes to write into
  679|  79.1k|   store_any<endianness, InT>(in, std::span<uint8_t, sizeof(T)>(out, sizeof(T)));
  680|  79.1k|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE1ENS0_10AutoDetectETkNS0_20unsigned_integralishEmTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm8EEEQsr3stdE7same_asIS3_T0_EEEvT1_OT2_:
  612|  79.1k|inline constexpr void store_any(T in, OutR&& out_range) {
  613|  79.1k|   store_any<endianness, T>(in, std::forward<OutR>(out_range));
  614|  79.1k|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE1ETkNSt3__117unsigned_integralEmTkNS_6ranges23contiguous_output_rangeIhEENS3_4spanIhLm8EEEEEvT0_OT1_:
  491|  79.1k|inline constexpr void store_any(InT in, OutR&& out_range) {
  492|  79.1k|   ranges::assert_exact_byte_length<sizeof(InT)>(out_range);
  493|  79.1k|   std::span out{out_range};
  494|       |
  495|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  496|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  497|       |   // in a `constexpr` context.
  498|  79.1k|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (498:7): [Folded, False: 79.1k]
  ------------------
  499|      0|      return fallback_store_any<endianness, InT>(in, std::forward<OutR>(out_range));
  500|  79.1k|   } else {
  501|       |      if constexpr(sizeof(InT) == 1) {
  502|       |         out[0] = static_cast<uint8_t>(in);
  503|  79.1k|      } else if constexpr(is_native(endianness)) {
  504|  79.1k|         typecast_copy(out, in);
  505|       |      } else if constexpr(is_opposite(endianness)) {
  506|       |         typecast_copy(out, reverse_bytes(in));
  507|       |      } else {
  508|       |         static_assert(native_endianness_is_unknown<endianness>());
  509|       |         return fallback_store_any<endianness, InT>(in, std::forward<OutR>(out_range));
  510|       |      }
  511|  79.1k|   }
  512|  79.1k|}
_ZN5Botan8get_byteILm1EtEEhT0_QltT_stS1_:
   77|  4.71k|{
   78|  4.71k|   const size_t shift = ((~B) & (sizeof(T) - 1)) << 3;
   79|  4.71k|   return static_cast<uint8_t>((input >> shift) & 0xFF);
   80|  4.71k|}
_ZN5Botan8get_byteILm0EtEEhT0_QltT_stS1_:
   77|  4.71k|{
   78|  4.71k|   const size_t shift = ((~B) & (sizeof(T) - 1)) << 3;
   79|  4.71k|   return static_cast<uint8_t>((input >> shift) & 0xFF);
   80|  4.71k|}
_ZN5Botan8get_byteILm3EjEEhT0_QltT_stS1_:
   77|  14.8M|{
   78|  14.8M|   const size_t shift = ((~B) & (sizeof(T) - 1)) << 3;
   79|  14.8M|   return static_cast<uint8_t>((input >> shift) & 0xFF);
   80|  14.8M|}
_ZN5Botan8get_byteILm2EjEEhT0_QltT_stS1_:
   77|  14.5M|{
   78|  14.5M|   const size_t shift = ((~B) & (sizeof(T) - 1)) << 3;
   79|  14.5M|   return static_cast<uint8_t>((input >> shift) & 0xFF);
   80|  14.5M|}
_ZN5Botan8get_byteILm1EjEEhT0_QltT_stS1_:
   77|  14.5M|{
   78|  14.5M|   const size_t shift = ((~B) & (sizeof(T) - 1)) << 3;
   79|  14.5M|   return static_cast<uint8_t>((input >> shift) & 0xFF);
   80|  14.5M|}
_ZN5Botan8get_byteILm0EjEEhT0_QltT_stS1_:
   77|  14.5M|{
   78|  14.5M|   const size_t shift = ((~B) & (sizeof(T) - 1)) << 3;
   79|  14.5M|   return static_cast<uint8_t>((input >> shift) & 0xFF);
   80|  14.5M|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE0ENS0_10AutoDetectETkNS0_20unsigned_integralishEjQoosr3stdE7same_asIS3_T0_Esr3stdE7same_asIT1_S4_EEEvPS5_PKhm:
  450|  1.52k|inline constexpr void load_any(T out[], const uint8_t in[], size_t count) {
  451|       |   // asserts that *in and *out point to the correct amount of memory
  452|  1.52k|   load_any<endianness, OutT>(std::span<T>(out, count), std::span<const uint8_t>(in, count * sizeof(T)));
  453|  1.52k|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE0ENS0_10AutoDetectETkNS_6ranges23contiguous_output_rangeENSt3__14spanIjLm18446744073709551615EEETkNS4_16contiguous_rangeIhEENS6_IKhLm18446744073709551615EEEQaa20unsigned_integralishINS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT1_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISI_EESJ_E4type10value_typeEEoosr3stdE7same_asIS3_T0_Esr3stdE7same_asISP_SO_EEEvOSF_OT2_:
  322|  1.52k|inline constexpr void load_any(OutR&& out, InR&& in) {
  323|  1.52k|   ranges::assert_equal_byte_lengths(out, in);
  324|       |
  325|  1.52k|   auto load_elementwise = [&] {
  326|  1.52k|      using element_type = std::ranges::range_value_t<OutR>;
  327|  1.52k|      constexpr size_t bytes_per_element = sizeof(element_type);
  328|  1.52k|      std::span<const uint8_t> in_s(in);
  329|  1.52k|      for(auto& out_elem : out) {
  330|  1.52k|         out_elem = load_any<endianness, element_type>(in_s.template first<bytes_per_element>());
  331|  1.52k|         in_s = in_s.subspan(bytes_per_element);
  332|  1.52k|      }
  333|  1.52k|   };
  334|       |
  335|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  336|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  337|       |   // in a `constexpr` context.
  338|  1.52k|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (338:7): [Folded, False: 1.52k]
  ------------------
  339|      0|      load_elementwise();
  340|  1.52k|   } else {
  341|       |      if constexpr(is_native(endianness)) {
  342|       |         typecast_copy(out, in);
  343|  1.52k|      } else {
  344|  1.52k|         load_elementwise();
  345|  1.52k|      }
  346|  1.52k|   }
  347|  1.52k|}
_ZZN5Botan6detail8load_anyILNS0_10EndiannessE0ENS0_10AutoDetectETkNS_6ranges23contiguous_output_rangeENSt3__14spanIjLm18446744073709551615EEETkNS4_16contiguous_rangeIhEENS6_IKhLm18446744073709551615EEEQaa20unsigned_integralishINS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT1_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISI_EESJ_E4type10value_typeEEoosr3stdE7same_asIS3_T0_Esr3stdE7same_asISP_SO_EEEvOSF_OT2_ENKUlvE_clEv:
  325|  1.52k|   auto load_elementwise = [&] {
  326|  1.52k|      using element_type = std::ranges::range_value_t<OutR>;
  327|  1.52k|      constexpr size_t bytes_per_element = sizeof(element_type);
  328|  1.52k|      std::span<const uint8_t> in_s(in);
  329|  24.4k|      for(auto& out_elem : out) {
  ------------------
  |  Branch (329:26): [True: 24.4k, False: 1.52k]
  ------------------
  330|  24.4k|         out_elem = load_any<endianness, element_type>(in_s.template first<bytes_per_element>());
  331|  24.4k|         in_s = in_s.subspan(bytes_per_element);
  332|  24.4k|      }
  333|  1.52k|   };
_ZN5Botan6detail8load_anyILNS0_10EndiannessE0ETkNSt3__117unsigned_integralEjTkNS_6ranges16contiguous_rangeIhEENS3_4spanIKhLm4EEEEET0_OT1_:
  248|  3.52M|inline constexpr OutT load_any(InR&& in_range) {
  249|  3.52M|   ranges::assert_exact_byte_length<sizeof(OutT)>(in_range);
  250|  3.52M|   std::span in{in_range};
  251|       |
  252|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  253|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  254|       |   // in a `constexpr` context.
  255|  3.52M|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (255:7): [Folded, False: 3.52M]
  ------------------
  256|      0|      return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  257|  3.52M|   } else {
  258|       |      if constexpr(sizeof(OutT) == 1) {
  259|       |         return static_cast<OutT>(in[0]);
  260|       |      } else if constexpr(is_native(endianness)) {
  261|       |         return typecast_copy<OutT>(in);
  262|  3.52M|      } else if constexpr(is_opposite(endianness)) {
  263|  3.52M|         return reverse_bytes(typecast_copy<OutT>(in));
  264|       |      } else {
  265|       |         static_assert(native_endianness_is_unknown<endianness>());
  266|       |         return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  267|       |      }
  268|  3.52M|   }
  269|  3.52M|}
_ZN5Botan6detail33copy_out_any_word_aligned_portionILNS0_10EndiannessE0ETkNS0_20unsigned_integralishEjEEmRNSt3__14spanIhLm18446744073709551615EEERNS4_IKT0_Lm18446744073709551615EEE:
  718|  49.7k|size_t copy_out_any_word_aligned_portion(std::span<uint8_t>& out, std::span<const T>& in) {
  719|  49.7k|   const size_t full_words = out.size() / sizeof(T);
  720|  49.7k|   const size_t full_word_bytes = full_words * sizeof(T);
  721|  49.7k|   const size_t remaining_bytes = out.size() - full_word_bytes;
  722|  49.7k|   BOTAN_ASSERT_NOMSG(in.size_bytes() >= full_word_bytes + remaining_bytes);
  ------------------
  |  |   60|  49.7k|   do {                                                                     \
  |  |   61|  49.7k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 49.7k]
  |  |  ------------------
  |  |   62|  49.7k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  49.7k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 49.7k]
  |  |  ------------------
  ------------------
  723|       |
  724|       |   // copy full words
  725|  49.7k|   store_any<endianness, T>(out.first(full_word_bytes), in.first(full_words));
  726|  49.7k|   out = out.subspan(full_word_bytes);
  727|  49.7k|   in = in.subspan(full_words);
  728|       |
  729|  49.7k|   return remaining_bytes;
  730|  49.7k|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0EjTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm18446744073709551615EEETkNS3_14spanable_rangeENS6_IKjLm18446744073709551615EEEQoosr3stdE7same_asINS0_10AutoDetectET0_Esr3stdE7same_asISB_NS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT2_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISJ_EESK_E4type10value_typeEEEEvOT1_OSG_:
  569|  49.7k|inline constexpr void store_any(OutR&& out, InR&& in) {
  570|  49.7k|   ranges::assert_equal_byte_lengths(out, in);
  571|       |
  572|  49.7k|   auto store_elementwise = [&] {
  573|  49.7k|      using element_type = std::ranges::range_value_t<InR>;
  574|  49.7k|      constexpr size_t bytes_per_element = sizeof(element_type);
  575|  49.7k|      std::span<uint8_t> out_s(out);
  576|  49.7k|      for(auto in_elem : in) {
  577|  49.7k|         store_any<endianness, element_type>(out_s.template first<bytes_per_element>(), in_elem);
  578|  49.7k|         out_s = out_s.subspan(bytes_per_element);
  579|  49.7k|      }
  580|  49.7k|   };
  581|       |
  582|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  583|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  584|       |   // in a `constexpr` context.
  585|  49.7k|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (585:7): [Folded, False: 49.7k]
  ------------------
  586|      0|      store_elementwise();
  587|  49.7k|   } else {
  588|       |      if constexpr(is_native(endianness)) {
  589|       |         typecast_copy(out, in);
  590|  49.7k|      } else {
  591|  49.7k|         store_elementwise();
  592|  49.7k|      }
  593|  49.7k|   }
  594|  49.7k|}
_ZZN5Botan6detail9store_anyILNS0_10EndiannessE0EjTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm18446744073709551615EEETkNS3_14spanable_rangeENS6_IKjLm18446744073709551615EEEQoosr3stdE7same_asINS0_10AutoDetectET0_Esr3stdE7same_asISB_NS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT2_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISJ_EESK_E4type10value_typeEEEEvOT1_OSG_ENKUlvE_clEv:
  572|  49.7k|   auto store_elementwise = [&] {
  573|  49.7k|      using element_type = std::ranges::range_value_t<InR>;
  574|  49.7k|      constexpr size_t bytes_per_element = sizeof(element_type);
  575|  49.7k|      std::span<uint8_t> out_s(out);
  576|   391k|      for(auto in_elem : in) {
  ------------------
  |  Branch (576:24): [True: 391k, False: 49.7k]
  ------------------
  577|   391k|         store_any<endianness, element_type>(out_s.template first<bytes_per_element>(), in_elem);
  578|   391k|         out_s = out_s.subspan(bytes_per_element);
  579|   391k|      }
  580|  49.7k|   };
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0EjTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm4EEETpTkNS0_20unsigned_integralishEJjEQaagtsZT2_Li0Eooaasr3stdE7same_asINS0_10AutoDetectET0_E10all_same_vIDpT2_Eaa20unsigned_integralishIS9_E10all_same_vIS9_SB_EEEvOT1_SB_:
  548|   391k|inline constexpr void store_any(OutR&& out, Ts... ins) {
  549|   391k|   ranges::assert_exact_byte_length<(sizeof(Ts) + ...)>(out);
  550|   391k|   auto store_one = [off = 0]<typename T>(auto o, T i) mutable {
  551|   391k|      store_any<endianness, T>(i, o.subspan(off).template first<sizeof(T)>());
  552|   391k|      off += sizeof(T);
  553|   391k|   };
  554|       |
  555|   391k|   (store_one(std::span{out}, ins), ...);
  556|   391k|}
_ZZN5Botan6detail9store_anyILNS0_10EndiannessE0EjTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm4EEETpTkNS0_20unsigned_integralishEJjEQaagtsZT2_Li0Eooaasr3stdE7same_asINS0_10AutoDetectET0_E10all_same_vIDpT2_Eaa20unsigned_integralishIS9_E10all_same_vIS9_SB_EEEvOT1_SB_ENUlTyS9_T_E_clIjS7_EEDaS9_SE_:
  550|   391k|   auto store_one = [off = 0]<typename T>(auto o, T i) mutable {
  551|   391k|      store_any<endianness, T>(i, o.subspan(off).template first<sizeof(T)>());
  552|   391k|      off += sizeof(T);
  553|   391k|   };
_ZN5Botan6detail8load_anyILNS0_10EndiannessE0ETkNS0_20unsigned_integralishEjEET0_PKhm:
  421|  3.49M|inline constexpr OutT load_any(const uint8_t in[], size_t off) {
  422|       |   // asserts that *in points to enough bytes to read at offset off
  423|  3.49M|   constexpr size_t out_size = sizeof(OutT);
  424|  3.49M|   return load_any<endianness, OutT>(std::span<const uint8_t, out_size>(in + off * out_size, out_size));
  425|  3.49M|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE0ETkNSt3__117unsigned_integralEmTkNS_6ranges16contiguous_rangeIhEENS3_4spanIKhLm8EEEEET0_OT1_:
  248|  53.5M|inline constexpr OutT load_any(InR&& in_range) {
  249|  53.5M|   ranges::assert_exact_byte_length<sizeof(OutT)>(in_range);
  250|  53.5M|   std::span in{in_range};
  251|       |
  252|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  253|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  254|       |   // in a `constexpr` context.
  255|  53.5M|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (255:7): [Folded, False: 53.5M]
  ------------------
  256|      0|      return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  257|  53.5M|   } else {
  258|       |      if constexpr(sizeof(OutT) == 1) {
  259|       |         return static_cast<OutT>(in[0]);
  260|       |      } else if constexpr(is_native(endianness)) {
  261|       |         return typecast_copy<OutT>(in);
  262|  53.5M|      } else if constexpr(is_opposite(endianness)) {
  263|  53.5M|         return reverse_bytes(typecast_copy<OutT>(in));
  264|       |      } else {
  265|       |         static_assert(native_endianness_is_unknown<endianness>());
  266|       |         return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  267|       |      }
  268|  53.5M|   }
  269|  53.5M|}
_ZN5Botan7load_beImJPKhiEEEDaDpOT0_:
  471|  53.5M|inline constexpr auto load_be(ParamTs&&... params) {
  472|  53.5M|   return detail::load_any<detail::Endianness::Big, OutT>(std::forward<ParamTs>(params)...);
  473|  53.5M|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE0ETkNS0_20unsigned_integralishEmEET0_PKhm:
  421|  53.5M|inline constexpr OutT load_any(const uint8_t in[], size_t off) {
  422|       |   // asserts that *in points to enough bytes to read at offset off
  423|  53.5M|   constexpr size_t out_size = sizeof(OutT);
  424|  53.5M|   return load_any<endianness, OutT>(std::span<const uint8_t, out_size>(in + off * out_size, out_size));
  425|  53.5M|}
_ZN5Botan7load_beIjJPKhiEEEDaDpOT0_:
  471|  3.49M|inline constexpr auto load_be(ParamTs&&... params) {
  472|  3.49M|   return detail::load_any<detail::Endianness::Big, OutT>(std::forward<ParamTs>(params)...);
  473|  3.49M|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE1ETkNSt3__117unsigned_integralEjTkNS_6ranges16contiguous_rangeIhEENS3_4spanIKhLm4EEEEET0_OT1_:
  248|   385k|inline constexpr OutT load_any(InR&& in_range) {
  249|   385k|   ranges::assert_exact_byte_length<sizeof(OutT)>(in_range);
  250|   385k|   std::span in{in_range};
  251|       |
  252|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  253|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  254|       |   // in a `constexpr` context.
  255|   385k|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (255:7): [Folded, False: 385k]
  ------------------
  256|      0|      return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  257|   385k|   } else {
  258|       |      if constexpr(sizeof(OutT) == 1) {
  259|       |         return static_cast<OutT>(in[0]);
  260|   385k|      } else if constexpr(is_native(endianness)) {
  261|   385k|         return typecast_copy<OutT>(in);
  262|       |      } else if constexpr(is_opposite(endianness)) {
  263|       |         return reverse_bytes(typecast_copy<OutT>(in));
  264|       |      } else {
  265|       |         static_assert(native_endianness_is_unknown<endianness>());
  266|       |         return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  267|       |      }
  268|   385k|   }
  269|   385k|}
_ZN5Botan7load_leINS_6detail10AutoDetectEJRA4_jPKhiEEEDaDpOT0_:
  462|  3.63M|inline constexpr auto load_le(ParamTs&&... params) {
  463|  3.63M|   return detail::load_any<detail::Endianness::Little, OutT>(std::forward<ParamTs>(params)...);
  464|  3.63M|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE1ENS0_10AutoDetectETkNS0_20unsigned_integralishEjQoosr3stdE7same_asIS3_T0_Esr3stdE7same_asIT1_S4_EEEvPS5_PKhm:
  450|  3.67M|inline constexpr void load_any(T out[], const uint8_t in[], size_t count) {
  451|       |   // asserts that *in and *out point to the correct amount of memory
  452|  3.67M|   load_any<endianness, OutT>(std::span<T>(out, count), std::span<const uint8_t>(in, count * sizeof(T)));
  453|  3.67M|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE1ENS0_10AutoDetectETkNS_6ranges23contiguous_output_rangeENSt3__14spanIjLm18446744073709551615EEETkNS4_16contiguous_rangeIhEENS6_IKhLm18446744073709551615EEEQaa20unsigned_integralishINS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT1_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISI_EESJ_E4type10value_typeEEoosr3stdE7same_asIS3_T0_Esr3stdE7same_asISP_SO_EEEvOSF_OT2_:
  322|  3.67M|inline constexpr void load_any(OutR&& out, InR&& in) {
  323|  3.67M|   ranges::assert_equal_byte_lengths(out, in);
  324|       |
  325|  3.67M|   auto load_elementwise = [&] {
  326|  3.67M|      using element_type = std::ranges::range_value_t<OutR>;
  327|  3.67M|      constexpr size_t bytes_per_element = sizeof(element_type);
  328|  3.67M|      std::span<const uint8_t> in_s(in);
  329|  3.67M|      for(auto& out_elem : out) {
  330|  3.67M|         out_elem = load_any<endianness, element_type>(in_s.template first<bytes_per_element>());
  331|  3.67M|         in_s = in_s.subspan(bytes_per_element);
  332|  3.67M|      }
  333|  3.67M|   };
  334|       |
  335|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  336|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  337|       |   // in a `constexpr` context.
  338|  3.67M|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (338:7): [Folded, False: 3.67M]
  ------------------
  339|      0|      load_elementwise();
  340|  3.67M|   } else {
  341|  3.67M|      if constexpr(is_native(endianness)) {
  342|  3.67M|         typecast_copy(out, in);
  343|       |      } else {
  344|       |         load_elementwise();
  345|       |      }
  346|  3.67M|   }
  347|  3.67M|}
_ZN5Botan7load_leINS_6detail10AutoDetectEJPjPKhmEEEDaDpOT0_:
  462|  40.4k|inline constexpr auto load_le(ParamTs&&... params) {
  463|  40.4k|   return detail::load_any<detail::Endianness::Little, OutT>(std::forward<ParamTs>(params)...);
  464|  40.4k|}
_ZN5Botan8store_leINS_6detail10AutoDetectEJRKmPhEEEDaDpOT0_:
  702|  19.3k|inline constexpr auto store_le(ParamTs&&... params) {
  703|  19.3k|   return detail::store_any<detail::Endianness::Little, ModifierT>(std::forward<ParamTs>(params)...);
  704|  19.3k|}
_ZN5Botan11copy_out_leITkNS_6ranges14spanable_rangeERNSt3__16vectorIjNS_16secure_allocatorIjEEEEEEvNS2_4spanIhLm18446744073709551615EEEOT_:
  755|  19.3k|void copy_out_le(std::span<uint8_t> out, InR&& in) {
  756|  19.3k|   using T = std::ranges::range_value_t<InR>;
  757|  19.3k|   std::span<const T> in_s{in};
  758|  19.3k|   const auto remaining_bytes = detail::copy_out_any_word_aligned_portion<detail::Endianness::Little>(out, in_s);
  759|       |
  760|       |   // copy remaining bytes as a partial word
  761|  19.3k|   for(size_t i = 0; i < remaining_bytes; ++i) {
  ------------------
  |  Branch (761:22): [True: 0, False: 19.3k]
  ------------------
  762|      0|      out[i] = get_byte_var(sizeof(T) - 1 - i, in_s.front());
  763|      0|   }
  764|  19.3k|}
_ZN5Botan6detail33copy_out_any_word_aligned_portionILNS0_10EndiannessE1ETkNS0_20unsigned_integralishEjEEmRNSt3__14spanIhLm18446744073709551615EEERNS4_IKT0_Lm18446744073709551615EEE:
  718|  19.3k|size_t copy_out_any_word_aligned_portion(std::span<uint8_t>& out, std::span<const T>& in) {
  719|  19.3k|   const size_t full_words = out.size() / sizeof(T);
  720|  19.3k|   const size_t full_word_bytes = full_words * sizeof(T);
  721|  19.3k|   const size_t remaining_bytes = out.size() - full_word_bytes;
  722|  19.3k|   BOTAN_ASSERT_NOMSG(in.size_bytes() >= full_word_bytes + remaining_bytes);
  ------------------
  |  |   60|  19.3k|   do {                                                                     \
  |  |   61|  19.3k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 19.3k]
  |  |  ------------------
  |  |   62|  19.3k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  19.3k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 19.3k]
  |  |  ------------------
  ------------------
  723|       |
  724|       |   // copy full words
  725|  19.3k|   store_any<endianness, T>(out.first(full_word_bytes), in.first(full_words));
  726|  19.3k|   out = out.subspan(full_word_bytes);
  727|  19.3k|   in = in.subspan(full_words);
  728|       |
  729|  19.3k|   return remaining_bytes;
  730|  19.3k|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE1EjTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm18446744073709551615EEETkNS3_14spanable_rangeENS6_IKjLm18446744073709551615EEEQoosr3stdE7same_asINS0_10AutoDetectET0_Esr3stdE7same_asISB_NS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT2_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISJ_EESK_E4type10value_typeEEEEvOT1_OSG_:
  569|  19.3k|inline constexpr void store_any(OutR&& out, InR&& in) {
  570|  19.3k|   ranges::assert_equal_byte_lengths(out, in);
  571|       |
  572|  19.3k|   auto store_elementwise = [&] {
  573|  19.3k|      using element_type = std::ranges::range_value_t<InR>;
  574|  19.3k|      constexpr size_t bytes_per_element = sizeof(element_type);
  575|  19.3k|      std::span<uint8_t> out_s(out);
  576|  19.3k|      for(auto in_elem : in) {
  577|  19.3k|         store_any<endianness, element_type>(out_s.template first<bytes_per_element>(), in_elem);
  578|  19.3k|         out_s = out_s.subspan(bytes_per_element);
  579|  19.3k|      }
  580|  19.3k|   };
  581|       |
  582|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  583|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  584|       |   // in a `constexpr` context.
  585|  19.3k|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (585:7): [Folded, False: 19.3k]
  ------------------
  586|      0|      store_elementwise();
  587|  19.3k|   } else {
  588|  19.3k|      if constexpr(is_native(endianness)) {
  589|  19.3k|         typecast_copy(out, in);
  590|       |      } else {
  591|       |         store_elementwise();
  592|       |      }
  593|  19.3k|   }
  594|  19.3k|}
_ZN5Botan7load_beINS_6detail10AutoDetectEJPjPKhiEEEDaDpOT0_:
  471|  1.52k|inline constexpr auto load_be(ParamTs&&... params) {
  472|  1.52k|   return detail::load_any<detail::Endianness::Big, OutT>(std::forward<ParamTs>(params)...);
  473|  1.52k|}
_ZN5Botan8store_beINS_6detail10AutoDetectEJRKmPhEEEDaDpOT0_:
  711|  1.77M|inline constexpr auto store_be(ParamTs&&... params) {
  712|  1.77M|   return detail::store_any<detail::Endianness::Big, ModifierT>(std::forward<ParamTs>(params)...);
  713|  1.77M|}
_ZN5Botan11copy_out_beITkNS_6ranges14spanable_rangeERNSt3__16vectorIjNS_16secure_allocatorIjEEEEEEvNS2_4spanIhLm18446744073709551615EEEOT_:
  739|  49.7k|void copy_out_be(std::span<uint8_t> out, InR&& in) {
  740|  49.7k|   using T = std::ranges::range_value_t<InR>;
  741|  49.7k|   std::span<const T> in_s{in};
  742|  49.7k|   const auto remaining_bytes = detail::copy_out_any_word_aligned_portion<detail::Endianness::Big>(out, in_s);
  743|       |
  744|       |   // copy remaining bytes as a partial word
  745|  49.7k|   for(size_t i = 0; i < remaining_bytes; ++i) {
  ------------------
  |  Branch (745:22): [True: 0, False: 49.7k]
  ------------------
  746|      0|      out[i] = get_byte_var(i, in_s.front());
  747|      0|   }
  748|  49.7k|}
_ZN5Botan11copy_out_beITkNS_6ranges14spanable_rangeERNSt3__16vectorImNS_16secure_allocatorImEEEEEEvNS2_4spanIhLm18446744073709551615EEEOT_:
  739|  1.41M|void copy_out_be(std::span<uint8_t> out, InR&& in) {
  740|  1.41M|   using T = std::ranges::range_value_t<InR>;
  741|  1.41M|   std::span<const T> in_s{in};
  742|  1.41M|   const auto remaining_bytes = detail::copy_out_any_word_aligned_portion<detail::Endianness::Big>(out, in_s);
  743|       |
  744|       |   // copy remaining bytes as a partial word
  745|  1.41M|   for(size_t i = 0; i < remaining_bytes; ++i) {
  ------------------
  |  Branch (745:22): [True: 0, False: 1.41M]
  ------------------
  746|      0|      out[i] = get_byte_var(i, in_s.front());
  747|      0|   }
  748|  1.41M|}
_ZN5Botan6detail33copy_out_any_word_aligned_portionILNS0_10EndiannessE0ETkNS0_20unsigned_integralishEmEEmRNSt3__14spanIhLm18446744073709551615EEERNS4_IKT0_Lm18446744073709551615EEE:
  718|  1.41M|size_t copy_out_any_word_aligned_portion(std::span<uint8_t>& out, std::span<const T>& in) {
  719|  1.41M|   const size_t full_words = out.size() / sizeof(T);
  720|  1.41M|   const size_t full_word_bytes = full_words * sizeof(T);
  721|  1.41M|   const size_t remaining_bytes = out.size() - full_word_bytes;
  722|  1.41M|   BOTAN_ASSERT_NOMSG(in.size_bytes() >= full_word_bytes + remaining_bytes);
  ------------------
  |  |   60|  1.41M|   do {                                                                     \
  |  |   61|  1.41M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 1.41M]
  |  |  ------------------
  |  |   62|  1.41M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  1.41M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 1.41M]
  |  |  ------------------
  ------------------
  723|       |
  724|       |   // copy full words
  725|  1.41M|   store_any<endianness, T>(out.first(full_word_bytes), in.first(full_words));
  726|  1.41M|   out = out.subspan(full_word_bytes);
  727|  1.41M|   in = in.subspan(full_words);
  728|       |
  729|  1.41M|   return remaining_bytes;
  730|  1.41M|}
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0EmTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm18446744073709551615EEETkNS3_14spanable_rangeENS6_IKmLm18446744073709551615EEEQoosr3stdE7same_asINS0_10AutoDetectET0_Esr3stdE7same_asISB_NS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT2_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISJ_EESK_E4type10value_typeEEEEvOT1_OSG_:
  569|  1.41M|inline constexpr void store_any(OutR&& out, InR&& in) {
  570|  1.41M|   ranges::assert_equal_byte_lengths(out, in);
  571|       |
  572|  1.41M|   auto store_elementwise = [&] {
  573|  1.41M|      using element_type = std::ranges::range_value_t<InR>;
  574|  1.41M|      constexpr size_t bytes_per_element = sizeof(element_type);
  575|  1.41M|      std::span<uint8_t> out_s(out);
  576|  1.41M|      for(auto in_elem : in) {
  577|  1.41M|         store_any<endianness, element_type>(out_s.template first<bytes_per_element>(), in_elem);
  578|  1.41M|         out_s = out_s.subspan(bytes_per_element);
  579|  1.41M|      }
  580|  1.41M|   };
  581|       |
  582|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  583|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  584|       |   // in a `constexpr` context.
  585|  1.41M|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (585:7): [Folded, False: 1.41M]
  ------------------
  586|      0|      store_elementwise();
  587|  1.41M|   } else {
  588|       |      if constexpr(is_native(endianness)) {
  589|       |         typecast_copy(out, in);
  590|  1.41M|      } else {
  591|  1.41M|         store_elementwise();
  592|  1.41M|      }
  593|  1.41M|   }
  594|  1.41M|}
_ZZN5Botan6detail9store_anyILNS0_10EndiannessE0EmTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm18446744073709551615EEETkNS3_14spanable_rangeENS6_IKmLm18446744073709551615EEEQoosr3stdE7same_asINS0_10AutoDetectET0_Esr3stdE7same_asISB_NS5_11conditionalIXsr21__is_primary_templateINS5_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS5_6ranges5__cpo5beginEEclsr3stdE7declvalIRT2_EEEEEEEEE5valueENS5_26indirectly_readable_traitsISJ_EESK_E4type10value_typeEEEEvOT1_OSG_ENKUlvE_clEv:
  572|  1.41M|   auto store_elementwise = [&] {
  573|  1.41M|      using element_type = std::ranges::range_value_t<InR>;
  574|  1.41M|      constexpr size_t bytes_per_element = sizeof(element_type);
  575|  1.41M|      std::span<uint8_t> out_s(out);
  576|  11.2M|      for(auto in_elem : in) {
  ------------------
  |  Branch (576:24): [True: 11.2M, False: 1.41M]
  ------------------
  577|  11.2M|         store_any<endianness, element_type>(out_s.template first<bytes_per_element>(), in_elem);
  578|  11.2M|         out_s = out_s.subspan(bytes_per_element);
  579|  11.2M|      }
  580|  1.41M|   };
_ZN5Botan6detail9store_anyILNS0_10EndiannessE0EmTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm8EEETpTkNS0_20unsigned_integralishEJmEQaagtsZT2_Li0Eooaasr3stdE7same_asINS0_10AutoDetectET0_E10all_same_vIDpT2_Eaa20unsigned_integralishIS9_E10all_same_vIS9_SB_EEEvOT1_SB_:
  548|  11.2M|inline constexpr void store_any(OutR&& out, Ts... ins) {
  549|  11.2M|   ranges::assert_exact_byte_length<(sizeof(Ts) + ...)>(out);
  550|  11.2M|   auto store_one = [off = 0]<typename T>(auto o, T i) mutable {
  551|  11.2M|      store_any<endianness, T>(i, o.subspan(off).template first<sizeof(T)>());
  552|  11.2M|      off += sizeof(T);
  553|  11.2M|   };
  554|       |
  555|  11.2M|   (store_one(std::span{out}, ins), ...);
  556|  11.2M|}
_ZZN5Botan6detail9store_anyILNS0_10EndiannessE0EmTkNS_6ranges23contiguous_output_rangeIhEENSt3__14spanIhLm8EEETpTkNS0_20unsigned_integralishEJmEQaagtsZT2_Li0Eooaasr3stdE7same_asINS0_10AutoDetectET0_E10all_same_vIDpT2_Eaa20unsigned_integralishIS9_E10all_same_vIS9_SB_EEEvOT1_SB_ENUlTyS9_T_E_clImS7_EEDaS9_SE_:
  550|  11.2M|   auto store_one = [off = 0]<typename T>(auto o, T i) mutable {
  551|  11.2M|      store_any<endianness, T>(i, o.subspan(off).template first<sizeof(T)>());
  552|  11.2M|      off += sizeof(T);
  553|  11.2M|   };
_ZN5Botan6detail8load_anyILNS0_10EndiannessE1ETkNS0_20unsigned_integralishEjEET0_PKhm:
  421|   385k|inline constexpr OutT load_any(const uint8_t in[], size_t off) {
  422|       |   // asserts that *in points to enough bytes to read at offset off
  423|   385k|   constexpr size_t out_size = sizeof(OutT);
  424|   385k|   return load_any<endianness, OutT>(std::span<const uint8_t, out_size>(in + off * out_size, out_size));
  425|   385k|}
_ZN5Botan7load_leImJPKhiEEEDaDpOT0_:
  462|   289k|inline constexpr auto load_le(ParamTs&&... params) {
  463|   289k|   return detail::load_any<detail::Endianness::Little, OutT>(std::forward<ParamTs>(params)...);
  464|   289k|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE1ETkNS0_20unsigned_integralishEmEET0_PKhm:
  421|   289k|inline constexpr OutT load_any(const uint8_t in[], size_t off) {
  422|       |   // asserts that *in points to enough bytes to read at offset off
  423|   289k|   constexpr size_t out_size = sizeof(OutT);
  424|   289k|   return load_any<endianness, OutT>(std::span<const uint8_t, out_size>(in + off * out_size, out_size));
  425|   289k|}
_ZN5Botan6detail8load_anyILNS0_10EndiannessE1ETkNSt3__117unsigned_integralEmTkNS_6ranges16contiguous_rangeIhEENS3_4spanIKhLm8EEEEET0_OT1_:
  248|   289k|inline constexpr OutT load_any(InR&& in_range) {
  249|   289k|   ranges::assert_exact_byte_length<sizeof(OutT)>(in_range);
  250|   289k|   std::span in{in_range};
  251|       |
  252|       |   // At compile time we cannot use `typecast_copy` as it uses `std::memcpy`
  253|       |   // internally to copy ranges on a byte-by-byte basis, which is not allowed
  254|       |   // in a `constexpr` context.
  255|   289k|   if(std::is_constant_evaluated()) /* TODO: C++23: if consteval {} */ {
  ------------------
  |  Branch (255:7): [Folded, False: 289k]
  ------------------
  256|      0|      return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  257|   289k|   } else {
  258|       |      if constexpr(sizeof(OutT) == 1) {
  259|       |         return static_cast<OutT>(in[0]);
  260|   289k|      } else if constexpr(is_native(endianness)) {
  261|   289k|         return typecast_copy<OutT>(in);
  262|       |      } else if constexpr(is_opposite(endianness)) {
  263|       |         return reverse_bytes(typecast_copy<OutT>(in));
  264|       |      } else {
  265|       |         static_assert(native_endianness_is_unknown<endianness>());
  266|       |         return fallback_load_any<endianness, OutT>(std::forward<InR>(in_range));
  267|       |      }
  268|   289k|   }
  269|   289k|}
_ZN5Botan8store_leINS_6detail10AutoDetectEJRmPhEEEDaDpOT0_:
  702|  59.7k|inline constexpr auto store_le(ParamTs&&... params) {
  703|  59.7k|   return detail::store_any<detail::Endianness::Little, ModifierT>(std::forward<ParamTs>(params)...);
  704|  59.7k|}
_ZN5Botan7load_leIjJRPKhiEEEDaDpOT0_:
  462|   385k|inline constexpr auto load_le(ParamTs&&... params) {
  463|   385k|   return detail::load_any<detail::Endianness::Little, OutT>(std::forward<ParamTs>(params)...);
  464|   385k|}

_ZNK5Botan3MD54nameEv:
   32|  3.97k|      std::string name() const override { return "MD5"; }
_ZNK5Botan3MD513output_lengthEv:
   34|  21.0k|      size_t output_length() const override { return output_bytes; }

_ZN5Botan18MerkleDamgard_HashINS_5SHA_1EEC2Ev:
   42|  2.04k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_5SHA_1EE5clearEv:
   70|  2.42k|      void clear() {
   71|  2.42k|         MD::init(m_digest);
   72|  2.42k|         m_buffer.clear();
   73|  2.42k|         m_count = 0;
   74|  2.42k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_224EEC2Ev:
   42|  8.88k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_224EE5clearEv:
   70|  13.6k|      void clear() {
   71|  13.6k|         MD::init(m_digest);
   72|  13.6k|         m_buffer.clear();
   73|  13.6k|         m_count = 0;
   74|  13.6k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_256EEC2Ev:
   42|  54.4k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_256EE5clearEv:
   70|  93.2k|      void clear() {
   71|  93.2k|         MD::init(m_digest);
   72|  93.2k|         m_buffer.clear();
   73|  93.2k|         m_count = 0;
   74|  93.2k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_384EEC2Ev:
   42|  25.0k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_384EE5clearEv:
   70|  38.2k|      void clear() {
   71|  38.2k|         MD::init(m_digest);
   72|  38.2k|         m_buffer.clear();
   73|  38.2k|         m_count = 0;
   74|  38.2k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_512EEC2Ev:
   42|   158k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_512EE5clearEv:
   70|  1.94M|      void clear() {
   71|  1.94M|         MD::init(m_digest);
   72|  1.94M|         m_buffer.clear();
   73|  1.94M|         m_count = 0;
   74|  1.94M|      }
_ZN5Botan18MerkleDamgard_HashINS_10RIPEMD_160EEC2Ev:
   42|  3.89k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_10RIPEMD_160EE5clearEv:
   70|  6.17k|      void clear() {
   71|  6.17k|         MD::init(m_digest);
   72|  6.17k|         m_buffer.clear();
   73|  6.17k|         m_count = 0;
   74|  6.17k|      }
_ZN5Botan18MerkleDamgard_HashINS_3MD5EEC2Ev:
   42|  21.0k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_3MD5EE5clearEv:
   70|  38.0k|      void clear() {
   71|  38.0k|         MD::init(m_digest);
   72|  38.0k|         m_buffer.clear();
   73|  38.0k|         m_count = 0;
   74|  38.0k|      }
_ZN5Botan18MerkleDamgard_HashINS_3SM3EEC2Ev:
   42|  7.73k|      MerkleDamgard_Hash() { clear(); }
_ZN5Botan18MerkleDamgard_HashINS_3SM3EE5clearEv:
   70|  13.4k|      void clear() {
   71|  13.4k|         MD::init(m_digest);
   72|  13.4k|         m_buffer.clear();
   73|  13.4k|         m_count = 0;
   74|  13.4k|      }
_ZN5Botan18MerkleDamgard_HashINS_3MD5EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|  81.5k|      void update(std::span<const uint8_t> input) {
   45|  81.5k|         BufferSlicer in(input);
   46|       |
   47|   175k|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 93.6k, False: 81.5k]
  ------------------
   48|  93.6k|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 12.4k, False: 81.2k]
  ------------------
   49|  12.4k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  12.4k|            }
   51|       |
   52|  93.6k|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 12.4k, False: 81.2k]
  ------------------
   53|  12.4k|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  12.4k|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 252, False: 12.1k]
  ------------------
   55|    252|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|    252|               }
   57|  12.4k|            }
   58|  93.6k|         }
   59|       |
   60|  81.5k|         m_count += input.size();
   61|  81.5k|      }
_ZN5Botan18MerkleDamgard_HashINS_3MD5EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|  17.0k|      void final(std::span<uint8_t> output) {
   64|  17.0k|         append_padding_bit();
   65|  17.0k|         append_counter_and_finalize();
   66|  17.0k|         copy_output(output);
   67|  17.0k|         clear();
   68|  17.0k|      }
_ZN5Botan18MerkleDamgard_HashINS_3MD5EE18append_padding_bitEv:
   77|  17.0k|      void append_padding_bit() {
   78|  17.0k|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|  17.0k|   do {                                                                     \
  |  |   61|  17.0k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 17.0k]
  |  |  ------------------
  |  |   62|  17.0k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  17.0k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 17.0k]
  |  |  ------------------
  ------------------
   79|  17.0k|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|  17.0k|            const uint8_t final_byte = 0x80;
   81|  17.0k|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|  17.0k|      }
_ZN5Botan18MerkleDamgard_HashINS_3MD5EE27append_counter_and_finalizeEv:
   88|  17.0k|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|  17.0k|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 2.29k, False: 14.7k]
  ------------------
   92|  2.29k|            m_buffer.fill_up_with_zeros();
   93|  2.29k|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|  2.29k|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|  17.0k|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|  17.0k|   do {                                                                     \
  |  |   61|  17.0k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 17.0k]
  |  |  ------------------
  |  |   62|  17.0k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  17.0k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 17.0k]
  |  |  ------------------
  ------------------
   98|  17.0k|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|  17.0k|         const uint64_t bit_count = m_count * 8;
  102|  17.0k|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|       |         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|       |            store_be(bit_count, last_bytes.data());
  105|  17.0k|         } else {
  106|  17.0k|            store_le(bit_count, last_bytes.data());
  107|  17.0k|         }
  108|       |
  109|       |         // Compress the very last block.
  110|  17.0k|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|  17.0k|      }
_ZN5Botan18MerkleDamgard_HashINS_3MD5EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|  17.0k|      void copy_output(std::span<uint8_t> output) {
  114|  17.0k|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|  17.0k|   do {                                                                     \
  |  |   61|  17.0k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 17.0k]
  |  |  ------------------
  |  |   62|  17.0k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  17.0k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 17.0k]
  |  |  ------------------
  ------------------
  115|       |
  116|       |         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|       |            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|  17.0k|         } else {
  119|  17.0k|            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|  17.0k|         }
  121|  17.0k|      }
_ZN5Botan18MerkleDamgard_HashINS_10RIPEMD_160EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|  11.0k|      void update(std::span<const uint8_t> input) {
   45|  11.0k|         BufferSlicer in(input);
   46|       |
   47|  25.9k|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 14.8k, False: 11.0k]
  ------------------
   48|  14.8k|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 4.14k, False: 10.7k]
  ------------------
   49|  4.14k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  4.14k|            }
   51|       |
   52|  14.8k|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 4.16k, False: 10.6k]
  ------------------
   53|  4.16k|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  4.16k|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 421, False: 3.74k]
  ------------------
   55|    421|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|    421|               }
   57|  4.16k|            }
   58|  14.8k|         }
   59|       |
   60|  11.0k|         m_count += input.size();
   61|  11.0k|      }
_ZN5Botan18MerkleDamgard_HashINS_10RIPEMD_160EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|  2.28k|      void final(std::span<uint8_t> output) {
   64|  2.28k|         append_padding_bit();
   65|  2.28k|         append_counter_and_finalize();
   66|  2.28k|         copy_output(output);
   67|  2.28k|         clear();
   68|  2.28k|      }
_ZN5Botan18MerkleDamgard_HashINS_10RIPEMD_160EE18append_padding_bitEv:
   77|  2.28k|      void append_padding_bit() {
   78|  2.28k|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|  2.28k|   do {                                                                     \
  |  |   61|  2.28k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 2.28k]
  |  |  ------------------
  |  |   62|  2.28k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  2.28k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
   79|  2.28k|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|  2.28k|            const uint8_t final_byte = 0x80;
   81|  2.28k|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|  2.28k|      }
_ZN5Botan18MerkleDamgard_HashINS_10RIPEMD_160EE27append_counter_and_finalizeEv:
   88|  2.28k|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|  2.28k|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 527, False: 1.75k]
  ------------------
   92|    527|            m_buffer.fill_up_with_zeros();
   93|    527|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|    527|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|  2.28k|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|  2.28k|   do {                                                                     \
  |  |   61|  2.28k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 2.28k]
  |  |  ------------------
  |  |   62|  2.28k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  2.28k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
   98|  2.28k|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|  2.28k|         const uint64_t bit_count = m_count * 8;
  102|  2.28k|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|       |         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|       |            store_be(bit_count, last_bytes.data());
  105|  2.28k|         } else {
  106|  2.28k|            store_le(bit_count, last_bytes.data());
  107|  2.28k|         }
  108|       |
  109|       |         // Compress the very last block.
  110|  2.28k|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|  2.28k|      }
_ZN5Botan18MerkleDamgard_HashINS_10RIPEMD_160EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|  2.28k|      void copy_output(std::span<uint8_t> output) {
  114|  2.28k|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|  2.28k|   do {                                                                     \
  |  |   61|  2.28k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 2.28k]
  |  |  ------------------
  |  |   62|  2.28k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  2.28k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 2.28k]
  |  |  ------------------
  ------------------
  115|       |
  116|       |         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|       |            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|  2.28k|         } else {
  119|  2.28k|            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|  2.28k|         }
  121|  2.28k|      }
_ZN5Botan18MerkleDamgard_HashINS_5SHA_1EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|  3.43k|      void update(std::span<const uint8_t> input) {
   45|  3.43k|         BufferSlicer in(input);
   46|       |
   47|  8.02k|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 4.58k, False: 3.43k]
  ------------------
   48|  4.58k|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 1.14k, False: 3.43k]
  ------------------
   49|  1.14k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  1.14k|            }
   51|       |
   52|  4.58k|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 1.14k, False: 3.43k]
  ------------------
   53|  1.14k|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  1.14k|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 0, False: 1.14k]
  ------------------
   55|      0|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|      0|               }
   57|  1.14k|            }
   58|  4.58k|         }
   59|       |
   60|  3.43k|         m_count += input.size();
   61|  3.43k|      }
_ZN5Botan18MerkleDamgard_HashINS_5SHA_1EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|    382|      void final(std::span<uint8_t> output) {
   64|    382|         append_padding_bit();
   65|    382|         append_counter_and_finalize();
   66|    382|         copy_output(output);
   67|    382|         clear();
   68|    382|      }
_ZN5Botan18MerkleDamgard_HashINS_5SHA_1EE18append_padding_bitEv:
   77|    382|      void append_padding_bit() {
   78|    382|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|    382|   do {                                                                     \
  |  |   61|    382|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 382]
  |  |  ------------------
  |  |   62|    382|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|    382|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 382]
  |  |  ------------------
  ------------------
   79|    382|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|    382|            const uint8_t final_byte = 0x80;
   81|    382|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|    382|      }
_ZN5Botan18MerkleDamgard_HashINS_5SHA_1EE27append_counter_and_finalizeEv:
   88|    382|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|    382|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 0, False: 382]
  ------------------
   92|      0|            m_buffer.fill_up_with_zeros();
   93|      0|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|      0|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|    382|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|    382|   do {                                                                     \
  |  |   61|    382|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 382]
  |  |  ------------------
  |  |   62|    382|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|    382|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 382]
  |  |  ------------------
  ------------------
   98|    382|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|    382|         const uint64_t bit_count = m_count * 8;
  102|    382|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|    382|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|    382|            store_be(bit_count, last_bytes.data());
  105|       |         } else {
  106|       |            store_le(bit_count, last_bytes.data());
  107|       |         }
  108|       |
  109|       |         // Compress the very last block.
  110|    382|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|    382|      }
_ZN5Botan18MerkleDamgard_HashINS_5SHA_1EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|    382|      void copy_output(std::span<uint8_t> output) {
  114|    382|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|    382|   do {                                                                     \
  |  |   61|    382|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 382]
  |  |  ------------------
  |  |   62|    382|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|    382|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 382]
  |  |  ------------------
  ------------------
  115|       |
  116|    382|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|    382|            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|       |         } else {
  119|       |            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|       |         }
  121|    382|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_224EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|  16.7k|      void update(std::span<const uint8_t> input) {
   45|  16.7k|         BufferSlicer in(input);
   46|       |
   47|  34.7k|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 18.0k, False: 16.7k]
  ------------------
   48|  18.0k|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 1.79k, False: 16.2k]
  ------------------
   49|  1.79k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  1.79k|            }
   51|       |
   52|  18.0k|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 1.81k, False: 16.2k]
  ------------------
   53|  1.81k|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  1.81k|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 130, False: 1.68k]
  ------------------
   55|    130|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|    130|               }
   57|  1.81k|            }
   58|  18.0k|         }
   59|       |
   60|  16.7k|         m_count += input.size();
   61|  16.7k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_224EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|  4.81k|      void final(std::span<uint8_t> output) {
   64|  4.81k|         append_padding_bit();
   65|  4.81k|         append_counter_and_finalize();
   66|  4.81k|         copy_output(output);
   67|  4.81k|         clear();
   68|  4.81k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_224EE18append_padding_bitEv:
   77|  4.81k|      void append_padding_bit() {
   78|  4.81k|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|  4.81k|   do {                                                                     \
  |  |   61|  4.81k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 4.81k]
  |  |  ------------------
  |  |   62|  4.81k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  4.81k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 4.81k]
  |  |  ------------------
  ------------------
   79|  4.81k|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|  4.81k|            const uint8_t final_byte = 0x80;
   81|  4.81k|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|  4.81k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_224EE27append_counter_and_finalizeEv:
   88|  4.81k|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|  4.81k|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 366, False: 4.44k]
  ------------------
   92|    366|            m_buffer.fill_up_with_zeros();
   93|    366|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|    366|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|  4.81k|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|  4.81k|   do {                                                                     \
  |  |   61|  4.81k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 4.81k]
  |  |  ------------------
  |  |   62|  4.81k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  4.81k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 4.81k]
  |  |  ------------------
  ------------------
   98|  4.81k|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|  4.81k|         const uint64_t bit_count = m_count * 8;
  102|  4.81k|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|  4.81k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|  4.81k|            store_be(bit_count, last_bytes.data());
  105|       |         } else {
  106|       |            store_le(bit_count, last_bytes.data());
  107|       |         }
  108|       |
  109|       |         // Compress the very last block.
  110|  4.81k|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|  4.81k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_224EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|  4.81k|      void copy_output(std::span<uint8_t> output) {
  114|  4.81k|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|  4.81k|   do {                                                                     \
  |  |   61|  4.81k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 4.81k]
  |  |  ------------------
  |  |   62|  4.81k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  4.81k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 4.81k]
  |  |  ------------------
  ------------------
  115|       |
  116|  4.81k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|  4.81k|            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|       |         } else {
  119|       |            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|       |         }
  121|  4.81k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_256EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|   162k|      void update(std::span<const uint8_t> input) {
   45|   162k|         BufferSlicer in(input);
   46|       |
   47|   376k|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 214k, False: 162k]
  ------------------
   48|   214k|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 58.8k, False: 155k]
  ------------------
   49|  58.8k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  58.8k|            }
   51|       |
   52|   214k|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 58.9k, False: 155k]
  ------------------
   53|  58.9k|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  58.9k|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 6.76k, False: 52.1k]
  ------------------
   55|  6.76k|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|  6.76k|               }
   57|  58.9k|            }
   58|   214k|         }
   59|       |
   60|   162k|         m_count += input.size();
   61|   162k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_256EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|  38.7k|      void final(std::span<uint8_t> output) {
   64|  38.7k|         append_padding_bit();
   65|  38.7k|         append_counter_and_finalize();
   66|  38.7k|         copy_output(output);
   67|  38.7k|         clear();
   68|  38.7k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_256EE18append_padding_bitEv:
   77|  38.7k|      void append_padding_bit() {
   78|  38.7k|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|  38.7k|   do {                                                                     \
  |  |   61|  38.7k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 38.7k]
  |  |  ------------------
  |  |   62|  38.7k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  38.7k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 38.7k]
  |  |  ------------------
  ------------------
   79|  38.7k|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|  38.7k|            const uint8_t final_byte = 0x80;
   81|  38.7k|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|  38.7k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_256EE27append_counter_and_finalizeEv:
   88|  38.7k|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|  38.7k|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 1.36k, False: 37.4k]
  ------------------
   92|  1.36k|            m_buffer.fill_up_with_zeros();
   93|  1.36k|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|  1.36k|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|  38.7k|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|  38.7k|   do {                                                                     \
  |  |   61|  38.7k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 38.7k]
  |  |  ------------------
  |  |   62|  38.7k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  38.7k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 38.7k]
  |  |  ------------------
  ------------------
   98|  38.7k|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|  38.7k|         const uint64_t bit_count = m_count * 8;
  102|  38.7k|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|  38.7k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|  38.7k|            store_be(bit_count, last_bytes.data());
  105|       |         } else {
  106|       |            store_le(bit_count, last_bytes.data());
  107|       |         }
  108|       |
  109|       |         // Compress the very last block.
  110|  38.7k|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|  38.7k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_256EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|  38.7k|      void copy_output(std::span<uint8_t> output) {
  114|  38.7k|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|  38.7k|   do {                                                                     \
  |  |   61|  38.7k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 38.7k]
  |  |  ------------------
  |  |   62|  38.7k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  38.7k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 38.7k]
  |  |  ------------------
  ------------------
  115|       |
  116|  38.7k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|  38.7k|            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|       |         } else {
  119|       |            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|       |         }
  121|  38.7k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_384EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|  57.4k|      void update(std::span<const uint8_t> input) {
   45|  57.4k|         BufferSlicer in(input);
   46|       |
   47|   127k|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 70.2k, False: 57.4k]
  ------------------
   48|  70.2k|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 13.0k, False: 57.2k]
  ------------------
   49|  13.0k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  13.0k|            }
   51|       |
   52|  70.2k|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 13.0k, False: 57.2k]
  ------------------
   53|  13.0k|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  13.0k|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 37, False: 12.9k]
  ------------------
   55|     37|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|     37|               }
   57|  13.0k|            }
   58|  70.2k|         }
   59|       |
   60|  57.4k|         m_count += input.size();
   61|  57.4k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_512EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|  3.91M|      void update(std::span<const uint8_t> input) {
   45|  3.91M|         BufferSlicer in(input);
   46|       |
   47|  7.71M|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 3.80M, False: 3.91M]
  ------------------
   48|  3.80M|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 36.6k, False: 3.76M]
  ------------------
   49|  36.6k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  36.6k|            }
   51|       |
   52|  3.80M|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 1.77M, False: 2.03M]
  ------------------
   53|  1.77M|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  1.77M|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 1.73M, False: 34.6k]
  ------------------
   55|  1.73M|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|  1.73M|               }
   57|  1.77M|            }
   58|  3.80M|         }
   59|       |
   60|  3.91M|         m_count += input.size();
   61|  3.91M|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_384EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|  13.1k|      void final(std::span<uint8_t> output) {
   64|  13.1k|         append_padding_bit();
   65|  13.1k|         append_counter_and_finalize();
   66|  13.1k|         copy_output(output);
   67|  13.1k|         clear();
   68|  13.1k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_384EE18append_padding_bitEv:
   77|  13.1k|      void append_padding_bit() {
   78|  13.1k|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|  13.1k|   do {                                                                     \
  |  |   61|  13.1k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 13.1k]
  |  |  ------------------
  |  |   62|  13.1k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  13.1k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 13.1k]
  |  |  ------------------
  ------------------
   79|  13.1k|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|  13.1k|            const uint8_t final_byte = 0x80;
   81|  13.1k|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|  13.1k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_384EE27append_counter_and_finalizeEv:
   88|  13.1k|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|  13.1k|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 101, False: 13.0k]
  ------------------
   92|    101|            m_buffer.fill_up_with_zeros();
   93|    101|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|    101|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|  13.1k|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|  13.1k|   do {                                                                     \
  |  |   61|  13.1k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 13.1k]
  |  |  ------------------
  |  |   62|  13.1k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  13.1k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 13.1k]
  |  |  ------------------
  ------------------
   98|  13.1k|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|  13.1k|         const uint64_t bit_count = m_count * 8;
  102|  13.1k|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|  13.1k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|  13.1k|            store_be(bit_count, last_bytes.data());
  105|       |         } else {
  106|       |            store_le(bit_count, last_bytes.data());
  107|       |         }
  108|       |
  109|       |         // Compress the very last block.
  110|  13.1k|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|  13.1k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_384EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|  13.1k|      void copy_output(std::span<uint8_t> output) {
  114|  13.1k|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|  13.1k|   do {                                                                     \
  |  |   61|  13.1k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 13.1k]
  |  |  ------------------
  |  |   62|  13.1k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  13.1k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 13.1k]
  |  |  ------------------
  ------------------
  115|       |
  116|  13.1k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|  13.1k|            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|       |         } else {
  119|       |            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|       |         }
  121|  13.1k|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_512EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|  1.40M|      void final(std::span<uint8_t> output) {
   64|  1.40M|         append_padding_bit();
   65|  1.40M|         append_counter_and_finalize();
   66|  1.40M|         copy_output(output);
   67|  1.40M|         clear();
   68|  1.40M|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_512EE18append_padding_bitEv:
   77|  1.40M|      void append_padding_bit() {
   78|  1.40M|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|  1.40M|   do {                                                                     \
  |  |   61|  1.40M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 1.40M]
  |  |  ------------------
  |  |   62|  1.40M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  1.40M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 1.40M]
  |  |  ------------------
  ------------------
   79|  1.40M|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|  1.40M|            const uint8_t final_byte = 0x80;
   81|  1.40M|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|  1.40M|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_512EE27append_counter_and_finalizeEv:
   88|  1.40M|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|  1.40M|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 4.86k, False: 1.39M]
  ------------------
   92|  4.86k|            m_buffer.fill_up_with_zeros();
   93|  4.86k|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|  4.86k|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|  1.40M|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|  1.40M|   do {                                                                     \
  |  |   61|  1.40M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 1.40M]
  |  |  ------------------
  |  |   62|  1.40M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  1.40M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 1.40M]
  |  |  ------------------
  ------------------
   98|  1.40M|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|  1.40M|         const uint64_t bit_count = m_count * 8;
  102|  1.40M|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|  1.40M|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|  1.40M|            store_be(bit_count, last_bytes.data());
  105|       |         } else {
  106|       |            store_le(bit_count, last_bytes.data());
  107|       |         }
  108|       |
  109|       |         // Compress the very last block.
  110|  1.40M|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|  1.40M|      }
_ZN5Botan18MerkleDamgard_HashINS_7SHA_512EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|  1.40M|      void copy_output(std::span<uint8_t> output) {
  114|  1.40M|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|  1.40M|   do {                                                                     \
  |  |   61|  1.40M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 1.40M]
  |  |  ------------------
  |  |   62|  1.40M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  1.40M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 1.40M]
  |  |  ------------------
  ------------------
  115|       |
  116|  1.40M|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|  1.40M|            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|       |         } else {
  119|       |            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|       |         }
  121|  1.40M|      }
_ZN5Botan18MerkleDamgard_HashINS_3SM3EE6updateENSt3__14spanIKhLm18446744073709551615EEE:
   44|  38.0k|      void update(std::span<const uint8_t> input) {
   45|  38.0k|         BufferSlicer in(input);
   46|       |
   47|  89.4k|         while(!in.empty()) {
  ------------------
  |  Branch (47:16): [True: 51.3k, False: 38.0k]
  ------------------
   48|  51.3k|            if(const auto one_block = m_buffer.handle_unaligned_data(in)) {
  ------------------
  |  Branch (48:27): [True: 13.3k, False: 38.0k]
  ------------------
   49|  13.3k|               MD::compress_n(m_digest, one_block.value(), 1);
   50|  13.3k|            }
   51|       |
   52|  51.3k|            if(m_buffer.in_alignment()) {
  ------------------
  |  Branch (52:16): [True: 13.3k, False: 37.9k]
  ------------------
   53|  13.3k|               const auto [aligned_data, full_blocks] = m_buffer.aligned_data_to_process(in);
   54|  13.3k|               if(full_blocks > 0) {
  ------------------
  |  Branch (54:19): [True: 897, False: 12.4k]
  ------------------
   55|    897|                  MD::compress_n(m_digest, aligned_data, full_blocks);
   56|    897|               }
   57|  13.3k|            }
   58|  51.3k|         }
   59|       |
   60|  38.0k|         m_count += input.size();
   61|  38.0k|      }
_ZN5Botan18MerkleDamgard_HashINS_3SM3EE5finalENSt3__14spanIhLm18446744073709551615EEE:
   63|  5.75k|      void final(std::span<uint8_t> output) {
   64|  5.75k|         append_padding_bit();
   65|  5.75k|         append_counter_and_finalize();
   66|  5.75k|         copy_output(output);
   67|  5.75k|         clear();
   68|  5.75k|      }
_ZN5Botan18MerkleDamgard_HashINS_3SM3EE18append_padding_bitEv:
   77|  5.75k|      void append_padding_bit() {
   78|  5.75k|         BOTAN_ASSERT_NOMSG(!m_buffer.ready_to_consume());
  ------------------
  |  |   60|  5.75k|   do {                                                                     \
  |  |   61|  5.75k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 5.75k]
  |  |  ------------------
  |  |   62|  5.75k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  5.75k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 5.75k]
  |  |  ------------------
  ------------------
   79|  5.75k|         if constexpr(MD::bit_endianness == MD_Endian::Big) {
   80|  5.75k|            const uint8_t final_byte = 0x80;
   81|  5.75k|            m_buffer.append({&final_byte, 1});
   82|       |         } else {
   83|       |            const uint8_t final_byte = 0x01;
   84|       |            m_buffer.append({&final_byte, 1});
   85|       |         }
   86|  5.75k|      }
_ZN5Botan18MerkleDamgard_HashINS_3SM3EE27append_counter_and_finalizeEv:
   88|  5.75k|      void append_counter_and_finalize() {
   89|       |         // Compress the remaining data if the final data block does not provide
   90|       |         // enough space for the counter bytes.
   91|  5.75k|         if(m_buffer.elements_until_alignment() < MD::ctr_bytes) {
  ------------------
  |  Branch (91:13): [True: 863, False: 4.89k]
  ------------------
   92|    863|            m_buffer.fill_up_with_zeros();
   93|    863|            MD::compress_n(m_digest, m_buffer.consume(), 1);
   94|    863|         }
   95|       |
   96|       |         // Make sure that any remaining bytes in the very last block are zero.
   97|  5.75k|         BOTAN_ASSERT_NOMSG(m_buffer.elements_until_alignment() >= MD::ctr_bytes);
  ------------------
  |  |   60|  5.75k|   do {                                                                     \
  |  |   61|  5.75k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 5.75k]
  |  |  ------------------
  |  |   62|  5.75k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  5.75k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 5.75k]
  |  |  ------------------
  ------------------
   98|  5.75k|         m_buffer.fill_up_with_zeros();
   99|       |
  100|       |         // Replace a bunch of the right-most zero-padding with the counter bytes.
  101|  5.75k|         const uint64_t bit_count = m_count * 8;
  102|  5.75k|         auto last_bytes = m_buffer.directly_modify_last(sizeof(bit_count));
  103|  5.75k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  104|  5.75k|            store_be(bit_count, last_bytes.data());
  105|       |         } else {
  106|       |            store_le(bit_count, last_bytes.data());
  107|       |         }
  108|       |
  109|       |         // Compress the very last block.
  110|  5.75k|         MD::compress_n(m_digest, m_buffer.consume(), 1);
  111|  5.75k|      }
_ZN5Botan18MerkleDamgard_HashINS_3SM3EE11copy_outputENSt3__14spanIhLm18446744073709551615EEE:
  113|  5.75k|      void copy_output(std::span<uint8_t> output) {
  114|  5.75k|         BOTAN_ASSERT_NOMSG(output.size() >= MD::output_bytes);
  ------------------
  |  |   60|  5.75k|   do {                                                                     \
  |  |   61|  5.75k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 5.75k]
  |  |  ------------------
  |  |   62|  5.75k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  5.75k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 5.75k]
  |  |  ------------------
  ------------------
  115|       |
  116|  5.75k|         if constexpr(MD::byte_endianness == MD_Endian::Big) {
  117|  5.75k|            copy_out_be(output.first(MD::output_bytes), m_digest);
  118|       |         } else {
  119|       |            copy_out_le(output.first(MD::output_bytes), m_digest);
  120|       |         }
  121|  5.75k|      }

_ZNK5Botan17Montgomery_Params1pEv:
  141|  58.1k|      const BigInt& p() const { return m_p; }
_ZNK5Botan17Montgomery_Params2R2Ev:
  145|  35.7k|      const BigInt& R2() const { return m_r2; }
_ZNK5Botan17Montgomery_Params7p_wordsEv:
  151|   140k|      size_t p_words() const { return m_p_words; }
_ZNK5Botan17Montgomery_Params2R1Ev:
  143|  29.0k|      const BigInt& R1() const { return m_r1; }
_ZNK5Botan14Montgomery_Int17const_time_poisonEv:
  115|   110k|      void const_time_poison() const { m_v.const_time_poison(); }
_ZNK5Botan14Montgomery_Int19const_time_unpoisonEv:
  117|  15.4k|      void const_time_unpoison() const { return m_v.const_time_unpoison(); }

_ZN5Botan10word8_add2ITkNS_8WordTypeEmEET_PS1_PKS1_S1_:
  280|  4.08M|inline constexpr auto word8_add2(W x[8], const W y[8], W carry) -> W {
  281|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  282|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  283|       |      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB2_OP, "adcl"))
  284|       |          : [carry] "=r"(carry)
  285|       |          : [x] "r"(x), [y] "r"(y), "0"(carry)
  286|       |          : "cc", "memory");
  287|       |      return carry;
  288|       |   }
  289|       |#endif
  290|       |
  291|  4.08M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  292|  4.08M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (292:7): [True: 0, Folded]
  |  Branch (292:36): [True: 0, Folded]
  ------------------
  293|  4.08M|      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB2_OP, "adcq"))
  294|  4.08M|          : [carry] "=r"(carry)
  295|  4.08M|          : [x] "r"(x), [y] "r"(y), "0"(carry)
  296|  4.08M|          : "cc", "memory");
  297|  4.08M|      return carry;
  298|  4.08M|   }
  299|      0|#endif
  300|       |
  301|      0|   x[0] = word_add(x[0], y[0], &carry);
  302|      0|   x[1] = word_add(x[1], y[1], &carry);
  303|      0|   x[2] = word_add(x[2], y[2], &carry);
  304|      0|   x[3] = word_add(x[3], y[3], &carry);
  305|      0|   x[4] = word_add(x[4], y[4], &carry);
  306|      0|   x[5] = word_add(x[5], y[5], &carry);
  307|      0|   x[6] = word_add(x[6], y[6], &carry);
  308|      0|   x[7] = word_add(x[7], y[7], &carry);
  309|      0|   return carry;
  310|  4.08M|}
_ZN5Botan8word_addITkNS_8WordTypeEmEET_S1_S1_PS1_:
  248|  1.97G|inline constexpr auto word_add(W x, W y, W* carry) -> W {
  249|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  250|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  251|       |      asm(ADD_OR_SUBTRACT(ASM("adcl %[y],%[x]"))
  252|       |          : [x] "=r"(x), [carry] "=r"(*carry)
  253|       |          : "0"(x), [y] "rm"(y), "1"(*carry)
  254|       |          : "cc");
  255|       |      return x;
  256|       |   }
  257|       |#endif
  258|       |
  259|  1.97G|#if defined(BOTAN_MP_USE_X86_64_ASM)
  260|  1.97G|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (260:7): [True: 0, Folded]
  |  Branch (260:36): [True: 0, Folded]
  ------------------
  261|  1.97G|      asm(ADD_OR_SUBTRACT(ASM("adcq %[y],%[x]"))
  262|  1.97G|          : [x] "=r"(x), [carry] "=r"(*carry)
  263|  1.97G|          : "0"(x), [y] "rm"(y), "1"(*carry)
  264|  1.97G|          : "cc");
  265|  1.97G|      return x;
  266|  1.97G|   }
  267|      0|#endif
  268|       |
  269|      0|   W z = x + y;
  270|      0|   W c1 = (z < x);
  271|      0|   z += *carry;
  272|      0|   *carry = c1 | (z < *carry);
  273|      0|   return z;
  274|  1.97G|}
_ZN5Botan10word8_sub2ITkNS_8WordTypeEmEET_PS1_PKS1_S1_:
  384|  2.64M|inline constexpr auto word8_sub2(W x[8], const W y[8], W carry) -> W {
  385|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  386|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  387|       |      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB2_OP, "sbbl"))
  388|       |          : [carry] "=r"(carry)
  389|       |          : [x] "r"(x), [y] "r"(y), "0"(carry)
  390|       |          : "cc", "memory");
  391|       |      return carry;
  392|       |   }
  393|       |#endif
  394|       |
  395|  2.64M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  396|  2.64M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (396:7): [True: 0, Folded]
  |  Branch (396:36): [True: 0, Folded]
  ------------------
  397|  2.64M|      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB2_OP, "sbbq"))
  398|  2.64M|          : [carry] "=r"(carry)
  399|  2.64M|          : [x] "r"(x), [y] "r"(y), "0"(carry)
  400|  2.64M|          : "cc", "memory");
  401|  2.64M|      return carry;
  402|  2.64M|   }
  403|      0|#endif
  404|       |
  405|      0|   x[0] = word_sub(x[0], y[0], &carry);
  406|      0|   x[1] = word_sub(x[1], y[1], &carry);
  407|      0|   x[2] = word_sub(x[2], y[2], &carry);
  408|      0|   x[3] = word_sub(x[3], y[3], &carry);
  409|      0|   x[4] = word_sub(x[4], y[4], &carry);
  410|      0|   x[5] = word_sub(x[5], y[5], &carry);
  411|      0|   x[6] = word_sub(x[6], y[6], &carry);
  412|      0|   x[7] = word_sub(x[7], y[7], &carry);
  413|      0|   return carry;
  414|  2.64M|}
_ZN5Botan8word_subITkNS_8WordTypeEmEET_S1_S1_PS1_:
  352|  3.30G|inline constexpr auto word_sub(W x, W y, W* carry) -> W {
  353|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  354|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  355|       |      asm(ADD_OR_SUBTRACT(ASM("sbbl %[y],%[x]"))
  356|       |          : [x] "=r"(x), [carry] "=r"(*carry)
  357|       |          : "0"(x), [y] "rm"(y), "1"(*carry)
  358|       |          : "cc");
  359|       |      return x;
  360|       |   }
  361|       |#endif
  362|       |
  363|  3.30G|#if defined(BOTAN_MP_USE_X86_64_ASM)
  364|  3.30G|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (364:7): [True: 0, Folded]
  |  Branch (364:36): [True: 0, Folded]
  ------------------
  365|  3.30G|      asm(ADD_OR_SUBTRACT(ASM("sbbq %[y],%[x]"))
  366|  3.30G|          : [x] "=r"(x), [carry] "=r"(*carry)
  367|  3.30G|          : "0"(x), [y] "rm"(y), "1"(*carry)
  368|  3.30G|          : "cc");
  369|  3.30G|      return x;
  370|  3.30G|   }
  371|      0|#endif
  372|       |
  373|      0|   W t0 = x - y;
  374|      0|   W c1 = (t0 > x);
  375|      0|   W z = t0 - *carry;
  376|      0|   *carry = c1 | (z > t0);
  377|      0|   return z;
  378|  3.30G|}
_ZN5Botan14word8_sub2_revITkNS_8WordTypeEmEET_PS1_PKS1_S1_:
  420|    755|inline constexpr auto word8_sub2_rev(W x[8], const W y[8], W carry) -> W {
  421|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  422|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  423|       |      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB3_OP, "sbbl"))
  424|       |          : [carry] "=r"(carry)
  425|       |          : [x] "r"(y), [y] "r"(x), [z] "r"(x), "0"(carry)
  426|       |          : "cc", "memory");
  427|       |      return carry;
  428|       |   }
  429|       |#endif
  430|       |
  431|    755|#if defined(BOTAN_MP_USE_X86_64_ASM)
  432|    755|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (432:7): [True: 0, Folded]
  |  Branch (432:36): [True: 0, Folded]
  ------------------
  433|    755|      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB3_OP, "sbbq"))
  434|    755|          : [carry] "=r"(carry)
  435|    755|          : [x] "r"(y), [y] "r"(x), [z] "r"(x), "0"(carry)
  436|    755|          : "cc", "memory");
  437|    755|      return carry;
  438|    755|   }
  439|      0|#endif
  440|       |
  441|      0|   x[0] = word_sub(y[0], x[0], &carry);
  442|      0|   x[1] = word_sub(y[1], x[1], &carry);
  443|      0|   x[2] = word_sub(y[2], x[2], &carry);
  444|      0|   x[3] = word_sub(y[3], x[3], &carry);
  445|      0|   x[4] = word_sub(y[4], x[4], &carry);
  446|      0|   x[5] = word_sub(y[5], x[5], &carry);
  447|      0|   x[6] = word_sub(y[6], x[6], &carry);
  448|      0|   x[7] = word_sub(y[7], x[7], &carry);
  449|      0|   return carry;
  450|    755|}
_ZN5Botan10word8_sub3ITkNS_8WordTypeEmEET_PS1_PKS1_S4_S1_:
  456|   257M|inline constexpr auto word8_sub3(W z[8], const W x[8], const W y[8], W carry) -> W {
  457|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  458|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  459|       |      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB3_OP, "sbbl"))
  460|       |          : [carry] "=r"(carry)
  461|       |          : [x] "r"(x), [y] "r"(y), [z] "r"(z), "0"(carry)
  462|       |          : "cc", "memory");
  463|       |      return carry;
  464|       |   }
  465|       |#endif
  466|       |
  467|   257M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  468|   257M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (468:7): [True: 0, Folded]
  |  Branch (468:36): [True: 0, Folded]
  ------------------
  469|   257M|      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB3_OP, "sbbq"))
  470|   257M|          : [carry] "=r"(carry)
  471|   257M|          : [x] "r"(x), [y] "r"(y), [z] "r"(z), "0"(carry)
  472|   257M|          : "cc", "memory");
  473|   257M|      return carry;
  474|   257M|   }
  475|      0|#endif
  476|       |
  477|      0|   z[0] = word_sub(x[0], y[0], &carry);
  478|      0|   z[1] = word_sub(x[1], y[1], &carry);
  479|      0|   z[2] = word_sub(x[2], y[2], &carry);
  480|      0|   z[3] = word_sub(x[3], y[3], &carry);
  481|      0|   z[4] = word_sub(x[4], y[4], &carry);
  482|      0|   z[5] = word_sub(x[5], y[5], &carry);
  483|      0|   z[6] = word_sub(x[6], y[6], &carry);
  484|      0|   z[7] = word_sub(x[7], y[7], &carry);
  485|      0|   return carry;
  486|   257M|}
_ZN5Botan10word8_add3ITkNS_8WordTypeEmEET_PS1_PKS1_S4_S1_:
  316|  78.7M|inline constexpr auto word8_add3(W z[8], const W x[8], const W y[8], W carry) -> W {
  317|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  318|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  319|       |      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB3_OP, "adcl"))
  320|       |          : [carry] "=r"(carry)
  321|       |          : [x] "r"(x), [y] "r"(y), [z] "r"(z), "0"(carry)
  322|       |          : "cc", "memory");
  323|       |      return carry;
  324|       |   }
  325|       |#endif
  326|       |
  327|  78.7M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  328|  78.7M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (328:7): [True: 0, Folded]
  |  Branch (328:36): [True: 0, Folded]
  ------------------
  329|  78.7M|      asm(ADD_OR_SUBTRACT(DO_8_TIMES(ADDSUB3_OP, "adcq"))
  330|  78.7M|          : [carry] "=r"(carry)
  331|  78.7M|          : [x] "r"(x), [y] "r"(y), [z] "r"(z), "0"(carry)
  332|  78.7M|          : "cc", "memory");
  333|  78.7M|      return carry;
  334|  78.7M|   }
  335|      0|#endif
  336|       |
  337|      0|   z[0] = word_add(x[0], y[0], &carry);
  338|      0|   z[1] = word_add(x[1], y[1], &carry);
  339|      0|   z[2] = word_add(x[2], y[2], &carry);
  340|      0|   z[3] = word_add(x[3], y[3], &carry);
  341|      0|   z[4] = word_add(x[4], y[4], &carry);
  342|      0|   z[5] = word_add(x[5], y[5], &carry);
  343|      0|   z[6] = word_add(x[6], y[6], &carry);
  344|      0|   z[7] = word_add(x[7], y[7], &carry);
  345|      0|   return carry;
  346|  78.7M|}
_ZN5Botan13word8_linmul3ITkNS_8WordTypeEmEET_PS1_PKS1_S1_S1_:
  528|   258k|inline constexpr auto word8_linmul3(W z[8], const W x[8], W y, W carry) -> W {
  529|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  530|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  531|       |      asm(DO_8_TIMES(LINMUL_OP, "z")
  532|       |          : [carry] "=r"(carry)
  533|       |          : [z] "r"(z), [x] "r"(x), [y] "rm"(y), "0"(carry)
  534|       |          : "cc", "%eax", "%edx");
  535|       |      return carry;
  536|       |   }
  537|       |#endif
  538|       |
  539|   258k|#if defined(BOTAN_MP_USE_X86_64_ASM)
  540|   258k|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (540:7): [True: 0, Folded]
  |  Branch (540:36): [True: 0, Folded]
  ------------------
  541|   258k|      asm(DO_8_TIMES(LINMUL_OP, "z")
  542|   258k|          : [carry] "=r"(carry)
  543|   258k|          : [z] "r"(z), [x] "r"(x), [y] "rm"(y), "0"(carry)
  544|   258k|          : "cc", "%rax", "%rdx");
  545|   258k|      return carry;
  546|   258k|   }
  547|      0|#endif
  548|       |
  549|      0|   z[0] = word_madd2(x[0], y, &carry);
  550|      0|   z[1] = word_madd2(x[1], y, &carry);
  551|      0|   z[2] = word_madd2(x[2], y, &carry);
  552|      0|   z[3] = word_madd2(x[3], y, &carry);
  553|      0|   z[4] = word_madd2(x[4], y, &carry);
  554|      0|   z[5] = word_madd2(x[5], y, &carry);
  555|      0|   z[6] = word_madd2(x[6], y, &carry);
  556|      0|   z[7] = word_madd2(x[7], y, &carry);
  557|      0|   return carry;
  558|   258k|}
_ZN5Botan10word_madd2ITkNS_8WordTypeEmEET_S1_S1_PS1_:
   70|   109M|inline constexpr auto word_madd2(W a, W b, W* c) -> W {
   71|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
   72|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
   73|       |      asm(R"(
   74|       |         mull %[b]
   75|       |         addl %[c],%[a]
   76|       |         adcl $0,%[carry]
   77|       |         )"
   78|       |          : [a] "=a"(a), [b] "=rm"(b), [carry] "=&d"(*c)
   79|       |          : "0"(a), "1"(b), [c] "g"(*c)
   80|       |          : "cc");
   81|       |
   82|       |      return a;
   83|       |   }
   84|       |#endif
   85|       |
   86|   109M|#if defined(BOTAN_MP_USE_X86_64_ASM)
   87|   109M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (87:7): [True: 0, Folded]
  |  Branch (87:36): [True: 0, Folded]
  ------------------
   88|   109M|      asm(R"(
   89|   109M|         mulq %[b]
   90|   109M|         addq %[c],%[a]
   91|   109M|         adcq $0,%[carry]
   92|   109M|         )"
   93|   109M|          : [a] "=a"(a), [b] "=rm"(b), [carry] "=&d"(*c)
   94|   109M|          : "0"(a), "1"(b), [c] "g"(*c)
   95|   109M|          : "cc");
   96|       |
   97|   109M|      return a;
   98|   109M|   }
   99|      0|#endif
  100|       |
  101|      0|   typedef typename WordInfo<W>::dword dword;
  102|      0|   const dword s = dword(a) * b + *c;
  103|      0|   *c = static_cast<W>(s >> WordInfo<W>::bits);
  104|      0|   return static_cast<W>(s);
  105|   109M|}
_ZN5Botan13word8_linmul2ITkNS_8WordTypeEmEET_PS1_S1_S1_:
  492|   247M|inline constexpr auto word8_linmul2(W x[8], W y, W carry) -> W {
  493|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  494|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  495|       |      asm(DO_8_TIMES(LINMUL_OP, "x")
  496|       |          : [carry] "=r"(carry)
  497|       |          : [x] "r"(x), [y] "rm"(y), "0"(carry)
  498|       |          : "cc", "%eax", "%edx");
  499|       |      return carry;
  500|       |   }
  501|       |#endif
  502|       |
  503|   247M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  504|   247M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (504:7): [True: 0, Folded]
  |  Branch (504:36): [True: 0, Folded]
  ------------------
  505|   247M|      asm(DO_8_TIMES(LINMUL_OP, "x")
  506|   247M|          : [carry] "=r"(carry)
  507|   247M|          : [x] "r"(x), [y] "rm"(y), "0"(carry)
  508|   247M|          : "cc", "%rax", "%rdx");
  509|   247M|      return carry;
  510|   247M|   }
  511|      0|#endif
  512|       |
  513|      0|   x[0] = word_madd2(x[0], y, &carry);
  514|      0|   x[1] = word_madd2(x[1], y, &carry);
  515|      0|   x[2] = word_madd2(x[2], y, &carry);
  516|      0|   x[3] = word_madd2(x[3], y, &carry);
  517|      0|   x[4] = word_madd2(x[4], y, &carry);
  518|      0|   x[5] = word_madd2(x[5], y, &carry);
  519|      0|   x[6] = word_madd2(x[6], y, &carry);
  520|      0|   x[7] = word_madd2(x[7], y, &carry);
  521|      0|   return carry;
  522|   247M|}
_ZN5Botan12word3_muladdITkNS_8WordTypeEmEEvPT_S2_S2_S1_S1_:
  601|  7.33G|inline constexpr void word3_muladd(W* w2, W* w1, W* w0, W x, W y) {
  602|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  603|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  604|       |      W z0 = 0, z1 = 0;
  605|       |
  606|       |      asm("mull %[y]" : "=a"(z0), "=d"(z1) : "a"(x), [y] "rm"(y) : "cc");
  607|       |
  608|       |      asm(R"(
  609|       |          addl %[z0],%[w0]
  610|       |          adcl %[z1],%[w1]
  611|       |          adcl $0,%[w2]
  612|       |          )"
  613|       |          : [w0] "=r"(*w0), [w1] "=r"(*w1), [w2] "=r"(*w2)
  614|       |          : [z0] "r"(z0), [z1] "r"(z1), "0"(*w0), "1"(*w1), "2"(*w2)
  615|       |          : "cc");
  616|       |      return;
  617|       |   }
  618|       |#endif
  619|       |
  620|  7.33G|#if defined(BOTAN_MP_USE_X86_64_ASM)
  621|  7.33G|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (621:7): [True: 0, Folded]
  |  Branch (621:36): [True: 0, Folded]
  ------------------
  622|  7.33G|      W z0 = 0, z1 = 0;
  623|       |
  624|  7.33G|      asm("mulq %[y]" : "=a"(z0), "=d"(z1) : "a"(x), [y] "rm"(y) : "cc");
  625|       |
  626|  7.33G|      asm(R"(
  627|  7.33G|          addq %[z0],%[w0]
  628|  7.33G|          adcq %[z1],%[w1]
  629|  7.33G|          adcq $0,%[w2]
  630|  7.33G|          )"
  631|  7.33G|          : [w0] "=r"(*w0), [w1] "=r"(*w1), [w2] "=r"(*w2)
  632|  7.33G|          : [z0] "r"(z0), [z1] "r"(z1), "0"(*w0), "1"(*w1), "2"(*w2)
  633|  7.33G|          : "cc");
  634|  7.33G|      return;
  635|  7.33G|   }
  636|      0|#endif
  637|       |
  638|      0|   W carry = *w0;
  639|      0|   *w0 = word_madd2(x, y, &carry);
  640|      0|   *w1 += carry;
  641|      0|   *w2 += (*w1 < carry);
  642|      0|}
_ZN5Botan14word3_muladd_2ITkNS_8WordTypeEmEEvPT_S2_S2_S1_S1_:
  690|  1.77G|inline constexpr void word3_muladd_2(W* w2, W* w1, W* w0, W x, W y) {
  691|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  692|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  693|       |      W z0 = 0, z1 = 0;
  694|       |
  695|       |      asm("mull %[y]" : "=a"(z0), "=d"(z1) : "a"(x), [y] "rm"(y) : "cc");
  696|       |
  697|       |      asm(R"(
  698|       |         addl %[z0],%[w0]
  699|       |         adcl %[z1],%[w1]
  700|       |         adcl $0,%[w2]
  701|       |
  702|       |         addl %[z0],%[w0]
  703|       |         adcl %[z1],%[w1]
  704|       |         adcl $0,%[w2]
  705|       |         )"
  706|       |          : [w0] "=r"(*w0), [w1] "=r"(*w1), [w2] "=r"(*w2)
  707|       |          : [z0] "r"(z0), [z1] "r"(z1), "0"(*w0), "1"(*w1), "2"(*w2)
  708|       |          : "cc");
  709|       |      return;
  710|       |   }
  711|       |#endif
  712|       |
  713|  1.77G|#if defined(BOTAN_MP_USE_X86_64_ASM)
  714|  1.77G|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (714:7): [True: 0, Folded]
  |  Branch (714:36): [True: 0, Folded]
  ------------------
  715|  1.77G|      W z0 = 0, z1 = 0;
  716|       |
  717|  1.77G|      asm("mulq %[y]" : "=a"(z0), "=d"(z1) : "a"(x), [y] "rm"(y) : "cc");
  718|       |
  719|  1.77G|      asm(R"(
  720|  1.77G|         addq %[z0],%[w0]
  721|  1.77G|         adcq %[z1],%[w1]
  722|  1.77G|         adcq $0,%[w2]
  723|  1.77G|
  724|  1.77G|         addq %[z0],%[w0]
  725|  1.77G|         adcq %[z1],%[w1]
  726|  1.77G|         adcq $0,%[w2]
  727|  1.77G|         )"
  728|  1.77G|          : [w0] "=r"(*w0), [w1] "=r"(*w1), [w2] "=r"(*w2)
  729|  1.77G|          : [z0] "r"(z0), [z1] "r"(z1), "0"(*w0), "1"(*w1), "2"(*w2)
  730|  1.77G|          : "cc");
  731|  1.77G|      return;
  732|  1.77G|   }
  733|      0|#endif
  734|       |
  735|      0|   W carry = 0;
  736|      0|   x = word_madd2(x, y, &carry);
  737|      0|   y = carry;
  738|       |
  739|      0|   const size_t top_bit_shift = WordInfo<W>::bits - 1;
  740|       |
  741|      0|   W top = (y >> top_bit_shift);
  742|      0|   y <<= 1;
  743|      0|   y |= (x >> top_bit_shift);
  744|      0|   x <<= 1;
  745|       |
  746|      0|   carry = 0;
  747|      0|   *w0 = word_add(*w0, x, &carry);
  748|      0|   *w1 = word_add(*w1, y, &carry);
  749|      0|   *w2 = word_add(*w2, top, &carry);
  750|      0|}
_ZN5Botan11word8_madd3ITkNS_8WordTypeEmEET_PS1_PKS1_S1_S1_:
  564|  11.1M|inline constexpr auto word8_madd3(W z[8], const W x[8], W y, W carry) -> W {
  565|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  566|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  567|       |      asm(DO_8_TIMES(MULADD_OP, "")
  568|       |          : [carry] "=r"(carry)
  569|       |          : [z] "r"(z), [x] "r"(x), [y] "rm"(y), "0"(carry)
  570|       |          : "cc", "%eax", "%edx");
  571|       |      return carry;
  572|       |   }
  573|       |#endif
  574|       |
  575|  11.1M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  576|  11.1M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (576:7): [True: 0, Folded]
  |  Branch (576:36): [True: 0, Folded]
  ------------------
  577|  11.1M|      asm(DO_8_TIMES(MULADD_OP, "")
  578|  11.1M|          : [carry] "=r"(carry)
  579|  11.1M|          : [z] "r"(z), [x] "r"(x), [y] "rm"(y), "0"(carry)
  580|  11.1M|          : "cc", "%rax", "%rdx");
  581|  11.1M|      return carry;
  582|  11.1M|   }
  583|      0|#endif
  584|       |
  585|      0|   z[0] = word_madd3(x[0], y, z[0], &carry);
  586|      0|   z[1] = word_madd3(x[1], y, z[1], &carry);
  587|      0|   z[2] = word_madd3(x[2], y, z[2], &carry);
  588|      0|   z[3] = word_madd3(x[3], y, z[3], &carry);
  589|      0|   z[4] = word_madd3(x[4], y, z[4], &carry);
  590|      0|   z[5] = word_madd3(x[5], y, z[5], &carry);
  591|      0|   z[6] = word_madd3(x[6], y, z[6], &carry);
  592|      0|   z[7] = word_madd3(x[7], y, z[7], &carry);
  593|      0|   return carry;
  594|  11.1M|}
_ZN5Botan10word_madd3ITkNS_8WordTypeEmEET_S1_S1_S1_PS1_:
  111|  20.5M|inline constexpr auto word_madd3(W a, W b, W c, W* d) -> W {
  112|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  113|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  114|       |      asm(R"(
  115|       |         mull %[b]
  116|       |
  117|       |         addl %[c],%[a]
  118|       |         adcl $0,%[carry]
  119|       |
  120|       |         addl %[d],%[a]
  121|       |         adcl $0,%[carry]
  122|       |         )"
  123|       |          : [a] "=a"(a), [b] "=rm"(b), [carry] "=&d"(*d)
  124|       |          : "0"(a), "1"(b), [c] "g"(c), [d] "g"(*d)
  125|       |          : "cc");
  126|       |
  127|       |      return a;
  128|       |   }
  129|       |#endif
  130|       |
  131|  20.5M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  132|  20.5M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (132:7): [True: 0, Folded]
  |  Branch (132:36): [True: 0, Folded]
  ------------------
  133|  20.5M|      asm(R"(
  134|  20.5M|         mulq %[b]
  135|  20.5M|
  136|  20.5M|         addq %[c],%[a]
  137|  20.5M|         adcq $0,%[carry]
  138|  20.5M|
  139|  20.5M|         addq %[d],%[a]
  140|  20.5M|         adcq $0,%[carry]
  141|  20.5M|         )"
  142|  20.5M|          : [a] "=a"(a), [b] "=rm"(b), [carry] "=&d"(*d)
  143|  20.5M|          : "0"(a), "1"(b), [c] "g"(c), [d] "g"(*d)
  144|  20.5M|          : "cc");
  145|       |
  146|  20.5M|      return a;
  147|  20.5M|   }
  148|      0|#endif
  149|       |
  150|      0|   typedef typename WordInfo<W>::dword dword;
  151|      0|   const dword s = dword(a) * b + c + *d;
  152|      0|   *d = static_cast<W>(s >> WordInfo<W>::bits);
  153|      0|   return static_cast<W>(s);
  154|  20.5M|}
_ZN5Botan9word3_addITkNS_8WordTypeEmEEvPT_S2_S2_S1_:
  649|   369M|inline constexpr void word3_add(W* w2, W* w1, W* w0, W x) {
  650|       |#if defined(BOTAN_MP_USE_X86_32_ASM)
  651|       |   if(std::same_as<W, uint32_t> && !std::is_constant_evaluated()) {
  652|       |      asm(R"(
  653|       |         addl %[x],%[w0]
  654|       |         adcl $0,%[w1]
  655|       |         adcl $0,%[w2]
  656|       |         )"
  657|       |          : [w0] "=r"(*w0), [w1] "=r"(*w1), [w2] "=r"(*w2)
  658|       |          : [x] "r"(x), "0"(*w0), "1"(*w1), "2"(*w2)
  659|       |          : "cc");
  660|       |      return;
  661|       |   }
  662|       |#endif
  663|       |
  664|   369M|#if defined(BOTAN_MP_USE_X86_64_ASM)
  665|   369M|   if(std::same_as<W, uint64_t> && !std::is_constant_evaluated()) {
  ------------------
  |  Branch (665:7): [True: 0, Folded]
  |  Branch (665:36): [True: 0, Folded]
  ------------------
  666|   369M|      asm(R"(
  667|   369M|         addq %[x],%[w0]
  668|   369M|         adcq $0,%[w1]
  669|   369M|         adcq $0,%[w2]
  670|   369M|         )"
  671|   369M|          : [w0] "=r"(*w0), [w1] "=r"(*w1), [w2] "=r"(*w2)
  672|   369M|          : [x] "r"(x), "0"(*w0), "1"(*w1), "2"(*w2)
  673|   369M|          : "cc");
  674|   369M|      return;
  675|   369M|   }
  676|      0|#endif
  677|       |
  678|      0|   *w0 += x;
  679|      0|   W c1 = (*w0 < x);
  680|      0|   *w1 += c1;
  681|      0|   W c2 = (*w1 < c1);
  682|      0|   *w2 += c2;
  683|      0|}

_ZN5Botan11bigint_add2ITkNS_8WordTypeEmEEvPT_mPKS1_m:
  269|   363k|inline constexpr void bigint_add2(W x[], size_t x_size, const W y[], size_t y_size) {
  270|   363k|   x[x_size] += bigint_add2_nc(x, x_size, y, y_size);
  271|   363k|}
_ZN5Botan14bigint_add2_ncITkNS_8WordTypeEmEET_PS1_mPKS1_m:
  211|  2.57M|inline constexpr auto bigint_add2_nc(W x[], size_t x_size, const W y[], size_t y_size) -> W {
  212|  2.57M|   W carry = 0;
  213|       |
  214|  2.57M|   BOTAN_ASSERT(x_size >= y_size, "Expected sizes");
  ------------------
  |  |   51|  2.57M|   do {                                                                                 \
  |  |   52|  2.57M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 2.57M]
  |  |  ------------------
  |  |   53|  2.57M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  2.57M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 2.57M]
  |  |  ------------------
  ------------------
  215|       |
  216|  2.57M|   const size_t blocks = y_size - (y_size % 8);
  217|       |
  218|  6.66M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (218:22): [True: 4.08M, False: 2.57M]
  ------------------
  219|  4.08M|      carry = word8_add2(x + i, y + i, carry);
  220|  4.08M|   }
  221|       |
  222|  4.78M|   for(size_t i = blocks; i != y_size; ++i) {
  ------------------
  |  Branch (222:27): [True: 2.20M, False: 2.57M]
  ------------------
  223|  2.20M|      x[i] = word_add(x[i], y[i], &carry);
  224|  2.20M|   }
  225|       |
  226|  41.7M|   for(size_t i = y_size; i != x_size; ++i) {
  ------------------
  |  Branch (226:27): [True: 39.1M, False: 2.57M]
  ------------------
  227|  39.1M|      x[i] = word_add(x[i], static_cast<W>(0), &carry);
  228|  39.1M|   }
  229|       |
  230|  2.57M|   return carry;
  231|  2.57M|}
_ZN5Botan10bigint_cmpITkNS_8WordTypeEmEEiPKT_mS3_m:
  581|   831k|inline constexpr int32_t bigint_cmp(const W x[], size_t x_size, const W y[], size_t y_size) {
  582|   831k|   static_assert(sizeof(W) >= sizeof(uint32_t), "Size assumption");
  583|       |
  584|   831k|   const W LT = static_cast<W>(-1);
  585|   831k|   const W EQ = 0;
  586|   831k|   const W GT = 1;
  587|       |
  588|   831k|   const size_t common_elems = std::min(x_size, y_size);
  589|       |
  590|   831k|   W result = EQ;  // until found otherwise
  591|       |
  592|  8.64M|   for(size_t i = 0; i != common_elems; i++) {
  ------------------
  |  Branch (592:22): [True: 7.81M, False: 831k]
  ------------------
  593|  7.81M|      const auto is_eq = CT::Mask<W>::is_equal(x[i], y[i]);
  594|  7.81M|      const auto is_lt = CT::Mask<W>::is_lt(x[i], y[i]);
  595|       |
  596|  7.81M|      result = is_eq.select(result, is_lt.select(LT, GT));
  597|  7.81M|   }
  598|       |
  599|   831k|   if(x_size < y_size) {
  ------------------
  |  Branch (599:7): [True: 324k, False: 507k]
  ------------------
  600|   324k|      W mask = 0;
  601|  1.58M|      for(size_t i = x_size; i != y_size; i++) {
  ------------------
  |  Branch (601:30): [True: 1.25M, False: 324k]
  ------------------
  602|  1.25M|         mask |= y[i];
  603|  1.25M|      }
  604|       |
  605|       |      // If any bits were set in high part of y, then x < y
  606|   324k|      result = CT::Mask<W>::is_zero(mask).select(result, LT);
  607|   507k|   } else if(y_size < x_size) {
  ------------------
  |  Branch (607:14): [True: 59, False: 507k]
  ------------------
  608|     59|      W mask = 0;
  609|    147|      for(size_t i = y_size; i != x_size; i++) {
  ------------------
  |  Branch (609:30): [True: 88, False: 59]
  ------------------
  610|     88|         mask |= x[i];
  611|     88|      }
  612|       |
  613|       |      // If any bits were set in high part of x, then x > y
  614|     59|      result = CT::Mask<W>::is_zero(mask).select(result, GT);
  615|     59|   }
  616|       |
  617|   831k|   CT::unpoison(result);
  618|   831k|   BOTAN_DEBUG_ASSERT(result == LT || result == GT || result == EQ);
  ------------------
  |  |   99|   831k|      do {                          \
  |  |  100|   831k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 831k]
  |  |  ------------------
  ------------------
  619|   831k|   return static_cast<int32_t>(result);
  620|   831k|}
_ZN5Botan11bigint_sub2ITkNS_8WordTypeEmEET_PS1_mPKS1_m:
  285|   127M|inline constexpr auto bigint_sub2(W x[], size_t x_size, const W y[], size_t y_size) -> W {
  286|   127M|   W borrow = 0;
  287|       |
  288|   127M|   BOTAN_ASSERT(x_size >= y_size, "Expected sizes");
  ------------------
  |  |   51|   127M|   do {                                                                                 \
  |  |   52|   127M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 127M]
  |  |  ------------------
  |  |   53|   127M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|   127M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 127M]
  |  |  ------------------
  ------------------
  289|       |
  290|   127M|   const size_t blocks = y_size - (y_size % 8);
  291|       |
  292|   129M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (292:22): [True: 2.64M, False: 127M]
  ------------------
  293|  2.64M|      borrow = word8_sub2(x + i, y + i, borrow);
  294|  2.64M|   }
  295|       |
  296|   822M|   for(size_t i = blocks; i != y_size; ++i) {
  ------------------
  |  Branch (296:27): [True: 694M, False: 127M]
  ------------------
  297|   694M|      x[i] = word_sub(x[i], y[i], &borrow);
  298|   694M|   }
  299|       |
  300|   263M|   for(size_t i = y_size; i != x_size; ++i) {
  ------------------
  |  Branch (300:27): [True: 136M, False: 127M]
  ------------------
  301|   136M|      x[i] = word_sub(x[i], static_cast<W>(0), &borrow);
  302|   136M|   }
  303|       |
  304|   127M|   return borrow;
  305|   127M|}
_ZN5Botan15bigint_sub2_revITkNS_8WordTypeEmEEvPT_PKS1_m:
  311|    630|inline constexpr void bigint_sub2_rev(W x[], const W y[], size_t y_size) {
  312|    630|   W borrow = 0;
  313|       |
  314|    630|   const size_t blocks = y_size - (y_size % 8);
  315|       |
  316|  1.38k|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (316:22): [True: 755, False: 630]
  ------------------
  317|    755|      borrow = word8_sub2_rev(x + i, y + i, borrow);
  318|    755|   }
  319|       |
  320|  2.55k|   for(size_t i = blocks; i != y_size; ++i) {
  ------------------
  |  Branch (320:27): [True: 1.92k, False: 630]
  ------------------
  321|  1.92k|      x[i] = word_sub(y[i], x[i], &borrow);
  322|  1.92k|   }
  323|       |
  324|    630|   BOTAN_ASSERT(borrow == 0, "y must be greater than x");
  ------------------
  |  |   51|    630|   do {                                                                                 \
  |  |   52|    630|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 630]
  |  |  ------------------
  |  |   53|    630|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|    630|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 630]
  |  |  ------------------
  ------------------
  325|    630|}
_ZN5Botan11bigint_sub3ITkNS_8WordTypeEmEET_PS1_PKS1_mS4_m:
  335|   294M|inline constexpr auto bigint_sub3(W z[], const W x[], size_t x_size, const W y[], size_t y_size) -> W {
  336|   294M|   W borrow = 0;
  337|       |
  338|   294M|   BOTAN_ASSERT(x_size >= y_size, "Expected sizes");
  ------------------
  |  |   51|   294M|   do {                                                                                 \
  |  |   52|   294M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 294M]
  |  |  ------------------
  |  |   53|   294M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|   294M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 294M]
  |  |  ------------------
  ------------------
  339|       |
  340|   294M|   const size_t blocks = y_size - (y_size % 8);
  341|       |
  342|   468M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (342:22): [True: 174M, False: 294M]
  ------------------
  343|   174M|      borrow = word8_sub3(z + i, x + i, y + i, borrow);
  344|   174M|   }
  345|       |
  346|  1.50G|   for(size_t i = blocks; i != y_size; ++i) {
  ------------------
  |  Branch (346:27): [True: 1.21G, False: 294M]
  ------------------
  347|  1.21G|      z[i] = word_sub(x[i], y[i], &borrow);
  348|  1.21G|   }
  349|       |
  350|   701M|   for(size_t i = y_size; i != x_size; ++i) {
  ------------------
  |  Branch (350:27): [True: 406M, False: 294M]
  ------------------
  351|   406M|      z[i] = word_sub(x[i], static_cast<W>(0), &borrow);
  352|   406M|   }
  353|       |
  354|   294M|   return borrow;
  355|   294M|}
_ZN5Botan14bigint_add3_ncITkNS_8WordTypeEmEET_PS1_PKS1_mS4_m:
  237|  39.8M|inline constexpr auto bigint_add3_nc(W z[], const W x[], size_t x_size, const W y[], size_t y_size) -> W {
  238|  39.8M|   if(x_size < y_size) {
  ------------------
  |  Branch (238:7): [True: 117, False: 39.8M]
  ------------------
  239|    117|      return bigint_add3_nc(z, y, y_size, x, x_size);
  240|    117|   }
  241|       |
  242|  39.8M|   W carry = 0;
  243|       |
  244|  39.8M|   const size_t blocks = y_size - (y_size % 8);
  245|       |
  246|  74.3M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (246:22): [True: 34.4M, False: 39.8M]
  ------------------
  247|  34.4M|      carry = word8_add3(z + i, x + i, y + i, carry);
  248|  34.4M|   }
  249|       |
  250|   116M|   for(size_t i = blocks; i != y_size; ++i) {
  ------------------
  |  Branch (250:27): [True: 76.3M, False: 39.8M]
  ------------------
  251|  76.3M|      z[i] = word_add(x[i], y[i], &carry);
  252|  76.3M|   }
  253|       |
  254|  40.0M|   for(size_t i = y_size; i != x_size; ++i) {
  ------------------
  |  Branch (254:27): [True: 168k, False: 39.8M]
  ------------------
  255|   168k|      z[i] = word_add(x[i], static_cast<W>(0), &carry);
  256|   168k|   }
  257|       |
  258|  39.8M|   return carry;
  259|  39.8M|}
_ZN5Botan16bigint_mod_sub_nILm4ETkNS_8WordTypeEmEEvPT0_PKS1_S4_S2_:
  746|  29.2M|inline constexpr void bigint_mod_sub_n(W t[], const W s[], const W mod[], W ws[]) {
  747|       |   // is t < s or not?
  748|  29.2M|   const auto is_lt = bigint_ct_is_lt(t, N, s, N);
  749|       |
  750|       |   // ws = p - s
  751|  29.2M|   const W borrow = bigint_sub3(ws, mod, N, s, N);
  752|       |
  753|       |   // Compute either (t - s) or (t + (p - s)) depending on mask
  754|  29.2M|   const W carry = bigint_cnd_addsub(is_lt, t, ws, s, N);
  755|       |
  756|  29.2M|   if(!std::is_constant_evaluated()) {
  ------------------
  |  Branch (756:7): [True: 29.2M, Folded]
  ------------------
  757|  29.2M|      BOTAN_DEBUG_ASSERT(borrow == 0 && carry == 0);
  ------------------
  |  |   99|  29.2M|      do {                          \
  |  |  100|  29.2M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 29.2M]
  |  |  ------------------
  ------------------
  758|  29.2M|   }
  759|       |
  760|  29.2M|   BOTAN_UNUSED(carry, borrow);
  ------------------
  |  |  118|  29.2M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
  761|  29.2M|}
_ZN5Botan15bigint_ct_is_ltITkNS_8WordTypeEmEENS_2CT4MaskIT_EEPKS3_mS6_mb:
  629|  97.8M|   -> CT::Mask<W> {
  630|  97.8M|   const size_t common_elems = std::min(x_size, y_size);
  631|       |
  632|  97.8M|   auto is_lt = CT::Mask<W>::expand(lt_or_equal);
  633|       |
  634|   676M|   for(size_t i = 0; i != common_elems; i++) {
  ------------------
  |  Branch (634:22): [True: 579M, False: 97.8M]
  ------------------
  635|   579M|      const auto eq = CT::Mask<W>::is_equal(x[i], y[i]);
  636|   579M|      const auto lt = CT::Mask<W>::is_lt(x[i], y[i]);
  637|   579M|      is_lt = eq.select_mask(is_lt, lt);
  638|   579M|   }
  639|       |
  640|  97.8M|   if(x_size < y_size) {
  ------------------
  |  Branch (640:7): [True: 50.5k, False: 97.8M]
  ------------------
  641|  50.5k|      W mask = 0;
  642|   856k|      for(size_t i = x_size; i != y_size; i++) {
  ------------------
  |  Branch (642:30): [True: 805k, False: 50.5k]
  ------------------
  643|   805k|         mask |= y[i];
  644|   805k|      }
  645|       |      // If any bits were set in high part of y, then is_lt should be forced true
  646|  50.5k|      is_lt |= CT::Mask<W>::expand(mask);
  647|  97.8M|   } else if(y_size < x_size) {
  ------------------
  |  Branch (647:14): [True: 6.51k, False: 97.8M]
  ------------------
  648|  6.51k|      W mask = 0;
  649|   135k|      for(size_t i = y_size; i != x_size; i++) {
  ------------------
  |  Branch (649:30): [True: 129k, False: 6.51k]
  ------------------
  650|   129k|         mask |= x[i];
  651|   129k|      }
  652|       |
  653|       |      // If any bits were set in high part of x, then is_lt should be false
  654|  6.51k|      is_lt &= CT::Mask<W>::is_zero(mask);
  655|  6.51k|   }
  656|       |
  657|  97.8M|   return is_lt;
  658|  97.8M|}
_ZN5Botan17bigint_cnd_addsubITkNS_8WordTypeEmEET_NS_2CT4MaskIS1_EEPS1_PKS1_S7_m:
  164|  97.4M|inline constexpr auto bigint_cnd_addsub(CT::Mask<W> mask, W x[], const W y[], const W z[], size_t size) -> W {
  165|  97.4M|   const size_t blocks = size - (size % 8);
  166|       |
  167|  97.4M|   W carry = 0;
  168|  97.4M|   W borrow = 0;
  169|       |
  170|  97.4M|   W t0[8] = {0};
  171|  97.4M|   W t1[8] = {0};
  172|       |
  173|   115M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (173:22): [True: 18.1M, False: 97.4M]
  ------------------
  174|  18.1M|      carry = word8_add3(t0, x + i, y + i, carry);
  175|  18.1M|      borrow = word8_sub3(t1, x + i, z + i, borrow);
  176|       |
  177|   163M|      for(size_t j = 0; j != 8; ++j) {
  ------------------
  |  Branch (177:25): [True: 145M, False: 18.1M]
  ------------------
  178|   145M|         x[i + j] = mask.select(t0[j], t1[j]);
  179|   145M|      }
  180|  18.1M|   }
  181|       |
  182|   530M|   for(size_t i = blocks; i != size; ++i) {
  ------------------
  |  Branch (182:27): [True: 432M, False: 97.4M]
  ------------------
  183|   432M|      t0[0] = word_add(x[i], y[i], &carry);
  184|   432M|      t1[0] = word_sub(x[i], z[i], &borrow);
  185|   432M|      x[i] = mask.select(t0[0], t1[0]);
  186|   432M|   }
  187|       |
  188|  97.4M|   return mask.select(carry, borrow);
  189|  97.4M|}
_ZN5Botan16bigint_mod_sub_nILm6ETkNS_8WordTypeEmEEvPT0_PKS1_S4_S2_:
  746|  50.0M|inline constexpr void bigint_mod_sub_n(W t[], const W s[], const W mod[], W ws[]) {
  747|       |   // is t < s or not?
  748|  50.0M|   const auto is_lt = bigint_ct_is_lt(t, N, s, N);
  749|       |
  750|       |   // ws = p - s
  751|  50.0M|   const W borrow = bigint_sub3(ws, mod, N, s, N);
  752|       |
  753|       |   // Compute either (t - s) or (t + (p - s)) depending on mask
  754|  50.0M|   const W carry = bigint_cnd_addsub(is_lt, t, ws, s, N);
  755|       |
  756|  50.0M|   if(!std::is_constant_evaluated()) {
  ------------------
  |  Branch (756:7): [True: 50.0M, Folded]
  ------------------
  757|  50.0M|      BOTAN_DEBUG_ASSERT(borrow == 0 && carry == 0);
  ------------------
  |  |   99|  50.0M|      do {                          \
  |  |  100|  50.0M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 50.0M]
  |  |  ------------------
  ------------------
  758|  50.0M|   }
  759|       |
  760|  50.0M|   BOTAN_UNUSED(carry, borrow);
  ------------------
  |  |  118|  50.0M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
  761|  50.0M|}
_ZN5Botan14bigint_mod_subITkNS_8WordTypeEmEEvPT_PKS1_S4_mS2_:
  728|  18.1M|inline constexpr void bigint_mod_sub(W t[], const W s[], const W mod[], size_t mod_sw, W ws[]) {
  729|       |   // is t < s or not?
  730|  18.1M|   const auto is_lt = bigint_ct_is_lt(t, mod_sw, s, mod_sw);
  731|       |
  732|       |   // ws = p - s
  733|  18.1M|   const W borrow = bigint_sub3(ws, mod, mod_sw, s, mod_sw);
  734|       |
  735|       |   // Compute either (t - s) or (t + (p - s)) depending on mask
  736|  18.1M|   const W carry = bigint_cnd_addsub(is_lt, t, ws, s, mod_sw);
  737|       |
  738|  18.1M|   if(!std::is_constant_evaluated()) {
  ------------------
  |  Branch (738:7): [True: 18.1M, Folded]
  ------------------
  739|  18.1M|      BOTAN_DEBUG_ASSERT(borrow == 0 && carry == 0);
  ------------------
  |  |   99|  18.1M|      do {                          \
  |  |  100|  18.1M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 18.1M]
  |  |  ------------------
  ------------------
  740|  18.1M|   }
  741|       |
  742|  18.1M|   BOTAN_UNUSED(carry, borrow);
  ------------------
  |  |  118|  18.1M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
  743|  18.1M|}
_ZN5Botan14bigint_sub_absITkNS_8WordTypeEmEEiPT_PKS1_mS4_m:
  698|   471k|inline constexpr int32_t bigint_sub_abs(W z[], const W x[], size_t x_size, const W y[], size_t y_size) {
  699|   471k|   const int32_t relative_size = bigint_cmp(x, x_size, y, y_size);
  700|       |
  701|       |   // Swap if relative_size == -1
  702|   471k|   const bool need_swap = relative_size < 0;
  703|   471k|   CT::conditional_swap_ptr(need_swap, x, y);
  704|   471k|   CT::conditional_swap(need_swap, x_size, y_size);
  705|       |
  706|       |   /*
  707|       |   * We know at this point that x >= y so if y_size is larger than
  708|       |   * x_size, we are guaranteed they are just leading zeros which can
  709|       |   * be ignored
  710|       |   */
  711|   471k|   y_size = std::min(x_size, y_size);
  712|       |
  713|   471k|   bigint_sub3(z, x, x_size, y, y_size);
  714|       |
  715|   471k|   return relative_size;
  716|   471k|}
_ZN5Botan14bigint_linmul3ITkNS_8WordTypeEmEEvPT_PKS1_mS1_:
  558|   246k|inline constexpr void bigint_linmul3(W z[], const W x[], size_t x_size, W y) {
  559|   246k|   const size_t blocks = x_size - (x_size % 8);
  560|       |
  561|   246k|   W carry = 0;
  562|       |
  563|   504k|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (563:22): [True: 258k, False: 246k]
  ------------------
  564|   258k|      carry = word8_linmul3(z + i, x + i, y, carry);
  565|   258k|   }
  566|       |
  567|  1.19M|   for(size_t i = blocks; i != x_size; ++i) {
  ------------------
  |  Branch (567:27): [True: 950k, False: 246k]
  ------------------
  568|   950k|      z[i] = word_madd2(x[i], y, &carry);
  569|   950k|   }
  570|       |
  571|   246k|   z[x_size] = carry;
  572|   246k|}
_ZN5Botan14bigint_linmul2ITkNS_8WordTypeEmEET_PS1_mS1_:
  541|  99.5M|[[nodiscard]] inline constexpr auto bigint_linmul2(W x[], size_t x_size, W y) -> W {
  542|  99.5M|   const size_t blocks = x_size - (x_size % 8);
  543|       |
  544|  99.5M|   W carry = 0;
  545|       |
  546|   347M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (546:22): [True: 247M, False: 99.5M]
  ------------------
  547|   247M|      carry = word8_linmul2(x + i, y, carry);
  548|   247M|   }
  549|       |
  550|   207M|   for(size_t i = blocks; i != x_size; ++i) {
  ------------------
  |  Branch (550:27): [True: 107M, False: 99.5M]
  ------------------
  551|   107M|      x[i] = word_madd2(x[i], y, &carry);
  552|   107M|   }
  553|       |
  554|  99.5M|   return carry;
  555|  99.5M|}
_ZN5Botan20bigint_divop_vartimeITkNS_8WordTypeEmEET_S1_S1_S1_:
  767|   134k|inline constexpr auto bigint_divop_vartime(W n1, W n0, W d) -> W {
  768|   134k|   if(d == 0) {
  ------------------
  |  Branch (768:7): [True: 0, False: 134k]
  ------------------
  769|      0|      throw Invalid_Argument("bigint_divop_vartime divide by zero");
  770|      0|   }
  771|       |
  772|   134k|   if constexpr(WordInfo<W>::dword_is_native) {
  773|   134k|      typename WordInfo<W>::dword n = n1;
  774|   134k|      n <<= WordInfo<W>::bits;
  775|   134k|      n |= n0;
  776|   134k|      return static_cast<W>(n / d);
  777|       |   } else {
  778|       |      W high = n1 % d;
  779|       |      W quotient = 0;
  780|       |
  781|       |      for(size_t i = 0; i != WordInfo<W>::bits; ++i) {
  782|       |         const W high_top_bit = high >> (WordInfo<W>::bits - 1);
  783|       |
  784|       |         high <<= 1;
  785|       |         high |= (n0 >> (WordInfo<W>::bits - 1 - i)) & 1;
  786|       |         quotient <<= 1;
  787|       |
  788|       |         if(high_top_bit || high >= d) {
  789|       |            high -= d;
  790|       |            quotient |= 1;
  791|       |         }
  792|       |      }
  793|       |
  794|       |      return quotient;
  795|       |   }
  796|   134k|}
_ZN5Botan11bigint_shl1ITkNS_8WordTypeEmEEvPT_mmm:
  456|  13.0k|inline constexpr void bigint_shl1(W x[], size_t x_size, size_t x_words, size_t shift) {
  457|  13.0k|   const size_t word_shift = shift / WordInfo<W>::bits;
  458|  13.0k|   const size_t bit_shift = shift % WordInfo<W>::bits;
  459|       |
  460|  13.0k|   copy_mem(x + word_shift, x, x_words);
  461|  13.0k|   clear_mem(x, word_shift);
  462|       |
  463|  13.0k|   const auto carry_mask = CT::Mask<W>::expand(bit_shift);
  464|  13.0k|   const W carry_shift = carry_mask.if_set_return(WordInfo<W>::bits - bit_shift);
  465|       |
  466|  13.0k|   W carry = 0;
  467|   194k|   for(size_t i = word_shift; i != x_size; ++i) {
  ------------------
  |  Branch (467:31): [True: 181k, False: 13.0k]
  ------------------
  468|   181k|      const W w = x[i];
  469|   181k|      x[i] = (w << bit_shift) | carry;
  470|   181k|      carry = carry_mask.if_set_return(w >> carry_shift);
  471|   181k|   }
  472|  13.0k|}
_ZN5Botan11bigint_shr1ITkNS_8WordTypeEmEEvPT_mm:
  475|  71.2M|inline constexpr void bigint_shr1(W x[], size_t x_size, size_t shift) {
  476|  71.2M|   const size_t word_shift = shift / WordInfo<W>::bits;
  477|  71.2M|   const size_t bit_shift = shift % WordInfo<W>::bits;
  478|       |
  479|  71.2M|   const size_t top = x_size >= word_shift ? (x_size - word_shift) : 0;
  ------------------
  |  Branch (479:23): [True: 71.2M, False: 3.73k]
  ------------------
  480|       |
  481|  71.2M|   if(top > 0) {
  ------------------
  |  Branch (481:7): [True: 71.2M, False: 7.18k]
  ------------------
  482|  71.2M|      copy_mem(x, x + word_shift, top);
  483|  71.2M|   }
  484|  71.2M|   clear_mem(x + top, std::min(word_shift, x_size));
  485|       |
  486|  71.2M|   const auto carry_mask = CT::Mask<W>::expand(bit_shift);
  487|  71.2M|   const W carry_shift = carry_mask.if_set_return(WordInfo<W>::bits - bit_shift);
  488|       |
  489|  71.2M|   W carry = 0;
  490|       |
  491|   482M|   for(size_t i = 0; i != top; ++i) {
  ------------------
  |  Branch (491:22): [True: 411M, False: 71.2M]
  ------------------
  492|   411M|      const W w = x[top - i - 1];
  493|   411M|      x[top - i - 1] = (w >> bit_shift) | carry;
  494|   411M|      carry = carry_mask.if_set_return(w << carry_shift);
  495|   411M|   }
  496|  71.2M|}
_ZN5Botan17bigint_monty_redcEPmPKmmmS0_m:
  983|  31.6M|inline void bigint_monty_redc(word z[], const word p[], size_t p_size, word p_dash, word ws[], size_t ws_size) {
  984|  31.6M|   const size_t z_size = 2 * p_size;
  985|       |
  986|  31.6M|   BOTAN_ARG_CHECK(ws_size >= p_size, "Montgomery reduction workspace too small");
  ------------------
  |  |   30|  31.6M|   do {                                                          \
  |  |   31|  31.6M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 31.6M]
  |  |  ------------------
  |  |   32|  31.6M|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  31.6M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 31.6M]
  |  |  ------------------
  ------------------
  987|       |
  988|  31.6M|   if(p_size == 4) {
  ------------------
  |  Branch (988:7): [True: 21.8M, False: 9.75M]
  ------------------
  989|  21.8M|      bigint_monty_redc_4(z, p, p_dash, ws);
  990|  21.8M|   } else if(p_size == 6) {
  ------------------
  |  Branch (990:14): [True: 841k, False: 8.91M]
  ------------------
  991|   841k|      bigint_monty_redc_6(z, p, p_dash, ws);
  992|  8.91M|   } else if(p_size == 8) {
  ------------------
  |  Branch (992:14): [True: 6.72M, False: 2.19M]
  ------------------
  993|  6.72M|      bigint_monty_redc_8(z, p, p_dash, ws);
  994|  6.72M|   } else if(p_size == 16) {
  ------------------
  |  Branch (994:14): [True: 1.30M, False: 893k]
  ------------------
  995|  1.30M|      bigint_monty_redc_16(z, p, p_dash, ws);
  996|  1.30M|   } else if(p_size == 24) {
  ------------------
  |  Branch (996:14): [True: 0, False: 893k]
  ------------------
  997|      0|      bigint_monty_redc_24(z, p, p_dash, ws);
  998|   893k|   } else if(p_size == 32) {
  ------------------
  |  Branch (998:14): [True: 211k, False: 681k]
  ------------------
  999|   211k|      bigint_monty_redc_32(z, p, p_dash, ws);
 1000|   681k|   } else {
 1001|   681k|      bigint_monty_redc_generic(z, z_size, p, p_size, p_dash, ws);
 1002|   681k|   }
 1003|  31.6M|}
_ZN5Botan11bigint_add3ITkNS_8WordTypeEmEEvPT_PKS1_mS4_m:
  277|   346k|inline constexpr void bigint_add3(W z[], const W x[], size_t x_size, const W y[], size_t y_size) {
  278|   346k|   z[x_size > y_size ? x_size : y_size] += bigint_add3_nc(z, x, x_size, y, y_size);
  ------------------
  |  Branch (278:6): [True: 67.0k, False: 279k]
  ------------------
  279|   346k|}
_ZN5Botan11bigint_shl2ITkNS_8WordTypeEmEEvPT_PKS1_mm:
  499|  6.51k|inline constexpr void bigint_shl2(W y[], const W x[], size_t x_size, size_t shift) {
  500|  6.51k|   const size_t word_shift = shift / WordInfo<W>::bits;
  501|  6.51k|   const size_t bit_shift = shift % WordInfo<W>::bits;
  502|       |
  503|  6.51k|   copy_mem(y + word_shift, x, x_size);
  504|       |
  505|  6.51k|   const auto carry_mask = CT::Mask<W>::expand(bit_shift);
  506|  6.51k|   const W carry_shift = carry_mask.if_set_return(WordInfo<W>::bits - bit_shift);
  507|       |
  508|  6.51k|   W carry = 0;
  509|  34.3k|   for(size_t i = word_shift; i != x_size + word_shift + 1; ++i) {
  ------------------
  |  Branch (509:31): [True: 27.8k, False: 6.51k]
  ------------------
  510|  27.8k|      const W w = y[i];
  511|  27.8k|      y[i] = (w << bit_shift) | carry;
  512|  27.8k|      carry = carry_mask.if_set_return(w >> carry_shift);
  513|  27.8k|   }
  514|  6.51k|}
_ZN5Botan11bigint_shr2ITkNS_8WordTypeEmEEvPT_PKS1_mm:
  517|  28.3M|inline constexpr void bigint_shr2(W y[], const W x[], size_t x_size, size_t shift) {
  518|  28.3M|   const size_t word_shift = shift / WordInfo<W>::bits;
  519|  28.3M|   const size_t bit_shift = shift % WordInfo<W>::bits;
  520|  28.3M|   const size_t new_size = x_size < word_shift ? 0 : (x_size - word_shift);
  ------------------
  |  Branch (520:28): [True: 0, False: 28.3M]
  ------------------
  521|       |
  522|  28.3M|   if(new_size > 0) {
  ------------------
  |  Branch (522:7): [True: 28.3M, False: 0]
  ------------------
  523|  28.3M|      copy_mem(y, x + word_shift, new_size);
  524|  28.3M|   }
  525|       |
  526|  28.3M|   const auto carry_mask = CT::Mask<W>::expand(bit_shift);
  527|  28.3M|   const W carry_shift = carry_mask.if_set_return(WordInfo<W>::bits - bit_shift);
  528|       |
  529|  28.3M|   W carry = 0;
  530|   311M|   for(size_t i = new_size; i > 0; --i) {
  ------------------
  |  Branch (530:29): [True: 283M, False: 28.3M]
  ------------------
  531|   283M|      W w = y[i - 1];
  532|   283M|      y[i - 1] = (w >> bit_shift) | carry;
  533|   283M|      carry = carry_mask.if_set_return(w << carry_shift);
  534|   283M|   }
  535|  28.3M|}
_ZN5Botan15bigint_ct_is_eqITkNS_8WordTypeEmEENS_2CT4MaskIT_EEPKS3_mS6_m:
  661|   292k|inline constexpr auto bigint_ct_is_eq(const W x[], size_t x_size, const W y[], size_t y_size) -> CT::Mask<W> {
  662|   292k|   const size_t common_elems = std::min(x_size, y_size);
  663|       |
  664|   292k|   W diff = 0;
  665|       |
  666|  1.54M|   for(size_t i = 0; i != common_elems; i++) {
  ------------------
  |  Branch (666:22): [True: 1.25M, False: 292k]
  ------------------
  667|  1.25M|      diff |= (x[i] ^ y[i]);
  668|  1.25M|   }
  669|       |
  670|       |   // If any bits were set in high part of x/y, then they are not equal
  671|   292k|   if(x_size < y_size) {
  ------------------
  |  Branch (671:7): [True: 2.48k, False: 290k]
  ------------------
  672|  10.4k|      for(size_t i = x_size; i != y_size; i++) {
  ------------------
  |  Branch (672:30): [True: 7.93k, False: 2.48k]
  ------------------
  673|  7.93k|         diff |= y[i];
  674|  7.93k|      }
  675|   290k|   } else if(y_size < x_size) {
  ------------------
  |  Branch (675:14): [True: 8.49k, False: 281k]
  ------------------
  676|  30.0k|      for(size_t i = y_size; i != x_size; i++) {
  ------------------
  |  Branch (676:30): [True: 21.5k, False: 8.49k]
  ------------------
  677|  21.5k|         diff |= x[i];
  678|  21.5k|      }
  679|  8.49k|   }
  680|       |
  681|   292k|   return CT::Mask<W>::is_zero(diff);
  682|   292k|}
_ZN5Botan14bigint_cnd_addITkNS_8WordTypeEmEET_S1_PS1_mPKS1_m:
   41|   232M|inline constexpr W bigint_cnd_add(W cnd, W x[], size_t x_size, const W y[], size_t y_size) {
   42|   232M|   BOTAN_ASSERT(x_size >= y_size, "Expected sizes");
  ------------------
  |  |   51|   232M|   do {                                                                                 \
  |  |   52|   232M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 232M]
  |  |  ------------------
  |  |   53|   232M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|   232M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 232M]
  |  |  ------------------
  ------------------
   43|       |
   44|   232M|   const auto mask = CT::Mask<W>::expand(cnd);
   45|       |
   46|   232M|   W carry = 0;
   47|       |
   48|   232M|   const size_t blocks = y_size - (y_size % 8);
   49|   232M|   W z[8] = {0};
   50|       |
   51|   256M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (51:22): [True: 23.9M, False: 232M]
  ------------------
   52|  23.9M|      carry = word8_add3(z, x + i, y + i, carry);
   53|  23.9M|      mask.select_n(x + i, z, x + i, 8);
   54|  23.9M|   }
   55|       |
   56|  1.33G|   for(size_t i = blocks; i != y_size; ++i) {
  ------------------
  |  Branch (56:27): [True: 1.10G, False: 232M]
  ------------------
   57|  1.10G|      z[0] = word_add(x[i], y[i], &carry);
   58|  1.10G|      x[i] = mask.select(z[0], x[i]);
   59|  1.10G|   }
   60|       |
   61|   359M|   for(size_t i = y_size; i != x_size; ++i) {
  ------------------
  |  Branch (61:27): [True: 126M, False: 232M]
  ------------------
   62|   126M|      z[0] = word_add(x[i], static_cast<W>(0), &carry);
   63|   126M|      x[i] = mask.select(z[0], x[i]);
   64|   126M|   }
   65|       |
   66|   232M|   return mask.if_set_return(carry);
   67|   232M|}
_ZN5Botan15bigint_cnd_swapITkNS_8WordTypeEmEEvT_PS1_S2_m:
   29|  88.5M|inline constexpr void bigint_cnd_swap(W cnd, W x[], W y[], size_t size) {
   30|  88.5M|   const auto mask = CT::Mask<W>::expand(cnd);
   31|       |
   32|  1.74G|   for(size_t i = 0; i != size; ++i) {
  ------------------
  |  Branch (32:22): [True: 1.65G, False: 88.5M]
  ------------------
   33|  1.65G|      const W a = x[i];
   34|  1.65G|      const W b = y[i];
   35|  1.65G|      x[i] = mask.select(b, a);
   36|  1.65G|      y[i] = mask.select(a, b);
   37|  1.65G|   }
   38|  88.5M|}
_ZN5Botan14bigint_sub_absITkNS_8WordTypeEmEENS_2CT4MaskIT_EEPS3_PKS3_S7_mS5_:
  428|   992k|inline constexpr auto bigint_sub_abs(W z[], const W x[], const W y[], size_t N, W ws[]) -> CT::Mask<W> {
  429|       |   // Subtract in both direction then conditional copy out the result
  430|       |
  431|   992k|   W* ws0 = ws;
  432|   992k|   W* ws1 = ws + N;
  433|       |
  434|   992k|   W borrow0 = 0;
  435|   992k|   W borrow1 = 0;
  436|       |
  437|   992k|   const size_t blocks = N - (N % 8);
  438|       |
  439|  3.66M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (439:22): [True: 2.67M, False: 992k]
  ------------------
  440|  2.67M|      borrow0 = word8_sub3(ws0 + i, x + i, y + i, borrow0);
  441|  2.67M|      borrow1 = word8_sub3(ws1 + i, y + i, x + i, borrow1);
  442|  2.67M|   }
  443|       |
  444|   993k|   for(size_t i = blocks; i != N; ++i) {
  ------------------
  |  Branch (444:27): [True: 928, False: 992k]
  ------------------
  445|    928|      ws0[i] = word_sub(x[i], y[i], &borrow0);
  446|    928|      ws1[i] = word_sub(y[i], x[i], &borrow1);
  447|    928|   }
  448|       |
  449|   992k|   return CT::conditional_copy_mem(borrow0, z, ws1, ws0, N);
  450|   992k|}
_ZN5Botan21bigint_cnd_add_or_subITkNS_8WordTypeEmEEvNS_2CT4MaskIT_EEPS3_PKS3_m:
  128|   272k|inline constexpr void bigint_cnd_add_or_sub(CT::Mask<W> mask, W x[], const W y[], size_t size) {
  129|   272k|   const size_t blocks = size - (size % 8);
  130|       |
  131|   272k|   W carry = 0;
  132|   272k|   W borrow = 0;
  133|       |
  134|   272k|   W t0[8] = {0};
  135|   272k|   W t1[8] = {0};
  136|       |
  137|  2.46M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (137:22): [True: 2.19M, False: 272k]
  ------------------
  138|  2.19M|      carry = word8_add3(t0, x + i, y + i, carry);
  139|  2.19M|      borrow = word8_sub3(t1, x + i, y + i, borrow);
  140|       |
  141|  19.7M|      for(size_t j = 0; j != 8; ++j) {
  ------------------
  |  Branch (141:25): [True: 17.5M, False: 2.19M]
  ------------------
  142|  17.5M|         x[i + j] = mask.select(t0[j], t1[j]);
  143|  17.5M|      }
  144|  2.19M|   }
  145|       |
  146|   273k|   for(size_t i = blocks; i != size; ++i) {
  ------------------
  |  Branch (146:27): [True: 1.39k, False: 272k]
  ------------------
  147|  1.39k|      const W a = word_add(x[i], y[i], &carry);
  148|  1.39k|      const W s = word_sub(x[i], y[i], &borrow);
  149|       |
  150|  1.39k|      x[i] = mask.select(a, s);
  151|  1.39k|   }
  152|   272k|}
_ZN5Botan22bigint_monty_maybe_subITkNS_8WordTypeEmEEvmPT_S1_PKS1_S4_:
  368|   681k|inline constexpr void bigint_monty_maybe_sub(size_t N, W z[], W x0, const W x[], const W p[]) {
  369|   681k|   W borrow = 0;
  370|       |
  371|   681k|   const size_t blocks = N - (N % 8);
  372|       |
  373|  3.87M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (373:22): [True: 3.18M, False: 681k]
  ------------------
  374|  3.18M|      borrow = word8_sub3(z + i, x + i, p + i, borrow);
  375|  3.18M|   }
  376|       |
  377|  1.59M|   for(size_t i = blocks; i != N; ++i) {
  ------------------
  |  Branch (377:27): [True: 914k, False: 681k]
  ------------------
  378|   914k|      z[i] = word_sub(x[i], p[i], &borrow);
  379|   914k|   }
  380|       |
  381|   681k|   word_sub(x0, static_cast<W>(0), &borrow);
  382|       |
  383|   681k|   CT::conditional_assign_mem(borrow, z, x, N);
  384|   681k|}
_ZN5Botan22bigint_monty_maybe_subILm4ETkNS_8WordTypeEmEEvPT0_S1_PKS1_S4_:
  397|  21.8M|inline constexpr void bigint_monty_maybe_sub(W z[N], W x0, const W x[N], const W y[N]) {
  398|  21.8M|   const constexpr size_t blocks = N - (N % 8);
  399|       |
  400|  21.8M|   W borrow = 0;
  401|       |
  402|  21.8M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (402:22): [True: 0, False: 21.8M]
  ------------------
  403|      0|      borrow = word8_sub3(z + i, x + i, y + i, borrow);
  404|      0|   }
  405|       |
  406|   109M|   for(size_t i = blocks; i != N; ++i) {
  ------------------
  |  Branch (406:27): [True: 87.5M, False: 21.8M]
  ------------------
  407|  87.5M|      z[i] = word_sub(x[i], y[i], &borrow);
  408|  87.5M|   }
  409|       |
  410|  21.8M|   word_sub(x0, static_cast<W>(0), &borrow);
  411|       |
  412|  21.8M|   CT::conditional_assign_mem(borrow, z, x, N);
  413|  21.8M|}
_ZN5Botan22bigint_monty_maybe_subILm6ETkNS_8WordTypeEmEEvPT0_S1_PKS1_S4_:
  397|   841k|inline constexpr void bigint_monty_maybe_sub(W z[N], W x0, const W x[N], const W y[N]) {
  398|   841k|   const constexpr size_t blocks = N - (N % 8);
  399|       |
  400|   841k|   W borrow = 0;
  401|       |
  402|   841k|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (402:22): [True: 0, False: 841k]
  ------------------
  403|      0|      borrow = word8_sub3(z + i, x + i, y + i, borrow);
  404|      0|   }
  405|       |
  406|  5.89M|   for(size_t i = blocks; i != N; ++i) {
  ------------------
  |  Branch (406:27): [True: 5.05M, False: 841k]
  ------------------
  407|  5.05M|      z[i] = word_sub(x[i], y[i], &borrow);
  408|  5.05M|   }
  409|       |
  410|   841k|   word_sub(x0, static_cast<W>(0), &borrow);
  411|       |
  412|   841k|   CT::conditional_assign_mem(borrow, z, x, N);
  413|   841k|}
_ZN5Botan22bigint_monty_maybe_subILm8ETkNS_8WordTypeEmEEvPT0_S1_PKS1_S4_:
  397|  6.72M|inline constexpr void bigint_monty_maybe_sub(W z[N], W x0, const W x[N], const W y[N]) {
  398|  6.72M|   const constexpr size_t blocks = N - (N % 8);
  399|       |
  400|  6.72M|   W borrow = 0;
  401|       |
  402|  13.4M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (402:22): [True: 6.72M, False: 6.72M]
  ------------------
  403|  6.72M|      borrow = word8_sub3(z + i, x + i, y + i, borrow);
  404|  6.72M|   }
  405|       |
  406|  6.72M|   for(size_t i = blocks; i != N; ++i) {
  ------------------
  |  Branch (406:27): [True: 0, False: 6.72M]
  ------------------
  407|      0|      z[i] = word_sub(x[i], y[i], &borrow);
  408|      0|   }
  409|       |
  410|  6.72M|   word_sub(x0, static_cast<W>(0), &borrow);
  411|       |
  412|  6.72M|   CT::conditional_assign_mem(borrow, z, x, N);
  413|  6.72M|}
_ZN5Botan22bigint_monty_maybe_subILm16ETkNS_8WordTypeEmEEvPT0_S1_PKS1_S4_:
  397|  1.30M|inline constexpr void bigint_monty_maybe_sub(W z[N], W x0, const W x[N], const W y[N]) {
  398|  1.30M|   const constexpr size_t blocks = N - (N % 8);
  399|       |
  400|  1.30M|   W borrow = 0;
  401|       |
  402|  3.90M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (402:22): [True: 2.60M, False: 1.30M]
  ------------------
  403|  2.60M|      borrow = word8_sub3(z + i, x + i, y + i, borrow);
  404|  2.60M|   }
  405|       |
  406|  1.30M|   for(size_t i = blocks; i != N; ++i) {
  ------------------
  |  Branch (406:27): [True: 0, False: 1.30M]
  ------------------
  407|      0|      z[i] = word_sub(x[i], y[i], &borrow);
  408|      0|   }
  409|       |
  410|  1.30M|   word_sub(x0, static_cast<W>(0), &borrow);
  411|       |
  412|  1.30M|   CT::conditional_assign_mem(borrow, z, x, N);
  413|  1.30M|}
_ZN5Botan22bigint_monty_maybe_subILm32ETkNS_8WordTypeEmEEvPT0_S1_PKS1_S4_:
  397|   211k|inline constexpr void bigint_monty_maybe_sub(W z[N], W x0, const W x[N], const W y[N]) {
  398|   211k|   const constexpr size_t blocks = N - (N % 8);
  399|       |
  400|   211k|   W borrow = 0;
  401|       |
  402|  1.05M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (402:22): [True: 847k, False: 211k]
  ------------------
  403|   847k|      borrow = word8_sub3(z + i, x + i, y + i, borrow);
  404|   847k|   }
  405|       |
  406|   211k|   for(size_t i = blocks; i != N; ++i) {
  ------------------
  |  Branch (406:27): [True: 0, False: 211k]
  ------------------
  407|      0|      z[i] = word_sub(x[i], y[i], &borrow);
  408|      0|   }
  409|       |
  410|   211k|   word_sub(x0, static_cast<W>(0), &borrow);
  411|       |
  412|   211k|   CT::conditional_assign_mem(borrow, z, x, N);
  413|   211k|}
_ZN5Botan14bigint_cnd_subITkNS_8WordTypeEmEET_S1_PS1_PKS1_m:
  116|  98.9M|inline constexpr auto bigint_cnd_sub(W cnd, W x[], const W y[], size_t size) -> W {
  117|  98.9M|   return bigint_cnd_sub(cnd, x, size, y, size);
  118|  98.9M|}
_ZN5Botan14bigint_cnd_subITkNS_8WordTypeEmEET_S1_PS1_mPKS1_m:
   83|  98.9M|inline constexpr auto bigint_cnd_sub(W cnd, W x[], size_t x_size, const W y[], size_t y_size) -> W {
   84|  98.9M|   BOTAN_ASSERT(x_size >= y_size, "Expected sizes");
  ------------------
  |  |   51|  98.9M|   do {                                                                                 \
  |  |   52|  98.9M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 98.9M]
  |  |  ------------------
  |  |   53|  98.9M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  98.9M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 98.9M]
  |  |  ------------------
  ------------------
   85|       |
   86|  98.9M|   const auto mask = CT::Mask<W>::expand(cnd);
   87|       |
   88|  98.9M|   W carry = 0;
   89|       |
   90|  98.9M|   const size_t blocks = y_size - (y_size % 8);
   91|  98.9M|   W z[8] = {0};
   92|       |
   93|   143M|   for(size_t i = 0; i != blocks; i += 8) {
  ------------------
  |  Branch (93:22): [True: 44.3M, False: 98.9M]
  ------------------
   94|  44.3M|      carry = word8_sub3(z, x + i, y + i, carry);
   95|  44.3M|      mask.select_n(x + i, z, x + i, 8);
   96|  44.3M|   }
   97|       |
   98|   398M|   for(size_t i = blocks; i != y_size; ++i) {
  ------------------
  |  Branch (98:27): [True: 299M, False: 98.9M]
  ------------------
   99|   299M|      z[0] = word_sub(x[i], y[i], &carry);
  100|   299M|      x[i] = mask.select(z[0], x[i]);
  101|   299M|   }
  102|       |
  103|  98.9M|   for(size_t i = y_size; i != x_size; ++i) {
  ------------------
  |  Branch (103:27): [True: 0, False: 98.9M]
  ------------------
  104|      0|      z[0] = word_sub(x[i], static_cast<W>(0), &carry);
  105|      0|      x[i] = mask.select(z[0], x[i]);
  106|      0|   }
  107|       |
  108|  98.9M|   return mask.if_set_return(carry);
  109|  98.9M|}
_ZN5Botan14bigint_cnd_addITkNS_8WordTypeEmEET_S1_PS1_PKS1_m:
   74|   105M|inline constexpr W bigint_cnd_add(W cnd, W x[], const W y[], size_t size) {
   75|   105M|   return bigint_cnd_add(cnd, x, size, y, size);
   76|   105M|}
_ZN5Botan14bigint_cnd_absITkNS_8WordTypeEmEEvT_PS1_m:
  197|  35.2M|inline constexpr void bigint_cnd_abs(W cnd, W x[], size_t size) {
  198|  35.2M|   const auto mask = CT::Mask<W>::expand(cnd);
  199|       |
  200|  35.2M|   W carry = mask.if_set_return(1);
  201|   234M|   for(size_t i = 0; i != size; ++i) {
  ------------------
  |  Branch (201:22): [True: 199M, False: 35.2M]
  ------------------
  202|   199M|      const W z = word_add(~x[i], static_cast<W>(0), &carry);
  203|   199M|      x[i] = mask.select(z, x[i]);
  204|   199M|   }
  205|  35.2M|}
_ZN5Botan13monty_inverseITkNS_8WordTypeEmEET_S1_:
  821|  27.5k|inline constexpr auto monty_inverse(W a) -> W {
  822|  27.5k|   if(a % 2 == 0) {
  ------------------
  |  Branch (822:7): [True: 0, False: 27.5k]
  ------------------
  823|      0|      throw Invalid_Argument("monty_inverse only valid for odd integers");
  824|      0|   }
  825|       |
  826|       |   /*
  827|       |   * From "A New Algorithm for Inversion mod p^k" by Çetin Kaya Koç
  828|       |   * https://eprint.iacr.org/2017/411.pdf sections 5 and 7.
  829|       |   */
  830|       |
  831|  27.5k|   W b = 1;
  832|  27.5k|   W r = 0;
  833|       |
  834|  1.79M|   for(size_t i = 0; i != WordInfo<W>::bits; ++i) {
  ------------------
  |  Branch (834:22): [True: 1.76M, False: 27.5k]
  ------------------
  835|  1.76M|      const W bi = b % 2;
  836|  1.76M|      r >>= 1;
  837|  1.76M|      r += bi << (WordInfo<W>::bits - 1);
  838|       |
  839|  1.76M|      b -= a * bi;
  840|  1.76M|      b >>= 1;
  841|  1.76M|   }
  842|       |
  843|       |   // Now invert in addition space
  844|  27.5k|   r = (WordInfo<W>::max - r) + 1;
  845|       |
  846|  27.5k|   return r;
  847|  27.5k|}

_ZN5Botan6PK_Ops22Verification_with_HashD2Ev:
   52|  42.2k|      ~Verification_with_Hash() override = default;

_ZN5Botan15RawHashFunctionC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEEm:
   27|  42.2k|      RawHashFunction(std::string_view name, size_t output_length) : m_name(name), m_output_length(output_length) {}
_ZN5Botan15RawHashFunctionC2ENSt3__110unique_ptrINS_12HashFunctionENS1_14default_deleteIS3_EEEE:
   25|  35.3k|      RawHashFunction(std::unique_ptr<HashFunction> hash) : RawHashFunction(hash->name(), hash->output_length()) {}

_ZNK5Botan10RIPEMD_1604nameEv:
   32|  1.60k|      std::string name() const override { return "RIPEMD-160"; }
_ZNK5Botan10RIPEMD_16013output_lengthEv:
   34|  3.94k|      size_t output_length() const override { return output_bytes; }

_ZN5Botan4rotlILm8EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   121k|{
   24|   121k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   121k|}
_ZN5Botan4rotlILm1EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  97.7k|{
   24|  97.7k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  97.7k|}
_ZN5Botan4rotlILm4EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   131k|{
   24|   131k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   131k|}
_ZN5Botan4rotrILm18EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan4rotrILm6EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan4rotlILm9EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  3.11M|{
   24|  3.11M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  3.11M|}
_ZN5Botan4rotlILm6EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   253k|{
   24|   253k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   253k|}
_ZN5Botan4rotlILm20EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   131k|{
   24|   131k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   131k|}
_ZN5Botan4rotlILm10EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  1.35M|{
   24|  1.35M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  1.35M|}
_ZN5Botan4rotlILm13EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   121k|{
   24|   121k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   121k|}
_ZN5Botan4rotlILm23EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  1.29M|{
   24|  1.29M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  1.29M|}
_ZN5Botan4rotlILm7EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  2.84M|{
   24|  2.84M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  2.84M|}
_ZN5Botan4rotlILm12EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  1.68M|{
   24|  1.68M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  1.68M|}
_ZN5Botan4rotlILm17EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  1.56M|{
   24|  1.56M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  1.56M|}
_ZN5Botan4rotlILm22EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   131k|{
   24|   131k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   131k|}
_ZN5Botan4rotlILm5EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   375k|{
   24|   375k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   375k|}
_ZN5Botan4rotlILm14EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   253k|{
   24|   253k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   253k|}
_ZN5Botan4rotlILm11EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   253k|{
   24|   253k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   253k|}
_ZN5Botan4rotlILm16EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   131k|{
   24|   131k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   131k|}
_ZN5Botan4rotlILm15EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  2.58M|{
   24|  2.58M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  2.58M|}
_ZN5Botan4rotlILm21EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   131k|{
   24|   131k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   131k|}
_ZN5Botan4rotlILm30EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   122k|{
   24|   122k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   122k|}
_ZN5Botan3rhoILm2ELm13ELm22EjEET2_S1_:
   51|  12.5M|inline constexpr T rho(T x) {
   52|  12.5M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
   53|  12.5M|}
_ZN5Botan4rotrILm2EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan4rotrILm13EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan4rotrILm22EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan3rhoILm6ELm11ELm25EjEET2_S1_:
   51|  12.5M|inline constexpr T rho(T x) {
   52|  12.5M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
   53|  12.5M|}
_ZN5Botan4rotrILm11EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan4rotrILm25EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan5sigmaILm17ELm19ELm10EjEET2_S1_:
   43|  12.5M|inline constexpr T sigma(T x) {
   44|  12.5M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
   45|  12.5M|}
_ZN5Botan4rotrILm17EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan4rotrILm19EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan5sigmaILm7ELm18ELm3EjEET2_S1_:
   43|  12.5M|inline constexpr T sigma(T x) {
   44|  12.5M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
   45|  12.5M|}
_ZN5Botan4rotrILm7EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|  12.5M|{
   36|  12.5M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|  12.5M|}
_ZN5Botan3rhoILm14ELm18ELm41EmEET2_S1_:
   51|   257M|inline constexpr T rho(T x) {
   52|   257M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
   53|   257M|}
_ZN5Botan4rotrILm14EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan4rotrILm18EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan4rotrILm41EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan3rhoILm28ELm34ELm39EmEET2_S1_:
   51|   257M|inline constexpr T rho(T x) {
   52|   257M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ rotr<R3>(x);
   53|   257M|}
_ZN5Botan4rotrILm28EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan4rotrILm34EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan4rotrILm39EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan5sigmaILm19ELm61ELm6EmEET2_S1_:
   43|   257M|inline constexpr T sigma(T x) {
   44|   257M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
   45|   257M|}
_ZN5Botan4rotrILm19EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan4rotrILm61EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan5sigmaILm1ELm8ELm7EmEET2_S1_:
   43|   257M|inline constexpr T sigma(T x) {
   44|   257M|   return rotr<R1>(x) ^ rotr<R2>(x) ^ (x >> S);
   45|   257M|}
_ZN5Botan4rotrILm1EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan4rotrILm8EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   35|   257M|{
   36|   257M|   return static_cast<T>((input >> ROT) | (input << (8 * sizeof(T) - ROT)));
   37|   257M|}
_ZN5Botan4rotlILm19EjEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  1.43M|{
   24|  1.43M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  1.43M|}
_ZN5Botan4rotlILm1EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|  3.51M|{
   24|  3.51M|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|  3.51M|}
_ZN5Botan4rotlILm44EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm43EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm21EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm14EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm28EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm20EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm3EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm45EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm61EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm6EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm25EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm8EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm18EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm27EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm36EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm10EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm15EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm56EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm62EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm55EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm39EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm41EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}
_ZN5Botan4rotlILm2EmEET0_S1_QaagtT_Li0EltT_mlLi8EstS1_:
   23|   586k|{
   24|   586k|   return static_cast<T>((input << ROT) | (input >> (8 * sizeof(T) - ROT)));
   25|   586k|}

_ZN5Botan8round_upEmm:
   21|   488k|inline size_t round_up(size_t n, size_t align_to) {
   22|   488k|   BOTAN_ARG_CHECK(align_to != 0, "align_to must not be 0");
  ------------------
  |  |   30|   488k|   do {                                                          \
  |  |   31|   488k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 488k]
  |  |  ------------------
  |  |   32|   488k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|   488k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 488k]
  |  |  ------------------
  ------------------
   23|       |
   24|   488k|   if(n % align_to) {
  ------------------
  |  Branch (24:7): [True: 339k, False: 149k]
  ------------------
   25|   339k|      n += align_to - (n % align_to);
   26|   339k|   }
   27|   488k|   return n;
   28|   488k|}

_ZN5Botan11checked_mulEmm:
   47|  12.0M|inline std::optional<size_t> checked_mul(size_t x, size_t y) {
   48|  12.0M|#if BOTAN_COMPILER_HAS_BUILTIN(__builtin_add_overflow)
   49|  12.0M|   size_t z;
   50|  12.0M|   if(__builtin_mul_overflow(x, y, &z)) [[unlikely]]
  ------------------
  |  Branch (50:7): [True: 0, False: 12.0M]
  ------------------
   51|       |#elif defined(_MSC_VER)
   52|       |   size_t z;
   53|       |   if(SizeTMult(x, y, &z) != S_OK) [[unlikely]]
   54|       |#else
   55|       |   size_t z = x * y;
   56|       |   if(y && z / y != x) [[unlikely]]
   57|       |#endif
   58|      0|   {
   59|      0|      return std::nullopt;
   60|      0|   }
   61|  12.0M|   return z;
   62|  12.0M|}

_ZNK5Botan9SCAN_Name9algo_nameEv:
   44|   435k|      const std::string& algo_name() const { return m_alg_name; }
_ZNK5Botan9SCAN_Name9arg_countEv:
   49|   383k|      size_t arg_count() const { return m_args.size(); }

_ZNK5Botan5SHA_14nameEv:
   32|  1.66k|      std::string name() const override { return "SHA-1"; }
_ZNK5Botan5SHA_113output_lengthEv:
   34|  2.42k|      size_t output_length() const override { return 20; }

_ZNK5Botan7SHA_2244nameEv:
   33|  4.07k|      std::string name() const override { return "SHA-224"; }
_ZNK5Botan7SHA_22413output_lengthEv:
   35|  8.97k|      size_t output_length() const override { return output_bytes; }
_ZNK5Botan7SHA_2564nameEv:
   73|  15.7k|      std::string name() const override { return "SHA-256"; }
_ZNK5Botan7SHA_25613output_lengthEv:
   75|  54.4k|      size_t output_length() const override { return output_bytes; }

_ZN5Botan9SHA2_32_FEjjjRjjjjS0_S0_jjjj:
   31|  12.5M|                                  uint32_t magic) {
   32|  12.5M|   uint32_t A_rho = rho<2, 13, 22>(A);
   33|  12.5M|   uint32_t E_rho = rho<6, 11, 25>(E);
   34|  12.5M|   uint32_t M2_sigma = sigma<17, 19, 10>(M2);
   35|  12.5M|   uint32_t M4_sigma = sigma<7, 18, 3>(M4);
   36|  12.5M|   H += magic + E_rho + choose(E, F, G) + M1;
   37|  12.5M|   D += H;
   38|  12.5M|   H += A_rho + majority(A, B, C);
   39|  12.5M|   M1 += M2_sigma + M3 + M4_sigma;
   40|  12.5M|}

_ZNK5Botan7SHA_3844nameEv:
   32|  11.8k|      std::string name() const override { return "SHA-384"; }
_ZNK5Botan7SHA_38413output_lengthEv:
   34|  25.2k|      size_t output_length() const override { return output_bytes; }
_ZNK5Botan7SHA_5124nameEv:
   72|  9.34k|      std::string name() const override { return "SHA-512"; }
_ZNK5Botan7SHA_51213output_lengthEv:
   74|  1.50M|      size_t output_length() const override { return output_bytes; }
_ZNK5Botan7SHA_51215hash_block_sizeEv:
   76|  96.3k|      size_t hash_block_size() const override { return block_bytes; }
_ZN5Botan7SHA_5125clearEv:
   84|   385k|      void clear() override { m_md.clear(); }

_ZN5Botan9SHA2_64_FEmmmRmmmmS0_S0_mmmm:
   31|   257M|                                  uint64_t magic) {
   32|   257M|   const uint64_t E_rho = rho<14, 18, 41>(E);
   33|   257M|   const uint64_t A_rho = rho<28, 34, 39>(A);
   34|   257M|   const uint64_t M2_sigma = sigma<19, 61, 6>(M2);
   35|   257M|   const uint64_t M4_sigma = sigma<1, 8, 7>(M4);
   36|   257M|   H += magic + E_rho + choose(E, F, G) + M1;
   37|   257M|   D += H;
   38|   257M|   H += A_rho + majority(A, B, C);
   39|   257M|   M1 += M2_sigma + M3 + M4_sigma;
   40|   257M|}

_ZNK5Botan5SHA_313output_lengthEv:
   31|  18.1k|      size_t output_length() const override { return m_output_length; }

_ZNK5Botan3SM34nameEv:
   32|  1.96k|      std::string name() const override { return "SM3"; }
_ZNK5Botan3SM313output_lengthEv:
   34|  9.56k|      size_t output_length() const override { return output_bytes; }

_ZN5Botan12BufferSlicerC2ENSt3__14spanIKhLm18446744073709551615EEE:
  144|  7.79M|      BufferSlicer(std::span<const uint8_t> buffer) : m_remaining(buffer) {}
_ZN5Botan12BufferSlicer4takeEm:
  156|  8.49M|      std::span<const uint8_t> take(const size_t count) {
  157|  8.49M|         BOTAN_STATE_CHECK(remaining() >= count);
  ------------------
  |  |   42|  8.49M|   do {                                                         \
  |  |   43|  8.49M|      if(!(expr))                                               \
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 8.49M]
  |  |  ------------------
  |  |   44|  8.49M|         Botan::throw_invalid_state(#expr, __func__, __FILE__); \
  |  |   45|  8.49M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (45:12): [Folded, False: 8.49M]
  |  |  ------------------
  ------------------
  158|  8.49M|         auto result = m_remaining.first(count);
  159|  8.49M|         m_remaining = m_remaining.subspan(count);
  160|  8.49M|         return result;
  161|  8.49M|      }
_ZN5Botan12BufferSlicer9take_byteEv:
  176|   341k|      uint8_t take_byte() { return take(1)[0]; }
_ZNK5Botan12BufferSlicer9remainingEv:
  185|  16.5M|      size_t remaining() const { return m_remaining.size(); }
_ZNK5Botan12BufferSlicer5emptyEv:
  187|  9.17M|      bool empty() const { return m_remaining.empty(); }
_ZN5Botan13BufferStufferC2ENSt3__14spanIhLm18446744073709551615EEE:
  202|  34.9k|      constexpr BufferStuffer(std::span<uint8_t> buffer) : m_buffer(buffer) {}
_ZN5Botan13BufferStuffer4nextEm:
  208|   141k|      constexpr std::span<uint8_t> next(size_t bytes) {
  209|   141k|         BOTAN_STATE_CHECK(m_buffer.size() >= bytes);
  ------------------
  |  |   42|   141k|   do {                                                         \
  |  |   43|   141k|      if(!(expr))                                               \
  |  |  ------------------
  |  |  |  Branch (43:10): [True: 0, False: 141k]
  |  |  ------------------
  |  |   44|   141k|         Botan::throw_invalid_state(#expr, __func__, __FILE__); \
  |  |   45|   141k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (45:12): [Folded, False: 141k]
  |  |  ------------------
  ------------------
  210|       |
  211|   141k|         auto result = m_buffer.first(bytes);
  212|   141k|         m_buffer = m_buffer.subspan(bytes);
  213|   141k|         return result;
  214|   141k|      }
_ZN5Botan13BufferStuffer6appendENSt3__14spanIKhLm18446744073709551615EEE:
  235|  28.7k|      constexpr void append(std::span<const uint8_t> buffer) {
  236|  28.7k|         auto sink = next(buffer.size());
  237|  28.7k|         std::copy(buffer.begin(), buffer.end(), sink.begin());
  238|  28.7k|      }
_ZN5Botan13BufferStuffer6appendEhm:
  240|  43.0k|      constexpr void append(uint8_t b, size_t repeat = 1) {
  241|  43.0k|         auto sink = next(repeat);
  242|  43.0k|         std::fill(sink.begin(), sink.end(), b);
  243|  43.0k|      }
_ZNK5Botan13BufferStuffer4fullEv:
  245|  55.4k|      constexpr bool full() const { return m_buffer.empty(); }
_ZNK5Botan13BufferStuffer18remaining_capacityEv:
  247|  94.7k|      constexpr size_t remaining_capacity() const { return m_buffer.size(); }

_ZN5Botan21Allocator_InitializerC2Ev:
   40|      1|      Allocator_Initializer() { initialize_allocator(); }

_ZN5Botan11ASN1_ObjectC2Ev:
  117|    362|      ASN1_Object() = default;
_ZN5Botan11ASN1_ObjectC2ERKS0_:
  118|  89.9k|      ASN1_Object(const ASN1_Object&) = default;
_ZN5Botan11ASN1_ObjectD2Ev:
  120|  90.2k|      virtual ~ASN1_Object() = default;
_ZNK5Botan3OIDeqERKS0_:
  309|   145k|      bool operator==(const OID& other) const { return m_id == other.m_id; }
_ZN5Botan3OIDC2ESt16initializer_listIjE:
  229|    362|      explicit OID(std::initializer_list<uint32_t> init) : m_id(init) {
  230|    362|         BOTAN_ARG_CHECK(m_id.size() > 2 && m_id[0] <= 2 && (m_id[0] != 2 || m_id[1] <= 39), "Invalid OID");
  ------------------
  |  |   30|    362|   do {                                                          \
  |  |   31|  1.88k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:12): [True: 362, False: 0]
  |  |  |  Branch (31:12): [True: 362, False: 0]
  |  |  |  Branch (31:12): [True: 289, False: 73]
  |  |  |  Branch (31:12): [True: 73, False: 0]
  |  |  ------------------
  |  |   32|    362|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|    362|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 362]
  |  |  ------------------
  ------------------
  231|    362|      }
_ZNK5Botan3OID5emptyEv:
  265|  44.6k|      bool empty() const { return m_id.empty(); }
_ZNK5Botan3OID9has_valueEv:
  271|  89.3k|      bool has_value() const { return (m_id.empty() == false); }

_ZN5Botan13ignore_paramsIJRhEEEvDpOT_:
  114|  25.6k|constexpr void ignore_params(T&&... args) {
  115|  25.6k|   (ignore_param(args), ...);
  116|  25.6k|}
_ZN5Botan12ignore_paramIRhEEvOT_:
  111|  25.6k|constexpr void ignore_param(T&&) {}
_ZN5Botan12ignore_paramIRmEEvOT_:
  111|  57.1M|constexpr void ignore_param(T&&) {}
_ZN5Botan13ignore_paramsIJRmEEEvDpOT_:
  114|  57.0M|constexpr void ignore_params(T&&... args) {
  115|  57.0M|   (ignore_param(args), ...);
  116|  57.0M|}
_ZN5Botan12ignore_paramIRPKmEEvOT_:
  111|   110k|constexpr void ignore_param(T&&) {}
_ZN5Botan13ignore_paramsIJRKmS2_EEEvDpOT_:
  114|  97.4M|constexpr void ignore_params(T&&... args) {
  115|  97.4M|   (ignore_param(args), ...);
  116|  97.4M|}
_ZN5Botan12ignore_paramIRKmEEvOT_:
  111|   195M|constexpr void ignore_param(T&&) {}
_ZN5Botan13ignore_paramsIJRKmEEEvDpOT_:
  114|   377k|constexpr void ignore_params(T&&... args) {
  115|   377k|   (ignore_param(args), ...);
  116|   377k|}
_ZN5Botan13ignore_paramsIJRPKmRmEEEvDpOT_:
  114|   110k|constexpr void ignore_params(T&&... args) {
  115|   110k|   (ignore_param(args), ...);
  116|   110k|}
_ZN5Botan13ignore_paramsIJRNSt3__16vectorImNS_16secure_allocatorImEEEEEEEvDpOT_:
  114|   126M|constexpr void ignore_params(T&&... args) {
  115|   126M|   (ignore_param(args), ...);
  116|   126M|}
_ZN5Botan12ignore_paramIRNSt3__16vectorImNS_16secure_allocatorImEEEEEEvOT_:
  111|   126M|constexpr void ignore_param(T&&) {}
_ZN5Botan13ignore_paramsIJRlEEEvDpOT_:
  114|   126M|constexpr void ignore_params(T&&... args) {
  115|   126M|   (ignore_param(args), ...);
  116|   126M|}
_ZN5Botan12ignore_paramIRlEEvOT_:
  111|   126M|constexpr void ignore_param(T&&) {}

_ZN5Botan6BigIntC2Ev:
   41|  7.24M|      BigInt() = default;
_ZN5Botan6BigIntD2Ev:
  148|  10.4M|      ~BigInt() { const_time_unpoison(); }
_ZNK5Botan6BigInt19const_time_unpoisonEv:
  723|  10.4M|      void const_time_unpoison() const {}
_ZN5Botan6BigInt4zeroEv:
   46|  7.28k|      static BigInt zero() { return BigInt(); }
_ZN5Botan6BigInt3oneEv:
   51|    616|      static BigInt one() { return BigInt::from_word(1); }
_ZN5Botan6BigIntC2ENSt3__14spanIKhLm18446744073709551615EEE:
  103|  4.53k|      explicit BigInt(std::span<const uint8_t> vec) : BigInt(vec.data(), vec.size()) {}
_ZN5Botan6BigIntC2EOS0_:
  146|   140k|      BigInt(BigInt&& other) { this->swap(other); }
_ZN5Botan6BigIntaSEOS0_:
  153|  1.89M|      BigInt& operator=(BigInt&& other) {
  154|  1.89M|         if(this != &other) {
  ------------------
  |  Branch (154:13): [True: 1.89M, False: 0]
  ------------------
  155|  1.89M|            this->swap(other);
  156|  1.89M|         }
  157|       |
  158|  1.89M|         return (*this);
  159|  1.89M|      }
_ZN5Botan6BigInt4swapERS0_:
  170|  68.8M|      void swap(BigInt& other) {
  171|  68.8M|         m_data.swap(other.m_data);
  172|  68.8M|         std::swap(m_signedness, other.m_signedness);
  173|  68.8M|      }
_ZN5Botan6BigInt8swap_regERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  177|  76.4M|      void swap_reg(secure_vector<word>& reg) {
  178|  76.4M|         m_data.swap(reg);
  179|       |         // sign left unchanged
  180|  76.4M|      }
_ZN5Botan6BigIntpLERKS0_:
  186|   134k|      BigInt& operator+=(const BigInt& y) { return add(y.data(), y.sig_words(), y.sign()); }
_ZN5Botan6BigIntpLEm:
  192|      2|      BigInt& operator+=(word y) { return add(&y, 1, Positive); }
_ZN5Botan6BigIntmIERKS0_:
  198|   137k|      BigInt& operator-=(const BigInt& y) { return sub(y.data(), y.sig_words(), y.sign()); }
_ZN5Botan6BigInt3subEPKmmNS0_4SignE:
  292|   137k|      BigInt& sub(const word y[], size_t y_words, Sign sign) {
  293|   137k|         return add(y, y_words, sign == Positive ? Negative : Positive);
  ------------------
  |  Branch (293:33): [True: 137k, False: 0]
  ------------------
  294|   137k|      }
_ZN5Botan6BigInt5clearEv:
  370|   396k|      void clear() {
  371|   396k|         m_data.set_to_zero();
  372|   396k|         m_signedness = Positive;
  373|   396k|      }
_ZNK5Botan6BigInt7is_evenEv:
  410|   154k|      bool is_even() const { return (get_bit(0) == 0); }
_ZNK5Botan6BigInt6is_oddEv:
  416|  55.0k|      bool is_odd() const { return (get_bit(0) == 1); }
_ZNK5Botan6BigInt10is_nonzeroEv:
  422|   229k|      bool is_nonzero() const { return (!is_zero()); }
_ZNK5Botan6BigInt7is_zeroEv:
  428|  42.6M|      bool is_zero() const { return (sig_words() == 0); }
_ZN5Botan6BigInt7set_bitEm:
  434|  62.3k|      void set_bit(size_t n) { conditionally_set_bit(n, true); }
_ZN5Botan6BigInt21conditionally_set_bitEmb:
  444|   106M|      void conditionally_set_bit(size_t n, bool set_it) {
  445|   106M|         const size_t which = n / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|   106M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  446|   106M|         const word mask = static_cast<word>(set_it) << (n % BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|   106M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  447|   106M|         m_data.set_word_at(which, word_at(which) | mask);
  448|   106M|      }
_ZN5Botan6BigInt9mask_bitsEm:
  460|   155M|      void mask_bits(size_t n) { m_data.mask_bits(n); }
_ZNK5Botan6BigInt7get_bitEm:
  467|  53.2M|      bool get_bit(size_t n) const { return ((word_at(n / BOTAN_MP_WORD_BITS) >> (n % BOTAN_MP_WORD_BITS)) & 1); }
  ------------------
  |  |   50|  53.2M|#define BOTAN_MP_WORD_BITS 64
  ------------------
                    bool get_bit(size_t n) const { return ((word_at(n / BOTAN_MP_WORD_BITS) >> (n % BOTAN_MP_WORD_BITS)) & 1); }
  ------------------
  |  |   50|  53.2M|#define BOTAN_MP_WORD_BITS 64
  ------------------
_ZNK5Botan6BigInt7word_atEm:
  518|   429M|      word word_at(size_t n) const { return m_data.get_word_at(n); }
_ZN5Botan6BigInt11set_word_atEmm:
  520|  99.9M|      void set_word_at(size_t i, word w) { m_data.set_word_at(i, w); }
_ZN5Botan6BigInt9set_wordsEPKmm:
  522|  10.5M|      void set_words(const word w[], size_t len) { m_data.set_words(w, len); }
_ZNK5Botan6BigInt11is_negativeEv:
  528|   466M|      bool is_negative() const { return (sign() == Negative); }
_ZNK5Botan6BigInt11is_positiveEv:
  534|   337k|      bool is_positive() const { return (sign() == Positive); }
_ZNK5Botan6BigInt4signEv:
  540|   472M|      Sign sign() const { return (m_signedness); }
_ZNK5Botan6BigInt12reverse_signEv:
  545|  39.9k|      Sign reverse_sign() const {
  546|  39.9k|         if(sign() == Positive) {
  ------------------
  |  Branch (546:13): [True: 39.9k, False: 0]
  ------------------
  547|  39.9k|            return Negative;
  548|  39.9k|         }
  549|      0|         return Positive;
  550|  39.9k|      }
_ZN5Botan6BigInt8set_signENS0_4SignE:
  561|  1.95M|      void set_sign(Sign sign) {
  562|  1.95M|         if(sign == Negative && is_zero()) {
  ------------------
  |  Branch (562:13): [True: 68.5k, False: 1.88M]
  |  Branch (562:33): [True: 0, False: 68.5k]
  ------------------
  563|      0|            sign = Positive;
  564|      0|         }
  565|       |
  566|  1.95M|         m_signedness = sign;
  567|  1.95M|      }
_ZNK5Botan6BigInt4sizeEv:
  578|  1.38G|      size_t size() const { return m_data.size(); }
_ZNK5Botan6BigInt9sig_wordsEv:
  584|   203M|      size_t sig_words() const { return m_data.sig_words(); }
_ZN5Botan6BigInt12mutable_dataEv:
  609|  1.01G|      word* mutable_data() { return m_data.mutable_data(); }
_ZNK5Botan6BigInt4dataEv:
  615|  1.01G|      const word* data() const { return m_data.const_data(); }
_ZN5Botan6BigInt15get_word_vectorEv:
  620|  36.1M|      secure_vector<word>& get_word_vector() { return m_data.mutable_vector(); }
_ZNK5Botan6BigInt7grow_toEm:
  631|   492M|      void grow_to(size_t n) const { m_data.grow_to(n); }
_ZNK5Botan6BigInt17const_time_poisonEv:
  721|   110k|      void const_time_poison() const {}
_ZN5Botan6BigInt10power_of_2Em:
  739|  27.8k|      static BigInt power_of_2(size_t n) {
  740|  27.8k|         BigInt b;
  741|  27.8k|         b.set_bit(n);
  742|  27.8k|         return b;
  743|  27.8k|      }
_ZN5Botan6BigInt6encodeERKS0_:
  750|  15.4k|      static std::vector<uint8_t> encode(const BigInt& n) {
  751|  15.4k|         std::vector<uint8_t> output(n.bytes());
  752|  15.4k|         n.binary_encode(output.data());
  753|  15.4k|         return output;
  754|  15.4k|      }
_ZN5Botan6BigInt6decodeENSt3__14spanIKhLm18446744073709551615EEE:
  780|  4.53k|      static BigInt decode(std::span<const uint8_t> buf) { return BigInt(buf); }
_ZN5Botan6BigInt4Data12mutable_dataEv:
  827|  1.01G|            word* mutable_data() {
  828|  1.01G|               invalidate_sig_words();
  829|  1.01G|               return m_reg.data();
  830|  1.01G|            }
_ZNK5Botan6BigInt4Data10const_dataEv:
  832|  1.01G|            const word* const_data() const { return m_reg.data(); }
_ZN5Botan6BigInt4Data14mutable_vectorEv:
  834|  36.1M|            secure_vector<word>& mutable_vector() {
  835|  36.1M|               invalidate_sig_words();
  836|  36.1M|               return m_reg;
  837|  36.1M|            }
_ZNK5Botan6BigInt4Data11get_word_atEm:
  841|   429M|            word get_word_at(size_t n) const {
  842|   429M|               if(n < m_reg.size()) {
  ------------------
  |  Branch (842:19): [True: 429M, False: 66.7k]
  ------------------
  843|   429M|                  return m_reg[n];
  844|   429M|               }
  845|  66.7k|               return 0;
  846|   429M|            }
_ZN5Botan6BigInt4Data11set_word_atEmm:
  848|   206M|            void set_word_at(size_t i, word w) {
  849|   206M|               invalidate_sig_words();
  850|   206M|               if(i >= m_reg.size()) {
  ------------------
  |  Branch (850:19): [True: 99.7M, False: 106M]
  ------------------
  851|  99.7M|                  if(w == 0) {
  ------------------
  |  Branch (851:22): [True: 99.6M, False: 63.0k]
  ------------------
  852|  99.6M|                     return;
  853|  99.6M|                  }
  854|  63.0k|                  grow_to(i + 1);
  855|  63.0k|               }
  856|   106M|               m_reg[i] = w;
  857|   106M|            }
_ZN5Botan6BigInt4Data9set_wordsEPKmm:
  859|  10.5M|            void set_words(const word w[], size_t len) {
  860|  10.5M|               invalidate_sig_words();
  861|  10.5M|               m_reg.assign(w, w + len);
  862|  10.5M|            }
_ZN5Botan6BigInt4Data11set_to_zeroEv:
  864|   396k|            void set_to_zero() {
  865|   396k|               m_reg.resize(m_reg.capacity());
  866|   396k|               clear_mem(m_reg.data(), m_reg.size());
  867|   396k|               m_sig_words = 0;
  868|   396k|            }
_ZN5Botan6BigInt4Data9mask_bitsEm:
  876|   155M|            void mask_bits(size_t n) {
  877|   155M|               if(n == 0) {
  ------------------
  |  Branch (877:19): [True: 0, False: 155M]
  ------------------
  878|      0|                  return set_to_zero();
  879|      0|               }
  880|       |
  881|   155M|               const size_t top_word = n / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|   155M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  882|       |
  883|       |               // if(top_word < sig_words()) ?
  884|   155M|               if(top_word < size()) {
  ------------------
  |  Branch (884:19): [True: 155M, False: 3.60k]
  ------------------
  885|   155M|                  const word mask = (static_cast<word>(1) << (n % BOTAN_MP_WORD_BITS)) - 1;
  ------------------
  |  |   50|   155M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  886|   155M|                  const size_t len = size() - (top_word + 1);
  887|   155M|                  if(len > 0) {
  ------------------
  |  Branch (887:22): [True: 155M, False: 15.4k]
  ------------------
  888|   155M|                     clear_mem(&m_reg[top_word + 1], len);
  889|   155M|                  }
  890|   155M|                  m_reg[top_word] &= mask;
  891|   155M|                  invalidate_sig_words();
  892|   155M|               }
  893|   155M|            }
_ZNK5Botan6BigInt4Data7grow_toEm:
  895|   492M|            void grow_to(size_t n) const {
  896|   492M|               if(n > size()) {
  ------------------
  |  Branch (896:19): [True: 15.0M, False: 477M]
  ------------------
  897|  15.0M|                  if(n <= m_reg.capacity()) {
  ------------------
  |  Branch (897:22): [True: 10.2M, False: 4.76M]
  ------------------
  898|  10.2M|                     m_reg.resize(n);
  899|  10.2M|                  } else {
  900|  4.76M|                     m_reg.resize(n + (8 - (n % 8)));
  901|  4.76M|                  }
  902|  15.0M|               }
  903|   492M|            }
_ZNK5Botan6BigInt4Data4sizeEv:
  905|  2.18G|            size_t size() const { return m_reg.size(); }
_ZN5Botan6BigInt4Data4swapERS1_:
  914|  68.8M|            void swap(Data& other) {
  915|  68.8M|               m_reg.swap(other.m_reg);
  916|  68.8M|               std::swap(m_sig_words, other.m_sig_words);
  917|  68.8M|            }
_ZN5Botan6BigInt4Data4swapERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  919|  76.7M|            void swap(secure_vector<word>& reg) {
  920|  76.7M|               m_reg.swap(reg);
  921|  76.7M|               invalidate_sig_words();
  922|  76.7M|            }
_ZNK5Botan6BigInt4Data20invalidate_sig_wordsEv:
  924|  1.49G|            void invalidate_sig_words() const { m_sig_words = sig_words_npos; }
_ZNK5Botan6BigInt4Data9sig_wordsEv:
  926|   203M|            size_t sig_words() const {
  927|   203M|               if(m_sig_words == sig_words_npos) {
  ------------------
  |  Branch (927:19): [True: 39.1M, False: 164M]
  ------------------
  928|  39.1M|                  m_sig_words = calc_sig_words();
  929|   164M|               } else {
  930|   164M|                  BOTAN_DEBUG_ASSERT(m_sig_words == calc_sig_words());
  ------------------
  |  |   99|   164M|      do {                          \
  |  |  100|   164M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 164M]
  |  |  ------------------
  ------------------
  931|   164M|               }
  932|   203M|               return m_sig_words;
  933|   203M|            }
_ZN5BotanplERKNS_6BigIntES2_:
  951|   318k|inline BigInt operator+(const BigInt& x, const BigInt& y) {
  952|   318k|   return BigInt::add2(x, y.data(), y.sig_words(), y.sign());
  953|   318k|}
_ZN5BotanplERKNS_6BigIntEm:
  955|      5|inline BigInt operator+(const BigInt& x, word y) {
  956|      5|   return BigInt::add2(x, &y, 1, BigInt::Positive);
  957|      5|}
_ZN5BotanmiERKNS_6BigIntES2_:
  963|  39.9k|inline BigInt operator-(const BigInt& x, const BigInt& y) {
  964|  39.9k|   return BigInt::add2(x, y.data(), y.sig_words(), y.reverse_sign());
  965|  39.9k|}
_ZN5BotanmiERKNS_6BigIntEm:
  967|      8|inline BigInt operator-(const BigInt& x, word y) {
  968|      8|   return BigInt::add2(x, &y, 1, BigInt::Negative);
  969|      8|}
_ZN5BotanmlEmRKNS_6BigIntE:
  974|   268k|inline BigInt operator*(word x, const BigInt& y) {
  975|   268k|   return y * x;
  976|   268k|}
_ZN5BotaneqERKNS_6BigIntES2_:
  988|   135k|inline bool operator==(const BigInt& a, const BigInt& b) {
  989|   135k|   return a.is_equal(b);
  990|   135k|}
_ZN5BotanneERKNS_6BigIntES2_:
  992|   156k|inline bool operator!=(const BigInt& a, const BigInt& b) {
  993|   156k|   return !a.is_equal(b);
  994|   156k|}
_ZN5BotangeERKNS_6BigIntES2_:
 1000|   204k|inline bool operator>=(const BigInt& a, const BigInt& b) {
 1001|   204k|   return (a.cmp(b) >= 0);
 1002|   204k|}
_ZN5BotanltERKNS_6BigIntES2_:
 1004|   119k|inline bool operator<(const BigInt& a, const BigInt& b) {
 1005|   119k|   return a.is_less_than(b);
 1006|   119k|}
_ZN5BotaneqERKNS_6BigIntEm:
 1012|  31.7k|inline bool operator==(const BigInt& a, word b) {
 1013|  31.7k|   return (a.cmp_word(b) == 0);
 1014|  31.7k|}
_ZN5BotanleERKNS_6BigIntEm:
 1020|  22.4k|inline bool operator<=(const BigInt& a, word b) {
 1021|  22.4k|   return (a.cmp_word(b) <= 0);
 1022|  22.4k|}
_ZN5BotanltERKNS_6BigIntEm:
 1028|   151k|inline bool operator<(const BigInt& a, word b) {
 1029|   151k|   return (a.cmp_word(b) < 0);
 1030|   151k|}
_ZN5BotangtERKNS_6BigIntEm:
 1032|  34.5k|inline bool operator>(const BigInt& a, word b) {
 1033|  34.5k|   return (a.cmp_word(b) > 0);
 1034|  34.5k|}
_ZN5Botan6BigIntaSERKS0_:
  164|  11.5M|      BigInt& operator=(const BigInt&) = default;
_ZN5Botan6BigIntC2ERKS0_:
   81|  2.90M|      BigInt(const BigInt& other) = default;

_ZN5Botan20Buffered_Computation6updateEPKhm:
   35|   144k|      void update(const uint8_t in[], size_t length) { add_data({in, length}); }
_ZN5Botan20Buffered_Computation6updateENSt3__14spanIKhLm18446744073709551615EEE:
   41|  4.65M|      void update(std::span<const uint8_t> in) { add_data(in); }
_ZN5Botan20Buffered_Computation6updateENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   56|  4.71k|      void update(std::string_view str) { add_data({cast_char_ptr_to_uint8(str.data()), str.size()}); }
_ZN5Botan20Buffered_Computation6updateEh:
   62|   298k|      void update(uint8_t in) { add_data({&in, 1}); }
_ZN5Botan20Buffered_Computation5finalEPh:
   70|  30.3k|      void final(uint8_t out[]) { final_result({out, output_length()}); }
_ZN5Botan20Buffered_Computation5finalENSt3__14spanIhLm18446744073709551615EEE:
   86|  1.34M|      void final(std::span<uint8_t> out) {
   87|  1.34M|         BOTAN_ARG_CHECK(out.size() >= output_length(), "provided output buffer has insufficient capacity");
  ------------------
  |  |   30|  1.34M|   do {                                                          \
  |  |   31|  1.34M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 1.34M]
  |  |  ------------------
  |  |   32|  1.34M|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  1.34M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 1.34M]
  |  |  ------------------
  ------------------
   88|  1.34M|         final_result(out);
   89|  1.34M|      }
_ZN5Botan20Buffered_Computation5finalITkNS_8concepts21resizable_byte_bufferENSt3__16vectorIhNS_16secure_allocatorIhEEEEEET_v:
   78|  42.2k|      T final() {
   79|  42.2k|         T output(output_length());
   80|  42.2k|         final_result(output);
   81|  42.2k|         return output;
   82|  42.2k|      }
_ZN5Botan20Buffered_ComputationD2Ev:
  134|   482k|      virtual ~Buffered_Computation() = default;
_ZN5Botan20Buffered_Computation5finalITkNS_8concepts21resizable_byte_bufferENSt3__16vectorIhNS_16secure_allocatorIhEEEEEEvRT_:
   92|   674k|      void final(T& out) {
   93|   674k|         out.resize(output_length());
   94|   674k|         final_result(out);
   95|   674k|      }

_ZN5Botan6ranges24assert_exact_byte_lengthILm4ETkNS0_14spanable_rangeERNSt3__14spanIhLm4EEEEEvOT0_:
   97|   783k|inline constexpr void assert_exact_byte_length(R&& r) {
   98|   783k|   const std::span s{r};
   99|   783k|   if constexpr(statically_spanable_range<R>) {
  100|   783k|      static_assert(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  101|       |   } else {
  102|       |      BOTAN_ASSERT(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  103|       |   }
  104|   783k|}
_ZN5Botan6ranges25assert_equal_byte_lengthsITkNS0_14spanable_rangeERNSt3__14spanIhLm4EEETpTkNS0_14spanable_rangeEJRNS3_IKjLm1EEEEEEvOT_DpOT0_QgtsZT0_Li0E:
  118|   391k|{
  119|   391k|   const std::span s0{r0};
  120|       |
  121|   391k|   if constexpr(statically_spanable_range<R0>) {
  122|   391k|      constexpr size_t expected_size = s0.size_bytes();
  123|   391k|      (assert_exact_byte_length<expected_size>(rs), ...);
  124|       |   } else {
  125|       |      const size_t expected_size = s0.size_bytes();
  126|       |      BOTAN_ARG_CHECK(((std::span<const std::ranges::range_value_t<Rs>>{rs}.size_bytes() == expected_size) && ...),
  127|       |                      "memory regions don't have equal lengths");
  128|       |   }
  129|   391k|}
_ZN5Botan6ranges24assert_exact_byte_lengthILm4ETkNS0_14spanable_rangeERNSt3__14spanIKjLm1EEEEEvOT0_:
   97|   391k|inline constexpr void assert_exact_byte_length(R&& r) {
   98|   391k|   const std::span s{r};
   99|   391k|   if constexpr(statically_spanable_range<R>) {
  100|   391k|      static_assert(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  101|       |   } else {
  102|       |      BOTAN_ASSERT(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  103|       |   }
  104|   391k|}
_ZN5Botan6ranges10size_bytesITkNS0_14spanable_rangeERNSt3__14spanIhLm4EEEEEmOT_:
   84|   391k|inline constexpr size_t size_bytes(spanable_range auto&& r) {
   85|   391k|   return std::span{r}.size_bytes();
   86|   391k|}
_ZN5Botan6ranges24assert_exact_byte_lengthILm8ETkNS0_14spanable_rangeERNSt3__14spanIhLm8EEEEEvOT0_:
   97|  24.4M|inline constexpr void assert_exact_byte_length(R&& r) {
   98|  24.4M|   const std::span s{r};
   99|  24.4M|   if constexpr(statically_spanable_range<R>) {
  100|  24.4M|      static_assert(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  101|       |   } else {
  102|       |      BOTAN_ASSERT(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  103|       |   }
  104|  24.4M|}
_ZN5Botan6ranges25assert_equal_byte_lengthsITkNS0_14spanable_rangeERNSt3__14spanIhLm8EEETpTkNS0_14spanable_rangeEJRNS3_IKmLm1EEEEEEvOT_DpOT0_QgtsZT0_Li0E:
  118|  13.1M|{
  119|  13.1M|   const std::span s0{r0};
  120|       |
  121|  13.1M|   if constexpr(statically_spanable_range<R0>) {
  122|  13.1M|      constexpr size_t expected_size = s0.size_bytes();
  123|  13.1M|      (assert_exact_byte_length<expected_size>(rs), ...);
  124|       |   } else {
  125|       |      const size_t expected_size = s0.size_bytes();
  126|       |      BOTAN_ARG_CHECK(((std::span<const std::ranges::range_value_t<Rs>>{rs}.size_bytes() == expected_size) && ...),
  127|       |                      "memory regions don't have equal lengths");
  128|       |   }
  129|  13.1M|}
_ZN5Botan6ranges24assert_exact_byte_lengthILm8ETkNS0_14spanable_rangeERNSt3__14spanIKmLm1EEEEEvOT0_:
   97|  13.1M|inline constexpr void assert_exact_byte_length(R&& r) {
   98|  13.1M|   const std::span s{r};
   99|  13.1M|   if constexpr(statically_spanable_range<R>) {
  100|  13.1M|      static_assert(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  101|       |   } else {
  102|       |      BOTAN_ASSERT(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  103|       |   }
  104|  13.1M|}
_ZN5Botan6ranges10size_bytesITkNS0_14spanable_rangeERNSt3__14spanIhLm8EEEEEmOT_:
   84|  13.1M|inline constexpr size_t size_bytes(spanable_range auto&& r) {
   85|  13.1M|   return std::span{r}.size_bytes();
   86|  13.1M|}
_ZN5Botan6ranges25assert_equal_byte_lengthsITkNS0_14spanable_rangeERNSt3__14spanIjLm18446744073709551615EEETpTkNS0_14spanable_rangeEJRNS3_IKhLm18446744073709551615EEEEEEvOT_DpOT0_QgtsZT0_Li0E:
  118|  7.34M|{
  119|  7.34M|   const std::span s0{r0};
  120|       |
  121|       |   if constexpr(statically_spanable_range<R0>) {
  122|       |      constexpr size_t expected_size = s0.size_bytes();
  123|       |      (assert_exact_byte_length<expected_size>(rs), ...);
  124|  7.34M|   } else {
  125|  7.34M|      const size_t expected_size = s0.size_bytes();
  126|  7.34M|      BOTAN_ARG_CHECK(((std::span<const std::ranges::range_value_t<Rs>>{rs}.size_bytes() == expected_size) && ...),
  ------------------
  |  |   30|  7.34M|   do {                                                          \
  |  |   31|  7.34M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 7.34M]
  |  |  ------------------
  |  |   32|  7.34M|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  7.34M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 7.34M]
  |  |  ------------------
  ------------------
  127|  7.34M|                      "memory regions don't have equal lengths");
  128|  7.34M|   }
  129|  7.34M|}
_ZN5Botan6ranges24assert_exact_byte_lengthILm4ETkNS0_14spanable_rangeERNSt3__14spanIKhLm4EEEEEvOT0_:
   97|  7.81M|inline constexpr void assert_exact_byte_length(R&& r) {
   98|  7.81M|   const std::span s{r};
   99|  7.81M|   if constexpr(statically_spanable_range<R>) {
  100|  7.81M|      static_assert(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  101|       |   } else {
  102|       |      BOTAN_ASSERT(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  103|       |   }
  104|  7.81M|}
_ZN5Botan6ranges25assert_equal_byte_lengthsITkNS0_14spanable_rangeERNSt3__14spanIjLm1EEETpTkNS0_14spanable_rangeEJRNS3_IKhLm4EEEEEEvOT_DpOT0_QgtsZT0_Li0E:
  118|  3.90M|{
  119|  3.90M|   const std::span s0{r0};
  120|       |
  121|  3.90M|   if constexpr(statically_spanable_range<R0>) {
  122|  3.90M|      constexpr size_t expected_size = s0.size_bytes();
  123|  3.90M|      (assert_exact_byte_length<expected_size>(rs), ...);
  124|       |   } else {
  125|       |      const size_t expected_size = s0.size_bytes();
  126|       |      BOTAN_ARG_CHECK(((std::span<const std::ranges::range_value_t<Rs>>{rs}.size_bytes() == expected_size) && ...),
  127|       |                      "memory regions don't have equal lengths");
  128|       |   }
  129|  3.90M|}
_ZN5Botan6ranges10size_bytesITkNS0_14spanable_rangeERNSt3__14spanIjLm1EEEEEmOT_:
   84|  3.90M|inline constexpr size_t size_bytes(spanable_range auto&& r) {
   85|  3.90M|   return std::span{r}.size_bytes();
   86|  3.90M|}
_ZN5Botan6ranges25assert_equal_byte_lengthsITkNS0_14spanable_rangeERNSt3__14spanIhLm18446744073709551615EEETpTkNS0_14spanable_rangeEJRNS3_IKjLm18446744073709551615EEEEEEvOT_DpOT0_QgtsZT0_Li0E:
  118|  88.3k|{
  119|  88.3k|   const std::span s0{r0};
  120|       |
  121|       |   if constexpr(statically_spanable_range<R0>) {
  122|       |      constexpr size_t expected_size = s0.size_bytes();
  123|       |      (assert_exact_byte_length<expected_size>(rs), ...);
  124|  88.3k|   } else {
  125|  88.3k|      const size_t expected_size = s0.size_bytes();
  126|  88.3k|      BOTAN_ARG_CHECK(((std::span<const std::ranges::range_value_t<Rs>>{rs}.size_bytes() == expected_size) && ...),
  ------------------
  |  |   30|  88.3k|   do {                                                          \
  |  |   31|  88.3k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 88.3k]
  |  |  ------------------
  |  |   32|  88.3k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  88.3k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 88.3k]
  |  |  ------------------
  ------------------
  127|  88.3k|                      "memory regions don't have equal lengths");
  128|  88.3k|   }
  129|  88.3k|}
_ZN5Botan6ranges24assert_exact_byte_lengthILm8ETkNS0_14spanable_rangeERNSt3__14spanIKhLm8EEEEEvOT0_:
   97|   107M|inline constexpr void assert_exact_byte_length(R&& r) {
   98|   107M|   const std::span s{r};
   99|   107M|   if constexpr(statically_spanable_range<R>) {
  100|   107M|      static_assert(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  101|       |   } else {
  102|       |      BOTAN_ASSERT(s.size_bytes() == expected, "memory region does not have expected byte lengths");
  103|       |   }
  104|   107M|}
_ZN5Botan6ranges25assert_equal_byte_lengthsITkNS0_14spanable_rangeERNSt3__14spanImLm1EEETpTkNS0_14spanable_rangeEJRNS3_IKhLm8EEEEEEvOT_DpOT0_QgtsZT0_Li0E:
  118|  53.8M|{
  119|  53.8M|   const std::span s0{r0};
  120|       |
  121|  53.8M|   if constexpr(statically_spanable_range<R0>) {
  122|  53.8M|      constexpr size_t expected_size = s0.size_bytes();
  123|  53.8M|      (assert_exact_byte_length<expected_size>(rs), ...);
  124|       |   } else {
  125|       |      const size_t expected_size = s0.size_bytes();
  126|       |      BOTAN_ARG_CHECK(((std::span<const std::ranges::range_value_t<Rs>>{rs}.size_bytes() == expected_size) && ...),
  127|       |                      "memory regions don't have equal lengths");
  128|       |   }
  129|  53.8M|}
_ZN5Botan6ranges10size_bytesITkNS0_14spanable_rangeERNSt3__14spanImLm1EEEEEmOT_:
   84|  53.8M|inline constexpr size_t size_bytes(spanable_range auto&& r) {
   85|  53.8M|   return std::span{r}.size_bytes();
   86|  53.8M|}
_ZN5Botan6ranges10size_bytesITkNS0_14spanable_rangeERNSt3__14spanIjLm18446744073709551615EEEEEmOT_:
   84|  3.67M|inline constexpr size_t size_bytes(spanable_range auto&& r) {
   85|  3.67M|   return std::span{r}.size_bytes();
   86|  3.67M|}
_ZN5Botan6ranges10size_bytesITkNS0_14spanable_rangeERNSt3__14spanIhLm18446744073709551615EEEEEmOT_:
   84|  19.3k|inline constexpr size_t size_bytes(spanable_range auto&& r) {
   85|  19.3k|   return std::span{r}.size_bytes();
   86|  19.3k|}
_ZN5Botan6ranges25assert_equal_byte_lengthsITkNS0_14spanable_rangeERNSt3__14spanIhLm18446744073709551615EEETpTkNS0_14spanable_rangeEJRNS3_IKmLm18446744073709551615EEEEEEvOT_DpOT0_QgtsZT0_Li0E:
  118|  1.41M|{
  119|  1.41M|   const std::span s0{r0};
  120|       |
  121|       |   if constexpr(statically_spanable_range<R0>) {
  122|       |      constexpr size_t expected_size = s0.size_bytes();
  123|       |      (assert_exact_byte_length<expected_size>(rs), ...);
  124|  1.41M|   } else {
  125|  1.41M|      const size_t expected_size = s0.size_bytes();
  126|  1.41M|      BOTAN_ARG_CHECK(((std::span<const std::ranges::range_value_t<Rs>>{rs}.size_bytes() == expected_size) && ...),
  ------------------
  |  |   30|  1.41M|   do {                                                          \
  |  |   31|  1.41M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 1.41M]
  |  |  ------------------
  |  |   32|  1.41M|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  1.41M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 1.41M]
  |  |  ------------------
  ------------------
  127|  1.41M|                      "memory regions don't have equal lengths");
  128|  1.41M|   }
  129|  1.41M|}

_ZN5Botan8CurveGFpC2Ev:
   90|   344k|      CurveGFp() = default;
_ZNK5Botan13CurveGFp_Repr9curve_mulERNS_6BigIntERKS1_S4_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
   60|  85.7M|      void curve_mul(BigInt& z, const BigInt& x, const BigInt& y, secure_vector<word>& ws) const {
   61|  85.7M|         BOTAN_DEBUG_ASSERT(x.sig_words() <= get_p_words());
  ------------------
  |  |   99|  85.7M|      do {                          \
  |  |  100|  85.7M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 85.7M]
  |  |  ------------------
  ------------------
   62|  85.7M|         curve_mul_words(z, x.data(), x.size(), y, ws);
   63|  85.7M|      }
_ZNK5Botan13CurveGFp_Repr9curve_sqrERNS_6BigIntERKS1_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
   68|  85.4M|      void curve_sqr(BigInt& z, const BigInt& x, secure_vector<word>& ws) const {
   69|  85.4M|         BOTAN_DEBUG_ASSERT(x.sig_words() <= get_p_words());
  ------------------
  |  |   99|  85.4M|      do {                          \
  |  |  100|  85.4M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 85.4M]
  |  |  ------------------
  ------------------
   70|  85.4M|         curve_sqr_words(z, x.data(), x.size(), ws);
   71|  85.4M|      }
_ZN5Botan8CurveGFpC2ERKNS_6BigIntES3_S3_:
   98|      8|      CurveGFp(const BigInt& p, const BigInt& a, const BigInt& b) : m_repr(choose_repr(p, a, b)) {}
_ZNK5Botan8CurveGFp5get_aEv:
  107|  4.71k|      const BigInt& get_a() const { return m_repr->get_a(); }
_ZNK5Botan8CurveGFp5get_bEv:
  112|  4.71k|      const BigInt& get_b() const { return m_repr->get_b(); }
_ZNK5Botan8CurveGFp5get_pEv:
  118|  17.5M|      const BigInt& get_p() const { return m_repr->get_p(); }
_ZNK5Botan8CurveGFp11get_p_wordsEv:
  120|  5.86M|      size_t get_p_words() const { return m_repr->get_p_words(); }
_ZNK5Botan8CurveGFp11get_ws_sizeEv:
  122|  17.5M|      size_t get_ws_size() const { return m_repr->get_ws_size(); }
_ZNK5Botan8CurveGFp9get_a_repEv:
  124|   515k|      const BigInt& get_a_rep() const { return m_repr->get_a_rep(); }
_ZNK5Botan8CurveGFp9get_b_repEv:
  126|   156k|      const BigInt& get_b_rep() const { return m_repr->get_b_rep(); }
_ZNK5Botan8CurveGFp9get_1_repEv:
  128|   151k|      const BigInt& get_1_rep() const { return m_repr->get_1_rep(); }
_ZNK5Botan8CurveGFp12a_is_minus_3Ev:
  130|  10.4M|      bool a_is_minus_3() const { return m_repr->a_is_minus_3(); }
_ZNK5Botan8CurveGFp9a_is_zeroEv:
  132|  11.6M|      bool a_is_zero() const { return m_repr->a_is_zero(); }
_ZNK5Botan8CurveGFp6is_oneERKNS_6BigIntE:
  134|  42.8k|      bool is_one(const BigInt& x) const { return m_repr->is_one(x); }
_ZNK5Botan8CurveGFp14invert_elementERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  136|  70.3k|      BigInt invert_element(const BigInt& x, secure_vector<word>& ws) const { return m_repr->invert_element(x, ws); }
_ZNK5Botan8CurveGFp6to_repERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  138|  89.2k|      void to_rep(BigInt& x, secure_vector<word>& ws) const { m_repr->to_curve_rep(x, ws); }
_ZNK5Botan8CurveGFp8from_repERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  140|  33.4k|      void from_rep(BigInt& x, secure_vector<word>& ws) const { m_repr->from_curve_rep(x, ws); }
_ZNK5Botan8CurveGFp15from_rep_to_tmpERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  142|   245k|      BigInt from_rep_to_tmp(const BigInt& x, secure_vector<word>& ws) const {
  143|   245k|         BigInt xt(x);
  144|   245k|         m_repr->from_curve_rep(xt, ws);
  145|   245k|         return xt;
  146|   245k|      }
_ZNK5Botan8CurveGFp3mulERNS_6BigIntERKS1_S4_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  150|  82.8M|      void mul(BigInt& z, const BigInt& x, const BigInt& y, secure_vector<word>& ws) const {
  151|  82.8M|         m_repr->curve_mul(z, x, y, ws);
  152|  82.8M|      }
_ZNK5Botan8CurveGFp3mulERNS_6BigIntEPKmmRKS1_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  154|  12.4M|      void mul(BigInt& z, const word x_w[], size_t x_size, const BigInt& y, secure_vector<word>& ws) const {
  155|  12.4M|         m_repr->curve_mul_words(z, x_w, x_size, y, ws);
  156|  12.4M|      }
_ZNK5Botan8CurveGFp3sqrERNS_6BigIntERKS1_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  158|  65.5M|      void sqr(BigInt& z, const BigInt& x, secure_vector<word>& ws) const { m_repr->curve_sqr(z, x, ws); }
_ZNK5Botan8CurveGFp3sqrERNS_6BigIntEPKmmRNSt3__16vectorImNS_16secure_allocatorImEEEE:
  160|   411k|      void sqr(BigInt& z, const word x_w[], size_t x_size, secure_vector<word>& ws) const {
  161|   411k|         m_repr->curve_sqr_words(z, x_w, x_size, ws);
  162|   411k|      }
_ZNK5Botan8CurveGFp10mul_to_tmpERKNS_6BigIntES3_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  168|  2.04M|      BigInt mul_to_tmp(const BigInt& x, const BigInt& y, secure_vector<word>& ws) const {
  169|  2.04M|         BigInt z;
  170|  2.04M|         m_repr->curve_mul(z, x, y, ws);
  171|  2.04M|         return z;
  172|  2.04M|      }
_ZNK5Botan8CurveGFp10sqr_to_tmpERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  174|   426k|      BigInt sqr_to_tmp(const BigInt& x, secure_vector<word>& ws) const {
  175|   426k|         BigInt z;
  176|   426k|         m_repr->curve_sqr(z, x, ws);
  177|   426k|         return z;
  178|   426k|      }
_ZN5Botan8CurveGFp4swapERS0_:
  180|   343k|      void swap(CurveGFp& other) { std::swap(m_repr, other.m_repr); }
_ZNK5Botan8CurveGFpeqERKS0_:
  189|  5.86M|      inline bool operator==(const CurveGFp& other) const {
  190|  5.86M|         if(m_repr.get() == other.m_repr.get()) {
  ------------------
  |  Branch (190:13): [True: 5.86M, False: 0]
  ------------------
  191|  5.86M|            return true;
  192|  5.86M|         }
  193|       |
  194|      0|         return (get_p() == other.get_p()) && (get_a() == other.get_a()) && (get_b() == other.get_b());
  ------------------
  |  Branch (194:17): [True: 0, False: 0]
  |  Branch (194:47): [True: 0, False: 0]
  |  Branch (194:77): [True: 0, False: 0]
  ------------------
  195|  5.86M|      }
_ZN5Botan13CurveGFp_ReprD2Ev:
   23|      8|      virtual ~CurveGFp_Repr() = default;
_ZN5Botan8CurveGFpC2ERKS0_:
  100|   834k|      CurveGFp(const CurveGFp&) = default;
_ZN5Botan8CurveGFpaSERKS0_:
  102|  5.68k|      CurveGFp& operator=(const CurveGFp&) = default;

_ZNK5Botan13DSA_PublicKey13message_partsEv:
   44|  6.87k|      size_t message_parts() const override { return 2; }

_ZN5Botan8EC_GroupC2ERKS0_:
  105|  84.5k|      EC_Group(const EC_Group&) = default;

_ZN5Botan8EC_PointC2Ev:
   43|  9.95k|      EC_Point() = default;
_ZN5Botan8EC_PointC2EOS0_:
   59|   334k|      EC_Point(EC_Point&& other) { this->swap(other); }
_ZN5Botan8EC_PointaSEOS0_:
   69|  7.10k|      EC_Point& operator=(EC_Point&& other) {
   70|  7.10k|         if(this != &other) {
  ------------------
  |  Branch (70:13): [True: 7.10k, False: 0]
  ------------------
   71|  7.10k|            this->swap(other);
   72|  7.10k|         }
   73|  7.10k|         return (*this);
   74|  7.10k|      }
_ZNK5Botan8EC_Point5get_xEv:
  140|  9.94k|      const BigInt& get_x() const { return m_coord_x; }
_ZNK5Botan8EC_Point5get_yEv:
  147|  9.94k|      const BigInt& get_y() const { return m_coord_y; }
_ZNK5Botan8EC_Point7is_zeroEv:
  178|  18.7M|      bool is_zero() const { return m_coord_z.is_zero(); }
_ZN5Botan8EC_Point3addERKS0_RNSt3__16vectorINS_6BigIntENS3_9allocatorIS5_EEEE:
  217|   411k|      void add(const EC_Point& other, std::vector<BigInt>& workspace) {
  218|   411k|         BOTAN_ARG_CHECK(m_curve == other.m_curve, "cannot add points on different curves");
  ------------------
  |  |   30|   411k|   do {                                                          \
  |  |   31|   411k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 411k]
  |  |  ------------------
  |  |   32|   411k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|   411k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 411k]
  |  |  ------------------
  ------------------
  219|       |
  220|   411k|         const size_t p_words = m_curve.get_p_words();
  221|       |
  222|   411k|         add(other.m_coord_x.data(),
  223|   411k|             std::min(p_words, other.m_coord_x.size()),
  224|   411k|             other.m_coord_y.data(),
  225|   411k|             std::min(p_words, other.m_coord_y.size()),
  226|   411k|             other.m_coord_z.data(),
  227|   411k|             std::min(p_words, other.m_coord_z.size()),
  228|   411k|             workspace);
  229|   411k|      }
_ZN5Botan8EC_Point10add_affineERKS0_RNSt3__16vectorINS_6BigIntENS3_9allocatorIS5_EEEE:
  255|  5.45M|      void add_affine(const EC_Point& other, std::vector<BigInt>& workspace) {
  256|  5.45M|         BOTAN_ASSERT_NOMSG(m_curve == other.m_curve);
  ------------------
  |  |   60|  5.45M|   do {                                                                     \
  |  |   61|  5.45M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 5.45M]
  |  |  ------------------
  |  |   62|  5.45M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  5.45M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 5.45M]
  |  |  ------------------
  ------------------
  257|  5.45M|         BOTAN_DEBUG_ASSERT(other.is_affine());
  ------------------
  |  |   99|  5.45M|      do {                          \
  |  |  100|  5.45M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 5.45M]
  |  |  ------------------
  ------------------
  258|       |
  259|  5.45M|         const size_t p_words = m_curve.get_p_words();
  260|  5.45M|         add_affine(other.m_coord_x.data(),
  261|  5.45M|                    std::min(p_words, other.m_coord_x.size()),
  262|  5.45M|                    other.m_coord_y.data(),
  263|  5.45M|                    std::min(p_words, other.m_coord_y.size()),
  264|  5.45M|                    workspace);
  265|  5.45M|      }
_ZNK5Botan8EC_Point4plusERKS0_RNSt3__16vectorINS_6BigIntENS3_9allocatorIS5_EEEE:
  298|   411k|      EC_Point plus(const EC_Point& other, std::vector<BigInt>& workspace) const {
  299|   411k|         EC_Point x = (*this);
  300|   411k|         x.add(other, workspace);
  301|   411k|         return x;
  302|   411k|      }
_ZNK5Botan8EC_Point4zeroEv:
  318|  36.4k|      EC_Point zero() const { return EC_Point(m_curve); }
_ZNK5Botan8EC_Point9get_curveEv:
  326|     16|      const CurveGFp& get_curve() const { return m_curve; }
_ZN5Botan8EC_PointC2ERKS0_:
   54|   753k|      EC_Point(const EC_Point&) = default;
_ZN5Botan8EC_PointaSERKS0_:
   64|  5.68k|      EC_Point& operator=(const EC_Point&) = default;

_ZNK5Botan12EC_PublicKey12public_pointEv:
   40|  44.6k|      const EC_Point& public_point() const { return m_public_key; }
_ZNK5Botan12EC_PublicKey6domainEv:
   54|  84.5k|      const EC_Group& domain() const { return m_domain_params; }
_ZN5Botan12EC_PublicKeyD2Ev:
   32|  44.6k|      ~EC_PublicKey() override = default;

_ZN5Botan15ECDSA_PublicKeyC1ERKNS_8EC_GroupERKNS_8EC_PointE:
   27|  35.3k|      ECDSA_PublicKey(const EC_Group& dom_par, const EC_Point& public_point) : EC_PublicKey(dom_par, public_point) {}
_ZNK5Botan15ECDSA_PublicKey13message_partsEv:
   55|  35.3k|      size_t message_parts() const override { return 2; }
_ZNK5Botan15ECDSA_PublicKey17message_part_sizeEv:
   57|  35.3k|      size_t message_part_size() const override { return domain().get_order().bytes(); }

_ZN5Botan17Ed25519_PublicKeyC1INSt3__19allocatorIhEEEERKNS2_6vectorIhT_EE:
   46|  21.2k|      Ed25519_PublicKey(const std::vector<uint8_t, Alloc>& pub) : Ed25519_PublicKey(pub.data(), pub.size()) {}
_ZNK5Botan17Ed25519_PublicKey14get_public_keyEv:
   36|  26.5k|      const std::vector<uint8_t>& get_public_key() const { return m_public; }

_ZNK5Botan9Exception4whatEv:
   93|    885|      const char* what() const noexcept override { return m_msg.c_str(); }
_ZNK5Botan16Invalid_Argument10error_typeEv:
  139|    102|      ErrorType error_type() const noexcept override { return ErrorType::InvalidArgument; }
_ZNK5Botan14Decoding_Error10error_typeEv:
  199|    783|      ErrorType error_type() const noexcept override { return ErrorType::DecodingFailure; }

_ZNK5Botan9HMAC_DRBG31max_number_of_bytes_per_requestEv:
  130|  96.3k|      size_t max_number_of_bytes_per_request() const override { return m_max_number_of_bytes_per_request; }

_ZN5Botan25MessageAuthenticationCodeD2Ev:
   50|  96.3k|      ~MessageAuthenticationCode() override = default;

_ZN5Botan11clear_bytesEPvm:
  103|   587M|inline constexpr void clear_bytes(void* ptr, size_t bytes) {
  104|   587M|   if(bytes > 0) {
  ------------------
  |  Branch (104:7): [True: 515M, False: 71.0M]
  ------------------
  105|   515M|      std::memset(ptr, 0, bytes);
  106|   515M|   }
  107|   587M|}
_ZN5Botan22cast_char_ptr_to_uint8EPKc:
  275|  4.77k|inline const uint8_t* cast_char_ptr_to_uint8(const char* s) {
  276|  4.77k|   return reinterpret_cast<const uint8_t*>(s);
  277|  4.77k|}
_ZN5Botan22cast_uint8_ptr_to_charEPKh:
  279|     51|inline const char* cast_uint8_ptr_to_char(const uint8_t* b) {
  280|     51|   return reinterpret_cast<const char*>(b);
  281|     51|}
_ZN5Botan8copy_memIhQsr3std10is_trivialINSt3__15decayIT_E4typeEEE5valueEEvPS3_PKS3_m:
  146|   567k|inline constexpr void copy_mem(T* out, const T* in, size_t n) {
  147|   567k|   BOTAN_ASSERT_IMPLICATION(n > 0, in != nullptr && out != nullptr, "If n > 0 then args are not null");
  ------------------
  |  |   78|   567k|   do {                                                                                          \
  |  |   79|  1.13M|      if((expr1) && !(expr2))                                                                    \
  |  |  ------------------
  |  |  |  Branch (79:10): [True: 567k, False: 0]
  |  |  |  Branch (79:23): [True: 567k, False: 0]
  |  |  |  Branch (79:23): [True: 567k, False: 0]
  |  |  ------------------
  |  |   80|   567k|         Botan::assertion_failure(#expr1 " implies " #expr2, msg, __func__, __FILE__, __LINE__); \
  |  |   81|   567k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (81:12): [Folded, False: 567k]
  |  |  ------------------
  ------------------
  148|       |
  149|   567k|   if(in != nullptr && out != nullptr && n > 0) {
  ------------------
  |  Branch (149:7): [True: 567k, False: 0]
  |  Branch (149:24): [True: 567k, False: 0]
  |  Branch (149:42): [True: 567k, False: 0]
  ------------------
  150|   567k|      std::memmove(out, in, sizeof(T) * n);
  151|   567k|   }
  152|   567k|}
_ZN5Botan9clear_memImEEvPT_m:
  120|   522M|inline constexpr void clear_mem(T* ptr, size_t n) {
  121|   522M|   clear_bytes(ptr, sizeof(T) * n);
  122|   522M|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeERNSt3__14spanIhLm4EEEjQaaaasr3stdE23is_trivially_copyable_vIT0_Entsr3std6rangesE5rangeIS6_Esr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISE_EESF_E4type10value_typeEEEEvOSB_RKS6_:
  201|   391k|inline constexpr void typecast_copy(ToR&& out, const FromT& in) {
  202|   391k|   typecast_copy(out, std::span<const FromT, 1>(&in, 1));
  203|   391k|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeERNSt3__14spanIhLm4EEETkNS1_16contiguous_rangeENS3_IKjLm1EEEQaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISF_EESG_E4type10value_typeEEsr3stdE23is_trivially_copyable_vINS8_IXsr21__is_primary_templateINS9_Iu14__remove_cvrefIDTclL_ZNSB_5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENSH_ISP_EESQ_E4type10value_typeEEEEvOSM_OSC_:
  178|   391k|inline constexpr void typecast_copy(ToR&& out, FromR&& in) {
  179|   391k|   ranges::assert_equal_byte_lengths(out, in);
  180|   391k|   std::memcpy(std::ranges::data(out), std::ranges::data(in), ranges::size_bytes(out));
  181|   391k|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeERNSt3__14spanIhLm8EEEmQaaaasr3stdE23is_trivially_copyable_vIT0_Entsr3std6rangesE5rangeIS6_Esr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISE_EESF_E4type10value_typeEEEEvOSB_RKS6_:
  201|  13.1M|inline constexpr void typecast_copy(ToR&& out, const FromT& in) {
  202|  13.1M|   typecast_copy(out, std::span<const FromT, 1>(&in, 1));
  203|  13.1M|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeERNSt3__14spanIhLm8EEETkNS1_16contiguous_rangeENS3_IKmLm1EEEQaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISF_EESG_E4type10value_typeEEsr3stdE23is_trivially_copyable_vINS8_IXsr21__is_primary_templateINS9_Iu14__remove_cvrefIDTclL_ZNSB_5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENSH_ISP_EESQ_E4type10value_typeEEEEvOSM_OSC_:
  178|  13.1M|inline constexpr void typecast_copy(ToR&& out, FromR&& in) {
  179|  13.1M|   ranges::assert_equal_byte_lengths(out, in);
  180|  13.1M|   std::memcpy(std::ranges::data(out), std::ranges::data(in), ranges::size_bytes(out));
  181|  13.1M|}
_ZN5Botan13typecast_copyIjTkNS_6ranges16contiguous_rangeERNSt3__14spanIKhLm4EEEQaaaasr3stdE26is_default_constructible_vIT_Esr3stdE23is_trivially_copyable_vIS7_Esr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISF_EESG_E4type10value_typeEEEES7_OSC_:
  212|  3.90M|inline constexpr ToT typecast_copy(FromR&& src) noexcept {
  213|  3.90M|   ToT dst;
  214|  3.90M|   typecast_copy(dst, src);
  215|  3.90M|   return dst;
  216|  3.90M|}
_ZN5Botan13typecast_copyIjTkNS_6ranges16contiguous_rangeERNSt3__14spanIKhLm4EEEQaaaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISE_EESF_E4type10value_typeEEsr3stdE23is_trivially_copyable_vIT_Entsr3std6rangesE5rangeISL_EEEvRSL_OSB_:
  190|  3.90M|inline constexpr void typecast_copy(ToT& out, FromR&& in) noexcept {
  191|  3.90M|   typecast_copy(std::span<ToT, 1>(&out, 1), in);
  192|  3.90M|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeENSt3__14spanIjLm1EEETkNS1_16contiguous_rangeERNS3_IKhLm4EEEQaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISF_EESG_E4type10value_typeEEsr3stdE23is_trivially_copyable_vINS8_IXsr21__is_primary_templateINS9_Iu14__remove_cvrefIDTclL_ZNSB_5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENSH_ISP_EESQ_E4type10value_typeEEEEvOSM_OSC_:
  178|  3.90M|inline constexpr void typecast_copy(ToR&& out, FromR&& in) {
  179|  3.90M|   ranges::assert_equal_byte_lengths(out, in);
  180|  3.90M|   std::memcpy(std::ranges::data(out), std::ranges::data(in), ranges::size_bytes(out));
  181|  3.90M|}
_ZN5Botan13typecast_copyImTkNS_6ranges16contiguous_rangeERNSt3__14spanIKhLm8EEEQaaaasr3stdE26is_default_constructible_vIT_Esr3stdE23is_trivially_copyable_vIS7_Esr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISF_EESG_E4type10value_typeEEEES7_OSC_:
  212|  53.8M|inline constexpr ToT typecast_copy(FromR&& src) noexcept {
  213|  53.8M|   ToT dst;
  214|  53.8M|   typecast_copy(dst, src);
  215|  53.8M|   return dst;
  216|  53.8M|}
_ZN5Botan13typecast_copyImTkNS_6ranges16contiguous_rangeERNSt3__14spanIKhLm8EEEQaaaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISE_EESF_E4type10value_typeEEsr3stdE23is_trivially_copyable_vIT_Entsr3std6rangesE5rangeISL_EEEvRSL_OSB_:
  190|  53.8M|inline constexpr void typecast_copy(ToT& out, FromR&& in) noexcept {
  191|  53.8M|   typecast_copy(std::span<ToT, 1>(&out, 1), in);
  192|  53.8M|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeENSt3__14spanImLm1EEETkNS1_16contiguous_rangeERNS3_IKhLm8EEEQaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISF_EESG_E4type10value_typeEEsr3stdE23is_trivially_copyable_vINS8_IXsr21__is_primary_templateINS9_Iu14__remove_cvrefIDTclL_ZNSB_5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENSH_ISP_EESQ_E4type10value_typeEEEEvOSM_OSC_:
  178|  53.8M|inline constexpr void typecast_copy(ToR&& out, FromR&& in) {
  179|  53.8M|   ranges::assert_equal_byte_lengths(out, in);
  180|  53.8M|   std::memcpy(std::ranges::data(out), std::ranges::data(in), ranges::size_bytes(out));
  181|  53.8M|}
_ZN5Botan9clear_memIhEEvPT_m:
  120|  4.83M|inline constexpr void clear_mem(T* ptr, size_t n) {
  121|  4.83M|   clear_bytes(ptr, sizeof(T) * n);
  122|  4.83M|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeERNSt3__14spanIjLm18446744073709551615EEETkNS1_16contiguous_rangeERNS3_IKhLm18446744073709551615EEEQaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISG_EESH_E4type10value_typeEEsr3stdE23is_trivially_copyable_vINS9_IXsr21__is_primary_templateINSA_Iu14__remove_cvrefIDTclL_ZNSC_5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENSI_ISQ_EESR_E4type10value_typeEEEEvOSN_OSD_:
  178|  3.67M|inline constexpr void typecast_copy(ToR&& out, FromR&& in) {
  179|  3.67M|   ranges::assert_equal_byte_lengths(out, in);
  180|  3.67M|   std::memcpy(std::ranges::data(out), std::ranges::data(in), ranges::size_bytes(out));
  181|  3.67M|}
_ZN5Botan13typecast_copyITkNS_6ranges23contiguous_output_rangeERNSt3__14spanIhLm18446744073709551615EEETkNS1_16contiguous_rangeERNS3_IKjLm18446744073709551615EEEQaasr3stdE23is_trivially_copyable_vINS2_11conditionalIXsr21__is_primary_templateINS2_15iterator_traitsIu14__remove_cvrefIDTclL_ZNS2_6ranges5__cpo5beginEEclsr3stdE7declvalIRT0_EEEEEEEEE5valueENS2_26indirectly_readable_traitsISG_EESH_E4type10value_typeEEsr3stdE23is_trivially_copyable_vINS9_IXsr21__is_primary_templateINSA_Iu14__remove_cvrefIDTclL_ZNSC_5beginEEclsr3stdE7declvalIRT_EEEEEEEEE5valueENSI_ISQ_EESR_E4type10value_typeEEEEvOSN_OSD_:
  178|  19.3k|inline constexpr void typecast_copy(ToR&& out, FromR&& in) {
  179|  19.3k|   ranges::assert_equal_byte_lengths(out, in);
  180|  19.3k|   std::memcpy(std::ranges::data(out), std::ranges::data(in), ranges::size_bytes(out));
  181|  19.3k|}
_ZN5Botan8copy_memImQsr3std10is_trivialINSt3__15decayIT_E4typeEEE5valueEEvPS3_PKS3_m:
  146|   101M|inline constexpr void copy_mem(T* out, const T* in, size_t n) {
  147|   101M|   BOTAN_ASSERT_IMPLICATION(n > 0, in != nullptr && out != nullptr, "If n > 0 then args are not null");
  ------------------
  |  |   78|   101M|   do {                                                                                          \
  |  |   79|   203M|      if((expr1) && !(expr2))                                                                    \
  |  |  ------------------
  |  |  |  Branch (79:10): [True: 101M, False: 0]
  |  |  |  Branch (79:23): [True: 101M, False: 0]
  |  |  |  Branch (79:23): [True: 101M, False: 0]
  |  |  ------------------
  |  |   80|   101M|         Botan::assertion_failure(#expr1 " implies " #expr2, msg, __func__, __FILE__, __LINE__); \
  |  |   81|   101M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (81:12): [Folded, False: 101M]
  |  |  ------------------
  ------------------
  148|       |
  149|   101M|   if(in != nullptr && out != nullptr && n > 0) {
  ------------------
  |  Branch (149:7): [True: 101M, False: 0]
  |  Branch (149:24): [True: 101M, False: 0]
  |  Branch (149:42): [True: 101M, False: 0]
  ------------------
  150|   101M|      std::memmove(out, in, sizeof(T) * n);
  151|   101M|   }
  152|   101M|}
_ZN5Botan9clear_memIiEEvPT_m:
  120|  59.5M|inline constexpr void clear_mem(T* ptr, size_t n) {
  121|  59.5M|   clear_bytes(ptr, sizeof(T) * n);
  122|  59.5M|}
_ZN5Botan8copy_memIiQsr3std10is_trivialINSt3__15decayIT_E4typeEEE5valueEEvPS3_PKS3_m:
  146|  1.56k|inline constexpr void copy_mem(T* out, const T* in, size_t n) {
  147|  1.56k|   BOTAN_ASSERT_IMPLICATION(n > 0, in != nullptr && out != nullptr, "If n > 0 then args are not null");
  ------------------
  |  |   78|  1.56k|   do {                                                                                          \
  |  |   79|  3.12k|      if((expr1) && !(expr2))                                                                    \
  |  |  ------------------
  |  |  |  Branch (79:10): [True: 1.56k, False: 0]
  |  |  |  Branch (79:23): [True: 1.56k, False: 0]
  |  |  |  Branch (79:23): [True: 1.56k, False: 0]
  |  |  ------------------
  |  |   80|  1.56k|         Botan::assertion_failure(#expr1 " implies " #expr2, msg, __func__, __FILE__, __LINE__); \
  |  |   81|  1.56k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (81:12): [Folded, False: 1.56k]
  |  |  ------------------
  ------------------
  148|       |
  149|  1.56k|   if(in != nullptr && out != nullptr && n > 0) {
  ------------------
  |  Branch (149:7): [True: 1.56k, False: 0]
  |  Branch (149:24): [True: 1.56k, False: 0]
  |  Branch (149:42): [True: 1.56k, False: 0]
  ------------------
  150|  1.56k|      std::memmove(out, in, sizeof(T) * n);
  151|  1.56k|   }
  152|  1.56k|}

_ZNK5Botan10Public_Key13message_partsEv:
  177|  47.2k|      virtual size_t message_parts() const { return 1; }
_ZNK5Botan10Public_Key17message_part_sizeEv:
  188|  47.2k|      virtual size_t message_part_size() const { return 0; }
_ZN5Botan14Asymmetric_KeyD2Ev:
   61|  94.1k|      virtual ~Asymmetric_Key() = default;

_ZN5Botan6PK_Ops12VerificationD2Ev:
   88|  94.0k|      virtual ~Verification() = default;

_ZNK5Botan15Modular_Reducer8multiplyERKNS_6BigIntES3_:
   30|   104k|      BigInt multiply(const BigInt& x, const BigInt& y) const { return reduce(x * y); }
_ZNK5Botan15Modular_Reducer11get_modulusEv:
   20|      8|      const BigInt& get_modulus() const { return m_modulus; }
_ZNK5Botan15Modular_Reducer6squareERKNS_6BigIntE:
   43|  27.5k|      BigInt square(const BigInt& x) const { return reduce(Botan::square(x)); }

_ZN5Botan21RandomNumberGenerator10random_vecITkNS_8concepts21resizable_byte_bufferENSt3__16vectorIhNS_16secure_allocatorIhEEEEEEvRT_m:
  190|  96.3k|      void random_vec(T& v, size_t bytes) {
  191|  96.3k|         v.resize(bytes);
  192|  96.3k|         random_vec(v);
  193|  96.3k|      }
_ZN5Botan21RandomNumberGenerator10random_vecENSt3__14spanIhLm18446744073709551615EEE:
  179|  96.3k|      void random_vec(std::span<uint8_t> v) { this->randomize(v); }
_ZN5Botan21RandomNumberGenerator9randomizeENSt3__14spanIhLm18446744073709551615EEE:
   52|  96.3k|      void randomize(std::span<uint8_t> output) { this->fill_bytes_with_input(output, {}); }
_ZN5Botan21RandomNumberGenerator11add_entropyENSt3__14spanIKhLm18446744073709551615EEE:
   75|  96.3k|      void add_entropy(std::span<const uint8_t> input) { this->fill_bytes_with_input({}, input); }
_ZN5Botan21RandomNumberGenerator9next_byteEv:
  217|  96.3k|      uint8_t next_byte() {
  218|  96.3k|         uint8_t b;
  219|  96.3k|         this->fill_bytes_with_input(std::span(&b, 1), {});
  220|  96.3k|         return b;
  221|  96.3k|      }
_ZN5Botan21RandomNumberGeneratorC2Ev:
   34|   192k|      RandomNumberGenerator() = default;
_ZN5Botan21RandomNumberGeneratorD2Ev:
   32|   192k|      virtual ~RandomNumberGenerator() = default;
_ZN5Botan21RandomNumberGenerator10random_vecITkNS_8concepts21resizable_byte_bufferENSt3__16vectorIhNS_16secure_allocatorIhEEEEQsr3stdE21default_initializableIT_EEES8_m:
  205|  96.3k|      T random_vec(size_t bytes) {
  206|  96.3k|         T result;
  207|  96.3k|         random_vec(result, bytes);
  208|  96.3k|         return result;
  209|  96.3k|      }

_ZN5Botan16secure_allocatorIhE10deallocateEPhm:
   47|   653k|      void deallocate(T* p, std::size_t n) { deallocate_memory(p, n, sizeof(T)); }
_ZN5Botan16secure_allocatorIhE8allocateEm:
   45|   653k|      T* allocate(std::size_t n) { return static_cast<T*>(allocate_memory(n, sizeof(T))); }
_ZN5BotanneIhhEEbRKNS_16secure_allocatorIT_EERKNS1_IT0_EE:
   56|     51|inline bool operator!=(const secure_allocator<T>&, const secure_allocator<U>&) {
   57|     51|   return false;
   58|     51|}
_ZN5Botan16secure_allocatorImE10deallocateEPmm:
   47|  11.1M|      void deallocate(T* p, std::size_t n) { deallocate_memory(p, n, sizeof(T)); }
_ZN5Botan16secure_allocatorImE8allocateEm:
   45|  11.1M|      T* allocate(std::size_t n) { return static_cast<T*>(allocate_memory(n, sizeof(T))); }
_ZN5BotanpLIhNS_16secure_allocatorIhEES2_EERNSt3__16vectorIT_T0_EES8_RKNS4_IS5_T1_EE:
   80|      6|std::vector<T, Alloc>& operator+=(std::vector<T, Alloc>& out, const std::vector<T, Alloc2>& in) {
   81|      6|   out.insert(out.end(), in.begin(), in.end());
   82|      6|   return out;
   83|      6|}
_ZN5Botan16secure_allocatorIjE8allocateEm:
   45|  98.0k|      T* allocate(std::size_t n) { return static_cast<T*>(allocate_memory(n, sizeof(T))); }
_ZN5Botan16secure_allocatorIjE10deallocateEPjm:
   47|  98.0k|      void deallocate(T* p, std::size_t n) { deallocate_memory(p, n, sizeof(T)); }
_ZN5Botan7zeroiseImNS_16secure_allocatorImEEEEvRNSt3__16vectorIT_T0_EE:
  108|  10.2k|void zeroise(std::vector<T, Alloc>& vec) {
  109|  10.2k|   std::fill(vec.begin(), vec.end(), static_cast<T>(0));
  110|  10.2k|}
_ZN5BotanpLIhNSt3__19allocatorIhEEmEERNS1_6vectorIT_T0_EES8_RKNS1_4pairIPKS5_T1_EE:
   92|  62.8k|std::vector<T, Alloc>& operator+=(std::vector<T, Alloc>& out, const std::pair<const T*, L>& in) {
   93|  62.8k|   out.insert(out.end(), in.first, in.first + in.second);
   94|  62.8k|   return out;
   95|  62.8k|}

_ZN5Botan13SM2_PublicKeyC1ERKNS_8EC_GroupERKNS_8EC_PointE:
   25|  9.25k|      SM2_PublicKey(const EC_Group& dom_par, const EC_Point& public_point) : EC_PublicKey(dom_par, public_point) {}
_ZNK5Botan13SM2_PublicKey13message_partsEv:
   41|  4.53k|      size_t message_parts() const override { return 2; }
_ZNK5Botan13SM2_PublicKey17message_part_sizeEv:
   49|  4.53k|      size_t message_part_size() const override { return domain().get_order().bytes(); }

_ZN5Botan12Stateful_RNGC2ERNS_21RandomNumberGeneratorEm:
   45|  96.3k|            m_underlying_rng(&rng), m_reseed_interval(reseed_interval) {}
_ZNK5Botan12Stateful_RNG13accepts_inputEv:
   71|  96.3k|      bool accepts_input() const final { return true; }

_ZNK5Botan18SymmetricAlgorithm15valid_keylengthEm:
  107|   385k|      bool valid_keylength(size_t length) const { return key_spec().valid_keylength(length); }
_ZNK5Botan24Key_Length_Specification15valid_keylengthEm:
   42|   385k|      bool valid_keylength(size_t length) const {
   43|   385k|         return ((length >= m_min_keylen) && (length <= m_max_keylen) && (length % m_keylen_mod == 0));
  ------------------
  |  Branch (43:18): [True: 385k, False: 0]
  |  Branch (43:46): [True: 385k, False: 0]
  |  Branch (43:74): [True: 385k, False: 0]
  ------------------
   44|   385k|      }
_ZN5Botan24Key_Length_SpecificationC2Emmm:
   36|   385k|            m_min_keylen(min_k), m_max_keylen(max_k ? max_k : min_k), m_keylen_mod(k_mod) {}
  ------------------
  |  Branch (36:47): [True: 385k, False: 0]
  ------------------
_ZNK5Botan18SymmetricAlgorithm23assert_key_material_setEv:
  139|  1.92M|      void assert_key_material_set() const { assert_key_material_set(has_keying_material()); }
_ZNK5Botan18SymmetricAlgorithm23assert_key_material_setEb:
  141|  1.92M|      void assert_key_material_set(bool predicate) const {
  142|  1.92M|         if(!predicate) {
  ------------------
  |  Branch (142:13): [True: 0, False: 1.92M]
  ------------------
  143|      0|            throw_key_not_set_error();
  144|      0|         }
  145|  1.92M|      }
_ZN5Botan18SymmetricAlgorithmD2Ev:
   79|  96.3k|      virtual ~SymmetricAlgorithm() = default;

_ZN5Botan3OID11from_stringENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   74|  44.6k|OID OID::from_string(std::string_view str) {
   75|  44.6k|   if(str.empty()) {
  ------------------
  |  Branch (75:7): [True: 0, False: 44.6k]
  ------------------
   76|      0|      throw Invalid_Argument("OID::from_string argument must be non-empty");
   77|      0|   }
   78|       |
   79|  44.6k|   OID o = OID_Map::global_registry().str2oid(str);
   80|  44.6k|   if(o.has_value()) {
  ------------------
  |  Branch (80:7): [True: 44.6k, False: 0]
  ------------------
   81|  44.6k|      return o;
   82|  44.6k|   }
   83|       |
   84|      0|   std::vector<uint32_t> raw = parse_oid_str(str);
   85|       |
   86|      0|   if(!raw.empty()) {
  ------------------
  |  Branch (86:7): [True: 0, False: 0]
  ------------------
   87|      0|      return OID(std::move(raw));
   88|      0|   }
   89|       |
   90|      0|   throw Lookup_Error(fmt("No OID associated with name '{}'", str));
   91|      0|}

_ZN5Botan7OID_MapC2Ev:
   11|      1|OID_Map::OID_Map() {
   12|      1|   m_str2oid = OID_Map::load_str2oid_map();
   13|      1|   m_oid2str = OID_Map::load_oid2str_map();
   14|      1|}
_ZN5Botan7OID_Map15global_registryEv:
   16|  44.6k|OID_Map& OID_Map::global_registry() {
   17|  44.6k|   static OID_Map g_map;
   18|  44.6k|   return g_map;
   19|  44.6k|}
_ZN5Botan7OID_Map7str2oidENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   69|  44.6k|OID OID_Map::str2oid(std::string_view str) {
   70|  44.6k|   lock_guard_type<mutex_type> lock(m_mutex);
   71|  44.6k|   auto i = m_str2oid.find(std::string(str));
   72|  44.6k|   if(i != m_str2oid.end()) {
  ------------------
  |  Branch (72:7): [True: 44.6k, False: 0]
  ------------------
   73|  44.6k|      return i->second;
   74|  44.6k|   }
   75|       |
   76|      0|   return OID();
   77|  44.6k|}

_ZN5Botan7OID_Map16load_oid2str_mapEv:
   17|      1|std::unordered_map<std::string, std::string> OID_Map::load_oid2str_map() {
   18|      1|   return std::unordered_map<std::string, std::string>{
   19|       |
   20|      1|      {"0.3.4401.5.3.1.9.26", "Camellia-192/GCM"},
   21|      1|      {"0.3.4401.5.3.1.9.46", "Camellia-256/GCM"},
   22|      1|      {"0.3.4401.5.3.1.9.6", "Camellia-128/GCM"},
   23|      1|      {"0.4.0.127.0.15.1.1.13.0", "XMSS"},
   24|      1|      {"1.0.14888.3.0.5", "ECKCDSA"},
   25|      1|      {"1.2.156.10197.1.104.100", "SM4/OCB"},
   26|      1|      {"1.2.156.10197.1.104.2", "SM4/CBC"},
   27|      1|      {"1.2.156.10197.1.104.8", "SM4/GCM"},
   28|      1|      {"1.2.156.10197.1.301", "sm2p256v1"},
   29|      1|      {"1.2.156.10197.1.301.1", "SM2"},
   30|      1|      {"1.2.156.10197.1.301.2", "SM2_Kex"},
   31|      1|      {"1.2.156.10197.1.301.3", "SM2_Enc"},
   32|      1|      {"1.2.156.10197.1.401", "SM3"},
   33|      1|      {"1.2.156.10197.1.501", "SM2_Sig/SM3"},
   34|      1|      {"1.2.156.10197.1.504", "RSA/EMSA3(SM3)"},
   35|      1|      {"1.2.250.1.223.101.256.1", "frp256v1"},
   36|      1|      {"1.2.392.200011.61.1.1.1.2", "Camellia-128/CBC"},
   37|      1|      {"1.2.392.200011.61.1.1.1.3", "Camellia-192/CBC"},
   38|      1|      {"1.2.392.200011.61.1.1.1.4", "Camellia-256/CBC"},
   39|      1|      {"1.2.410.200004.1.100.4.3", "ECKCDSA/SHA-1"},
   40|      1|      {"1.2.410.200004.1.100.4.4", "ECKCDSA/SHA-224"},
   41|      1|      {"1.2.410.200004.1.100.4.5", "ECKCDSA/SHA-256"},
   42|      1|      {"1.2.410.200004.1.4", "SEED/CBC"},
   43|      1|      {"1.2.643.100.1", "GOST.OGRN"},
   44|      1|      {"1.2.643.100.111", "GOST.SubjectSigningTool"},
   45|      1|      {"1.2.643.100.112", "GOST.IssuerSigningTool"},
   46|      1|      {"1.2.643.2.2.19", "GOST-34.10"},
   47|      1|      {"1.2.643.2.2.3", "GOST-34.10/GOST-R-34.11-94"},
   48|      1|      {"1.2.643.2.2.35.1", "gost_256A"},
   49|      1|      {"1.2.643.2.2.36.0", "gost_256A"},
   50|      1|      {"1.2.643.3.131.1.1", "GOST.INN"},
   51|      1|      {"1.2.643.7.1.1.1.1", "GOST-34.10-2012-256"},
   52|      1|      {"1.2.643.7.1.1.1.2", "GOST-34.10-2012-512"},
   53|      1|      {"1.2.643.7.1.1.2.2", "Streebog-256"},
   54|      1|      {"1.2.643.7.1.1.2.3", "Streebog-512"},
   55|      1|      {"1.2.643.7.1.1.3.2", "GOST-34.10-2012-256/Streebog-256"},
   56|      1|      {"1.2.643.7.1.1.3.3", "GOST-34.10-2012-512/Streebog-512"},
   57|      1|      {"1.2.643.7.1.2.1.1.1", "gost_256A"},
   58|      1|      {"1.2.643.7.1.2.1.1.2", "gost_256B"},
   59|      1|      {"1.2.643.7.1.2.1.2.1", "gost_512A"},
   60|      1|      {"1.2.643.7.1.2.1.2.2", "gost_512B"},
   61|      1|      {"1.2.840.10040.4.1", "DSA"},
   62|      1|      {"1.2.840.10040.4.3", "DSA/SHA-1"},
   63|      1|      {"1.2.840.10045.2.1", "ECDSA"},
   64|      1|      {"1.2.840.10045.3.1.1", "secp192r1"},
   65|      1|      {"1.2.840.10045.3.1.2", "x962_p192v2"},
   66|      1|      {"1.2.840.10045.3.1.3", "x962_p192v3"},
   67|      1|      {"1.2.840.10045.3.1.4", "x962_p239v1"},
   68|      1|      {"1.2.840.10045.3.1.5", "x962_p239v2"},
   69|      1|      {"1.2.840.10045.3.1.6", "x962_p239v3"},
   70|      1|      {"1.2.840.10045.3.1.7", "secp256r1"},
   71|      1|      {"1.2.840.10045.4.1", "ECDSA/SHA-1"},
   72|      1|      {"1.2.840.10045.4.3.1", "ECDSA/SHA-224"},
   73|      1|      {"1.2.840.10045.4.3.2", "ECDSA/SHA-256"},
   74|      1|      {"1.2.840.10045.4.3.3", "ECDSA/SHA-384"},
   75|      1|      {"1.2.840.10045.4.3.4", "ECDSA/SHA-512"},
   76|      1|      {"1.2.840.10046.2.1", "DH"},
   77|      1|      {"1.2.840.113533.7.66.10", "CAST-128/CBC"},
   78|      1|      {"1.2.840.113533.7.66.15", "KeyWrap.CAST-128"},
   79|      1|      {"1.2.840.113549.1.1.1", "RSA"},
   80|      1|      {"1.2.840.113549.1.1.10", "RSA/EMSA4"},
   81|      1|      {"1.2.840.113549.1.1.11", "RSA/EMSA3(SHA-256)"},
   82|      1|      {"1.2.840.113549.1.1.12", "RSA/EMSA3(SHA-384)"},
   83|      1|      {"1.2.840.113549.1.1.13", "RSA/EMSA3(SHA-512)"},
   84|      1|      {"1.2.840.113549.1.1.14", "RSA/EMSA3(SHA-224)"},
   85|      1|      {"1.2.840.113549.1.1.16", "RSA/EMSA3(SHA-512-256)"},
   86|      1|      {"1.2.840.113549.1.1.4", "RSA/EMSA3(MD5)"},
   87|      1|      {"1.2.840.113549.1.1.5", "RSA/EMSA3(SHA-1)"},
   88|      1|      {"1.2.840.113549.1.1.7", "RSA/OAEP"},
   89|      1|      {"1.2.840.113549.1.1.8", "MGF1"},
   90|      1|      {"1.2.840.113549.1.5.12", "PKCS5.PBKDF2"},
   91|      1|      {"1.2.840.113549.1.5.13", "PBE-PKCS5v20"},
   92|      1|      {"1.2.840.113549.1.9.1", "PKCS9.EmailAddress"},
   93|      1|      {"1.2.840.113549.1.9.14", "PKCS9.ExtensionRequest"},
   94|      1|      {"1.2.840.113549.1.9.16.3.18", "ChaCha20Poly1305"},
   95|      1|      {"1.2.840.113549.1.9.16.3.6", "KeyWrap.TripleDES"},
   96|      1|      {"1.2.840.113549.1.9.16.3.8", "Compression.Zlib"},
   97|      1|      {"1.2.840.113549.1.9.2", "PKCS9.UnstructuredName"},
   98|      1|      {"1.2.840.113549.1.9.3", "PKCS9.ContentType"},
   99|      1|      {"1.2.840.113549.1.9.4", "PKCS9.MessageDigest"},
  100|      1|      {"1.2.840.113549.1.9.7", "PKCS9.ChallengePassword"},
  101|      1|      {"1.2.840.113549.2.10", "HMAC(SHA-384)"},
  102|      1|      {"1.2.840.113549.2.11", "HMAC(SHA-512)"},
  103|      1|      {"1.2.840.113549.2.13", "HMAC(SHA-512-256)"},
  104|      1|      {"1.2.840.113549.2.5", "MD5"},
  105|      1|      {"1.2.840.113549.2.7", "HMAC(SHA-1)"},
  106|      1|      {"1.2.840.113549.2.8", "HMAC(SHA-224)"},
  107|      1|      {"1.2.840.113549.2.9", "HMAC(SHA-256)"},
  108|      1|      {"1.2.840.113549.3.7", "TripleDES/CBC"},
  109|      1|      {"1.3.101.110", "Curve25519"},
  110|      1|      {"1.3.101.111", "X448"},
  111|      1|      {"1.3.101.112", "Ed25519"},
  112|      1|      {"1.3.101.113", "Ed448"},
  113|      1|      {"1.3.132.0.10", "secp256k1"},
  114|      1|      {"1.3.132.0.30", "secp160r2"},
  115|      1|      {"1.3.132.0.31", "secp192k1"},
  116|      1|      {"1.3.132.0.32", "secp224k1"},
  117|      1|      {"1.3.132.0.33", "secp224r1"},
  118|      1|      {"1.3.132.0.34", "secp384r1"},
  119|      1|      {"1.3.132.0.35", "secp521r1"},
  120|      1|      {"1.3.132.0.8", "secp160r1"},
  121|      1|      {"1.3.132.0.9", "secp160k1"},
  122|      1|      {"1.3.132.1.12", "ECDH"},
  123|      1|      {"1.3.14.3.2.26", "SHA-1"},
  124|      1|      {"1.3.14.3.2.7", "DES/CBC"},
  125|      1|      {"1.3.36.3.2.1", "RIPEMD-160"},
  126|      1|      {"1.3.36.3.3.1.2", "RSA/EMSA3(RIPEMD-160)"},
  127|      1|      {"1.3.36.3.3.2.5.2.1", "ECGDSA"},
  128|      1|      {"1.3.36.3.3.2.5.4.1", "ECGDSA/RIPEMD-160"},
  129|      1|      {"1.3.36.3.3.2.5.4.2", "ECGDSA/SHA-1"},
  130|      1|      {"1.3.36.3.3.2.5.4.3", "ECGDSA/SHA-224"},
  131|      1|      {"1.3.36.3.3.2.5.4.4", "ECGDSA/SHA-256"},
  132|      1|      {"1.3.36.3.3.2.5.4.5", "ECGDSA/SHA-384"},
  133|      1|      {"1.3.36.3.3.2.5.4.6", "ECGDSA/SHA-512"},
  134|      1|      {"1.3.36.3.3.2.8.1.1.1", "brainpool160r1"},
  135|      1|      {"1.3.36.3.3.2.8.1.1.11", "brainpool384r1"},
  136|      1|      {"1.3.36.3.3.2.8.1.1.13", "brainpool512r1"},
  137|      1|      {"1.3.36.3.3.2.8.1.1.3", "brainpool192r1"},
  138|      1|      {"1.3.36.3.3.2.8.1.1.5", "brainpool224r1"},
  139|      1|      {"1.3.36.3.3.2.8.1.1.7", "brainpool256r1"},
  140|      1|      {"1.3.36.3.3.2.8.1.1.9", "brainpool320r1"},
  141|      1|      {"1.3.6.1.4.1.11591.15.1", "OpenPGP.Ed25519"},
  142|      1|      {"1.3.6.1.4.1.11591.4.11", "Scrypt"},
  143|      1|      {"1.3.6.1.4.1.25258.1.10.1", "Dilithium-4x4-AES-r3"},
  144|      1|      {"1.3.6.1.4.1.25258.1.10.2", "Dilithium-6x5-AES-r3"},
  145|      1|      {"1.3.6.1.4.1.25258.1.10.3", "Dilithium-8x7-AES-r3"},
  146|      1|      {"1.3.6.1.4.1.25258.1.11.1", "Kyber-512-90s-r3"},
  147|      1|      {"1.3.6.1.4.1.25258.1.11.2", "Kyber-768-90s-r3"},
  148|      1|      {"1.3.6.1.4.1.25258.1.11.3", "Kyber-1024-90s-r3"},
  149|      1|      {"1.3.6.1.4.1.25258.1.12.1.1", "SphincsPlus-shake-128s-r3.1"},
  150|      1|      {"1.3.6.1.4.1.25258.1.12.1.2", "SphincsPlus-shake-128f-r3.1"},
  151|      1|      {"1.3.6.1.4.1.25258.1.12.1.3", "SphincsPlus-shake-192s-r3.1"},
  152|      1|      {"1.3.6.1.4.1.25258.1.12.1.4", "SphincsPlus-shake-192f-r3.1"},
  153|      1|      {"1.3.6.1.4.1.25258.1.12.1.5", "SphincsPlus-shake-256s-r3.1"},
  154|      1|      {"1.3.6.1.4.1.25258.1.12.1.6", "SphincsPlus-shake-256f-r3.1"},
  155|      1|      {"1.3.6.1.4.1.25258.1.12.2.1", "SphincsPlus-sha2-128s-r3.1"},
  156|      1|      {"1.3.6.1.4.1.25258.1.12.2.2", "SphincsPlus-sha2-128f-r3.1"},
  157|      1|      {"1.3.6.1.4.1.25258.1.12.2.3", "SphincsPlus-sha2-192s-r3.1"},
  158|      1|      {"1.3.6.1.4.1.25258.1.12.2.4", "SphincsPlus-sha2-192f-r3.1"},
  159|      1|      {"1.3.6.1.4.1.25258.1.12.2.5", "SphincsPlus-sha2-256s-r3.1"},
  160|      1|      {"1.3.6.1.4.1.25258.1.12.2.6", "SphincsPlus-sha2-256f-r3.1"},
  161|      1|      {"1.3.6.1.4.1.25258.1.12.3.1", "SphincsPlus-haraka-128s-r3.1"},
  162|      1|      {"1.3.6.1.4.1.25258.1.12.3.2", "SphincsPlus-haraka-128f-r3.1"},
  163|      1|      {"1.3.6.1.4.1.25258.1.12.3.3", "SphincsPlus-haraka-192s-r3.1"},
  164|      1|      {"1.3.6.1.4.1.25258.1.12.3.4", "SphincsPlus-haraka-192f-r3.1"},
  165|      1|      {"1.3.6.1.4.1.25258.1.12.3.5", "SphincsPlus-haraka-256s-r3.1"},
  166|      1|      {"1.3.6.1.4.1.25258.1.12.3.6", "SphincsPlus-haraka-256f-r3.1"},
  167|      1|      {"1.3.6.1.4.1.25258.1.14.1", "FrodoKEM-640-SHAKE"},
  168|      1|      {"1.3.6.1.4.1.25258.1.14.2", "FrodoKEM-976-SHAKE"},
  169|      1|      {"1.3.6.1.4.1.25258.1.14.3", "FrodoKEM-1344-SHAKE"},
  170|      1|      {"1.3.6.1.4.1.25258.1.15.1", "FrodoKEM-640-AES"},
  171|      1|      {"1.3.6.1.4.1.25258.1.15.2", "FrodoKEM-976-AES"},
  172|      1|      {"1.3.6.1.4.1.25258.1.15.3", "FrodoKEM-1344-AES"},
  173|      1|      {"1.3.6.1.4.1.25258.1.16.1", "eFrodoKEM-640-SHAKE"},
  174|      1|      {"1.3.6.1.4.1.25258.1.16.2", "eFrodoKEM-976-SHAKE"},
  175|      1|      {"1.3.6.1.4.1.25258.1.16.3", "eFrodoKEM-1344-SHAKE"},
  176|      1|      {"1.3.6.1.4.1.25258.1.17.1", "eFrodoKEM-640-AES"},
  177|      1|      {"1.3.6.1.4.1.25258.1.17.2", "eFrodoKEM-976-AES"},
  178|      1|      {"1.3.6.1.4.1.25258.1.17.3", "eFrodoKEM-1344-AES"},
  179|      1|      {"1.3.6.1.4.1.25258.1.3", "McEliece"},
  180|      1|      {"1.3.6.1.4.1.25258.1.5", "XMSS-draft6"},
  181|      1|      {"1.3.6.1.4.1.25258.1.6.1", "GOST-34.10-2012-256/SHA-256"},
  182|      1|      {"1.3.6.1.4.1.25258.1.7.1", "Kyber-512-r3"},
  183|      1|      {"1.3.6.1.4.1.25258.1.7.2", "Kyber-768-r3"},
  184|      1|      {"1.3.6.1.4.1.25258.1.7.3", "Kyber-1024-r3"},
  185|      1|      {"1.3.6.1.4.1.25258.1.8", "XMSS-draft12"},
  186|      1|      {"1.3.6.1.4.1.25258.1.9.1", "Dilithium-4x4-r3"},
  187|      1|      {"1.3.6.1.4.1.25258.1.9.2", "Dilithium-6x5-r3"},
  188|      1|      {"1.3.6.1.4.1.25258.1.9.3", "Dilithium-8x7-r3"},
  189|      1|      {"1.3.6.1.4.1.25258.3.1", "Serpent/CBC"},
  190|      1|      {"1.3.6.1.4.1.25258.3.101", "Serpent/GCM"},
  191|      1|      {"1.3.6.1.4.1.25258.3.102", "Twofish/GCM"},
  192|      1|      {"1.3.6.1.4.1.25258.3.2", "Threefish-512/CBC"},
  193|      1|      {"1.3.6.1.4.1.25258.3.2.1", "AES-128/OCB"},
  194|      1|      {"1.3.6.1.4.1.25258.3.2.2", "AES-192/OCB"},
  195|      1|      {"1.3.6.1.4.1.25258.3.2.3", "AES-256/OCB"},
  196|      1|      {"1.3.6.1.4.1.25258.3.2.4", "Serpent/OCB"},
  197|      1|      {"1.3.6.1.4.1.25258.3.2.5", "Twofish/OCB"},
  198|      1|      {"1.3.6.1.4.1.25258.3.2.6", "Camellia-128/OCB"},
  199|      1|      {"1.3.6.1.4.1.25258.3.2.7", "Camellia-192/OCB"},
  200|      1|      {"1.3.6.1.4.1.25258.3.2.8", "Camellia-256/OCB"},
  201|      1|      {"1.3.6.1.4.1.25258.3.3", "Twofish/CBC"},
  202|      1|      {"1.3.6.1.4.1.25258.3.4.1", "AES-128/SIV"},
  203|      1|      {"1.3.6.1.4.1.25258.3.4.2", "AES-192/SIV"},
  204|      1|      {"1.3.6.1.4.1.25258.3.4.3", "AES-256/SIV"},
  205|      1|      {"1.3.6.1.4.1.25258.3.4.4", "Serpent/SIV"},
  206|      1|      {"1.3.6.1.4.1.25258.3.4.5", "Twofish/SIV"},
  207|      1|      {"1.3.6.1.4.1.25258.3.4.6", "Camellia-128/SIV"},
  208|      1|      {"1.3.6.1.4.1.25258.3.4.7", "Camellia-192/SIV"},
  209|      1|      {"1.3.6.1.4.1.25258.3.4.8", "Camellia-256/SIV"},
  210|      1|      {"1.3.6.1.4.1.25258.3.4.9", "SM4/SIV"},
  211|      1|      {"1.3.6.1.4.1.3029.1.2.1", "ElGamal"},
  212|      1|      {"1.3.6.1.4.1.3029.1.5.1", "OpenPGP.Curve25519"},
  213|      1|      {"1.3.6.1.4.1.311.20.2.2", "Microsoft SmartcardLogon"},
  214|      1|      {"1.3.6.1.4.1.311.20.2.3", "Microsoft UPN"},
  215|      1|      {"1.3.6.1.4.1.8301.3.1.2.9.0.38", "secp521r1"},
  216|      1|      {"1.3.6.1.5.5.7.1.1", "PKIX.AuthorityInformationAccess"},
  217|      1|      {"1.3.6.1.5.5.7.3.1", "PKIX.ServerAuth"},
  218|      1|      {"1.3.6.1.5.5.7.3.2", "PKIX.ClientAuth"},
  219|      1|      {"1.3.6.1.5.5.7.3.3", "PKIX.CodeSigning"},
  220|      1|      {"1.3.6.1.5.5.7.3.4", "PKIX.EmailProtection"},
  221|      1|      {"1.3.6.1.5.5.7.3.5", "PKIX.IPsecEndSystem"},
  222|      1|      {"1.3.6.1.5.5.7.3.6", "PKIX.IPsecTunnel"},
  223|      1|      {"1.3.6.1.5.5.7.3.7", "PKIX.IPsecUser"},
  224|      1|      {"1.3.6.1.5.5.7.3.8", "PKIX.TimeStamping"},
  225|      1|      {"1.3.6.1.5.5.7.3.9", "PKIX.OCSPSigning"},
  226|      1|      {"1.3.6.1.5.5.7.48.1", "PKIX.OCSP"},
  227|      1|      {"1.3.6.1.5.5.7.48.1.1", "PKIX.OCSP.BasicResponse"},
  228|      1|      {"1.3.6.1.5.5.7.48.1.5", "PKIX.OCSP.NoCheck"},
  229|      1|      {"1.3.6.1.5.5.7.48.2", "PKIX.CertificateAuthorityIssuers"},
  230|      1|      {"1.3.6.1.5.5.7.8.5", "PKIX.XMPPAddr"},
  231|      1|      {"2.16.840.1.101.3.4.1.2", "AES-128/CBC"},
  232|      1|      {"2.16.840.1.101.3.4.1.22", "AES-192/CBC"},
  233|      1|      {"2.16.840.1.101.3.4.1.25", "KeyWrap.AES-192"},
  234|      1|      {"2.16.840.1.101.3.4.1.26", "AES-192/GCM"},
  235|      1|      {"2.16.840.1.101.3.4.1.27", "AES-192/CCM"},
  236|      1|      {"2.16.840.1.101.3.4.1.42", "AES-256/CBC"},
  237|      1|      {"2.16.840.1.101.3.4.1.45", "KeyWrap.AES-256"},
  238|      1|      {"2.16.840.1.101.3.4.1.46", "AES-256/GCM"},
  239|      1|      {"2.16.840.1.101.3.4.1.47", "AES-256/CCM"},
  240|      1|      {"2.16.840.1.101.3.4.1.5", "KeyWrap.AES-128"},
  241|      1|      {"2.16.840.1.101.3.4.1.6", "AES-128/GCM"},
  242|      1|      {"2.16.840.1.101.3.4.1.7", "AES-128/CCM"},
  243|      1|      {"2.16.840.1.101.3.4.2.1", "SHA-256"},
  244|      1|      {"2.16.840.1.101.3.4.2.10", "SHA-3(512)"},
  245|      1|      {"2.16.840.1.101.3.4.2.11", "SHAKE-128"},
  246|      1|      {"2.16.840.1.101.3.4.2.12", "SHAKE-256"},
  247|      1|      {"2.16.840.1.101.3.4.2.2", "SHA-384"},
  248|      1|      {"2.16.840.1.101.3.4.2.3", "SHA-512"},
  249|      1|      {"2.16.840.1.101.3.4.2.4", "SHA-224"},
  250|      1|      {"2.16.840.1.101.3.4.2.6", "SHA-512-256"},
  251|      1|      {"2.16.840.1.101.3.4.2.7", "SHA-3(224)"},
  252|      1|      {"2.16.840.1.101.3.4.2.8", "SHA-3(256)"},
  253|      1|      {"2.16.840.1.101.3.4.2.9", "SHA-3(384)"},
  254|      1|      {"2.16.840.1.101.3.4.3.1", "DSA/SHA-224"},
  255|      1|      {"2.16.840.1.101.3.4.3.10", "ECDSA/SHA-3(256)"},
  256|      1|      {"2.16.840.1.101.3.4.3.11", "ECDSA/SHA-3(384)"},
  257|      1|      {"2.16.840.1.101.3.4.3.12", "ECDSA/SHA-3(512)"},
  258|      1|      {"2.16.840.1.101.3.4.3.13", "RSA/EMSA3(SHA-3(224))"},
  259|      1|      {"2.16.840.1.101.3.4.3.14", "RSA/EMSA3(SHA-3(256))"},
  260|      1|      {"2.16.840.1.101.3.4.3.15", "RSA/EMSA3(SHA-3(384))"},
  261|      1|      {"2.16.840.1.101.3.4.3.16", "RSA/EMSA3(SHA-3(512))"},
  262|      1|      {"2.16.840.1.101.3.4.3.2", "DSA/SHA-256"},
  263|      1|      {"2.16.840.1.101.3.4.3.3", "DSA/SHA-384"},
  264|      1|      {"2.16.840.1.101.3.4.3.4", "DSA/SHA-512"},
  265|      1|      {"2.16.840.1.101.3.4.3.5", "DSA/SHA-3(224)"},
  266|      1|      {"2.16.840.1.101.3.4.3.6", "DSA/SHA-3(256)"},
  267|      1|      {"2.16.840.1.101.3.4.3.7", "DSA/SHA-3(384)"},
  268|      1|      {"2.16.840.1.101.3.4.3.8", "DSA/SHA-3(512)"},
  269|      1|      {"2.16.840.1.101.3.4.3.9", "ECDSA/SHA-3(224)"},
  270|      1|      {"2.16.840.1.113730.1.13", "Certificate Comment"},
  271|      1|      {"2.5.29.14", "X509v3.SubjectKeyIdentifier"},
  272|      1|      {"2.5.29.15", "X509v3.KeyUsage"},
  273|      1|      {"2.5.29.16", "X509v3.PrivateKeyUsagePeriod"},
  274|      1|      {"2.5.29.17", "X509v3.SubjectAlternativeName"},
  275|      1|      {"2.5.29.18", "X509v3.IssuerAlternativeName"},
  276|      1|      {"2.5.29.19", "X509v3.BasicConstraints"},
  277|      1|      {"2.5.29.20", "X509v3.CRLNumber"},
  278|      1|      {"2.5.29.21", "X509v3.ReasonCode"},
  279|      1|      {"2.5.29.23", "X509v3.HoldInstructionCode"},
  280|      1|      {"2.5.29.24", "X509v3.InvalidityDate"},
  281|      1|      {"2.5.29.28", "X509v3.CRLIssuingDistributionPoint"},
  282|      1|      {"2.5.29.30", "X509v3.NameConstraints"},
  283|      1|      {"2.5.29.31", "X509v3.CRLDistributionPoints"},
  284|      1|      {"2.5.29.32", "X509v3.CertificatePolicies"},
  285|      1|      {"2.5.29.32.0", "X509v3.AnyPolicy"},
  286|      1|      {"2.5.29.35", "X509v3.AuthorityKeyIdentifier"},
  287|      1|      {"2.5.29.36", "X509v3.PolicyConstraints"},
  288|      1|      {"2.5.29.37", "X509v3.ExtendedKeyUsage"},
  289|      1|      {"2.5.4.10", "X520.Organization"},
  290|      1|      {"2.5.4.11", "X520.OrganizationalUnit"},
  291|      1|      {"2.5.4.12", "X520.Title"},
  292|      1|      {"2.5.4.3", "X520.CommonName"},
  293|      1|      {"2.5.4.4", "X520.Surname"},
  294|      1|      {"2.5.4.42", "X520.GivenName"},
  295|      1|      {"2.5.4.43", "X520.Initials"},
  296|      1|      {"2.5.4.44", "X520.GenerationalQualifier"},
  297|      1|      {"2.5.4.46", "X520.DNQualifier"},
  298|      1|      {"2.5.4.5", "X520.SerialNumber"},
  299|      1|      {"2.5.4.6", "X520.Country"},
  300|      1|      {"2.5.4.65", "X520.Pseudonym"},
  301|      1|      {"2.5.4.7", "X520.Locality"},
  302|      1|      {"2.5.4.8", "X520.State"},
  303|      1|      {"2.5.4.9", "X520.StreetAddress"},
  304|      1|      {"2.5.8.1.1", "RSA"}};
  305|      1|}
_ZN5Botan7OID_Map16load_str2oid_mapEv:
  307|      1|std::unordered_map<std::string, OID> OID_Map::load_str2oid_map() {
  308|      1|   return std::unordered_map<std::string, OID>{
  309|       |
  310|      1|      {"AES-128/CBC", OID({2, 16, 840, 1, 101, 3, 4, 1, 2})},
  311|      1|      {"AES-128/CCM", OID({2, 16, 840, 1, 101, 3, 4, 1, 7})},
  312|      1|      {"AES-128/GCM", OID({2, 16, 840, 1, 101, 3, 4, 1, 6})},
  313|      1|      {"AES-128/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 1})},
  314|      1|      {"AES-128/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 1})},
  315|      1|      {"AES-192/CBC", OID({2, 16, 840, 1, 101, 3, 4, 1, 22})},
  316|      1|      {"AES-192/CCM", OID({2, 16, 840, 1, 101, 3, 4, 1, 27})},
  317|      1|      {"AES-192/GCM", OID({2, 16, 840, 1, 101, 3, 4, 1, 26})},
  318|      1|      {"AES-192/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 2})},
  319|      1|      {"AES-192/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 2})},
  320|      1|      {"AES-256/CBC", OID({2, 16, 840, 1, 101, 3, 4, 1, 42})},
  321|      1|      {"AES-256/CCM", OID({2, 16, 840, 1, 101, 3, 4, 1, 47})},
  322|      1|      {"AES-256/GCM", OID({2, 16, 840, 1, 101, 3, 4, 1, 46})},
  323|      1|      {"AES-256/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 3})},
  324|      1|      {"AES-256/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 3})},
  325|      1|      {"CAST-128/CBC", OID({1, 2, 840, 113533, 7, 66, 10})},
  326|      1|      {"Camellia-128/CBC", OID({1, 2, 392, 200011, 61, 1, 1, 1, 2})},
  327|      1|      {"Camellia-128/GCM", OID({0, 3, 4401, 5, 3, 1, 9, 6})},
  328|      1|      {"Camellia-128/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 6})},
  329|      1|      {"Camellia-128/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 6})},
  330|      1|      {"Camellia-192/CBC", OID({1, 2, 392, 200011, 61, 1, 1, 1, 3})},
  331|      1|      {"Camellia-192/GCM", OID({0, 3, 4401, 5, 3, 1, 9, 26})},
  332|      1|      {"Camellia-192/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 7})},
  333|      1|      {"Camellia-192/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 7})},
  334|      1|      {"Camellia-256/CBC", OID({1, 2, 392, 200011, 61, 1, 1, 1, 4})},
  335|      1|      {"Camellia-256/GCM", OID({0, 3, 4401, 5, 3, 1, 9, 46})},
  336|      1|      {"Camellia-256/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 8})},
  337|      1|      {"Camellia-256/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 8})},
  338|      1|      {"Certificate Comment", OID({2, 16, 840, 1, 113730, 1, 13})},
  339|      1|      {"ChaCha20Poly1305", OID({1, 2, 840, 113549, 1, 9, 16, 3, 18})},
  340|      1|      {"Compression.Zlib", OID({1, 2, 840, 113549, 1, 9, 16, 3, 8})},
  341|      1|      {"Curve25519", OID({1, 3, 101, 110})},
  342|      1|      {"X448", OID({1, 3, 101, 111})},
  343|      1|      {"DES/CBC", OID({1, 3, 14, 3, 2, 7})},
  344|      1|      {"DH", OID({1, 2, 840, 10046, 2, 1})},
  345|      1|      {"DSA", OID({1, 2, 840, 10040, 4, 1})},
  346|      1|      {"DSA/SHA-1", OID({1, 2, 840, 10040, 4, 3})},
  347|      1|      {"DSA/SHA-224", OID({2, 16, 840, 1, 101, 3, 4, 3, 1})},
  348|      1|      {"DSA/SHA-256", OID({2, 16, 840, 1, 101, 3, 4, 3, 2})},
  349|      1|      {"DSA/SHA-3(224)", OID({2, 16, 840, 1, 101, 3, 4, 3, 5})},
  350|      1|      {"DSA/SHA-3(256)", OID({2, 16, 840, 1, 101, 3, 4, 3, 6})},
  351|      1|      {"DSA/SHA-3(384)", OID({2, 16, 840, 1, 101, 3, 4, 3, 7})},
  352|      1|      {"DSA/SHA-3(512)", OID({2, 16, 840, 1, 101, 3, 4, 3, 8})},
  353|      1|      {"DSA/SHA-384", OID({2, 16, 840, 1, 101, 3, 4, 3, 3})},
  354|      1|      {"DSA/SHA-512", OID({2, 16, 840, 1, 101, 3, 4, 3, 4})},
  355|      1|      {"Dilithium-4x4-AES-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 10, 1})},
  356|      1|      {"Dilithium-4x4-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 9, 1})},
  357|      1|      {"Dilithium-6x5-AES-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 10, 2})},
  358|      1|      {"Dilithium-6x5-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 9, 2})},
  359|      1|      {"Dilithium-8x7-AES-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 10, 3})},
  360|      1|      {"Dilithium-8x7-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 9, 3})},
  361|      1|      {"ECDH", OID({1, 3, 132, 1, 12})},
  362|      1|      {"ECDSA", OID({1, 2, 840, 10045, 2, 1})},
  363|      1|      {"ECDSA/SHA-1", OID({1, 2, 840, 10045, 4, 1})},
  364|      1|      {"ECDSA/SHA-224", OID({1, 2, 840, 10045, 4, 3, 1})},
  365|      1|      {"ECDSA/SHA-256", OID({1, 2, 840, 10045, 4, 3, 2})},
  366|      1|      {"ECDSA/SHA-3(224)", OID({2, 16, 840, 1, 101, 3, 4, 3, 9})},
  367|      1|      {"ECDSA/SHA-3(256)", OID({2, 16, 840, 1, 101, 3, 4, 3, 10})},
  368|      1|      {"ECDSA/SHA-3(384)", OID({2, 16, 840, 1, 101, 3, 4, 3, 11})},
  369|      1|      {"ECDSA/SHA-3(512)", OID({2, 16, 840, 1, 101, 3, 4, 3, 12})},
  370|      1|      {"ECDSA/SHA-384", OID({1, 2, 840, 10045, 4, 3, 3})},
  371|      1|      {"ECDSA/SHA-512", OID({1, 2, 840, 10045, 4, 3, 4})},
  372|      1|      {"ECGDSA", OID({1, 3, 36, 3, 3, 2, 5, 2, 1})},
  373|      1|      {"ECGDSA/RIPEMD-160", OID({1, 3, 36, 3, 3, 2, 5, 4, 1})},
  374|      1|      {"ECGDSA/SHA-1", OID({1, 3, 36, 3, 3, 2, 5, 4, 2})},
  375|      1|      {"ECGDSA/SHA-224", OID({1, 3, 36, 3, 3, 2, 5, 4, 3})},
  376|      1|      {"ECGDSA/SHA-256", OID({1, 3, 36, 3, 3, 2, 5, 4, 4})},
  377|      1|      {"ECGDSA/SHA-384", OID({1, 3, 36, 3, 3, 2, 5, 4, 5})},
  378|      1|      {"ECGDSA/SHA-512", OID({1, 3, 36, 3, 3, 2, 5, 4, 6})},
  379|      1|      {"ECKCDSA", OID({1, 0, 14888, 3, 0, 5})},
  380|      1|      {"ECKCDSA/SHA-1", OID({1, 2, 410, 200004, 1, 100, 4, 3})},
  381|      1|      {"ECKCDSA/SHA-224", OID({1, 2, 410, 200004, 1, 100, 4, 4})},
  382|      1|      {"ECKCDSA/SHA-256", OID({1, 2, 410, 200004, 1, 100, 4, 5})},
  383|      1|      {"Ed25519", OID({1, 3, 101, 112})},
  384|      1|      {"Ed448", OID({1, 3, 101, 113})},
  385|      1|      {"ElGamal", OID({1, 3, 6, 1, 4, 1, 3029, 1, 2, 1})},
  386|      1|      {"FrodoKEM-1344-AES", OID({1, 3, 6, 1, 4, 1, 25258, 1, 15, 3})},
  387|      1|      {"FrodoKEM-1344-SHAKE", OID({1, 3, 6, 1, 4, 1, 25258, 1, 14, 3})},
  388|      1|      {"FrodoKEM-640-AES", OID({1, 3, 6, 1, 4, 1, 25258, 1, 15, 1})},
  389|      1|      {"FrodoKEM-640-SHAKE", OID({1, 3, 6, 1, 4, 1, 25258, 1, 14, 1})},
  390|      1|      {"FrodoKEM-976-AES", OID({1, 3, 6, 1, 4, 1, 25258, 1, 15, 2})},
  391|      1|      {"FrodoKEM-976-SHAKE", OID({1, 3, 6, 1, 4, 1, 25258, 1, 14, 2})},
  392|      1|      {"GOST-34.10", OID({1, 2, 643, 2, 2, 19})},
  393|      1|      {"GOST-34.10-2012-256", OID({1, 2, 643, 7, 1, 1, 1, 1})},
  394|      1|      {"GOST-34.10-2012-256/SHA-256", OID({1, 3, 6, 1, 4, 1, 25258, 1, 6, 1})},
  395|      1|      {"GOST-34.10-2012-256/Streebog-256", OID({1, 2, 643, 7, 1, 1, 3, 2})},
  396|      1|      {"GOST-34.10-2012-512", OID({1, 2, 643, 7, 1, 1, 1, 2})},
  397|      1|      {"GOST-34.10-2012-512/Streebog-512", OID({1, 2, 643, 7, 1, 1, 3, 3})},
  398|      1|      {"GOST-34.10/GOST-R-34.11-94", OID({1, 2, 643, 2, 2, 3})},
  399|      1|      {"GOST.INN", OID({1, 2, 643, 3, 131, 1, 1})},
  400|      1|      {"GOST.IssuerSigningTool", OID({1, 2, 643, 100, 112})},
  401|      1|      {"GOST.OGRN", OID({1, 2, 643, 100, 1})},
  402|      1|      {"GOST.SubjectSigningTool", OID({1, 2, 643, 100, 111})},
  403|      1|      {"HMAC(SHA-1)", OID({1, 2, 840, 113549, 2, 7})},
  404|      1|      {"HMAC(SHA-224)", OID({1, 2, 840, 113549, 2, 8})},
  405|      1|      {"HMAC(SHA-256)", OID({1, 2, 840, 113549, 2, 9})},
  406|      1|      {"HMAC(SHA-384)", OID({1, 2, 840, 113549, 2, 10})},
  407|      1|      {"HMAC(SHA-512)", OID({1, 2, 840, 113549, 2, 11})},
  408|      1|      {"HMAC(SHA-512-256)", OID({1, 2, 840, 113549, 2, 13})},
  409|      1|      {"KeyWrap.AES-128", OID({2, 16, 840, 1, 101, 3, 4, 1, 5})},
  410|      1|      {"KeyWrap.AES-192", OID({2, 16, 840, 1, 101, 3, 4, 1, 25})},
  411|      1|      {"KeyWrap.AES-256", OID({2, 16, 840, 1, 101, 3, 4, 1, 45})},
  412|      1|      {"KeyWrap.CAST-128", OID({1, 2, 840, 113533, 7, 66, 15})},
  413|      1|      {"KeyWrap.TripleDES", OID({1, 2, 840, 113549, 1, 9, 16, 3, 6})},
  414|      1|      {"Kyber-1024-90s-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 11, 3})},
  415|      1|      {"Kyber-1024-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 7, 3})},
  416|      1|      {"Kyber-512-90s-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 11, 1})},
  417|      1|      {"Kyber-512-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 7, 1})},
  418|      1|      {"Kyber-768-90s-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 11, 2})},
  419|      1|      {"Kyber-768-r3", OID({1, 3, 6, 1, 4, 1, 25258, 1, 7, 2})},
  420|      1|      {"MD5", OID({1, 2, 840, 113549, 2, 5})},
  421|      1|      {"MGF1", OID({1, 2, 840, 113549, 1, 1, 8})},
  422|      1|      {"McEliece", OID({1, 3, 6, 1, 4, 1, 25258, 1, 3})},
  423|      1|      {"Microsoft SmartcardLogon", OID({1, 3, 6, 1, 4, 1, 311, 20, 2, 2})},
  424|      1|      {"Microsoft UPN", OID({1, 3, 6, 1, 4, 1, 311, 20, 2, 3})},
  425|      1|      {"OpenPGP.Curve25519", OID({1, 3, 6, 1, 4, 1, 3029, 1, 5, 1})},
  426|      1|      {"OpenPGP.Ed25519", OID({1, 3, 6, 1, 4, 1, 11591, 15, 1})},
  427|      1|      {"PBE-PKCS5v20", OID({1, 2, 840, 113549, 1, 5, 13})},
  428|      1|      {"PBES2", OID({1, 2, 840, 113549, 1, 5, 13})},
  429|      1|      {"PKCS5.PBKDF2", OID({1, 2, 840, 113549, 1, 5, 12})},
  430|      1|      {"PKCS9.ChallengePassword", OID({1, 2, 840, 113549, 1, 9, 7})},
  431|      1|      {"PKCS9.ContentType", OID({1, 2, 840, 113549, 1, 9, 3})},
  432|      1|      {"PKCS9.EmailAddress", OID({1, 2, 840, 113549, 1, 9, 1})},
  433|      1|      {"PKCS9.ExtensionRequest", OID({1, 2, 840, 113549, 1, 9, 14})},
  434|      1|      {"PKCS9.MessageDigest", OID({1, 2, 840, 113549, 1, 9, 4})},
  435|      1|      {"PKCS9.UnstructuredName", OID({1, 2, 840, 113549, 1, 9, 2})},
  436|      1|      {"PKIX.AuthorityInformationAccess", OID({1, 3, 6, 1, 5, 5, 7, 1, 1})},
  437|      1|      {"PKIX.CertificateAuthorityIssuers", OID({1, 3, 6, 1, 5, 5, 7, 48, 2})},
  438|      1|      {"PKIX.ClientAuth", OID({1, 3, 6, 1, 5, 5, 7, 3, 2})},
  439|      1|      {"PKIX.CodeSigning", OID({1, 3, 6, 1, 5, 5, 7, 3, 3})},
  440|      1|      {"PKIX.EmailProtection", OID({1, 3, 6, 1, 5, 5, 7, 3, 4})},
  441|      1|      {"PKIX.IPsecEndSystem", OID({1, 3, 6, 1, 5, 5, 7, 3, 5})},
  442|      1|      {"PKIX.IPsecTunnel", OID({1, 3, 6, 1, 5, 5, 7, 3, 6})},
  443|      1|      {"PKIX.IPsecUser", OID({1, 3, 6, 1, 5, 5, 7, 3, 7})},
  444|      1|      {"PKIX.OCSP", OID({1, 3, 6, 1, 5, 5, 7, 48, 1})},
  445|      1|      {"PKIX.OCSP.BasicResponse", OID({1, 3, 6, 1, 5, 5, 7, 48, 1, 1})},
  446|      1|      {"PKIX.OCSP.NoCheck", OID({1, 3, 6, 1, 5, 5, 7, 48, 1, 5})},
  447|      1|      {"PKIX.OCSPSigning", OID({1, 3, 6, 1, 5, 5, 7, 3, 9})},
  448|      1|      {"PKIX.ServerAuth", OID({1, 3, 6, 1, 5, 5, 7, 3, 1})},
  449|      1|      {"PKIX.TimeStamping", OID({1, 3, 6, 1, 5, 5, 7, 3, 8})},
  450|      1|      {"PKIX.XMPPAddr", OID({1, 3, 6, 1, 5, 5, 7, 8, 5})},
  451|      1|      {"RIPEMD-160", OID({1, 3, 36, 3, 2, 1})},
  452|      1|      {"RSA", OID({1, 2, 840, 113549, 1, 1, 1})},
  453|      1|      {"RSA/EMSA3(MD5)", OID({1, 2, 840, 113549, 1, 1, 4})},
  454|      1|      {"RSA/EMSA3(RIPEMD-160)", OID({1, 3, 36, 3, 3, 1, 2})},
  455|      1|      {"RSA/EMSA3(SHA-1)", OID({1, 2, 840, 113549, 1, 1, 5})},
  456|      1|      {"RSA/EMSA3(SHA-224)", OID({1, 2, 840, 113549, 1, 1, 14})},
  457|      1|      {"RSA/EMSA3(SHA-256)", OID({1, 2, 840, 113549, 1, 1, 11})},
  458|      1|      {"RSA/EMSA3(SHA-3(224))", OID({2, 16, 840, 1, 101, 3, 4, 3, 13})},
  459|      1|      {"RSA/EMSA3(SHA-3(256))", OID({2, 16, 840, 1, 101, 3, 4, 3, 14})},
  460|      1|      {"RSA/EMSA3(SHA-3(384))", OID({2, 16, 840, 1, 101, 3, 4, 3, 15})},
  461|      1|      {"RSA/EMSA3(SHA-3(512))", OID({2, 16, 840, 1, 101, 3, 4, 3, 16})},
  462|      1|      {"RSA/EMSA3(SHA-384)", OID({1, 2, 840, 113549, 1, 1, 12})},
  463|      1|      {"RSA/EMSA3(SHA-512)", OID({1, 2, 840, 113549, 1, 1, 13})},
  464|      1|      {"RSA/EMSA3(SHA-512-256)", OID({1, 2, 840, 113549, 1, 1, 16})},
  465|      1|      {"RSA/EMSA3(SM3)", OID({1, 2, 156, 10197, 1, 504})},
  466|      1|      {"RSA/EMSA4", OID({1, 2, 840, 113549, 1, 1, 10})},
  467|      1|      {"RSA/OAEP", OID({1, 2, 840, 113549, 1, 1, 7})},
  468|      1|      {"SEED/CBC", OID({1, 2, 410, 200004, 1, 4})},
  469|      1|      {"SHA-1", OID({1, 3, 14, 3, 2, 26})},
  470|      1|      {"SHA-224", OID({2, 16, 840, 1, 101, 3, 4, 2, 4})},
  471|      1|      {"SHA-256", OID({2, 16, 840, 1, 101, 3, 4, 2, 1})},
  472|      1|      {"SHA-3(224)", OID({2, 16, 840, 1, 101, 3, 4, 2, 7})},
  473|      1|      {"SHA-3(256)", OID({2, 16, 840, 1, 101, 3, 4, 2, 8})},
  474|      1|      {"SHA-3(384)", OID({2, 16, 840, 1, 101, 3, 4, 2, 9})},
  475|      1|      {"SHA-3(512)", OID({2, 16, 840, 1, 101, 3, 4, 2, 10})},
  476|      1|      {"SHA-384", OID({2, 16, 840, 1, 101, 3, 4, 2, 2})},
  477|      1|      {"SHA-512", OID({2, 16, 840, 1, 101, 3, 4, 2, 3})},
  478|      1|      {"SHA-512-256", OID({2, 16, 840, 1, 101, 3, 4, 2, 6})},
  479|      1|      {"SHAKE-128", OID({2, 16, 840, 1, 101, 3, 4, 2, 11})},
  480|      1|      {"SHAKE-256", OID({2, 16, 840, 1, 101, 3, 4, 2, 12})},
  481|      1|      {"SM2", OID({1, 2, 156, 10197, 1, 301, 1})},
  482|      1|      {"SM2_Enc", OID({1, 2, 156, 10197, 1, 301, 3})},
  483|      1|      {"SM2_Kex", OID({1, 2, 156, 10197, 1, 301, 2})},
  484|      1|      {"SM2_Sig", OID({1, 2, 156, 10197, 1, 301, 1})},
  485|      1|      {"SM2_Sig/SM3", OID({1, 2, 156, 10197, 1, 501})},
  486|      1|      {"SM3", OID({1, 2, 156, 10197, 1, 401})},
  487|      1|      {"SM4/CBC", OID({1, 2, 156, 10197, 1, 104, 2})},
  488|      1|      {"SM4/GCM", OID({1, 2, 156, 10197, 1, 104, 8})},
  489|      1|      {"SM4/OCB", OID({1, 2, 156, 10197, 1, 104, 100})},
  490|      1|      {"SM4/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 9})},
  491|      1|      {"Scrypt", OID({1, 3, 6, 1, 4, 1, 11591, 4, 11})},
  492|      1|      {"Serpent/CBC", OID({1, 3, 6, 1, 4, 1, 25258, 3, 1})},
  493|      1|      {"Serpent/GCM", OID({1, 3, 6, 1, 4, 1, 25258, 3, 101})},
  494|      1|      {"Serpent/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 4})},
  495|      1|      {"Serpent/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 4})},
  496|      1|      {"SphincsPlus-haraka-128f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 3, 2})},
  497|      1|      {"SphincsPlus-haraka-128s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 3, 1})},
  498|      1|      {"SphincsPlus-haraka-192f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 3, 4})},
  499|      1|      {"SphincsPlus-haraka-192s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 3, 3})},
  500|      1|      {"SphincsPlus-haraka-256f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 3, 6})},
  501|      1|      {"SphincsPlus-haraka-256s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 3, 5})},
  502|      1|      {"SphincsPlus-sha2-128f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 2, 2})},
  503|      1|      {"SphincsPlus-sha2-128s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 2, 1})},
  504|      1|      {"SphincsPlus-sha2-192f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 2, 4})},
  505|      1|      {"SphincsPlus-sha2-192s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 2, 3})},
  506|      1|      {"SphincsPlus-sha2-256f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 2, 6})},
  507|      1|      {"SphincsPlus-sha2-256s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 2, 5})},
  508|      1|      {"SphincsPlus-shake-128f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 1, 2})},
  509|      1|      {"SphincsPlus-shake-128s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 1, 1})},
  510|      1|      {"SphincsPlus-shake-192f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 1, 4})},
  511|      1|      {"SphincsPlus-shake-192s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 1, 3})},
  512|      1|      {"SphincsPlus-shake-256f-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 1, 6})},
  513|      1|      {"SphincsPlus-shake-256s-r3.1", OID({1, 3, 6, 1, 4, 1, 25258, 1, 12, 1, 5})},
  514|      1|      {"Streebog-256", OID({1, 2, 643, 7, 1, 1, 2, 2})},
  515|      1|      {"Streebog-512", OID({1, 2, 643, 7, 1, 1, 2, 3})},
  516|      1|      {"Threefish-512/CBC", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2})},
  517|      1|      {"TripleDES/CBC", OID({1, 2, 840, 113549, 3, 7})},
  518|      1|      {"Twofish/CBC", OID({1, 3, 6, 1, 4, 1, 25258, 3, 3})},
  519|      1|      {"Twofish/GCM", OID({1, 3, 6, 1, 4, 1, 25258, 3, 102})},
  520|      1|      {"Twofish/OCB", OID({1, 3, 6, 1, 4, 1, 25258, 3, 2, 5})},
  521|      1|      {"Twofish/SIV", OID({1, 3, 6, 1, 4, 1, 25258, 3, 4, 5})},
  522|      1|      {"X509v3.AnyPolicy", OID({2, 5, 29, 32, 0})},
  523|      1|      {"X509v3.AuthorityKeyIdentifier", OID({2, 5, 29, 35})},
  524|      1|      {"X509v3.BasicConstraints", OID({2, 5, 29, 19})},
  525|      1|      {"X509v3.CRLDistributionPoints", OID({2, 5, 29, 31})},
  526|      1|      {"X509v3.CRLIssuingDistributionPoint", OID({2, 5, 29, 28})},
  527|      1|      {"X509v3.CRLNumber", OID({2, 5, 29, 20})},
  528|      1|      {"X509v3.CertificatePolicies", OID({2, 5, 29, 32})},
  529|      1|      {"X509v3.ExtendedKeyUsage", OID({2, 5, 29, 37})},
  530|      1|      {"X509v3.HoldInstructionCode", OID({2, 5, 29, 23})},
  531|      1|      {"X509v3.InvalidityDate", OID({2, 5, 29, 24})},
  532|      1|      {"X509v3.IssuerAlternativeName", OID({2, 5, 29, 18})},
  533|      1|      {"X509v3.KeyUsage", OID({2, 5, 29, 15})},
  534|      1|      {"X509v3.NameConstraints", OID({2, 5, 29, 30})},
  535|      1|      {"X509v3.PolicyConstraints", OID({2, 5, 29, 36})},
  536|      1|      {"X509v3.PrivateKeyUsagePeriod", OID({2, 5, 29, 16})},
  537|      1|      {"X509v3.ReasonCode", OID({2, 5, 29, 21})},
  538|      1|      {"X509v3.SubjectAlternativeName", OID({2, 5, 29, 17})},
  539|      1|      {"X509v3.SubjectKeyIdentifier", OID({2, 5, 29, 14})},
  540|      1|      {"X520.CommonName", OID({2, 5, 4, 3})},
  541|      1|      {"X520.Country", OID({2, 5, 4, 6})},
  542|      1|      {"X520.DNQualifier", OID({2, 5, 4, 46})},
  543|      1|      {"X520.GenerationalQualifier", OID({2, 5, 4, 44})},
  544|      1|      {"X520.GivenName", OID({2, 5, 4, 42})},
  545|      1|      {"X520.Initials", OID({2, 5, 4, 43})},
  546|      1|      {"X520.Locality", OID({2, 5, 4, 7})},
  547|      1|      {"X520.Organization", OID({2, 5, 4, 10})},
  548|      1|      {"X520.OrganizationalUnit", OID({2, 5, 4, 11})},
  549|      1|      {"X520.Pseudonym", OID({2, 5, 4, 65})},
  550|      1|      {"X520.SerialNumber", OID({2, 5, 4, 5})},
  551|      1|      {"X520.State", OID({2, 5, 4, 8})},
  552|      1|      {"X520.StreetAddress", OID({2, 5, 4, 9})},
  553|      1|      {"X520.Surname", OID({2, 5, 4, 4})},
  554|      1|      {"X520.Title", OID({2, 5, 4, 12})},
  555|      1|      {"XMSS", OID({0, 4, 0, 127, 0, 15, 1, 1, 13, 0})},
  556|      1|      {"XMSS-draft12", OID({1, 3, 6, 1, 4, 1, 25258, 1, 8})},
  557|      1|      {"XMSS-draft6", OID({1, 3, 6, 1, 4, 1, 25258, 1, 5})},
  558|      1|      {"brainpool160r1", OID({1, 3, 36, 3, 3, 2, 8, 1, 1, 1})},
  559|      1|      {"brainpool192r1", OID({1, 3, 36, 3, 3, 2, 8, 1, 1, 3})},
  560|      1|      {"brainpool224r1", OID({1, 3, 36, 3, 3, 2, 8, 1, 1, 5})},
  561|      1|      {"brainpool256r1", OID({1, 3, 36, 3, 3, 2, 8, 1, 1, 7})},
  562|      1|      {"brainpool320r1", OID({1, 3, 36, 3, 3, 2, 8, 1, 1, 9})},
  563|      1|      {"brainpool384r1", OID({1, 3, 36, 3, 3, 2, 8, 1, 1, 11})},
  564|      1|      {"brainpool512r1", OID({1, 3, 36, 3, 3, 2, 8, 1, 1, 13})},
  565|      1|      {"eFrodoKEM-1344-AES", OID({1, 3, 6, 1, 4, 1, 25258, 1, 17, 3})},
  566|      1|      {"eFrodoKEM-1344-SHAKE", OID({1, 3, 6, 1, 4, 1, 25258, 1, 16, 3})},
  567|      1|      {"eFrodoKEM-640-AES", OID({1, 3, 6, 1, 4, 1, 25258, 1, 17, 1})},
  568|      1|      {"eFrodoKEM-640-SHAKE", OID({1, 3, 6, 1, 4, 1, 25258, 1, 16, 1})},
  569|      1|      {"eFrodoKEM-976-AES", OID({1, 3, 6, 1, 4, 1, 25258, 1, 17, 2})},
  570|      1|      {"eFrodoKEM-976-SHAKE", OID({1, 3, 6, 1, 4, 1, 25258, 1, 16, 2})},
  571|      1|      {"frp256v1", OID({1, 2, 250, 1, 223, 101, 256, 1})},
  572|      1|      {"gost_256A", OID({1, 2, 643, 7, 1, 2, 1, 1, 1})},
  573|      1|      {"gost_256B", OID({1, 2, 643, 7, 1, 2, 1, 1, 2})},
  574|      1|      {"gost_512A", OID({1, 2, 643, 7, 1, 2, 1, 2, 1})},
  575|      1|      {"gost_512B", OID({1, 2, 643, 7, 1, 2, 1, 2, 2})},
  576|      1|      {"secp160k1", OID({1, 3, 132, 0, 9})},
  577|      1|      {"secp160r1", OID({1, 3, 132, 0, 8})},
  578|      1|      {"secp160r2", OID({1, 3, 132, 0, 30})},
  579|      1|      {"secp192k1", OID({1, 3, 132, 0, 31})},
  580|      1|      {"secp192r1", OID({1, 2, 840, 10045, 3, 1, 1})},
  581|      1|      {"secp224k1", OID({1, 3, 132, 0, 32})},
  582|      1|      {"secp224r1", OID({1, 3, 132, 0, 33})},
  583|      1|      {"secp256k1", OID({1, 3, 132, 0, 10})},
  584|      1|      {"secp256r1", OID({1, 2, 840, 10045, 3, 1, 7})},
  585|      1|      {"secp384r1", OID({1, 3, 132, 0, 34})},
  586|      1|      {"secp521r1", OID({1, 3, 132, 0, 35})},
  587|      1|      {"sm2p256v1", OID({1, 2, 156, 10197, 1, 301})},
  588|      1|      {"x962_p192v2", OID({1, 2, 840, 10045, 3, 1, 2})},
  589|      1|      {"x962_p192v3", OID({1, 2, 840, 10045, 3, 1, 3})},
  590|      1|      {"x962_p239v1", OID({1, 2, 840, 10045, 3, 1, 4})},
  591|      1|      {"x962_p239v2", OID({1, 2, 840, 10045, 3, 1, 5})},
  592|      1|      {"x962_p239v3", OID({1, 2, 840, 10045, 3, 1, 6})}};
  593|      1|}

_ZN5Botan18SymmetricAlgorithm7set_keyENSt3__14spanIKhLm18446744073709551615EEE:
   17|   385k|void SymmetricAlgorithm::set_key(std::span<const uint8_t> key) {
   18|   385k|   if(!valid_keylength(key.size())) {
  ------------------
  |  Branch (18:7): [True: 0, False: 385k]
  ------------------
   19|      0|      throw Invalid_Key_Length(name(), key.size());
   20|      0|   }
   21|   385k|   key_schedule(key);
   22|   385k|}

_ZN5Botan10hex_encodeEPcPKhmb:
   33|   164k|void hex_encode(char output[], const uint8_t input[], size_t input_length, bool uppercase) {
   34|  3.13M|   for(size_t i = 0; i != input_length; ++i) {
  ------------------
  |  Branch (34:22): [True: 2.97M, False: 164k]
  ------------------
   35|  2.97M|      const uint8_t n0 = (input[i] >> 4) & 0xF;
   36|  2.97M|      const uint8_t n1 = (input[i]) & 0xF;
   37|       |
   38|  2.97M|      output[2 * i] = hex_encode_nibble(n0, uppercase);
   39|  2.97M|      output[2 * i + 1] = hex_encode_nibble(n1, uppercase);
   40|  2.97M|   }
   41|   164k|}
_ZN5Botan10hex_decodeEPhPKcmRmb:
   81|   424k|size_t hex_decode(uint8_t output[], const char input[], size_t input_length, size_t& input_consumed, bool ignore_ws) {
   82|   424k|   uint8_t* out_ptr = output;
   83|   424k|   bool top_nibble = true;
   84|       |
   85|   424k|   clear_mem(output, input_length / 2);
   86|       |
   87|  29.6M|   for(size_t i = 0; i != input_length; ++i) {
  ------------------
  |  Branch (87:22): [True: 29.2M, False: 424k]
  ------------------
   88|  29.2M|      const uint8_t bin = hex_char_to_bin(input[i]);
   89|       |
   90|  29.2M|      if(bin >= 0x10) {
  ------------------
  |  Branch (90:10): [True: 0, False: 29.2M]
  ------------------
   91|      0|         if(bin == 0x80 && ignore_ws) {
  ------------------
  |  Branch (91:13): [True: 0, False: 0]
  |  Branch (91:28): [True: 0, False: 0]
  ------------------
   92|      0|            continue;
   93|      0|         }
   94|       |
   95|      0|         throw Invalid_Argument(fmt("hex_decode: invalid character '{}'", format_char_for_display(input[i])));
   96|      0|      }
   97|       |
   98|  29.2M|      if(top_nibble) {
  ------------------
  |  Branch (98:10): [True: 14.6M, False: 14.6M]
  ------------------
   99|  14.6M|         *out_ptr |= bin << 4;
  100|  14.6M|      } else {
  101|  14.6M|         *out_ptr |= bin;
  102|  14.6M|      }
  103|       |
  104|  29.2M|      top_nibble = !top_nibble;
  105|  29.2M|      if(top_nibble) {
  ------------------
  |  Branch (105:10): [True: 14.6M, False: 14.6M]
  ------------------
  106|  14.6M|         ++out_ptr;
  107|  14.6M|      }
  108|  29.2M|   }
  109|       |
  110|   424k|   input_consumed = input_length;
  111|   424k|   size_t written = (out_ptr - output);
  112|       |
  113|       |   /*
  114|       |   * We only got half of a uint8_t at the end; zap the half-written
  115|       |   * output and mark it as unread
  116|       |   */
  117|   424k|   if(!top_nibble) {
  ------------------
  |  Branch (117:7): [True: 0, False: 424k]
  ------------------
  118|      0|      *out_ptr = 0;
  119|      0|      input_consumed -= 1;
  120|      0|   }
  121|       |
  122|   424k|   return written;
  123|   424k|}
_ZN5Botan10hex_decodeEPhPKcmb:
  125|   424k|size_t hex_decode(uint8_t output[], const char input[], size_t input_length, bool ignore_ws) {
  126|   424k|   size_t consumed = 0;
  127|   424k|   size_t written = hex_decode(output, input, input_length, consumed, ignore_ws);
  128|       |
  129|   424k|   if(consumed != input_length) {
  ------------------
  |  Branch (129:7): [True: 0, False: 424k]
  ------------------
  130|      0|      throw Invalid_Argument("hex_decode: input did not have full bytes");
  131|      0|   }
  132|       |
  133|   424k|   return written;
  134|   424k|}
_ZN5Botan17hex_decode_lockedEPKcmb:
  144|     57|secure_vector<uint8_t> hex_decode_locked(const char input[], size_t input_length, bool ignore_ws) {
  145|     57|   secure_vector<uint8_t> bin(1 + input_length / 2);
  146|       |
  147|     57|   size_t written = hex_decode(bin.data(), input, input_length, ignore_ws);
  148|       |
  149|     57|   bin.resize(written);
  150|     57|   return bin;
  151|     57|}
_ZN5Botan10hex_decodeEPKcmb:
  157|   424k|std::vector<uint8_t> hex_decode(const char input[], size_t input_length, bool ignore_ws) {
  158|   424k|   std::vector<uint8_t> bin(1 + input_length / 2);
  159|       |
  160|   424k|   size_t written = hex_decode(bin.data(), input, input_length, ignore_ws);
  161|       |
  162|   424k|   bin.resize(written);
  163|   424k|   return bin;
  164|   424k|}
hex.cpp:_ZN5Botan12_GLOBAL__N_117hex_encode_nibbleEhb:
   20|  5.95M|char hex_encode_nibble(uint8_t n, bool uppercase) {
   21|  5.95M|   BOTAN_DEBUG_ASSERT(n <= 15);
  ------------------
  |  |   99|  5.95M|      do {                          \
  |  |  100|  5.95M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 5.95M]
  |  |  ------------------
  ------------------
   22|       |
   23|  5.95M|   const auto in_09 = CT::Mask<uint8_t>::is_lt(n, 10);
   24|       |
   25|  5.95M|   const char c_09 = n + '0';
   26|  5.95M|   const char c_af = n + (uppercase ? 'A' : 'a') - 10;
  ------------------
  |  Branch (26:27): [True: 0, False: 5.95M]
  ------------------
   27|       |
   28|  5.95M|   return in_09.select(c_09, c_af);
   29|  5.95M|}
hex.cpp:_ZN5Botan12_GLOBAL__N_115hex_char_to_binEc:
   55|  29.2M|uint8_t hex_char_to_bin(char input) {
   56|  29.2M|   const uint8_t c = static_cast<uint8_t>(input);
   57|       |
   58|  29.2M|   const auto is_alpha_upper = CT::Mask<uint8_t>::is_within_range(c, uint8_t('A'), uint8_t('F'));
   59|  29.2M|   const auto is_alpha_lower = CT::Mask<uint8_t>::is_within_range(c, uint8_t('a'), uint8_t('f'));
   60|  29.2M|   const auto is_decimal = CT::Mask<uint8_t>::is_within_range(c, uint8_t('0'), uint8_t('9'));
   61|       |
   62|  29.2M|   const auto is_whitespace =
   63|  29.2M|      CT::Mask<uint8_t>::is_any_of(c, {uint8_t(' '), uint8_t('\t'), uint8_t('\n'), uint8_t('\r')});
   64|       |
   65|  29.2M|   const uint8_t c_upper = c - uint8_t('A') + 10;
   66|  29.2M|   const uint8_t c_lower = c - uint8_t('a') + 10;
   67|  29.2M|   const uint8_t c_decim = c - uint8_t('0');
   68|       |
   69|  29.2M|   uint8_t ret = 0xFF;  // default value
   70|       |
   71|  29.2M|   ret = is_alpha_upper.select(c_upper, ret);
   72|  29.2M|   ret = is_alpha_lower.select(c_lower, ret);
   73|  29.2M|   ret = is_decimal.select(c_decim, ret);
   74|  29.2M|   ret = is_whitespace.select(0x80, ret);
   75|       |
   76|  29.2M|   return ret;
   77|  29.2M|}

_ZN9Botan_FFI26ffi_error_exception_thrownEPKcS1_i:
   24|    885|int ffi_error_exception_thrown(const char* func_name, const char* exn, int rc) {
   25|    885|   g_last_exception_what.assign(exn);
   26|       |
   27|    885|   std::string val;
   28|    885|   if(Botan::OS::read_env_variable(val, "BOTAN_FFI_PRINT_EXCEPTIONS") == true && !val.empty()) {
  ------------------
  |  Branch (28:7): [True: 0, False: 885]
  |  Branch (28:82): [True: 0, False: 0]
  ------------------
   29|       |      static_cast<void>(std::fprintf(stderr, "in %s exception '%s' returning %d\n", func_name, exn, rc));
   30|      0|   }
   31|    885|   return rc;
   32|    885|}
_ZN9Botan_FFI15ffi_guard_thunkEPKcRKNSt3__18functionIFivEEE:
  116|  1.71M|int ffi_guard_thunk(const char* func_name, const std::function<int()>& thunk) {
  117|  1.71M|   g_last_exception_what.clear();
  118|       |
  119|  1.71M|   try {
  120|  1.71M|      return thunk();
  121|  1.71M|   } catch(std::bad_alloc&) {
  122|      0|      return ffi_error_exception_thrown(func_name, "bad_alloc", BOTAN_FFI_ERROR_OUT_OF_MEMORY);
  123|      0|   } catch(Botan_FFI::FFI_Error& e) {
  124|      0|      return ffi_error_exception_thrown(func_name, e.what(), e.error_code());
  125|    885|   } catch(Botan::Exception& e) {
  126|    885|      return ffi_error_exception_thrown(func_name, e.what(), ffi_map_error_type(e.error_type()));
  127|    885|   } catch(std::exception& e) {
  128|      0|      return ffi_error_exception_thrown(func_name, e.what());
  129|      0|   } catch(...) {
  130|      0|      return ffi_error_exception_thrown(func_name, "unknown exception");
  131|      0|   }
  132|       |
  133|      0|   return BOTAN_FFI_ERROR_UNKNOWN_ERROR;
  134|  1.71M|}
botan_ffi_supports_api:
  223|  4.66k|int botan_ffi_supports_api(uint32_t api_version) {
  224|       |   // This is the API introduced in 3.4
  225|  4.66k|   if(api_version == 20240408) {
  ------------------
  |  Branch (225:7): [True: 0, False: 4.66k]
  ------------------
  226|      0|      return BOTAN_FFI_SUCCESS;
  227|      0|   }
  228|       |
  229|       |   // This is the API introduced in 3.2
  230|  4.66k|   if(api_version == 20231009) {
  ------------------
  |  Branch (230:7): [True: 0, False: 4.66k]
  ------------------
  231|      0|      return BOTAN_FFI_SUCCESS;
  232|      0|   }
  233|       |
  234|       |   // This is the API introduced in 3.1
  235|  4.66k|   if(api_version == 20230711) {
  ------------------
  |  Branch (235:7): [True: 0, False: 4.66k]
  ------------------
  236|      0|      return BOTAN_FFI_SUCCESS;
  237|      0|   }
  238|       |
  239|       |   // This is the API introduced in 3.0
  240|  4.66k|   if(api_version == 20230403) {
  ------------------
  |  Branch (240:7): [True: 0, False: 4.66k]
  ------------------
  241|      0|      return BOTAN_FFI_SUCCESS;
  242|      0|   }
  243|       |
  244|       |   // This is the API introduced in 2.18
  245|  4.66k|   if(api_version == 20210220) {
  ------------------
  |  Branch (245:7): [True: 0, False: 4.66k]
  ------------------
  246|      0|      return BOTAN_FFI_SUCCESS;
  247|      0|   }
  248|       |
  249|       |   // This is the API introduced in 2.13
  250|  4.66k|   if(api_version == 20191214) {
  ------------------
  |  Branch (250:7): [True: 0, False: 4.66k]
  ------------------
  251|      0|      return BOTAN_FFI_SUCCESS;
  252|      0|   }
  253|       |
  254|       |   // This is the API introduced in 2.8
  255|  4.66k|   if(api_version == 20180713) {
  ------------------
  |  Branch (255:7): [True: 4.66k, False: 0]
  ------------------
  256|  4.66k|      return BOTAN_FFI_SUCCESS;
  257|  4.66k|   }
  258|       |
  259|       |   // This is the API introduced in 2.3
  260|      0|   if(api_version == 20170815) {
  ------------------
  |  Branch (260:7): [True: 0, False: 0]
  ------------------
  261|      0|      return BOTAN_FFI_SUCCESS;
  262|      0|   }
  263|       |
  264|       |   // This is the API introduced in 2.1
  265|      0|   if(api_version == 20170327) {
  ------------------
  |  Branch (265:7): [True: 0, False: 0]
  ------------------
  266|      0|      return BOTAN_FFI_SUCCESS;
  267|      0|   }
  268|       |
  269|       |   // This is the API introduced in 2.0
  270|      0|   if(api_version == 20150515) {
  ------------------
  |  Branch (270:7): [True: 0, False: 0]
  ------------------
  271|      0|      return BOTAN_FFI_SUCCESS;
  272|      0|   }
  273|       |
  274|       |   // Something else:
  275|      0|   return -1;
  276|      0|}
botan_scrub_mem:
  308|  9.18M|int botan_scrub_mem(void* mem, size_t bytes) {
  309|  9.18M|   Botan::secure_scrub_memory(mem, bytes);
  310|  9.18M|   return BOTAN_FFI_SUCCESS;
  311|  9.18M|}
botan_hex_encode:
  313|   164k|int botan_hex_encode(const uint8_t* in, size_t len, char* out, uint32_t flags) {
  314|   164k|   return ffi_guard_thunk(__func__, [=]() -> int {
  315|   164k|      const bool uppercase = (flags & BOTAN_FFI_HEX_LOWER_CASE) == 0;
  316|   164k|      Botan::hex_encode(out, in, len, uppercase);
  317|   164k|      return BOTAN_FFI_SUCCESS;
  318|   164k|   });
  319|   164k|}
botan_hex_decode:
  321|   424k|int botan_hex_decode(const char* hex_str, size_t in_len, uint8_t* out, size_t* out_len) {
  322|   424k|   return ffi_guard_thunk(__func__, [=]() -> int {
  323|   424k|      const std::vector<uint8_t> bin = Botan::hex_decode(hex_str, in_len);
  324|   424k|      return Botan_FFI::write_vec_output(out, out_len, bin);
  325|   424k|   });
  326|   424k|}
ffi.cpp:_ZN9Botan_FFI12_GLOBAL__N_118ffi_map_error_typeEN5Botan9ErrorTypeE:
   61|    885|int ffi_map_error_type(Botan::ErrorType err) {
   62|    885|   switch(err) {
  ------------------
  |  Branch (62:11): [True: 885, False: 0]
  ------------------
   63|      0|      case Botan::ErrorType::Unknown:
  ------------------
  |  Branch (63:7): [True: 0, False: 885]
  ------------------
   64|      0|         return BOTAN_FFI_ERROR_UNKNOWN_ERROR;
   65|       |
   66|      0|      case Botan::ErrorType::SystemError:
  ------------------
  |  Branch (66:7): [True: 0, False: 885]
  ------------------
   67|      0|      case Botan::ErrorType::IoError:
  ------------------
  |  Branch (67:7): [True: 0, False: 885]
  ------------------
   68|      0|      case Botan::ErrorType::Pkcs11Error:
  ------------------
  |  Branch (68:7): [True: 0, False: 885]
  ------------------
   69|      0|      case Botan::ErrorType::CommonCryptoError:
  ------------------
  |  Branch (69:7): [True: 0, False: 885]
  ------------------
   70|      0|      case Botan::ErrorType::TPMError:
  ------------------
  |  Branch (70:7): [True: 0, False: 885]
  ------------------
   71|      0|      case Botan::ErrorType::ZlibError:
  ------------------
  |  Branch (71:7): [True: 0, False: 885]
  ------------------
   72|      0|      case Botan::ErrorType::Bzip2Error:
  ------------------
  |  Branch (72:7): [True: 0, False: 885]
  ------------------
   73|      0|      case Botan::ErrorType::LzmaError:
  ------------------
  |  Branch (73:7): [True: 0, False: 885]
  ------------------
   74|      0|      case Botan::ErrorType::DatabaseError:
  ------------------
  |  Branch (74:7): [True: 0, False: 885]
  ------------------
   75|      0|         return BOTAN_FFI_ERROR_SYSTEM_ERROR;
   76|       |
   77|      0|      case Botan::ErrorType::NotImplemented:
  ------------------
  |  Branch (77:7): [True: 0, False: 885]
  ------------------
   78|      0|         return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
   79|      0|      case Botan::ErrorType::OutOfMemory:
  ------------------
  |  Branch (79:7): [True: 0, False: 885]
  ------------------
   80|      0|         return BOTAN_FFI_ERROR_OUT_OF_MEMORY;
   81|      0|      case Botan::ErrorType::InternalError:
  ------------------
  |  Branch (81:7): [True: 0, False: 885]
  ------------------
   82|      0|         return BOTAN_FFI_ERROR_INTERNAL_ERROR;
   83|      0|      case Botan::ErrorType::InvalidObjectState:
  ------------------
  |  Branch (83:7): [True: 0, False: 885]
  ------------------
   84|      0|         return BOTAN_FFI_ERROR_INVALID_OBJECT_STATE;
   85|      0|      case Botan::ErrorType::KeyNotSet:
  ------------------
  |  Branch (85:7): [True: 0, False: 885]
  ------------------
   86|      0|         return BOTAN_FFI_ERROR_KEY_NOT_SET;
   87|    102|      case Botan::ErrorType::InvalidArgument:
  ------------------
  |  Branch (87:7): [True: 102, False: 783]
  ------------------
   88|    102|      case Botan::ErrorType::InvalidNonceLength:
  ------------------
  |  Branch (88:7): [True: 0, False: 885]
  ------------------
   89|    102|         return BOTAN_FFI_ERROR_BAD_PARAMETER;
   90|       |
   91|      0|      case Botan::ErrorType::EncodingFailure:
  ------------------
  |  Branch (91:7): [True: 0, False: 885]
  ------------------
   92|    783|      case Botan::ErrorType::DecodingFailure:
  ------------------
  |  Branch (92:7): [True: 783, False: 102]
  ------------------
   93|    783|         return BOTAN_FFI_ERROR_INVALID_INPUT;
   94|       |
   95|      0|      case Botan::ErrorType::InvalidTag:
  ------------------
  |  Branch (95:7): [True: 0, False: 885]
  ------------------
   96|      0|         return BOTAN_FFI_ERROR_BAD_MAC;
   97|       |
   98|      0|      case Botan::ErrorType::InvalidKeyLength:
  ------------------
  |  Branch (98:7): [True: 0, False: 885]
  ------------------
   99|      0|         return BOTAN_FFI_ERROR_INVALID_KEY_LENGTH;
  100|      0|      case Botan::ErrorType::LookupError:
  ------------------
  |  Branch (100:7): [True: 0, False: 885]
  ------------------
  101|      0|         return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
  102|       |
  103|      0|      case Botan::ErrorType::HttpError:
  ------------------
  |  Branch (103:7): [True: 0, False: 885]
  ------------------
  104|      0|         return BOTAN_FFI_ERROR_HTTP_ERROR;
  105|      0|      case Botan::ErrorType::TLSError:
  ------------------
  |  Branch (105:7): [True: 0, False: 885]
  ------------------
  106|      0|         return BOTAN_FFI_ERROR_TLS_ERROR;
  107|      0|      case Botan::ErrorType::RoughtimeError:
  ------------------
  |  Branch (107:7): [True: 0, False: 885]
  ------------------
  108|      0|         return BOTAN_FFI_ERROR_ROUGHTIME_ERROR;
  109|    885|   }
  110|       |
  111|      0|   return BOTAN_FFI_ERROR_UNKNOWN_ERROR;
  112|    885|}
ffi.cpp:_ZZ16botan_hex_encodeENK3$_0clEv:
  314|   164k|   return ffi_guard_thunk(__func__, [=]() -> int {
  315|   164k|      const bool uppercase = (flags & BOTAN_FFI_HEX_LOWER_CASE) == 0;
  ------------------
  |  |  225|   164k|#define BOTAN_FFI_HEX_LOWER_CASE 1
  ------------------
  316|   164k|      Botan::hex_encode(out, in, len, uppercase);
  317|   164k|      return BOTAN_FFI_SUCCESS;
  318|   164k|   });
ffi.cpp:_ZZ16botan_hex_decodeENK3$_0clEv:
  322|   424k|   return ffi_guard_thunk(__func__, [=]() -> int {
  323|   424k|      const std::vector<uint8_t> bin = Botan::hex_decode(hex_str, in_len);
  324|   424k|      return Botan_FFI::write_vec_output(out, out_len, bin);
  325|   424k|   });

botan_mp_init:
   21|   159k|int botan_mp_init(botan_mp_t* mp_out) {
   22|   159k|   return ffi_guard_thunk(__func__, [=]() -> int {
   23|   159k|      if(mp_out == nullptr) {
   24|   159k|         return BOTAN_FFI_ERROR_NULL_POINTER;
   25|   159k|      }
   26|       |
   27|   159k|      auto mp = std::make_unique<Botan::BigInt>();
   28|   159k|      *mp_out = new botan_mp_struct(std::move(mp));
   29|   159k|      return BOTAN_FFI_SUCCESS;
   30|   159k|   });
   31|   159k|}
botan_mp_from_bin:
   79|   159k|int botan_mp_from_bin(botan_mp_t mp, const uint8_t bin[], size_t bin_len) {
   80|   159k|   return BOTAN_FFI_VISIT(mp, [=](auto& bn) { bn.binary_decode(bin, bin_len); });
  ------------------
  |  |  124|   159k|#define BOTAN_FFI_VISIT(obj, lambda) botan_ffi_visit(obj, lambda, __func__)
  ------------------
   81|   159k|}
botan_mp_destroy:
  112|   159k|int botan_mp_destroy(botan_mp_t mp) {
  113|   159k|   return BOTAN_FFI_CHECKED_DELETE(mp);
  ------------------
  |  |  143|   159k|#define BOTAN_FFI_CHECKED_DELETE(o) ffi_delete_object(o, __func__)
  ------------------
  114|   159k|}
ffi_mp.cpp:_ZZ13botan_mp_initENK3$_0clEv:
   22|   159k|   return ffi_guard_thunk(__func__, [=]() -> int {
   23|   159k|      if(mp_out == nullptr) {
  ------------------
  |  Branch (23:10): [True: 0, False: 159k]
  ------------------
   24|      0|         return BOTAN_FFI_ERROR_NULL_POINTER;
   25|      0|      }
   26|       |
   27|   159k|      auto mp = std::make_unique<Botan::BigInt>();
   28|   159k|      *mp_out = new botan_mp_struct(std::move(mp));
   29|   159k|      return BOTAN_FFI_SUCCESS;
   30|   159k|   });

botan_pk_op_verify_create:
  153|  88.6k|int botan_pk_op_verify_create(botan_pk_op_verify_t* op, botan_pubkey_t key_obj, const char* hash, uint32_t flags) {
  154|  88.6k|   if(op == nullptr) {
  ------------------
  |  Branch (154:7): [True: 0, False: 88.6k]
  ------------------
  155|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
  156|      0|   }
  157|       |
  158|  88.6k|   if(flags != 0 && flags != BOTAN_PUBKEY_DER_FORMAT_SIGNATURE) {
  ------------------
  |  | 1585|      0|#define BOTAN_PUBKEY_DER_FORMAT_SIGNATURE 1
  ------------------
  |  Branch (158:7): [True: 0, False: 88.6k]
  |  Branch (158:21): [True: 0, False: 0]
  ------------------
  159|      0|      return BOTAN_FFI_ERROR_BAD_FLAG;
  160|      0|   }
  161|       |
  162|  88.6k|   return ffi_guard_thunk(__func__, [=]() -> int {
  163|  88.6k|      *op = nullptr;
  164|  88.6k|      auto format = (flags & BOTAN_PUBKEY_DER_FORMAT_SIGNATURE) ? Botan::Signature_Format::DerSequence
  165|  88.6k|                                                                : Botan::Signature_Format::Standard;
  166|  88.6k|      auto pk = std::make_unique<Botan::PK_Verifier>(safe_get(key_obj), hash, format);
  167|  88.6k|      *op = new botan_pk_op_verify_struct(std::move(pk));
  168|  88.6k|      return BOTAN_FFI_SUCCESS;
  169|  88.6k|   });
  170|  88.6k|}
botan_pk_op_verify_destroy:
  172|  88.6k|int botan_pk_op_verify_destroy(botan_pk_op_verify_t op) {
  173|  88.6k|   return BOTAN_FFI_CHECKED_DELETE(op);
  ------------------
  |  |  143|  88.6k|#define BOTAN_FFI_CHECKED_DELETE(o) ffi_delete_object(o, __func__)
  ------------------
  174|  88.6k|}
botan_pk_op_verify_update:
  176|  88.6k|int botan_pk_op_verify_update(botan_pk_op_verify_t op, const uint8_t in[], size_t in_len) {
  177|  88.6k|   return BOTAN_FFI_VISIT(op, [=](auto& o) { o.update(in, in_len); });
  ------------------
  |  |  124|  88.6k|#define BOTAN_FFI_VISIT(obj, lambda) botan_ffi_visit(obj, lambda, __func__)
  ------------------
  178|  88.6k|}
botan_pk_op_verify_finish:
  180|  88.6k|int botan_pk_op_verify_finish(botan_pk_op_verify_t op, const uint8_t sig[], size_t sig_len) {
  181|  88.6k|   return BOTAN_FFI_VISIT(op, [=](auto& o) {
  ------------------
  |  |  124|  88.6k|#define BOTAN_FFI_VISIT(obj, lambda) botan_ffi_visit(obj, lambda, __func__)
  ------------------
  182|  88.6k|      const bool legit = o.check_signature(sig, sig_len);
  183|       |
  184|  88.6k|      if(legit)
  185|  88.6k|         return BOTAN_FFI_SUCCESS;
  186|  88.6k|      else
  187|  88.6k|         return BOTAN_FFI_INVALID_VERIFIER;
  188|  88.6k|   });
  189|  88.6k|}
ffi_pk_op.cpp:_ZZ25botan_pk_op_verify_createENK3$_0clEv:
  162|  88.6k|   return ffi_guard_thunk(__func__, [=]() -> int {
  163|  88.6k|      *op = nullptr;
  164|  88.6k|      auto format = (flags & BOTAN_PUBKEY_DER_FORMAT_SIGNATURE) ? Botan::Signature_Format::DerSequence
  ------------------
  |  | 1585|  88.6k|#define BOTAN_PUBKEY_DER_FORMAT_SIGNATURE 1
  ------------------
  |  Branch (164:21): [True: 0, False: 88.6k]
  ------------------
  165|  88.6k|                                                                : Botan::Signature_Format::Standard;
  166|  88.6k|      auto pk = std::make_unique<Botan::PK_Verifier>(safe_get(key_obj), hash, format);
  167|  88.6k|      *op = new botan_pk_op_verify_struct(std::move(pk));
  168|  88.6k|      return BOTAN_FFI_SUCCESS;
  169|  88.6k|   });

botan_pubkey_destroy:
   99|  94.4k|int botan_pubkey_destroy(botan_pubkey_t key) {
  100|  94.4k|   return BOTAN_FFI_CHECKED_DELETE(key);
  ------------------
  |  |  143|  94.4k|#define BOTAN_FFI_CHECKED_DELETE(o) ffi_delete_object(o, __func__)
  ------------------
  101|  94.4k|}

botan_pubkey_load_rsa:
  221|  21.4k|int botan_pubkey_load_rsa(botan_pubkey_t* key, botan_mp_t n, botan_mp_t e) {
  222|  21.4k|#if defined(BOTAN_HAS_RSA)
  223|  21.4k|   *key = nullptr;
  224|  21.4k|   return ffi_guard_thunk(__func__, [=]() -> int {
  225|  21.4k|      auto rsa = std::make_unique<Botan::RSA_PublicKey>(safe_get(n), safe_get(e));
  226|  21.4k|      *key = new botan_pubkey_struct(std::move(rsa));
  227|  21.4k|      return BOTAN_FFI_SUCCESS;
  228|  21.4k|   });
  229|       |#else
  230|       |   BOTAN_UNUSED(key, n, e);
  231|       |   return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
  232|       |#endif
  233|  21.4k|}
botan_pubkey_load_dsa:
  324|  6.93k|int botan_pubkey_load_dsa(botan_pubkey_t* key, botan_mp_t p, botan_mp_t q, botan_mp_t g, botan_mp_t y) {
  325|  6.93k|#if defined(BOTAN_HAS_DSA)
  326|  6.93k|   *key = nullptr;
  327|       |
  328|  6.93k|   return ffi_guard_thunk(__func__, [=]() -> int {
  329|  6.93k|      Botan::DL_Group group(safe_get(p), safe_get(q), safe_get(g));
  330|  6.93k|      auto dsa = std::make_unique<Botan::DSA_PublicKey>(group, safe_get(y));
  331|  6.93k|      *key = new botan_pubkey_struct(std::move(dsa));
  332|  6.93k|      return BOTAN_FFI_SUCCESS;
  333|  6.93k|   });
  334|       |#else
  335|       |   BOTAN_UNUSED(key, p, q, g, y);
  336|       |   return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
  337|       |#endif
  338|  6.93k|}
botan_pubkey_load_ecdsa:
  387|  35.3k|                            const char* curve_name) {
  388|  35.3k|#if defined(BOTAN_HAS_ECDSA)
  389|  35.3k|   return ffi_guard_thunk(__func__, [=]() -> int {
  390|  35.3k|      std::unique_ptr<Botan::ECDSA_PublicKey> p_key;
  391|       |
  392|  35.3k|      int rc = pubkey_load_ec(p_key, safe_get(public_x), safe_get(public_y), curve_name);
  393|  35.3k|      if(rc == BOTAN_FFI_SUCCESS) {
  394|  35.3k|         *key = new botan_pubkey_struct(std::move(p_key));
  395|  35.3k|      }
  396|       |
  397|  35.3k|      return rc;
  398|  35.3k|   });
  399|       |#else
  400|       |   BOTAN_UNUSED(key, public_x, public_y, curve_name);
  401|       |   return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
  402|       |#endif
  403|  35.3k|}
botan_pubkey_sm2_compute_za:
  574|  4.71k|   uint8_t out[], size_t* out_len, const char* ident, const char* hash_algo, const botan_pubkey_t key) {
  575|  4.71k|   if(out == nullptr || out_len == nullptr) {
  ------------------
  |  Branch (575:7): [True: 0, False: 4.71k]
  |  Branch (575:25): [True: 0, False: 4.71k]
  ------------------
  576|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
  577|      0|   }
  578|  4.71k|   if(ident == nullptr || hash_algo == nullptr || key == nullptr) {
  ------------------
  |  Branch (578:7): [True: 0, False: 4.71k]
  |  Branch (578:27): [True: 0, False: 4.71k]
  |  Branch (578:51): [True: 0, False: 4.71k]
  ------------------
  579|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
  580|      0|   }
  581|       |
  582|  4.71k|#if defined(BOTAN_HAS_SM2)
  583|  4.71k|   return ffi_guard_thunk(__func__, [=]() -> int {
  584|  4.71k|      const Botan::Public_Key& pub_key = safe_get(key);
  585|  4.71k|      const Botan::EC_PublicKey* ec_key = dynamic_cast<const Botan::EC_PublicKey*>(&pub_key);
  586|       |
  587|  4.71k|      if(ec_key == nullptr) {
  588|  4.71k|         return BOTAN_FFI_ERROR_BAD_PARAMETER;
  589|  4.71k|      }
  590|       |
  591|  4.71k|      if(ec_key->algo_name() != "SM2") {
  592|  4.71k|         return BOTAN_FFI_ERROR_BAD_PARAMETER;
  593|  4.71k|      }
  594|       |
  595|  4.71k|      const std::string ident_str(ident);
  596|  4.71k|      std::unique_ptr<Botan::HashFunction> hash = Botan::HashFunction::create_or_throw(hash_algo);
  597|       |
  598|  4.71k|      const std::vector<uint8_t> za = Botan::sm2_compute_za(*hash, ident_str, ec_key->domain(), ec_key->public_point());
  599|       |
  600|  4.71k|      return write_vec_output(out, out_len, za);
  601|  4.71k|   });
  602|       |#else
  603|       |   return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
  604|       |#endif
  605|  4.71k|}
botan_pubkey_load_sm2:
  610|  9.28k|                          const char* curve_name) {
  611|  9.28k|#if defined(BOTAN_HAS_SM2)
  612|  9.28k|   return ffi_guard_thunk(__func__, [=]() -> int {
  613|  9.28k|      std::unique_ptr<Botan::SM2_PublicKey> p_key;
  614|  9.28k|      if(!pubkey_load_ec(p_key, safe_get(public_x), safe_get(public_y), curve_name)) {
  615|  9.28k|         *key = new botan_pubkey_struct(std::move(p_key));
  616|  9.28k|         return BOTAN_FFI_SUCCESS;
  617|  9.28k|      }
  618|  9.28k|      return BOTAN_FFI_ERROR_UNKNOWN_ERROR;
  619|  9.28k|   });
  620|       |#else
  621|       |   BOTAN_UNUSED(key, public_x, public_y, curve_name);
  622|       |   return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
  623|       |#endif
  624|  9.28k|}
botan_pubkey_load_ed25519:
  671|  21.2k|int botan_pubkey_load_ed25519(botan_pubkey_t* key, const uint8_t pubkey[32]) {
  672|  21.2k|#if defined(BOTAN_HAS_ED25519)
  673|  21.2k|   *key = nullptr;
  674|  21.2k|   return ffi_guard_thunk(__func__, [=]() -> int {
  675|  21.2k|      const std::vector<uint8_t> pubkey_vec(pubkey, pubkey + 32);
  676|  21.2k|      auto ed25519 = std::make_unique<Botan::Ed25519_PublicKey>(pubkey_vec);
  677|  21.2k|      *key = new botan_pubkey_struct(std::move(ed25519));
  678|  21.2k|      return BOTAN_FFI_SUCCESS;
  679|  21.2k|   });
  680|       |#else
  681|       |   BOTAN_UNUSED(key, pubkey);
  682|       |   return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
  683|       |#endif
  684|  21.2k|}
ffi_pkey_algs.cpp:_ZZ21botan_pubkey_load_rsaENK3$_0clEv:
  224|  21.4k|   return ffi_guard_thunk(__func__, [=]() -> int {
  225|  21.4k|      auto rsa = std::make_unique<Botan::RSA_PublicKey>(safe_get(n), safe_get(e));
  226|  21.4k|      *key = new botan_pubkey_struct(std::move(rsa));
  227|  21.4k|      return BOTAN_FFI_SUCCESS;
  228|  21.4k|   });
ffi_pkey_algs.cpp:_ZZ21botan_pubkey_load_dsaENK3$_0clEv:
  328|  6.93k|   return ffi_guard_thunk(__func__, [=]() -> int {
  329|  6.93k|      Botan::DL_Group group(safe_get(p), safe_get(q), safe_get(g));
  330|  6.93k|      auto dsa = std::make_unique<Botan::DSA_PublicKey>(group, safe_get(y));
  331|  6.93k|      *key = new botan_pubkey_struct(std::move(dsa));
  332|  6.93k|      return BOTAN_FFI_SUCCESS;
  333|  6.93k|   });
ffi_pkey_algs.cpp:_ZZ23botan_pubkey_load_ecdsaENK3$_0clEv:
  389|  35.3k|   return ffi_guard_thunk(__func__, [=]() -> int {
  390|  35.3k|      std::unique_ptr<Botan::ECDSA_PublicKey> p_key;
  391|       |
  392|  35.3k|      int rc = pubkey_load_ec(p_key, safe_get(public_x), safe_get(public_y), curve_name);
  393|  35.3k|      if(rc == BOTAN_FFI_SUCCESS) {
  ------------------
  |  Branch (393:10): [True: 35.3k, False: 10]
  ------------------
  394|  35.3k|         *key = new botan_pubkey_struct(std::move(p_key));
  395|  35.3k|      }
  396|       |
  397|  35.3k|      return rc;
  398|  35.3k|   });
ffi_pkey_algs.cpp:_ZN12_GLOBAL__N_114pubkey_load_ecIN5Botan15ECDSA_PublicKeyEEEiRNSt3__110unique_ptrIT_NS3_14default_deleteIS5_EEEERKNS1_6BigIntESC_PKc:
  100|  35.3k|                   const char* curve_name) {
  101|  35.3k|   if(curve_name == nullptr) {
  ------------------
  |  Branch (101:7): [True: 0, False: 35.3k]
  ------------------
  102|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
  103|      0|   }
  104|       |
  105|  35.3k|   Botan::EC_Group grp(curve_name);
  106|  35.3k|   Botan::EC_Point uncompressed_point = grp.point(public_x, public_y);
  107|  35.3k|   key.reset(new ECPublicKey_t(grp, uncompressed_point));
  108|  35.3k|   return BOTAN_FFI_SUCCESS;
  109|  35.3k|}
ffi_pkey_algs.cpp:_ZZ27botan_pubkey_sm2_compute_zaENK3$_0clEv:
  583|  4.71k|   return ffi_guard_thunk(__func__, [=]() -> int {
  584|  4.71k|      const Botan::Public_Key& pub_key = safe_get(key);
  585|  4.71k|      const Botan::EC_PublicKey* ec_key = dynamic_cast<const Botan::EC_PublicKey*>(&pub_key);
  586|       |
  587|  4.71k|      if(ec_key == nullptr) {
  ------------------
  |  Branch (587:10): [True: 0, False: 4.71k]
  ------------------
  588|      0|         return BOTAN_FFI_ERROR_BAD_PARAMETER;
  589|      0|      }
  590|       |
  591|  4.71k|      if(ec_key->algo_name() != "SM2") {
  ------------------
  |  Branch (591:10): [True: 0, False: 4.71k]
  ------------------
  592|      0|         return BOTAN_FFI_ERROR_BAD_PARAMETER;
  593|      0|      }
  594|       |
  595|  4.71k|      const std::string ident_str(ident);
  596|  4.71k|      std::unique_ptr<Botan::HashFunction> hash = Botan::HashFunction::create_or_throw(hash_algo);
  597|       |
  598|  4.71k|      const std::vector<uint8_t> za = Botan::sm2_compute_za(*hash, ident_str, ec_key->domain(), ec_key->public_point());
  599|       |
  600|  4.71k|      return write_vec_output(out, out_len, za);
  601|  4.71k|   });
ffi_pkey_algs.cpp:_ZZ21botan_pubkey_load_sm2ENK3$_0clEv:
  612|  9.28k|   return ffi_guard_thunk(__func__, [=]() -> int {
  613|  9.28k|      std::unique_ptr<Botan::SM2_PublicKey> p_key;
  614|  9.28k|      if(!pubkey_load_ec(p_key, safe_get(public_x), safe_get(public_y), curve_name)) {
  ------------------
  |  Branch (614:10): [True: 9.25k, False: 31]
  ------------------
  615|  9.25k|         *key = new botan_pubkey_struct(std::move(p_key));
  616|  9.25k|         return BOTAN_FFI_SUCCESS;
  617|  9.25k|      }
  618|     31|      return BOTAN_FFI_ERROR_UNKNOWN_ERROR;
  619|  9.28k|   });
ffi_pkey_algs.cpp:_ZN12_GLOBAL__N_114pubkey_load_ecIN5Botan13SM2_PublicKeyEEEiRNSt3__110unique_ptrIT_NS3_14default_deleteIS5_EEEERKNS1_6BigIntESC_PKc:
  100|  9.28k|                   const char* curve_name) {
  101|  9.28k|   if(curve_name == nullptr) {
  ------------------
  |  Branch (101:7): [True: 0, False: 9.28k]
  ------------------
  102|      0|      return BOTAN_FFI_ERROR_NULL_POINTER;
  103|      0|   }
  104|       |
  105|  9.28k|   Botan::EC_Group grp(curve_name);
  106|  9.28k|   Botan::EC_Point uncompressed_point = grp.point(public_x, public_y);
  107|  9.28k|   key.reset(new ECPublicKey_t(grp, uncompressed_point));
  108|  9.28k|   return BOTAN_FFI_SUCCESS;
  109|  9.28k|}
ffi_pkey_algs.cpp:_ZZ25botan_pubkey_load_ed25519ENK3$_0clEv:
  674|  21.2k|   return ffi_guard_thunk(__func__, [=]() -> int {
  675|  21.2k|      const std::vector<uint8_t> pubkey_vec(pubkey, pubkey + 32);
  676|  21.2k|      auto ed25519 = std::make_unique<Botan::Ed25519_PublicKey>(pubkey_vec);
  677|  21.2k|      *key = new botan_pubkey_struct(std::move(ed25519));
  678|  21.2k|      return BOTAN_FFI_SUCCESS;
  679|  21.2k|   });

botan_rng_init:
   26|  48.1k|int botan_rng_init(botan_rng_t* rng_out, const char* rng_type) {
   27|  48.1k|   return ffi_guard_thunk(__func__, [=]() -> int {
   28|  48.1k|      if(rng_out == nullptr) {
   29|  48.1k|         return BOTAN_FFI_ERROR_NULL_POINTER;
   30|  48.1k|      }
   31|       |
   32|  48.1k|      const std::string rng_type_s(rng_type ? rng_type : "system");
   33|       |
   34|  48.1k|      std::unique_ptr<Botan::RandomNumberGenerator> rng;
   35|       |
   36|  48.1k|      if(rng_type_s == "system") {
   37|  48.1k|         rng = std::make_unique<Botan::System_RNG>();
   38|  48.1k|      } else if(rng_type_s == "user" || rng_type_s == "user-threadsafe") {
   39|  48.1k|         rng = std::make_unique<Botan::AutoSeeded_RNG>();
   40|  48.1k|      } else if(rng_type_s == "null") {
   41|  48.1k|         rng = std::make_unique<Botan::Null_RNG>();
   42|  48.1k|      }
   43|       |#if defined(BOTAN_HAS_PROCESSOR_RNG)
   44|       |      else if((rng_type_s == "rdrand" || rng_type_s == "hwrng") && Botan::Processor_RNG::available()) {
   45|       |         rng = std::make_unique<Botan::Processor_RNG>();
   46|       |      }
   47|       |#endif
   48|       |
   49|  48.1k|      if(!rng) {
   50|  48.1k|         return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
   51|  48.1k|      }
   52|       |
   53|  48.1k|      *rng_out = new botan_rng_struct(std::move(rng));
   54|  48.1k|      return BOTAN_FFI_SUCCESS;
   55|  48.1k|   });
   56|  48.1k|}
botan_rng_destroy:
  143|  48.1k|int botan_rng_destroy(botan_rng_t rng) {
  144|  48.1k|   return BOTAN_FFI_CHECKED_DELETE(rng);
  ------------------
  |  |  143|  48.1k|#define BOTAN_FFI_CHECKED_DELETE(o) ffi_delete_object(o, __func__)
  ------------------
  145|  48.1k|}
ffi_rng.cpp:_ZZ14botan_rng_initENK3$_0clEv:
   27|  48.1k|   return ffi_guard_thunk(__func__, [=]() -> int {
   28|  48.1k|      if(rng_out == nullptr) {
  ------------------
  |  Branch (28:10): [True: 0, False: 48.1k]
  ------------------
   29|      0|         return BOTAN_FFI_ERROR_NULL_POINTER;
   30|      0|      }
   31|       |
   32|  48.1k|      const std::string rng_type_s(rng_type ? rng_type : "system");
  ------------------
  |  Branch (32:36): [True: 48.1k, False: 0]
  ------------------
   33|       |
   34|  48.1k|      std::unique_ptr<Botan::RandomNumberGenerator> rng;
   35|       |
   36|  48.1k|      if(rng_type_s == "system") {
  ------------------
  |  Branch (36:10): [True: 0, False: 48.1k]
  ------------------
   37|      0|         rng = std::make_unique<Botan::System_RNG>();
   38|  48.1k|      } else if(rng_type_s == "user" || rng_type_s == "user-threadsafe") {
  ------------------
  |  Branch (38:17): [True: 48.1k, False: 0]
  |  Branch (38:41): [True: 0, False: 0]
  ------------------
   39|  48.1k|         rng = std::make_unique<Botan::AutoSeeded_RNG>();
   40|  48.1k|      } else if(rng_type_s == "null") {
  ------------------
  |  Branch (40:17): [True: 0, False: 0]
  ------------------
   41|      0|         rng = std::make_unique<Botan::Null_RNG>();
   42|      0|      }
   43|       |#if defined(BOTAN_HAS_PROCESSOR_RNG)
   44|       |      else if((rng_type_s == "rdrand" || rng_type_s == "hwrng") && Botan::Processor_RNG::available()) {
   45|       |         rng = std::make_unique<Botan::Processor_RNG>();
   46|       |      }
   47|       |#endif
   48|       |
   49|  48.1k|      if(!rng) {
  ------------------
  |  Branch (49:10): [True: 0, False: 48.1k]
  ------------------
   50|      0|         return BOTAN_FFI_ERROR_NOT_IMPLEMENTED;
   51|      0|      }
   52|       |
   53|  48.1k|      *rng_out = new botan_rng_struct(std::move(rng));
   54|  48.1k|      return BOTAN_FFI_SUCCESS;
   55|  48.1k|   });

_ZN5Botan5CRC248add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  175|  73.0k|void CRC24::add_data(std::span<const uint8_t> input) {
  176|  73.0k|   uint32_t tmp = m_crc;
  177|       |
  178|       |   // Input is word aligned if WA & input == 0
  179|  73.0k|   static const uint8_t WA = sizeof(size_t) - 1;
  180|       |
  181|       |   // Ensure input is word aligned before processing in parallel
  182|  73.9k|   for(; !input.empty() && (reinterpret_cast<uintptr_t>(input.data()) & WA); input = input.last(input.size() - 1)) {
  ------------------
  |  Branch (182:10): [True: 55.5k, False: 18.3k]
  |  Branch (182:28): [True: 924, False: 54.6k]
  ------------------
  183|    924|      tmp = process8(tmp, input.front());
  184|    924|   }
  185|       |
  186|  3.70M|   while(input.size() >= 16) {
  ------------------
  |  Branch (186:10): [True: 3.63M, False: 73.0k]
  ------------------
  187|  3.63M|      uint32_t d[4];
  188|  3.63M|      load_le(d, input.data(), 4);
  189|  3.63M|      tmp = process32(tmp, d[0]);
  190|  3.63M|      tmp = process32(tmp, d[1]);
  191|  3.63M|      tmp = process32(tmp, d[2]);
  192|  3.63M|      tmp = process32(tmp, d[3]);
  193|       |
  194|  3.63M|      input = input.last(input.size() - 16);
  195|  3.63M|   }
  196|       |
  197|   368k|   for(; !input.empty(); input = input.last(input.size() - 1)) {
  ------------------
  |  Branch (197:10): [True: 295k, False: 73.0k]
  ------------------
  198|   295k|      tmp = process8(tmp, input.front());
  199|   295k|   }
  200|       |
  201|  73.0k|   m_crc = tmp;
  202|  73.0k|}
_ZN5Botan5CRC2412final_resultENSt3__14spanIhLm18446744073709551615EEE:
  207|  35.7k|void CRC24::final_result(std::span<uint8_t> output) {
  208|  35.7k|   output[0] = get_byte<3>(m_crc);
  209|  35.7k|   output[1] = get_byte<2>(m_crc);
  210|  35.7k|   output[2] = get_byte<1>(m_crc);
  211|  35.7k|   clear();
  212|  35.7k|}
crc24.cpp:_ZN5Botan12_GLOBAL__N_18process8Ejh:
  142|   296k|inline uint32_t process8(uint32_t crc, uint8_t data) {
  143|   296k|   return (crc >> 8) ^ CRC24_T0[get_byte<3>(crc) ^ data];
  144|   296k|}
crc24.cpp:_ZN5Botan12_GLOBAL__N_19process32Ejj:
  146|  14.5M|inline uint32_t process32(uint32_t crc, uint32_t word) {
  147|  14.5M|   const uint32_t sum = crc ^ word;
  148|       |
  149|  14.5M|   return CRC24_T3[get_byte<3>(sum)] ^ CRC24_T2[get_byte<2>(sum)] ^ CRC24_T1[get_byte<1>(sum)] ^
  150|  14.5M|          CRC24_T0[get_byte<0>(sum)];
  151|  14.5M|}

_ZN5Botan12HashFunction6createENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  107|   360k|std::unique_ptr<HashFunction> HashFunction::create(std::string_view algo_spec, std::string_view provider) {
  108|       |#if defined(BOTAN_HAS_COMMONCRYPTO)
  109|       |   if(provider.empty() || provider == "commoncrypto") {
  110|       |      if(auto hash = make_commoncrypto_hash(algo_spec))
  111|       |         return hash;
  112|       |
  113|       |      if(!provider.empty())
  114|       |         return nullptr;
  115|       |   }
  116|       |#endif
  117|       |
  118|   360k|   if(provider.empty() == false && provider != "base") {
  ------------------
  |  Branch (118:7): [True: 0, False: 360k]
  |  Branch (118:36): [True: 0, False: 0]
  ------------------
  119|      0|      return nullptr;  // unknown provider
  120|      0|   }
  121|       |
  122|   360k|#if defined(BOTAN_HAS_SHA1)
  123|   360k|   if(algo_spec == "SHA-1") {
  ------------------
  |  Branch (123:7): [True: 2.04k, False: 358k]
  ------------------
  124|  2.04k|      return std::make_unique<SHA_1>();
  125|  2.04k|   }
  126|   358k|#endif
  127|       |
  128|   358k|#if defined(BOTAN_HAS_SHA2_32)
  129|   358k|   if(algo_spec == "SHA-224") {
  ------------------
  |  Branch (129:7): [True: 8.88k, False: 350k]
  ------------------
  130|  8.88k|      return std::make_unique<SHA_224>();
  131|  8.88k|   }
  132|       |
  133|   350k|   if(algo_spec == "SHA-256") {
  ------------------
  |  Branch (133:7): [True: 54.4k, False: 295k]
  ------------------
  134|  54.4k|      return std::make_unique<SHA_256>();
  135|  54.4k|   }
  136|   295k|#endif
  137|       |
  138|   295k|#if defined(BOTAN_HAS_SHA2_64)
  139|   295k|   if(algo_spec == "SHA-384") {
  ------------------
  |  Branch (139:7): [True: 25.0k, False: 270k]
  ------------------
  140|  25.0k|      return std::make_unique<SHA_384>();
  141|  25.0k|   }
  142|       |
  143|   270k|   if(algo_spec == "SHA-512") {
  ------------------
  |  Branch (143:7): [True: 131k, False: 138k]
  ------------------
  144|   131k|      return std::make_unique<SHA_512>();
  145|   131k|   }
  146|       |
  147|   138k|   if(algo_spec == "SHA-512-256") {
  ------------------
  |  Branch (147:7): [True: 0, False: 138k]
  ------------------
  148|      0|      return std::make_unique<SHA_512_256>();
  149|      0|   }
  150|   138k|#endif
  151|       |
  152|   138k|#if defined(BOTAN_HAS_RIPEMD_160)
  153|   138k|   if(algo_spec == "RIPEMD-160") {
  ------------------
  |  Branch (153:7): [True: 3.89k, False: 135k]
  ------------------
  154|  3.89k|      return std::make_unique<RIPEMD_160>();
  155|  3.89k|   }
  156|   135k|#endif
  157|       |
  158|       |#if defined(BOTAN_HAS_WHIRLPOOL)
  159|       |   if(algo_spec == "Whirlpool") {
  160|       |      return std::make_unique<Whirlpool>();
  161|       |   }
  162|       |#endif
  163|       |
  164|   135k|#if defined(BOTAN_HAS_MD5)
  165|   135k|   if(algo_spec == "MD5") {
  ------------------
  |  Branch (165:7): [True: 21.0k, False: 114k]
  ------------------
  166|  21.0k|      return std::make_unique<MD5>();
  167|  21.0k|   }
  168|   114k|#endif
  169|       |
  170|       |#if defined(BOTAN_HAS_MD4)
  171|       |   if(algo_spec == "MD4") {
  172|       |      return std::make_unique<MD4>();
  173|       |   }
  174|       |#endif
  175|       |
  176|       |#if defined(BOTAN_HAS_GOST_34_11)
  177|       |   if(algo_spec == "GOST-R-34.11-94" || algo_spec == "GOST-34.11") {
  178|       |      return std::make_unique<GOST_34_11>();
  179|       |   }
  180|       |#endif
  181|       |
  182|       |#if defined(BOTAN_HAS_ADLER32)
  183|       |   if(algo_spec == "Adler32") {
  184|       |      return std::make_unique<Adler32>();
  185|       |   }
  186|       |#endif
  187|       |
  188|   114k|#if defined(BOTAN_HAS_CRC24)
  189|   114k|   if(algo_spec == "CRC24") {
  ------------------
  |  Branch (189:7): [True: 46.1k, False: 67.8k]
  ------------------
  190|  46.1k|      return std::make_unique<CRC24>();
  191|  46.1k|   }
  192|  67.8k|#endif
  193|       |
  194|       |#if defined(BOTAN_HAS_CRC32)
  195|       |   if(algo_spec == "CRC32") {
  196|       |      return std::make_unique<CRC32>();
  197|       |   }
  198|       |#endif
  199|       |
  200|       |#if defined(BOTAN_HAS_STREEBOG)
  201|       |   if(algo_spec == "Streebog-256") {
  202|       |      return std::make_unique<Streebog>(256);
  203|       |   }
  204|       |   if(algo_spec == "Streebog-512") {
  205|       |      return std::make_unique<Streebog>(512);
  206|       |   }
  207|       |#endif
  208|       |
  209|  67.8k|#if defined(BOTAN_HAS_SM3)
  210|  67.8k|   if(algo_spec == "SM3") {
  ------------------
  |  Branch (210:7): [True: 7.73k, False: 60.1k]
  ------------------
  211|  7.73k|      return std::make_unique<SM3>();
  212|  7.73k|   }
  213|  60.1k|#endif
  214|       |
  215|  60.1k|   const SCAN_Name req(algo_spec);
  216|       |
  217|       |#if defined(BOTAN_HAS_SKEIN_512)
  218|       |   if(req.algo_name() == "Skein-512") {
  219|       |      return std::make_unique<Skein_512>(req.arg_as_integer(0, 512), req.arg(1, ""));
  220|       |   }
  221|       |#endif
  222|       |
  223|       |#if defined(BOTAN_HAS_BLAKE2B)
  224|       |   if(req.algo_name() == "Blake2b" || req.algo_name() == "BLAKE2b") {
  225|       |      return std::make_unique<BLAKE2b>(req.arg_as_integer(0, 512));
  226|       |   }
  227|       |#endif
  228|       |
  229|       |#if defined(BOTAN_HAS_BLAKE2S)
  230|       |   if(req.algo_name() == "Blake2s" || req.algo_name() == "BLAKE2s") {
  231|       |      return std::make_unique<BLAKE2s>(req.arg_as_integer(0, 256));
  232|       |   }
  233|       |#endif
  234|       |
  235|       |#if defined(BOTAN_HAS_KECCAK)
  236|       |   if(req.algo_name() == "Keccak-1600") {
  237|       |      return std::make_unique<Keccak_1600>(req.arg_as_integer(0, 512));
  238|       |   }
  239|       |#endif
  240|       |
  241|  60.1k|#if defined(BOTAN_HAS_SHA3)
  242|  60.1k|   if(req.algo_name() == "SHA-3") {
  ------------------
  |  Branch (242:7): [True: 16.1k, False: 44.0k]
  ------------------
  243|  16.1k|      return std::make_unique<SHA_3>(req.arg_as_integer(0, 512));
  244|  16.1k|   }
  245|  44.0k|#endif
  246|       |
  247|  44.0k|#if defined(BOTAN_HAS_SHAKE)
  248|  44.0k|   if(req.algo_name() == "SHAKE-128" && req.arg_count() == 1) {
  ------------------
  |  Branch (248:7): [True: 0, False: 44.0k]
  |  Branch (248:41): [True: 0, False: 0]
  ------------------
  249|      0|      return std::make_unique<SHAKE_128>(req.arg_as_integer(0));
  250|      0|   }
  251|  44.0k|   if(req.algo_name() == "SHAKE-256" && req.arg_count() == 1) {
  ------------------
  |  Branch (251:7): [True: 0, False: 44.0k]
  |  Branch (251:41): [True: 0, False: 0]
  ------------------
  252|      0|      return std::make_unique<SHAKE_256>(req.arg_as_integer(0));
  253|      0|   }
  254|  44.0k|#endif
  255|       |
  256|       |#if defined(BOTAN_HAS_PARALLEL_HASH)
  257|       |   if(req.algo_name() == "Parallel") {
  258|       |      std::vector<std::unique_ptr<HashFunction>> hashes;
  259|       |
  260|       |      for(size_t i = 0; i != req.arg_count(); ++i) {
  261|       |         auto h = HashFunction::create(req.arg(i));
  262|       |         if(!h) {
  263|       |            return nullptr;
  264|       |         }
  265|       |         hashes.push_back(std::move(h));
  266|       |      }
  267|       |
  268|       |      return std::make_unique<Parallel>(hashes);
  269|       |   }
  270|       |#endif
  271|       |
  272|  44.0k|#if defined(BOTAN_HAS_TRUNCATED_HASH)
  273|  44.0k|   if(req.algo_name() == "Truncated" && req.arg_count() == 2) {
  ------------------
  |  Branch (273:7): [True: 0, False: 44.0k]
  |  Branch (273:41): [True: 0, False: 0]
  ------------------
  274|      0|      auto hash = HashFunction::create(req.arg(0));
  275|      0|      if(!hash) {
  ------------------
  |  Branch (275:10): [True: 0, False: 0]
  ------------------
  276|      0|         return nullptr;
  277|      0|      }
  278|       |
  279|      0|      return std::make_unique<Truncated_Hash>(std::move(hash), req.arg_as_integer(1));
  280|      0|   }
  281|  44.0k|#endif
  282|       |
  283|       |#if defined(BOTAN_HAS_COMB4P)
  284|       |   if(req.algo_name() == "Comb4P" && req.arg_count() == 2) {
  285|       |      auto h1 = HashFunction::create(req.arg(0));
  286|       |      auto h2 = HashFunction::create(req.arg(1));
  287|       |
  288|       |      if(h1 && h2) {
  289|       |         return std::make_unique<Comb4P>(std::move(h1), std::move(h2));
  290|       |      }
  291|       |   }
  292|       |#endif
  293|       |
  294|  44.0k|   return nullptr;
  295|  44.0k|}
_ZN5Botan12HashFunction15create_or_throwENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  298|  25.3k|std::unique_ptr<HashFunction> HashFunction::create_or_throw(std::string_view algo, std::string_view provider) {
  299|  25.3k|   if(auto hash = HashFunction::create(algo, provider)) {
  ------------------
  |  Branch (299:12): [True: 25.3k, False: 0]
  ------------------
  300|  25.3k|      return hash;
  301|  25.3k|   }
  302|      0|   throw Lookup_Error("Hash", algo, provider);
  303|  25.3k|}

_ZN5Botan3MD510compress_nERNSt3__16vectorIjNS_16secure_allocatorIjEEEENS1_4spanIKhLm18446744073709551615EEEm:
   62|  31.9k|void MD5::compress_n(MD5::digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
   63|  31.9k|   uint32_t A = digest[0], B = digest[1], C = digest[2], D = digest[3];
   64|  31.9k|   std::array<uint32_t, 16> M;
   65|       |
   66|  31.9k|   BufferSlicer in(input);
   67|       |
   68|  64.8k|   for(size_t i = 0; i != blocks; ++i) {
  ------------------
  |  Branch (68:22): [True: 32.8k, False: 31.9k]
  ------------------
   69|  32.8k|      load_le(M.data(), in.take(block_bytes).data(), M.size());
   70|       |
   71|  32.8k|      FF<7>(A, B, C, D, M[0] + 0xD76AA478);
   72|  32.8k|      FF<12>(D, A, B, C, M[1] + 0xE8C7B756);
   73|  32.8k|      FF<17>(C, D, A, B, M[2] + 0x242070DB);
   74|  32.8k|      FF<22>(B, C, D, A, M[3] + 0xC1BDCEEE);
   75|  32.8k|      FF<7>(A, B, C, D, M[4] + 0xF57C0FAF);
   76|  32.8k|      FF<12>(D, A, B, C, M[5] + 0x4787C62A);
   77|  32.8k|      FF<17>(C, D, A, B, M[6] + 0xA8304613);
   78|  32.8k|      FF<22>(B, C, D, A, M[7] + 0xFD469501);
   79|  32.8k|      FF<7>(A, B, C, D, M[8] + 0x698098D8);
   80|  32.8k|      FF<12>(D, A, B, C, M[9] + 0x8B44F7AF);
   81|  32.8k|      FF<17>(C, D, A, B, M[10] + 0xFFFF5BB1);
   82|  32.8k|      FF<22>(B, C, D, A, M[11] + 0x895CD7BE);
   83|  32.8k|      FF<7>(A, B, C, D, M[12] + 0x6B901122);
   84|  32.8k|      FF<12>(D, A, B, C, M[13] + 0xFD987193);
   85|  32.8k|      FF<17>(C, D, A, B, M[14] + 0xA679438E);
   86|  32.8k|      FF<22>(B, C, D, A, M[15] + 0x49B40821);
   87|       |
   88|  32.8k|      GG<5>(A, B, C, D, M[1] + 0xF61E2562);
   89|  32.8k|      GG<9>(D, A, B, C, M[6] + 0xC040B340);
   90|  32.8k|      GG<14>(C, D, A, B, M[11] + 0x265E5A51);
   91|  32.8k|      GG<20>(B, C, D, A, M[0] + 0xE9B6C7AA);
   92|  32.8k|      GG<5>(A, B, C, D, M[5] + 0xD62F105D);
   93|  32.8k|      GG<9>(D, A, B, C, M[10] + 0x02441453);
   94|  32.8k|      GG<14>(C, D, A, B, M[15] + 0xD8A1E681);
   95|  32.8k|      GG<20>(B, C, D, A, M[4] + 0xE7D3FBC8);
   96|  32.8k|      GG<5>(A, B, C, D, M[9] + 0x21E1CDE6);
   97|  32.8k|      GG<9>(D, A, B, C, M[14] + 0xC33707D6);
   98|  32.8k|      GG<14>(C, D, A, B, M[3] + 0xF4D50D87);
   99|  32.8k|      GG<20>(B, C, D, A, M[8] + 0x455A14ED);
  100|  32.8k|      GG<5>(A, B, C, D, M[13] + 0xA9E3E905);
  101|  32.8k|      GG<9>(D, A, B, C, M[2] + 0xFCEFA3F8);
  102|  32.8k|      GG<14>(C, D, A, B, M[7] + 0x676F02D9);
  103|  32.8k|      GG<20>(B, C, D, A, M[12] + 0x8D2A4C8A);
  104|       |
  105|  32.8k|      HH<4>(A, B, C, D, M[5] + 0xFFFA3942);
  106|  32.8k|      HH<11>(D, A, B, C, M[8] + 0x8771F681);
  107|  32.8k|      HH<16>(C, D, A, B, M[11] + 0x6D9D6122);
  108|  32.8k|      HH<23>(B, C, D, A, M[14] + 0xFDE5380C);
  109|  32.8k|      HH<4>(A, B, C, D, M[1] + 0xA4BEEA44);
  110|  32.8k|      HH<11>(D, A, B, C, M[4] + 0x4BDECFA9);
  111|  32.8k|      HH<16>(C, D, A, B, M[7] + 0xF6BB4B60);
  112|  32.8k|      HH<23>(B, C, D, A, M[10] + 0xBEBFBC70);
  113|  32.8k|      HH<4>(A, B, C, D, M[13] + 0x289B7EC6);
  114|  32.8k|      HH<11>(D, A, B, C, M[0] + 0xEAA127FA);
  115|  32.8k|      HH<16>(C, D, A, B, M[3] + 0xD4EF3085);
  116|  32.8k|      HH<23>(B, C, D, A, M[6] + 0x04881D05);
  117|  32.8k|      HH<4>(A, B, C, D, M[9] + 0xD9D4D039);
  118|  32.8k|      HH<11>(D, A, B, C, M[12] + 0xE6DB99E5);
  119|  32.8k|      HH<16>(C, D, A, B, M[15] + 0x1FA27CF8);
  120|  32.8k|      HH<23>(B, C, D, A, M[2] + 0xC4AC5665);
  121|       |
  122|  32.8k|      II<6>(A, B, C, D, M[0] + 0xF4292244);
  123|  32.8k|      II<10>(D, A, B, C, M[7] + 0x432AFF97);
  124|  32.8k|      II<15>(C, D, A, B, M[14] + 0xAB9423A7);
  125|  32.8k|      II<21>(B, C, D, A, M[5] + 0xFC93A039);
  126|  32.8k|      II<6>(A, B, C, D, M[12] + 0x655B59C3);
  127|  32.8k|      II<10>(D, A, B, C, M[3] + 0x8F0CCC92);
  128|  32.8k|      II<15>(C, D, A, B, M[10] + 0xFFEFF47D);
  129|  32.8k|      II<21>(B, C, D, A, M[1] + 0x85845DD1);
  130|  32.8k|      II<6>(A, B, C, D, M[8] + 0x6FA87E4F);
  131|  32.8k|      II<10>(D, A, B, C, M[15] + 0xFE2CE6E0);
  132|  32.8k|      II<15>(C, D, A, B, M[6] + 0xA3014314);
  133|  32.8k|      II<21>(B, C, D, A, M[13] + 0x4E0811A1);
  134|  32.8k|      II<6>(A, B, C, D, M[4] + 0xF7537E82);
  135|  32.8k|      II<10>(D, A, B, C, M[11] + 0xBD3AF235);
  136|  32.8k|      II<15>(C, D, A, B, M[2] + 0x2AD7D2BB);
  137|  32.8k|      II<21>(B, C, D, A, M[9] + 0xEB86D391);
  138|       |
  139|  32.8k|      A = (digest[0] += A);
  140|  32.8k|      B = (digest[1] += B);
  141|  32.8k|      C = (digest[2] += C);
  142|  32.8k|      D = (digest[3] += D);
  143|  32.8k|   }
  144|  31.9k|}
_ZN5Botan3MD54initERNSt3__16vectorIjNS_16secure_allocatorIjEEEE:
  146|  38.0k|void MD5::init(digest_type& digest) {
  147|  38.0k|   digest.assign({0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476});
  148|  38.0k|}
_ZN5Botan3MD58add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  158|  81.5k|void MD5::add_data(std::span<const uint8_t> input) {
  159|  81.5k|   m_md.update(input);
  160|  81.5k|}
_ZN5Botan3MD512final_resultENSt3__14spanIhLm18446744073709551615EEE:
  162|  17.0k|void MD5::final_result(std::span<uint8_t> output) {
  163|  17.0k|   m_md.final(output);
  164|  17.0k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12FFILm7EEEvRjjjjj:
   24|   131k|inline void FF(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   25|   131k|   A += choose(B, C, D) + M;
   26|   131k|   A = rotl<S>(A) + B;
   27|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12FFILm12EEEvRjjjjj:
   24|   131k|inline void FF(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   25|   131k|   A += choose(B, C, D) + M;
   26|   131k|   A = rotl<S>(A) + B;
   27|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12FFILm17EEEvRjjjjj:
   24|   131k|inline void FF(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   25|   131k|   A += choose(B, C, D) + M;
   26|   131k|   A = rotl<S>(A) + B;
   27|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12FFILm22EEEvRjjjjj:
   24|   131k|inline void FF(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   25|   131k|   A += choose(B, C, D) + M;
   26|   131k|   A = rotl<S>(A) + B;
   27|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12GGILm5EEEvRjjjjj:
   33|   131k|inline void GG(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   34|   131k|   A += choose(D, B, C) + M;
   35|   131k|   A = rotl<S>(A) + B;
   36|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12GGILm9EEEvRjjjjj:
   33|   131k|inline void GG(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   34|   131k|   A += choose(D, B, C) + M;
   35|   131k|   A = rotl<S>(A) + B;
   36|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12GGILm14EEEvRjjjjj:
   33|   131k|inline void GG(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   34|   131k|   A += choose(D, B, C) + M;
   35|   131k|   A = rotl<S>(A) + B;
   36|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12GGILm20EEEvRjjjjj:
   33|   131k|inline void GG(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   34|   131k|   A += choose(D, B, C) + M;
   35|   131k|   A = rotl<S>(A) + B;
   36|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12HHILm4EEEvRjjjjj:
   42|   131k|inline void HH(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   43|   131k|   A += (B ^ C ^ D) + M;
   44|   131k|   A = rotl<S>(A) + B;
   45|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12HHILm11EEEvRjjjjj:
   42|   131k|inline void HH(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   43|   131k|   A += (B ^ C ^ D) + M;
   44|   131k|   A = rotl<S>(A) + B;
   45|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12HHILm16EEEvRjjjjj:
   42|   131k|inline void HH(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   43|   131k|   A += (B ^ C ^ D) + M;
   44|   131k|   A = rotl<S>(A) + B;
   45|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12HHILm23EEEvRjjjjj:
   42|   131k|inline void HH(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   43|   131k|   A += (B ^ C ^ D) + M;
   44|   131k|   A = rotl<S>(A) + B;
   45|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12IIILm6EEEvRjjjjj:
   51|   131k|inline void II(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   52|       |   // This expr is choose(D, B ^ C, ~C), but that is slower
   53|   131k|   A += (C ^ (B | ~D)) + M;
   54|   131k|   A = rotl<S>(A) + B;
   55|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12IIILm10EEEvRjjjjj:
   51|   131k|inline void II(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   52|       |   // This expr is choose(D, B ^ C, ~C), but that is slower
   53|   131k|   A += (C ^ (B | ~D)) + M;
   54|   131k|   A = rotl<S>(A) + B;
   55|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12IIILm15EEEvRjjjjj:
   51|   131k|inline void II(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   52|       |   // This expr is choose(D, B ^ C, ~C), but that is slower
   53|   131k|   A += (C ^ (B | ~D)) + M;
   54|   131k|   A = rotl<S>(A) + B;
   55|   131k|}
md5.cpp:_ZN5Botan12_GLOBAL__N_12IIILm21EEEvRjjjjj:
   51|   131k|inline void II(uint32_t& A, uint32_t B, uint32_t C, uint32_t D, uint32_t M) {
   52|       |   // This expr is choose(D, B ^ C, ~C), but that is slower
   53|   131k|   A += (C ^ (B | ~D)) + M;
   54|   131k|   A = rotl<S>(A) + B;
   55|   131k|}

_ZN5Botan10RIPEMD_16010compress_nERNSt3__16vectorIjNS_16secure_allocatorIjEEEENS1_4spanIKhLm18446744073709551615EEEm:
   76|  7.37k|void RIPEMD_160::compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
   77|  7.37k|   const uint32_t MAGIC2 = 0x5A827999, MAGIC3 = 0x6ED9EBA1, MAGIC4 = 0x8F1BBCDC, MAGIC5 = 0xA953FD4E,
   78|  7.37k|                  MAGIC6 = 0x50A28BE6, MAGIC7 = 0x5C4DD124, MAGIC8 = 0x6D703EF3, MAGIC9 = 0x7A6D76E9;
   79|  7.37k|   std::array<uint32_t, 16> M;
   80|       |
   81|  7.37k|   BufferSlicer in(input);
   82|       |
   83|  14.9k|   for(size_t i = 0; i != blocks; ++i) {
  ------------------
  |  Branch (83:22): [True: 7.62k, False: 7.37k]
  ------------------
   84|  7.62k|      load_le(M.data(), in.take(block_bytes).data(), M.size());
   85|       |
   86|  7.62k|      uint32_t A1 = digest[0], A2 = A1, B1 = digest[1], B2 = B1, C1 = digest[2], C2 = C1, D1 = digest[3], D2 = D1,
   87|  7.62k|               E1 = digest[4], E2 = E1;
   88|       |
   89|  7.62k|      F1<11>(A1, B1, C1, D1, E1, M[0]);
   90|  7.62k|      F5<8>(A2, B2, C2, D2, E2, M[5] + MAGIC6);
   91|  7.62k|      F1<14>(E1, A1, B1, C1, D1, M[1]);
   92|  7.62k|      F5<9>(E2, A2, B2, C2, D2, M[14] + MAGIC6);
   93|  7.62k|      F1<15>(D1, E1, A1, B1, C1, M[2]);
   94|  7.62k|      F5<9>(D2, E2, A2, B2, C2, M[7] + MAGIC6);
   95|  7.62k|      F1<12>(C1, D1, E1, A1, B1, M[3]);
   96|  7.62k|      F5<11>(C2, D2, E2, A2, B2, M[0] + MAGIC6);
   97|  7.62k|      F1<5>(B1, C1, D1, E1, A1, M[4]);
   98|  7.62k|      F5<13>(B2, C2, D2, E2, A2, M[9] + MAGIC6);
   99|  7.62k|      F1<8>(A1, B1, C1, D1, E1, M[5]);
  100|  7.62k|      F5<15>(A2, B2, C2, D2, E2, M[2] + MAGIC6);
  101|  7.62k|      F1<7>(E1, A1, B1, C1, D1, M[6]);
  102|  7.62k|      F5<15>(E2, A2, B2, C2, D2, M[11] + MAGIC6);
  103|  7.62k|      F1<9>(D1, E1, A1, B1, C1, M[7]);
  104|  7.62k|      F5<5>(D2, E2, A2, B2, C2, M[4] + MAGIC6);
  105|  7.62k|      F1<11>(C1, D1, E1, A1, B1, M[8]);
  106|  7.62k|      F5<7>(C2, D2, E2, A2, B2, M[13] + MAGIC6);
  107|  7.62k|      F1<13>(B1, C1, D1, E1, A1, M[9]);
  108|  7.62k|      F5<7>(B2, C2, D2, E2, A2, M[6] + MAGIC6);
  109|  7.62k|      F1<14>(A1, B1, C1, D1, E1, M[10]);
  110|  7.62k|      F5<8>(A2, B2, C2, D2, E2, M[15] + MAGIC6);
  111|  7.62k|      F1<15>(E1, A1, B1, C1, D1, M[11]);
  112|  7.62k|      F5<11>(E2, A2, B2, C2, D2, M[8] + MAGIC6);
  113|  7.62k|      F1<6>(D1, E1, A1, B1, C1, M[12]);
  114|  7.62k|      F5<14>(D2, E2, A2, B2, C2, M[1] + MAGIC6);
  115|  7.62k|      F1<7>(C1, D1, E1, A1, B1, M[13]);
  116|  7.62k|      F5<14>(C2, D2, E2, A2, B2, M[10] + MAGIC6);
  117|  7.62k|      F1<9>(B1, C1, D1, E1, A1, M[14]);
  118|  7.62k|      F5<12>(B2, C2, D2, E2, A2, M[3] + MAGIC6);
  119|  7.62k|      F1<8>(A1, B1, C1, D1, E1, M[15]);
  120|  7.62k|      F5<6>(A2, B2, C2, D2, E2, M[12] + MAGIC6);
  121|       |
  122|  7.62k|      F2<7>(E1, A1, B1, C1, D1, M[7] + MAGIC2);
  123|  7.62k|      F4<9>(E2, A2, B2, C2, D2, M[6] + MAGIC7);
  124|  7.62k|      F2<6>(D1, E1, A1, B1, C1, M[4] + MAGIC2);
  125|  7.62k|      F4<13>(D2, E2, A2, B2, C2, M[11] + MAGIC7);
  126|  7.62k|      F2<8>(C1, D1, E1, A1, B1, M[13] + MAGIC2);
  127|  7.62k|      F4<15>(C2, D2, E2, A2, B2, M[3] + MAGIC7);
  128|  7.62k|      F2<13>(B1, C1, D1, E1, A1, M[1] + MAGIC2);
  129|  7.62k|      F4<7>(B2, C2, D2, E2, A2, M[7] + MAGIC7);
  130|  7.62k|      F2<11>(A1, B1, C1, D1, E1, M[10] + MAGIC2);
  131|  7.62k|      F4<12>(A2, B2, C2, D2, E2, M[0] + MAGIC7);
  132|  7.62k|      F2<9>(E1, A1, B1, C1, D1, M[6] + MAGIC2);
  133|  7.62k|      F4<8>(E2, A2, B2, C2, D2, M[13] + MAGIC7);
  134|  7.62k|      F2<7>(D1, E1, A1, B1, C1, M[15] + MAGIC2);
  135|  7.62k|      F4<9>(D2, E2, A2, B2, C2, M[5] + MAGIC7);
  136|  7.62k|      F2<15>(C1, D1, E1, A1, B1, M[3] + MAGIC2);
  137|  7.62k|      F4<11>(C2, D2, E2, A2, B2, M[10] + MAGIC7);
  138|  7.62k|      F2<7>(B1, C1, D1, E1, A1, M[12] + MAGIC2);
  139|  7.62k|      F4<7>(B2, C2, D2, E2, A2, M[14] + MAGIC7);
  140|  7.62k|      F2<12>(A1, B1, C1, D1, E1, M[0] + MAGIC2);
  141|  7.62k|      F4<7>(A2, B2, C2, D2, E2, M[15] + MAGIC7);
  142|  7.62k|      F2<15>(E1, A1, B1, C1, D1, M[9] + MAGIC2);
  143|  7.62k|      F4<12>(E2, A2, B2, C2, D2, M[8] + MAGIC7);
  144|  7.62k|      F2<9>(D1, E1, A1, B1, C1, M[5] + MAGIC2);
  145|  7.62k|      F4<7>(D2, E2, A2, B2, C2, M[12] + MAGIC7);
  146|  7.62k|      F2<11>(C1, D1, E1, A1, B1, M[2] + MAGIC2);
  147|  7.62k|      F4<6>(C2, D2, E2, A2, B2, M[4] + MAGIC7);
  148|  7.62k|      F2<7>(B1, C1, D1, E1, A1, M[14] + MAGIC2);
  149|  7.62k|      F4<15>(B2, C2, D2, E2, A2, M[9] + MAGIC7);
  150|  7.62k|      F2<13>(A1, B1, C1, D1, E1, M[11] + MAGIC2);
  151|  7.62k|      F4<13>(A2, B2, C2, D2, E2, M[1] + MAGIC7);
  152|  7.62k|      F2<12>(E1, A1, B1, C1, D1, M[8] + MAGIC2);
  153|  7.62k|      F4<11>(E2, A2, B2, C2, D2, M[2] + MAGIC7);
  154|       |
  155|  7.62k|      F3<11>(D1, E1, A1, B1, C1, M[3] + MAGIC3);
  156|  7.62k|      F3<9>(D2, E2, A2, B2, C2, M[15] + MAGIC8);
  157|  7.62k|      F3<13>(C1, D1, E1, A1, B1, M[10] + MAGIC3);
  158|  7.62k|      F3<7>(C2, D2, E2, A2, B2, M[5] + MAGIC8);
  159|  7.62k|      F3<6>(B1, C1, D1, E1, A1, M[14] + MAGIC3);
  160|  7.62k|      F3<15>(B2, C2, D2, E2, A2, M[1] + MAGIC8);
  161|  7.62k|      F3<7>(A1, B1, C1, D1, E1, M[4] + MAGIC3);
  162|  7.62k|      F3<11>(A2, B2, C2, D2, E2, M[3] + MAGIC8);
  163|  7.62k|      F3<14>(E1, A1, B1, C1, D1, M[9] + MAGIC3);
  164|  7.62k|      F3<8>(E2, A2, B2, C2, D2, M[7] + MAGIC8);
  165|  7.62k|      F3<9>(D1, E1, A1, B1, C1, M[15] + MAGIC3);
  166|  7.62k|      F3<6>(D2, E2, A2, B2, C2, M[14] + MAGIC8);
  167|  7.62k|      F3<13>(C1, D1, E1, A1, B1, M[8] + MAGIC3);
  168|  7.62k|      F3<6>(C2, D2, E2, A2, B2, M[6] + MAGIC8);
  169|  7.62k|      F3<15>(B1, C1, D1, E1, A1, M[1] + MAGIC3);
  170|  7.62k|      F3<14>(B2, C2, D2, E2, A2, M[9] + MAGIC8);
  171|  7.62k|      F3<14>(A1, B1, C1, D1, E1, M[2] + MAGIC3);
  172|  7.62k|      F3<12>(A2, B2, C2, D2, E2, M[11] + MAGIC8);
  173|  7.62k|      F3<8>(E1, A1, B1, C1, D1, M[7] + MAGIC3);
  174|  7.62k|      F3<13>(E2, A2, B2, C2, D2, M[8] + MAGIC8);
  175|  7.62k|      F3<13>(D1, E1, A1, B1, C1, M[0] + MAGIC3);
  176|  7.62k|      F3<5>(D2, E2, A2, B2, C2, M[12] + MAGIC8);
  177|  7.62k|      F3<6>(C1, D1, E1, A1, B1, M[6] + MAGIC3);
  178|  7.62k|      F3<14>(C2, D2, E2, A2, B2, M[2] + MAGIC8);
  179|  7.62k|      F3<5>(B1, C1, D1, E1, A1, M[13] + MAGIC3);
  180|  7.62k|      F3<13>(B2, C2, D2, E2, A2, M[10] + MAGIC8);
  181|  7.62k|      F3<12>(A1, B1, C1, D1, E1, M[11] + MAGIC3);
  182|  7.62k|      F3<13>(A2, B2, C2, D2, E2, M[0] + MAGIC8);
  183|  7.62k|      F3<7>(E1, A1, B1, C1, D1, M[5] + MAGIC3);
  184|  7.62k|      F3<7>(E2, A2, B2, C2, D2, M[4] + MAGIC8);
  185|  7.62k|      F3<5>(D1, E1, A1, B1, C1, M[12] + MAGIC3);
  186|  7.62k|      F3<5>(D2, E2, A2, B2, C2, M[13] + MAGIC8);
  187|       |
  188|  7.62k|      F4<11>(C1, D1, E1, A1, B1, M[1] + MAGIC4);
  189|  7.62k|      F2<15>(C2, D2, E2, A2, B2, M[8] + MAGIC9);
  190|  7.62k|      F4<12>(B1, C1, D1, E1, A1, M[9] + MAGIC4);
  191|  7.62k|      F2<5>(B2, C2, D2, E2, A2, M[6] + MAGIC9);
  192|  7.62k|      F4<14>(A1, B1, C1, D1, E1, M[11] + MAGIC4);
  193|  7.62k|      F2<8>(A2, B2, C2, D2, E2, M[4] + MAGIC9);
  194|  7.62k|      F4<15>(E1, A1, B1, C1, D1, M[10] + MAGIC4);
  195|  7.62k|      F2<11>(E2, A2, B2, C2, D2, M[1] + MAGIC9);
  196|  7.62k|      F4<14>(D1, E1, A1, B1, C1, M[0] + MAGIC4);
  197|  7.62k|      F2<14>(D2, E2, A2, B2, C2, M[3] + MAGIC9);
  198|  7.62k|      F4<15>(C1, D1, E1, A1, B1, M[8] + MAGIC4);
  199|  7.62k|      F2<14>(C2, D2, E2, A2, B2, M[11] + MAGIC9);
  200|  7.62k|      F4<9>(B1, C1, D1, E1, A1, M[12] + MAGIC4);
  201|  7.62k|      F2<6>(B2, C2, D2, E2, A2, M[15] + MAGIC9);
  202|  7.62k|      F4<8>(A1, B1, C1, D1, E1, M[4] + MAGIC4);
  203|  7.62k|      F2<14>(A2, B2, C2, D2, E2, M[0] + MAGIC9);
  204|  7.62k|      F4<9>(E1, A1, B1, C1, D1, M[13] + MAGIC4);
  205|  7.62k|      F2<6>(E2, A2, B2, C2, D2, M[5] + MAGIC9);
  206|  7.62k|      F4<14>(D1, E1, A1, B1, C1, M[3] + MAGIC4);
  207|  7.62k|      F2<9>(D2, E2, A2, B2, C2, M[12] + MAGIC9);
  208|  7.62k|      F4<5>(C1, D1, E1, A1, B1, M[7] + MAGIC4);
  209|  7.62k|      F2<12>(C2, D2, E2, A2, B2, M[2] + MAGIC9);
  210|  7.62k|      F4<6>(B1, C1, D1, E1, A1, M[15] + MAGIC4);
  211|  7.62k|      F2<9>(B2, C2, D2, E2, A2, M[13] + MAGIC9);
  212|  7.62k|      F4<8>(A1, B1, C1, D1, E1, M[14] + MAGIC4);
  213|  7.62k|      F2<12>(A2, B2, C2, D2, E2, M[9] + MAGIC9);
  214|  7.62k|      F4<6>(E1, A1, B1, C1, D1, M[5] + MAGIC4);
  215|  7.62k|      F2<5>(E2, A2, B2, C2, D2, M[7] + MAGIC9);
  216|  7.62k|      F4<5>(D1, E1, A1, B1, C1, M[6] + MAGIC4);
  217|  7.62k|      F2<15>(D2, E2, A2, B2, C2, M[10] + MAGIC9);
  218|  7.62k|      F4<12>(C1, D1, E1, A1, B1, M[2] + MAGIC4);
  219|  7.62k|      F2<8>(C2, D2, E2, A2, B2, M[14] + MAGIC9);
  220|       |
  221|  7.62k|      F5<9>(B1, C1, D1, E1, A1, M[4] + MAGIC5);
  222|  7.62k|      F1<8>(B2, C2, D2, E2, A2, M[12]);
  223|  7.62k|      F5<15>(A1, B1, C1, D1, E1, M[0] + MAGIC5);
  224|  7.62k|      F1<5>(A2, B2, C2, D2, E2, M[15]);
  225|  7.62k|      F5<5>(E1, A1, B1, C1, D1, M[5] + MAGIC5);
  226|  7.62k|      F1<12>(E2, A2, B2, C2, D2, M[10]);
  227|  7.62k|      F5<11>(D1, E1, A1, B1, C1, M[9] + MAGIC5);
  228|  7.62k|      F1<9>(D2, E2, A2, B2, C2, M[4]);
  229|  7.62k|      F5<6>(C1, D1, E1, A1, B1, M[7] + MAGIC5);
  230|  7.62k|      F1<12>(C2, D2, E2, A2, B2, M[1]);
  231|  7.62k|      F5<8>(B1, C1, D1, E1, A1, M[12] + MAGIC5);
  232|  7.62k|      F1<5>(B2, C2, D2, E2, A2, M[5]);
  233|  7.62k|      F5<13>(A1, B1, C1, D1, E1, M[2] + MAGIC5);
  234|  7.62k|      F1<14>(A2, B2, C2, D2, E2, M[8]);
  235|  7.62k|      F5<12>(E1, A1, B1, C1, D1, M[10] + MAGIC5);
  236|  7.62k|      F1<6>(E2, A2, B2, C2, D2, M[7]);
  237|  7.62k|      F5<5>(D1, E1, A1, B1, C1, M[14] + MAGIC5);
  238|  7.62k|      F1<8>(D2, E2, A2, B2, C2, M[6]);
  239|  7.62k|      F5<12>(C1, D1, E1, A1, B1, M[1] + MAGIC5);
  240|  7.62k|      F1<13>(C2, D2, E2, A2, B2, M[2]);
  241|  7.62k|      F5<13>(B1, C1, D1, E1, A1, M[3] + MAGIC5);
  242|  7.62k|      F1<6>(B2, C2, D2, E2, A2, M[13]);
  243|  7.62k|      F5<14>(A1, B1, C1, D1, E1, M[8] + MAGIC5);
  244|  7.62k|      F1<5>(A2, B2, C2, D2, E2, M[14]);
  245|  7.62k|      F5<11>(E1, A1, B1, C1, D1, M[11] + MAGIC5);
  246|  7.62k|      F1<15>(E2, A2, B2, C2, D2, M[0]);
  247|  7.62k|      F5<8>(D1, E1, A1, B1, C1, M[6] + MAGIC5);
  248|  7.62k|      F1<13>(D2, E2, A2, B2, C2, M[3]);
  249|  7.62k|      F5<5>(C1, D1, E1, A1, B1, M[15] + MAGIC5);
  250|  7.62k|      F1<11>(C2, D2, E2, A2, B2, M[9]);
  251|  7.62k|      F5<6>(B1, C1, D1, E1, A1, M[13] + MAGIC5);
  252|  7.62k|      F1<11>(B2, C2, D2, E2, A2, M[11]);
  253|       |
  254|  7.62k|      C1 = digest[1] + C1 + D2;
  255|  7.62k|      digest[1] = digest[2] + D1 + E2;
  256|  7.62k|      digest[2] = digest[3] + E1 + A2;
  257|  7.62k|      digest[3] = digest[4] + A1 + B2;
  258|  7.62k|      digest[4] = digest[0] + B1 + C2;
  259|  7.62k|      digest[0] = C1;
  260|  7.62k|   }
  261|  7.37k|}
_ZN5Botan10RIPEMD_1604initERNSt3__16vectorIjNS_16secure_allocatorIjEEEE:
  263|  6.17k|void RIPEMD_160::init(digest_type& digest) {
  264|  6.17k|   digest.assign({0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0});
  265|  6.17k|}
_ZN5Botan10RIPEMD_1608add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  275|  11.0k|void RIPEMD_160::add_data(std::span<const uint8_t> input) {
  276|  11.0k|   m_md.update(input);
  277|  11.0k|}
_ZN5Botan10RIPEMD_16012final_resultENSt3__14spanIhLm18446744073709551615EEE:
  279|  2.28k|void RIPEMD_160::final_result(std::span<uint8_t> output) {
  280|  2.28k|   m_md.final(output);
  281|  2.28k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm11EEEvRjjS2_jjj:
   25|  30.4k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  30.4k|   A += (B ^ C ^ D) + M;
   27|  30.4k|   A = rotl<S>(A) + E;
   28|  30.4k|   C = rotl<10>(C);
   29|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm8EEEvRjjS2_jjj:
   65|  30.4k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  30.4k|   A += (B ^ (C | ~D)) + M;
   67|  30.4k|   A = rotl<S>(A) + E;
   68|  30.4k|   C = rotl<10>(C);
   69|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm14EEEvRjjS2_jjj:
   25|  22.8k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  22.8k|   A += (B ^ C ^ D) + M;
   27|  22.8k|   A = rotl<S>(A) + E;
   28|  22.8k|   C = rotl<10>(C);
   29|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm9EEEvRjjS2_jjj:
   65|  22.8k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  22.8k|   A += (B ^ (C | ~D)) + M;
   67|  22.8k|   A = rotl<S>(A) + E;
   68|  22.8k|   C = rotl<10>(C);
   69|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm15EEEvRjjS2_jjj:
   25|  22.8k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  22.8k|   A += (B ^ C ^ D) + M;
   27|  22.8k|   A = rotl<S>(A) + E;
   28|  22.8k|   C = rotl<10>(C);
   29|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm12EEEvRjjS2_jjj:
   25|  22.8k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  22.8k|   A += (B ^ C ^ D) + M;
   27|  22.8k|   A = rotl<S>(A) + E;
   28|  22.8k|   C = rotl<10>(C);
   29|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm11EEEvRjjS2_jjj:
   65|  30.4k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  30.4k|   A += (B ^ (C | ~D)) + M;
   67|  30.4k|   A = rotl<S>(A) + E;
   68|  30.4k|   C = rotl<10>(C);
   69|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm5EEEvRjjS2_jjj:
   25|  30.4k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  30.4k|   A += (B ^ C ^ D) + M;
   27|  30.4k|   A = rotl<S>(A) + E;
   28|  30.4k|   C = rotl<10>(C);
   29|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm13EEEvRjjS2_jjj:
   65|  22.8k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  22.8k|   A += (B ^ (C | ~D)) + M;
   67|  22.8k|   A = rotl<S>(A) + E;
   68|  22.8k|   C = rotl<10>(C);
   69|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm8EEEvRjjS2_jjj:
   25|  30.4k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  30.4k|   A += (B ^ C ^ D) + M;
   27|  30.4k|   A = rotl<S>(A) + E;
   28|  30.4k|   C = rotl<10>(C);
   29|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm15EEEvRjjS2_jjj:
   65|  22.8k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  22.8k|   A += (B ^ (C | ~D)) + M;
   67|  22.8k|   A = rotl<S>(A) + E;
   68|  22.8k|   C = rotl<10>(C);
   69|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm7EEEvRjjS2_jjj:
   25|  15.2k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  15.2k|   A += (B ^ C ^ D) + M;
   27|  15.2k|   A = rotl<S>(A) + E;
   28|  15.2k|   C = rotl<10>(C);
   29|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm9EEEvRjjS2_jjj:
   25|  22.8k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  22.8k|   A += (B ^ C ^ D) + M;
   27|  22.8k|   A = rotl<S>(A) + E;
   28|  22.8k|   C = rotl<10>(C);
   29|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm5EEEvRjjS2_jjj:
   65|  30.4k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  30.4k|   A += (B ^ (C | ~D)) + M;
   67|  30.4k|   A = rotl<S>(A) + E;
   68|  30.4k|   C = rotl<10>(C);
   69|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm7EEEvRjjS2_jjj:
   65|  15.2k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  15.2k|   A += (B ^ (C | ~D)) + M;
   67|  15.2k|   A = rotl<S>(A) + E;
   68|  15.2k|   C = rotl<10>(C);
   69|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm13EEEvRjjS2_jjj:
   25|  22.8k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  22.8k|   A += (B ^ C ^ D) + M;
   27|  22.8k|   A = rotl<S>(A) + E;
   28|  22.8k|   C = rotl<10>(C);
   29|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F1ILm6EEEvRjjS2_jjj:
   25|  22.8k|inline void F1(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   26|  22.8k|   A += (B ^ C ^ D) + M;
   27|  22.8k|   A = rotl<S>(A) + E;
   28|  22.8k|   C = rotl<10>(C);
   29|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm14EEEvRjjS2_jjj:
   65|  22.8k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  22.8k|   A += (B ^ (C | ~D)) + M;
   67|  22.8k|   A = rotl<S>(A) + E;
   68|  22.8k|   C = rotl<10>(C);
   69|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm12EEEvRjjS2_jjj:
   65|  22.8k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  22.8k|   A += (B ^ (C | ~D)) + M;
   67|  22.8k|   A = rotl<S>(A) + E;
   68|  22.8k|   C = rotl<10>(C);
   69|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F5ILm6EEEvRjjS2_jjj:
   65|  22.8k|inline void F5(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   66|  22.8k|   A += (B ^ (C | ~D)) + M;
   67|  22.8k|   A = rotl<S>(A) + E;
   68|  22.8k|   C = rotl<10>(C);
   69|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm7EEEvRjjS2_jjj:
   35|  30.4k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  30.4k|   A += choose(B, C, D) + M;
   37|  30.4k|   A = rotl<S>(A) + E;
   38|  30.4k|   C = rotl<10>(C);
   39|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm9EEEvRjjS2_jjj:
   55|  30.4k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  30.4k|   A += choose(D, B, C) + M;
   57|  30.4k|   A = rotl<S>(A) + E;
   58|  30.4k|   C = rotl<10>(C);
   59|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm6EEEvRjjS2_jjj:
   35|  22.8k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  22.8k|   A += choose(B, C, D) + M;
   37|  22.8k|   A = rotl<S>(A) + E;
   38|  22.8k|   C = rotl<10>(C);
   39|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm13EEEvRjjS2_jjj:
   55|  15.2k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  15.2k|   A += choose(D, B, C) + M;
   57|  15.2k|   A = rotl<S>(A) + E;
   58|  15.2k|   C = rotl<10>(C);
   59|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm8EEEvRjjS2_jjj:
   35|  22.8k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  22.8k|   A += choose(B, C, D) + M;
   37|  22.8k|   A = rotl<S>(A) + E;
   38|  22.8k|   C = rotl<10>(C);
   39|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm15EEEvRjjS2_jjj:
   55|  30.4k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  30.4k|   A += choose(D, B, C) + M;
   57|  30.4k|   A = rotl<S>(A) + E;
   58|  30.4k|   C = rotl<10>(C);
   59|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm13EEEvRjjS2_jjj:
   35|  15.2k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  15.2k|   A += choose(B, C, D) + M;
   37|  15.2k|   A = rotl<S>(A) + E;
   38|  15.2k|   C = rotl<10>(C);
   39|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm7EEEvRjjS2_jjj:
   55|  30.4k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  30.4k|   A += choose(D, B, C) + M;
   57|  30.4k|   A = rotl<S>(A) + E;
   58|  30.4k|   C = rotl<10>(C);
   59|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm11EEEvRjjS2_jjj:
   35|  22.8k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  22.8k|   A += choose(B, C, D) + M;
   37|  22.8k|   A = rotl<S>(A) + E;
   38|  22.8k|   C = rotl<10>(C);
   39|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm12EEEvRjjS2_jjj:
   55|  30.4k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  30.4k|   A += choose(D, B, C) + M;
   57|  30.4k|   A = rotl<S>(A) + E;
   58|  30.4k|   C = rotl<10>(C);
   59|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm9EEEvRjjS2_jjj:
   35|  30.4k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  30.4k|   A += choose(B, C, D) + M;
   37|  30.4k|   A = rotl<S>(A) + E;
   38|  30.4k|   C = rotl<10>(C);
   39|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm8EEEvRjjS2_jjj:
   55|  22.8k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  22.8k|   A += choose(D, B, C) + M;
   57|  22.8k|   A = rotl<S>(A) + E;
   58|  22.8k|   C = rotl<10>(C);
   59|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm15EEEvRjjS2_jjj:
   35|  30.4k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  30.4k|   A += choose(B, C, D) + M;
   37|  30.4k|   A = rotl<S>(A) + E;
   38|  30.4k|   C = rotl<10>(C);
   39|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm11EEEvRjjS2_jjj:
   55|  22.8k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  22.8k|   A += choose(D, B, C) + M;
   57|  22.8k|   A = rotl<S>(A) + E;
   58|  22.8k|   C = rotl<10>(C);
   59|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm12EEEvRjjS2_jjj:
   35|  30.4k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  30.4k|   A += choose(B, C, D) + M;
   37|  30.4k|   A = rotl<S>(A) + E;
   38|  30.4k|   C = rotl<10>(C);
   39|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm6EEEvRjjS2_jjj:
   55|  22.8k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  22.8k|   A += choose(D, B, C) + M;
   57|  22.8k|   A = rotl<S>(A) + E;
   58|  22.8k|   C = rotl<10>(C);
   59|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm11EEEvRjjS2_jjj:
   45|  15.2k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  15.2k|   A += (D ^ (B | ~C)) + M;
   47|  15.2k|   A = rotl<S>(A) + E;
   48|  15.2k|   C = rotl<10>(C);
   49|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm9EEEvRjjS2_jjj:
   45|  15.2k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  15.2k|   A += (D ^ (B | ~C)) + M;
   47|  15.2k|   A = rotl<S>(A) + E;
   48|  15.2k|   C = rotl<10>(C);
   49|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm13EEEvRjjS2_jjj:
   45|  45.7k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  45.7k|   A += (D ^ (B | ~C)) + M;
   47|  45.7k|   A = rotl<S>(A) + E;
   48|  45.7k|   C = rotl<10>(C);
   49|  45.7k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm7EEEvRjjS2_jjj:
   45|  30.4k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  30.4k|   A += (D ^ (B | ~C)) + M;
   47|  30.4k|   A = rotl<S>(A) + E;
   48|  30.4k|   C = rotl<10>(C);
   49|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm6EEEvRjjS2_jjj:
   45|  30.4k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  30.4k|   A += (D ^ (B | ~C)) + M;
   47|  30.4k|   A = rotl<S>(A) + E;
   48|  30.4k|   C = rotl<10>(C);
   49|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm15EEEvRjjS2_jjj:
   45|  15.2k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  15.2k|   A += (D ^ (B | ~C)) + M;
   47|  15.2k|   A = rotl<S>(A) + E;
   48|  15.2k|   C = rotl<10>(C);
   49|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm14EEEvRjjS2_jjj:
   45|  30.4k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  30.4k|   A += (D ^ (B | ~C)) + M;
   47|  30.4k|   A = rotl<S>(A) + E;
   48|  30.4k|   C = rotl<10>(C);
   49|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm8EEEvRjjS2_jjj:
   45|  15.2k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  15.2k|   A += (D ^ (B | ~C)) + M;
   47|  15.2k|   A = rotl<S>(A) + E;
   48|  15.2k|   C = rotl<10>(C);
   49|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm12EEEvRjjS2_jjj:
   45|  15.2k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  15.2k|   A += (D ^ (B | ~C)) + M;
   47|  15.2k|   A = rotl<S>(A) + E;
   48|  15.2k|   C = rotl<10>(C);
   49|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F3ILm5EEEvRjjS2_jjj:
   45|  30.4k|inline void F3(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   46|  30.4k|   A += (D ^ (B | ~C)) + M;
   47|  30.4k|   A = rotl<S>(A) + E;
   48|  30.4k|   C = rotl<10>(C);
   49|  30.4k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm5EEEvRjjS2_jjj:
   35|  15.2k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  15.2k|   A += choose(B, C, D) + M;
   37|  15.2k|   A = rotl<S>(A) + E;
   38|  15.2k|   C = rotl<10>(C);
   39|  15.2k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm14EEEvRjjS2_jjj:
   55|  22.8k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  22.8k|   A += choose(D, B, C) + M;
   57|  22.8k|   A = rotl<S>(A) + E;
   58|  22.8k|   C = rotl<10>(C);
   59|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F2ILm14EEEvRjjS2_jjj:
   35|  22.8k|inline void F2(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   36|  22.8k|   A += choose(B, C, D) + M;
   37|  22.8k|   A = rotl<S>(A) + E;
   38|  22.8k|   C = rotl<10>(C);
   39|  22.8k|}
rmd160.cpp:_ZN5Botan12_GLOBAL__N_12F4ILm5EEEvRjjS2_jjj:
   55|  15.2k|inline void F4(uint32_t& A, uint32_t B, uint32_t& C, uint32_t D, uint32_t E, uint32_t M) {
   56|  15.2k|   A += choose(D, B, C) + M;
   57|  15.2k|   A = rotl<S>(A) + E;
   58|  15.2k|   C = rotl<10>(C);
   59|  15.2k|}

_ZN5Botan5SHA_110compress_nERNSt3__16vectorIjNS_16secure_allocatorIjEEEENS1_4spanIKhLm18446744073709551615EEEm:
   63|  1.52k|void SHA_1::compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
   64|  1.52k|   using namespace SHA1_F;
   65|       |
   66|       |#if defined(BOTAN_HAS_SHA1_X86_SHA_NI)
   67|       |   if(CPUID::has_intel_sha()) {
   68|       |      return sha1_compress_x86(digest, input, blocks);
   69|       |   }
   70|       |#endif
   71|       |
   72|       |#if defined(BOTAN_HAS_SHA1_ARMV8)
   73|       |   if(CPUID::has_arm_sha1()) {
   74|       |      return sha1_armv8_compress_n(digest, input, blocks);
   75|       |   }
   76|       |#endif
   77|       |
   78|       |#if defined(BOTAN_HAS_SHA1_SSE2)
   79|       |   if(CPUID::has_sse2()) {
   80|       |      return sse2_compress_n(digest, input, blocks);
   81|       |   }
   82|       |
   83|       |#endif
   84|       |
   85|  1.52k|   uint32_t A = digest[0], B = digest[1], C = digest[2], D = digest[3], E = digest[4];
   86|  1.52k|   std::array<uint32_t, 80> W;
   87|       |
   88|  1.52k|   BufferSlicer in(input);
   89|       |
   90|  3.05k|   for(size_t i = 0; i != blocks; ++i) {
  ------------------
  |  Branch (90:22): [True: 1.52k, False: 1.52k]
  ------------------
   91|  1.52k|      load_be(W.data(), in.take(block_bytes).data(), 16);
   92|       |
   93|  13.7k|      for(size_t j = 16; j != 80; j += 8) {
  ------------------
  |  Branch (93:26): [True: 12.2k, False: 1.52k]
  ------------------
   94|  12.2k|         W[j] = rotl<1>(W[j - 3] ^ W[j - 8] ^ W[j - 14] ^ W[j - 16]);
   95|  12.2k|         W[j + 1] = rotl<1>(W[j - 2] ^ W[j - 7] ^ W[j - 13] ^ W[j - 15]);
   96|  12.2k|         W[j + 2] = rotl<1>(W[j - 1] ^ W[j - 6] ^ W[j - 12] ^ W[j - 14]);
   97|  12.2k|         W[j + 3] = rotl<1>(W[j] ^ W[j - 5] ^ W[j - 11] ^ W[j - 13]);
   98|  12.2k|         W[j + 4] = rotl<1>(W[j + 1] ^ W[j - 4] ^ W[j - 10] ^ W[j - 12]);
   99|  12.2k|         W[j + 5] = rotl<1>(W[j + 2] ^ W[j - 3] ^ W[j - 9] ^ W[j - 11]);
  100|  12.2k|         W[j + 6] = rotl<1>(W[j + 3] ^ W[j - 2] ^ W[j - 8] ^ W[j - 10]);
  101|  12.2k|         W[j + 7] = rotl<1>(W[j + 4] ^ W[j - 1] ^ W[j - 7] ^ W[j - 9]);
  102|  12.2k|      }
  103|       |
  104|  1.52k|      F1(A, B, C, D, E, W[0]);
  105|  1.52k|      F1(E, A, B, C, D, W[1]);
  106|  1.52k|      F1(D, E, A, B, C, W[2]);
  107|  1.52k|      F1(C, D, E, A, B, W[3]);
  108|  1.52k|      F1(B, C, D, E, A, W[4]);
  109|  1.52k|      F1(A, B, C, D, E, W[5]);
  110|  1.52k|      F1(E, A, B, C, D, W[6]);
  111|  1.52k|      F1(D, E, A, B, C, W[7]);
  112|  1.52k|      F1(C, D, E, A, B, W[8]);
  113|  1.52k|      F1(B, C, D, E, A, W[9]);
  114|  1.52k|      F1(A, B, C, D, E, W[10]);
  115|  1.52k|      F1(E, A, B, C, D, W[11]);
  116|  1.52k|      F1(D, E, A, B, C, W[12]);
  117|  1.52k|      F1(C, D, E, A, B, W[13]);
  118|  1.52k|      F1(B, C, D, E, A, W[14]);
  119|  1.52k|      F1(A, B, C, D, E, W[15]);
  120|  1.52k|      F1(E, A, B, C, D, W[16]);
  121|  1.52k|      F1(D, E, A, B, C, W[17]);
  122|  1.52k|      F1(C, D, E, A, B, W[18]);
  123|  1.52k|      F1(B, C, D, E, A, W[19]);
  124|       |
  125|  1.52k|      F2(A, B, C, D, E, W[20]);
  126|  1.52k|      F2(E, A, B, C, D, W[21]);
  127|  1.52k|      F2(D, E, A, B, C, W[22]);
  128|  1.52k|      F2(C, D, E, A, B, W[23]);
  129|  1.52k|      F2(B, C, D, E, A, W[24]);
  130|  1.52k|      F2(A, B, C, D, E, W[25]);
  131|  1.52k|      F2(E, A, B, C, D, W[26]);
  132|  1.52k|      F2(D, E, A, B, C, W[27]);
  133|  1.52k|      F2(C, D, E, A, B, W[28]);
  134|  1.52k|      F2(B, C, D, E, A, W[29]);
  135|  1.52k|      F2(A, B, C, D, E, W[30]);
  136|  1.52k|      F2(E, A, B, C, D, W[31]);
  137|  1.52k|      F2(D, E, A, B, C, W[32]);
  138|  1.52k|      F2(C, D, E, A, B, W[33]);
  139|  1.52k|      F2(B, C, D, E, A, W[34]);
  140|  1.52k|      F2(A, B, C, D, E, W[35]);
  141|  1.52k|      F2(E, A, B, C, D, W[36]);
  142|  1.52k|      F2(D, E, A, B, C, W[37]);
  143|  1.52k|      F2(C, D, E, A, B, W[38]);
  144|  1.52k|      F2(B, C, D, E, A, W[39]);
  145|       |
  146|  1.52k|      F3(A, B, C, D, E, W[40]);
  147|  1.52k|      F3(E, A, B, C, D, W[41]);
  148|  1.52k|      F3(D, E, A, B, C, W[42]);
  149|  1.52k|      F3(C, D, E, A, B, W[43]);
  150|  1.52k|      F3(B, C, D, E, A, W[44]);
  151|  1.52k|      F3(A, B, C, D, E, W[45]);
  152|  1.52k|      F3(E, A, B, C, D, W[46]);
  153|  1.52k|      F3(D, E, A, B, C, W[47]);
  154|  1.52k|      F3(C, D, E, A, B, W[48]);
  155|  1.52k|      F3(B, C, D, E, A, W[49]);
  156|  1.52k|      F3(A, B, C, D, E, W[50]);
  157|  1.52k|      F3(E, A, B, C, D, W[51]);
  158|  1.52k|      F3(D, E, A, B, C, W[52]);
  159|  1.52k|      F3(C, D, E, A, B, W[53]);
  160|  1.52k|      F3(B, C, D, E, A, W[54]);
  161|  1.52k|      F3(A, B, C, D, E, W[55]);
  162|  1.52k|      F3(E, A, B, C, D, W[56]);
  163|  1.52k|      F3(D, E, A, B, C, W[57]);
  164|  1.52k|      F3(C, D, E, A, B, W[58]);
  165|  1.52k|      F3(B, C, D, E, A, W[59]);
  166|       |
  167|  1.52k|      F4(A, B, C, D, E, W[60]);
  168|  1.52k|      F4(E, A, B, C, D, W[61]);
  169|  1.52k|      F4(D, E, A, B, C, W[62]);
  170|  1.52k|      F4(C, D, E, A, B, W[63]);
  171|  1.52k|      F4(B, C, D, E, A, W[64]);
  172|  1.52k|      F4(A, B, C, D, E, W[65]);
  173|  1.52k|      F4(E, A, B, C, D, W[66]);
  174|  1.52k|      F4(D, E, A, B, C, W[67]);
  175|  1.52k|      F4(C, D, E, A, B, W[68]);
  176|  1.52k|      F4(B, C, D, E, A, W[69]);
  177|  1.52k|      F4(A, B, C, D, E, W[70]);
  178|  1.52k|      F4(E, A, B, C, D, W[71]);
  179|  1.52k|      F4(D, E, A, B, C, W[72]);
  180|  1.52k|      F4(C, D, E, A, B, W[73]);
  181|  1.52k|      F4(B, C, D, E, A, W[74]);
  182|  1.52k|      F4(A, B, C, D, E, W[75]);
  183|  1.52k|      F4(E, A, B, C, D, W[76]);
  184|  1.52k|      F4(D, E, A, B, C, W[77]);
  185|  1.52k|      F4(C, D, E, A, B, W[78]);
  186|  1.52k|      F4(B, C, D, E, A, W[79]);
  187|       |
  188|  1.52k|      A = (digest[0] += A);
  189|  1.52k|      B = (digest[1] += B);
  190|  1.52k|      C = (digest[2] += C);
  191|  1.52k|      D = (digest[3] += D);
  192|  1.52k|      E = (digest[4] += E);
  193|  1.52k|   }
  194|  1.52k|}
_ZN5Botan5SHA_14initERNSt3__16vectorIjNS_16secure_allocatorIjEEEE:
  199|  2.42k|void SHA_1::init(digest_type& digest) {
  200|  2.42k|   digest.assign({0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0});
  201|  2.42k|}
_ZN5Botan5SHA_18add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  233|  3.43k|void SHA_1::add_data(std::span<const uint8_t> input) {
  234|  3.43k|   m_md.update(input);
  235|  3.43k|}
_ZN5Botan5SHA_112final_resultENSt3__14spanIhLm18446744073709551615EEE:
  237|    382|void SHA_1::final_result(std::span<uint8_t> output) {
  238|    382|   m_md.final(output);
  239|    382|}
sha1.cpp:_ZN5Botan6SHA1_F12_GLOBAL__N_12F1EjRjjjS2_j:
   27|  30.5k|inline void F1(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
   28|  30.5k|   E += choose(B, C, D) + msg + 0x5A827999 + rotl<5>(A);
   29|  30.5k|   B = rotl<30>(B);
   30|  30.5k|}
sha1.cpp:_ZN5Botan6SHA1_F12_GLOBAL__N_12F2EjRjjjS2_j:
   35|  30.5k|inline void F2(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
   36|  30.5k|   E += (B ^ C ^ D) + msg + 0x6ED9EBA1 + rotl<5>(A);
   37|  30.5k|   B = rotl<30>(B);
   38|  30.5k|}
sha1.cpp:_ZN5Botan6SHA1_F12_GLOBAL__N_12F3EjRjjjS2_j:
   43|  30.5k|inline void F3(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
   44|  30.5k|   E += majority(B, C, D) + msg + 0x8F1BBCDC + rotl<5>(A);
   45|  30.5k|   B = rotl<30>(B);
   46|  30.5k|}
sha1.cpp:_ZN5Botan6SHA1_F12_GLOBAL__N_12F4EjRjjjS2_j:
   51|  30.5k|inline void F4(uint32_t A, uint32_t& B, uint32_t C, uint32_t D, uint32_t& E, uint32_t msg) {
   52|  30.5k|   E += (B ^ C ^ D) + msg + 0xCA62C1D6 + rotl<5>(A);
   53|  30.5k|   B = rotl<30>(B);
   54|  30.5k|}

_ZN5Botan7SHA_25615compress_digestERNSt3__16vectorIjNS_16secure_allocatorIjEEEENS1_4spanIKhLm18446744073709551615EEEm:
   49|   112k|void SHA_256::compress_digest(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
   50|       |#if defined(BOTAN_HAS_SHA2_32_X86)
   51|       |   if(CPUID::has_intel_sha()) {
   52|       |      return SHA_256::compress_digest_x86(digest, input, blocks);
   53|       |   }
   54|       |#endif
   55|       |
   56|       |#if defined(BOTAN_HAS_SHA2_32_X86_BMI2)
   57|       |   if(CPUID::has_bmi2()) {
   58|       |      return SHA_256::compress_digest_x86_bmi2(digest, input, blocks);
   59|       |   }
   60|       |#endif
   61|       |
   62|       |#if defined(BOTAN_HAS_SHA2_32_ARMV8)
   63|       |   if(CPUID::has_arm_sha2()) {
   64|       |      return SHA_256::compress_digest_armv8(digest, input, blocks);
   65|       |   }
   66|       |#endif
   67|       |
   68|   112k|   uint32_t A = digest[0], B = digest[1], C = digest[2], D = digest[3], E = digest[4], F = digest[5], G = digest[6],
   69|   112k|            H = digest[7];
   70|       |
   71|   112k|   BufferSlicer in(input);
   72|       |
   73|   309k|   for(size_t i = 0; i != blocks; ++i) {
  ------------------
  |  Branch (73:22): [True: 196k, False: 112k]
  ------------------
   74|   196k|      const auto block = in.take(block_bytes);
   75|       |
   76|   196k|      uint32_t W00 = load_be<uint32_t>(block.data(), 0);
   77|   196k|      uint32_t W01 = load_be<uint32_t>(block.data(), 1);
   78|   196k|      uint32_t W02 = load_be<uint32_t>(block.data(), 2);
   79|   196k|      uint32_t W03 = load_be<uint32_t>(block.data(), 3);
   80|   196k|      uint32_t W04 = load_be<uint32_t>(block.data(), 4);
   81|   196k|      uint32_t W05 = load_be<uint32_t>(block.data(), 5);
   82|   196k|      uint32_t W06 = load_be<uint32_t>(block.data(), 6);
   83|   196k|      uint32_t W07 = load_be<uint32_t>(block.data(), 7);
   84|   196k|      uint32_t W08 = load_be<uint32_t>(block.data(), 8);
   85|   196k|      uint32_t W09 = load_be<uint32_t>(block.data(), 9);
   86|   196k|      uint32_t W10 = load_be<uint32_t>(block.data(), 10);
   87|   196k|      uint32_t W11 = load_be<uint32_t>(block.data(), 11);
   88|   196k|      uint32_t W12 = load_be<uint32_t>(block.data(), 12);
   89|   196k|      uint32_t W13 = load_be<uint32_t>(block.data(), 13);
   90|   196k|      uint32_t W14 = load_be<uint32_t>(block.data(), 14);
   91|   196k|      uint32_t W15 = load_be<uint32_t>(block.data(), 15);
   92|       |
   93|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x428A2F98);
   94|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x71374491);
   95|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xB5C0FBCF);
   96|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xE9B5DBA5);
   97|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x3956C25B);
   98|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x59F111F1);
   99|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x923F82A4);
  100|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0xAB1C5ED5);
  101|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xD807AA98);
  102|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x12835B01);
  103|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x243185BE);
  104|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x550C7DC3);
  105|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x72BE5D74);
  106|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x80DEB1FE);
  107|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x9BDC06A7);
  108|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC19BF174);
  109|       |
  110|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xE49B69C1);
  111|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xEFBE4786);
  112|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x0FC19DC6);
  113|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x240CA1CC);
  114|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x2DE92C6F);
  115|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4A7484AA);
  116|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5CB0A9DC);
  117|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x76F988DA);
  118|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x983E5152);
  119|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA831C66D);
  120|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xB00327C8);
  121|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xBF597FC7);
  122|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xC6E00BF3);
  123|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD5A79147);
  124|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x06CA6351);
  125|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x14292967);
  126|       |
  127|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x27B70A85);
  128|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x2E1B2138);
  129|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x4D2C6DFC);
  130|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x53380D13);
  131|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x650A7354);
  132|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x766A0ABB);
  133|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x81C2C92E);
  134|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x92722C85);
  135|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xA2BFE8A1);
  136|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA81A664B);
  137|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xC24B8B70);
  138|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xC76C51A3);
  139|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xD192E819);
  140|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD6990624);
  141|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xF40E3585);
  142|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x106AA070);
  143|       |
  144|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x19A4C116);
  145|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x1E376C08);
  146|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x2748774C);
  147|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x34B0BCB5);
  148|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x391C0CB3);
  149|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4ED8AA4A);
  150|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5B9CCA4F);
  151|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x682E6FF3);
  152|   196k|      SHA2_32_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x748F82EE);
  153|   196k|      SHA2_32_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x78A5636F);
  154|   196k|      SHA2_32_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x84C87814);
  155|   196k|      SHA2_32_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x8CC70208);
  156|   196k|      SHA2_32_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x90BEFFFA);
  157|   196k|      SHA2_32_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xA4506CEB);
  158|   196k|      SHA2_32_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xBEF9A3F7);
  159|   196k|      SHA2_32_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC67178F2);
  160|       |
  161|   196k|      A = (digest[0] += A);
  162|   196k|      B = (digest[1] += B);
  163|   196k|      C = (digest[2] += C);
  164|   196k|      D = (digest[3] += D);
  165|   196k|      E = (digest[4] += E);
  166|   196k|      F = (digest[5] += F);
  167|   196k|      G = (digest[6] += G);
  168|   196k|      H = (digest[7] += H);
  169|   196k|   }
  170|   112k|}
_ZN5Botan7SHA_22410compress_nERNSt3__16vectorIjNS_16secure_allocatorIjEEEENS1_4spanIKhLm18446744073709551615EEEm:
  176|  7.10k|void SHA_224::compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
  177|  7.10k|   SHA_256::compress_digest(digest, input, blocks);
  178|  7.10k|}
_ZN5Botan7SHA_2244initERNSt3__16vectorIjNS_16secure_allocatorIjEEEE:
  180|  13.6k|void SHA_224::init(digest_type& digest) {
  181|  13.6k|   digest.assign({0xC1059ED8, 0x367CD507, 0x3070DD17, 0xF70E5939, 0xFFC00B31, 0x68581511, 0x64F98FA7, 0xBEFA4FA4});
  182|  13.6k|}
_ZN5Botan7SHA_2248add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  192|  16.7k|void SHA_224::add_data(std::span<const uint8_t> input) {
  193|  16.7k|   m_md.update(input);
  194|  16.7k|}
_ZN5Botan7SHA_22412final_resultENSt3__14spanIhLm18446744073709551615EEE:
  196|  4.81k|void SHA_224::final_result(std::span<uint8_t> output) {
  197|  4.81k|   m_md.final(output);
  198|  4.81k|}
_ZN5Botan7SHA_25610compress_nERNSt3__16vectorIjNS_16secure_allocatorIjEEEENS1_4spanIKhLm18446744073709551615EEEm:
  204|   105k|void SHA_256::compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
  205|   105k|   SHA_256::compress_digest(digest, input, blocks);
  206|   105k|}
_ZN5Botan7SHA_2564initERNSt3__16vectorIjNS_16secure_allocatorIjEEEE:
  208|  93.2k|void SHA_256::init(digest_type& digest) {
  209|  93.2k|   digest.assign({0x6A09E667, 0xBB67AE85, 0x3C6EF372, 0xA54FF53A, 0x510E527F, 0x9B05688C, 0x1F83D9AB, 0x5BE0CD19});
  210|  93.2k|}
_ZN5Botan7SHA_2568add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  220|   162k|void SHA_256::add_data(std::span<const uint8_t> input) {
  221|   162k|   m_md.update(input);
  222|   162k|}
_ZN5Botan7SHA_25612final_resultENSt3__14spanIhLm18446744073709551615EEE:
  224|  38.7k|void SHA_256::final_result(std::span<uint8_t> output) {
  225|  38.7k|   m_md.final(output);
  226|  38.7k|}

_ZN5Botan7SHA_51215compress_digestERNSt3__16vectorImNS_16secure_allocatorImEEEENS1_4spanIKhLm18446744073709551615EEEm:
   43|  3.20M|void SHA_512::compress_digest(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
   44|       |#if defined(BOTAN_HAS_SHA2_64_BMI2)
   45|       |   if(CPUID::has_bmi2()) {
   46|       |      return compress_digest_bmi2(digest, input, blocks);
   47|       |   }
   48|       |#endif
   49|       |
   50|       |#if defined(BOTAN_HAS_SHA2_64_ARMV8)
   51|       |   if(CPUID::has_arm_sha2_512()) {
   52|       |      return compress_digest_armv8(digest, input, blocks);
   53|       |   }
   54|       |#endif
   55|       |
   56|  3.20M|   uint64_t A = digest[0], B = digest[1], C = digest[2], D = digest[3], E = digest[4], F = digest[5], G = digest[6],
   57|  3.20M|            H = digest[7];
   58|       |
   59|  3.20M|   BufferSlicer in(input);
   60|       |
   61|  6.42M|   for(size_t i = 0; i != blocks; ++i) {
  ------------------
  |  Branch (61:22): [True: 3.22M, False: 3.20M]
  ------------------
   62|  3.22M|      const auto block = in.take(block_bytes);
   63|       |
   64|  3.22M|      uint64_t W00 = load_be<uint64_t>(block.data(), 0);
   65|  3.22M|      uint64_t W01 = load_be<uint64_t>(block.data(), 1);
   66|  3.22M|      uint64_t W02 = load_be<uint64_t>(block.data(), 2);
   67|  3.22M|      uint64_t W03 = load_be<uint64_t>(block.data(), 3);
   68|  3.22M|      uint64_t W04 = load_be<uint64_t>(block.data(), 4);
   69|  3.22M|      uint64_t W05 = load_be<uint64_t>(block.data(), 5);
   70|  3.22M|      uint64_t W06 = load_be<uint64_t>(block.data(), 6);
   71|  3.22M|      uint64_t W07 = load_be<uint64_t>(block.data(), 7);
   72|  3.22M|      uint64_t W08 = load_be<uint64_t>(block.data(), 8);
   73|  3.22M|      uint64_t W09 = load_be<uint64_t>(block.data(), 9);
   74|  3.22M|      uint64_t W10 = load_be<uint64_t>(block.data(), 10);
   75|  3.22M|      uint64_t W11 = load_be<uint64_t>(block.data(), 11);
   76|  3.22M|      uint64_t W12 = load_be<uint64_t>(block.data(), 12);
   77|  3.22M|      uint64_t W13 = load_be<uint64_t>(block.data(), 13);
   78|  3.22M|      uint64_t W14 = load_be<uint64_t>(block.data(), 14);
   79|  3.22M|      uint64_t W15 = load_be<uint64_t>(block.data(), 15);
   80|       |
   81|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x428A2F98D728AE22);
   82|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x7137449123EF65CD);
   83|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xB5C0FBCFEC4D3B2F);
   84|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xE9B5DBA58189DBBC);
   85|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x3956C25BF348B538);
   86|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x59F111F1B605D019);
   87|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x923F82A4AF194F9B);
   88|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0xAB1C5ED5DA6D8118);
   89|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xD807AA98A3030242);
   90|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x12835B0145706FBE);
   91|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x243185BE4EE4B28C);
   92|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x550C7DC3D5FFB4E2);
   93|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x72BE5D74F27B896F);
   94|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x80DEB1FE3B1696B1);
   95|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x9BDC06A725C71235);
   96|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC19BF174CF692694);
   97|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xE49B69C19EF14AD2);
   98|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xEFBE4786384F25E3);
   99|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x0FC19DC68B8CD5B5);
  100|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x240CA1CC77AC9C65);
  101|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x2DE92C6F592B0275);
  102|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4A7484AA6EA6E483);
  103|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5CB0A9DCBD41FBD4);
  104|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x76F988DA831153B5);
  105|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x983E5152EE66DFAB);
  106|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA831C66D2DB43210);
  107|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xB00327C898FB213F);
  108|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xBF597FC7BEEF0EE4);
  109|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xC6E00BF33DA88FC2);
  110|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD5A79147930AA725);
  111|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x06CA6351E003826F);
  112|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x142929670A0E6E70);
  113|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x27B70A8546D22FFC);
  114|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x2E1B21385C26C926);
  115|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x4D2C6DFC5AC42AED);
  116|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x53380D139D95B3DF);
  117|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x650A73548BAF63DE);
  118|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x766A0ABB3C77B2A8);
  119|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x81C2C92E47EDAEE6);
  120|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x92722C851482353B);
  121|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0xA2BFE8A14CF10364);
  122|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0xA81A664BBC423001);
  123|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0xC24B8B70D0F89791);
  124|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0xC76C51A30654BE30);
  125|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0xD192E819D6EF5218);
  126|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xD69906245565A910);
  127|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xF40E35855771202A);
  128|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x106AA07032BBD1B8);
  129|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0x19A4C116B8D2D0C8);
  130|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0x1E376C085141AB53);
  131|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0x2748774CDF8EEB99);
  132|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0x34B0BCB5E19B48A8);
  133|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x391C0CB3C5C95A63);
  134|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x4ED8AA4AE3418ACB);
  135|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x5B9CCA4F7763E373);
  136|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x682E6FF3D6B2B8A3);
  137|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x748F82EE5DEFB2FC);
  138|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x78A5636F43172F60);
  139|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x84C87814A1F0AB72);
  140|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x8CC702081A6439EC);
  141|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x90BEFFFA23631E28);
  142|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0xA4506CEBDE82BDE9);
  143|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0xBEF9A3F7B2C67915);
  144|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0xC67178F2E372532B);
  145|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W00, W14, W09, W01, 0xCA273ECEEA26619C);
  146|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W01, W15, W10, W02, 0xD186B8C721C0C207);
  147|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W02, W00, W11, W03, 0xEADA7DD6CDE0EB1E);
  148|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W03, W01, W12, W04, 0xF57D4F7FEE6ED178);
  149|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W04, W02, W13, W05, 0x06F067AA72176FBA);
  150|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W05, W03, W14, W06, 0x0A637DC5A2C898A6);
  151|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W06, W04, W15, W07, 0x113F9804BEF90DAE);
  152|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W07, W05, W00, W08, 0x1B710B35131C471B);
  153|  3.22M|      SHA2_64_F(A, B, C, D, E, F, G, H, W08, W06, W01, W09, 0x28DB77F523047D84);
  154|  3.22M|      SHA2_64_F(H, A, B, C, D, E, F, G, W09, W07, W02, W10, 0x32CAAB7B40C72493);
  155|  3.22M|      SHA2_64_F(G, H, A, B, C, D, E, F, W10, W08, W03, W11, 0x3C9EBE0A15C9BEBC);
  156|  3.22M|      SHA2_64_F(F, G, H, A, B, C, D, E, W11, W09, W04, W12, 0x431D67C49C100D4C);
  157|  3.22M|      SHA2_64_F(E, F, G, H, A, B, C, D, W12, W10, W05, W13, 0x4CC5D4BECB3E42B6);
  158|  3.22M|      SHA2_64_F(D, E, F, G, H, A, B, C, W13, W11, W06, W14, 0x597F299CFC657E2A);
  159|  3.22M|      SHA2_64_F(C, D, E, F, G, H, A, B, W14, W12, W07, W15, 0x5FCB6FAB3AD6FAEC);
  160|  3.22M|      SHA2_64_F(B, C, D, E, F, G, H, A, W15, W13, W08, W00, 0x6C44198C4A475817);
  161|       |
  162|  3.22M|      A = (digest[0] += A);
  163|  3.22M|      B = (digest[1] += B);
  164|  3.22M|      C = (digest[2] += C);
  165|  3.22M|      D = (digest[3] += D);
  166|  3.22M|      E = (digest[4] += E);
  167|  3.22M|      F = (digest[5] += F);
  168|  3.22M|      G = (digest[6] += G);
  169|  3.22M|      H = (digest[7] += H);
  170|  3.22M|   }
  171|  3.20M|}
_ZN5Botan7SHA_38410compress_nERNSt3__16vectorImNS_16secure_allocatorImEEEENS1_4spanIKhLm18446744073709551615EEEm:
  189|  26.3k|void SHA_384::compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
  190|  26.3k|   SHA_512::compress_digest(digest, input, blocks);
  191|  26.3k|}
_ZN5Botan7SHA_51210compress_nERNSt3__16vectorImNS_16secure_allocatorImEEEENS1_4spanIKhLm18446744073709551615EEEm:
  193|  3.17M|void SHA_512::compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
  194|  3.17M|   SHA_512::compress_digest(digest, input, blocks);
  195|  3.17M|}
_ZN5Botan7SHA_3844initERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  208|  38.2k|void SHA_384::init(digest_type& digest) {
  209|  38.2k|   digest.assign({0xCBBB9D5DC1059ED8,
  210|  38.2k|                  0x629A292A367CD507,
  211|  38.2k|                  0x9159015A3070DD17,
  212|  38.2k|                  0x152FECD8F70E5939,
  213|  38.2k|                  0x67332667FFC00B31,
  214|  38.2k|                  0x8EB44A8768581511,
  215|  38.2k|                  0xDB0C2E0D64F98FA7,
  216|  38.2k|                  0x47B5481DBEFA4FA4});
  217|  38.2k|}
_ZN5Botan7SHA_5124initERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  219|  1.94M|void SHA_512::init(digest_type& digest) {
  220|  1.94M|   digest.assign({0x6A09E667F3BCC908,
  221|  1.94M|                  0xBB67AE8584CAA73B,
  222|  1.94M|                  0x3C6EF372FE94F82B,
  223|  1.94M|                  0xA54FF53A5F1D36F1,
  224|  1.94M|                  0x510E527FADE682D1,
  225|  1.94M|                  0x9B05688C2B3E6C1F,
  226|  1.94M|                  0x1F83D9ABFB41BD6B,
  227|  1.94M|                  0x5BE0CD19137E2179});
  228|  1.94M|}
_ZN5Botan7SHA_3848add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  254|  57.4k|void SHA_384::add_data(std::span<const uint8_t> input) {
  255|  57.4k|   m_md.update(input);
  256|  57.4k|}
_ZN5Botan7SHA_5128add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  258|  3.91M|void SHA_512::add_data(std::span<const uint8_t> input) {
  259|  3.91M|   m_md.update(input);
  260|  3.91M|}
_ZN5Botan7SHA_38412final_resultENSt3__14spanIhLm18446744073709551615EEE:
  266|  13.1k|void SHA_384::final_result(std::span<uint8_t> output) {
  267|  13.1k|   m_md.final(output);
  268|  13.1k|}
_ZN5Botan7SHA_51212final_resultENSt3__14spanIhLm18446744073709551615EEE:
  270|  1.40M|void SHA_512::final_result(std::span<uint8_t> output) {
  271|  1.40M|   m_md.final(output);
  272|  1.40M|}

_ZN5Botan5SHA_3C2Em:
   18|  16.1k|SHA_3::SHA_3(size_t output_bits) : m_keccak(2 * output_bits, 2, 2), m_output_length(output_bits / 8) {
   19|       |   // We only support the parameters for SHA-3 in this constructor
   20|       |
   21|  16.1k|   if(output_bits != 224 && output_bits != 256 && output_bits != 384 && output_bits != 512) {
  ------------------
  |  Branch (21:7): [True: 16.1k, False: 0]
  |  Branch (21:29): [True: 6.23k, False: 9.87k]
  |  Branch (21:51): [True: 6.23k, False: 0]
  |  Branch (21:73): [True: 0, False: 6.23k]
  ------------------
   22|      0|      throw Invalid_Argument(fmt("SHA_3: Invalid output length {}", output_bits));
   23|      0|   }
   24|  16.1k|}
_ZNK5Botan5SHA_34nameEv:
   26|  5.80k|std::string SHA_3::name() const {
   27|  5.80k|   return fmt("SHA-3({})", m_output_length * 8);
   28|  5.80k|}
_ZN5Botan5SHA_38add_dataENSt3__14spanIKhLm18446744073709551615EEE:
   46|  59.8k|void SHA_3::add_data(std::span<const uint8_t> input) {
   47|  59.8k|   m_keccak.absorb(input);
   48|  59.8k|}
_ZN5Botan5SHA_312final_resultENSt3__14spanIhLm18446744073709551615EEE:
   50|  10.2k|void SHA_3::final_result(std::span<uint8_t> output) {
   51|  10.2k|   m_keccak.finish();
   52|  10.2k|   m_keccak.squeeze(output);
   53|  10.2k|   m_keccak.clear();
   54|  10.2k|}

_ZN5Botan3SM310compress_nERNSt3__16vectorIjNS_16secure_allocatorIjEEEENS1_4spanIKhLm18446744073709551615EEEm:
   81|  20.8k|void SM3::compress_n(digest_type& digest, std::span<const uint8_t> input, size_t blocks) {
   82|  20.8k|   uint32_t A = digest[0], B = digest[1], C = digest[2], D = digest[3], E = digest[4], F = digest[5], G = digest[6],
   83|  20.8k|            H = digest[7];
   84|       |
   85|  20.8k|   BufferSlicer in(input);
   86|       |
   87|  43.2k|   for(size_t i = 0; i != blocks; ++i) {
  ------------------
  |  Branch (87:22): [True: 22.3k, False: 20.8k]
  ------------------
   88|  22.3k|      const auto block = in.take(block_bytes);
   89|       |
   90|  22.3k|      uint32_t W00 = load_be<uint32_t>(block.data(), 0);
   91|  22.3k|      uint32_t W01 = load_be<uint32_t>(block.data(), 1);
   92|  22.3k|      uint32_t W02 = load_be<uint32_t>(block.data(), 2);
   93|  22.3k|      uint32_t W03 = load_be<uint32_t>(block.data(), 3);
   94|  22.3k|      uint32_t W04 = load_be<uint32_t>(block.data(), 4);
   95|  22.3k|      uint32_t W05 = load_be<uint32_t>(block.data(), 5);
   96|  22.3k|      uint32_t W06 = load_be<uint32_t>(block.data(), 6);
   97|  22.3k|      uint32_t W07 = load_be<uint32_t>(block.data(), 7);
   98|  22.3k|      uint32_t W08 = load_be<uint32_t>(block.data(), 8);
   99|  22.3k|      uint32_t W09 = load_be<uint32_t>(block.data(), 9);
  100|  22.3k|      uint32_t W10 = load_be<uint32_t>(block.data(), 10);
  101|  22.3k|      uint32_t W11 = load_be<uint32_t>(block.data(), 11);
  102|  22.3k|      uint32_t W12 = load_be<uint32_t>(block.data(), 12);
  103|  22.3k|      uint32_t W13 = load_be<uint32_t>(block.data(), 13);
  104|  22.3k|      uint32_t W14 = load_be<uint32_t>(block.data(), 14);
  105|  22.3k|      uint32_t W15 = load_be<uint32_t>(block.data(), 15);
  106|       |
  107|  22.3k|      R1(A, B, C, D, E, F, G, H, 0x79CC4519, W00, W00 ^ W04);
  108|  22.3k|      W00 = SM3_E(W00, W07, W13, W03, W10);
  109|  22.3k|      R1(D, A, B, C, H, E, F, G, 0xF3988A32, W01, W01 ^ W05);
  110|  22.3k|      W01 = SM3_E(W01, W08, W14, W04, W11);
  111|  22.3k|      R1(C, D, A, B, G, H, E, F, 0xE7311465, W02, W02 ^ W06);
  112|  22.3k|      W02 = SM3_E(W02, W09, W15, W05, W12);
  113|  22.3k|      R1(B, C, D, A, F, G, H, E, 0xCE6228CB, W03, W03 ^ W07);
  114|  22.3k|      W03 = SM3_E(W03, W10, W00, W06, W13);
  115|  22.3k|      R1(A, B, C, D, E, F, G, H, 0x9CC45197, W04, W04 ^ W08);
  116|  22.3k|      W04 = SM3_E(W04, W11, W01, W07, W14);
  117|  22.3k|      R1(D, A, B, C, H, E, F, G, 0x3988A32F, W05, W05 ^ W09);
  118|  22.3k|      W05 = SM3_E(W05, W12, W02, W08, W15);
  119|  22.3k|      R1(C, D, A, B, G, H, E, F, 0x7311465E, W06, W06 ^ W10);
  120|  22.3k|      W06 = SM3_E(W06, W13, W03, W09, W00);
  121|  22.3k|      R1(B, C, D, A, F, G, H, E, 0xE6228CBC, W07, W07 ^ W11);
  122|  22.3k|      W07 = SM3_E(W07, W14, W04, W10, W01);
  123|  22.3k|      R1(A, B, C, D, E, F, G, H, 0xCC451979, W08, W08 ^ W12);
  124|  22.3k|      W08 = SM3_E(W08, W15, W05, W11, W02);
  125|  22.3k|      R1(D, A, B, C, H, E, F, G, 0x988A32F3, W09, W09 ^ W13);
  126|  22.3k|      W09 = SM3_E(W09, W00, W06, W12, W03);
  127|  22.3k|      R1(C, D, A, B, G, H, E, F, 0x311465E7, W10, W10 ^ W14);
  128|  22.3k|      W10 = SM3_E(W10, W01, W07, W13, W04);
  129|  22.3k|      R1(B, C, D, A, F, G, H, E, 0x6228CBCE, W11, W11 ^ W15);
  130|  22.3k|      W11 = SM3_E(W11, W02, W08, W14, W05);
  131|  22.3k|      R1(A, B, C, D, E, F, G, H, 0xC451979C, W12, W12 ^ W00);
  132|  22.3k|      W12 = SM3_E(W12, W03, W09, W15, W06);
  133|  22.3k|      R1(D, A, B, C, H, E, F, G, 0x88A32F39, W13, W13 ^ W01);
  134|  22.3k|      W13 = SM3_E(W13, W04, W10, W00, W07);
  135|  22.3k|      R1(C, D, A, B, G, H, E, F, 0x11465E73, W14, W14 ^ W02);
  136|  22.3k|      W14 = SM3_E(W14, W05, W11, W01, W08);
  137|  22.3k|      R1(B, C, D, A, F, G, H, E, 0x228CBCE6, W15, W15 ^ W03);
  138|  22.3k|      W15 = SM3_E(W15, W06, W12, W02, W09);
  139|  22.3k|      R2(A, B, C, D, E, F, G, H, 0x9D8A7A87, W00, W00 ^ W04);
  140|  22.3k|      W00 = SM3_E(W00, W07, W13, W03, W10);
  141|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x3B14F50F, W01, W01 ^ W05);
  142|  22.3k|      W01 = SM3_E(W01, W08, W14, W04, W11);
  143|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x7629EA1E, W02, W02 ^ W06);
  144|  22.3k|      W02 = SM3_E(W02, W09, W15, W05, W12);
  145|  22.3k|      R2(B, C, D, A, F, G, H, E, 0xEC53D43C, W03, W03 ^ W07);
  146|  22.3k|      W03 = SM3_E(W03, W10, W00, W06, W13);
  147|  22.3k|      R2(A, B, C, D, E, F, G, H, 0xD8A7A879, W04, W04 ^ W08);
  148|  22.3k|      W04 = SM3_E(W04, W11, W01, W07, W14);
  149|  22.3k|      R2(D, A, B, C, H, E, F, G, 0xB14F50F3, W05, W05 ^ W09);
  150|  22.3k|      W05 = SM3_E(W05, W12, W02, W08, W15);
  151|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x629EA1E7, W06, W06 ^ W10);
  152|  22.3k|      W06 = SM3_E(W06, W13, W03, W09, W00);
  153|  22.3k|      R2(B, C, D, A, F, G, H, E, 0xC53D43CE, W07, W07 ^ W11);
  154|  22.3k|      W07 = SM3_E(W07, W14, W04, W10, W01);
  155|  22.3k|      R2(A, B, C, D, E, F, G, H, 0x8A7A879D, W08, W08 ^ W12);
  156|  22.3k|      W08 = SM3_E(W08, W15, W05, W11, W02);
  157|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x14F50F3B, W09, W09 ^ W13);
  158|  22.3k|      W09 = SM3_E(W09, W00, W06, W12, W03);
  159|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x29EA1E76, W10, W10 ^ W14);
  160|  22.3k|      W10 = SM3_E(W10, W01, W07, W13, W04);
  161|  22.3k|      R2(B, C, D, A, F, G, H, E, 0x53D43CEC, W11, W11 ^ W15);
  162|  22.3k|      W11 = SM3_E(W11, W02, W08, W14, W05);
  163|  22.3k|      R2(A, B, C, D, E, F, G, H, 0xA7A879D8, W12, W12 ^ W00);
  164|  22.3k|      W12 = SM3_E(W12, W03, W09, W15, W06);
  165|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x4F50F3B1, W13, W13 ^ W01);
  166|  22.3k|      W13 = SM3_E(W13, W04, W10, W00, W07);
  167|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x9EA1E762, W14, W14 ^ W02);
  168|  22.3k|      W14 = SM3_E(W14, W05, W11, W01, W08);
  169|  22.3k|      R2(B, C, D, A, F, G, H, E, 0x3D43CEC5, W15, W15 ^ W03);
  170|  22.3k|      W15 = SM3_E(W15, W06, W12, W02, W09);
  171|  22.3k|      R2(A, B, C, D, E, F, G, H, 0x7A879D8A, W00, W00 ^ W04);
  172|  22.3k|      W00 = SM3_E(W00, W07, W13, W03, W10);
  173|  22.3k|      R2(D, A, B, C, H, E, F, G, 0xF50F3B14, W01, W01 ^ W05);
  174|  22.3k|      W01 = SM3_E(W01, W08, W14, W04, W11);
  175|  22.3k|      R2(C, D, A, B, G, H, E, F, 0xEA1E7629, W02, W02 ^ W06);
  176|  22.3k|      W02 = SM3_E(W02, W09, W15, W05, W12);
  177|  22.3k|      R2(B, C, D, A, F, G, H, E, 0xD43CEC53, W03, W03 ^ W07);
  178|  22.3k|      W03 = SM3_E(W03, W10, W00, W06, W13);
  179|  22.3k|      R2(A, B, C, D, E, F, G, H, 0xA879D8A7, W04, W04 ^ W08);
  180|  22.3k|      W04 = SM3_E(W04, W11, W01, W07, W14);
  181|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x50F3B14F, W05, W05 ^ W09);
  182|  22.3k|      W05 = SM3_E(W05, W12, W02, W08, W15);
  183|  22.3k|      R2(C, D, A, B, G, H, E, F, 0xA1E7629E, W06, W06 ^ W10);
  184|  22.3k|      W06 = SM3_E(W06, W13, W03, W09, W00);
  185|  22.3k|      R2(B, C, D, A, F, G, H, E, 0x43CEC53D, W07, W07 ^ W11);
  186|  22.3k|      W07 = SM3_E(W07, W14, W04, W10, W01);
  187|  22.3k|      R2(A, B, C, D, E, F, G, H, 0x879D8A7A, W08, W08 ^ W12);
  188|  22.3k|      W08 = SM3_E(W08, W15, W05, W11, W02);
  189|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x0F3B14F5, W09, W09 ^ W13);
  190|  22.3k|      W09 = SM3_E(W09, W00, W06, W12, W03);
  191|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x1E7629EA, W10, W10 ^ W14);
  192|  22.3k|      W10 = SM3_E(W10, W01, W07, W13, W04);
  193|  22.3k|      R2(B, C, D, A, F, G, H, E, 0x3CEC53D4, W11, W11 ^ W15);
  194|  22.3k|      W11 = SM3_E(W11, W02, W08, W14, W05);
  195|  22.3k|      R2(A, B, C, D, E, F, G, H, 0x79D8A7A8, W12, W12 ^ W00);
  196|  22.3k|      W12 = SM3_E(W12, W03, W09, W15, W06);
  197|  22.3k|      R2(D, A, B, C, H, E, F, G, 0xF3B14F50, W13, W13 ^ W01);
  198|  22.3k|      W13 = SM3_E(W13, W04, W10, W00, W07);
  199|  22.3k|      R2(C, D, A, B, G, H, E, F, 0xE7629EA1, W14, W14 ^ W02);
  200|  22.3k|      W14 = SM3_E(W14, W05, W11, W01, W08);
  201|  22.3k|      R2(B, C, D, A, F, G, H, E, 0xCEC53D43, W15, W15 ^ W03);
  202|  22.3k|      W15 = SM3_E(W15, W06, W12, W02, W09);
  203|  22.3k|      R2(A, B, C, D, E, F, G, H, 0x9D8A7A87, W00, W00 ^ W04);
  204|  22.3k|      W00 = SM3_E(W00, W07, W13, W03, W10);
  205|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x3B14F50F, W01, W01 ^ W05);
  206|  22.3k|      W01 = SM3_E(W01, W08, W14, W04, W11);
  207|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x7629EA1E, W02, W02 ^ W06);
  208|  22.3k|      W02 = SM3_E(W02, W09, W15, W05, W12);
  209|  22.3k|      R2(B, C, D, A, F, G, H, E, 0xEC53D43C, W03, W03 ^ W07);
  210|  22.3k|      W03 = SM3_E(W03, W10, W00, W06, W13);
  211|  22.3k|      R2(A, B, C, D, E, F, G, H, 0xD8A7A879, W04, W04 ^ W08);
  212|  22.3k|      R2(D, A, B, C, H, E, F, G, 0xB14F50F3, W05, W05 ^ W09);
  213|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x629EA1E7, W06, W06 ^ W10);
  214|  22.3k|      R2(B, C, D, A, F, G, H, E, 0xC53D43CE, W07, W07 ^ W11);
  215|  22.3k|      R2(A, B, C, D, E, F, G, H, 0x8A7A879D, W08, W08 ^ W12);
  216|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x14F50F3B, W09, W09 ^ W13);
  217|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x29EA1E76, W10, W10 ^ W14);
  218|  22.3k|      R2(B, C, D, A, F, G, H, E, 0x53D43CEC, W11, W11 ^ W15);
  219|  22.3k|      R2(A, B, C, D, E, F, G, H, 0xA7A879D8, W12, W12 ^ W00);
  220|  22.3k|      R2(D, A, B, C, H, E, F, G, 0x4F50F3B1, W13, W13 ^ W01);
  221|  22.3k|      R2(C, D, A, B, G, H, E, F, 0x9EA1E762, W14, W14 ^ W02);
  222|  22.3k|      R2(B, C, D, A, F, G, H, E, 0x3D43CEC5, W15, W15 ^ W03);
  223|       |
  224|  22.3k|      A = (digest[0] ^= A);
  225|  22.3k|      B = (digest[1] ^= B);
  226|  22.3k|      C = (digest[2] ^= C);
  227|  22.3k|      D = (digest[3] ^= D);
  228|  22.3k|      E = (digest[4] ^= E);
  229|  22.3k|      F = (digest[5] ^= F);
  230|  22.3k|      G = (digest[6] ^= G);
  231|  22.3k|      H = (digest[7] ^= H);
  232|  22.3k|   }
  233|  20.8k|}
_ZN5Botan3SM34initERNSt3__16vectorIjNS_16secure_allocatorIjEEEE:
  235|  13.4k|void SM3::init(digest_type& digest) {
  236|  13.4k|   digest.assign(
  237|  13.4k|      {0x7380166fUL, 0x4914b2b9UL, 0x172442d7UL, 0xda8a0600UL, 0xa96f30bcUL, 0x163138aaUL, 0xe38dee4dUL, 0xb0fb0e4eUL});
  238|  13.4k|}
_ZN5Botan3SM38add_dataENSt3__14spanIKhLm18446744073709551615EEE:
  248|  38.0k|void SM3::add_data(std::span<const uint8_t> input) {
  249|  38.0k|   m_md.update(input);
  250|  38.0k|}
_ZN5Botan3SM312final_resultENSt3__14spanIhLm18446744073709551615EEE:
  252|  5.75k|void SM3::final_result(std::span<uint8_t> output) {
  253|  5.75k|   m_md.final(output);
  254|  5.75k|}
sm3.cpp:_ZN5Botan12_GLOBAL__N_12R1EjRjjS1_jS1_jS1_jjj:
   34|   357k|               uint32_t Wj) {
   35|   357k|   const uint32_t A12 = rotl<12>(A);
   36|   357k|   const uint32_t SS1 = rotl<7>(A12 + E + TJ);
   37|   357k|   const uint32_t TT1 = (A ^ B ^ C) + D + (SS1 ^ A12) + Wj;
   38|   357k|   const uint32_t TT2 = (E ^ F ^ G) + H + SS1 + Wi;
   39|       |
   40|   357k|   B = rotl<9>(B);
   41|   357k|   D = TT1;
   42|   357k|   F = rotl<19>(F);
   43|   357k|   H = P0(TT2);
   44|   357k|}
sm3.cpp:_ZN5Botan12_GLOBAL__N_12P0Ej:
   20|  1.43M|inline uint32_t P0(uint32_t X) {
   21|  1.43M|   return X ^ rotl<9>(X) ^ rotl<17>(X);
   22|  1.43M|}
sm3.cpp:_ZN5Botan12_GLOBAL__N_15SM3_EEjjjjj:
   72|  1.16M|inline uint32_t SM3_E(uint32_t W0, uint32_t W7, uint32_t W13, uint32_t W3, uint32_t W10) {
   73|  1.16M|   return P1(W0 ^ W7 ^ rotl<15>(W13)) ^ rotl<7>(W3) ^ W10;
   74|  1.16M|}
sm3.cpp:_ZN5Botan12_GLOBAL__N_12P1Ej:
   68|  1.16M|inline uint32_t P1(uint32_t X) {
   69|  1.16M|   return X ^ rotl<15>(X) ^ rotl<23>(X);
   70|  1.16M|}
sm3.cpp:_ZN5Botan12_GLOBAL__N_12R2EjRjjS1_jS1_jS1_jjj:
   56|  1.07M|               uint32_t Wj) {
   57|  1.07M|   const uint32_t A12 = rotl<12>(A);
   58|  1.07M|   const uint32_t SS1 = rotl<7>(A12 + E + TJ);
   59|  1.07M|   const uint32_t TT1 = majority(A, B, C) + D + (SS1 ^ A12) + Wj;
   60|  1.07M|   const uint32_t TT2 = choose(E, F, G) + H + SS1 + Wi;
   61|       |
   62|  1.07M|   B = rotl<9>(B);
   63|  1.07M|   D = TT1;
   64|  1.07M|   F = rotl<19>(F);
   65|  1.07M|   H = P0(TT2);
   66|  1.07M|}

_ZN5Botan4HMAC8add_dataENSt3__14spanIKhLm18446744073709551615EEE:
   19|  1.25M|void HMAC::add_data(std::span<const uint8_t> input) {
   20|  1.25M|   assert_key_material_set();
   21|  1.25M|   m_hash->update(input);
   22|  1.25M|}
_ZN5Botan4HMAC12final_resultENSt3__14spanIhLm18446744073709551615EEE:
   27|   674k|void HMAC::final_result(std::span<uint8_t> mac) {
   28|   674k|   assert_key_material_set();
   29|   674k|   m_hash->final(mac);
   30|   674k|   m_hash->update(m_okey);
   31|   674k|   m_hash->update(mac.first(m_hash_output_length));
   32|   674k|   m_hash->final(mac);
   33|   674k|   m_hash->update(m_ikey);
   34|   674k|}
_ZNK5Botan4HMAC8key_specEv:
   36|   385k|Key_Length_Specification HMAC::key_spec() const {
   37|       |   // Support very long lengths for things like PBKDF2 and the TLS PRF
   38|   385k|   return Key_Length_Specification(0, 4096);
   39|   385k|}
_ZNK5Botan4HMAC13output_lengthEv:
   41|   867k|size_t HMAC::output_length() const {
   42|   867k|   return m_hash_output_length;
   43|   867k|}
_ZNK5Botan4HMAC19has_keying_materialEv:
   45|  1.92M|bool HMAC::has_keying_material() const {
   46|  1.92M|   return !m_okey.empty();
   47|  1.92M|}
_ZN5Botan4HMAC12key_scheduleENSt3__14spanIKhLm18446744073709551615EEE:
   52|   385k|void HMAC::key_schedule(std::span<const uint8_t> key) {
   53|   385k|   const uint8_t ipad = 0x36;
   54|   385k|   const uint8_t opad = 0x5C;
   55|       |
   56|   385k|   m_hash->clear();
   57|       |
   58|   385k|   m_ikey.resize(m_hash_block_size);
   59|   385k|   m_okey.resize(m_hash_block_size);
   60|       |
   61|   385k|   clear_mem(m_ikey.data(), m_ikey.size());
   62|   385k|   clear_mem(m_okey.data(), m_okey.size());
   63|       |
   64|       |   /*
   65|       |   * Sometimes the HMAC key length itself is sensitive, as with PBKDF2 where it
   66|       |   * reveals the length of the passphrase. Make some attempt to hide this to
   67|       |   * side channels. Clearly if the secret is longer than the block size then the
   68|       |   * branch to hash first reveals that. In addition, counting the number of
   69|       |   * compression functions executed reveals the size at the granularity of the
   70|       |   * hash function's block size.
   71|       |   *
   72|       |   * The greater concern is for smaller keys; being able to detect when a
   73|       |   * passphrase is say 4 bytes may assist choosing weaker targets. Even though
   74|       |   * the loop bounds are constant, we can only actually read key[0..length] so
   75|       |   * it doesn't seem possible to make this computation truly constant time.
   76|       |   *
   77|       |   * We don't mind leaking if the length is exactly zero since that's
   78|       |   * trivial to simply check.
   79|       |   */
   80|       |
   81|   385k|   if(key.size() > m_hash_block_size) {
  ------------------
  |  Branch (81:7): [True: 0, False: 385k]
  ------------------
   82|      0|      m_hash->update(key);
   83|      0|      m_hash->final(m_ikey.data());
   84|   385k|   } else if(!key.empty()) {
  ------------------
  |  Branch (84:14): [True: 385k, False: 0]
  ------------------
   85|  49.7M|      for(size_t i = 0, i_mod_length = 0; i != m_hash_block_size; ++i) {
  ------------------
  |  Branch (85:43): [True: 49.3M, False: 385k]
  ------------------
   86|       |         /*
   87|       |         access key[i % length] but avoiding division due to variable
   88|       |         time computation on some processors.
   89|       |         */
   90|  49.3M|         auto needs_reduction = CT::Mask<size_t>::is_lte(key.size(), i_mod_length);
   91|  49.3M|         i_mod_length = needs_reduction.select(0, i_mod_length);
   92|  49.3M|         const uint8_t kb = key[i_mod_length];
   93|       |
   94|  49.3M|         auto in_range = CT::Mask<size_t>::is_lt(i, key.size());
   95|  49.3M|         m_ikey[i] = static_cast<uint8_t>(in_range.if_set_return(kb));
   96|  49.3M|         i_mod_length += 1;
   97|  49.3M|      }
   98|   385k|   }
   99|       |
  100|  49.7M|   for(size_t i = 0; i != m_hash_block_size; ++i) {
  ------------------
  |  Branch (100:22): [True: 49.3M, False: 385k]
  ------------------
  101|  49.3M|      m_ikey[i] ^= ipad;
  102|  49.3M|      m_okey[i] = m_ikey[i] ^ ipad ^ opad;
  103|  49.3M|   }
  104|       |
  105|   385k|   m_hash->update(m_ikey);
  106|   385k|}
_ZN5Botan4HMACC2ENSt3__110unique_ptrINS_12HashFunctionENS1_14default_deleteIS3_EEEE:
  135|  96.3k|      m_hash(std::move(hash)),
  136|  96.3k|      m_hash_output_length(m_hash->output_length()),
  137|  96.3k|      m_hash_block_size(m_hash->hash_block_size()) {
  138|  96.3k|   BOTAN_ARG_CHECK(m_hash_block_size >= m_hash_output_length, "HMAC is not compatible with this hash function");
  ------------------
  |  |   30|  96.3k|   do {                                                          \
  |  |   31|  96.3k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 96.3k]
  |  |  ------------------
  |  |   32|  96.3k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  96.3k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 96.3k]
  |  |  ------------------
  ------------------
  139|  96.3k|}

_ZN5Botan25MessageAuthenticationCode6createENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
   52|  96.3k|                                                                             std::string_view provider) {
   53|  96.3k|   const SCAN_Name req(algo_spec);
   54|       |
   55|       |#if defined(BOTAN_HAS_BLAKE2BMAC)
   56|       |   if(req.algo_name() == "Blake2b" || req.algo_name() == "BLAKE2b") {
   57|       |      return std::make_unique<BLAKE2bMAC>(req.arg_as_integer(0, 512));
   58|       |   }
   59|       |#endif
   60|       |
   61|       |#if defined(BOTAN_HAS_GMAC)
   62|       |   if(req.algo_name() == "GMAC" && req.arg_count() == 1) {
   63|       |      if(provider.empty() || provider == "base") {
   64|       |         if(auto bc = BlockCipher::create(req.arg(0))) {
   65|       |            return std::make_unique<GMAC>(std::move(bc));
   66|       |         }
   67|       |      }
   68|       |   }
   69|       |#endif
   70|       |
   71|  96.3k|#if defined(BOTAN_HAS_HMAC)
   72|  96.3k|   if(req.algo_name() == "HMAC" && req.arg_count() == 1) {
  ------------------
  |  Branch (72:7): [True: 96.3k, False: 0]
  |  Branch (72:36): [True: 96.3k, False: 0]
  ------------------
   73|  96.3k|      if(provider.empty() || provider == "base") {
  ------------------
  |  Branch (73:10): [True: 96.3k, False: 0]
  |  Branch (73:30): [True: 0, False: 0]
  ------------------
   74|  96.3k|         if(auto hash = HashFunction::create(req.arg(0))) {
  ------------------
  |  Branch (74:18): [True: 96.3k, False: 0]
  ------------------
   75|  96.3k|            return std::make_unique<HMAC>(std::move(hash));
   76|  96.3k|         }
   77|  96.3k|      }
   78|  96.3k|   }
   79|      0|#endif
   80|       |
   81|       |#if defined(BOTAN_HAS_POLY1305)
   82|       |   if(req.algo_name() == "Poly1305" && req.arg_count() == 0) {
   83|       |      if(provider.empty() || provider == "base") {
   84|       |         return std::make_unique<Poly1305>();
   85|       |      }
   86|       |   }
   87|       |#endif
   88|       |
   89|       |#if defined(BOTAN_HAS_SIPHASH)
   90|       |   if(req.algo_name() == "SipHash") {
   91|       |      if(provider.empty() || provider == "base") {
   92|       |         return std::make_unique<SipHash>(req.arg_as_integer(0, 2), req.arg_as_integer(1, 4));
   93|       |      }
   94|       |   }
   95|       |#endif
   96|       |
   97|      0|#if defined(BOTAN_HAS_CMAC)
   98|      0|   if((req.algo_name() == "CMAC" || req.algo_name() == "OMAC") && req.arg_count() == 1) {
  ------------------
  |  Branch (98:8): [True: 0, False: 0]
  |  Branch (98:37): [True: 0, False: 0]
  |  Branch (98:67): [True: 0, False: 0]
  ------------------
   99|      0|      if(provider.empty() || provider == "base") {
  ------------------
  |  Branch (99:10): [True: 0, False: 0]
  |  Branch (99:30): [True: 0, False: 0]
  ------------------
  100|      0|         if(auto bc = BlockCipher::create(req.arg(0))) {
  ------------------
  |  Branch (100:18): [True: 0, False: 0]
  ------------------
  101|      0|            return std::make_unique<CMAC>(std::move(bc));
  102|      0|         }
  103|      0|      }
  104|      0|   }
  105|      0|#endif
  106|       |
  107|       |#if defined(BOTAN_HAS_ANSI_X919_MAC)
  108|       |   if(req.algo_name() == "X9.19-MAC") {
  109|       |      if(provider.empty() || provider == "base") {
  110|       |         return std::make_unique<ANSI_X919_MAC>();
  111|       |      }
  112|       |   }
  113|       |#endif
  114|       |
  115|      0|#if defined(BOTAN_HAS_KMAC)
  116|      0|   if(req.algo_name() == "KMAC-128") {
  ------------------
  |  Branch (116:7): [True: 0, False: 0]
  ------------------
  117|      0|      if(provider.empty() || provider == "base") {
  ------------------
  |  Branch (117:10): [True: 0, False: 0]
  |  Branch (117:30): [True: 0, False: 0]
  ------------------
  118|      0|         if(req.arg_count() != 1) {
  ------------------
  |  Branch (118:13): [True: 0, False: 0]
  ------------------
  119|      0|            throw Invalid_Argument(
  120|      0|               "invalid algorithm specification for KMAC-128: need exactly one argument for output bit length");
  121|      0|         }
  122|      0|         return std::make_unique<KMAC128>(req.arg_as_integer(0));
  123|      0|      }
  124|      0|   }
  125|       |
  126|      0|   if(req.algo_name() == "KMAC-256") {
  ------------------
  |  Branch (126:7): [True: 0, False: 0]
  ------------------
  127|      0|      if(provider.empty() || provider == "base") {
  ------------------
  |  Branch (127:10): [True: 0, False: 0]
  |  Branch (127:30): [True: 0, False: 0]
  ------------------
  128|      0|         if(req.arg_count() != 1) {
  ------------------
  |  Branch (128:13): [True: 0, False: 0]
  ------------------
  129|      0|            throw Invalid_Argument(
  130|      0|               "invalid algorithm specification for KMAC-256: need exactly one argument for output bit length");
  131|      0|         }
  132|      0|         return std::make_unique<KMAC256>(req.arg_as_integer(0));
  133|      0|      }
  134|      0|   }
  135|      0|#endif
  136|       |
  137|      0|   BOTAN_UNUSED(req);
  ------------------
  |  |  118|      0|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
  138|      0|   BOTAN_UNUSED(provider);
  ------------------
  |  |  118|      0|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
  139|       |
  140|      0|   return nullptr;
  141|      0|}
_ZN5Botan25MessageAuthenticationCode15create_or_throwENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  149|  96.3k|                                                                                      std::string_view provider) {
  150|  96.3k|   if(auto mac = MessageAuthenticationCode::create(algo, provider)) {
  ------------------
  |  Branch (150:12): [True: 96.3k, False: 0]
  ------------------
  151|  96.3k|      return mac;
  152|  96.3k|   }
  153|      0|   throw Lookup_Error("MAC", algo, provider);
  154|  96.3k|}

_ZN5Botan6BigInt11encode_1363ERKS0_m:
  105|  28.3k|secure_vector<uint8_t> BigInt::encode_1363(const BigInt& n, size_t bytes) {
  106|  28.3k|   if(n.bytes() > bytes) {
  ------------------
  |  Branch (106:7): [True: 0, False: 28.3k]
  ------------------
  107|      0|      throw Encoding_Error("encode_1363: n is too large to encode properly");
  108|      0|   }
  109|       |
  110|  28.3k|   secure_vector<uint8_t> output(bytes);
  111|  28.3k|   n.binary_encode(output.data(), output.size());
  112|  28.3k|   return output;
  113|  28.3k|}
_ZN5Botan6BigInt6decodeEPKhmNS0_4BaseE:
  151|     53|BigInt BigInt::decode(const uint8_t buf[], size_t length, Base base) {
  152|     53|   BigInt r;
  153|     53|   if(base == Binary) {
  ------------------
  |  Branch (153:7): [True: 0, False: 53]
  ------------------
  154|      0|      r.binary_decode(buf, length);
  155|     53|   } else if(base == Hexadecimal) {
  ------------------
  |  Branch (155:14): [True: 51, False: 2]
  ------------------
  156|     51|      secure_vector<uint8_t> binary;
  157|       |
  158|     51|      if(length % 2) {
  ------------------
  |  Branch (158:10): [True: 6, False: 45]
  ------------------
  159|       |         // Handle lack of leading 0
  160|      6|         const char buf0_with_leading_0[2] = {'0', static_cast<char>(buf[0])};
  161|       |
  162|      6|         binary = hex_decode_locked(buf0_with_leading_0, 2);
  163|       |
  164|      6|         binary += hex_decode_locked(cast_uint8_ptr_to_char(&buf[1]), length - 1, false);
  165|     45|      } else {
  166|     45|         binary = hex_decode_locked(cast_uint8_ptr_to_char(buf), length, false);
  167|     45|      }
  168|       |
  169|     51|      r.binary_decode(binary.data(), binary.size());
  170|     51|   } else if(base == Decimal) {
  ------------------
  |  Branch (170:14): [True: 2, False: 0]
  ------------------
  171|       |      // This could be made faster using the same trick as to_dec_string
  172|      4|      for(size_t i = 0; i != length; ++i) {
  ------------------
  |  Branch (172:25): [True: 2, False: 2]
  ------------------
  173|      2|         const char c = buf[i];
  174|       |
  175|      2|         if(c < '0' || c > '9') {
  ------------------
  |  Branch (175:13): [True: 0, False: 2]
  |  Branch (175:24): [True: 0, False: 2]
  ------------------
  176|      0|            throw Invalid_Argument("BigInt::decode: invalid decimal char");
  177|      0|         }
  178|       |
  179|      2|         const uint8_t x = c - '0';
  180|      2|         BOTAN_ASSERT_NOMSG(x < 10);
  ------------------
  |  |   60|      2|   do {                                                                     \
  |  |   61|      2|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 2]
  |  |  ------------------
  |  |   62|      2|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|      2|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 2]
  |  |  ------------------
  ------------------
  181|       |
  182|      2|         r *= 10;
  183|      2|         r += x;
  184|      2|      }
  185|      2|   } else {
  186|      0|      throw Invalid_Argument("Unknown BigInt decoding method");
  187|      0|   }
  188|     53|   return r;
  189|     53|}

_ZN5Botan6BigInt3addEPKmmNS0_4SignE:
   16|   501k|BigInt& BigInt::add(const word y[], size_t y_words, Sign y_sign) {
   17|   501k|   const size_t x_sw = sig_words();
   18|       |
   19|   501k|   grow_to(std::max(x_sw, y_words) + 1);
   20|       |
   21|   501k|   if(sign() == y_sign) {
  ------------------
  |  Branch (21:7): [True: 363k, False: 137k]
  ------------------
   22|   363k|      bigint_add2(mutable_data(), size() - 1, y, y_words);
   23|   363k|   } else {
   24|   137k|      const int32_t relative_size = bigint_cmp(data(), x_sw, y, y_words);
   25|       |
   26|   137k|      if(relative_size >= 0) {
  ------------------
  |  Branch (26:10): [True: 137k, False: 630]
  ------------------
   27|       |         // *this >= y
   28|   137k|         bigint_sub2(mutable_data(), x_sw, y, y_words);
   29|   137k|      } else {
   30|       |         // *this < y
   31|    630|         bigint_sub2_rev(mutable_data(), y, y_words);
   32|    630|      }
   33|       |
   34|       |      //this->sign_fixup(relative_size, y_sign);
   35|   137k|      if(relative_size < 0) {
  ------------------
  |  Branch (35:10): [True: 630, False: 137k]
  ------------------
   36|    630|         set_sign(y_sign);
   37|   137k|      } else if(relative_size == 0) {
  ------------------
  |  Branch (37:17): [True: 0, False: 137k]
  ------------------
   38|      0|         set_sign(Positive);
   39|      0|      }
   40|   137k|   }
   41|       |
   42|   501k|   return (*this);
   43|   501k|}
_ZN5Botan6BigInt7mod_addERKS0_S2_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
   45|  10.4M|BigInt& BigInt::mod_add(const BigInt& s, const BigInt& mod, secure_vector<word>& ws) {
   46|  10.4M|   if(this->is_negative() || s.is_negative() || mod.is_negative()) {
  ------------------
  |  Branch (46:7): [True: 0, False: 10.4M]
  |  Branch (46:30): [True: 0, False: 10.4M]
  |  Branch (46:49): [True: 0, False: 10.4M]
  ------------------
   47|      0|      throw Invalid_Argument("BigInt::mod_add expects all arguments are positive");
   48|      0|   }
   49|       |
   50|  10.4M|   BOTAN_DEBUG_ASSERT(*this < mod);
  ------------------
  |  |   99|  10.4M|      do {                          \
  |  |  100|  10.4M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 10.4M]
  |  |  ------------------
  ------------------
   51|  10.4M|   BOTAN_DEBUG_ASSERT(s < mod);
  ------------------
  |  |   99|  10.4M|      do {                          \
  |  |  100|  10.4M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 10.4M]
  |  |  ------------------
  ------------------
   52|       |
   53|       |   /*
   54|       |   t + s or t + s - p == t - (p - s)
   55|       |
   56|       |   So first compute ws = p - s
   57|       |
   58|       |   Then compute t + s and t - ws
   59|       |
   60|       |   If t - ws does not borrow, then that is the correct valued
   61|       |   */
   62|       |
   63|  10.4M|   const size_t mod_sw = mod.sig_words();
   64|  10.4M|   BOTAN_ARG_CHECK(mod_sw > 0, "BigInt::mod_add modulus must be positive");
  ------------------
  |  |   30|  10.4M|   do {                                                          \
  |  |   31|  10.4M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 10.4M]
  |  |  ------------------
  |  |   32|  10.4M|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  10.4M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 10.4M]
  |  |  ------------------
  ------------------
   65|       |
   66|  10.4M|   this->grow_to(mod_sw);
   67|  10.4M|   s.grow_to(mod_sw);
   68|       |
   69|       |   // First mod_sw for p - s, 2*mod_sw for bigint_addsub workspace
   70|  10.4M|   if(ws.size() < 3 * mod_sw) {
  ------------------
  |  Branch (70:7): [True: 7.72M, False: 2.73M]
  ------------------
   71|  7.72M|      ws.resize(3 * mod_sw);
   72|  7.72M|   }
   73|       |
   74|  10.4M|   word borrow = bigint_sub3(&ws[0], mod.data(), mod_sw, s.data(), mod_sw);
   75|  10.4M|   BOTAN_DEBUG_ASSERT(borrow == 0);
  ------------------
  |  |   99|  10.4M|      do {                          \
  |  |  100|  10.4M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 10.4M]
  |  |  ------------------
  ------------------
   76|  10.4M|   BOTAN_UNUSED(borrow);
  ------------------
  |  |  118|  10.4M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
   77|       |
   78|       |   // Compute t - ws
   79|  10.4M|   borrow = bigint_sub3(&ws[mod_sw], this->data(), mod_sw, &ws[0], mod_sw);
   80|       |
   81|       |   // Compute t + s
   82|  10.4M|   bigint_add3_nc(&ws[mod_sw * 2], this->data(), mod_sw, s.data(), mod_sw);
   83|       |
   84|  10.4M|   CT::conditional_copy_mem(borrow, &ws[0], &ws[mod_sw * 2], &ws[mod_sw], mod_sw);
   85|  10.4M|   set_words(&ws[0], mod_sw);
   86|       |
   87|  10.4M|   return (*this);
   88|  10.4M|}
_ZN5Botan6BigInt7mod_subERKS0_S2_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
   90|  97.4M|BigInt& BigInt::mod_sub(const BigInt& s, const BigInt& mod, secure_vector<word>& ws) {
   91|  97.4M|   if(this->is_negative() || s.is_negative() || mod.is_negative()) {
  ------------------
  |  Branch (91:7): [True: 0, False: 97.4M]
  |  Branch (91:30): [True: 0, False: 97.4M]
  |  Branch (91:49): [True: 0, False: 97.4M]
  ------------------
   92|      0|      throw Invalid_Argument("BigInt::mod_sub expects all arguments are positive");
   93|      0|   }
   94|       |
   95|       |   // We are assuming in this function that *this and s are no more than mod_sw words long
   96|  97.4M|   BOTAN_DEBUG_ASSERT(*this < mod);
  ------------------
  |  |   99|  97.4M|      do {                          \
  |  |  100|  97.4M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 97.4M]
  |  |  ------------------
  ------------------
   97|  97.4M|   BOTAN_DEBUG_ASSERT(s < mod);
  ------------------
  |  |   99|  97.4M|      do {                          \
  |  |  100|  97.4M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 97.4M]
  |  |  ------------------
  ------------------
   98|       |
   99|  97.4M|   const size_t mod_sw = mod.sig_words();
  100|       |
  101|  97.4M|   this->grow_to(mod_sw);
  102|  97.4M|   s.grow_to(mod_sw);
  103|       |
  104|  97.4M|   if(ws.size() < mod_sw) {
  ------------------
  |  Branch (104:7): [True: 0, False: 97.4M]
  ------------------
  105|      0|      ws.resize(mod_sw);
  106|      0|   }
  107|       |
  108|  97.4M|   if(mod_sw == 4) {
  ------------------
  |  Branch (108:7): [True: 29.2M, False: 68.2M]
  ------------------
  109|  29.2M|      bigint_mod_sub_n<4>(mutable_data(), s.data(), mod.data(), ws.data());
  110|  68.2M|   } else if(mod_sw == 6) {
  ------------------
  |  Branch (110:14): [True: 50.0M, False: 18.1M]
  ------------------
  111|  50.0M|      bigint_mod_sub_n<6>(mutable_data(), s.data(), mod.data(), ws.data());
  112|  50.0M|   } else {
  113|  18.1M|      bigint_mod_sub(mutable_data(), s.data(), mod.data(), mod_sw, ws.data());
  114|  18.1M|   }
  115|       |
  116|  97.4M|   return (*this);
  117|  97.4M|}
_ZN5Botan6BigInt7mod_mulEhRKS0_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  119|  46.6M|BigInt& BigInt::mod_mul(uint8_t y, const BigInt& mod, secure_vector<word>& ws) {
  120|  46.6M|   BOTAN_ARG_CHECK(this->is_negative() == false, "*this must be positive");
  ------------------
  |  |   30|  46.6M|   do {                                                          \
  |  |   31|  46.6M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 46.6M]
  |  |  ------------------
  |  |   32|  46.6M|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  46.6M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 46.6M]
  |  |  ------------------
  ------------------
  121|  46.6M|   BOTAN_ARG_CHECK(y < 16, "y too large");
  ------------------
  |  |   30|  46.6M|   do {                                                          \
  |  |   31|  46.6M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 46.6M]
  |  |  ------------------
  |  |   32|  46.6M|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  46.6M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 46.6M]
  |  |  ------------------
  ------------------
  122|       |
  123|  46.6M|   BOTAN_DEBUG_ASSERT(*this < mod);
  ------------------
  |  |   99|  46.6M|      do {                          \
  |  |  100|  46.6M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 46.6M]
  |  |  ------------------
  ------------------
  124|       |
  125|  46.6M|   *this *= static_cast<word>(y);
  126|  46.6M|   this->reduce_below(mod, ws);
  127|  46.6M|   return (*this);
  128|  46.6M|}
_ZN5Botan6BigInt7rev_subEPKmmRNSt3__16vectorImNS_16secure_allocatorImEEEE:
  130|   229k|BigInt& BigInt::rev_sub(const word y[], size_t y_sw, secure_vector<word>& ws) {
  131|   229k|   if(this->sign() != BigInt::Positive) {
  ------------------
  |  Branch (131:7): [True: 0, False: 229k]
  ------------------
  132|      0|      throw Invalid_State("BigInt::sub_rev requires this is positive");
  133|      0|   }
  134|       |
  135|   229k|   const size_t x_sw = this->sig_words();
  136|       |
  137|   229k|   ws.resize(std::max(x_sw, y_sw));
  138|   229k|   clear_mem(ws.data(), ws.size());
  139|       |
  140|   229k|   const int32_t relative_size = bigint_sub_abs(ws.data(), data(), x_sw, y, y_sw);
  141|       |
  142|   229k|   this->cond_flip_sign(relative_size > 0);
  143|   229k|   this->swap_reg(ws);
  144|       |
  145|   229k|   return (*this);
  146|   229k|}
_ZN5Botan6BigIntmLERKS0_:
  151|    274|BigInt& BigInt::operator*=(const BigInt& y) {
  152|    274|   secure_vector<word> ws;
  153|    274|   return this->mul(y, ws);
  154|    274|}
_ZN5Botan6BigInt3mulERKS0_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  156|   459k|BigInt& BigInt::mul(const BigInt& y, secure_vector<word>& ws) {
  157|   459k|   const size_t x_sw = sig_words();
  158|   459k|   const size_t y_sw = y.sig_words();
  159|   459k|   set_sign((sign() == y.sign()) ? Positive : Negative);
  ------------------
  |  Branch (159:13): [True: 459k, False: 0]
  ------------------
  160|       |
  161|   459k|   if(x_sw == 0 || y_sw == 0) {
  ------------------
  |  Branch (161:7): [True: 80.1k, False: 379k]
  |  Branch (161:20): [True: 0, False: 379k]
  ------------------
  162|  80.1k|      clear();
  163|  80.1k|      set_sign(Positive);
  164|   379k|   } else if(x_sw == 1 && y_sw) {
  ------------------
  |  Branch (164:14): [True: 103k, False: 275k]
  |  Branch (164:27): [True: 103k, False: 0]
  ------------------
  165|   103k|      grow_to(y_sw + 1);
  166|   103k|      bigint_linmul3(mutable_data(), y.data(), y_sw, word_at(0));
  167|   275k|   } else if(y_sw == 1 && x_sw) {
  ------------------
  |  Branch (167:14): [True: 0, False: 275k]
  |  Branch (167:27): [True: 0, False: 0]
  ------------------
  168|      0|      word carry = bigint_linmul2(mutable_data(), x_sw, y.word_at(0));
  169|      0|      set_word_at(x_sw, carry);
  170|   275k|   } else {
  171|   275k|      const size_t new_size = x_sw + y_sw + 1;
  172|   275k|      ws.resize(new_size);
  173|   275k|      secure_vector<word> z_reg(new_size);
  174|       |
  175|   275k|      bigint_mul(z_reg.data(), z_reg.size(), data(), size(), x_sw, y.data(), y.size(), y_sw, ws.data(), ws.size());
  176|       |
  177|   275k|      this->swap_reg(z_reg);
  178|   275k|   }
  179|       |
  180|   459k|   return (*this);
  181|   459k|}
_ZN5Botan6BigInt6squareERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  183|  27.5k|BigInt& BigInt::square(secure_vector<word>& ws) {
  184|  27.5k|   const size_t sw = sig_words();
  185|       |
  186|  27.5k|   secure_vector<word> z(2 * sw);
  187|  27.5k|   ws.resize(z.size());
  188|       |
  189|  27.5k|   bigint_sqr(z.data(), z.size(), data(), size(), sw, ws.data(), ws.size());
  190|       |
  191|  27.5k|   swap_reg(z);
  192|  27.5k|   set_sign(BigInt::Positive);
  193|       |
  194|  27.5k|   return (*this);
  195|  27.5k|}
_ZN5Botan6BigIntmLEm:
  197|  99.5M|BigInt& BigInt::operator*=(word y) {
  198|  99.5M|   if(y == 0) {
  ------------------
  |  Branch (198:7): [True: 0, False: 99.5M]
  ------------------
  199|      0|      clear();
  200|      0|      set_sign(Positive);
  201|      0|   }
  202|       |
  203|  99.5M|   const word carry = bigint_linmul2(mutable_data(), size(), y);
  204|  99.5M|   set_word_at(size(), carry);
  205|       |
  206|  99.5M|   return (*this);
  207|  99.5M|}
_ZN5Botan6BigIntlSEm:
  260|  13.0k|BigInt& BigInt::operator<<=(size_t shift) {
  261|  13.0k|   const size_t sw = sig_words();
  262|  13.0k|   const size_t new_size = sw + (shift + BOTAN_MP_WORD_BITS - 1) / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|  13.0k|#define BOTAN_MP_WORD_BITS 64
  ------------------
                 const size_t new_size = sw + (shift + BOTAN_MP_WORD_BITS - 1) / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|  13.0k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  263|       |
  264|  13.0k|   m_data.grow_to(new_size);
  265|       |
  266|  13.0k|   bigint_shl1(m_data.mutable_data(), new_size, sw, shift);
  267|       |
  268|  13.0k|   return (*this);
  269|  13.0k|}
_ZN5Botan6BigIntrSEm:
  274|   641k|BigInt& BigInt::operator>>=(size_t shift) {
  275|   641k|   bigint_shr1(m_data.mutable_data(), m_data.size(), shift);
  276|       |
  277|   641k|   if(is_negative() && is_zero()) {
  ------------------
  |  Branch (277:7): [True: 28.0k, False: 613k]
  |  Branch (277:24): [True: 0, False: 28.0k]
  ------------------
  278|      0|      set_sign(Positive);
  279|      0|   }
  280|       |
  281|   641k|   return (*this);
  282|   641k|}

_ZN5Botan6BigInt4add2ERKS0_PKmmNS0_4SignE:
   19|   358k|BigInt BigInt::add2(const BigInt& x, const word y[], size_t y_words, BigInt::Sign y_sign) {
   20|   358k|   const size_t x_sw = x.sig_words();
   21|       |
   22|   358k|   BigInt z = BigInt::with_capacity(std::max(x_sw, y_words) + 1);
   23|       |
   24|   358k|   if(x.sign() == y_sign) {
  ------------------
  |  Branch (24:7): [True: 346k, False: 12.3k]
  ------------------
   25|   346k|      bigint_add3(z.mutable_data(), x.data(), x_sw, y, y_words);
   26|   346k|      z.set_sign(x.sign());
   27|   346k|   } else {
   28|  12.3k|      const int32_t relative_size = bigint_sub_abs(z.mutable_data(), x.data(), x_sw, y, y_words);
   29|       |
   30|       |      //z.sign_fixup(relative_size, y_sign);
   31|  12.3k|      if(relative_size < 0) {
  ------------------
  |  Branch (31:10): [True: 11.8k, False: 465]
  ------------------
   32|  11.8k|         z.set_sign(y_sign);
   33|  11.8k|      } else if(relative_size == 0) {
  ------------------
  |  Branch (33:17): [True: 183, False: 282]
  ------------------
   34|    183|         z.set_sign(BigInt::Positive);
   35|    282|      } else {
   36|    282|         z.set_sign(x.sign());
   37|    282|      }
   38|  12.3k|   }
   39|       |
   40|   358k|   return z;
   41|   358k|}
_ZN5BotanmlERKNS_6BigIntES2_:
   46|   105k|BigInt operator*(const BigInt& x, const BigInt& y) {
   47|   105k|   const size_t x_sw = x.sig_words();
   48|   105k|   const size_t y_sw = y.sig_words();
   49|       |
   50|   105k|   BigInt z = BigInt::with_capacity(x.size() + y.size());
   51|       |
   52|   105k|   if(x_sw == 1 && y_sw) {
  ------------------
  |  Branch (52:7): [True: 4.34k, False: 100k]
  |  Branch (52:20): [True: 4.33k, False: 7]
  ------------------
   53|  4.33k|      bigint_linmul3(z.mutable_data(), y.data(), y_sw, x.word_at(0));
   54|   100k|   } else if(y_sw == 1 && x_sw) {
  ------------------
  |  Branch (54:14): [True: 169, False: 100k]
  |  Branch (54:27): [True: 159, False: 10]
  ------------------
   55|    159|      bigint_linmul3(z.mutable_data(), x.data(), x_sw, y.word_at(0));
   56|   100k|   } else if(x_sw && y_sw) {
  ------------------
  |  Branch (56:14): [True: 100k, False: 314]
  |  Branch (56:22): [True: 100k, False: 7]
  ------------------
   57|   100k|      secure_vector<word> workspace(z.size());
   58|       |
   59|   100k|      bigint_mul(z.mutable_data(),
   60|   100k|                 z.size(),
   61|   100k|                 x.data(),
   62|   100k|                 x.size(),
   63|   100k|                 x_sw,
   64|   100k|                 y.data(),
   65|   100k|                 y.size(),
   66|   100k|                 y_sw,
   67|   100k|                 workspace.data(),
   68|   100k|                 workspace.size());
   69|   100k|   }
   70|       |
   71|   105k|   z.cond_flip_sign(x_sw > 0 && y_sw > 0 && x.sign() != y.sign());
  ------------------
  |  Branch (71:21): [True: 104k, False: 314]
  |  Branch (71:33): [True: 104k, False: 7]
  |  Branch (71:45): [True: 268, False: 104k]
  ------------------
   72|       |
   73|   105k|   return z;
   74|   105k|}
_ZN5BotanmlERKNS_6BigIntEm:
   79|   268k|BigInt operator*(const BigInt& x, word y) {
   80|   268k|   const size_t x_sw = x.sig_words();
   81|       |
   82|   268k|   BigInt z = BigInt::with_capacity(x_sw + 1);
   83|       |
   84|   268k|   if(x_sw && y) {
  ------------------
  |  Branch (84:7): [True: 268k, False: 0]
  |  Branch (84:15): [True: 134k, False: 134k]
  ------------------
   85|   134k|      bigint_linmul3(z.mutable_data(), x.data(), x_sw, y);
   86|   134k|      z.set_sign(x.sign());
   87|   134k|   }
   88|       |
   89|   268k|   return z;
   90|   268k|}
_ZN5BotanrmERKNS_6BigIntES2_:
  122|  6.67k|BigInt operator%(const BigInt& n, const BigInt& mod) {
  123|  6.67k|   if(mod.is_zero()) {
  ------------------
  |  Branch (123:7): [True: 0, False: 6.67k]
  ------------------
  124|      0|      throw Invalid_Argument("BigInt::operator% divide by zero");
  125|      0|   }
  126|  6.67k|   if(mod.is_negative()) {
  ------------------
  |  Branch (126:7): [True: 0, False: 6.67k]
  ------------------
  127|      0|      throw Invalid_Argument("BigInt::operator% modulus must be > 0");
  128|      0|   }
  129|  6.67k|   if(n.is_positive() && mod.is_positive() && n < mod) {
  ------------------
  |  Branch (129:7): [True: 6.67k, False: 0]
  |  Branch (129:26): [True: 6.67k, False: 0]
  |  Branch (129:47): [True: 157, False: 6.51k]
  ------------------
  130|    157|      return n;
  131|    157|   }
  132|       |
  133|  6.51k|   if(mod.sig_words() == 1) {
  ------------------
  |  Branch (133:7): [True: 0, False: 6.51k]
  ------------------
  134|      0|      return BigInt::from_word(n % mod.word_at(0));
  135|      0|   }
  136|       |
  137|  6.51k|   BigInt q, r;
  138|  6.51k|   vartime_divide(n, mod, q, r);
  139|  6.51k|   return r;
  140|  6.51k|}
_ZN5BotanlsERKNS_6BigIntEm:
  174|  6.51k|BigInt operator<<(const BigInt& x, size_t shift) {
  175|  6.51k|   const size_t x_sw = x.sig_words();
  176|       |
  177|  6.51k|   const size_t new_size = x_sw + (shift + BOTAN_MP_WORD_BITS - 1) / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|  6.51k|#define BOTAN_MP_WORD_BITS 64
  ------------------
                 const size_t new_size = x_sw + (shift + BOTAN_MP_WORD_BITS - 1) / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|  6.51k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  178|  6.51k|   BigInt y = BigInt::with_capacity(new_size);
  179|  6.51k|   bigint_shl2(y.mutable_data(), x.data(), x_sw, shift);
  180|  6.51k|   y.set_sign(x.sign());
  181|  6.51k|   return y;
  182|  6.51k|}
_ZN5BotanrsERKNS_6BigIntEm:
  187|    437|BigInt operator>>(const BigInt& x, size_t shift) {
  188|    437|   const size_t shift_words = shift / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|    437|#define BOTAN_MP_WORD_BITS 64
  ------------------
  189|    437|   const size_t x_sw = x.sig_words();
  190|       |
  191|    437|   if(shift_words >= x_sw) {
  ------------------
  |  Branch (191:7): [True: 0, False: 437]
  ------------------
  192|      0|      return BigInt::zero();
  193|      0|   }
  194|       |
  195|    437|   BigInt y = BigInt::with_capacity(x_sw - shift_words);
  196|    437|   bigint_shr2(y.mutable_data(), x.data(), x_sw, shift);
  197|       |
  198|    437|   if(x.is_negative() && y.is_zero()) {
  ------------------
  |  Branch (198:7): [True: 0, False: 437]
  |  Branch (198:26): [True: 0, False: 0]
  ------------------
  199|      0|      y.set_sign(BigInt::Positive);
  200|    437|   } else {
  201|    437|      y.set_sign(x.sign());
  202|    437|   }
  203|       |
  204|    437|   return y;
  205|    437|}

_ZN5Botan6BigIntC2Em:
   18|  72.9k|BigInt::BigInt(uint64_t n) {
   19|  72.9k|#if BOTAN_MP_WORD_BITS == 64
   20|  72.9k|   m_data.set_word_at(0, n);
   21|       |#else
   22|       |   m_data.set_word_at(1, static_cast<word>(n >> 32));
   23|       |   m_data.set_word_at(0, static_cast<word>(n));
   24|       |#endif
   25|  72.9k|}
_ZN5Botan6BigInt9from_wordEm:
   42|    616|BigInt BigInt::from_word(word n) {
   43|    616|   BigInt bn;
   44|    616|   bn.set_word_at(0, n);
   45|    616|   return bn;
   46|    616|}
_ZN5Botan6BigInt13with_capacityEm:
   58|  1.06M|BigInt BigInt::with_capacity(size_t size) {
   59|  1.06M|   BigInt bn;
   60|  1.06M|   bn.grow_to(size);
   61|  1.06M|   return bn;
   62|  1.06M|}
_ZN5Botan6BigIntC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   67|     53|BigInt::BigInt(std::string_view str) {
   68|     53|   Base base = Decimal;
   69|     53|   size_t markers = 0;
   70|     53|   bool negative = false;
   71|       |
   72|     53|   if(str.length() > 0 && str[0] == '-') {
  ------------------
  |  Branch (72:7): [True: 53, False: 0]
  |  Branch (72:27): [True: 0, False: 53]
  ------------------
   73|      0|      markers += 1;
   74|      0|      negative = true;
   75|      0|   }
   76|       |
   77|     53|   if(str.length() > markers + 2 && str[markers] == '0' && str[markers + 1] == 'x') {
  ------------------
  |  Branch (77:7): [True: 51, False: 2]
  |  Branch (77:37): [True: 51, False: 0]
  |  Branch (77:60): [True: 51, False: 0]
  ------------------
   78|     51|      markers += 2;
   79|     51|      base = Hexadecimal;
   80|     51|   }
   81|       |
   82|     53|   *this = decode(cast_char_ptr_to_uint8(str.data()) + markers, str.length() - markers, base);
   83|       |
   84|     53|   if(negative) {
  ------------------
  |  Branch (84:7): [True: 0, False: 53]
  ------------------
   85|      0|      set_sign(Negative);
   86|     53|   } else {
   87|     53|      set_sign(Positive);
   88|     53|   }
   89|     53|}
_ZN5Botan6BigIntC2EPKhm:
   91|   114k|BigInt::BigInt(const uint8_t input[], size_t length) {
   92|   114k|   binary_decode(input, length);
   93|   114k|}
_ZN5Botan6BigInt24from_bytes_with_max_bitsEPKhmm:
  103|  42.2k|BigInt BigInt::from_bytes_with_max_bits(const uint8_t input[], size_t length, size_t max_bits) {
  104|  42.2k|   const size_t input_bits = 8 * length;
  105|       |
  106|  42.2k|   BigInt bn;
  107|  42.2k|   bn.binary_decode(input, length);
  108|       |
  109|  42.2k|   if(input_bits > max_bits) {
  ------------------
  |  Branch (109:7): [True: 2.61k, False: 39.6k]
  ------------------
  110|  2.61k|      const size_t bits_to_shift = input_bits - max_bits;
  111|       |
  112|  2.61k|      bn >>= bits_to_shift;
  113|  2.61k|   }
  114|       |
  115|  42.2k|   return bn;
  116|  42.2k|}
_ZNK5Botan6BigInt8cmp_wordEm:
  129|   240k|int32_t BigInt::cmp_word(word other) const {
  130|   240k|   if(is_negative()) {
  ------------------
  |  Branch (130:7): [True: 0, False: 240k]
  ------------------
  131|      0|      return -1;  // other is positive ...
  132|      0|   }
  133|       |
  134|   240k|   const size_t sw = this->sig_words();
  135|   240k|   if(sw > 1) {
  ------------------
  |  Branch (135:7): [True: 222k, False: 17.5k]
  ------------------
  136|   222k|      return 1;  // must be larger since other is just one word ...
  137|   222k|   }
  138|       |
  139|  17.5k|   return bigint_cmp(this->data(), sw, &other, 1);
  140|   240k|}
_ZNK5Botan6BigInt3cmpERKS0_b:
  145|   204k|int32_t BigInt::cmp(const BigInt& other, bool check_signs) const {
  146|   204k|   if(check_signs) {
  ------------------
  |  Branch (146:7): [True: 204k, False: 0]
  ------------------
  147|   204k|      if(other.is_positive() && this->is_negative()) {
  ------------------
  |  Branch (147:10): [True: 204k, False: 0]
  |  Branch (147:33): [True: 0, False: 204k]
  ------------------
  148|      0|         return -1;
  149|      0|      }
  150|       |
  151|   204k|      if(other.is_negative() && this->is_positive()) {
  ------------------
  |  Branch (151:10): [True: 0, False: 204k]
  |  Branch (151:33): [True: 0, False: 0]
  ------------------
  152|      0|         return 1;
  153|      0|      }
  154|       |
  155|   204k|      if(other.is_negative() && this->is_negative()) {
  ------------------
  |  Branch (155:10): [True: 0, False: 204k]
  |  Branch (155:33): [True: 0, False: 0]
  ------------------
  156|      0|         return (-bigint_cmp(this->data(), this->size(), other.data(), other.size()));
  157|      0|      }
  158|   204k|   }
  159|       |
  160|   204k|   return bigint_cmp(this->data(), this->size(), other.data(), other.size());
  161|   204k|}
_ZNK5Botan6BigInt8is_equalERKS0_:
  163|   292k|bool BigInt::is_equal(const BigInt& other) const {
  164|   292k|   if(this->sign() != other.sign()) {
  ------------------
  |  Branch (164:7): [True: 0, False: 292k]
  ------------------
  165|      0|      return false;
  166|      0|   }
  167|       |
  168|   292k|   return bigint_ct_is_eq(this->data(), this->sig_words(), other.data(), other.sig_words()).as_bool();
  169|   292k|}
_ZNK5Botan6BigInt12is_less_thanERKS0_:
  171|   119k|bool BigInt::is_less_than(const BigInt& other) const {
  172|   119k|   if(this->is_negative() && other.is_positive()) {
  ------------------
  |  Branch (172:7): [True: 0, False: 119k]
  |  Branch (172:30): [True: 0, False: 0]
  ------------------
  173|      0|      return true;
  174|      0|   }
  175|       |
  176|   119k|   if(this->is_positive() && other.is_negative()) {
  ------------------
  |  Branch (176:7): [True: 119k, False: 0]
  |  Branch (176:30): [True: 0, False: 119k]
  ------------------
  177|      0|      return false;
  178|      0|   }
  179|       |
  180|   119k|   if(other.is_negative() && this->is_negative()) {
  ------------------
  |  Branch (180:7): [True: 0, False: 119k]
  |  Branch (180:30): [True: 0, False: 0]
  ------------------
  181|      0|      return bigint_ct_is_lt(other.data(), other.sig_words(), this->data(), this->sig_words()).as_bool();
  182|      0|   }
  183|       |
  184|   119k|   return bigint_ct_is_lt(this->data(), this->sig_words(), other.data(), other.sig_words()).as_bool();
  185|   119k|}
_ZNK5Botan6BigInt12encode_wordsEPmm:
  187|  19.8k|void BigInt::encode_words(word out[], size_t size) const {
  188|  19.8k|   const size_t words = sig_words();
  189|       |
  190|  19.8k|   if(words > size) {
  ------------------
  |  Branch (190:7): [True: 0, False: 19.8k]
  ------------------
  191|      0|      throw Encoding_Error("BigInt::encode_words value too large to encode");
  192|      0|   }
  193|       |
  194|  19.8k|   clear_mem(out, size);
  195|  19.8k|   copy_mem(out, data(), words);
  196|  19.8k|}
_ZNK5Botan6BigInt4Data14calc_sig_wordsEv:
  198|  39.1M|size_t BigInt::Data::calc_sig_words() const {
  199|  39.1M|   const size_t sz = m_reg.size();
  200|  39.1M|   size_t sig = sz;
  201|       |
  202|  39.1M|   word sub = 1;
  203|       |
  204|   621M|   for(size_t i = 0; i != sz; ++i) {
  ------------------
  |  Branch (204:22): [True: 582M, False: 39.1M]
  ------------------
  205|   582M|      const word w = m_reg[sz - i - 1];
  206|   582M|      sub &= ct_is_zero(w);
  207|   582M|      sig -= sub;
  208|   582M|   }
  209|       |
  210|       |   /*
  211|       |   * This depends on the data so is poisoned, but unpoison it here as
  212|       |   * later conditionals are made on the size.
  213|       |   */
  214|  39.1M|   CT::unpoison(sig);
  215|       |
  216|  39.1M|   return sig;
  217|  39.1M|}
_ZNK5Botan6BigInt13get_substringEmm:
  222|  12.9M|uint32_t BigInt::get_substring(size_t offset, size_t length) const {
  223|  12.9M|   if(length == 0 || length > 32) {
  ------------------
  |  Branch (223:7): [True: 0, False: 12.9M]
  |  Branch (223:22): [True: 0, False: 12.9M]
  ------------------
  224|      0|      throw Invalid_Argument("BigInt::get_substring invalid substring length");
  225|      0|   }
  226|       |
  227|  12.9M|   const uint32_t mask = 0xFFFFFFFF >> (32 - length);
  228|       |
  229|  12.9M|   const size_t word_offset = offset / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|  12.9M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  230|  12.9M|   const size_t wshift = (offset % BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|  12.9M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  231|       |
  232|       |   /*
  233|       |   * The substring is contained within one or at most two words. The
  234|       |   * offset and length are not secret, so we can perform conditional
  235|       |   * operations on those values.
  236|       |   */
  237|  12.9M|   const word w0 = word_at(word_offset);
  238|       |
  239|  12.9M|   if(wshift == 0 || (offset + length) / BOTAN_MP_WORD_BITS == word_offset) {
  ------------------
  |  |   50|  12.5M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  |  Branch (239:7): [True: 427k, False: 12.5M]
  |  Branch (239:22): [True: 12.1M, False: 391k]
  ------------------
  240|  12.5M|      return static_cast<uint32_t>(w0 >> wshift) & mask;
  241|  12.5M|   } else {
  242|   391k|      const word w1 = word_at(word_offset + 1);
  243|   391k|      return static_cast<uint32_t>((w0 >> wshift) | (w1 << (BOTAN_MP_WORD_BITS - wshift))) & mask;
  ------------------
  |  |   50|   391k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  244|   391k|   }
  245|  12.9M|}
_ZNK5Botan6BigInt5bytesEv:
  277|   131k|size_t BigInt::bytes() const {
  278|   131k|   return round_up(bits(), 8) / 8;
  279|   131k|}
_ZNK5Botan6BigInt13top_bits_freeEv:
  281|   377k|size_t BigInt::top_bits_free() const {
  282|   377k|   const size_t words = sig_words();
  283|       |
  284|   377k|   const word top_word = word_at(words - 1);
  285|   377k|   const size_t bits_used = high_bit(top_word);
  286|   377k|   CT::unpoison(bits_used);
  287|   377k|   return BOTAN_MP_WORD_BITS - bits_used;
  ------------------
  |  |   50|   377k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  288|   377k|}
_ZNK5Botan6BigInt4bitsEv:
  290|   373k|size_t BigInt::bits() const {
  291|   373k|   const size_t words = sig_words();
  292|       |
  293|   373k|   if(words == 0) {
  ------------------
  |  Branch (293:7): [True: 1.92k, False: 371k]
  ------------------
  294|  1.92k|      return 0;
  295|  1.92k|   }
  296|       |
  297|   371k|   const size_t full_words = (words - 1) * BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|   371k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  298|   371k|   const size_t top_bits = BOTAN_MP_WORD_BITS - top_bits_free();
  ------------------
  |  |   50|   371k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  299|       |
  300|   371k|   return full_words + top_bits;
  301|   373k|}
_ZN5Botan6BigInt12reduce_belowERKS0_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  312|  46.6M|size_t BigInt::reduce_below(const BigInt& p, secure_vector<word>& ws) {
  313|  46.6M|   if(p.is_negative() || this->is_negative()) {
  ------------------
  |  Branch (313:7): [True: 0, False: 46.6M]
  |  Branch (313:26): [True: 0, False: 46.6M]
  ------------------
  314|      0|      throw Invalid_Argument("BigInt::reduce_below both values must be positive");
  315|      0|   }
  316|       |
  317|  46.6M|   const size_t p_words = p.sig_words();
  318|       |
  319|  46.6M|   if(size() < p_words + 1) {
  ------------------
  |  Branch (319:7): [True: 0, False: 46.6M]
  ------------------
  320|      0|      grow_to(p_words + 1);
  321|      0|   }
  322|       |
  323|  46.6M|   if(ws.size() < p_words + 1) {
  ------------------
  |  Branch (323:7): [True: 6.51k, False: 46.6M]
  ------------------
  324|  6.51k|      ws.resize(p_words + 1);
  325|  6.51k|   }
  326|       |
  327|  46.6M|   clear_mem(ws.data(), ws.size());
  328|       |
  329|  46.6M|   size_t reductions = 0;
  330|       |
  331|   122M|   for(;;) {
  332|   122M|      word borrow = bigint_sub3(ws.data(), data(), p_words + 1, p.data(), p_words);
  333|   122M|      if(borrow) {
  ------------------
  |  Branch (333:10): [True: 46.6M, False: 75.8M]
  ------------------
  334|  46.6M|         break;
  335|  46.6M|      }
  336|       |
  337|  75.8M|      ++reductions;
  338|  75.8M|      swap_reg(ws);
  339|  75.8M|   }
  340|       |
  341|  46.6M|   return reductions;
  342|  46.6M|}
_ZN5Botan6BigInt15ct_reduce_belowERKS0_RNSt3__16vectorImNS_16secure_allocatorImEEEEm:
  344|   229k|void BigInt::ct_reduce_below(const BigInt& mod, secure_vector<word>& ws, size_t bound) {
  345|   229k|   if(mod.is_negative() || this->is_negative()) {
  ------------------
  |  Branch (345:7): [True: 0, False: 229k]
  |  Branch (345:28): [True: 0, False: 229k]
  ------------------
  346|      0|      throw Invalid_Argument("BigInt::ct_reduce_below both values must be positive");
  347|      0|   }
  348|       |
  349|   229k|   const size_t mod_words = mod.sig_words();
  350|       |
  351|   229k|   grow_to(mod_words);
  352|       |
  353|   229k|   const size_t sz = size();
  354|       |
  355|   229k|   ws.resize(sz);
  356|       |
  357|   229k|   clear_mem(ws.data(), sz);
  358|       |
  359|   688k|   for(size_t i = 0; i != bound; ++i) {
  ------------------
  |  Branch (359:22): [True: 459k, False: 229k]
  ------------------
  360|   459k|      word borrow = bigint_sub3(ws.data(), data(), sz, mod.data(), mod_words);
  361|       |
  362|   459k|      CT::Mask<word>::is_zero(borrow).select_n(mutable_data(), ws.data(), data(), sz);
  363|   459k|   }
  364|   229k|}
_ZNK5Botan6BigInt13binary_encodeEPh:
  375|  15.4k|void BigInt::binary_encode(uint8_t buf[]) const {
  376|  15.4k|   this->binary_encode(buf, bytes());
  377|  15.4k|}
_ZNK5Botan6BigInt13binary_encodeEPhm:
  382|  43.7k|void BigInt::binary_encode(uint8_t output[], size_t len) const {
  383|  43.7k|   const size_t full_words = len / sizeof(word);
  384|  43.7k|   const size_t extra_bytes = len % sizeof(word);
  385|       |
  386|   355k|   for(size_t i = 0; i != full_words; ++i) {
  ------------------
  |  Branch (386:22): [True: 312k, False: 43.7k]
  ------------------
  387|   312k|      const word w = word_at(i);
  388|   312k|      store_be(w, output + (len - (i + 1) * sizeof(word)));
  389|   312k|   }
  390|       |
  391|  43.7k|   if(extra_bytes > 0) {
  ------------------
  |  Branch (391:7): [True: 7.21k, False: 36.5k]
  ------------------
  392|  7.21k|      const word w = word_at(full_words);
  393|       |
  394|  52.9k|      for(size_t i = 0; i != extra_bytes; ++i) {
  ------------------
  |  Branch (394:25): [True: 45.7k, False: 7.21k]
  ------------------
  395|  45.7k|         output[extra_bytes - i - 1] = get_byte_var(sizeof(word) - i - 1, w);
  396|  45.7k|      }
  397|  7.21k|   }
  398|  43.7k|}
_ZN5Botan6BigInt13binary_decodeEPKhm:
  403|   316k|void BigInt::binary_decode(const uint8_t buf[], size_t length) {
  404|   316k|   clear();
  405|       |
  406|   316k|   const size_t full_words = length / sizeof(word);
  407|   316k|   const size_t extra_bytes = length % sizeof(word);
  408|       |
  409|   316k|   secure_vector<word> reg((round_up(full_words + (extra_bytes > 0 ? 1 : 0), 8)));
  ------------------
  |  Branch (409:52): [True: 81.6k, False: 234k]
  ------------------
  410|       |
  411|  2.29M|   for(size_t i = 0; i != full_words; ++i) {
  ------------------
  |  Branch (411:22): [True: 1.98M, False: 316k]
  ------------------
  412|  1.98M|      reg[i] = load_be<word>(buf + length - sizeof(word) * (i + 1), 0);
  413|  1.98M|   }
  414|       |
  415|   316k|   if(extra_bytes > 0) {
  ------------------
  |  Branch (415:7): [True: 81.6k, False: 234k]
  ------------------
  416|   367k|      for(size_t i = 0; i != extra_bytes; ++i) {
  ------------------
  |  Branch (416:25): [True: 285k, False: 81.6k]
  ------------------
  417|   285k|         reg[full_words] = (reg[full_words] << 8) | buf[i];
  418|   285k|      }
  419|  81.6k|   }
  420|       |
  421|   316k|   m_data.swap(reg);
  422|   316k|}
_ZN5Botan6BigInt11ct_cond_addEbRKS0_:
  424|     77|void BigInt::ct_cond_add(bool predicate, const BigInt& value) {
  425|     77|   if(this->is_negative() || value.is_negative()) {
  ------------------
  |  Branch (425:7): [True: 0, False: 77]
  |  Branch (425:30): [True: 0, False: 77]
  ------------------
  426|      0|      throw Invalid_Argument("BigInt::ct_cond_add requires both values to be positive");
  427|      0|   }
  428|     77|   this->grow_to(1 + value.sig_words());
  429|       |
  430|     77|   bigint_cnd_add(static_cast<word>(predicate), this->mutable_data(), this->size(), value.data(), value.sig_words());
  431|     77|}
_ZN5Botan6BigInt12ct_cond_swapEbRS0_:
  467|  52.9M|void BigInt::ct_cond_swap(bool predicate, BigInt& other) {
  468|  52.9M|   const size_t max_words = std::max(size(), other.size());
  469|  52.9M|   grow_to(max_words);
  470|  52.9M|   other.grow_to(max_words);
  471|       |
  472|  52.9M|   bigint_cnd_swap(static_cast<word>(predicate), this->mutable_data(), other.mutable_data(), max_words);
  473|  52.9M|}
_ZN5Botan6BigInt14cond_flip_signEb:
  475|   644k|void BigInt::cond_flip_sign(bool predicate) {
  476|       |   // This code is assuming Negative == 0, Positive == 1
  477|       |
  478|   644k|   const auto mask = CT::Mask<uint8_t>::expand(predicate);
  479|       |
  480|   644k|   const uint8_t current_sign = static_cast<uint8_t>(sign());
  481|       |
  482|   644k|   const uint8_t new_sign = mask.select(current_sign ^ 1, current_sign);
  483|       |
  484|   644k|   set_sign(static_cast<Sign>(new_sign));
  485|   644k|}
_ZN5Botan6BigInt14ct_cond_assignEbRKS0_:
  487|  39.6k|void BigInt::ct_cond_assign(bool predicate, const BigInt& other) {
  488|  39.6k|   const size_t t_words = size();
  489|  39.6k|   const size_t o_words = other.size();
  490|       |
  491|  39.6k|   if(o_words < t_words) {
  ------------------
  |  Branch (491:7): [True: 274, False: 39.4k]
  ------------------
  492|    274|      grow_to(o_words);
  493|    274|   }
  494|       |
  495|  39.6k|   const size_t r_words = std::max(t_words, o_words);
  496|       |
  497|  39.6k|   const auto mask = CT::Mask<word>::expand(predicate);
  498|       |
  499|   361k|   for(size_t i = 0; i != r_words; ++i) {
  ------------------
  |  Branch (499:22): [True: 321k, False: 39.6k]
  ------------------
  500|   321k|      const word o_word = other.word_at(i);
  501|   321k|      const word t_word = this->word_at(i);
  502|   321k|      this->set_word_at(i, mask.select(o_word, t_word));
  503|   321k|   }
  504|       |
  505|  39.6k|   const bool different_sign = sign() != other.sign();
  506|  39.6k|   cond_flip_sign(predicate && different_sign);
  ------------------
  |  Branch (506:19): [True: 15.0k, False: 24.6k]
  |  Branch (506:32): [True: 439, False: 14.5k]
  ------------------
  507|  39.6k|}

_ZN5Botan9ct_divideERKNS_6BigIntES2_RS0_S3_:
   48|  34.5k|void ct_divide(const BigInt& x, const BigInt& y, BigInt& q_out, BigInt& r_out) {
   49|  34.5k|   if(y.is_zero()) {
  ------------------
  |  Branch (49:7): [True: 0, False: 34.5k]
  ------------------
   50|      0|      throw Invalid_Argument("ct_divide: cannot divide by zero");
   51|      0|   }
   52|       |
   53|  34.5k|   const size_t x_words = x.sig_words();
   54|  34.5k|   const size_t y_words = y.sig_words();
   55|       |
   56|  34.5k|   const size_t x_bits = x.bits();
   57|       |
   58|  34.5k|   BigInt q = BigInt::with_capacity(x_words);
   59|  34.5k|   BigInt r = BigInt::with_capacity(y_words);
   60|  34.5k|   BigInt t = BigInt::with_capacity(y_words);  // a temporary
   61|       |
   62|  52.9M|   for(size_t i = 0; i != x_bits; ++i) {
  ------------------
  |  Branch (62:22): [True: 52.9M, False: 34.5k]
  ------------------
   63|  52.9M|      const size_t b = x_bits - 1 - i;
   64|  52.9M|      const bool x_b = x.get_bit(b);
   65|       |
   66|  52.9M|      r *= 2;
   67|  52.9M|      r.conditionally_set_bit(0, x_b);
   68|       |
   69|  52.9M|      const bool r_gte_y = bigint_sub3(t.mutable_data(), r.data(), r.size(), y.data(), y_words) == 0;
   70|       |
   71|  52.9M|      q.conditionally_set_bit(b, r_gte_y);
   72|  52.9M|      r.ct_cond_swap(r_gte_y, t);
   73|  52.9M|   }
   74|       |
   75|  34.5k|   sign_fixup(x, y, q, r);
   76|  34.5k|   r_out = r;
   77|  34.5k|   q_out = q;
   78|  34.5k|}
_ZN5Botan9ct_moduloERKNS_6BigIntES2_:
  117|    437|BigInt ct_modulo(const BigInt& x, const BigInt& y) {
  118|    437|   if(y.is_negative() || y.is_zero()) {
  ------------------
  |  Branch (118:7): [True: 0, False: 437]
  |  Branch (118:26): [True: 0, False: 437]
  ------------------
  119|      0|      throw Invalid_Argument("ct_modulo requires y > 0");
  120|      0|   }
  121|       |
  122|    437|   const size_t y_words = y.sig_words();
  123|       |
  124|    437|   const size_t x_bits = x.bits();
  125|       |
  126|    437|   BigInt r = BigInt::with_capacity(y_words);
  127|    437|   BigInt t = BigInt::with_capacity(y_words);
  128|       |
  129|  64.4k|   for(size_t i = 0; i != x_bits; ++i) {
  ------------------
  |  Branch (129:22): [True: 63.9k, False: 437]
  ------------------
  130|  63.9k|      const size_t b = x_bits - 1 - i;
  131|  63.9k|      const bool x_b = x.get_bit(b);
  132|       |
  133|  63.9k|      r *= 2;
  134|  63.9k|      r.conditionally_set_bit(0, x_b);
  135|       |
  136|  63.9k|      const bool r_gte_y = bigint_sub3(t.mutable_data(), r.data(), r.size(), y.data(), y_words) == 0;
  137|       |
  138|  63.9k|      r.ct_cond_swap(r_gte_y, t);
  139|  63.9k|   }
  140|       |
  141|    437|   if(x.is_negative()) {
  ------------------
  |  Branch (141:7): [True: 0, False: 437]
  ------------------
  142|      0|      if(r.is_nonzero()) {
  ------------------
  |  Branch (142:10): [True: 0, False: 0]
  ------------------
  143|      0|         r = y - r;
  144|      0|      }
  145|      0|   }
  146|       |
  147|    437|   return r;
  148|    437|}
_ZN5Botan14vartime_divideERKNS_6BigIntES2_RS0_S3_:
  155|  6.51k|void vartime_divide(const BigInt& x, const BigInt& y_arg, BigInt& q_out, BigInt& r_out) {
  156|  6.51k|   if(y_arg.is_zero()) {
  ------------------
  |  Branch (156:7): [True: 0, False: 6.51k]
  ------------------
  157|      0|      throw Invalid_Argument("vartime_divide: cannot divide by zero");
  158|      0|   }
  159|       |
  160|  6.51k|   const size_t y_words = y_arg.sig_words();
  161|       |
  162|  6.51k|   BOTAN_ASSERT_NOMSG(y_words > 0);
  ------------------
  |  |   60|  6.51k|   do {                                                                     \
  |  |   61|  6.51k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 6.51k]
  |  |  ------------------
  |  |   62|  6.51k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  6.51k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 6.51k]
  |  |  ------------------
  ------------------
  163|       |
  164|  6.51k|   BigInt y = y_arg;
  165|       |
  166|  6.51k|   BigInt r = x;
  167|  6.51k|   BigInt q = BigInt::zero();
  168|  6.51k|   secure_vector<word> ws;
  169|       |
  170|  6.51k|   r.set_sign(BigInt::Positive);
  171|  6.51k|   y.set_sign(BigInt::Positive);
  172|       |
  173|       |   // Calculate shifts needed to normalize y with high bit set
  174|  6.51k|   const size_t shifts = y.top_bits_free();
  175|       |
  176|  6.51k|   y <<= shifts;
  177|  6.51k|   r <<= shifts;
  178|       |
  179|       |   // we know y has not changed size, since we only shifted up to set high bit
  180|  6.51k|   const size_t t = y_words - 1;
  181|  6.51k|   const size_t n = std::max(y_words, r.sig_words()) - 1;  // r may have changed size however
  182|       |
  183|  6.51k|   BOTAN_ASSERT_NOMSG(n >= t);
  ------------------
  |  |   60|  6.51k|   do {                                                                     \
  |  |   61|  6.51k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 6.51k]
  |  |  ------------------
  |  |   62|  6.51k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  6.51k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 6.51k]
  |  |  ------------------
  ------------------
  184|       |
  185|  6.51k|   q.grow_to(n - t + 1);
  186|       |
  187|  6.51k|   word* q_words = q.mutable_data();
  188|       |
  189|  6.51k|   BigInt shifted_y = y << (BOTAN_MP_WORD_BITS * (n - t));
  ------------------
  |  |   50|  6.51k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  190|       |
  191|       |   // Set q_{n-t} to number of times r > shifted_y
  192|  6.51k|   q_words[n - t] = r.reduce_below(shifted_y, ws);
  193|       |
  194|  6.51k|   const word y_t0 = y.word_at(t);
  195|  6.51k|   const word y_t1 = y.word_at(t - 1);
  196|  6.51k|   BOTAN_DEBUG_ASSERT((y_t0 >> (BOTAN_MP_WORD_BITS - 1)) == 1);
  ------------------
  |  |   99|  6.51k|      do {                          \
  |  |  100|  6.51k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 6.51k]
  |  |  ------------------
  ------------------
  197|       |
  198|   140k|   for(size_t j = n; j != t; --j) {
  ------------------
  |  Branch (198:22): [True: 134k, False: 6.51k]
  ------------------
  199|   134k|      const word x_j0 = r.word_at(j);
  200|   134k|      const word x_j1 = r.word_at(j - 1);
  201|   134k|      const word x_j2 = r.word_at(j - 2);
  202|       |
  203|   134k|      word qjt = bigint_divop_vartime(x_j0, x_j1, y_t0);
  204|       |
  205|   134k|      qjt = CT::Mask<word>::is_equal(x_j0, y_t0).select(WordInfo<word>::max, qjt);
  206|       |
  207|       |      // Per HAC 14.23, this operation is required at most twice
  208|   134k|      qjt -= division_check(qjt, y_t0, y_t1, x_j0, x_j1, x_j2);
  209|   134k|      qjt -= division_check(qjt, y_t0, y_t1, x_j0, x_j1, x_j2);
  210|   134k|      BOTAN_DEBUG_ASSERT(division_check(qjt, y_t0, y_t1, x_j0, x_j1, x_j2) == false);
  ------------------
  |  |   99|   134k|      do {                          \
  |  |  100|   134k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 134k]
  |  |  ------------------
  ------------------
  211|       |
  212|   134k|      shifted_y >>= BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|   134k|#define BOTAN_MP_WORD_BITS 64
  ------------------
  213|       |      // Now shifted_y == y << (BOTAN_MP_WORD_BITS * (j-t-1))
  214|       |
  215|       |      // TODO this sequence could be better
  216|   134k|      r -= qjt * shifted_y;
  217|   134k|      qjt -= r.is_negative();
  218|   134k|      r += static_cast<word>(r.is_negative()) * shifted_y;
  219|       |
  220|   134k|      q_words[j - t - 1] = qjt;
  221|   134k|   }
  222|       |
  223|  6.51k|   r >>= shifts;
  224|       |
  225|  6.51k|   sign_fixup(x, y_arg, q, r);
  226|       |
  227|  6.51k|   r_out = r;
  228|  6.51k|   q_out = q;
  229|  6.51k|}
divide.cpp:_ZN5Botan12_GLOBAL__N_110sign_fixupERKNS_6BigIntES3_RS1_S4_:
   21|  41.0k|void sign_fixup(const BigInt& x, const BigInt& y, BigInt& q, BigInt& r) {
   22|  41.0k|   q.cond_flip_sign(x.sign() != y.sign());
   23|       |
   24|  41.0k|   if(x.is_negative() && r.is_nonzero()) {
  ------------------
  |  Branch (24:7): [True: 0, False: 41.0k]
  |  Branch (24:26): [True: 0, False: 0]
  ------------------
   25|      0|      q -= 1;
   26|      0|      r = y.abs() - r;
   27|      0|   }
   28|  41.0k|}
divide.cpp:_ZN5Botan12_GLOBAL__N_114division_checkEmmmmmm:
   30|   268k|inline bool division_check(word q, word y2, word y1, word x3, word x2, word x1) {
   31|       |   /*
   32|       |   Compute (y3,y2,y1) = (y2,y1) * q
   33|       |   and return true if (y3,y2,y1) > (x3,x2,x1)
   34|       |   */
   35|       |
   36|   268k|   word y3 = 0;
   37|   268k|   y1 = word_madd2(q, y1, &y3);
   38|   268k|   y2 = word_madd2(q, y2, &y3);
   39|       |
   40|   268k|   const word x[3] = {x1, x2, x3};
   41|   268k|   const word y[3] = {y1, y2, y3};
   42|       |
   43|   268k|   return bigint_ct_is_lt(x, 3, y, 3).as_bool();
   44|   268k|}

_ZN5Botan17bigint_comba_sqr4EPmPKm:
   16|  24.4M|void bigint_comba_sqr4(word z[8], const word x[4]) {
   17|  24.4M|   word w2 = 0, w1 = 0, w0 = 0;
   18|       |
   19|  24.4M|   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
   20|  24.4M|   z[0] = w0;
   21|  24.4M|   w0 = 0;
   22|       |
   23|  24.4M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
   24|  24.4M|   z[1] = w1;
   25|  24.4M|   w1 = 0;
   26|       |
   27|  24.4M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
   28|  24.4M|   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
   29|  24.4M|   z[2] = w2;
   30|  24.4M|   w2 = 0;
   31|       |
   32|  24.4M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
   33|  24.4M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
   34|  24.4M|   z[3] = w0;
   35|  24.4M|   w0 = 0;
   36|       |
   37|  24.4M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
   38|  24.4M|   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
   39|  24.4M|   z[4] = w1;
   40|  24.4M|   w1 = 0;
   41|       |
   42|  24.4M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
   43|  24.4M|   z[5] = w2;
   44|  24.4M|   w2 = 0;
   45|       |
   46|  24.4M|   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
   47|  24.4M|   z[6] = w0;
   48|  24.4M|   z[7] = w1;
   49|  24.4M|}
_ZN5Botan17bigint_comba_mul4EPmPKmS2_:
   54|  30.0M|void bigint_comba_mul4(word z[8], const word x[4], const word y[4]) {
   55|  30.0M|   word w2 = 0, w1 = 0, w0 = 0;
   56|       |
   57|  30.0M|   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
   58|  30.0M|   z[0] = w0;
   59|  30.0M|   w0 = 0;
   60|       |
   61|  30.0M|   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
   62|  30.0M|   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
   63|  30.0M|   z[1] = w1;
   64|  30.0M|   w1 = 0;
   65|       |
   66|  30.0M|   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
   67|  30.0M|   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
   68|  30.0M|   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
   69|  30.0M|   z[2] = w2;
   70|  30.0M|   w2 = 0;
   71|       |
   72|  30.0M|   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
   73|  30.0M|   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
   74|  30.0M|   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
   75|  30.0M|   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
   76|  30.0M|   z[3] = w0;
   77|  30.0M|   w0 = 0;
   78|       |
   79|  30.0M|   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
   80|  30.0M|   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
   81|  30.0M|   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
   82|  30.0M|   z[4] = w1;
   83|  30.0M|   w1 = 0;
   84|       |
   85|  30.0M|   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
   86|  30.0M|   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
   87|  30.0M|   z[5] = w2;
   88|  30.0M|   w2 = 0;
   89|       |
   90|  30.0M|   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
   91|  30.0M|   z[6] = w0;
   92|  30.0M|   z[7] = w1;
   93|  30.0M|}
_ZN5Botan17bigint_comba_sqr6EPmPKm:
   98|  44.8M|void bigint_comba_sqr6(word z[12], const word x[6]) {
   99|  44.8M|   word w2 = 0, w1 = 0, w0 = 0;
  100|       |
  101|  44.8M|   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
  102|  44.8M|   z[0] = w0;
  103|  44.8M|   w0 = 0;
  104|       |
  105|  44.8M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
  106|  44.8M|   z[1] = w1;
  107|  44.8M|   w1 = 0;
  108|       |
  109|  44.8M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
  110|  44.8M|   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
  111|  44.8M|   z[2] = w2;
  112|  44.8M|   w2 = 0;
  113|       |
  114|  44.8M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
  115|  44.8M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
  116|  44.8M|   z[3] = w0;
  117|  44.8M|   w0 = 0;
  118|       |
  119|  44.8M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
  120|  44.8M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
  121|  44.8M|   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
  122|  44.8M|   z[4] = w1;
  123|  44.8M|   w1 = 0;
  124|       |
  125|  44.8M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
  126|  44.8M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
  127|  44.8M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
  128|  44.8M|   z[5] = w2;
  129|  44.8M|   w2 = 0;
  130|       |
  131|  44.8M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
  132|  44.8M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
  133|  44.8M|   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
  134|  44.8M|   z[6] = w0;
  135|  44.8M|   w0 = 0;
  136|       |
  137|  44.8M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
  138|  44.8M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
  139|  44.8M|   z[7] = w1;
  140|  44.8M|   w1 = 0;
  141|       |
  142|  44.8M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
  143|  44.8M|   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
  144|  44.8M|   z[8] = w2;
  145|  44.8M|   w2 = 0;
  146|       |
  147|  44.8M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
  148|  44.8M|   z[9] = w0;
  149|  44.8M|   w0 = 0;
  150|       |
  151|  44.8M|   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
  152|  44.8M|   z[10] = w1;
  153|  44.8M|   z[11] = w2;
  154|  44.8M|}
_ZN5Botan17bigint_comba_mul6EPmPKmS2_:
  159|  49.8M|void bigint_comba_mul6(word z[12], const word x[6], const word y[6]) {
  160|  49.8M|   word w2 = 0, w1 = 0, w0 = 0;
  161|       |
  162|  49.8M|   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
  163|  49.8M|   z[0] = w0;
  164|  49.8M|   w0 = 0;
  165|       |
  166|  49.8M|   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
  167|  49.8M|   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
  168|  49.8M|   z[1] = w1;
  169|  49.8M|   w1 = 0;
  170|       |
  171|  49.8M|   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
  172|  49.8M|   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
  173|  49.8M|   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
  174|  49.8M|   z[2] = w2;
  175|  49.8M|   w2 = 0;
  176|       |
  177|  49.8M|   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
  178|  49.8M|   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
  179|  49.8M|   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
  180|  49.8M|   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
  181|  49.8M|   z[3] = w0;
  182|  49.8M|   w0 = 0;
  183|       |
  184|  49.8M|   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
  185|  49.8M|   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
  186|  49.8M|   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
  187|  49.8M|   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
  188|  49.8M|   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
  189|  49.8M|   z[4] = w1;
  190|  49.8M|   w1 = 0;
  191|       |
  192|  49.8M|   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
  193|  49.8M|   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
  194|  49.8M|   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
  195|  49.8M|   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
  196|  49.8M|   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
  197|  49.8M|   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
  198|  49.8M|   z[5] = w2;
  199|  49.8M|   w2 = 0;
  200|       |
  201|  49.8M|   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
  202|  49.8M|   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
  203|  49.8M|   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
  204|  49.8M|   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
  205|  49.8M|   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
  206|  49.8M|   z[6] = w0;
  207|  49.8M|   w0 = 0;
  208|       |
  209|  49.8M|   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
  210|  49.8M|   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
  211|  49.8M|   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
  212|  49.8M|   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
  213|  49.8M|   z[7] = w1;
  214|  49.8M|   w1 = 0;
  215|       |
  216|  49.8M|   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
  217|  49.8M|   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
  218|  49.8M|   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
  219|  49.8M|   z[8] = w2;
  220|  49.8M|   w2 = 0;
  221|       |
  222|  49.8M|   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
  223|  49.8M|   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
  224|  49.8M|   z[9] = w0;
  225|  49.8M|   w0 = 0;
  226|       |
  227|  49.8M|   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
  228|  49.8M|   z[10] = w1;
  229|  49.8M|   z[11] = w2;
  230|  49.8M|}
_ZN5Botan17bigint_comba_sqr8EPmPKm:
  235|  3.09M|void bigint_comba_sqr8(word z[16], const word x[8]) {
  236|  3.09M|   word w2 = 0, w1 = 0, w0 = 0;
  237|       |
  238|  3.09M|   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
  239|  3.09M|   z[0] = w0;
  240|  3.09M|   w0 = 0;
  241|       |
  242|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
  243|  3.09M|   z[1] = w1;
  244|  3.09M|   w1 = 0;
  245|       |
  246|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
  247|  3.09M|   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
  248|  3.09M|   z[2] = w2;
  249|  3.09M|   w2 = 0;
  250|       |
  251|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
  252|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
  253|  3.09M|   z[3] = w0;
  254|  3.09M|   w0 = 0;
  255|       |
  256|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
  257|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
  258|  3.09M|   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
  259|  3.09M|   z[4] = w1;
  260|  3.09M|   w1 = 0;
  261|       |
  262|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
  263|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
  264|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
  265|  3.09M|   z[5] = w2;
  266|  3.09M|   w2 = 0;
  267|       |
  268|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
  269|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
  270|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
  271|  3.09M|   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
  272|  3.09M|   z[6] = w0;
  273|  3.09M|   w0 = 0;
  274|       |
  275|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
  276|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
  277|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
  278|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
  279|  3.09M|   z[7] = w1;
  280|  3.09M|   w1 = 0;
  281|       |
  282|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
  283|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
  284|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
  285|  3.09M|   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
  286|  3.09M|   z[8] = w2;
  287|  3.09M|   w2 = 0;
  288|       |
  289|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
  290|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
  291|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
  292|  3.09M|   z[9] = w0;
  293|  3.09M|   w0 = 0;
  294|       |
  295|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
  296|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
  297|  3.09M|   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
  298|  3.09M|   z[10] = w1;
  299|  3.09M|   w1 = 0;
  300|       |
  301|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
  302|  3.09M|   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
  303|  3.09M|   z[11] = w2;
  304|  3.09M|   w2 = 0;
  305|       |
  306|  3.09M|   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
  307|  3.09M|   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
  308|  3.09M|   z[12] = w0;
  309|  3.09M|   w0 = 0;
  310|       |
  311|  3.09M|   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
  312|  3.09M|   z[13] = w1;
  313|  3.09M|   w1 = 0;
  314|       |
  315|  3.09M|   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
  316|  3.09M|   z[14] = w2;
  317|  3.09M|   z[15] = w0;
  318|  3.09M|}
_ZN5Botan17bigint_comba_mul8EPmPKmS2_:
  323|  3.65M|void bigint_comba_mul8(word z[16], const word x[8], const word y[8]) {
  324|  3.65M|   word w2 = 0, w1 = 0, w0 = 0;
  325|       |
  326|  3.65M|   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
  327|  3.65M|   z[0] = w0;
  328|  3.65M|   w0 = 0;
  329|       |
  330|  3.65M|   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
  331|  3.65M|   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
  332|  3.65M|   z[1] = w1;
  333|  3.65M|   w1 = 0;
  334|       |
  335|  3.65M|   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
  336|  3.65M|   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
  337|  3.65M|   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
  338|  3.65M|   z[2] = w2;
  339|  3.65M|   w2 = 0;
  340|       |
  341|  3.65M|   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
  342|  3.65M|   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
  343|  3.65M|   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
  344|  3.65M|   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
  345|  3.65M|   z[3] = w0;
  346|  3.65M|   w0 = 0;
  347|       |
  348|  3.65M|   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
  349|  3.65M|   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
  350|  3.65M|   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
  351|  3.65M|   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
  352|  3.65M|   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
  353|  3.65M|   z[4] = w1;
  354|  3.65M|   w1 = 0;
  355|       |
  356|  3.65M|   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
  357|  3.65M|   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
  358|  3.65M|   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
  359|  3.65M|   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
  360|  3.65M|   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
  361|  3.65M|   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
  362|  3.65M|   z[5] = w2;
  363|  3.65M|   w2 = 0;
  364|       |
  365|  3.65M|   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
  366|  3.65M|   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
  367|  3.65M|   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
  368|  3.65M|   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
  369|  3.65M|   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
  370|  3.65M|   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
  371|  3.65M|   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
  372|  3.65M|   z[6] = w0;
  373|  3.65M|   w0 = 0;
  374|       |
  375|  3.65M|   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
  376|  3.65M|   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
  377|  3.65M|   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
  378|  3.65M|   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
  379|  3.65M|   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
  380|  3.65M|   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
  381|  3.65M|   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
  382|  3.65M|   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
  383|  3.65M|   z[7] = w1;
  384|  3.65M|   w1 = 0;
  385|       |
  386|  3.65M|   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
  387|  3.65M|   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
  388|  3.65M|   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
  389|  3.65M|   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
  390|  3.65M|   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
  391|  3.65M|   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
  392|  3.65M|   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
  393|  3.65M|   z[8] = w2;
  394|  3.65M|   w2 = 0;
  395|       |
  396|  3.65M|   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
  397|  3.65M|   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
  398|  3.65M|   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
  399|  3.65M|   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
  400|  3.65M|   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
  401|  3.65M|   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
  402|  3.65M|   z[9] = w0;
  403|  3.65M|   w0 = 0;
  404|       |
  405|  3.65M|   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
  406|  3.65M|   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
  407|  3.65M|   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
  408|  3.65M|   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
  409|  3.65M|   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
  410|  3.65M|   z[10] = w1;
  411|  3.65M|   w1 = 0;
  412|       |
  413|  3.65M|   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
  414|  3.65M|   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
  415|  3.65M|   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
  416|  3.65M|   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
  417|  3.65M|   z[11] = w2;
  418|  3.65M|   w2 = 0;
  419|       |
  420|  3.65M|   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
  421|  3.65M|   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
  422|  3.65M|   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
  423|  3.65M|   z[12] = w0;
  424|  3.65M|   w0 = 0;
  425|       |
  426|  3.65M|   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
  427|  3.65M|   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
  428|  3.65M|   z[13] = w1;
  429|  3.65M|   w1 = 0;
  430|       |
  431|  3.65M|   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
  432|  3.65M|   z[14] = w2;
  433|  3.65M|   z[15] = w0;
  434|  3.65M|}
_ZN5Botan17bigint_comba_sqr9EPmPKm:
  439|  13.4M|void bigint_comba_sqr9(word z[18], const word x[9]) {
  440|  13.4M|   word w2 = 0, w1 = 0, w0 = 0;
  441|       |
  442|  13.4M|   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
  443|  13.4M|   z[0] = w0;
  444|  13.4M|   w0 = 0;
  445|       |
  446|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
  447|  13.4M|   z[1] = w1;
  448|  13.4M|   w1 = 0;
  449|       |
  450|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
  451|  13.4M|   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
  452|  13.4M|   z[2] = w2;
  453|  13.4M|   w2 = 0;
  454|       |
  455|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
  456|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
  457|  13.4M|   z[3] = w0;
  458|  13.4M|   w0 = 0;
  459|       |
  460|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
  461|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
  462|  13.4M|   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
  463|  13.4M|   z[4] = w1;
  464|  13.4M|   w1 = 0;
  465|       |
  466|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
  467|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
  468|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
  469|  13.4M|   z[5] = w2;
  470|  13.4M|   w2 = 0;
  471|       |
  472|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
  473|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
  474|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
  475|  13.4M|   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
  476|  13.4M|   z[6] = w0;
  477|  13.4M|   w0 = 0;
  478|       |
  479|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
  480|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
  481|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
  482|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
  483|  13.4M|   z[7] = w1;
  484|  13.4M|   w1 = 0;
  485|       |
  486|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[8]);
  487|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
  488|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
  489|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
  490|  13.4M|   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
  491|  13.4M|   z[8] = w2;
  492|  13.4M|   w2 = 0;
  493|       |
  494|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[8]);
  495|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
  496|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
  497|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
  498|  13.4M|   z[9] = w0;
  499|  13.4M|   w0 = 0;
  500|       |
  501|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[8]);
  502|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
  503|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
  504|  13.4M|   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
  505|  13.4M|   z[10] = w1;
  506|  13.4M|   w1 = 0;
  507|       |
  508|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[8]);
  509|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
  510|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
  511|  13.4M|   z[11] = w2;
  512|  13.4M|   w2 = 0;
  513|       |
  514|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[8]);
  515|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
  516|  13.4M|   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
  517|  13.4M|   z[12] = w0;
  518|  13.4M|   w0 = 0;
  519|       |
  520|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[5], x[8]);
  521|  13.4M|   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
  522|  13.4M|   z[13] = w1;
  523|  13.4M|   w1 = 0;
  524|       |
  525|  13.4M|   word3_muladd_2(&w1, &w0, &w2, x[6], x[8]);
  526|  13.4M|   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
  527|  13.4M|   z[14] = w2;
  528|  13.4M|   w2 = 0;
  529|       |
  530|  13.4M|   word3_muladd_2(&w2, &w1, &w0, x[7], x[8]);
  531|  13.4M|   z[15] = w0;
  532|  13.4M|   w0 = 0;
  533|       |
  534|  13.4M|   word3_muladd(&w0, &w2, &w1, x[8], x[8]);
  535|  13.4M|   z[16] = w1;
  536|  13.4M|   z[17] = w2;
  537|  13.4M|}
_ZN5Botan17bigint_comba_mul9EPmPKmS2_:
  542|  14.7M|void bigint_comba_mul9(word z[18], const word x[9], const word y[9]) {
  543|  14.7M|   word w2 = 0, w1 = 0, w0 = 0;
  544|       |
  545|  14.7M|   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
  546|  14.7M|   z[0] = w0;
  547|  14.7M|   w0 = 0;
  548|       |
  549|  14.7M|   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
  550|  14.7M|   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
  551|  14.7M|   z[1] = w1;
  552|  14.7M|   w1 = 0;
  553|       |
  554|  14.7M|   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
  555|  14.7M|   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
  556|  14.7M|   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
  557|  14.7M|   z[2] = w2;
  558|  14.7M|   w2 = 0;
  559|       |
  560|  14.7M|   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
  561|  14.7M|   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
  562|  14.7M|   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
  563|  14.7M|   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
  564|  14.7M|   z[3] = w0;
  565|  14.7M|   w0 = 0;
  566|       |
  567|  14.7M|   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
  568|  14.7M|   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
  569|  14.7M|   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
  570|  14.7M|   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
  571|  14.7M|   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
  572|  14.7M|   z[4] = w1;
  573|  14.7M|   w1 = 0;
  574|       |
  575|  14.7M|   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
  576|  14.7M|   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
  577|  14.7M|   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
  578|  14.7M|   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
  579|  14.7M|   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
  580|  14.7M|   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
  581|  14.7M|   z[5] = w2;
  582|  14.7M|   w2 = 0;
  583|       |
  584|  14.7M|   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
  585|  14.7M|   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
  586|  14.7M|   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
  587|  14.7M|   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
  588|  14.7M|   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
  589|  14.7M|   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
  590|  14.7M|   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
  591|  14.7M|   z[6] = w0;
  592|  14.7M|   w0 = 0;
  593|       |
  594|  14.7M|   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
  595|  14.7M|   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
  596|  14.7M|   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
  597|  14.7M|   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
  598|  14.7M|   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
  599|  14.7M|   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
  600|  14.7M|   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
  601|  14.7M|   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
  602|  14.7M|   z[7] = w1;
  603|  14.7M|   w1 = 0;
  604|       |
  605|  14.7M|   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
  606|  14.7M|   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
  607|  14.7M|   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
  608|  14.7M|   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
  609|  14.7M|   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
  610|  14.7M|   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
  611|  14.7M|   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
  612|  14.7M|   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
  613|  14.7M|   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
  614|  14.7M|   z[8] = w2;
  615|  14.7M|   w2 = 0;
  616|       |
  617|  14.7M|   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
  618|  14.7M|   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
  619|  14.7M|   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
  620|  14.7M|   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
  621|  14.7M|   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
  622|  14.7M|   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
  623|  14.7M|   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
  624|  14.7M|   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
  625|  14.7M|   z[9] = w0;
  626|  14.7M|   w0 = 0;
  627|       |
  628|  14.7M|   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
  629|  14.7M|   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
  630|  14.7M|   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
  631|  14.7M|   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
  632|  14.7M|   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
  633|  14.7M|   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
  634|  14.7M|   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
  635|  14.7M|   z[10] = w1;
  636|  14.7M|   w1 = 0;
  637|       |
  638|  14.7M|   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
  639|  14.7M|   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
  640|  14.7M|   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
  641|  14.7M|   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
  642|  14.7M|   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
  643|  14.7M|   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
  644|  14.7M|   z[11] = w2;
  645|  14.7M|   w2 = 0;
  646|       |
  647|  14.7M|   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
  648|  14.7M|   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
  649|  14.7M|   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
  650|  14.7M|   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
  651|  14.7M|   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
  652|  14.7M|   z[12] = w0;
  653|  14.7M|   w0 = 0;
  654|       |
  655|  14.7M|   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
  656|  14.7M|   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
  657|  14.7M|   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
  658|  14.7M|   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
  659|  14.7M|   z[13] = w1;
  660|  14.7M|   w1 = 0;
  661|       |
  662|  14.7M|   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
  663|  14.7M|   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
  664|  14.7M|   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
  665|  14.7M|   z[14] = w2;
  666|  14.7M|   w2 = 0;
  667|       |
  668|  14.7M|   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
  669|  14.7M|   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
  670|  14.7M|   z[15] = w0;
  671|  14.7M|   w0 = 0;
  672|       |
  673|  14.7M|   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
  674|  14.7M|   z[16] = w1;
  675|  14.7M|   z[17] = w2;
  676|  14.7M|}
_ZN5Botan18bigint_comba_sqr16EPmPKm:
  681|  1.23M|void bigint_comba_sqr16(word z[32], const word x[16]) {
  682|  1.23M|   word w2 = 0, w1 = 0, w0 = 0;
  683|       |
  684|  1.23M|   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
  685|  1.23M|   z[0] = w0;
  686|  1.23M|   w0 = 0;
  687|       |
  688|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
  689|  1.23M|   z[1] = w1;
  690|  1.23M|   w1 = 0;
  691|       |
  692|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
  693|  1.23M|   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
  694|  1.23M|   z[2] = w2;
  695|  1.23M|   w2 = 0;
  696|       |
  697|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
  698|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
  699|  1.23M|   z[3] = w0;
  700|  1.23M|   w0 = 0;
  701|       |
  702|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
  703|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
  704|  1.23M|   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
  705|  1.23M|   z[4] = w1;
  706|  1.23M|   w1 = 0;
  707|       |
  708|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
  709|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
  710|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
  711|  1.23M|   z[5] = w2;
  712|  1.23M|   w2 = 0;
  713|       |
  714|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
  715|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
  716|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
  717|  1.23M|   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
  718|  1.23M|   z[6] = w0;
  719|  1.23M|   w0 = 0;
  720|       |
  721|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
  722|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
  723|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
  724|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
  725|  1.23M|   z[7] = w1;
  726|  1.23M|   w1 = 0;
  727|       |
  728|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[8]);
  729|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
  730|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
  731|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
  732|  1.23M|   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
  733|  1.23M|   z[8] = w2;
  734|  1.23M|   w2 = 0;
  735|       |
  736|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[9]);
  737|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[8]);
  738|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
  739|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
  740|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
  741|  1.23M|   z[9] = w0;
  742|  1.23M|   w0 = 0;
  743|       |
  744|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[10]);
  745|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[9]);
  746|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[8]);
  747|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
  748|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
  749|  1.23M|   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
  750|  1.23M|   z[10] = w1;
  751|  1.23M|   w1 = 0;
  752|       |
  753|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[11]);
  754|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[10]);
  755|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[9]);
  756|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[8]);
  757|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
  758|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
  759|  1.23M|   z[11] = w2;
  760|  1.23M|   w2 = 0;
  761|       |
  762|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[12]);
  763|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[11]);
  764|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[10]);
  765|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[3], x[9]);
  766|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[8]);
  767|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
  768|  1.23M|   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
  769|  1.23M|   z[12] = w0;
  770|  1.23M|   w0 = 0;
  771|       |
  772|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[0], x[13]);
  773|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[12]);
  774|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[11]);
  775|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[10]);
  776|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[4], x[9]);
  777|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[5], x[8]);
  778|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
  779|  1.23M|   z[13] = w1;
  780|  1.23M|   w1 = 0;
  781|       |
  782|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[0], x[14]);
  783|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[1], x[13]);
  784|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[12]);
  785|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[11]);
  786|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[4], x[10]);
  787|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[5], x[9]);
  788|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[6], x[8]);
  789|  1.23M|   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
  790|  1.23M|   z[14] = w2;
  791|  1.23M|   w2 = 0;
  792|       |
  793|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[0], x[15]);
  794|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[1], x[14]);
  795|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[2], x[13]);
  796|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[3], x[12]);
  797|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[11]);
  798|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[5], x[10]);
  799|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[6], x[9]);
  800|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[7], x[8]);
  801|  1.23M|   z[15] = w0;
  802|  1.23M|   w0 = 0;
  803|       |
  804|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[1], x[15]);
  805|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[2], x[14]);
  806|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[3], x[13]);
  807|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[4], x[12]);
  808|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[5], x[11]);
  809|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[6], x[10]);
  810|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[7], x[9]);
  811|  1.23M|   word3_muladd(&w0, &w2, &w1, x[8], x[8]);
  812|  1.23M|   z[16] = w1;
  813|  1.23M|   w1 = 0;
  814|       |
  815|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[2], x[15]);
  816|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[3], x[14]);
  817|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[4], x[13]);
  818|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[5], x[12]);
  819|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[6], x[11]);
  820|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[7], x[10]);
  821|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[8], x[9]);
  822|  1.23M|   z[17] = w2;
  823|  1.23M|   w2 = 0;
  824|       |
  825|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[3], x[15]);
  826|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[4], x[14]);
  827|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[5], x[13]);
  828|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[6], x[12]);
  829|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[7], x[11]);
  830|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[8], x[10]);
  831|  1.23M|   word3_muladd(&w2, &w1, &w0, x[9], x[9]);
  832|  1.23M|   z[18] = w0;
  833|  1.23M|   w0 = 0;
  834|       |
  835|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[4], x[15]);
  836|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[5], x[14]);
  837|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[6], x[13]);
  838|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[7], x[12]);
  839|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[8], x[11]);
  840|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[9], x[10]);
  841|  1.23M|   z[19] = w1;
  842|  1.23M|   w1 = 0;
  843|       |
  844|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[5], x[15]);
  845|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[6], x[14]);
  846|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[7], x[13]);
  847|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[8], x[12]);
  848|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[9], x[11]);
  849|  1.23M|   word3_muladd(&w1, &w0, &w2, x[10], x[10]);
  850|  1.23M|   z[20] = w2;
  851|  1.23M|   w2 = 0;
  852|       |
  853|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[6], x[15]);
  854|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[7], x[14]);
  855|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[8], x[13]);
  856|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[9], x[12]);
  857|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[10], x[11]);
  858|  1.23M|   z[21] = w0;
  859|  1.23M|   w0 = 0;
  860|       |
  861|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[7], x[15]);
  862|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[8], x[14]);
  863|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[9], x[13]);
  864|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[10], x[12]);
  865|  1.23M|   word3_muladd(&w0, &w2, &w1, x[11], x[11]);
  866|  1.23M|   z[22] = w1;
  867|  1.23M|   w1 = 0;
  868|       |
  869|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[8], x[15]);
  870|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[9], x[14]);
  871|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[10], x[13]);
  872|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[11], x[12]);
  873|  1.23M|   z[23] = w2;
  874|  1.23M|   w2 = 0;
  875|       |
  876|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[9], x[15]);
  877|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[10], x[14]);
  878|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[11], x[13]);
  879|  1.23M|   word3_muladd(&w2, &w1, &w0, x[12], x[12]);
  880|  1.23M|   z[24] = w0;
  881|  1.23M|   w0 = 0;
  882|       |
  883|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[10], x[15]);
  884|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[11], x[14]);
  885|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[12], x[13]);
  886|  1.23M|   z[25] = w1;
  887|  1.23M|   w1 = 0;
  888|       |
  889|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[11], x[15]);
  890|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[12], x[14]);
  891|  1.23M|   word3_muladd(&w1, &w0, &w2, x[13], x[13]);
  892|  1.23M|   z[26] = w2;
  893|  1.23M|   w2 = 0;
  894|       |
  895|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[12], x[15]);
  896|  1.23M|   word3_muladd_2(&w2, &w1, &w0, x[13], x[14]);
  897|  1.23M|   z[27] = w0;
  898|  1.23M|   w0 = 0;
  899|       |
  900|  1.23M|   word3_muladd_2(&w0, &w2, &w1, x[13], x[15]);
  901|  1.23M|   word3_muladd(&w0, &w2, &w1, x[14], x[14]);
  902|  1.23M|   z[28] = w1;
  903|  1.23M|   w1 = 0;
  904|       |
  905|  1.23M|   word3_muladd_2(&w1, &w0, &w2, x[14], x[15]);
  906|  1.23M|   z[29] = w2;
  907|  1.23M|   w2 = 0;
  908|       |
  909|  1.23M|   word3_muladd(&w2, &w1, &w0, x[15], x[15]);
  910|  1.23M|   z[30] = w0;
  911|  1.23M|   z[31] = w1;
  912|  1.23M|}
_ZN5Botan18bigint_comba_mul16EPmPKmS2_:
  917|   825k|void bigint_comba_mul16(word z[32], const word x[16], const word y[16]) {
  918|   825k|   word w2 = 0, w1 = 0, w0 = 0;
  919|       |
  920|   825k|   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
  921|   825k|   z[0] = w0;
  922|   825k|   w0 = 0;
  923|       |
  924|   825k|   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
  925|   825k|   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
  926|   825k|   z[1] = w1;
  927|   825k|   w1 = 0;
  928|       |
  929|   825k|   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
  930|   825k|   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
  931|   825k|   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
  932|   825k|   z[2] = w2;
  933|   825k|   w2 = 0;
  934|       |
  935|   825k|   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
  936|   825k|   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
  937|   825k|   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
  938|   825k|   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
  939|   825k|   z[3] = w0;
  940|   825k|   w0 = 0;
  941|       |
  942|   825k|   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
  943|   825k|   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
  944|   825k|   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
  945|   825k|   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
  946|   825k|   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
  947|   825k|   z[4] = w1;
  948|   825k|   w1 = 0;
  949|       |
  950|   825k|   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
  951|   825k|   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
  952|   825k|   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
  953|   825k|   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
  954|   825k|   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
  955|   825k|   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
  956|   825k|   z[5] = w2;
  957|   825k|   w2 = 0;
  958|       |
  959|   825k|   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
  960|   825k|   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
  961|   825k|   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
  962|   825k|   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
  963|   825k|   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
  964|   825k|   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
  965|   825k|   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
  966|   825k|   z[6] = w0;
  967|   825k|   w0 = 0;
  968|       |
  969|   825k|   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
  970|   825k|   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
  971|   825k|   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
  972|   825k|   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
  973|   825k|   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
  974|   825k|   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
  975|   825k|   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
  976|   825k|   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
  977|   825k|   z[7] = w1;
  978|   825k|   w1 = 0;
  979|       |
  980|   825k|   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
  981|   825k|   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
  982|   825k|   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
  983|   825k|   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
  984|   825k|   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
  985|   825k|   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
  986|   825k|   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
  987|   825k|   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
  988|   825k|   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
  989|   825k|   z[8] = w2;
  990|   825k|   w2 = 0;
  991|       |
  992|   825k|   word3_muladd(&w2, &w1, &w0, x[0], y[9]);
  993|   825k|   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
  994|   825k|   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
  995|   825k|   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
  996|   825k|   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
  997|   825k|   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
  998|   825k|   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
  999|   825k|   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
 1000|   825k|   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
 1001|   825k|   word3_muladd(&w2, &w1, &w0, x[9], y[0]);
 1002|   825k|   z[9] = w0;
 1003|   825k|   w0 = 0;
 1004|       |
 1005|   825k|   word3_muladd(&w0, &w2, &w1, x[0], y[10]);
 1006|   825k|   word3_muladd(&w0, &w2, &w1, x[1], y[9]);
 1007|   825k|   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
 1008|   825k|   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
 1009|   825k|   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
 1010|   825k|   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
 1011|   825k|   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
 1012|   825k|   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
 1013|   825k|   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
 1014|   825k|   word3_muladd(&w0, &w2, &w1, x[9], y[1]);
 1015|   825k|   word3_muladd(&w0, &w2, &w1, x[10], y[0]);
 1016|   825k|   z[10] = w1;
 1017|   825k|   w1 = 0;
 1018|       |
 1019|   825k|   word3_muladd(&w1, &w0, &w2, x[0], y[11]);
 1020|   825k|   word3_muladd(&w1, &w0, &w2, x[1], y[10]);
 1021|   825k|   word3_muladd(&w1, &w0, &w2, x[2], y[9]);
 1022|   825k|   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
 1023|   825k|   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
 1024|   825k|   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
 1025|   825k|   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
 1026|   825k|   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
 1027|   825k|   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
 1028|   825k|   word3_muladd(&w1, &w0, &w2, x[9], y[2]);
 1029|   825k|   word3_muladd(&w1, &w0, &w2, x[10], y[1]);
 1030|   825k|   word3_muladd(&w1, &w0, &w2, x[11], y[0]);
 1031|   825k|   z[11] = w2;
 1032|   825k|   w2 = 0;
 1033|       |
 1034|   825k|   word3_muladd(&w2, &w1, &w0, x[0], y[12]);
 1035|   825k|   word3_muladd(&w2, &w1, &w0, x[1], y[11]);
 1036|   825k|   word3_muladd(&w2, &w1, &w0, x[2], y[10]);
 1037|   825k|   word3_muladd(&w2, &w1, &w0, x[3], y[9]);
 1038|   825k|   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
 1039|   825k|   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
 1040|   825k|   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
 1041|   825k|   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
 1042|   825k|   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
 1043|   825k|   word3_muladd(&w2, &w1, &w0, x[9], y[3]);
 1044|   825k|   word3_muladd(&w2, &w1, &w0, x[10], y[2]);
 1045|   825k|   word3_muladd(&w2, &w1, &w0, x[11], y[1]);
 1046|   825k|   word3_muladd(&w2, &w1, &w0, x[12], y[0]);
 1047|   825k|   z[12] = w0;
 1048|   825k|   w0 = 0;
 1049|       |
 1050|   825k|   word3_muladd(&w0, &w2, &w1, x[0], y[13]);
 1051|   825k|   word3_muladd(&w0, &w2, &w1, x[1], y[12]);
 1052|   825k|   word3_muladd(&w0, &w2, &w1, x[2], y[11]);
 1053|   825k|   word3_muladd(&w0, &w2, &w1, x[3], y[10]);
 1054|   825k|   word3_muladd(&w0, &w2, &w1, x[4], y[9]);
 1055|   825k|   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
 1056|   825k|   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
 1057|   825k|   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
 1058|   825k|   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
 1059|   825k|   word3_muladd(&w0, &w2, &w1, x[9], y[4]);
 1060|   825k|   word3_muladd(&w0, &w2, &w1, x[10], y[3]);
 1061|   825k|   word3_muladd(&w0, &w2, &w1, x[11], y[2]);
 1062|   825k|   word3_muladd(&w0, &w2, &w1, x[12], y[1]);
 1063|   825k|   word3_muladd(&w0, &w2, &w1, x[13], y[0]);
 1064|   825k|   z[13] = w1;
 1065|   825k|   w1 = 0;
 1066|       |
 1067|   825k|   word3_muladd(&w1, &w0, &w2, x[0], y[14]);
 1068|   825k|   word3_muladd(&w1, &w0, &w2, x[1], y[13]);
 1069|   825k|   word3_muladd(&w1, &w0, &w2, x[2], y[12]);
 1070|   825k|   word3_muladd(&w1, &w0, &w2, x[3], y[11]);
 1071|   825k|   word3_muladd(&w1, &w0, &w2, x[4], y[10]);
 1072|   825k|   word3_muladd(&w1, &w0, &w2, x[5], y[9]);
 1073|   825k|   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
 1074|   825k|   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
 1075|   825k|   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
 1076|   825k|   word3_muladd(&w1, &w0, &w2, x[9], y[5]);
 1077|   825k|   word3_muladd(&w1, &w0, &w2, x[10], y[4]);
 1078|   825k|   word3_muladd(&w1, &w0, &w2, x[11], y[3]);
 1079|   825k|   word3_muladd(&w1, &w0, &w2, x[12], y[2]);
 1080|   825k|   word3_muladd(&w1, &w0, &w2, x[13], y[1]);
 1081|   825k|   word3_muladd(&w1, &w0, &w2, x[14], y[0]);
 1082|   825k|   z[14] = w2;
 1083|   825k|   w2 = 0;
 1084|       |
 1085|   825k|   word3_muladd(&w2, &w1, &w0, x[0], y[15]);
 1086|   825k|   word3_muladd(&w2, &w1, &w0, x[1], y[14]);
 1087|   825k|   word3_muladd(&w2, &w1, &w0, x[2], y[13]);
 1088|   825k|   word3_muladd(&w2, &w1, &w0, x[3], y[12]);
 1089|   825k|   word3_muladd(&w2, &w1, &w0, x[4], y[11]);
 1090|   825k|   word3_muladd(&w2, &w1, &w0, x[5], y[10]);
 1091|   825k|   word3_muladd(&w2, &w1, &w0, x[6], y[9]);
 1092|   825k|   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
 1093|   825k|   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
 1094|   825k|   word3_muladd(&w2, &w1, &w0, x[9], y[6]);
 1095|   825k|   word3_muladd(&w2, &w1, &w0, x[10], y[5]);
 1096|   825k|   word3_muladd(&w2, &w1, &w0, x[11], y[4]);
 1097|   825k|   word3_muladd(&w2, &w1, &w0, x[12], y[3]);
 1098|   825k|   word3_muladd(&w2, &w1, &w0, x[13], y[2]);
 1099|   825k|   word3_muladd(&w2, &w1, &w0, x[14], y[1]);
 1100|   825k|   word3_muladd(&w2, &w1, &w0, x[15], y[0]);
 1101|   825k|   z[15] = w0;
 1102|   825k|   w0 = 0;
 1103|       |
 1104|   825k|   word3_muladd(&w0, &w2, &w1, x[1], y[15]);
 1105|   825k|   word3_muladd(&w0, &w2, &w1, x[2], y[14]);
 1106|   825k|   word3_muladd(&w0, &w2, &w1, x[3], y[13]);
 1107|   825k|   word3_muladd(&w0, &w2, &w1, x[4], y[12]);
 1108|   825k|   word3_muladd(&w0, &w2, &w1, x[5], y[11]);
 1109|   825k|   word3_muladd(&w0, &w2, &w1, x[6], y[10]);
 1110|   825k|   word3_muladd(&w0, &w2, &w1, x[7], y[9]);
 1111|   825k|   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
 1112|   825k|   word3_muladd(&w0, &w2, &w1, x[9], y[7]);
 1113|   825k|   word3_muladd(&w0, &w2, &w1, x[10], y[6]);
 1114|   825k|   word3_muladd(&w0, &w2, &w1, x[11], y[5]);
 1115|   825k|   word3_muladd(&w0, &w2, &w1, x[12], y[4]);
 1116|   825k|   word3_muladd(&w0, &w2, &w1, x[13], y[3]);
 1117|   825k|   word3_muladd(&w0, &w2, &w1, x[14], y[2]);
 1118|   825k|   word3_muladd(&w0, &w2, &w1, x[15], y[1]);
 1119|   825k|   z[16] = w1;
 1120|   825k|   w1 = 0;
 1121|       |
 1122|   825k|   word3_muladd(&w1, &w0, &w2, x[2], y[15]);
 1123|   825k|   word3_muladd(&w1, &w0, &w2, x[3], y[14]);
 1124|   825k|   word3_muladd(&w1, &w0, &w2, x[4], y[13]);
 1125|   825k|   word3_muladd(&w1, &w0, &w2, x[5], y[12]);
 1126|   825k|   word3_muladd(&w1, &w0, &w2, x[6], y[11]);
 1127|   825k|   word3_muladd(&w1, &w0, &w2, x[7], y[10]);
 1128|   825k|   word3_muladd(&w1, &w0, &w2, x[8], y[9]);
 1129|   825k|   word3_muladd(&w1, &w0, &w2, x[9], y[8]);
 1130|   825k|   word3_muladd(&w1, &w0, &w2, x[10], y[7]);
 1131|   825k|   word3_muladd(&w1, &w0, &w2, x[11], y[6]);
 1132|   825k|   word3_muladd(&w1, &w0, &w2, x[12], y[5]);
 1133|   825k|   word3_muladd(&w1, &w0, &w2, x[13], y[4]);
 1134|   825k|   word3_muladd(&w1, &w0, &w2, x[14], y[3]);
 1135|   825k|   word3_muladd(&w1, &w0, &w2, x[15], y[2]);
 1136|   825k|   z[17] = w2;
 1137|   825k|   w2 = 0;
 1138|       |
 1139|   825k|   word3_muladd(&w2, &w1, &w0, x[3], y[15]);
 1140|   825k|   word3_muladd(&w2, &w1, &w0, x[4], y[14]);
 1141|   825k|   word3_muladd(&w2, &w1, &w0, x[5], y[13]);
 1142|   825k|   word3_muladd(&w2, &w1, &w0, x[6], y[12]);
 1143|   825k|   word3_muladd(&w2, &w1, &w0, x[7], y[11]);
 1144|   825k|   word3_muladd(&w2, &w1, &w0, x[8], y[10]);
 1145|   825k|   word3_muladd(&w2, &w1, &w0, x[9], y[9]);
 1146|   825k|   word3_muladd(&w2, &w1, &w0, x[10], y[8]);
 1147|   825k|   word3_muladd(&w2, &w1, &w0, x[11], y[7]);
 1148|   825k|   word3_muladd(&w2, &w1, &w0, x[12], y[6]);
 1149|   825k|   word3_muladd(&w2, &w1, &w0, x[13], y[5]);
 1150|   825k|   word3_muladd(&w2, &w1, &w0, x[14], y[4]);
 1151|   825k|   word3_muladd(&w2, &w1, &w0, x[15], y[3]);
 1152|   825k|   z[18] = w0;
 1153|   825k|   w0 = 0;
 1154|       |
 1155|   825k|   word3_muladd(&w0, &w2, &w1, x[4], y[15]);
 1156|   825k|   word3_muladd(&w0, &w2, &w1, x[5], y[14]);
 1157|   825k|   word3_muladd(&w0, &w2, &w1, x[6], y[13]);
 1158|   825k|   word3_muladd(&w0, &w2, &w1, x[7], y[12]);
 1159|   825k|   word3_muladd(&w0, &w2, &w1, x[8], y[11]);
 1160|   825k|   word3_muladd(&w0, &w2, &w1, x[9], y[10]);
 1161|   825k|   word3_muladd(&w0, &w2, &w1, x[10], y[9]);
 1162|   825k|   word3_muladd(&w0, &w2, &w1, x[11], y[8]);
 1163|   825k|   word3_muladd(&w0, &w2, &w1, x[12], y[7]);
 1164|   825k|   word3_muladd(&w0, &w2, &w1, x[13], y[6]);
 1165|   825k|   word3_muladd(&w0, &w2, &w1, x[14], y[5]);
 1166|   825k|   word3_muladd(&w0, &w2, &w1, x[15], y[4]);
 1167|   825k|   z[19] = w1;
 1168|   825k|   w1 = 0;
 1169|       |
 1170|   825k|   word3_muladd(&w1, &w0, &w2, x[5], y[15]);
 1171|   825k|   word3_muladd(&w1, &w0, &w2, x[6], y[14]);
 1172|   825k|   word3_muladd(&w1, &w0, &w2, x[7], y[13]);
 1173|   825k|   word3_muladd(&w1, &w0, &w2, x[8], y[12]);
 1174|   825k|   word3_muladd(&w1, &w0, &w2, x[9], y[11]);
 1175|   825k|   word3_muladd(&w1, &w0, &w2, x[10], y[10]);
 1176|   825k|   word3_muladd(&w1, &w0, &w2, x[11], y[9]);
 1177|   825k|   word3_muladd(&w1, &w0, &w2, x[12], y[8]);
 1178|   825k|   word3_muladd(&w1, &w0, &w2, x[13], y[7]);
 1179|   825k|   word3_muladd(&w1, &w0, &w2, x[14], y[6]);
 1180|   825k|   word3_muladd(&w1, &w0, &w2, x[15], y[5]);
 1181|   825k|   z[20] = w2;
 1182|   825k|   w2 = 0;
 1183|       |
 1184|   825k|   word3_muladd(&w2, &w1, &w0, x[6], y[15]);
 1185|   825k|   word3_muladd(&w2, &w1, &w0, x[7], y[14]);
 1186|   825k|   word3_muladd(&w2, &w1, &w0, x[8], y[13]);
 1187|   825k|   word3_muladd(&w2, &w1, &w0, x[9], y[12]);
 1188|   825k|   word3_muladd(&w2, &w1, &w0, x[10], y[11]);
 1189|   825k|   word3_muladd(&w2, &w1, &w0, x[11], y[10]);
 1190|   825k|   word3_muladd(&w2, &w1, &w0, x[12], y[9]);
 1191|   825k|   word3_muladd(&w2, &w1, &w0, x[13], y[8]);
 1192|   825k|   word3_muladd(&w2, &w1, &w0, x[14], y[7]);
 1193|   825k|   word3_muladd(&w2, &w1, &w0, x[15], y[6]);
 1194|   825k|   z[21] = w0;
 1195|   825k|   w0 = 0;
 1196|       |
 1197|   825k|   word3_muladd(&w0, &w2, &w1, x[7], y[15]);
 1198|   825k|   word3_muladd(&w0, &w2, &w1, x[8], y[14]);
 1199|   825k|   word3_muladd(&w0, &w2, &w1, x[9], y[13]);
 1200|   825k|   word3_muladd(&w0, &w2, &w1, x[10], y[12]);
 1201|   825k|   word3_muladd(&w0, &w2, &w1, x[11], y[11]);
 1202|   825k|   word3_muladd(&w0, &w2, &w1, x[12], y[10]);
 1203|   825k|   word3_muladd(&w0, &w2, &w1, x[13], y[9]);
 1204|   825k|   word3_muladd(&w0, &w2, &w1, x[14], y[8]);
 1205|   825k|   word3_muladd(&w0, &w2, &w1, x[15], y[7]);
 1206|   825k|   z[22] = w1;
 1207|   825k|   w1 = 0;
 1208|       |
 1209|   825k|   word3_muladd(&w1, &w0, &w2, x[8], y[15]);
 1210|   825k|   word3_muladd(&w1, &w0, &w2, x[9], y[14]);
 1211|   825k|   word3_muladd(&w1, &w0, &w2, x[10], y[13]);
 1212|   825k|   word3_muladd(&w1, &w0, &w2, x[11], y[12]);
 1213|   825k|   word3_muladd(&w1, &w0, &w2, x[12], y[11]);
 1214|   825k|   word3_muladd(&w1, &w0, &w2, x[13], y[10]);
 1215|   825k|   word3_muladd(&w1, &w0, &w2, x[14], y[9]);
 1216|   825k|   word3_muladd(&w1, &w0, &w2, x[15], y[8]);
 1217|   825k|   z[23] = w2;
 1218|   825k|   w2 = 0;
 1219|       |
 1220|   825k|   word3_muladd(&w2, &w1, &w0, x[9], y[15]);
 1221|   825k|   word3_muladd(&w2, &w1, &w0, x[10], y[14]);
 1222|   825k|   word3_muladd(&w2, &w1, &w0, x[11], y[13]);
 1223|   825k|   word3_muladd(&w2, &w1, &w0, x[12], y[12]);
 1224|   825k|   word3_muladd(&w2, &w1, &w0, x[13], y[11]);
 1225|   825k|   word3_muladd(&w2, &w1, &w0, x[14], y[10]);
 1226|   825k|   word3_muladd(&w2, &w1, &w0, x[15], y[9]);
 1227|   825k|   z[24] = w0;
 1228|   825k|   w0 = 0;
 1229|       |
 1230|   825k|   word3_muladd(&w0, &w2, &w1, x[10], y[15]);
 1231|   825k|   word3_muladd(&w0, &w2, &w1, x[11], y[14]);
 1232|   825k|   word3_muladd(&w0, &w2, &w1, x[12], y[13]);
 1233|   825k|   word3_muladd(&w0, &w2, &w1, x[13], y[12]);
 1234|   825k|   word3_muladd(&w0, &w2, &w1, x[14], y[11]);
 1235|   825k|   word3_muladd(&w0, &w2, &w1, x[15], y[10]);
 1236|   825k|   z[25] = w1;
 1237|   825k|   w1 = 0;
 1238|       |
 1239|   825k|   word3_muladd(&w1, &w0, &w2, x[11], y[15]);
 1240|   825k|   word3_muladd(&w1, &w0, &w2, x[12], y[14]);
 1241|   825k|   word3_muladd(&w1, &w0, &w2, x[13], y[13]);
 1242|   825k|   word3_muladd(&w1, &w0, &w2, x[14], y[12]);
 1243|   825k|   word3_muladd(&w1, &w0, &w2, x[15], y[11]);
 1244|   825k|   z[26] = w2;
 1245|   825k|   w2 = 0;
 1246|       |
 1247|   825k|   word3_muladd(&w2, &w1, &w0, x[12], y[15]);
 1248|   825k|   word3_muladd(&w2, &w1, &w0, x[13], y[14]);
 1249|   825k|   word3_muladd(&w2, &w1, &w0, x[14], y[13]);
 1250|   825k|   word3_muladd(&w2, &w1, &w0, x[15], y[12]);
 1251|   825k|   z[27] = w0;
 1252|   825k|   w0 = 0;
 1253|       |
 1254|   825k|   word3_muladd(&w0, &w2, &w1, x[13], y[15]);
 1255|   825k|   word3_muladd(&w0, &w2, &w1, x[14], y[14]);
 1256|   825k|   word3_muladd(&w0, &w2, &w1, x[15], y[13]);
 1257|   825k|   z[28] = w1;
 1258|   825k|   w1 = 0;
 1259|       |
 1260|   825k|   word3_muladd(&w1, &w0, &w2, x[14], y[15]);
 1261|   825k|   word3_muladd(&w1, &w0, &w2, x[15], y[14]);
 1262|   825k|   z[29] = w2;
 1263|   825k|   w2 = 0;
 1264|       |
 1265|   825k|   word3_muladd(&w2, &w1, &w0, x[15], y[15]);
 1266|   825k|   z[30] = w0;
 1267|   825k|   z[31] = w1;
 1268|   825k|}
_ZN5Botan18bigint_comba_sqr24EPmPKm:
 1273|   870k|void bigint_comba_sqr24(word z[48], const word x[24]) {
 1274|   870k|   word w2 = 0, w1 = 0, w0 = 0;
 1275|       |
 1276|   870k|   word3_muladd(&w2, &w1, &w0, x[0], x[0]);
 1277|   870k|   z[0] = w0;
 1278|   870k|   w0 = 0;
 1279|       |
 1280|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[1]);
 1281|   870k|   z[1] = w1;
 1282|   870k|   w1 = 0;
 1283|       |
 1284|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[2]);
 1285|   870k|   word3_muladd(&w1, &w0, &w2, x[1], x[1]);
 1286|   870k|   z[2] = w2;
 1287|   870k|   w2 = 0;
 1288|       |
 1289|   870k|   word3_muladd_2(&w2, &w1, &w0, x[0], x[3]);
 1290|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[2]);
 1291|   870k|   z[3] = w0;
 1292|   870k|   w0 = 0;
 1293|       |
 1294|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[4]);
 1295|   870k|   word3_muladd_2(&w0, &w2, &w1, x[1], x[3]);
 1296|   870k|   word3_muladd(&w0, &w2, &w1, x[2], x[2]);
 1297|   870k|   z[4] = w1;
 1298|   870k|   w1 = 0;
 1299|       |
 1300|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[5]);
 1301|   870k|   word3_muladd_2(&w1, &w0, &w2, x[1], x[4]);
 1302|   870k|   word3_muladd_2(&w1, &w0, &w2, x[2], x[3]);
 1303|   870k|   z[5] = w2;
 1304|   870k|   w2 = 0;
 1305|       |
 1306|   870k|   word3_muladd_2(&w2, &w1, &w0, x[0], x[6]);
 1307|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[5]);
 1308|   870k|   word3_muladd_2(&w2, &w1, &w0, x[2], x[4]);
 1309|   870k|   word3_muladd(&w2, &w1, &w0, x[3], x[3]);
 1310|   870k|   z[6] = w0;
 1311|   870k|   w0 = 0;
 1312|       |
 1313|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[7]);
 1314|   870k|   word3_muladd_2(&w0, &w2, &w1, x[1], x[6]);
 1315|   870k|   word3_muladd_2(&w0, &w2, &w1, x[2], x[5]);
 1316|   870k|   word3_muladd_2(&w0, &w2, &w1, x[3], x[4]);
 1317|   870k|   z[7] = w1;
 1318|   870k|   w1 = 0;
 1319|       |
 1320|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[8]);
 1321|   870k|   word3_muladd_2(&w1, &w0, &w2, x[1], x[7]);
 1322|   870k|   word3_muladd_2(&w1, &w0, &w2, x[2], x[6]);
 1323|   870k|   word3_muladd_2(&w1, &w0, &w2, x[3], x[5]);
 1324|   870k|   word3_muladd(&w1, &w0, &w2, x[4], x[4]);
 1325|   870k|   z[8] = w2;
 1326|   870k|   w2 = 0;
 1327|       |
 1328|   870k|   word3_muladd_2(&w2, &w1, &w0, x[0], x[9]);
 1329|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[8]);
 1330|   870k|   word3_muladd_2(&w2, &w1, &w0, x[2], x[7]);
 1331|   870k|   word3_muladd_2(&w2, &w1, &w0, x[3], x[6]);
 1332|   870k|   word3_muladd_2(&w2, &w1, &w0, x[4], x[5]);
 1333|   870k|   z[9] = w0;
 1334|   870k|   w0 = 0;
 1335|       |
 1336|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[10]);
 1337|   870k|   word3_muladd_2(&w0, &w2, &w1, x[1], x[9]);
 1338|   870k|   word3_muladd_2(&w0, &w2, &w1, x[2], x[8]);
 1339|   870k|   word3_muladd_2(&w0, &w2, &w1, x[3], x[7]);
 1340|   870k|   word3_muladd_2(&w0, &w2, &w1, x[4], x[6]);
 1341|   870k|   word3_muladd(&w0, &w2, &w1, x[5], x[5]);
 1342|   870k|   z[10] = w1;
 1343|   870k|   w1 = 0;
 1344|       |
 1345|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[11]);
 1346|   870k|   word3_muladd_2(&w1, &w0, &w2, x[1], x[10]);
 1347|   870k|   word3_muladd_2(&w1, &w0, &w2, x[2], x[9]);
 1348|   870k|   word3_muladd_2(&w1, &w0, &w2, x[3], x[8]);
 1349|   870k|   word3_muladd_2(&w1, &w0, &w2, x[4], x[7]);
 1350|   870k|   word3_muladd_2(&w1, &w0, &w2, x[5], x[6]);
 1351|   870k|   z[11] = w2;
 1352|   870k|   w2 = 0;
 1353|       |
 1354|   870k|   word3_muladd_2(&w2, &w1, &w0, x[0], x[12]);
 1355|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[11]);
 1356|   870k|   word3_muladd_2(&w2, &w1, &w0, x[2], x[10]);
 1357|   870k|   word3_muladd_2(&w2, &w1, &w0, x[3], x[9]);
 1358|   870k|   word3_muladd_2(&w2, &w1, &w0, x[4], x[8]);
 1359|   870k|   word3_muladd_2(&w2, &w1, &w0, x[5], x[7]);
 1360|   870k|   word3_muladd(&w2, &w1, &w0, x[6], x[6]);
 1361|   870k|   z[12] = w0;
 1362|   870k|   w0 = 0;
 1363|       |
 1364|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[13]);
 1365|   870k|   word3_muladd_2(&w0, &w2, &w1, x[1], x[12]);
 1366|   870k|   word3_muladd_2(&w0, &w2, &w1, x[2], x[11]);
 1367|   870k|   word3_muladd_2(&w0, &w2, &w1, x[3], x[10]);
 1368|   870k|   word3_muladd_2(&w0, &w2, &w1, x[4], x[9]);
 1369|   870k|   word3_muladd_2(&w0, &w2, &w1, x[5], x[8]);
 1370|   870k|   word3_muladd_2(&w0, &w2, &w1, x[6], x[7]);
 1371|   870k|   z[13] = w1;
 1372|   870k|   w1 = 0;
 1373|       |
 1374|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[14]);
 1375|   870k|   word3_muladd_2(&w1, &w0, &w2, x[1], x[13]);
 1376|   870k|   word3_muladd_2(&w1, &w0, &w2, x[2], x[12]);
 1377|   870k|   word3_muladd_2(&w1, &w0, &w2, x[3], x[11]);
 1378|   870k|   word3_muladd_2(&w1, &w0, &w2, x[4], x[10]);
 1379|   870k|   word3_muladd_2(&w1, &w0, &w2, x[5], x[9]);
 1380|   870k|   word3_muladd_2(&w1, &w0, &w2, x[6], x[8]);
 1381|   870k|   word3_muladd(&w1, &w0, &w2, x[7], x[7]);
 1382|   870k|   z[14] = w2;
 1383|   870k|   w2 = 0;
 1384|       |
 1385|   870k|   word3_muladd_2(&w2, &w1, &w0, x[0], x[15]);
 1386|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[14]);
 1387|   870k|   word3_muladd_2(&w2, &w1, &w0, x[2], x[13]);
 1388|   870k|   word3_muladd_2(&w2, &w1, &w0, x[3], x[12]);
 1389|   870k|   word3_muladd_2(&w2, &w1, &w0, x[4], x[11]);
 1390|   870k|   word3_muladd_2(&w2, &w1, &w0, x[5], x[10]);
 1391|   870k|   word3_muladd_2(&w2, &w1, &w0, x[6], x[9]);
 1392|   870k|   word3_muladd_2(&w2, &w1, &w0, x[7], x[8]);
 1393|   870k|   z[15] = w0;
 1394|   870k|   w0 = 0;
 1395|       |
 1396|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[16]);
 1397|   870k|   word3_muladd_2(&w0, &w2, &w1, x[1], x[15]);
 1398|   870k|   word3_muladd_2(&w0, &w2, &w1, x[2], x[14]);
 1399|   870k|   word3_muladd_2(&w0, &w2, &w1, x[3], x[13]);
 1400|   870k|   word3_muladd_2(&w0, &w2, &w1, x[4], x[12]);
 1401|   870k|   word3_muladd_2(&w0, &w2, &w1, x[5], x[11]);
 1402|   870k|   word3_muladd_2(&w0, &w2, &w1, x[6], x[10]);
 1403|   870k|   word3_muladd_2(&w0, &w2, &w1, x[7], x[9]);
 1404|   870k|   word3_muladd(&w0, &w2, &w1, x[8], x[8]);
 1405|   870k|   z[16] = w1;
 1406|   870k|   w1 = 0;
 1407|       |
 1408|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[17]);
 1409|   870k|   word3_muladd_2(&w1, &w0, &w2, x[1], x[16]);
 1410|   870k|   word3_muladd_2(&w1, &w0, &w2, x[2], x[15]);
 1411|   870k|   word3_muladd_2(&w1, &w0, &w2, x[3], x[14]);
 1412|   870k|   word3_muladd_2(&w1, &w0, &w2, x[4], x[13]);
 1413|   870k|   word3_muladd_2(&w1, &w0, &w2, x[5], x[12]);
 1414|   870k|   word3_muladd_2(&w1, &w0, &w2, x[6], x[11]);
 1415|   870k|   word3_muladd_2(&w1, &w0, &w2, x[7], x[10]);
 1416|   870k|   word3_muladd_2(&w1, &w0, &w2, x[8], x[9]);
 1417|   870k|   z[17] = w2;
 1418|   870k|   w2 = 0;
 1419|       |
 1420|   870k|   word3_muladd_2(&w2, &w1, &w0, x[0], x[18]);
 1421|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[17]);
 1422|   870k|   word3_muladd_2(&w2, &w1, &w0, x[2], x[16]);
 1423|   870k|   word3_muladd_2(&w2, &w1, &w0, x[3], x[15]);
 1424|   870k|   word3_muladd_2(&w2, &w1, &w0, x[4], x[14]);
 1425|   870k|   word3_muladd_2(&w2, &w1, &w0, x[5], x[13]);
 1426|   870k|   word3_muladd_2(&w2, &w1, &w0, x[6], x[12]);
 1427|   870k|   word3_muladd_2(&w2, &w1, &w0, x[7], x[11]);
 1428|   870k|   word3_muladd_2(&w2, &w1, &w0, x[8], x[10]);
 1429|   870k|   word3_muladd(&w2, &w1, &w0, x[9], x[9]);
 1430|   870k|   z[18] = w0;
 1431|   870k|   w0 = 0;
 1432|       |
 1433|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[19]);
 1434|   870k|   word3_muladd_2(&w0, &w2, &w1, x[1], x[18]);
 1435|   870k|   word3_muladd_2(&w0, &w2, &w1, x[2], x[17]);
 1436|   870k|   word3_muladd_2(&w0, &w2, &w1, x[3], x[16]);
 1437|   870k|   word3_muladd_2(&w0, &w2, &w1, x[4], x[15]);
 1438|   870k|   word3_muladd_2(&w0, &w2, &w1, x[5], x[14]);
 1439|   870k|   word3_muladd_2(&w0, &w2, &w1, x[6], x[13]);
 1440|   870k|   word3_muladd_2(&w0, &w2, &w1, x[7], x[12]);
 1441|   870k|   word3_muladd_2(&w0, &w2, &w1, x[8], x[11]);
 1442|   870k|   word3_muladd_2(&w0, &w2, &w1, x[9], x[10]);
 1443|   870k|   z[19] = w1;
 1444|   870k|   w1 = 0;
 1445|       |
 1446|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[20]);
 1447|   870k|   word3_muladd_2(&w1, &w0, &w2, x[1], x[19]);
 1448|   870k|   word3_muladd_2(&w1, &w0, &w2, x[2], x[18]);
 1449|   870k|   word3_muladd_2(&w1, &w0, &w2, x[3], x[17]);
 1450|   870k|   word3_muladd_2(&w1, &w0, &w2, x[4], x[16]);
 1451|   870k|   word3_muladd_2(&w1, &w0, &w2, x[5], x[15]);
 1452|   870k|   word3_muladd_2(&w1, &w0, &w2, x[6], x[14]);
 1453|   870k|   word3_muladd_2(&w1, &w0, &w2, x[7], x[13]);
 1454|   870k|   word3_muladd_2(&w1, &w0, &w2, x[8], x[12]);
 1455|   870k|   word3_muladd_2(&w1, &w0, &w2, x[9], x[11]);
 1456|   870k|   word3_muladd(&w1, &w0, &w2, x[10], x[10]);
 1457|   870k|   z[20] = w2;
 1458|   870k|   w2 = 0;
 1459|       |
 1460|   870k|   word3_muladd_2(&w2, &w1, &w0, x[0], x[21]);
 1461|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[20]);
 1462|   870k|   word3_muladd_2(&w2, &w1, &w0, x[2], x[19]);
 1463|   870k|   word3_muladd_2(&w2, &w1, &w0, x[3], x[18]);
 1464|   870k|   word3_muladd_2(&w2, &w1, &w0, x[4], x[17]);
 1465|   870k|   word3_muladd_2(&w2, &w1, &w0, x[5], x[16]);
 1466|   870k|   word3_muladd_2(&w2, &w1, &w0, x[6], x[15]);
 1467|   870k|   word3_muladd_2(&w2, &w1, &w0, x[7], x[14]);
 1468|   870k|   word3_muladd_2(&w2, &w1, &w0, x[8], x[13]);
 1469|   870k|   word3_muladd_2(&w2, &w1, &w0, x[9], x[12]);
 1470|   870k|   word3_muladd_2(&w2, &w1, &w0, x[10], x[11]);
 1471|   870k|   z[21] = w0;
 1472|   870k|   w0 = 0;
 1473|       |
 1474|   870k|   word3_muladd_2(&w0, &w2, &w1, x[0], x[22]);
 1475|   870k|   word3_muladd_2(&w0, &w2, &w1, x[1], x[21]);
 1476|   870k|   word3_muladd_2(&w0, &w2, &w1, x[2], x[20]);
 1477|   870k|   word3_muladd_2(&w0, &w2, &w1, x[3], x[19]);
 1478|   870k|   word3_muladd_2(&w0, &w2, &w1, x[4], x[18]);
 1479|   870k|   word3_muladd_2(&w0, &w2, &w1, x[5], x[17]);
 1480|   870k|   word3_muladd_2(&w0, &w2, &w1, x[6], x[16]);
 1481|   870k|   word3_muladd_2(&w0, &w2, &w1, x[7], x[15]);
 1482|   870k|   word3_muladd_2(&w0, &w2, &w1, x[8], x[14]);
 1483|   870k|   word3_muladd_2(&w0, &w2, &w1, x[9], x[13]);
 1484|   870k|   word3_muladd_2(&w0, &w2, &w1, x[10], x[12]);
 1485|   870k|   word3_muladd(&w0, &w2, &w1, x[11], x[11]);
 1486|   870k|   z[22] = w1;
 1487|   870k|   w1 = 0;
 1488|       |
 1489|   870k|   word3_muladd_2(&w1, &w0, &w2, x[0], x[23]);
 1490|   870k|   word3_muladd_2(&w1, &w0, &w2, x[1], x[22]);
 1491|   870k|   word3_muladd_2(&w1, &w0, &w2, x[2], x[21]);
 1492|   870k|   word3_muladd_2(&w1, &w0, &w2, x[3], x[20]);
 1493|   870k|   word3_muladd_2(&w1, &w0, &w2, x[4], x[19]);
 1494|   870k|   word3_muladd_2(&w1, &w0, &w2, x[5], x[18]);
 1495|   870k|   word3_muladd_2(&w1, &w0, &w2, x[6], x[17]);
 1496|   870k|   word3_muladd_2(&w1, &w0, &w2, x[7], x[16]);
 1497|   870k|   word3_muladd_2(&w1, &w0, &w2, x[8], x[15]);
 1498|   870k|   word3_muladd_2(&w1, &w0, &w2, x[9], x[14]);
 1499|   870k|   word3_muladd_2(&w1, &w0, &w2, x[10], x[13]);
 1500|   870k|   word3_muladd_2(&w1, &w0, &w2, x[11], x[12]);
 1501|   870k|   z[23] = w2;
 1502|   870k|   w2 = 0;
 1503|       |
 1504|   870k|   word3_muladd_2(&w2, &w1, &w0, x[1], x[23]);
 1505|   870k|   word3_muladd_2(&w2, &w1, &w0, x[2], x[22]);
 1506|   870k|   word3_muladd_2(&w2, &w1, &w0, x[3], x[21]);
 1507|   870k|   word3_muladd_2(&w2, &w1, &w0, x[4], x[20]);
 1508|   870k|   word3_muladd_2(&w2, &w1, &w0, x[5], x[19]);
 1509|   870k|   word3_muladd_2(&w2, &w1, &w0, x[6], x[18]);
 1510|   870k|   word3_muladd_2(&w2, &w1, &w0, x[7], x[17]);
 1511|   870k|   word3_muladd_2(&w2, &w1, &w0, x[8], x[16]);
 1512|   870k|   word3_muladd_2(&w2, &w1, &w0, x[9], x[15]);
 1513|   870k|   word3_muladd_2(&w2, &w1, &w0, x[10], x[14]);
 1514|   870k|   word3_muladd_2(&w2, &w1, &w0, x[11], x[13]);
 1515|   870k|   word3_muladd(&w2, &w1, &w0, x[12], x[12]);
 1516|   870k|   z[24] = w0;
 1517|   870k|   w0 = 0;
 1518|       |
 1519|   870k|   word3_muladd_2(&w0, &w2, &w1, x[2], x[23]);
 1520|   870k|   word3_muladd_2(&w0, &w2, &w1, x[3], x[22]);
 1521|   870k|   word3_muladd_2(&w0, &w2, &w1, x[4], x[21]);
 1522|   870k|   word3_muladd_2(&w0, &w2, &w1, x[5], x[20]);
 1523|   870k|   word3_muladd_2(&w0, &w2, &w1, x[6], x[19]);
 1524|   870k|   word3_muladd_2(&w0, &w2, &w1, x[7], x[18]);
 1525|   870k|   word3_muladd_2(&w0, &w2, &w1, x[8], x[17]);
 1526|   870k|   word3_muladd_2(&w0, &w2, &w1, x[9], x[16]);
 1527|   870k|   word3_muladd_2(&w0, &w2, &w1, x[10], x[15]);
 1528|   870k|   word3_muladd_2(&w0, &w2, &w1, x[11], x[14]);
 1529|   870k|   word3_muladd_2(&w0, &w2, &w1, x[12], x[13]);
 1530|   870k|   z[25] = w1;
 1531|   870k|   w1 = 0;
 1532|       |
 1533|   870k|   word3_muladd_2(&w1, &w0, &w2, x[3], x[23]);
 1534|   870k|   word3_muladd_2(&w1, &w0, &w2, x[4], x[22]);
 1535|   870k|   word3_muladd_2(&w1, &w0, &w2, x[5], x[21]);
 1536|   870k|   word3_muladd_2(&w1, &w0, &w2, x[6], x[20]);
 1537|   870k|   word3_muladd_2(&w1, &w0, &w2, x[7], x[19]);
 1538|   870k|   word3_muladd_2(&w1, &w0, &w2, x[8], x[18]);
 1539|   870k|   word3_muladd_2(&w1, &w0, &w2, x[9], x[17]);
 1540|   870k|   word3_muladd_2(&w1, &w0, &w2, x[10], x[16]);
 1541|   870k|   word3_muladd_2(&w1, &w0, &w2, x[11], x[15]);
 1542|   870k|   word3_muladd_2(&w1, &w0, &w2, x[12], x[14]);
 1543|   870k|   word3_muladd(&w1, &w0, &w2, x[13], x[13]);
 1544|   870k|   z[26] = w2;
 1545|   870k|   w2 = 0;
 1546|       |
 1547|   870k|   word3_muladd_2(&w2, &w1, &w0, x[4], x[23]);
 1548|   870k|   word3_muladd_2(&w2, &w1, &w0, x[5], x[22]);
 1549|   870k|   word3_muladd_2(&w2, &w1, &w0, x[6], x[21]);
 1550|   870k|   word3_muladd_2(&w2, &w1, &w0, x[7], x[20]);
 1551|   870k|   word3_muladd_2(&w2, &w1, &w0, x[8], x[19]);
 1552|   870k|   word3_muladd_2(&w2, &w1, &w0, x[9], x[18]);
 1553|   870k|   word3_muladd_2(&w2, &w1, &w0, x[10], x[17]);
 1554|   870k|   word3_muladd_2(&w2, &w1, &w0, x[11], x[16]);
 1555|   870k|   word3_muladd_2(&w2, &w1, &w0, x[12], x[15]);
 1556|   870k|   word3_muladd_2(&w2, &w1, &w0, x[13], x[14]);
 1557|   870k|   z[27] = w0;
 1558|   870k|   w0 = 0;
 1559|       |
 1560|   870k|   word3_muladd_2(&w0, &w2, &w1, x[5], x[23]);
 1561|   870k|   word3_muladd_2(&w0, &w2, &w1, x[6], x[22]);
 1562|   870k|   word3_muladd_2(&w0, &w2, &w1, x[7], x[21]);
 1563|   870k|   word3_muladd_2(&w0, &w2, &w1, x[8], x[20]);
 1564|   870k|   word3_muladd_2(&w0, &w2, &w1, x[9], x[19]);
 1565|   870k|   word3_muladd_2(&w0, &w2, &w1, x[10], x[18]);
 1566|   870k|   word3_muladd_2(&w0, &w2, &w1, x[11], x[17]);
 1567|   870k|   word3_muladd_2(&w0, &w2, &w1, x[12], x[16]);
 1568|   870k|   word3_muladd_2(&w0, &w2, &w1, x[13], x[15]);
 1569|   870k|   word3_muladd(&w0, &w2, &w1, x[14], x[14]);
 1570|   870k|   z[28] = w1;
 1571|   870k|   w1 = 0;
 1572|       |
 1573|   870k|   word3_muladd_2(&w1, &w0, &w2, x[6], x[23]);
 1574|   870k|   word3_muladd_2(&w1, &w0, &w2, x[7], x[22]);
 1575|   870k|   word3_muladd_2(&w1, &w0, &w2, x[8], x[21]);
 1576|   870k|   word3_muladd_2(&w1, &w0, &w2, x[9], x[20]);
 1577|   870k|   word3_muladd_2(&w1, &w0, &w2, x[10], x[19]);
 1578|   870k|   word3_muladd_2(&w1, &w0, &w2, x[11], x[18]);
 1579|   870k|   word3_muladd_2(&w1, &w0, &w2, x[12], x[17]);
 1580|   870k|   word3_muladd_2(&w1, &w0, &w2, x[13], x[16]);
 1581|   870k|   word3_muladd_2(&w1, &w0, &w2, x[14], x[15]);
 1582|   870k|   z[29] = w2;
 1583|   870k|   w2 = 0;
 1584|       |
 1585|   870k|   word3_muladd_2(&w2, &w1, &w0, x[7], x[23]);
 1586|   870k|   word3_muladd_2(&w2, &w1, &w0, x[8], x[22]);
 1587|   870k|   word3_muladd_2(&w2, &w1, &w0, x[9], x[21]);
 1588|   870k|   word3_muladd_2(&w2, &w1, &w0, x[10], x[20]);
 1589|   870k|   word3_muladd_2(&w2, &w1, &w0, x[11], x[19]);
 1590|   870k|   word3_muladd_2(&w2, &w1, &w0, x[12], x[18]);
 1591|   870k|   word3_muladd_2(&w2, &w1, &w0, x[13], x[17]);
 1592|   870k|   word3_muladd_2(&w2, &w1, &w0, x[14], x[16]);
 1593|   870k|   word3_muladd(&w2, &w1, &w0, x[15], x[15]);
 1594|   870k|   z[30] = w0;
 1595|   870k|   w0 = 0;
 1596|       |
 1597|   870k|   word3_muladd_2(&w0, &w2, &w1, x[8], x[23]);
 1598|   870k|   word3_muladd_2(&w0, &w2, &w1, x[9], x[22]);
 1599|   870k|   word3_muladd_2(&w0, &w2, &w1, x[10], x[21]);
 1600|   870k|   word3_muladd_2(&w0, &w2, &w1, x[11], x[20]);
 1601|   870k|   word3_muladd_2(&w0, &w2, &w1, x[12], x[19]);
 1602|   870k|   word3_muladd_2(&w0, &w2, &w1, x[13], x[18]);
 1603|   870k|   word3_muladd_2(&w0, &w2, &w1, x[14], x[17]);
 1604|   870k|   word3_muladd_2(&w0, &w2, &w1, x[15], x[16]);
 1605|   870k|   z[31] = w1;
 1606|   870k|   w1 = 0;
 1607|       |
 1608|   870k|   word3_muladd_2(&w1, &w0, &w2, x[9], x[23]);
 1609|   870k|   word3_muladd_2(&w1, &w0, &w2, x[10], x[22]);
 1610|   870k|   word3_muladd_2(&w1, &w0, &w2, x[11], x[21]);
 1611|   870k|   word3_muladd_2(&w1, &w0, &w2, x[12], x[20]);
 1612|   870k|   word3_muladd_2(&w1, &w0, &w2, x[13], x[19]);
 1613|   870k|   word3_muladd_2(&w1, &w0, &w2, x[14], x[18]);
 1614|   870k|   word3_muladd_2(&w1, &w0, &w2, x[15], x[17]);
 1615|   870k|   word3_muladd(&w1, &w0, &w2, x[16], x[16]);
 1616|   870k|   z[32] = w2;
 1617|   870k|   w2 = 0;
 1618|       |
 1619|   870k|   word3_muladd_2(&w2, &w1, &w0, x[10], x[23]);
 1620|   870k|   word3_muladd_2(&w2, &w1, &w0, x[11], x[22]);
 1621|   870k|   word3_muladd_2(&w2, &w1, &w0, x[12], x[21]);
 1622|   870k|   word3_muladd_2(&w2, &w1, &w0, x[13], x[20]);
 1623|   870k|   word3_muladd_2(&w2, &w1, &w0, x[14], x[19]);
 1624|   870k|   word3_muladd_2(&w2, &w1, &w0, x[15], x[18]);
 1625|   870k|   word3_muladd_2(&w2, &w1, &w0, x[16], x[17]);
 1626|   870k|   z[33] = w0;
 1627|   870k|   w0 = 0;
 1628|       |
 1629|   870k|   word3_muladd_2(&w0, &w2, &w1, x[11], x[23]);
 1630|   870k|   word3_muladd_2(&w0, &w2, &w1, x[12], x[22]);
 1631|   870k|   word3_muladd_2(&w0, &w2, &w1, x[13], x[21]);
 1632|   870k|   word3_muladd_2(&w0, &w2, &w1, x[14], x[20]);
 1633|   870k|   word3_muladd_2(&w0, &w2, &w1, x[15], x[19]);
 1634|   870k|   word3_muladd_2(&w0, &w2, &w1, x[16], x[18]);
 1635|   870k|   word3_muladd(&w0, &w2, &w1, x[17], x[17]);
 1636|   870k|   z[34] = w1;
 1637|   870k|   w1 = 0;
 1638|       |
 1639|   870k|   word3_muladd_2(&w1, &w0, &w2, x[12], x[23]);
 1640|   870k|   word3_muladd_2(&w1, &w0, &w2, x[13], x[22]);
 1641|   870k|   word3_muladd_2(&w1, &w0, &w2, x[14], x[21]);
 1642|   870k|   word3_muladd_2(&w1, &w0, &w2, x[15], x[20]);
 1643|   870k|   word3_muladd_2(&w1, &w0, &w2, x[16], x[19]);
 1644|   870k|   word3_muladd_2(&w1, &w0, &w2, x[17], x[18]);
 1645|   870k|   z[35] = w2;
 1646|   870k|   w2 = 0;
 1647|       |
 1648|   870k|   word3_muladd_2(&w2, &w1, &w0, x[13], x[23]);
 1649|   870k|   word3_muladd_2(&w2, &w1, &w0, x[14], x[22]);
 1650|   870k|   word3_muladd_2(&w2, &w1, &w0, x[15], x[21]);
 1651|   870k|   word3_muladd_2(&w2, &w1, &w0, x[16], x[20]);
 1652|   870k|   word3_muladd_2(&w2, &w1, &w0, x[17], x[19]);
 1653|   870k|   word3_muladd(&w2, &w1, &w0, x[18], x[18]);
 1654|   870k|   z[36] = w0;
 1655|   870k|   w0 = 0;
 1656|       |
 1657|   870k|   word3_muladd_2(&w0, &w2, &w1, x[14], x[23]);
 1658|   870k|   word3_muladd_2(&w0, &w2, &w1, x[15], x[22]);
 1659|   870k|   word3_muladd_2(&w0, &w2, &w1, x[16], x[21]);
 1660|   870k|   word3_muladd_2(&w0, &w2, &w1, x[17], x[20]);
 1661|   870k|   word3_muladd_2(&w0, &w2, &w1, x[18], x[19]);
 1662|   870k|   z[37] = w1;
 1663|   870k|   w1 = 0;
 1664|       |
 1665|   870k|   word3_muladd_2(&w1, &w0, &w2, x[15], x[23]);
 1666|   870k|   word3_muladd_2(&w1, &w0, &w2, x[16], x[22]);
 1667|   870k|   word3_muladd_2(&w1, &w0, &w2, x[17], x[21]);
 1668|   870k|   word3_muladd_2(&w1, &w0, &w2, x[18], x[20]);
 1669|   870k|   word3_muladd(&w1, &w0, &w2, x[19], x[19]);
 1670|   870k|   z[38] = w2;
 1671|   870k|   w2 = 0;
 1672|       |
 1673|   870k|   word3_muladd_2(&w2, &w1, &w0, x[16], x[23]);
 1674|   870k|   word3_muladd_2(&w2, &w1, &w0, x[17], x[22]);
 1675|   870k|   word3_muladd_2(&w2, &w1, &w0, x[18], x[21]);
 1676|   870k|   word3_muladd_2(&w2, &w1, &w0, x[19], x[20]);
 1677|   870k|   z[39] = w0;
 1678|   870k|   w0 = 0;
 1679|       |
 1680|   870k|   word3_muladd_2(&w0, &w2, &w1, x[17], x[23]);
 1681|   870k|   word3_muladd_2(&w0, &w2, &w1, x[18], x[22]);
 1682|   870k|   word3_muladd_2(&w0, &w2, &w1, x[19], x[21]);
 1683|   870k|   word3_muladd(&w0, &w2, &w1, x[20], x[20]);
 1684|   870k|   z[40] = w1;
 1685|   870k|   w1 = 0;
 1686|       |
 1687|   870k|   word3_muladd_2(&w1, &w0, &w2, x[18], x[23]);
 1688|   870k|   word3_muladd_2(&w1, &w0, &w2, x[19], x[22]);
 1689|   870k|   word3_muladd_2(&w1, &w0, &w2, x[20], x[21]);
 1690|   870k|   z[41] = w2;
 1691|   870k|   w2 = 0;
 1692|       |
 1693|   870k|   word3_muladd_2(&w2, &w1, &w0, x[19], x[23]);
 1694|   870k|   word3_muladd_2(&w2, &w1, &w0, x[20], x[22]);
 1695|   870k|   word3_muladd(&w2, &w1, &w0, x[21], x[21]);
 1696|   870k|   z[42] = w0;
 1697|   870k|   w0 = 0;
 1698|       |
 1699|   870k|   word3_muladd_2(&w0, &w2, &w1, x[20], x[23]);
 1700|   870k|   word3_muladd_2(&w0, &w2, &w1, x[21], x[22]);
 1701|   870k|   z[43] = w1;
 1702|   870k|   w1 = 0;
 1703|       |
 1704|   870k|   word3_muladd_2(&w1, &w0, &w2, x[21], x[23]);
 1705|   870k|   word3_muladd(&w1, &w0, &w2, x[22], x[22]);
 1706|   870k|   z[44] = w2;
 1707|   870k|   w2 = 0;
 1708|       |
 1709|   870k|   word3_muladd_2(&w2, &w1, &w0, x[22], x[23]);
 1710|   870k|   z[45] = w0;
 1711|   870k|   w0 = 0;
 1712|       |
 1713|   870k|   word3_muladd(&w0, &w2, &w1, x[23], x[23]);
 1714|   870k|   z[46] = w1;
 1715|   870k|   z[47] = w2;
 1716|   870k|}
_ZN5Botan18bigint_comba_mul24EPmPKmS2_:
 1721|   538k|void bigint_comba_mul24(word z[48], const word x[24], const word y[24]) {
 1722|   538k|   word w2 = 0, w1 = 0, w0 = 0;
 1723|       |
 1724|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[0]);
 1725|   538k|   z[0] = w0;
 1726|   538k|   w0 = 0;
 1727|       |
 1728|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[1]);
 1729|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[0]);
 1730|   538k|   z[1] = w1;
 1731|   538k|   w1 = 0;
 1732|       |
 1733|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[2]);
 1734|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[1]);
 1735|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[0]);
 1736|   538k|   z[2] = w2;
 1737|   538k|   w2 = 0;
 1738|       |
 1739|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[3]);
 1740|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[2]);
 1741|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[1]);
 1742|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[0]);
 1743|   538k|   z[3] = w0;
 1744|   538k|   w0 = 0;
 1745|       |
 1746|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[4]);
 1747|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[3]);
 1748|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[2]);
 1749|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[1]);
 1750|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[0]);
 1751|   538k|   z[4] = w1;
 1752|   538k|   w1 = 0;
 1753|       |
 1754|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[5]);
 1755|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[4]);
 1756|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[3]);
 1757|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[2]);
 1758|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[1]);
 1759|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[0]);
 1760|   538k|   z[5] = w2;
 1761|   538k|   w2 = 0;
 1762|       |
 1763|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[6]);
 1764|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[5]);
 1765|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[4]);
 1766|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[3]);
 1767|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[2]);
 1768|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[1]);
 1769|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[0]);
 1770|   538k|   z[6] = w0;
 1771|   538k|   w0 = 0;
 1772|       |
 1773|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[7]);
 1774|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[6]);
 1775|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[5]);
 1776|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[4]);
 1777|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[3]);
 1778|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[2]);
 1779|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[1]);
 1780|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[0]);
 1781|   538k|   z[7] = w1;
 1782|   538k|   w1 = 0;
 1783|       |
 1784|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[8]);
 1785|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[7]);
 1786|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[6]);
 1787|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[5]);
 1788|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[4]);
 1789|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[3]);
 1790|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[2]);
 1791|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[1]);
 1792|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[0]);
 1793|   538k|   z[8] = w2;
 1794|   538k|   w2 = 0;
 1795|       |
 1796|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[9]);
 1797|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[8]);
 1798|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[7]);
 1799|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[6]);
 1800|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[5]);
 1801|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[4]);
 1802|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[3]);
 1803|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[2]);
 1804|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[1]);
 1805|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[0]);
 1806|   538k|   z[9] = w0;
 1807|   538k|   w0 = 0;
 1808|       |
 1809|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[10]);
 1810|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[9]);
 1811|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[8]);
 1812|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[7]);
 1813|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[6]);
 1814|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[5]);
 1815|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[4]);
 1816|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[3]);
 1817|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[2]);
 1818|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[1]);
 1819|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[0]);
 1820|   538k|   z[10] = w1;
 1821|   538k|   w1 = 0;
 1822|       |
 1823|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[11]);
 1824|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[10]);
 1825|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[9]);
 1826|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[8]);
 1827|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[7]);
 1828|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[6]);
 1829|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[5]);
 1830|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[4]);
 1831|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[3]);
 1832|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[2]);
 1833|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[1]);
 1834|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[0]);
 1835|   538k|   z[11] = w2;
 1836|   538k|   w2 = 0;
 1837|       |
 1838|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[12]);
 1839|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[11]);
 1840|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[10]);
 1841|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[9]);
 1842|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[8]);
 1843|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[7]);
 1844|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[6]);
 1845|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[5]);
 1846|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[4]);
 1847|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[3]);
 1848|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[2]);
 1849|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[1]);
 1850|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[0]);
 1851|   538k|   z[12] = w0;
 1852|   538k|   w0 = 0;
 1853|       |
 1854|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[13]);
 1855|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[12]);
 1856|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[11]);
 1857|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[10]);
 1858|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[9]);
 1859|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[8]);
 1860|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[7]);
 1861|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[6]);
 1862|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[5]);
 1863|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[4]);
 1864|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[3]);
 1865|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[2]);
 1866|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[1]);
 1867|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[0]);
 1868|   538k|   z[13] = w1;
 1869|   538k|   w1 = 0;
 1870|       |
 1871|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[14]);
 1872|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[13]);
 1873|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[12]);
 1874|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[11]);
 1875|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[10]);
 1876|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[9]);
 1877|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[8]);
 1878|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[7]);
 1879|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[6]);
 1880|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[5]);
 1881|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[4]);
 1882|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[3]);
 1883|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[2]);
 1884|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[1]);
 1885|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[0]);
 1886|   538k|   z[14] = w2;
 1887|   538k|   w2 = 0;
 1888|       |
 1889|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[15]);
 1890|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[14]);
 1891|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[13]);
 1892|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[12]);
 1893|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[11]);
 1894|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[10]);
 1895|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[9]);
 1896|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[8]);
 1897|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[7]);
 1898|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[6]);
 1899|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[5]);
 1900|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[4]);
 1901|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[3]);
 1902|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[2]);
 1903|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[1]);
 1904|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[0]);
 1905|   538k|   z[15] = w0;
 1906|   538k|   w0 = 0;
 1907|       |
 1908|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[16]);
 1909|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[15]);
 1910|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[14]);
 1911|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[13]);
 1912|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[12]);
 1913|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[11]);
 1914|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[10]);
 1915|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[9]);
 1916|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[8]);
 1917|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[7]);
 1918|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[6]);
 1919|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[5]);
 1920|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[4]);
 1921|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[3]);
 1922|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[2]);
 1923|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[1]);
 1924|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[0]);
 1925|   538k|   z[16] = w1;
 1926|   538k|   w1 = 0;
 1927|       |
 1928|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[17]);
 1929|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[16]);
 1930|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[15]);
 1931|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[14]);
 1932|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[13]);
 1933|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[12]);
 1934|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[11]);
 1935|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[10]);
 1936|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[9]);
 1937|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[8]);
 1938|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[7]);
 1939|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[6]);
 1940|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[5]);
 1941|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[4]);
 1942|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[3]);
 1943|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[2]);
 1944|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[1]);
 1945|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[0]);
 1946|   538k|   z[17] = w2;
 1947|   538k|   w2 = 0;
 1948|       |
 1949|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[18]);
 1950|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[17]);
 1951|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[16]);
 1952|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[15]);
 1953|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[14]);
 1954|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[13]);
 1955|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[12]);
 1956|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[11]);
 1957|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[10]);
 1958|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[9]);
 1959|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[8]);
 1960|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[7]);
 1961|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[6]);
 1962|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[5]);
 1963|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[4]);
 1964|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[3]);
 1965|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[2]);
 1966|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[1]);
 1967|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[0]);
 1968|   538k|   z[18] = w0;
 1969|   538k|   w0 = 0;
 1970|       |
 1971|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[19]);
 1972|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[18]);
 1973|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[17]);
 1974|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[16]);
 1975|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[15]);
 1976|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[14]);
 1977|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[13]);
 1978|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[12]);
 1979|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[11]);
 1980|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[10]);
 1981|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[9]);
 1982|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[8]);
 1983|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[7]);
 1984|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[6]);
 1985|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[5]);
 1986|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[4]);
 1987|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[3]);
 1988|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[2]);
 1989|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[1]);
 1990|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[0]);
 1991|   538k|   z[19] = w1;
 1992|   538k|   w1 = 0;
 1993|       |
 1994|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[20]);
 1995|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[19]);
 1996|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[18]);
 1997|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[17]);
 1998|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[16]);
 1999|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[15]);
 2000|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[14]);
 2001|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[13]);
 2002|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[12]);
 2003|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[11]);
 2004|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[10]);
 2005|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[9]);
 2006|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[8]);
 2007|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[7]);
 2008|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[6]);
 2009|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[5]);
 2010|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[4]);
 2011|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[3]);
 2012|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[2]);
 2013|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[1]);
 2014|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[0]);
 2015|   538k|   z[20] = w2;
 2016|   538k|   w2 = 0;
 2017|       |
 2018|   538k|   word3_muladd(&w2, &w1, &w0, x[0], y[21]);
 2019|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[20]);
 2020|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[19]);
 2021|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[18]);
 2022|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[17]);
 2023|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[16]);
 2024|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[15]);
 2025|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[14]);
 2026|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[13]);
 2027|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[12]);
 2028|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[11]);
 2029|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[10]);
 2030|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[9]);
 2031|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[8]);
 2032|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[7]);
 2033|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[6]);
 2034|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[5]);
 2035|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[4]);
 2036|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[3]);
 2037|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[2]);
 2038|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[1]);
 2039|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[0]);
 2040|   538k|   z[21] = w0;
 2041|   538k|   w0 = 0;
 2042|       |
 2043|   538k|   word3_muladd(&w0, &w2, &w1, x[0], y[22]);
 2044|   538k|   word3_muladd(&w0, &w2, &w1, x[1], y[21]);
 2045|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[20]);
 2046|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[19]);
 2047|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[18]);
 2048|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[17]);
 2049|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[16]);
 2050|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[15]);
 2051|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[14]);
 2052|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[13]);
 2053|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[12]);
 2054|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[11]);
 2055|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[10]);
 2056|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[9]);
 2057|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[8]);
 2058|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[7]);
 2059|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[6]);
 2060|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[5]);
 2061|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[4]);
 2062|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[3]);
 2063|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[2]);
 2064|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[1]);
 2065|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[0]);
 2066|   538k|   z[22] = w1;
 2067|   538k|   w1 = 0;
 2068|       |
 2069|   538k|   word3_muladd(&w1, &w0, &w2, x[0], y[23]);
 2070|   538k|   word3_muladd(&w1, &w0, &w2, x[1], y[22]);
 2071|   538k|   word3_muladd(&w1, &w0, &w2, x[2], y[21]);
 2072|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[20]);
 2073|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[19]);
 2074|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[18]);
 2075|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[17]);
 2076|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[16]);
 2077|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[15]);
 2078|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[14]);
 2079|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[13]);
 2080|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[12]);
 2081|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[11]);
 2082|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[10]);
 2083|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[9]);
 2084|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[8]);
 2085|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[7]);
 2086|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[6]);
 2087|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[5]);
 2088|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[4]);
 2089|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[3]);
 2090|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[2]);
 2091|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[1]);
 2092|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[0]);
 2093|   538k|   z[23] = w2;
 2094|   538k|   w2 = 0;
 2095|       |
 2096|   538k|   word3_muladd(&w2, &w1, &w0, x[1], y[23]);
 2097|   538k|   word3_muladd(&w2, &w1, &w0, x[2], y[22]);
 2098|   538k|   word3_muladd(&w2, &w1, &w0, x[3], y[21]);
 2099|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[20]);
 2100|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[19]);
 2101|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[18]);
 2102|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[17]);
 2103|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[16]);
 2104|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[15]);
 2105|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[14]);
 2106|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[13]);
 2107|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[12]);
 2108|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[11]);
 2109|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[10]);
 2110|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[9]);
 2111|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[8]);
 2112|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[7]);
 2113|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[6]);
 2114|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[5]);
 2115|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[4]);
 2116|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[3]);
 2117|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[2]);
 2118|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[1]);
 2119|   538k|   z[24] = w0;
 2120|   538k|   w0 = 0;
 2121|       |
 2122|   538k|   word3_muladd(&w0, &w2, &w1, x[2], y[23]);
 2123|   538k|   word3_muladd(&w0, &w2, &w1, x[3], y[22]);
 2124|   538k|   word3_muladd(&w0, &w2, &w1, x[4], y[21]);
 2125|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[20]);
 2126|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[19]);
 2127|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[18]);
 2128|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[17]);
 2129|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[16]);
 2130|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[15]);
 2131|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[14]);
 2132|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[13]);
 2133|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[12]);
 2134|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[11]);
 2135|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[10]);
 2136|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[9]);
 2137|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[8]);
 2138|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[7]);
 2139|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[6]);
 2140|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[5]);
 2141|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[4]);
 2142|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[3]);
 2143|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[2]);
 2144|   538k|   z[25] = w1;
 2145|   538k|   w1 = 0;
 2146|       |
 2147|   538k|   word3_muladd(&w1, &w0, &w2, x[3], y[23]);
 2148|   538k|   word3_muladd(&w1, &w0, &w2, x[4], y[22]);
 2149|   538k|   word3_muladd(&w1, &w0, &w2, x[5], y[21]);
 2150|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[20]);
 2151|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[19]);
 2152|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[18]);
 2153|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[17]);
 2154|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[16]);
 2155|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[15]);
 2156|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[14]);
 2157|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[13]);
 2158|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[12]);
 2159|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[11]);
 2160|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[10]);
 2161|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[9]);
 2162|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[8]);
 2163|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[7]);
 2164|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[6]);
 2165|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[5]);
 2166|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[4]);
 2167|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[3]);
 2168|   538k|   z[26] = w2;
 2169|   538k|   w2 = 0;
 2170|       |
 2171|   538k|   word3_muladd(&w2, &w1, &w0, x[4], y[23]);
 2172|   538k|   word3_muladd(&w2, &w1, &w0, x[5], y[22]);
 2173|   538k|   word3_muladd(&w2, &w1, &w0, x[6], y[21]);
 2174|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[20]);
 2175|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[19]);
 2176|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[18]);
 2177|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[17]);
 2178|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[16]);
 2179|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[15]);
 2180|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[14]);
 2181|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[13]);
 2182|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[12]);
 2183|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[11]);
 2184|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[10]);
 2185|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[9]);
 2186|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[8]);
 2187|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[7]);
 2188|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[6]);
 2189|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[5]);
 2190|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[4]);
 2191|   538k|   z[27] = w0;
 2192|   538k|   w0 = 0;
 2193|       |
 2194|   538k|   word3_muladd(&w0, &w2, &w1, x[5], y[23]);
 2195|   538k|   word3_muladd(&w0, &w2, &w1, x[6], y[22]);
 2196|   538k|   word3_muladd(&w0, &w2, &w1, x[7], y[21]);
 2197|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[20]);
 2198|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[19]);
 2199|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[18]);
 2200|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[17]);
 2201|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[16]);
 2202|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[15]);
 2203|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[14]);
 2204|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[13]);
 2205|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[12]);
 2206|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[11]);
 2207|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[10]);
 2208|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[9]);
 2209|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[8]);
 2210|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[7]);
 2211|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[6]);
 2212|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[5]);
 2213|   538k|   z[28] = w1;
 2214|   538k|   w1 = 0;
 2215|       |
 2216|   538k|   word3_muladd(&w1, &w0, &w2, x[6], y[23]);
 2217|   538k|   word3_muladd(&w1, &w0, &w2, x[7], y[22]);
 2218|   538k|   word3_muladd(&w1, &w0, &w2, x[8], y[21]);
 2219|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[20]);
 2220|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[19]);
 2221|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[18]);
 2222|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[17]);
 2223|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[16]);
 2224|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[15]);
 2225|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[14]);
 2226|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[13]);
 2227|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[12]);
 2228|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[11]);
 2229|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[10]);
 2230|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[9]);
 2231|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[8]);
 2232|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[7]);
 2233|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[6]);
 2234|   538k|   z[29] = w2;
 2235|   538k|   w2 = 0;
 2236|       |
 2237|   538k|   word3_muladd(&w2, &w1, &w0, x[7], y[23]);
 2238|   538k|   word3_muladd(&w2, &w1, &w0, x[8], y[22]);
 2239|   538k|   word3_muladd(&w2, &w1, &w0, x[9], y[21]);
 2240|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[20]);
 2241|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[19]);
 2242|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[18]);
 2243|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[17]);
 2244|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[16]);
 2245|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[15]);
 2246|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[14]);
 2247|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[13]);
 2248|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[12]);
 2249|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[11]);
 2250|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[10]);
 2251|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[9]);
 2252|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[8]);
 2253|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[7]);
 2254|   538k|   z[30] = w0;
 2255|   538k|   w0 = 0;
 2256|       |
 2257|   538k|   word3_muladd(&w0, &w2, &w1, x[8], y[23]);
 2258|   538k|   word3_muladd(&w0, &w2, &w1, x[9], y[22]);
 2259|   538k|   word3_muladd(&w0, &w2, &w1, x[10], y[21]);
 2260|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[20]);
 2261|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[19]);
 2262|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[18]);
 2263|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[17]);
 2264|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[16]);
 2265|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[15]);
 2266|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[14]);
 2267|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[13]);
 2268|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[12]);
 2269|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[11]);
 2270|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[10]);
 2271|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[9]);
 2272|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[8]);
 2273|   538k|   z[31] = w1;
 2274|   538k|   w1 = 0;
 2275|       |
 2276|   538k|   word3_muladd(&w1, &w0, &w2, x[9], y[23]);
 2277|   538k|   word3_muladd(&w1, &w0, &w2, x[10], y[22]);
 2278|   538k|   word3_muladd(&w1, &w0, &w2, x[11], y[21]);
 2279|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[20]);
 2280|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[19]);
 2281|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[18]);
 2282|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[17]);
 2283|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[16]);
 2284|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[15]);
 2285|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[14]);
 2286|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[13]);
 2287|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[12]);
 2288|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[11]);
 2289|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[10]);
 2290|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[9]);
 2291|   538k|   z[32] = w2;
 2292|   538k|   w2 = 0;
 2293|       |
 2294|   538k|   word3_muladd(&w2, &w1, &w0, x[10], y[23]);
 2295|   538k|   word3_muladd(&w2, &w1, &w0, x[11], y[22]);
 2296|   538k|   word3_muladd(&w2, &w1, &w0, x[12], y[21]);
 2297|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[20]);
 2298|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[19]);
 2299|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[18]);
 2300|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[17]);
 2301|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[16]);
 2302|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[15]);
 2303|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[14]);
 2304|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[13]);
 2305|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[12]);
 2306|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[11]);
 2307|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[10]);
 2308|   538k|   z[33] = w0;
 2309|   538k|   w0 = 0;
 2310|       |
 2311|   538k|   word3_muladd(&w0, &w2, &w1, x[11], y[23]);
 2312|   538k|   word3_muladd(&w0, &w2, &w1, x[12], y[22]);
 2313|   538k|   word3_muladd(&w0, &w2, &w1, x[13], y[21]);
 2314|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[20]);
 2315|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[19]);
 2316|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[18]);
 2317|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[17]);
 2318|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[16]);
 2319|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[15]);
 2320|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[14]);
 2321|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[13]);
 2322|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[12]);
 2323|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[11]);
 2324|   538k|   z[34] = w1;
 2325|   538k|   w1 = 0;
 2326|       |
 2327|   538k|   word3_muladd(&w1, &w0, &w2, x[12], y[23]);
 2328|   538k|   word3_muladd(&w1, &w0, &w2, x[13], y[22]);
 2329|   538k|   word3_muladd(&w1, &w0, &w2, x[14], y[21]);
 2330|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[20]);
 2331|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[19]);
 2332|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[18]);
 2333|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[17]);
 2334|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[16]);
 2335|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[15]);
 2336|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[14]);
 2337|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[13]);
 2338|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[12]);
 2339|   538k|   z[35] = w2;
 2340|   538k|   w2 = 0;
 2341|       |
 2342|   538k|   word3_muladd(&w2, &w1, &w0, x[13], y[23]);
 2343|   538k|   word3_muladd(&w2, &w1, &w0, x[14], y[22]);
 2344|   538k|   word3_muladd(&w2, &w1, &w0, x[15], y[21]);
 2345|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[20]);
 2346|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[19]);
 2347|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[18]);
 2348|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[17]);
 2349|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[16]);
 2350|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[15]);
 2351|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[14]);
 2352|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[13]);
 2353|   538k|   z[36] = w0;
 2354|   538k|   w0 = 0;
 2355|       |
 2356|   538k|   word3_muladd(&w0, &w2, &w1, x[14], y[23]);
 2357|   538k|   word3_muladd(&w0, &w2, &w1, x[15], y[22]);
 2358|   538k|   word3_muladd(&w0, &w2, &w1, x[16], y[21]);
 2359|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[20]);
 2360|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[19]);
 2361|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[18]);
 2362|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[17]);
 2363|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[16]);
 2364|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[15]);
 2365|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[14]);
 2366|   538k|   z[37] = w1;
 2367|   538k|   w1 = 0;
 2368|       |
 2369|   538k|   word3_muladd(&w1, &w0, &w2, x[15], y[23]);
 2370|   538k|   word3_muladd(&w1, &w0, &w2, x[16], y[22]);
 2371|   538k|   word3_muladd(&w1, &w0, &w2, x[17], y[21]);
 2372|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[20]);
 2373|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[19]);
 2374|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[18]);
 2375|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[17]);
 2376|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[16]);
 2377|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[15]);
 2378|   538k|   z[38] = w2;
 2379|   538k|   w2 = 0;
 2380|       |
 2381|   538k|   word3_muladd(&w2, &w1, &w0, x[16], y[23]);
 2382|   538k|   word3_muladd(&w2, &w1, &w0, x[17], y[22]);
 2383|   538k|   word3_muladd(&w2, &w1, &w0, x[18], y[21]);
 2384|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[20]);
 2385|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[19]);
 2386|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[18]);
 2387|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[17]);
 2388|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[16]);
 2389|   538k|   z[39] = w0;
 2390|   538k|   w0 = 0;
 2391|       |
 2392|   538k|   word3_muladd(&w0, &w2, &w1, x[17], y[23]);
 2393|   538k|   word3_muladd(&w0, &w2, &w1, x[18], y[22]);
 2394|   538k|   word3_muladd(&w0, &w2, &w1, x[19], y[21]);
 2395|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[20]);
 2396|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[19]);
 2397|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[18]);
 2398|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[17]);
 2399|   538k|   z[40] = w1;
 2400|   538k|   w1 = 0;
 2401|       |
 2402|   538k|   word3_muladd(&w1, &w0, &w2, x[18], y[23]);
 2403|   538k|   word3_muladd(&w1, &w0, &w2, x[19], y[22]);
 2404|   538k|   word3_muladd(&w1, &w0, &w2, x[20], y[21]);
 2405|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[20]);
 2406|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[19]);
 2407|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[18]);
 2408|   538k|   z[41] = w2;
 2409|   538k|   w2 = 0;
 2410|       |
 2411|   538k|   word3_muladd(&w2, &w1, &w0, x[19], y[23]);
 2412|   538k|   word3_muladd(&w2, &w1, &w0, x[20], y[22]);
 2413|   538k|   word3_muladd(&w2, &w1, &w0, x[21], y[21]);
 2414|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[20]);
 2415|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[19]);
 2416|   538k|   z[42] = w0;
 2417|   538k|   w0 = 0;
 2418|       |
 2419|   538k|   word3_muladd(&w0, &w2, &w1, x[20], y[23]);
 2420|   538k|   word3_muladd(&w0, &w2, &w1, x[21], y[22]);
 2421|   538k|   word3_muladd(&w0, &w2, &w1, x[22], y[21]);
 2422|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[20]);
 2423|   538k|   z[43] = w1;
 2424|   538k|   w1 = 0;
 2425|       |
 2426|   538k|   word3_muladd(&w1, &w0, &w2, x[21], y[23]);
 2427|   538k|   word3_muladd(&w1, &w0, &w2, x[22], y[22]);
 2428|   538k|   word3_muladd(&w1, &w0, &w2, x[23], y[21]);
 2429|   538k|   z[44] = w2;
 2430|   538k|   w2 = 0;
 2431|       |
 2432|   538k|   word3_muladd(&w2, &w1, &w0, x[22], y[23]);
 2433|   538k|   word3_muladd(&w2, &w1, &w0, x[23], y[22]);
 2434|   538k|   z[45] = w0;
 2435|   538k|   w0 = 0;
 2436|       |
 2437|   538k|   word3_muladd(&w0, &w2, &w1, x[23], y[23]);
 2438|   538k|   z[46] = w1;
 2439|   538k|   z[47] = w2;
 2440|   538k|}

_ZN5Botan12basecase_mulEPmmPKmmS2_m:
   20|   345k|void basecase_mul(word z[], size_t z_size, const word x[], size_t x_size, const word y[], size_t y_size) {
   21|   345k|   if(z_size < x_size + y_size) {
  ------------------
  |  Branch (21:7): [True: 0, False: 345k]
  ------------------
   22|      0|      throw Invalid_Argument("basecase_mul z_size too small");
   23|      0|   }
   24|       |
   25|   345k|   const size_t x_size_8 = x_size - (x_size % 8);
   26|       |
   27|   345k|   clear_mem(z, z_size);
   28|       |
   29|  4.50M|   for(size_t i = 0; i != y_size; ++i) {
  ------------------
  |  Branch (29:22): [True: 4.16M, False: 345k]
  ------------------
   30|  4.16M|      const word y_i = y[i];
   31|       |
   32|  4.16M|      word carry = 0;
   33|       |
   34|  10.3M|      for(size_t j = 0; j != x_size_8; j += 8) {
  ------------------
  |  Branch (34:25): [True: 6.19M, False: 4.16M]
  ------------------
   35|  6.19M|         carry = word8_madd3(z + i + j, x + j, y_i, carry);
   36|  6.19M|      }
   37|       |
   38|  16.6M|      for(size_t j = x_size_8; j != x_size; ++j) {
  ------------------
  |  Branch (38:32): [True: 12.4M, False: 4.16M]
  ------------------
   39|  12.4M|         z[i + j] = word_madd3(x[j], y_i, z[i + j], &carry);
   40|  12.4M|      }
   41|       |
   42|  4.16M|      z[x_size + i] = carry;
   43|  4.16M|   }
   44|   345k|}
_ZN5Botan12basecase_sqrEPmmPKmm:
   46|   129k|void basecase_sqr(word z[], size_t z_size, const word x[], size_t x_size) {
   47|   129k|   if(z_size < 2 * x_size) {
  ------------------
  |  Branch (47:7): [True: 0, False: 129k]
  ------------------
   48|      0|      throw Invalid_Argument("basecase_sqr z_size too small");
   49|      0|   }
   50|       |
   51|   129k|   const size_t x_size_8 = x_size - (x_size % 8);
   52|       |
   53|   129k|   clear_mem(z, z_size);
   54|       |
   55|  2.38M|   for(size_t i = 0; i != x_size; ++i) {
  ------------------
  |  Branch (55:22): [True: 2.25M, False: 129k]
  ------------------
   56|  2.25M|      const word x_i = x[i];
   57|       |
   58|  2.25M|      word carry = 0;
   59|       |
   60|  7.23M|      for(size_t j = 0; j != x_size_8; j += 8) {
  ------------------
  |  Branch (60:25): [True: 4.97M, False: 2.25M]
  ------------------
   61|  4.97M|         carry = word8_madd3(z + i + j, x + j, x_i, carry);
   62|  4.97M|      }
   63|       |
   64|  10.4M|      for(size_t j = x_size_8; j != x_size; ++j) {
  ------------------
  |  Branch (64:32): [True: 8.14M, False: 2.25M]
  ------------------
   65|  8.14M|         z[i + j] = word_madd3(x[j], x_i, z[i + j], &carry);
   66|  8.14M|      }
   67|       |
   68|  2.25M|      z[x_size + i] = carry;
   69|  2.25M|   }
   70|   129k|}
_ZN5Botan10bigint_mulEPmmPKmmmS2_mmS0_m:
  291|  99.4M|                size_t ws_size) {
  292|  99.4M|   clear_mem(z, z_size);
  293|       |
  294|  99.4M|   if(x_sw == 1) {
  ------------------
  |  Branch (294:7): [True: 340, False: 99.4M]
  ------------------
  295|    340|      bigint_linmul3(z, y, y_sw, x[0]);
  296|  99.4M|   } else if(y_sw == 1) {
  ------------------
  |  Branch (296:14): [True: 0, False: 99.4M]
  ------------------
  297|      0|      bigint_linmul3(z, x, x_sw, y[0]);
  298|  99.4M|   } else if(sized_for_comba_mul<4>(x_sw, x_size, y_sw, y_size, z_size)) {
  ------------------
  |  Branch (298:14): [True: 30.0M, False: 69.4M]
  ------------------
  299|  30.0M|      bigint_comba_mul4(z, x, y);
  300|  69.4M|   } else if(sized_for_comba_mul<6>(x_sw, x_size, y_sw, y_size, z_size)) {
  ------------------
  |  Branch (300:14): [True: 49.8M, False: 19.5M]
  ------------------
  301|  49.8M|      bigint_comba_mul6(z, x, y);
  302|  49.8M|   } else if(sized_for_comba_mul<8>(x_sw, x_size, y_sw, y_size, z_size)) {
  ------------------
  |  Branch (302:14): [True: 3.65M, False: 15.8M]
  ------------------
  303|  3.65M|      bigint_comba_mul8(z, x, y);
  304|  15.8M|   } else if(sized_for_comba_mul<9>(x_sw, x_size, y_sw, y_size, z_size)) {
  ------------------
  |  Branch (304:14): [True: 14.7M, False: 1.16M]
  ------------------
  305|  14.7M|      bigint_comba_mul9(z, x, y);
  306|  14.7M|   } else if(sized_for_comba_mul<16>(x_sw, x_size, y_sw, y_size, z_size)) {
  ------------------
  |  Branch (306:14): [True: 555k, False: 608k]
  ------------------
  307|   555k|      bigint_comba_mul16(z, x, y);
  308|   608k|   } else if(sized_for_comba_mul<24>(x_sw, x_size, y_sw, y_size, z_size)) {
  ------------------
  |  Branch (308:14): [True: 1.05k, False: 607k]
  ------------------
  309|  1.05k|      bigint_comba_mul24(z, x, y);
  310|   607k|   } else if(x_sw < KARATSUBA_MULTIPLY_THRESHOLD || y_sw < KARATSUBA_MULTIPLY_THRESHOLD || !workspace) {
  ------------------
  |  Branch (310:14): [True: 324k, False: 283k]
  |  Branch (310:53): [True: 0, False: 283k]
  |  Branch (310:92): [True: 0, False: 283k]
  ------------------
  311|   324k|      basecase_mul(z, z_size, x, x_sw, y, y_sw);
  312|   324k|   } else {
  313|   283k|      const size_t N = karatsuba_size(z_size, x_size, x_sw, y_size, y_sw);
  314|       |
  315|   283k|      if(N && z_size >= 2 * N && ws_size >= 2 * N) {
  ------------------
  |  Branch (315:10): [True: 266k, False: 17.3k]
  |  Branch (315:15): [True: 266k, False: 0]
  |  Branch (315:34): [True: 263k, False: 2.96k]
  ------------------
  316|   263k|         karatsuba_mul(z, x, y, N, workspace);
  317|   263k|      } else {
  318|  20.3k|         basecase_mul(z, z_size, x, x_sw, y, y_sw);
  319|  20.3k|      }
  320|   283k|   }
  321|  99.4M|}
_ZN5Botan10bigint_sqrEPmmPKmmmS0_m:
  326|  87.2M|void bigint_sqr(word z[], size_t z_size, const word x[], size_t x_size, size_t x_sw, word workspace[], size_t ws_size) {
  327|  87.2M|   clear_mem(z, z_size);
  328|       |
  329|  87.2M|   BOTAN_ASSERT(z_size / 2 >= x_sw, "Output size is sufficient");
  ------------------
  |  |   51|  87.2M|   do {                                                                                 \
  |  |   52|  87.2M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 87.2M]
  |  |  ------------------
  |  |   53|  87.2M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  87.2M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 87.2M]
  |  |  ------------------
  ------------------
  330|       |
  331|  87.2M|   if(x_sw == 1) {
  ------------------
  |  Branch (331:7): [True: 4.35k, False: 87.2M]
  ------------------
  332|  4.35k|      bigint_linmul3(z, x, x_sw, x[0]);
  333|  87.2M|   } else if(sized_for_comba_sqr<4>(x_sw, x_size, z_size)) {
  ------------------
  |  Branch (333:14): [True: 24.4M, False: 62.7M]
  ------------------
  334|  24.4M|      bigint_comba_sqr4(z, x);
  335|  62.7M|   } else if(sized_for_comba_sqr<6>(x_sw, x_size, z_size)) {
  ------------------
  |  Branch (335:14): [True: 44.8M, False: 17.9M]
  ------------------
  336|  44.8M|      bigint_comba_sqr6(z, x);
  337|  44.8M|   } else if(sized_for_comba_sqr<8>(x_sw, x_size, z_size)) {
  ------------------
  |  Branch (337:14): [True: 3.09M, False: 14.8M]
  ------------------
  338|  3.09M|      bigint_comba_sqr8(z, x);
  339|  14.8M|   } else if(sized_for_comba_sqr<9>(x_sw, x_size, z_size)) {
  ------------------
  |  Branch (339:14): [True: 13.4M, False: 1.33M]
  ------------------
  340|  13.4M|      bigint_comba_sqr9(z, x);
  341|  13.4M|   } else if(sized_for_comba_sqr<16>(x_sw, x_size, z_size)) {
  ------------------
  |  Branch (341:14): [True: 780k, False: 555k]
  ------------------
  342|   780k|      bigint_comba_sqr16(z, x);
  343|   780k|   } else if(sized_for_comba_sqr<24>(x_sw, x_size, z_size)) {
  ------------------
  |  Branch (343:14): [True: 66, False: 555k]
  ------------------
  344|     66|      bigint_comba_sqr24(z, x);
  345|   555k|   } else if(x_size < KARATSUBA_SQUARE_THRESHOLD || !workspace) {
  ------------------
  |  Branch (345:14): [True: 17.1k, False: 538k]
  |  Branch (345:53): [True: 0, False: 538k]
  ------------------
  346|  17.1k|      basecase_sqr(z, z_size, x, x_sw);
  347|   538k|   } else {
  348|   538k|      const size_t N = karatsuba_size(z_size, x_size, x_sw);
  349|       |
  350|   538k|      if(N && z_size >= 2 * N && ws_size >= 2 * N) {
  ------------------
  |  Branch (350:10): [True: 465k, False: 73.2k]
  |  Branch (350:15): [True: 465k, False: 0]
  |  Branch (350:34): [True: 465k, False: 204]
  ------------------
  351|   465k|         karatsuba_sqr(z, x, N, workspace);
  352|   465k|      } else {
  353|  73.4k|         basecase_sqr(z, z_size, x, x_sw);
  354|  73.4k|      }
  355|   538k|   }
  356|  87.2M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_114karatsuba_sizeEmmmmm:
  202|   283k|size_t karatsuba_size(size_t z_size, size_t x_size, size_t x_sw, size_t y_size, size_t y_sw) {
  203|   283k|   if(x_sw > x_size || x_sw > y_size || y_sw > x_size || y_sw > y_size) {
  ------------------
  |  Branch (203:7): [True: 0, False: 283k]
  |  Branch (203:24): [True: 0, False: 283k]
  |  Branch (203:41): [True: 0, False: 283k]
  |  Branch (203:58): [True: 0, False: 283k]
  ------------------
  204|      0|      return 0;
  205|      0|   }
  206|       |
  207|   283k|   if(((x_size == x_sw) && (x_size % 2)) || ((y_size == y_sw) && (y_size % 2))) {
  ------------------
  |  Branch (207:8): [True: 5.23k, False: 278k]
  |  Branch (207:28): [True: 0, False: 5.23k]
  |  Branch (207:46): [True: 4.12k, False: 279k]
  |  Branch (207:66): [True: 0, False: 4.12k]
  ------------------
  208|      0|      return 0;
  209|      0|   }
  210|       |
  211|   283k|   const size_t start = (x_sw > y_sw) ? x_sw : y_sw;
  ------------------
  |  Branch (211:25): [True: 0, False: 283k]
  ------------------
  212|   283k|   const size_t end = (x_size < y_size) ? x_size : y_size;
  ------------------
  |  Branch (212:23): [True: 9.16k, False: 274k]
  ------------------
  213|       |
  214|   283k|   if(start == end) {
  ------------------
  |  Branch (214:7): [True: 9.36k, False: 274k]
  ------------------
  215|  9.36k|      if(start % 2) {
  ------------------
  |  Branch (215:10): [True: 0, False: 9.36k]
  ------------------
  216|      0|         return 0;
  217|      0|      }
  218|  9.36k|      return start;
  219|  9.36k|   }
  220|       |
  221|   294k|   for(size_t j = start; j <= end; ++j) {
  ------------------
  |  Branch (221:26): [True: 294k, False: 0]
  ------------------
  222|   294k|      if(j % 2) {
  ------------------
  |  Branch (222:10): [True: 20.4k, False: 274k]
  ------------------
  223|  20.4k|         continue;
  224|  20.4k|      }
  225|       |
  226|   274k|      if(2 * j > z_size) {
  ------------------
  |  Branch (226:10): [True: 17.3k, False: 256k]
  ------------------
  227|  17.3k|         return 0;
  228|  17.3k|      }
  229|       |
  230|   256k|      if(x_sw <= j && j <= x_size && y_sw <= j && j <= y_size) {
  ------------------
  |  Branch (230:10): [True: 256k, False: 0]
  |  Branch (230:23): [True: 256k, False: 0]
  |  Branch (230:38): [True: 256k, False: 0]
  |  Branch (230:51): [True: 256k, False: 0]
  ------------------
  231|   256k|         if(j % 4 == 2 && (j + 2) <= x_size && (j + 2) <= y_size && 2 * (j + 2) <= z_size) {
  ------------------
  |  Branch (231:13): [True: 3.30k, False: 253k]
  |  Branch (231:27): [True: 3.30k, False: 0]
  |  Branch (231:48): [True: 3.30k, False: 0]
  |  Branch (231:69): [True: 3.07k, False: 232]
  ------------------
  232|  3.07k|            return j + 2;
  233|  3.07k|         }
  234|   253k|         return j;
  235|   256k|      }
  236|   256k|   }
  237|       |
  238|      0|   return 0;
  239|   274k|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_113karatsuba_mulEPmPKmS3_mS1_:
   80|  1.08M|void karatsuba_mul(word z[], const word x[], const word y[], size_t N, word workspace[]) {
   81|  1.08M|   if(N < KARATSUBA_MULTIPLY_THRESHOLD || N % 2) {
  ------------------
  |  Branch (81:7): [True: 808k, False: 272k]
  |  Branch (81:43): [True: 0, False: 272k]
  ------------------
   82|   808k|      switch(N) {
   83|      0|         case 6:
  ------------------
  |  Branch (83:10): [True: 0, False: 808k]
  ------------------
   84|      0|            return bigint_comba_mul6(z, x, y);
   85|      0|         case 8:
  ------------------
  |  Branch (85:10): [True: 0, False: 808k]
  ------------------
   86|      0|            return bigint_comba_mul8(z, x, y);
   87|      0|         case 9:
  ------------------
  |  Branch (87:10): [True: 0, False: 808k]
  ------------------
   88|      0|            return bigint_comba_mul9(z, x, y);
   89|   269k|         case 16:
  ------------------
  |  Branch (89:10): [True: 269k, False: 538k]
  ------------------
   90|   269k|            return bigint_comba_mul16(z, x, y);
   91|   537k|         case 24:
  ------------------
  |  Branch (91:10): [True: 537k, False: 270k]
  ------------------
   92|   537k|            return bigint_comba_mul24(z, x, y);
   93|  1.04k|         default:
  ------------------
  |  Branch (93:10): [True: 1.04k, False: 807k]
  ------------------
   94|  1.04k|            return basecase_mul(z, 2 * N, x, N, y, N);
   95|   808k|      }
   96|   808k|   }
   97|       |
   98|   272k|   const size_t N2 = N / 2;
   99|       |
  100|   272k|   const word* x0 = x;
  101|   272k|   const word* x1 = x + N2;
  102|   272k|   const word* y0 = y;
  103|   272k|   const word* y1 = y + N2;
  104|   272k|   word* z0 = z;
  105|   272k|   word* z1 = z + N;
  106|       |
  107|   272k|   word* ws0 = workspace;
  108|   272k|   word* ws1 = workspace + N;
  109|       |
  110|   272k|   clear_mem(workspace, 2 * N);
  111|       |
  112|       |   /*
  113|       |   * If either of cmp0 or cmp1 is zero then z0 or z1 resp is zero here,
  114|       |   * resulting in a no-op - z0*z1 will be equal to zero so we don't need to do
  115|       |   * anything, clear_mem above already set the correct result.
  116|       |   *
  117|       |   * However we ignore the result of the comparisons and always perform the
  118|       |   * subtractions and recursively multiply to avoid the timing channel.
  119|       |   */
  120|       |
  121|       |   // First compute (X_lo - X_hi)*(Y_hi - Y_lo)
  122|   272k|   const auto cmp0 = bigint_sub_abs(z0, x0, x1, N2, workspace);
  123|   272k|   const auto cmp1 = bigint_sub_abs(z1, y1, y0, N2, workspace);
  124|   272k|   const auto neg_mask = ~(cmp0 ^ cmp1);
  125|       |
  126|   272k|   karatsuba_mul(ws0, z0, z1, N2, ws1);
  127|       |
  128|       |   // Compute X_lo * Y_lo
  129|   272k|   karatsuba_mul(z0, x0, y0, N2, ws1);
  130|       |
  131|       |   // Compute X_hi * Y_hi
  132|   272k|   karatsuba_mul(z1, x1, y1, N2, ws1);
  133|       |
  134|   272k|   const word ws_carry = bigint_add3_nc(ws1, z0, N, z1, N);
  135|   272k|   word z_carry = bigint_add2_nc(z + N2, N, ws1, N);
  136|       |
  137|   272k|   z_carry += bigint_add2_nc(z + N + N2, N2, &ws_carry, 1);
  138|   272k|   bigint_add2_nc(z + N + N2, N2, &z_carry, 1);
  139|       |
  140|   272k|   clear_mem(workspace + N, N2);
  141|       |
  142|   272k|   bigint_cnd_add_or_sub(neg_mask, z + N2, workspace, 2 * N - N2);
  143|   272k|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_114karatsuba_sizeEmmm:
  244|   538k|size_t karatsuba_size(size_t z_size, size_t x_size, size_t x_sw) {
  245|   538k|   if(x_sw == x_size) {
  ------------------
  |  Branch (245:7): [True: 0, False: 538k]
  ------------------
  246|      0|      if(x_sw % 2) {
  ------------------
  |  Branch (246:10): [True: 0, False: 0]
  ------------------
  247|      0|         return 0;
  248|      0|      }
  249|      0|      return x_sw;
  250|      0|   }
  251|       |
  252|   612k|   for(size_t j = x_sw; j <= x_size; ++j) {
  ------------------
  |  Branch (252:25): [True: 612k, False: 0]
  ------------------
  253|   612k|      if(j % 2) {
  ------------------
  |  Branch (253:10): [True: 73.4k, False: 538k]
  ------------------
  254|  73.4k|         continue;
  255|  73.4k|      }
  256|       |
  257|   538k|      if(2 * j > z_size) {
  ------------------
  |  Branch (257:10): [True: 73.2k, False: 465k]
  ------------------
  258|  73.2k|         return 0;
  259|  73.2k|      }
  260|       |
  261|   465k|      if(j % 4 == 2 && (j + 2) <= x_size && 2 * (j + 2) <= z_size) {
  ------------------
  |  Branch (261:10): [True: 30.7k, False: 434k]
  |  Branch (261:24): [True: 30.7k, False: 0]
  |  Branch (261:45): [True: 204, False: 30.5k]
  ------------------
  262|    204|         return j + 2;
  263|    204|      }
  264|   465k|      return j;
  265|   465k|   }
  266|       |
  267|      0|   return 0;
  268|   538k|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_113karatsuba_sqrEPmPKmmS1_:
  148|  1.80M|void karatsuba_sqr(word z[], const word x[], size_t N, word workspace[]) {
  149|  1.80M|   if(N < KARATSUBA_SQUARE_THRESHOLD || N % 2) {
  ------------------
  |  Branch (149:7): [True: 1.36M, False: 447k]
  |  Branch (149:41): [True: 0, False: 447k]
  ------------------
  150|  1.36M|      switch(N) {
  151|      0|         case 6:
  ------------------
  |  Branch (151:10): [True: 0, False: 1.36M]
  ------------------
  152|      0|            return bigint_comba_sqr6(z, x);
  153|      0|         case 8:
  ------------------
  |  Branch (153:10): [True: 0, False: 1.36M]
  ------------------
  154|      0|            return bigint_comba_sqr8(z, x);
  155|      0|         case 9:
  ------------------
  |  Branch (155:10): [True: 0, False: 1.36M]
  ------------------
  156|      0|            return bigint_comba_sqr9(z, x);
  157|   452k|         case 16:
  ------------------
  |  Branch (157:10): [True: 452k, False: 908k]
  ------------------
  158|   452k|            return bigint_comba_sqr16(z, x);
  159|   870k|         case 24:
  ------------------
  |  Branch (159:10): [True: 870k, False: 490k]
  ------------------
  160|   870k|            return bigint_comba_sqr24(z, x);
  161|  38.4k|         default:
  ------------------
  |  Branch (161:10): [True: 38.4k, False: 1.32M]
  ------------------
  162|  38.4k|            return basecase_sqr(z, 2 * N, x, N);
  163|  1.36M|      }
  164|  1.36M|   }
  165|       |
  166|   447k|   const size_t N2 = N / 2;
  167|       |
  168|   447k|   const word* x0 = x;
  169|   447k|   const word* x1 = x + N2;
  170|   447k|   word* z0 = z;
  171|   447k|   word* z1 = z + N;
  172|       |
  173|   447k|   word* ws0 = workspace;
  174|   447k|   word* ws1 = workspace + N;
  175|       |
  176|   447k|   clear_mem(workspace, 2 * N);
  177|       |
  178|       |   // See comment in karatsuba_mul
  179|   447k|   bigint_sub_abs(z0, x0, x1, N2, workspace);
  180|   447k|   karatsuba_sqr(ws0, z0, N2, ws1);
  181|       |
  182|   447k|   karatsuba_sqr(z0, x0, N2, ws1);
  183|   447k|   karatsuba_sqr(z1, x1, N2, ws1);
  184|       |
  185|   447k|   const word ws_carry = bigint_add3_nc(ws1, z0, N, z1, N);
  186|   447k|   word z_carry = bigint_add2_nc(z + N2, N, ws1, N);
  187|       |
  188|   447k|   z_carry += bigint_add2_nc(z + N + N2, N2, &ws_carry, 1);
  189|   447k|   bigint_add2_nc(z + N + N2, N2, &z_carry, 1);
  190|       |
  191|       |   /*
  192|       |   * This is only actually required if cmp (result of bigint_sub_abs) is != 0,
  193|       |   * however if cmp==0 then ws0[0:N] == 0 and avoiding the jump hides a
  194|       |   * timing channel.
  195|       |   */
  196|   447k|   bigint_sub2(z + N2, 2 * N - N2, ws0, N);
  197|   447k|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_mulILm4EEEbmmmmm:
  271|  99.4M|inline bool sized_for_comba_mul(size_t x_sw, size_t x_size, size_t y_sw, size_t y_size, size_t z_size) {
  272|  99.4M|   return (x_sw <= SZ && x_size >= SZ && y_sw <= SZ && y_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (272:12): [True: 30.1M, False: 69.3M]
  |  Branch (272:26): [True: 30.1M, False: 66]
  |  Branch (272:42): [True: 30.0M, False: 47.8k]
  |  Branch (272:56): [True: 30.0M, False: 0]
  |  Branch (272:72): [True: 30.0M, False: 17.5k]
  ------------------
  273|  99.4M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_mulILm6EEEbmmmmm:
  271|  69.4M|inline bool sized_for_comba_mul(size_t x_sw, size_t x_size, size_t y_sw, size_t y_size, size_t z_size) {
  272|  69.4M|   return (x_sw <= SZ && x_size >= SZ && y_sw <= SZ && y_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (272:12): [True: 49.9M, False: 19.4M]
  |  Branch (272:26): [True: 49.9M, False: 135]
  |  Branch (272:42): [True: 49.9M, False: 31.8k]
  |  Branch (272:56): [True: 49.9M, False: 0]
  |  Branch (272:72): [True: 49.8M, False: 58.4k]
  ------------------
  273|  69.4M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_mulILm8EEEbmmmmm:
  271|  19.5M|inline bool sized_for_comba_mul(size_t x_sw, size_t x_size, size_t y_sw, size_t y_size, size_t z_size) {
  272|  19.5M|   return (x_sw <= SZ && x_size >= SZ && y_sw <= SZ && y_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (272:12): [True: 3.84M, False: 15.7M]
  |  Branch (272:26): [True: 3.84M, False: 255]
  |  Branch (272:42): [True: 3.74M, False: 92.6k]
  |  Branch (272:56): [True: 3.74M, False: 0]
  |  Branch (272:72): [True: 3.65M, False: 89.5k]
  ------------------
  273|  19.5M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_mulILm9EEEbmmmmm:
  271|  15.8M|inline bool sized_for_comba_mul(size_t x_sw, size_t x_size, size_t y_sw, size_t y_size, size_t z_size) {
  272|  15.8M|   return (x_sw <= SZ && x_size >= SZ && y_sw <= SZ && y_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (272:12): [True: 14.9M, False: 954k]
  |  Branch (272:26): [True: 14.8M, False: 79.5k]
  |  Branch (272:42): [True: 14.8M, False: 31.2k]
  |  Branch (272:56): [True: 14.7M, False: 38.5k]
  |  Branch (272:72): [True: 14.7M, False: 60.9k]
  ------------------
  273|  15.8M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_mulILm16EEEbmmmmm:
  271|  1.16M|inline bool sized_for_comba_mul(size_t x_sw, size_t x_size, size_t y_sw, size_t y_size, size_t z_size) {
  272|  1.16M|   return (x_sw <= SZ && x_size >= SZ && y_sw <= SZ && y_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (272:12): [True: 863k, False: 300k]
  |  Branch (272:26): [True: 762k, False: 101k]
  |  Branch (272:42): [True: 754k, False: 8.59k]
  |  Branch (272:56): [True: 736k, False: 17.8k]
  |  Branch (272:72): [True: 555k, False: 180k]
  ------------------
  273|  1.16M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_mulILm24EEEbmmmmm:
  271|   608k|inline bool sized_for_comba_mul(size_t x_sw, size_t x_size, size_t y_sw, size_t y_size, size_t z_size) {
  272|   608k|   return (x_sw <= SZ && x_size >= SZ && y_sw <= SZ && y_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (272:12): [True: 325k, False: 283k]
  |  Branch (272:26): [True: 201k, False: 123k]
  |  Branch (272:42): [True: 199k, False: 2.18k]
  |  Branch (272:56): [True: 102k, False: 96.9k]
  |  Branch (272:72): [True: 1.05k, False: 101k]
  ------------------
  273|   608k|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_sqrILm4EEEbmmm:
  276|  87.2M|inline bool sized_for_comba_sqr(size_t x_sw, size_t x_size, size_t z_size) {
  277|  87.2M|   return (x_sw <= SZ && x_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (277:12): [True: 24.4M, False: 62.7M]
  |  Branch (277:26): [True: 24.4M, False: 0]
  |  Branch (277:42): [True: 24.4M, False: 1.20k]
  ------------------
  278|  87.2M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_sqrILm6EEEbmmm:
  276|  62.7M|inline bool sized_for_comba_sqr(size_t x_sw, size_t x_size, size_t z_size) {
  277|  62.7M|   return (x_sw <= SZ && x_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (277:12): [True: 44.8M, False: 17.9M]
  |  Branch (277:26): [True: 44.8M, False: 0]
  |  Branch (277:42): [True: 44.8M, False: 3.26k]
  ------------------
  278|  62.7M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_sqrILm8EEEbmmm:
  276|  17.9M|inline bool sized_for_comba_sqr(size_t x_sw, size_t x_size, size_t z_size) {
  277|  17.9M|   return (x_sw <= SZ && x_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (277:12): [True: 3.10M, False: 14.8M]
  |  Branch (277:26): [True: 3.10M, False: 0]
  |  Branch (277:42): [True: 3.09M, False: 3.53k]
  ------------------
  278|  17.9M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_sqrILm9EEEbmmm:
  276|  14.8M|inline bool sized_for_comba_sqr(size_t x_sw, size_t x_size, size_t z_size) {
  277|  14.8M|   return (x_sw <= SZ && x_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (277:12): [True: 13.4M, False: 1.33M]
  |  Branch (277:26): [True: 13.4M, False: 513]
  |  Branch (277:42): [True: 13.4M, False: 3.01k]
  ------------------
  278|  14.8M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_sqrILm16EEEbmmm:
  276|  1.33M|inline bool sized_for_comba_sqr(size_t x_sw, size_t x_size, size_t z_size) {
  277|  1.33M|   return (x_sw <= SZ && x_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (277:12): [True: 876k, False: 460k]
  |  Branch (277:26): [True: 875k, False: 513]
  |  Branch (277:42): [True: 780k, False: 95.0k]
  ------------------
  278|  1.33M|}
mp_karat.cpp:_ZN5Botan12_GLOBAL__N_119sized_for_comba_sqrILm24EEEbmmm:
  276|   555k|inline bool sized_for_comba_sqr(size_t x_sw, size_t x_size, size_t z_size) {
  277|   555k|   return (x_sw <= SZ && x_size >= SZ && z_size >= 2 * SZ);
  ------------------
  |  Branch (277:12): [True: 102k, False: 452k]
  |  Branch (277:26): [True: 86.8k, False: 16.1k]
  |  Branch (277:42): [True: 66, False: 86.8k]
  ------------------
  278|   555k|}

_ZN5Botan25bigint_monty_redc_genericEPmmPKmmmS0_:
   31|   681k|void bigint_monty_redc_generic(word z[], size_t z_size, const word p[], size_t p_size, word p_dash, word ws[]) {
   32|   681k|   BOTAN_ARG_CHECK(z_size >= 2 * p_size && p_size > 0, "Invalid sizes for bigint_monty_redc_generic");
  ------------------
  |  |   30|   681k|   do {                                                          \
  |  |   31|  1.36M|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:12): [True: 681k, False: 0]
  |  |  |  Branch (31:12): [True: 681k, False: 0]
  |  |  ------------------
  |  |   32|   681k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|   681k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 681k]
  |  |  ------------------
  ------------------
   33|       |
   34|   681k|   word w2 = 0, w1 = 0, w0 = 0;
   35|       |
   36|   681k|   w0 = z[0];
   37|       |
   38|   681k|   ws[0] = w0 * p_dash;
   39|       |
   40|   681k|   word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
   41|       |
   42|   681k|   w0 = w1;
   43|   681k|   w1 = w2;
   44|   681k|   w2 = 0;
   45|       |
   46|  26.4M|   for(size_t i = 1; i != p_size; ++i) {
  ------------------
  |  Branch (46:22): [True: 25.7M, False: 681k]
  ------------------
   47|   608M|      for(size_t j = 0; j < i; ++j) {
  ------------------
  |  Branch (47:25): [True: 583M, False: 25.7M]
  ------------------
   48|   583M|         word3_muladd(&w2, &w1, &w0, ws[j], p[i - j]);
   49|   583M|      }
   50|       |
   51|  25.7M|      word3_add(&w2, &w1, &w0, z[i]);
   52|       |
   53|  25.7M|      ws[i] = w0 * p_dash;
   54|       |
   55|  25.7M|      word3_muladd(&w2, &w1, &w0, ws[i], p[0]);
   56|       |
   57|  25.7M|      w0 = w1;
   58|  25.7M|      w1 = w2;
   59|  25.7M|      w2 = 0;
   60|  25.7M|   }
   61|       |
   62|  26.4M|   for(size_t i = 0; i != p_size - 1; ++i) {
  ------------------
  |  Branch (62:22): [True: 25.7M, False: 681k]
  ------------------
   63|   608M|      for(size_t j = i + 1; j != p_size; ++j) {
  ------------------
  |  Branch (63:29): [True: 583M, False: 25.7M]
  ------------------
   64|   583M|         word3_muladd(&w2, &w1, &w0, ws[j], p[p_size + i - j]);
   65|   583M|      }
   66|       |
   67|  25.7M|      word3_add(&w2, &w1, &w0, z[p_size + i]);
   68|       |
   69|  25.7M|      ws[i] = w0;
   70|       |
   71|  25.7M|      w0 = w1;
   72|  25.7M|      w1 = w2;
   73|  25.7M|      w2 = 0;
   74|  25.7M|   }
   75|       |
   76|   681k|   word3_add(&w2, &w1, &w0, z[2 * p_size - 1]);
   77|       |
   78|   681k|   ws[p_size - 1] = w0;
   79|       |   // w1 is the final part, which is not stored in the workspace
   80|       |
   81|       |   /*
   82|       |   * The result might need to be reduced mod p. To avoid a timing
   83|       |   * channel, always perform the subtraction. If in the compution
   84|       |   * of x - p a borrow is required then x was already < p.
   85|       |   *
   86|       |   * x starts at ws[0] and is p_size bytes long plus a possible high
   87|       |   * digit left over in w1.
   88|       |   *
   89|       |   * x - p starts at z[0] and is also p_size bytes long
   90|       |   *
   91|       |   * If borrow was set after the subtraction, then x was already less
   92|       |   * than p and the subtraction was not needed. In that case overwrite
   93|       |   * z[0:p_size] with the original x in ws[0:p_size].
   94|       |   *
   95|       |   * We only copy out p_size in the final step because we know
   96|       |   * the Montgomery result is < P
   97|       |   */
   98|       |
   99|   681k|   bigint_monty_maybe_sub(p_size, z, w1, ws, p);
  100|       |
  101|       |   // Clear the high words that contain the original input
  102|   681k|   clear_mem(z + p_size, z_size - p_size);
  103|   681k|}

_ZN5Botan19bigint_monty_redc_4EPmPKmmS0_:
   14|  21.8M|void bigint_monty_redc_4(word z[8], const word p[4], word p_dash, word ws[]) {
   15|  21.8M|   word w2 = 0, w1 = 0, w0 = 0;
   16|  21.8M|   w0 = z[0];
   17|  21.8M|   ws[0] = w0 * p_dash;
   18|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
   19|  21.8M|   w0 = w1;
   20|  21.8M|   w1 = w2;
   21|  21.8M|   w2 = 0;
   22|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
   23|  21.8M|   word3_add(&w2, &w1, &w0, z[1]);
   24|  21.8M|   ws[1] = w0 * p_dash;
   25|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
   26|  21.8M|   w0 = w1;
   27|  21.8M|   w1 = w2;
   28|  21.8M|   w2 = 0;
   29|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
   30|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
   31|  21.8M|   word3_add(&w2, &w1, &w0, z[2]);
   32|  21.8M|   ws[2] = w0 * p_dash;
   33|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
   34|  21.8M|   w0 = w1;
   35|  21.8M|   w1 = w2;
   36|  21.8M|   w2 = 0;
   37|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
   38|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
   39|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
   40|  21.8M|   word3_add(&w2, &w1, &w0, z[3]);
   41|  21.8M|   ws[3] = w0 * p_dash;
   42|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
   43|  21.8M|   w0 = w1;
   44|  21.8M|   w1 = w2;
   45|  21.8M|   w2 = 0;
   46|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
   47|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
   48|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
   49|  21.8M|   word3_add(&w2, &w1, &w0, z[4]);
   50|  21.8M|   ws[0] = w0;
   51|  21.8M|   w0 = w1;
   52|  21.8M|   w1 = w2;
   53|  21.8M|   w2 = 0;
   54|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
   55|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
   56|  21.8M|   word3_add(&w2, &w1, &w0, z[5]);
   57|  21.8M|   ws[1] = w0;
   58|  21.8M|   w0 = w1;
   59|  21.8M|   w1 = w2;
   60|  21.8M|   w2 = 0;
   61|  21.8M|   word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
   62|  21.8M|   word3_add(&w2, &w1, &w0, z[6]);
   63|  21.8M|   ws[2] = w0;
   64|  21.8M|   w0 = w1;
   65|  21.8M|   w1 = w2;
   66|  21.8M|   w2 = 0;
   67|  21.8M|   word3_add(&w2, &w1, &w0, z[7]);
   68|  21.8M|   ws[3] = w0;
   69|  21.8M|   bigint_monty_maybe_sub<4>(z, w1, ws, p);
   70|  21.8M|   clear_mem(z + 4, 4);
   71|  21.8M|}
_ZN5Botan19bigint_monty_redc_6EPmPKmmS0_:
   73|   841k|void bigint_monty_redc_6(word z[12], const word p[6], word p_dash, word ws[]) {
   74|   841k|   word w2 = 0, w1 = 0, w0 = 0;
   75|   841k|   w0 = z[0];
   76|   841k|   ws[0] = w0 * p_dash;
   77|   841k|   word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
   78|   841k|   w0 = w1;
   79|   841k|   w1 = w2;
   80|   841k|   w2 = 0;
   81|   841k|   word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
   82|   841k|   word3_add(&w2, &w1, &w0, z[1]);
   83|   841k|   ws[1] = w0 * p_dash;
   84|   841k|   word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
   85|   841k|   w0 = w1;
   86|   841k|   w1 = w2;
   87|   841k|   w2 = 0;
   88|   841k|   word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
   89|   841k|   word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
   90|   841k|   word3_add(&w2, &w1, &w0, z[2]);
   91|   841k|   ws[2] = w0 * p_dash;
   92|   841k|   word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
   93|   841k|   w0 = w1;
   94|   841k|   w1 = w2;
   95|   841k|   w2 = 0;
   96|   841k|   word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
   97|   841k|   word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
   98|   841k|   word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
   99|   841k|   word3_add(&w2, &w1, &w0, z[3]);
  100|   841k|   ws[3] = w0 * p_dash;
  101|   841k|   word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
  102|   841k|   w0 = w1;
  103|   841k|   w1 = w2;
  104|   841k|   w2 = 0;
  105|   841k|   word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
  106|   841k|   word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
  107|   841k|   word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
  108|   841k|   word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
  109|   841k|   word3_add(&w2, &w1, &w0, z[4]);
  110|   841k|   ws[4] = w0 * p_dash;
  111|   841k|   word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
  112|   841k|   w0 = w1;
  113|   841k|   w1 = w2;
  114|   841k|   w2 = 0;
  115|   841k|   word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
  116|   841k|   word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
  117|   841k|   word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
  118|   841k|   word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
  119|   841k|   word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
  120|   841k|   word3_add(&w2, &w1, &w0, z[5]);
  121|   841k|   ws[5] = w0 * p_dash;
  122|   841k|   word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
  123|   841k|   w0 = w1;
  124|   841k|   w1 = w2;
  125|   841k|   w2 = 0;
  126|   841k|   word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
  127|   841k|   word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
  128|   841k|   word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
  129|   841k|   word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
  130|   841k|   word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
  131|   841k|   word3_add(&w2, &w1, &w0, z[6]);
  132|   841k|   ws[0] = w0;
  133|   841k|   w0 = w1;
  134|   841k|   w1 = w2;
  135|   841k|   w2 = 0;
  136|   841k|   word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
  137|   841k|   word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
  138|   841k|   word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
  139|   841k|   word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
  140|   841k|   word3_add(&w2, &w1, &w0, z[7]);
  141|   841k|   ws[1] = w0;
  142|   841k|   w0 = w1;
  143|   841k|   w1 = w2;
  144|   841k|   w2 = 0;
  145|   841k|   word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
  146|   841k|   word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
  147|   841k|   word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
  148|   841k|   word3_add(&w2, &w1, &w0, z[8]);
  149|   841k|   ws[2] = w0;
  150|   841k|   w0 = w1;
  151|   841k|   w1 = w2;
  152|   841k|   w2 = 0;
  153|   841k|   word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
  154|   841k|   word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
  155|   841k|   word3_add(&w2, &w1, &w0, z[9]);
  156|   841k|   ws[3] = w0;
  157|   841k|   w0 = w1;
  158|   841k|   w1 = w2;
  159|   841k|   w2 = 0;
  160|   841k|   word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
  161|   841k|   word3_add(&w2, &w1, &w0, z[10]);
  162|   841k|   ws[4] = w0;
  163|   841k|   w0 = w1;
  164|   841k|   w1 = w2;
  165|   841k|   w2 = 0;
  166|   841k|   word3_add(&w2, &w1, &w0, z[11]);
  167|   841k|   ws[5] = w0;
  168|   841k|   bigint_monty_maybe_sub<6>(z, w1, ws, p);
  169|   841k|   clear_mem(z + 6, 6);
  170|   841k|}
_ZN5Botan19bigint_monty_redc_8EPmPKmmS0_:
  172|  6.72M|void bigint_monty_redc_8(word z[16], const word p[8], word p_dash, word ws[]) {
  173|  6.72M|   word w2 = 0, w1 = 0, w0 = 0;
  174|  6.72M|   w0 = z[0];
  175|  6.72M|   ws[0] = w0 * p_dash;
  176|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
  177|  6.72M|   w0 = w1;
  178|  6.72M|   w1 = w2;
  179|  6.72M|   w2 = 0;
  180|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
  181|  6.72M|   word3_add(&w2, &w1, &w0, z[1]);
  182|  6.72M|   ws[1] = w0 * p_dash;
  183|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
  184|  6.72M|   w0 = w1;
  185|  6.72M|   w1 = w2;
  186|  6.72M|   w2 = 0;
  187|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
  188|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
  189|  6.72M|   word3_add(&w2, &w1, &w0, z[2]);
  190|  6.72M|   ws[2] = w0 * p_dash;
  191|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
  192|  6.72M|   w0 = w1;
  193|  6.72M|   w1 = w2;
  194|  6.72M|   w2 = 0;
  195|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
  196|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
  197|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
  198|  6.72M|   word3_add(&w2, &w1, &w0, z[3]);
  199|  6.72M|   ws[3] = w0 * p_dash;
  200|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
  201|  6.72M|   w0 = w1;
  202|  6.72M|   w1 = w2;
  203|  6.72M|   w2 = 0;
  204|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
  205|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
  206|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
  207|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
  208|  6.72M|   word3_add(&w2, &w1, &w0, z[4]);
  209|  6.72M|   ws[4] = w0 * p_dash;
  210|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
  211|  6.72M|   w0 = w1;
  212|  6.72M|   w1 = w2;
  213|  6.72M|   w2 = 0;
  214|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
  215|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
  216|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
  217|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
  218|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
  219|  6.72M|   word3_add(&w2, &w1, &w0, z[5]);
  220|  6.72M|   ws[5] = w0 * p_dash;
  221|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
  222|  6.72M|   w0 = w1;
  223|  6.72M|   w1 = w2;
  224|  6.72M|   w2 = 0;
  225|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[6]);
  226|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
  227|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
  228|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
  229|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
  230|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
  231|  6.72M|   word3_add(&w2, &w1, &w0, z[6]);
  232|  6.72M|   ws[6] = w0 * p_dash;
  233|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[0]);
  234|  6.72M|   w0 = w1;
  235|  6.72M|   w1 = w2;
  236|  6.72M|   w2 = 0;
  237|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[0], p[7]);
  238|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[6]);
  239|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
  240|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
  241|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
  242|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
  243|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[1]);
  244|  6.72M|   word3_add(&w2, &w1, &w0, z[7]);
  245|  6.72M|   ws[7] = w0 * p_dash;
  246|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[0]);
  247|  6.72M|   w0 = w1;
  248|  6.72M|   w1 = w2;
  249|  6.72M|   w2 = 0;
  250|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[1], p[7]);
  251|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[6]);
  252|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
  253|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
  254|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
  255|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[2]);
  256|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[1]);
  257|  6.72M|   word3_add(&w2, &w1, &w0, z[8]);
  258|  6.72M|   ws[0] = w0;
  259|  6.72M|   w0 = w1;
  260|  6.72M|   w1 = w2;
  261|  6.72M|   w2 = 0;
  262|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[2], p[7]);
  263|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[6]);
  264|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
  265|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
  266|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[3]);
  267|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[2]);
  268|  6.72M|   word3_add(&w2, &w1, &w0, z[9]);
  269|  6.72M|   ws[1] = w0;
  270|  6.72M|   w0 = w1;
  271|  6.72M|   w1 = w2;
  272|  6.72M|   w2 = 0;
  273|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[3], p[7]);
  274|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[6]);
  275|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
  276|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[4]);
  277|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[3]);
  278|  6.72M|   word3_add(&w2, &w1, &w0, z[10]);
  279|  6.72M|   ws[2] = w0;
  280|  6.72M|   w0 = w1;
  281|  6.72M|   w1 = w2;
  282|  6.72M|   w2 = 0;
  283|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[4], p[7]);
  284|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[6]);
  285|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[5]);
  286|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[4]);
  287|  6.72M|   word3_add(&w2, &w1, &w0, z[11]);
  288|  6.72M|   ws[3] = w0;
  289|  6.72M|   w0 = w1;
  290|  6.72M|   w1 = w2;
  291|  6.72M|   w2 = 0;
  292|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[5], p[7]);
  293|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[6]);
  294|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[5]);
  295|  6.72M|   word3_add(&w2, &w1, &w0, z[12]);
  296|  6.72M|   ws[4] = w0;
  297|  6.72M|   w0 = w1;
  298|  6.72M|   w1 = w2;
  299|  6.72M|   w2 = 0;
  300|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[6], p[7]);
  301|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[6]);
  302|  6.72M|   word3_add(&w2, &w1, &w0, z[13]);
  303|  6.72M|   ws[5] = w0;
  304|  6.72M|   w0 = w1;
  305|  6.72M|   w1 = w2;
  306|  6.72M|   w2 = 0;
  307|  6.72M|   word3_muladd(&w2, &w1, &w0, ws[7], p[7]);
  308|  6.72M|   word3_add(&w2, &w1, &w0, z[14]);
  309|  6.72M|   ws[6] = w0;
  310|  6.72M|   w0 = w1;
  311|  6.72M|   w1 = w2;
  312|  6.72M|   w2 = 0;
  313|  6.72M|   word3_add(&w2, &w1, &w0, z[15]);
  314|  6.72M|   ws[7] = w0;
  315|  6.72M|   bigint_monty_maybe_sub<8>(z, w1, ws, p);
  316|  6.72M|   clear_mem(z + 8, 8);
  317|  6.72M|}
_ZN5Botan20bigint_monty_redc_16EPmPKmmS0_:
  319|  1.30M|void bigint_monty_redc_16(word z[32], const word p[16], word p_dash, word ws[]) {
  320|  1.30M|   word w2 = 0, w1 = 0, w0 = 0;
  321|  1.30M|   w0 = z[0];
  322|  1.30M|   ws[0] = w0 * p_dash;
  323|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
  324|  1.30M|   w0 = w1;
  325|  1.30M|   w1 = w2;
  326|  1.30M|   w2 = 0;
  327|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
  328|  1.30M|   word3_add(&w2, &w1, &w0, z[1]);
  329|  1.30M|   ws[1] = w0 * p_dash;
  330|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
  331|  1.30M|   w0 = w1;
  332|  1.30M|   w1 = w2;
  333|  1.30M|   w2 = 0;
  334|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
  335|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
  336|  1.30M|   word3_add(&w2, &w1, &w0, z[2]);
  337|  1.30M|   ws[2] = w0 * p_dash;
  338|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
  339|  1.30M|   w0 = w1;
  340|  1.30M|   w1 = w2;
  341|  1.30M|   w2 = 0;
  342|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
  343|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
  344|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
  345|  1.30M|   word3_add(&w2, &w1, &w0, z[3]);
  346|  1.30M|   ws[3] = w0 * p_dash;
  347|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
  348|  1.30M|   w0 = w1;
  349|  1.30M|   w1 = w2;
  350|  1.30M|   w2 = 0;
  351|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
  352|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
  353|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
  354|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
  355|  1.30M|   word3_add(&w2, &w1, &w0, z[4]);
  356|  1.30M|   ws[4] = w0 * p_dash;
  357|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
  358|  1.30M|   w0 = w1;
  359|  1.30M|   w1 = w2;
  360|  1.30M|   w2 = 0;
  361|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
  362|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
  363|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
  364|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
  365|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
  366|  1.30M|   word3_add(&w2, &w1, &w0, z[5]);
  367|  1.30M|   ws[5] = w0 * p_dash;
  368|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
  369|  1.30M|   w0 = w1;
  370|  1.30M|   w1 = w2;
  371|  1.30M|   w2 = 0;
  372|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[6]);
  373|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
  374|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
  375|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
  376|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
  377|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
  378|  1.30M|   word3_add(&w2, &w1, &w0, z[6]);
  379|  1.30M|   ws[6] = w0 * p_dash;
  380|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[0]);
  381|  1.30M|   w0 = w1;
  382|  1.30M|   w1 = w2;
  383|  1.30M|   w2 = 0;
  384|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[7]);
  385|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[6]);
  386|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
  387|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
  388|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
  389|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
  390|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[1]);
  391|  1.30M|   word3_add(&w2, &w1, &w0, z[7]);
  392|  1.30M|   ws[7] = w0 * p_dash;
  393|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[0]);
  394|  1.30M|   w0 = w1;
  395|  1.30M|   w1 = w2;
  396|  1.30M|   w2 = 0;
  397|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[8]);
  398|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[7]);
  399|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[6]);
  400|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
  401|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
  402|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
  403|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[2]);
  404|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[1]);
  405|  1.30M|   word3_add(&w2, &w1, &w0, z[8]);
  406|  1.30M|   ws[8] = w0 * p_dash;
  407|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[0]);
  408|  1.30M|   w0 = w1;
  409|  1.30M|   w1 = w2;
  410|  1.30M|   w2 = 0;
  411|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[9]);
  412|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[8]);
  413|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[7]);
  414|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[6]);
  415|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
  416|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
  417|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[3]);
  418|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[2]);
  419|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[1]);
  420|  1.30M|   word3_add(&w2, &w1, &w0, z[9]);
  421|  1.30M|   ws[9] = w0 * p_dash;
  422|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[0]);
  423|  1.30M|   w0 = w1;
  424|  1.30M|   w1 = w2;
  425|  1.30M|   w2 = 0;
  426|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[10]);
  427|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[9]);
  428|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[8]);
  429|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[7]);
  430|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[6]);
  431|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
  432|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[4]);
  433|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[3]);
  434|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[2]);
  435|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[1]);
  436|  1.30M|   word3_add(&w2, &w1, &w0, z[10]);
  437|  1.30M|   ws[10] = w0 * p_dash;
  438|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[0]);
  439|  1.30M|   w0 = w1;
  440|  1.30M|   w1 = w2;
  441|  1.30M|   w2 = 0;
  442|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[11]);
  443|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[10]);
  444|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[9]);
  445|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[8]);
  446|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[7]);
  447|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[6]);
  448|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[5]);
  449|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[4]);
  450|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[3]);
  451|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[2]);
  452|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[1]);
  453|  1.30M|   word3_add(&w2, &w1, &w0, z[11]);
  454|  1.30M|   ws[11] = w0 * p_dash;
  455|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[0]);
  456|  1.30M|   w0 = w1;
  457|  1.30M|   w1 = w2;
  458|  1.30M|   w2 = 0;
  459|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[12]);
  460|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[11]);
  461|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[10]);
  462|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[9]);
  463|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[8]);
  464|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[7]);
  465|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[6]);
  466|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[5]);
  467|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[4]);
  468|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[3]);
  469|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[2]);
  470|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[1]);
  471|  1.30M|   word3_add(&w2, &w1, &w0, z[12]);
  472|  1.30M|   ws[12] = w0 * p_dash;
  473|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[0]);
  474|  1.30M|   w0 = w1;
  475|  1.30M|   w1 = w2;
  476|  1.30M|   w2 = 0;
  477|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[13]);
  478|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[12]);
  479|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[11]);
  480|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[10]);
  481|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[9]);
  482|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[8]);
  483|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[7]);
  484|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[6]);
  485|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[5]);
  486|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[4]);
  487|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[3]);
  488|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[2]);
  489|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[1]);
  490|  1.30M|   word3_add(&w2, &w1, &w0, z[13]);
  491|  1.30M|   ws[13] = w0 * p_dash;
  492|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[0]);
  493|  1.30M|   w0 = w1;
  494|  1.30M|   w1 = w2;
  495|  1.30M|   w2 = 0;
  496|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[14]);
  497|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[13]);
  498|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[12]);
  499|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[11]);
  500|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[10]);
  501|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[9]);
  502|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[8]);
  503|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[7]);
  504|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[6]);
  505|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[5]);
  506|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[4]);
  507|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[3]);
  508|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[2]);
  509|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[1]);
  510|  1.30M|   word3_add(&w2, &w1, &w0, z[14]);
  511|  1.30M|   ws[14] = w0 * p_dash;
  512|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[0]);
  513|  1.30M|   w0 = w1;
  514|  1.30M|   w1 = w2;
  515|  1.30M|   w2 = 0;
  516|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[0], p[15]);
  517|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[14]);
  518|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[13]);
  519|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[12]);
  520|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[11]);
  521|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[10]);
  522|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[9]);
  523|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[8]);
  524|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[7]);
  525|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[6]);
  526|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[5]);
  527|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[4]);
  528|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[3]);
  529|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[2]);
  530|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[1]);
  531|  1.30M|   word3_add(&w2, &w1, &w0, z[15]);
  532|  1.30M|   ws[15] = w0 * p_dash;
  533|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[0]);
  534|  1.30M|   w0 = w1;
  535|  1.30M|   w1 = w2;
  536|  1.30M|   w2 = 0;
  537|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[1], p[15]);
  538|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[14]);
  539|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[13]);
  540|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[12]);
  541|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[11]);
  542|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[10]);
  543|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[9]);
  544|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[8]);
  545|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[7]);
  546|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[6]);
  547|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[5]);
  548|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[4]);
  549|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[3]);
  550|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[2]);
  551|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[1]);
  552|  1.30M|   word3_add(&w2, &w1, &w0, z[16]);
  553|  1.30M|   ws[0] = w0;
  554|  1.30M|   w0 = w1;
  555|  1.30M|   w1 = w2;
  556|  1.30M|   w2 = 0;
  557|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[2], p[15]);
  558|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[14]);
  559|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[13]);
  560|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[12]);
  561|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[11]);
  562|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[10]);
  563|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[9]);
  564|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[8]);
  565|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[7]);
  566|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[6]);
  567|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[5]);
  568|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[4]);
  569|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[3]);
  570|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[2]);
  571|  1.30M|   word3_add(&w2, &w1, &w0, z[17]);
  572|  1.30M|   ws[1] = w0;
  573|  1.30M|   w0 = w1;
  574|  1.30M|   w1 = w2;
  575|  1.30M|   w2 = 0;
  576|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[3], p[15]);
  577|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[14]);
  578|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[13]);
  579|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[12]);
  580|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[11]);
  581|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[10]);
  582|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[9]);
  583|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[8]);
  584|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[7]);
  585|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[6]);
  586|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[5]);
  587|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[4]);
  588|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[3]);
  589|  1.30M|   word3_add(&w2, &w1, &w0, z[18]);
  590|  1.30M|   ws[2] = w0;
  591|  1.30M|   w0 = w1;
  592|  1.30M|   w1 = w2;
  593|  1.30M|   w2 = 0;
  594|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[4], p[15]);
  595|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[14]);
  596|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[13]);
  597|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[12]);
  598|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[11]);
  599|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[10]);
  600|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[9]);
  601|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[8]);
  602|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[7]);
  603|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[6]);
  604|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[5]);
  605|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[4]);
  606|  1.30M|   word3_add(&w2, &w1, &w0, z[19]);
  607|  1.30M|   ws[3] = w0;
  608|  1.30M|   w0 = w1;
  609|  1.30M|   w1 = w2;
  610|  1.30M|   w2 = 0;
  611|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[5], p[15]);
  612|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[14]);
  613|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[13]);
  614|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[12]);
  615|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[11]);
  616|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[10]);
  617|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[9]);
  618|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[8]);
  619|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[7]);
  620|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[6]);
  621|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[5]);
  622|  1.30M|   word3_add(&w2, &w1, &w0, z[20]);
  623|  1.30M|   ws[4] = w0;
  624|  1.30M|   w0 = w1;
  625|  1.30M|   w1 = w2;
  626|  1.30M|   w2 = 0;
  627|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[6], p[15]);
  628|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[14]);
  629|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[13]);
  630|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[12]);
  631|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[11]);
  632|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[10]);
  633|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[9]);
  634|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[8]);
  635|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[7]);
  636|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[6]);
  637|  1.30M|   word3_add(&w2, &w1, &w0, z[21]);
  638|  1.30M|   ws[5] = w0;
  639|  1.30M|   w0 = w1;
  640|  1.30M|   w1 = w2;
  641|  1.30M|   w2 = 0;
  642|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[7], p[15]);
  643|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[14]);
  644|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[13]);
  645|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[12]);
  646|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[11]);
  647|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[10]);
  648|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[9]);
  649|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[8]);
  650|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[7]);
  651|  1.30M|   word3_add(&w2, &w1, &w0, z[22]);
  652|  1.30M|   ws[6] = w0;
  653|  1.30M|   w0 = w1;
  654|  1.30M|   w1 = w2;
  655|  1.30M|   w2 = 0;
  656|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[8], p[15]);
  657|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[14]);
  658|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[13]);
  659|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[12]);
  660|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[11]);
  661|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[10]);
  662|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[9]);
  663|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[8]);
  664|  1.30M|   word3_add(&w2, &w1, &w0, z[23]);
  665|  1.30M|   ws[7] = w0;
  666|  1.30M|   w0 = w1;
  667|  1.30M|   w1 = w2;
  668|  1.30M|   w2 = 0;
  669|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[9], p[15]);
  670|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[14]);
  671|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[13]);
  672|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[12]);
  673|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[11]);
  674|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[10]);
  675|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[9]);
  676|  1.30M|   word3_add(&w2, &w1, &w0, z[24]);
  677|  1.30M|   ws[8] = w0;
  678|  1.30M|   w0 = w1;
  679|  1.30M|   w1 = w2;
  680|  1.30M|   w2 = 0;
  681|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[10], p[15]);
  682|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[14]);
  683|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[13]);
  684|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[12]);
  685|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[11]);
  686|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[10]);
  687|  1.30M|   word3_add(&w2, &w1, &w0, z[25]);
  688|  1.30M|   ws[9] = w0;
  689|  1.30M|   w0 = w1;
  690|  1.30M|   w1 = w2;
  691|  1.30M|   w2 = 0;
  692|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[11], p[15]);
  693|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[14]);
  694|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[13]);
  695|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[12]);
  696|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[11]);
  697|  1.30M|   word3_add(&w2, &w1, &w0, z[26]);
  698|  1.30M|   ws[10] = w0;
  699|  1.30M|   w0 = w1;
  700|  1.30M|   w1 = w2;
  701|  1.30M|   w2 = 0;
  702|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[12], p[15]);
  703|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[14]);
  704|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[13]);
  705|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[12]);
  706|  1.30M|   word3_add(&w2, &w1, &w0, z[27]);
  707|  1.30M|   ws[11] = w0;
  708|  1.30M|   w0 = w1;
  709|  1.30M|   w1 = w2;
  710|  1.30M|   w2 = 0;
  711|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[13], p[15]);
  712|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[14]);
  713|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[13]);
  714|  1.30M|   word3_add(&w2, &w1, &w0, z[28]);
  715|  1.30M|   ws[12] = w0;
  716|  1.30M|   w0 = w1;
  717|  1.30M|   w1 = w2;
  718|  1.30M|   w2 = 0;
  719|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[14], p[15]);
  720|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[14]);
  721|  1.30M|   word3_add(&w2, &w1, &w0, z[29]);
  722|  1.30M|   ws[13] = w0;
  723|  1.30M|   w0 = w1;
  724|  1.30M|   w1 = w2;
  725|  1.30M|   w2 = 0;
  726|  1.30M|   word3_muladd(&w2, &w1, &w0, ws[15], p[15]);
  727|  1.30M|   word3_add(&w2, &w1, &w0, z[30]);
  728|  1.30M|   ws[14] = w0;
  729|  1.30M|   w0 = w1;
  730|  1.30M|   w1 = w2;
  731|  1.30M|   w2 = 0;
  732|  1.30M|   word3_add(&w2, &w1, &w0, z[31]);
  733|  1.30M|   ws[15] = w0;
  734|  1.30M|   bigint_monty_maybe_sub<16>(z, w1, ws, p);
  735|  1.30M|   clear_mem(z + 16, 16);
  736|  1.30M|}
_ZN5Botan20bigint_monty_redc_32EPmPKmmS0_:
 1557|   211k|void bigint_monty_redc_32(word z[64], const word p[32], word p_dash, word ws[]) {
 1558|   211k|   word w2 = 0, w1 = 0, w0 = 0;
 1559|   211k|   w0 = z[0];
 1560|   211k|   ws[0] = w0 * p_dash;
 1561|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[0]);
 1562|   211k|   w0 = w1;
 1563|   211k|   w1 = w2;
 1564|   211k|   w2 = 0;
 1565|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[1]);
 1566|   211k|   word3_add(&w2, &w1, &w0, z[1]);
 1567|   211k|   ws[1] = w0 * p_dash;
 1568|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[0]);
 1569|   211k|   w0 = w1;
 1570|   211k|   w1 = w2;
 1571|   211k|   w2 = 0;
 1572|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[2]);
 1573|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[1]);
 1574|   211k|   word3_add(&w2, &w1, &w0, z[2]);
 1575|   211k|   ws[2] = w0 * p_dash;
 1576|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[0]);
 1577|   211k|   w0 = w1;
 1578|   211k|   w1 = w2;
 1579|   211k|   w2 = 0;
 1580|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[3]);
 1581|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[2]);
 1582|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[1]);
 1583|   211k|   word3_add(&w2, &w1, &w0, z[3]);
 1584|   211k|   ws[3] = w0 * p_dash;
 1585|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[0]);
 1586|   211k|   w0 = w1;
 1587|   211k|   w1 = w2;
 1588|   211k|   w2 = 0;
 1589|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[4]);
 1590|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[3]);
 1591|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[2]);
 1592|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[1]);
 1593|   211k|   word3_add(&w2, &w1, &w0, z[4]);
 1594|   211k|   ws[4] = w0 * p_dash;
 1595|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[0]);
 1596|   211k|   w0 = w1;
 1597|   211k|   w1 = w2;
 1598|   211k|   w2 = 0;
 1599|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[5]);
 1600|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[4]);
 1601|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[3]);
 1602|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[2]);
 1603|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[1]);
 1604|   211k|   word3_add(&w2, &w1, &w0, z[5]);
 1605|   211k|   ws[5] = w0 * p_dash;
 1606|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[0]);
 1607|   211k|   w0 = w1;
 1608|   211k|   w1 = w2;
 1609|   211k|   w2 = 0;
 1610|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[6]);
 1611|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[5]);
 1612|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[4]);
 1613|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[3]);
 1614|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[2]);
 1615|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[1]);
 1616|   211k|   word3_add(&w2, &w1, &w0, z[6]);
 1617|   211k|   ws[6] = w0 * p_dash;
 1618|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[0]);
 1619|   211k|   w0 = w1;
 1620|   211k|   w1 = w2;
 1621|   211k|   w2 = 0;
 1622|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[7]);
 1623|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[6]);
 1624|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[5]);
 1625|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[4]);
 1626|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[3]);
 1627|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[2]);
 1628|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[1]);
 1629|   211k|   word3_add(&w2, &w1, &w0, z[7]);
 1630|   211k|   ws[7] = w0 * p_dash;
 1631|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[0]);
 1632|   211k|   w0 = w1;
 1633|   211k|   w1 = w2;
 1634|   211k|   w2 = 0;
 1635|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[8]);
 1636|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[7]);
 1637|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[6]);
 1638|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[5]);
 1639|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[4]);
 1640|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[3]);
 1641|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[2]);
 1642|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[1]);
 1643|   211k|   word3_add(&w2, &w1, &w0, z[8]);
 1644|   211k|   ws[8] = w0 * p_dash;
 1645|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[0]);
 1646|   211k|   w0 = w1;
 1647|   211k|   w1 = w2;
 1648|   211k|   w2 = 0;
 1649|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[9]);
 1650|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[8]);
 1651|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[7]);
 1652|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[6]);
 1653|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[5]);
 1654|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[4]);
 1655|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[3]);
 1656|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[2]);
 1657|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[1]);
 1658|   211k|   word3_add(&w2, &w1, &w0, z[9]);
 1659|   211k|   ws[9] = w0 * p_dash;
 1660|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[0]);
 1661|   211k|   w0 = w1;
 1662|   211k|   w1 = w2;
 1663|   211k|   w2 = 0;
 1664|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[10]);
 1665|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[9]);
 1666|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[8]);
 1667|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[7]);
 1668|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[6]);
 1669|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[5]);
 1670|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[4]);
 1671|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[3]);
 1672|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[2]);
 1673|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[1]);
 1674|   211k|   word3_add(&w2, &w1, &w0, z[10]);
 1675|   211k|   ws[10] = w0 * p_dash;
 1676|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[0]);
 1677|   211k|   w0 = w1;
 1678|   211k|   w1 = w2;
 1679|   211k|   w2 = 0;
 1680|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[11]);
 1681|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[10]);
 1682|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[9]);
 1683|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[8]);
 1684|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[7]);
 1685|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[6]);
 1686|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[5]);
 1687|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[4]);
 1688|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[3]);
 1689|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[2]);
 1690|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[1]);
 1691|   211k|   word3_add(&w2, &w1, &w0, z[11]);
 1692|   211k|   ws[11] = w0 * p_dash;
 1693|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[0]);
 1694|   211k|   w0 = w1;
 1695|   211k|   w1 = w2;
 1696|   211k|   w2 = 0;
 1697|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[12]);
 1698|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[11]);
 1699|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[10]);
 1700|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[9]);
 1701|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[8]);
 1702|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[7]);
 1703|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[6]);
 1704|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[5]);
 1705|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[4]);
 1706|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[3]);
 1707|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[2]);
 1708|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[1]);
 1709|   211k|   word3_add(&w2, &w1, &w0, z[12]);
 1710|   211k|   ws[12] = w0 * p_dash;
 1711|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[0]);
 1712|   211k|   w0 = w1;
 1713|   211k|   w1 = w2;
 1714|   211k|   w2 = 0;
 1715|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[13]);
 1716|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[12]);
 1717|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[11]);
 1718|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[10]);
 1719|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[9]);
 1720|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[8]);
 1721|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[7]);
 1722|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[6]);
 1723|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[5]);
 1724|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[4]);
 1725|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[3]);
 1726|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[2]);
 1727|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[1]);
 1728|   211k|   word3_add(&w2, &w1, &w0, z[13]);
 1729|   211k|   ws[13] = w0 * p_dash;
 1730|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[0]);
 1731|   211k|   w0 = w1;
 1732|   211k|   w1 = w2;
 1733|   211k|   w2 = 0;
 1734|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[14]);
 1735|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[13]);
 1736|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[12]);
 1737|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[11]);
 1738|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[10]);
 1739|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[9]);
 1740|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[8]);
 1741|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[7]);
 1742|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[6]);
 1743|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[5]);
 1744|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[4]);
 1745|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[3]);
 1746|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[2]);
 1747|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[1]);
 1748|   211k|   word3_add(&w2, &w1, &w0, z[14]);
 1749|   211k|   ws[14] = w0 * p_dash;
 1750|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[0]);
 1751|   211k|   w0 = w1;
 1752|   211k|   w1 = w2;
 1753|   211k|   w2 = 0;
 1754|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[15]);
 1755|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[14]);
 1756|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[13]);
 1757|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[12]);
 1758|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[11]);
 1759|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[10]);
 1760|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[9]);
 1761|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[8]);
 1762|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[7]);
 1763|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[6]);
 1764|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[5]);
 1765|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[4]);
 1766|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[3]);
 1767|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[2]);
 1768|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[1]);
 1769|   211k|   word3_add(&w2, &w1, &w0, z[15]);
 1770|   211k|   ws[15] = w0 * p_dash;
 1771|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[0]);
 1772|   211k|   w0 = w1;
 1773|   211k|   w1 = w2;
 1774|   211k|   w2 = 0;
 1775|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[16]);
 1776|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[15]);
 1777|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[14]);
 1778|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[13]);
 1779|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[12]);
 1780|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[11]);
 1781|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[10]);
 1782|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[9]);
 1783|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[8]);
 1784|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[7]);
 1785|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[6]);
 1786|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[5]);
 1787|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[4]);
 1788|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[3]);
 1789|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[2]);
 1790|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[1]);
 1791|   211k|   word3_add(&w2, &w1, &w0, z[16]);
 1792|   211k|   ws[16] = w0 * p_dash;
 1793|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[0]);
 1794|   211k|   w0 = w1;
 1795|   211k|   w1 = w2;
 1796|   211k|   w2 = 0;
 1797|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[17]);
 1798|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[16]);
 1799|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[15]);
 1800|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[14]);
 1801|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[13]);
 1802|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[12]);
 1803|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[11]);
 1804|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[10]);
 1805|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[9]);
 1806|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[8]);
 1807|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[7]);
 1808|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[6]);
 1809|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[5]);
 1810|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[4]);
 1811|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[3]);
 1812|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[2]);
 1813|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[1]);
 1814|   211k|   word3_add(&w2, &w1, &w0, z[17]);
 1815|   211k|   ws[17] = w0 * p_dash;
 1816|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[0]);
 1817|   211k|   w0 = w1;
 1818|   211k|   w1 = w2;
 1819|   211k|   w2 = 0;
 1820|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[18]);
 1821|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[17]);
 1822|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[16]);
 1823|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[15]);
 1824|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[14]);
 1825|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[13]);
 1826|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[12]);
 1827|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[11]);
 1828|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[10]);
 1829|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[9]);
 1830|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[8]);
 1831|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[7]);
 1832|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[6]);
 1833|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[5]);
 1834|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[4]);
 1835|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[3]);
 1836|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[2]);
 1837|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[1]);
 1838|   211k|   word3_add(&w2, &w1, &w0, z[18]);
 1839|   211k|   ws[18] = w0 * p_dash;
 1840|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[0]);
 1841|   211k|   w0 = w1;
 1842|   211k|   w1 = w2;
 1843|   211k|   w2 = 0;
 1844|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[19]);
 1845|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[18]);
 1846|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[17]);
 1847|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[16]);
 1848|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[15]);
 1849|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[14]);
 1850|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[13]);
 1851|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[12]);
 1852|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[11]);
 1853|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[10]);
 1854|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[9]);
 1855|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[8]);
 1856|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[7]);
 1857|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[6]);
 1858|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[5]);
 1859|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[4]);
 1860|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[3]);
 1861|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[2]);
 1862|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[1]);
 1863|   211k|   word3_add(&w2, &w1, &w0, z[19]);
 1864|   211k|   ws[19] = w0 * p_dash;
 1865|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[0]);
 1866|   211k|   w0 = w1;
 1867|   211k|   w1 = w2;
 1868|   211k|   w2 = 0;
 1869|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[20]);
 1870|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[19]);
 1871|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[18]);
 1872|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[17]);
 1873|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[16]);
 1874|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[15]);
 1875|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[14]);
 1876|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[13]);
 1877|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[12]);
 1878|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[11]);
 1879|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[10]);
 1880|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[9]);
 1881|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[8]);
 1882|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[7]);
 1883|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[6]);
 1884|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[5]);
 1885|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[4]);
 1886|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[3]);
 1887|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[2]);
 1888|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[1]);
 1889|   211k|   word3_add(&w2, &w1, &w0, z[20]);
 1890|   211k|   ws[20] = w0 * p_dash;
 1891|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[0]);
 1892|   211k|   w0 = w1;
 1893|   211k|   w1 = w2;
 1894|   211k|   w2 = 0;
 1895|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[21]);
 1896|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[20]);
 1897|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[19]);
 1898|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[18]);
 1899|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[17]);
 1900|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[16]);
 1901|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[15]);
 1902|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[14]);
 1903|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[13]);
 1904|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[12]);
 1905|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[11]);
 1906|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[10]);
 1907|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[9]);
 1908|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[8]);
 1909|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[7]);
 1910|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[6]);
 1911|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[5]);
 1912|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[4]);
 1913|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[3]);
 1914|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[2]);
 1915|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[1]);
 1916|   211k|   word3_add(&w2, &w1, &w0, z[21]);
 1917|   211k|   ws[21] = w0 * p_dash;
 1918|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[0]);
 1919|   211k|   w0 = w1;
 1920|   211k|   w1 = w2;
 1921|   211k|   w2 = 0;
 1922|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[22]);
 1923|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[21]);
 1924|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[20]);
 1925|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[19]);
 1926|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[18]);
 1927|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[17]);
 1928|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[16]);
 1929|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[15]);
 1930|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[14]);
 1931|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[13]);
 1932|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[12]);
 1933|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[11]);
 1934|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[10]);
 1935|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[9]);
 1936|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[8]);
 1937|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[7]);
 1938|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[6]);
 1939|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[5]);
 1940|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[4]);
 1941|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[3]);
 1942|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[2]);
 1943|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[1]);
 1944|   211k|   word3_add(&w2, &w1, &w0, z[22]);
 1945|   211k|   ws[22] = w0 * p_dash;
 1946|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[0]);
 1947|   211k|   w0 = w1;
 1948|   211k|   w1 = w2;
 1949|   211k|   w2 = 0;
 1950|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[23]);
 1951|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[22]);
 1952|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[21]);
 1953|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[20]);
 1954|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[19]);
 1955|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[18]);
 1956|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[17]);
 1957|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[16]);
 1958|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[15]);
 1959|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[14]);
 1960|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[13]);
 1961|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[12]);
 1962|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[11]);
 1963|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[10]);
 1964|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[9]);
 1965|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[8]);
 1966|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[7]);
 1967|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[6]);
 1968|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[5]);
 1969|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[4]);
 1970|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[3]);
 1971|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[2]);
 1972|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[1]);
 1973|   211k|   word3_add(&w2, &w1, &w0, z[23]);
 1974|   211k|   ws[23] = w0 * p_dash;
 1975|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[0]);
 1976|   211k|   w0 = w1;
 1977|   211k|   w1 = w2;
 1978|   211k|   w2 = 0;
 1979|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[24]);
 1980|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[23]);
 1981|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[22]);
 1982|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[21]);
 1983|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[20]);
 1984|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[19]);
 1985|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[18]);
 1986|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[17]);
 1987|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[16]);
 1988|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[15]);
 1989|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[14]);
 1990|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[13]);
 1991|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[12]);
 1992|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[11]);
 1993|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[10]);
 1994|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[9]);
 1995|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[8]);
 1996|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[7]);
 1997|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[6]);
 1998|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[5]);
 1999|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[4]);
 2000|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[3]);
 2001|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[2]);
 2002|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[1]);
 2003|   211k|   word3_add(&w2, &w1, &w0, z[24]);
 2004|   211k|   ws[24] = w0 * p_dash;
 2005|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[0]);
 2006|   211k|   w0 = w1;
 2007|   211k|   w1 = w2;
 2008|   211k|   w2 = 0;
 2009|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[25]);
 2010|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[24]);
 2011|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[23]);
 2012|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[22]);
 2013|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[21]);
 2014|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[20]);
 2015|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[19]);
 2016|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[18]);
 2017|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[17]);
 2018|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[16]);
 2019|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[15]);
 2020|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[14]);
 2021|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[13]);
 2022|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[12]);
 2023|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[11]);
 2024|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[10]);
 2025|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[9]);
 2026|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[8]);
 2027|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[7]);
 2028|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[6]);
 2029|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[5]);
 2030|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[4]);
 2031|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[3]);
 2032|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[2]);
 2033|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[1]);
 2034|   211k|   word3_add(&w2, &w1, &w0, z[25]);
 2035|   211k|   ws[25] = w0 * p_dash;
 2036|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[0]);
 2037|   211k|   w0 = w1;
 2038|   211k|   w1 = w2;
 2039|   211k|   w2 = 0;
 2040|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[26]);
 2041|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[25]);
 2042|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[24]);
 2043|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[23]);
 2044|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[22]);
 2045|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[21]);
 2046|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[20]);
 2047|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[19]);
 2048|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[18]);
 2049|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[17]);
 2050|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[16]);
 2051|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[15]);
 2052|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[14]);
 2053|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[13]);
 2054|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[12]);
 2055|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[11]);
 2056|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[10]);
 2057|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[9]);
 2058|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[8]);
 2059|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[7]);
 2060|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[6]);
 2061|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[5]);
 2062|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[4]);
 2063|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[3]);
 2064|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[2]);
 2065|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[1]);
 2066|   211k|   word3_add(&w2, &w1, &w0, z[26]);
 2067|   211k|   ws[26] = w0 * p_dash;
 2068|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[0]);
 2069|   211k|   w0 = w1;
 2070|   211k|   w1 = w2;
 2071|   211k|   w2 = 0;
 2072|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[27]);
 2073|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[26]);
 2074|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[25]);
 2075|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[24]);
 2076|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[23]);
 2077|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[22]);
 2078|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[21]);
 2079|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[20]);
 2080|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[19]);
 2081|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[18]);
 2082|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[17]);
 2083|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[16]);
 2084|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[15]);
 2085|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[14]);
 2086|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[13]);
 2087|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[12]);
 2088|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[11]);
 2089|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[10]);
 2090|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[9]);
 2091|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[8]);
 2092|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[7]);
 2093|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[6]);
 2094|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[5]);
 2095|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[4]);
 2096|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[3]);
 2097|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[2]);
 2098|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[1]);
 2099|   211k|   word3_add(&w2, &w1, &w0, z[27]);
 2100|   211k|   ws[27] = w0 * p_dash;
 2101|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[0]);
 2102|   211k|   w0 = w1;
 2103|   211k|   w1 = w2;
 2104|   211k|   w2 = 0;
 2105|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[28]);
 2106|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[27]);
 2107|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[26]);
 2108|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[25]);
 2109|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[24]);
 2110|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[23]);
 2111|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[22]);
 2112|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[21]);
 2113|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[20]);
 2114|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[19]);
 2115|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[18]);
 2116|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[17]);
 2117|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[16]);
 2118|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[15]);
 2119|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[14]);
 2120|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[13]);
 2121|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[12]);
 2122|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[11]);
 2123|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[10]);
 2124|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[9]);
 2125|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[8]);
 2126|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[7]);
 2127|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[6]);
 2128|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[5]);
 2129|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[4]);
 2130|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[3]);
 2131|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[2]);
 2132|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[1]);
 2133|   211k|   word3_add(&w2, &w1, &w0, z[28]);
 2134|   211k|   ws[28] = w0 * p_dash;
 2135|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[0]);
 2136|   211k|   w0 = w1;
 2137|   211k|   w1 = w2;
 2138|   211k|   w2 = 0;
 2139|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[29]);
 2140|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[28]);
 2141|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[27]);
 2142|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[26]);
 2143|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[25]);
 2144|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[24]);
 2145|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[23]);
 2146|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[22]);
 2147|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[21]);
 2148|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[20]);
 2149|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[19]);
 2150|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[18]);
 2151|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[17]);
 2152|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[16]);
 2153|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[15]);
 2154|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[14]);
 2155|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[13]);
 2156|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[12]);
 2157|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[11]);
 2158|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[10]);
 2159|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[9]);
 2160|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[8]);
 2161|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[7]);
 2162|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[6]);
 2163|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[5]);
 2164|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[4]);
 2165|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[3]);
 2166|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[2]);
 2167|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[1]);
 2168|   211k|   word3_add(&w2, &w1, &w0, z[29]);
 2169|   211k|   ws[29] = w0 * p_dash;
 2170|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[0]);
 2171|   211k|   w0 = w1;
 2172|   211k|   w1 = w2;
 2173|   211k|   w2 = 0;
 2174|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[30]);
 2175|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[29]);
 2176|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[28]);
 2177|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[27]);
 2178|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[26]);
 2179|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[25]);
 2180|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[24]);
 2181|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[23]);
 2182|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[22]);
 2183|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[21]);
 2184|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[20]);
 2185|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[19]);
 2186|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[18]);
 2187|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[17]);
 2188|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[16]);
 2189|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[15]);
 2190|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[14]);
 2191|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[13]);
 2192|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[12]);
 2193|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[11]);
 2194|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[10]);
 2195|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[9]);
 2196|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[8]);
 2197|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[7]);
 2198|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[6]);
 2199|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[5]);
 2200|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[4]);
 2201|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[3]);
 2202|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[2]);
 2203|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[1]);
 2204|   211k|   word3_add(&w2, &w1, &w0, z[30]);
 2205|   211k|   ws[30] = w0 * p_dash;
 2206|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[0]);
 2207|   211k|   w0 = w1;
 2208|   211k|   w1 = w2;
 2209|   211k|   w2 = 0;
 2210|   211k|   word3_muladd(&w2, &w1, &w0, ws[0], p[31]);
 2211|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[30]);
 2212|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[29]);
 2213|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[28]);
 2214|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[27]);
 2215|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[26]);
 2216|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[25]);
 2217|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[24]);
 2218|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[23]);
 2219|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[22]);
 2220|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[21]);
 2221|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[20]);
 2222|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[19]);
 2223|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[18]);
 2224|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[17]);
 2225|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[16]);
 2226|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[15]);
 2227|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[14]);
 2228|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[13]);
 2229|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[12]);
 2230|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[11]);
 2231|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[10]);
 2232|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[9]);
 2233|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[8]);
 2234|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[7]);
 2235|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[6]);
 2236|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[5]);
 2237|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[4]);
 2238|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[3]);
 2239|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[2]);
 2240|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[1]);
 2241|   211k|   word3_add(&w2, &w1, &w0, z[31]);
 2242|   211k|   ws[31] = w0 * p_dash;
 2243|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[0]);
 2244|   211k|   w0 = w1;
 2245|   211k|   w1 = w2;
 2246|   211k|   w2 = 0;
 2247|   211k|   word3_muladd(&w2, &w1, &w0, ws[1], p[31]);
 2248|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[30]);
 2249|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[29]);
 2250|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[28]);
 2251|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[27]);
 2252|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[26]);
 2253|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[25]);
 2254|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[24]);
 2255|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[23]);
 2256|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[22]);
 2257|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[21]);
 2258|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[20]);
 2259|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[19]);
 2260|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[18]);
 2261|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[17]);
 2262|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[16]);
 2263|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[15]);
 2264|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[14]);
 2265|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[13]);
 2266|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[12]);
 2267|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[11]);
 2268|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[10]);
 2269|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[9]);
 2270|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[8]);
 2271|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[7]);
 2272|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[6]);
 2273|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[5]);
 2274|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[4]);
 2275|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[3]);
 2276|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[2]);
 2277|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[1]);
 2278|   211k|   word3_add(&w2, &w1, &w0, z[32]);
 2279|   211k|   ws[0] = w0;
 2280|   211k|   w0 = w1;
 2281|   211k|   w1 = w2;
 2282|   211k|   w2 = 0;
 2283|   211k|   word3_muladd(&w2, &w1, &w0, ws[2], p[31]);
 2284|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[30]);
 2285|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[29]);
 2286|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[28]);
 2287|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[27]);
 2288|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[26]);
 2289|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[25]);
 2290|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[24]);
 2291|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[23]);
 2292|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[22]);
 2293|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[21]);
 2294|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[20]);
 2295|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[19]);
 2296|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[18]);
 2297|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[17]);
 2298|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[16]);
 2299|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[15]);
 2300|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[14]);
 2301|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[13]);
 2302|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[12]);
 2303|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[11]);
 2304|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[10]);
 2305|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[9]);
 2306|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[8]);
 2307|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[7]);
 2308|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[6]);
 2309|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[5]);
 2310|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[4]);
 2311|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[3]);
 2312|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[2]);
 2313|   211k|   word3_add(&w2, &w1, &w0, z[33]);
 2314|   211k|   ws[1] = w0;
 2315|   211k|   w0 = w1;
 2316|   211k|   w1 = w2;
 2317|   211k|   w2 = 0;
 2318|   211k|   word3_muladd(&w2, &w1, &w0, ws[3], p[31]);
 2319|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[30]);
 2320|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[29]);
 2321|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[28]);
 2322|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[27]);
 2323|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[26]);
 2324|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[25]);
 2325|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[24]);
 2326|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[23]);
 2327|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[22]);
 2328|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[21]);
 2329|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[20]);
 2330|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[19]);
 2331|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[18]);
 2332|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[17]);
 2333|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[16]);
 2334|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[15]);
 2335|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[14]);
 2336|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[13]);
 2337|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[12]);
 2338|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[11]);
 2339|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[10]);
 2340|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[9]);
 2341|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[8]);
 2342|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[7]);
 2343|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[6]);
 2344|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[5]);
 2345|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[4]);
 2346|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[3]);
 2347|   211k|   word3_add(&w2, &w1, &w0, z[34]);
 2348|   211k|   ws[2] = w0;
 2349|   211k|   w0 = w1;
 2350|   211k|   w1 = w2;
 2351|   211k|   w2 = 0;
 2352|   211k|   word3_muladd(&w2, &w1, &w0, ws[4], p[31]);
 2353|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[30]);
 2354|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[29]);
 2355|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[28]);
 2356|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[27]);
 2357|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[26]);
 2358|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[25]);
 2359|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[24]);
 2360|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[23]);
 2361|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[22]);
 2362|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[21]);
 2363|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[20]);
 2364|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[19]);
 2365|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[18]);
 2366|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[17]);
 2367|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[16]);
 2368|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[15]);
 2369|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[14]);
 2370|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[13]);
 2371|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[12]);
 2372|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[11]);
 2373|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[10]);
 2374|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[9]);
 2375|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[8]);
 2376|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[7]);
 2377|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[6]);
 2378|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[5]);
 2379|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[4]);
 2380|   211k|   word3_add(&w2, &w1, &w0, z[35]);
 2381|   211k|   ws[3] = w0;
 2382|   211k|   w0 = w1;
 2383|   211k|   w1 = w2;
 2384|   211k|   w2 = 0;
 2385|   211k|   word3_muladd(&w2, &w1, &w0, ws[5], p[31]);
 2386|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[30]);
 2387|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[29]);
 2388|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[28]);
 2389|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[27]);
 2390|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[26]);
 2391|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[25]);
 2392|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[24]);
 2393|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[23]);
 2394|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[22]);
 2395|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[21]);
 2396|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[20]);
 2397|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[19]);
 2398|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[18]);
 2399|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[17]);
 2400|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[16]);
 2401|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[15]);
 2402|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[14]);
 2403|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[13]);
 2404|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[12]);
 2405|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[11]);
 2406|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[10]);
 2407|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[9]);
 2408|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[8]);
 2409|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[7]);
 2410|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[6]);
 2411|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[5]);
 2412|   211k|   word3_add(&w2, &w1, &w0, z[36]);
 2413|   211k|   ws[4] = w0;
 2414|   211k|   w0 = w1;
 2415|   211k|   w1 = w2;
 2416|   211k|   w2 = 0;
 2417|   211k|   word3_muladd(&w2, &w1, &w0, ws[6], p[31]);
 2418|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[30]);
 2419|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[29]);
 2420|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[28]);
 2421|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[27]);
 2422|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[26]);
 2423|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[25]);
 2424|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[24]);
 2425|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[23]);
 2426|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[22]);
 2427|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[21]);
 2428|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[20]);
 2429|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[19]);
 2430|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[18]);
 2431|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[17]);
 2432|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[16]);
 2433|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[15]);
 2434|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[14]);
 2435|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[13]);
 2436|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[12]);
 2437|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[11]);
 2438|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[10]);
 2439|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[9]);
 2440|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[8]);
 2441|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[7]);
 2442|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[6]);
 2443|   211k|   word3_add(&w2, &w1, &w0, z[37]);
 2444|   211k|   ws[5] = w0;
 2445|   211k|   w0 = w1;
 2446|   211k|   w1 = w2;
 2447|   211k|   w2 = 0;
 2448|   211k|   word3_muladd(&w2, &w1, &w0, ws[7], p[31]);
 2449|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[30]);
 2450|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[29]);
 2451|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[28]);
 2452|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[27]);
 2453|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[26]);
 2454|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[25]);
 2455|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[24]);
 2456|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[23]);
 2457|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[22]);
 2458|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[21]);
 2459|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[20]);
 2460|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[19]);
 2461|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[18]);
 2462|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[17]);
 2463|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[16]);
 2464|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[15]);
 2465|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[14]);
 2466|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[13]);
 2467|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[12]);
 2468|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[11]);
 2469|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[10]);
 2470|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[9]);
 2471|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[8]);
 2472|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[7]);
 2473|   211k|   word3_add(&w2, &w1, &w0, z[38]);
 2474|   211k|   ws[6] = w0;
 2475|   211k|   w0 = w1;
 2476|   211k|   w1 = w2;
 2477|   211k|   w2 = 0;
 2478|   211k|   word3_muladd(&w2, &w1, &w0, ws[8], p[31]);
 2479|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[30]);
 2480|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[29]);
 2481|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[28]);
 2482|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[27]);
 2483|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[26]);
 2484|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[25]);
 2485|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[24]);
 2486|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[23]);
 2487|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[22]);
 2488|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[21]);
 2489|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[20]);
 2490|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[19]);
 2491|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[18]);
 2492|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[17]);
 2493|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[16]);
 2494|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[15]);
 2495|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[14]);
 2496|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[13]);
 2497|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[12]);
 2498|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[11]);
 2499|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[10]);
 2500|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[9]);
 2501|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[8]);
 2502|   211k|   word3_add(&w2, &w1, &w0, z[39]);
 2503|   211k|   ws[7] = w0;
 2504|   211k|   w0 = w1;
 2505|   211k|   w1 = w2;
 2506|   211k|   w2 = 0;
 2507|   211k|   word3_muladd(&w2, &w1, &w0, ws[9], p[31]);
 2508|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[30]);
 2509|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[29]);
 2510|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[28]);
 2511|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[27]);
 2512|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[26]);
 2513|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[25]);
 2514|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[24]);
 2515|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[23]);
 2516|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[22]);
 2517|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[21]);
 2518|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[20]);
 2519|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[19]);
 2520|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[18]);
 2521|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[17]);
 2522|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[16]);
 2523|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[15]);
 2524|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[14]);
 2525|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[13]);
 2526|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[12]);
 2527|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[11]);
 2528|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[10]);
 2529|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[9]);
 2530|   211k|   word3_add(&w2, &w1, &w0, z[40]);
 2531|   211k|   ws[8] = w0;
 2532|   211k|   w0 = w1;
 2533|   211k|   w1 = w2;
 2534|   211k|   w2 = 0;
 2535|   211k|   word3_muladd(&w2, &w1, &w0, ws[10], p[31]);
 2536|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[30]);
 2537|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[29]);
 2538|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[28]);
 2539|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[27]);
 2540|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[26]);
 2541|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[25]);
 2542|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[24]);
 2543|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[23]);
 2544|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[22]);
 2545|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[21]);
 2546|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[20]);
 2547|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[19]);
 2548|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[18]);
 2549|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[17]);
 2550|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[16]);
 2551|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[15]);
 2552|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[14]);
 2553|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[13]);
 2554|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[12]);
 2555|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[11]);
 2556|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[10]);
 2557|   211k|   word3_add(&w2, &w1, &w0, z[41]);
 2558|   211k|   ws[9] = w0;
 2559|   211k|   w0 = w1;
 2560|   211k|   w1 = w2;
 2561|   211k|   w2 = 0;
 2562|   211k|   word3_muladd(&w2, &w1, &w0, ws[11], p[31]);
 2563|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[30]);
 2564|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[29]);
 2565|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[28]);
 2566|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[27]);
 2567|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[26]);
 2568|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[25]);
 2569|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[24]);
 2570|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[23]);
 2571|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[22]);
 2572|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[21]);
 2573|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[20]);
 2574|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[19]);
 2575|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[18]);
 2576|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[17]);
 2577|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[16]);
 2578|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[15]);
 2579|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[14]);
 2580|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[13]);
 2581|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[12]);
 2582|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[11]);
 2583|   211k|   word3_add(&w2, &w1, &w0, z[42]);
 2584|   211k|   ws[10] = w0;
 2585|   211k|   w0 = w1;
 2586|   211k|   w1 = w2;
 2587|   211k|   w2 = 0;
 2588|   211k|   word3_muladd(&w2, &w1, &w0, ws[12], p[31]);
 2589|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[30]);
 2590|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[29]);
 2591|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[28]);
 2592|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[27]);
 2593|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[26]);
 2594|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[25]);
 2595|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[24]);
 2596|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[23]);
 2597|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[22]);
 2598|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[21]);
 2599|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[20]);
 2600|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[19]);
 2601|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[18]);
 2602|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[17]);
 2603|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[16]);
 2604|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[15]);
 2605|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[14]);
 2606|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[13]);
 2607|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[12]);
 2608|   211k|   word3_add(&w2, &w1, &w0, z[43]);
 2609|   211k|   ws[11] = w0;
 2610|   211k|   w0 = w1;
 2611|   211k|   w1 = w2;
 2612|   211k|   w2 = 0;
 2613|   211k|   word3_muladd(&w2, &w1, &w0, ws[13], p[31]);
 2614|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[30]);
 2615|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[29]);
 2616|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[28]);
 2617|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[27]);
 2618|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[26]);
 2619|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[25]);
 2620|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[24]);
 2621|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[23]);
 2622|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[22]);
 2623|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[21]);
 2624|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[20]);
 2625|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[19]);
 2626|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[18]);
 2627|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[17]);
 2628|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[16]);
 2629|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[15]);
 2630|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[14]);
 2631|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[13]);
 2632|   211k|   word3_add(&w2, &w1, &w0, z[44]);
 2633|   211k|   ws[12] = w0;
 2634|   211k|   w0 = w1;
 2635|   211k|   w1 = w2;
 2636|   211k|   w2 = 0;
 2637|   211k|   word3_muladd(&w2, &w1, &w0, ws[14], p[31]);
 2638|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[30]);
 2639|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[29]);
 2640|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[28]);
 2641|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[27]);
 2642|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[26]);
 2643|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[25]);
 2644|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[24]);
 2645|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[23]);
 2646|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[22]);
 2647|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[21]);
 2648|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[20]);
 2649|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[19]);
 2650|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[18]);
 2651|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[17]);
 2652|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[16]);
 2653|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[15]);
 2654|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[14]);
 2655|   211k|   word3_add(&w2, &w1, &w0, z[45]);
 2656|   211k|   ws[13] = w0;
 2657|   211k|   w0 = w1;
 2658|   211k|   w1 = w2;
 2659|   211k|   w2 = 0;
 2660|   211k|   word3_muladd(&w2, &w1, &w0, ws[15], p[31]);
 2661|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[30]);
 2662|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[29]);
 2663|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[28]);
 2664|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[27]);
 2665|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[26]);
 2666|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[25]);
 2667|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[24]);
 2668|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[23]);
 2669|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[22]);
 2670|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[21]);
 2671|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[20]);
 2672|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[19]);
 2673|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[18]);
 2674|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[17]);
 2675|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[16]);
 2676|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[15]);
 2677|   211k|   word3_add(&w2, &w1, &w0, z[46]);
 2678|   211k|   ws[14] = w0;
 2679|   211k|   w0 = w1;
 2680|   211k|   w1 = w2;
 2681|   211k|   w2 = 0;
 2682|   211k|   word3_muladd(&w2, &w1, &w0, ws[16], p[31]);
 2683|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[30]);
 2684|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[29]);
 2685|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[28]);
 2686|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[27]);
 2687|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[26]);
 2688|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[25]);
 2689|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[24]);
 2690|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[23]);
 2691|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[22]);
 2692|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[21]);
 2693|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[20]);
 2694|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[19]);
 2695|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[18]);
 2696|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[17]);
 2697|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[16]);
 2698|   211k|   word3_add(&w2, &w1, &w0, z[47]);
 2699|   211k|   ws[15] = w0;
 2700|   211k|   w0 = w1;
 2701|   211k|   w1 = w2;
 2702|   211k|   w2 = 0;
 2703|   211k|   word3_muladd(&w2, &w1, &w0, ws[17], p[31]);
 2704|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[30]);
 2705|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[29]);
 2706|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[28]);
 2707|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[27]);
 2708|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[26]);
 2709|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[25]);
 2710|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[24]);
 2711|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[23]);
 2712|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[22]);
 2713|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[21]);
 2714|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[20]);
 2715|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[19]);
 2716|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[18]);
 2717|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[17]);
 2718|   211k|   word3_add(&w2, &w1, &w0, z[48]);
 2719|   211k|   ws[16] = w0;
 2720|   211k|   w0 = w1;
 2721|   211k|   w1 = w2;
 2722|   211k|   w2 = 0;
 2723|   211k|   word3_muladd(&w2, &w1, &w0, ws[18], p[31]);
 2724|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[30]);
 2725|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[29]);
 2726|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[28]);
 2727|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[27]);
 2728|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[26]);
 2729|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[25]);
 2730|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[24]);
 2731|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[23]);
 2732|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[22]);
 2733|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[21]);
 2734|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[20]);
 2735|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[19]);
 2736|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[18]);
 2737|   211k|   word3_add(&w2, &w1, &w0, z[49]);
 2738|   211k|   ws[17] = w0;
 2739|   211k|   w0 = w1;
 2740|   211k|   w1 = w2;
 2741|   211k|   w2 = 0;
 2742|   211k|   word3_muladd(&w2, &w1, &w0, ws[19], p[31]);
 2743|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[30]);
 2744|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[29]);
 2745|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[28]);
 2746|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[27]);
 2747|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[26]);
 2748|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[25]);
 2749|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[24]);
 2750|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[23]);
 2751|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[22]);
 2752|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[21]);
 2753|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[20]);
 2754|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[19]);
 2755|   211k|   word3_add(&w2, &w1, &w0, z[50]);
 2756|   211k|   ws[18] = w0;
 2757|   211k|   w0 = w1;
 2758|   211k|   w1 = w2;
 2759|   211k|   w2 = 0;
 2760|   211k|   word3_muladd(&w2, &w1, &w0, ws[20], p[31]);
 2761|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[30]);
 2762|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[29]);
 2763|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[28]);
 2764|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[27]);
 2765|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[26]);
 2766|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[25]);
 2767|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[24]);
 2768|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[23]);
 2769|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[22]);
 2770|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[21]);
 2771|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[20]);
 2772|   211k|   word3_add(&w2, &w1, &w0, z[51]);
 2773|   211k|   ws[19] = w0;
 2774|   211k|   w0 = w1;
 2775|   211k|   w1 = w2;
 2776|   211k|   w2 = 0;
 2777|   211k|   word3_muladd(&w2, &w1, &w0, ws[21], p[31]);
 2778|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[30]);
 2779|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[29]);
 2780|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[28]);
 2781|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[27]);
 2782|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[26]);
 2783|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[25]);
 2784|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[24]);
 2785|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[23]);
 2786|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[22]);
 2787|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[21]);
 2788|   211k|   word3_add(&w2, &w1, &w0, z[52]);
 2789|   211k|   ws[20] = w0;
 2790|   211k|   w0 = w1;
 2791|   211k|   w1 = w2;
 2792|   211k|   w2 = 0;
 2793|   211k|   word3_muladd(&w2, &w1, &w0, ws[22], p[31]);
 2794|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[30]);
 2795|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[29]);
 2796|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[28]);
 2797|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[27]);
 2798|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[26]);
 2799|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[25]);
 2800|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[24]);
 2801|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[23]);
 2802|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[22]);
 2803|   211k|   word3_add(&w2, &w1, &w0, z[53]);
 2804|   211k|   ws[21] = w0;
 2805|   211k|   w0 = w1;
 2806|   211k|   w1 = w2;
 2807|   211k|   w2 = 0;
 2808|   211k|   word3_muladd(&w2, &w1, &w0, ws[23], p[31]);
 2809|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[30]);
 2810|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[29]);
 2811|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[28]);
 2812|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[27]);
 2813|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[26]);
 2814|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[25]);
 2815|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[24]);
 2816|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[23]);
 2817|   211k|   word3_add(&w2, &w1, &w0, z[54]);
 2818|   211k|   ws[22] = w0;
 2819|   211k|   w0 = w1;
 2820|   211k|   w1 = w2;
 2821|   211k|   w2 = 0;
 2822|   211k|   word3_muladd(&w2, &w1, &w0, ws[24], p[31]);
 2823|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[30]);
 2824|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[29]);
 2825|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[28]);
 2826|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[27]);
 2827|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[26]);
 2828|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[25]);
 2829|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[24]);
 2830|   211k|   word3_add(&w2, &w1, &w0, z[55]);
 2831|   211k|   ws[23] = w0;
 2832|   211k|   w0 = w1;
 2833|   211k|   w1 = w2;
 2834|   211k|   w2 = 0;
 2835|   211k|   word3_muladd(&w2, &w1, &w0, ws[25], p[31]);
 2836|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[30]);
 2837|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[29]);
 2838|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[28]);
 2839|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[27]);
 2840|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[26]);
 2841|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[25]);
 2842|   211k|   word3_add(&w2, &w1, &w0, z[56]);
 2843|   211k|   ws[24] = w0;
 2844|   211k|   w0 = w1;
 2845|   211k|   w1 = w2;
 2846|   211k|   w2 = 0;
 2847|   211k|   word3_muladd(&w2, &w1, &w0, ws[26], p[31]);
 2848|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[30]);
 2849|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[29]);
 2850|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[28]);
 2851|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[27]);
 2852|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[26]);
 2853|   211k|   word3_add(&w2, &w1, &w0, z[57]);
 2854|   211k|   ws[25] = w0;
 2855|   211k|   w0 = w1;
 2856|   211k|   w1 = w2;
 2857|   211k|   w2 = 0;
 2858|   211k|   word3_muladd(&w2, &w1, &w0, ws[27], p[31]);
 2859|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[30]);
 2860|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[29]);
 2861|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[28]);
 2862|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[27]);
 2863|   211k|   word3_add(&w2, &w1, &w0, z[58]);
 2864|   211k|   ws[26] = w0;
 2865|   211k|   w0 = w1;
 2866|   211k|   w1 = w2;
 2867|   211k|   w2 = 0;
 2868|   211k|   word3_muladd(&w2, &w1, &w0, ws[28], p[31]);
 2869|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[30]);
 2870|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[29]);
 2871|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[28]);
 2872|   211k|   word3_add(&w2, &w1, &w0, z[59]);
 2873|   211k|   ws[27] = w0;
 2874|   211k|   w0 = w1;
 2875|   211k|   w1 = w2;
 2876|   211k|   w2 = 0;
 2877|   211k|   word3_muladd(&w2, &w1, &w0, ws[29], p[31]);
 2878|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[30]);
 2879|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[29]);
 2880|   211k|   word3_add(&w2, &w1, &w0, z[60]);
 2881|   211k|   ws[28] = w0;
 2882|   211k|   w0 = w1;
 2883|   211k|   w1 = w2;
 2884|   211k|   w2 = 0;
 2885|   211k|   word3_muladd(&w2, &w1, &w0, ws[30], p[31]);
 2886|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[30]);
 2887|   211k|   word3_add(&w2, &w1, &w0, z[61]);
 2888|   211k|   ws[29] = w0;
 2889|   211k|   w0 = w1;
 2890|   211k|   w1 = w2;
 2891|   211k|   w2 = 0;
 2892|   211k|   word3_muladd(&w2, &w1, &w0, ws[31], p[31]);
 2893|   211k|   word3_add(&w2, &w1, &w0, z[62]);
 2894|   211k|   ws[30] = w0;
 2895|   211k|   w0 = w1;
 2896|   211k|   w1 = w2;
 2897|   211k|   w2 = 0;
 2898|   211k|   word3_add(&w2, &w1, &w0, z[63]);
 2899|   211k|   ws[31] = w0;
 2900|   211k|   bigint_monty_maybe_sub<32>(z, w1, ws, p);
 2901|   211k|   clear_mem(z + 32, 32);
 2902|   211k|}

_ZN5Botan11inverse_modERKNS_6BigIntES2_:
  178|  55.0k|BigInt inverse_mod(const BigInt& n, const BigInt& mod) {
  179|  55.0k|   if(mod.is_zero()) {
  ------------------
  |  Branch (179:7): [True: 0, False: 55.0k]
  ------------------
  180|      0|      throw Invalid_Argument("inverse_mod modulus cannot be zero");
  181|      0|   }
  182|  55.0k|   if(mod.is_negative() || n.is_negative()) {
  ------------------
  |  Branch (182:7): [True: 0, False: 55.0k]
  |  Branch (182:28): [True: 0, False: 55.0k]
  ------------------
  183|      0|      throw Invalid_Argument("inverse_mod: arguments must be non-negative");
  184|      0|   }
  185|  55.0k|   if(n.is_zero() || (n.is_even() && mod.is_even())) {
  ------------------
  |  Branch (185:7): [True: 0, False: 55.0k]
  |  Branch (185:23): [True: 29.2k, False: 25.8k]
  |  Branch (185:38): [True: 65, False: 29.1k]
  ------------------
  186|     65|      return BigInt::zero();
  187|     65|   }
  188|       |
  189|  55.0k|   if(mod.is_odd()) {
  ------------------
  |  Branch (189:7): [True: 54.5k, False: 437]
  ------------------
  190|       |      /*
  191|       |      Fastpath for common case. This leaks if n is greater than mod or
  192|       |      not, but we don't guarantee const time behavior in that case.
  193|       |      */
  194|  54.5k|      if(n < mod) {
  ------------------
  |  Branch (194:10): [True: 54.5k, False: 0]
  ------------------
  195|  54.5k|         return inverse_mod_odd_modulus(n, mod);
  196|  54.5k|      } else {
  197|      0|         return inverse_mod_odd_modulus(ct_modulo(n, mod), mod);
  198|      0|      }
  199|  54.5k|   }
  200|       |
  201|       |   // If n is even and mod is even we already returned 0
  202|       |   // If n is even and mod is odd we jumped directly to odd-modulus algo
  203|    437|   BOTAN_DEBUG_ASSERT(n.is_odd());
  ------------------
  |  |   99|    437|      do {                          \
  |  |  100|    437|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 437]
  |  |  ------------------
  ------------------
  204|       |
  205|    437|   const size_t mod_lz = low_zero_bits(mod);
  206|    437|   BOTAN_ASSERT_NOMSG(mod_lz > 0);
  ------------------
  |  |   60|    437|   do {                                                                     \
  |  |   61|    437|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 437]
  |  |  ------------------
  |  |   62|    437|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|    437|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 437]
  |  |  ------------------
  ------------------
  207|    437|   const size_t mod_bits = mod.bits();
  208|    437|   BOTAN_ASSERT_NOMSG(mod_bits > mod_lz);
  ------------------
  |  |   60|    437|   do {                                                                     \
  |  |   61|    437|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 437]
  |  |  ------------------
  |  |   62|    437|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|    437|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 437]
  |  |  ------------------
  ------------------
  209|       |
  210|    437|   if(mod_lz == mod_bits - 1) {
  ------------------
  |  Branch (210:7): [True: 0, False: 437]
  ------------------
  211|       |      // In this case we are performing an inversion modulo 2^k
  212|      0|      return inverse_mod_pow2(n, mod_lz);
  213|      0|   }
  214|       |
  215|    437|   if(mod_lz == 1) {
  ------------------
  |  Branch (215:7): [True: 95, False: 342]
  ------------------
  216|       |      /*
  217|       |      Inversion modulo 2*o is an easier special case of CRT
  218|       |
  219|       |      This is exactly the main CRT flow below but taking advantage of
  220|       |      the fact that any odd number ^-1 modulo 2 is 1. As a result both
  221|       |      inv_2k and c can be taken to be 1, m2k is 2, and h is always
  222|       |      either 0 or 1, and its value depends only on the low bit of inv_o.
  223|       |
  224|       |      This is worth special casing because we generate RSA primes such
  225|       |      that phi(n) is of this form. However this only works for keys
  226|       |      that we generated in this way; pre-existing keys will typically
  227|       |      fall back to the general algorithm below.
  228|       |      */
  229|       |
  230|     95|      const BigInt o = mod >> 1;
  231|     95|      const BigInt n_redc = ct_modulo(n, o);
  232|     95|      const BigInt inv_o = inverse_mod_odd_modulus(n_redc, o);
  233|       |
  234|       |      // No modular inverse in this case:
  235|     95|      if(inv_o == 0) {
  ------------------
  |  Branch (235:10): [True: 18, False: 77]
  ------------------
  236|     18|         return BigInt::zero();
  237|     18|      }
  238|       |
  239|     77|      BigInt h = inv_o;
  240|     77|      h.ct_cond_add(!inv_o.get_bit(0), o);
  241|     77|      return h;
  242|     95|   }
  243|       |
  244|       |   /*
  245|       |   * In this case we are performing an inversion modulo 2^k*o for
  246|       |   * some k >= 2 and some odd (not necessarily prime) integer.
  247|       |   * Compute the inversions modulo 2^k and modulo o, then combine them
  248|       |   * using CRT, which is possible because 2^k and o are relatively prime.
  249|       |   */
  250|       |
  251|    342|   const BigInt o = mod >> mod_lz;
  252|    342|   const BigInt n_redc = ct_modulo(n, o);
  253|    342|   const BigInt inv_o = inverse_mod_odd_modulus(n_redc, o);
  254|    342|   const BigInt inv_2k = inverse_mod_pow2(n, mod_lz);
  255|       |
  256|       |   // No modular inverse in this case:
  257|    342|   if(inv_o == 0 || inv_2k == 0) {
  ------------------
  |  Branch (257:7): [True: 68, False: 274]
  |  Branch (257:21): [True: 0, False: 274]
  ------------------
  258|     68|      return BigInt::zero();
  259|     68|   }
  260|       |
  261|    274|   const BigInt m2k = BigInt::power_of_2(mod_lz);
  262|       |   // Compute the CRT parameter
  263|    274|   const BigInt c = inverse_mod_pow2(o, mod_lz);
  264|       |
  265|       |   // Compute h = c*(inv_2k-inv_o) mod 2^k
  266|    274|   BigInt h = c * (inv_2k - inv_o);
  267|    274|   const bool h_neg = h.is_negative();
  268|    274|   h.set_sign(BigInt::Positive);
  269|    274|   h.mask_bits(mod_lz);
  270|    274|   const bool h_nonzero = h.is_nonzero();
  271|    274|   h.ct_cond_assign(h_nonzero && h_neg, m2k - h);
  ------------------
  |  Branch (271:21): [True: 223, False: 51]
  |  Branch (271:34): [True: 223, False: 0]
  ------------------
  272|       |
  273|       |   // Return result inv_o + h * o
  274|    274|   h *= o;
  275|    274|   h += inv_o;
  276|    274|   return h;
  277|    342|}
mod_inv.cpp:_ZN5Botan12_GLOBAL__N_123inverse_mod_odd_modulusERKNS_6BigIntES3_:
   18|  55.0k|BigInt inverse_mod_odd_modulus(const BigInt& n, const BigInt& mod) {
   19|       |   // Caller should assure these preconditions:
   20|  55.0k|   BOTAN_DEBUG_ASSERT(n.is_positive());
  ------------------
  |  |   99|  55.0k|      do {                          \
  |  |  100|  55.0k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 55.0k]
  |  |  ------------------
  ------------------
   21|  55.0k|   BOTAN_DEBUG_ASSERT(mod.is_positive());
  ------------------
  |  |   99|  55.0k|      do {                          \
  |  |  100|  55.0k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 55.0k]
  |  |  ------------------
  ------------------
   22|  55.0k|   BOTAN_DEBUG_ASSERT(n < mod);
  ------------------
  |  |   99|  55.0k|      do {                          \
  |  |  100|  55.0k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 55.0k]
  |  |  ------------------
  ------------------
   23|  55.0k|   BOTAN_DEBUG_ASSERT(mod >= 3 && mod.is_odd());
  ------------------
  |  |   99|  55.0k|      do {                          \
  |  |  100|  55.0k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 55.0k]
  |  |  ------------------
  ------------------
   24|       |
   25|       |   /*
   26|       |   This uses a modular inversion algorithm designed by Niels Möller
   27|       |   and implemented in Nettle. The same algorithm was later also
   28|       |   adapted to GMP in mpn_sec_invert.
   29|       |
   30|       |   It can be easily implemented in a way that does not depend on
   31|       |   secret branches or memory lookups, providing resistance against
   32|       |   some forms of side channel attack.
   33|       |
   34|       |   There is also a description of the algorithm in Appendix 5 of "Fast
   35|       |   Software Polynomial Multiplication on ARM Processors using the NEON Engine"
   36|       |   by Danilo Câmara, Conrado P. L. Gouvêa, Julio López, and Ricardo
   37|       |   Dahab in LNCS 8182
   38|       |      https://inria.hal.science/hal-01506572/document
   39|       |
   40|       |   Thanks to Niels for creating the algorithm, explaining some things
   41|       |   about it, and the reference to the paper.
   42|       |   */
   43|       |
   44|  55.0k|   const size_t mod_words = mod.sig_words();
   45|  55.0k|   BOTAN_ASSERT(mod_words > 0, "Not empty");
  ------------------
  |  |   51|  55.0k|   do {                                                                                 \
  |  |   52|  55.0k|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 55.0k]
  |  |  ------------------
  |  |   53|  55.0k|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  55.0k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 55.0k]
  |  |  ------------------
  ------------------
   46|       |
   47|  55.0k|   secure_vector<word> tmp_mem(5 * mod_words);
   48|       |
   49|  55.0k|   word* v_w = &tmp_mem[0];
   50|  55.0k|   word* u_w = &tmp_mem[1 * mod_words];
   51|  55.0k|   word* b_w = &tmp_mem[2 * mod_words];
   52|  55.0k|   word* a_w = &tmp_mem[3 * mod_words];
   53|  55.0k|   word* mp1o2 = &tmp_mem[4 * mod_words];
   54|       |
   55|  55.0k|   CT::poison(tmp_mem.data(), tmp_mem.size());
   56|       |
   57|  55.0k|   copy_mem(a_w, n.data(), std::min(n.size(), mod_words));
   58|  55.0k|   copy_mem(b_w, mod.data(), std::min(mod.size(), mod_words));
   59|  55.0k|   u_w[0] = 1;
   60|       |   // v_w = 0
   61|       |
   62|       |   // compute (mod + 1) / 2 which [because mod is odd] is equal to
   63|       |   // (mod / 2) + 1
   64|  55.0k|   copy_mem(mp1o2, mod.data(), std::min(mod.size(), mod_words));
   65|  55.0k|   bigint_shr1(mp1o2, mod_words, 1);
   66|  55.0k|   word carry = bigint_add2_nc(mp1o2, mod_words, u_w, 1);
   67|  55.0k|   BOTAN_ASSERT_NOMSG(carry == 0);
  ------------------
  |  |   60|  55.0k|   do {                                                                     \
  |  |   61|  55.0k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 55.0k]
  |  |  ------------------
  |  |   62|  55.0k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  55.0k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 55.0k]
  |  |  ------------------
  ------------------
   68|       |
   69|       |   // Only n.bits() + mod.bits() iterations are required, but avoid leaking the size of n
   70|  55.0k|   const size_t execs = 2 * mod.bits();
   71|       |
   72|  35.3M|   for(size_t i = 0; i != execs; ++i) {
  ------------------
  |  Branch (72:22): [True: 35.2M, False: 55.0k]
  ------------------
   73|  35.2M|      const word odd_a = a_w[0] & 1;
   74|       |
   75|       |      //if(odd_a) a -= b
   76|  35.2M|      word underflow = bigint_cnd_sub(odd_a, a_w, b_w, mod_words);
   77|       |
   78|       |      //if(underflow) { b -= a; a = abs(a); swap(u, v); }
   79|  35.2M|      bigint_cnd_add(underflow, b_w, a_w, mod_words);
   80|  35.2M|      bigint_cnd_abs(underflow, a_w, mod_words);
   81|  35.2M|      bigint_cnd_swap(underflow, u_w, v_w, mod_words);
   82|       |
   83|       |      // a >>= 1
   84|  35.2M|      bigint_shr1(a_w, mod_words, 1);
   85|       |
   86|       |      //if(odd_a) u -= v;
   87|  35.2M|      word borrow = bigint_cnd_sub(odd_a, u_w, v_w, mod_words);
   88|       |
   89|       |      // if(borrow) u += p
   90|  35.2M|      bigint_cnd_add(borrow, u_w, mod.data(), mod_words);
   91|       |
   92|  35.2M|      const word odd_u = u_w[0] & 1;
   93|       |
   94|       |      // u >>= 1
   95|  35.2M|      bigint_shr1(u_w, mod_words, 1);
   96|       |
   97|       |      //if(odd_u) u += mp1o2;
   98|  35.2M|      bigint_cnd_add(odd_u, u_w, mp1o2, mod_words);
   99|  35.2M|   }
  100|       |
  101|  55.0k|   auto a_is_0 = CT::Mask<word>::set();
  102|   336k|   for(size_t i = 0; i != mod_words; ++i) {
  ------------------
  |  Branch (102:22): [True: 281k, False: 55.0k]
  ------------------
  103|   281k|      a_is_0 &= CT::Mask<word>::is_zero(a_w[i]);
  104|   281k|   }
  105|       |
  106|  55.0k|   auto b_is_1 = CT::Mask<word>::is_equal(b_w[0], 1);
  107|   281k|   for(size_t i = 1; i != mod_words; ++i) {
  ------------------
  |  Branch (107:22): [True: 226k, False: 55.0k]
  ------------------
  108|   226k|      b_is_1 &= CT::Mask<word>::is_zero(b_w[i]);
  109|   226k|   }
  110|       |
  111|  55.0k|   BOTAN_ASSERT(a_is_0.as_bool(), "A is zero");
  ------------------
  |  |   51|  55.0k|   do {                                                                                 \
  |  |   52|  55.0k|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 55.0k]
  |  |  ------------------
  |  |   53|  55.0k|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  55.0k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 55.0k]
  |  |  ------------------
  ------------------
  112|       |
  113|       |   // if b != 1 then gcd(n,mod) > 1 and inverse does not exist
  114|       |   // in which case zero out the result to indicate this
  115|  55.0k|   (~b_is_1).if_set_zero_out(v_w, mod_words);
  116|       |
  117|       |   /*
  118|       |   * We've placed the result in the lowest words of the temp buffer.
  119|       |   * So just clear out the other values and then give that buffer to a
  120|       |   * BigInt.
  121|       |   */
  122|  55.0k|   clear_mem(&tmp_mem[mod_words], 4 * mod_words);
  123|       |
  124|  55.0k|   CT::unpoison(tmp_mem.data(), tmp_mem.size());
  125|       |
  126|  55.0k|   BigInt r;
  127|  55.0k|   r.swap_reg(tmp_mem);
  128|  55.0k|   return r;
  129|  55.0k|}
mod_inv.cpp:_ZN5Botan12_GLOBAL__N_116inverse_mod_pow2ERKNS_6BigIntEm:
  131|    616|BigInt inverse_mod_pow2(const BigInt& a1, size_t k) {
  132|       |   /*
  133|       |   * From "A New Algorithm for Inversion mod p^k" by Çetin Kaya Koç
  134|       |   * https://eprint.iacr.org/2017/411.pdf sections 5 and 7.
  135|       |   */
  136|       |
  137|    616|   if(a1.is_even() || k == 0) {
  ------------------
  |  Branch (137:7): [True: 0, False: 616]
  |  Branch (137:23): [True: 0, False: 616]
  ------------------
  138|      0|      return BigInt::zero();
  139|      0|   }
  140|    616|   if(k == 1) {
  ------------------
  |  Branch (140:7): [True: 0, False: 616]
  ------------------
  141|      0|      return BigInt::one();
  142|      0|   }
  143|       |
  144|    616|   BigInt a = a1;
  145|    616|   a.mask_bits(k);
  146|       |
  147|    616|   BigInt b = BigInt::one();
  148|    616|   BigInt X = BigInt::zero();
  149|    616|   BigInt newb;
  150|       |
  151|    616|   const size_t a_words = a.sig_words();
  152|       |
  153|    616|   X.grow_to(round_up(k, BOTAN_MP_WORD_BITS) / BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|    616|#define BOTAN_MP_WORD_BITS 64
  ------------------
                 X.grow_to(round_up(k, BOTAN_MP_WORD_BITS) / BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|    616|#define BOTAN_MP_WORD_BITS 64
  ------------------
  154|    616|   b.grow_to(a_words);
  155|       |
  156|       |   /*
  157|       |   Hide the exact value of k. k is anyway known to word length
  158|       |   granularity because of the length of a, so no point in doing more
  159|       |   than this.
  160|       |   */
  161|    616|   const size_t iter = round_up(k, BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|    616|#define BOTAN_MP_WORD_BITS 64
  ------------------
  162|       |
  163|  40.0k|   for(size_t i = 0; i != iter; ++i) {
  ------------------
  |  Branch (163:22): [True: 39.4k, False: 616]
  ------------------
  164|  39.4k|      const bool b0 = b.get_bit(0);
  165|  39.4k|      X.conditionally_set_bit(i, b0);
  166|  39.4k|      newb = b - a;
  167|  39.4k|      b.ct_cond_assign(b0, newb);
  168|  39.4k|      b >>= 1;
  169|  39.4k|   }
  170|       |
  171|    616|   X.mask_bits(k);
  172|    616|   X.const_time_unpoison();
  173|    616|   return X;
  174|    616|}

_ZN5Botan17Montgomery_ParamsC2ERKNS_6BigIntERKNS_15Modular_ReducerE:
   16|  6.93k|Montgomery_Params::Montgomery_Params(const BigInt& p, const Modular_Reducer& mod_p) {
   17|  6.93k|   if(p.is_even() || p < 3) {
  ------------------
  |  Branch (17:7): [True: 7, False: 6.93k]
  |  Branch (17:22): [True: 0, False: 6.93k]
  ------------------
   18|      7|      throw Invalid_Argument("Montgomery_Params invalid modulus");
   19|      7|   }
   20|       |
   21|  6.93k|   m_p = p;
   22|  6.93k|   m_p_words = m_p.sig_words();
   23|  6.93k|   m_p_dash = monty_inverse(m_p.word_at(0));
   24|       |
   25|  6.93k|   const BigInt r = BigInt::power_of_2(m_p_words * BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|  6.93k|#define BOTAN_MP_WORD_BITS 64
  ------------------
   26|       |
   27|  6.93k|   m_r1 = mod_p.reduce(r);
   28|  6.93k|   m_r2 = mod_p.square(m_r1);
   29|  6.93k|   m_r3 = mod_p.multiply(m_r1, m_r2);
   30|  6.93k|}
_ZN5Botan17Montgomery_ParamsC2ERKNS_6BigIntE:
   32|  20.6k|Montgomery_Params::Montgomery_Params(const BigInt& p) {
   33|  20.6k|   if(p.is_even() || p < 3) {
  ------------------
  |  Branch (33:7): [True: 0, False: 20.6k]
  |  Branch (33:22): [True: 0, False: 20.6k]
  ------------------
   34|      0|      throw Invalid_Argument("Montgomery_Params invalid modulus");
   35|      0|   }
   36|       |
   37|  20.6k|   m_p = p;
   38|  20.6k|   m_p_words = m_p.sig_words();
   39|  20.6k|   m_p_dash = monty_inverse(m_p.word_at(0));
   40|       |
   41|  20.6k|   const BigInt r = BigInt::power_of_2(m_p_words * BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|  20.6k|#define BOTAN_MP_WORD_BITS 64
  ------------------
   42|       |
   43|       |   // It might be faster to use ct_modulo here vs setting up Barrett reduction?
   44|  20.6k|   Modular_Reducer mod_p(p);
   45|       |
   46|  20.6k|   m_r1 = mod_p.reduce(r);
   47|  20.6k|   m_r2 = mod_p.square(m_r1);
   48|  20.6k|   m_r3 = mod_p.multiply(m_r1, m_r2);
   49|  20.6k|}
_ZNK5Botan17Montgomery_Params4redcERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
   56|  22.1k|BigInt Montgomery_Params::redc(const BigInt& x, secure_vector<word>& ws) const {
   57|  22.1k|   const size_t output_size = m_p_words + 1;
   58|       |
   59|  22.1k|   if(ws.size() < output_size) {
  ------------------
  |  Branch (59:7): [True: 22.1k, False: 0]
  ------------------
   60|  22.1k|      ws.resize(output_size);
   61|  22.1k|   }
   62|       |
   63|  22.1k|   BigInt z = x;
   64|  22.1k|   z.grow_to(2 * m_p_words);
   65|       |
   66|  22.1k|   bigint_monty_redc(z.mutable_data(), m_p.data(), m_p_words, m_p_dash, ws.data(), ws.size());
   67|       |
   68|  22.1k|   return z;
   69|  22.1k|}
_ZNK5Botan17Montgomery_Params3mulERKNS_6BigIntES3_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
   71|   205k|BigInt Montgomery_Params::mul(const BigInt& x, const BigInt& y, secure_vector<word>& ws) const {
   72|   205k|   const size_t output_size = 2 * m_p_words + 2;
   73|       |
   74|   205k|   if(ws.size() < output_size) {
  ------------------
  |  Branch (74:7): [True: 138k, False: 66.7k]
  ------------------
   75|   138k|      ws.resize(output_size);
   76|   138k|   }
   77|       |
   78|   205k|   BOTAN_DEBUG_ASSERT(x.sig_words() <= m_p_words);
  ------------------
  |  |   99|   205k|      do {                          \
  |  |  100|   205k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 205k]
  |  |  ------------------
  ------------------
   79|   205k|   BOTAN_DEBUG_ASSERT(y.sig_words() <= m_p_words);
  ------------------
  |  |   99|   205k|      do {                          \
  |  |  100|   205k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 205k]
  |  |  ------------------
  ------------------
   80|       |
   81|   205k|   BigInt z = BigInt::with_capacity(output_size);
   82|   205k|   bigint_mul(z.mutable_data(),
   83|   205k|              z.size(),
   84|   205k|              x.data(),
   85|   205k|              x.size(),
   86|   205k|              std::min(m_p_words, x.size()),
   87|   205k|              y.data(),
   88|   205k|              y.size(),
   89|   205k|              std::min(m_p_words, y.size()),
   90|   205k|              ws.data(),
   91|   205k|              ws.size());
   92|       |
   93|   205k|   bigint_monty_redc(z.mutable_data(), m_p.data(), m_p_words, m_p_dash, ws.data(), ws.size());
   94|       |
   95|   205k|   return z;
   96|   205k|}
_ZNK5Botan17Montgomery_Params6mul_byERNS_6BigIntERKS1_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  154|   653k|void Montgomery_Params::mul_by(BigInt& x, const BigInt& y, secure_vector<word>& ws) const {
  155|   653k|   const size_t output_size = 2 * m_p_words;
  156|       |
  157|   653k|   if(ws.size() < 2 * output_size) {
  ------------------
  |  Branch (157:7): [True: 6.51k, False: 647k]
  ------------------
  158|  6.51k|      ws.resize(2 * output_size);
  159|  6.51k|   }
  160|       |
  161|   653k|   word* z_data = &ws[0];
  162|   653k|   word* ws_data = &ws[output_size];
  163|       |
  164|   653k|   BOTAN_DEBUG_ASSERT(x.sig_words() <= m_p_words);
  ------------------
  |  |   99|   653k|      do {                          \
  |  |  100|   653k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 653k]
  |  |  ------------------
  ------------------
  165|       |
  166|   653k|   bigint_mul(z_data,
  167|   653k|              output_size,
  168|   653k|              x.data(),
  169|   653k|              x.size(),
  170|   653k|              std::min(m_p_words, x.size()),
  171|   653k|              y.data(),
  172|   653k|              y.size(),
  173|   653k|              std::min(m_p_words, y.size()),
  174|   653k|              ws_data,
  175|   653k|              output_size);
  176|       |
  177|   653k|   bigint_monty_redc(z_data, m_p.data(), m_p_words, m_p_dash, ws_data, output_size);
  178|       |
  179|   653k|   if(x.size() < output_size) {
  ------------------
  |  Branch (179:7): [True: 6.51k, False: 647k]
  ------------------
  180|  6.51k|      x.grow_to(output_size);
  181|  6.51k|   }
  182|   653k|   copy_mem(x.mutable_data(), z_data, output_size);
  183|   653k|}
_ZNK5Botan17Montgomery_Params3sqrERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  185|  13.3k|BigInt Montgomery_Params::sqr(const BigInt& x, secure_vector<word>& ws) const {
  186|  13.3k|   const size_t output_size = 2 * m_p_words;
  187|       |
  188|  13.3k|   if(ws.size() < output_size) {
  ------------------
  |  Branch (188:7): [True: 6.67k, False: 6.67k]
  ------------------
  189|  6.67k|      ws.resize(output_size);
  190|  6.67k|   }
  191|       |
  192|  13.3k|   BigInt z = BigInt::with_capacity(output_size);
  193|       |
  194|  13.3k|   BOTAN_DEBUG_ASSERT(x.sig_words() <= m_p_words);
  ------------------
  |  |   99|  13.3k|      do {                          \
  |  |  100|  13.3k|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 13.3k]
  |  |  ------------------
  ------------------
  195|       |
  196|  13.3k|   bigint_sqr(z.mutable_data(), z.size(), x.data(), x.size(), std::min(m_p_words, x.size()), ws.data(), ws.size());
  197|       |
  198|  13.3k|   bigint_monty_redc(z.mutable_data(), m_p.data(), m_p_words, m_p_dash, ws.data(), ws.size());
  199|       |
  200|  13.3k|   return z;
  201|  13.3k|}
_ZNK5Botan17Montgomery_Params11square_thisERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  203|  1.30M|void Montgomery_Params::square_this(BigInt& x, secure_vector<word>& ws) const {
  204|  1.30M|   const size_t output_size = 2 * m_p_words;
  205|       |
  206|  1.30M|   if(ws.size() < 2 * output_size) {
  ------------------
  |  Branch (206:7): [True: 14.7k, False: 1.28M]
  ------------------
  207|  14.7k|      ws.resize(2 * output_size);
  208|  14.7k|   }
  209|       |
  210|  1.30M|   word* z_data = &ws[0];
  211|  1.30M|   word* ws_data = &ws[output_size];
  212|       |
  213|  1.30M|   BOTAN_DEBUG_ASSERT(x.sig_words() <= m_p_words);
  ------------------
  |  |   99|  1.30M|      do {                          \
  |  |  100|  1.30M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 1.30M]
  |  |  ------------------
  ------------------
  214|       |
  215|  1.30M|   bigint_sqr(z_data, output_size, x.data(), x.size(), std::min(m_p_words, x.size()), ws_data, output_size);
  216|       |
  217|  1.30M|   bigint_monty_redc(z_data, m_p.data(), m_p_words, m_p_dash, ws_data, output_size);
  218|       |
  219|  1.30M|   if(x.size() < output_size) {
  ------------------
  |  Branch (219:7): [True: 0, False: 1.30M]
  ------------------
  220|      0|      x.grow_to(output_size);
  221|      0|   }
  222|  1.30M|   copy_mem(x.mutable_data(), z_data, output_size);
  223|  1.30M|}
_ZN5Botan14Montgomery_IntC2ERKNSt3__110shared_ptrIKNS_17Montgomery_ParamsEEERKNS_6BigIntEb:
  228|   247k|      m_params(params) {
  229|   247k|   if(redc_needed == false) {
  ------------------
  |  Branch (229:7): [True: 212k, False: 35.7k]
  ------------------
  230|   212k|      m_v = v;
  231|   212k|   } else {
  232|  35.7k|      BOTAN_ASSERT_NOMSG(m_v < m_params->p());
  ------------------
  |  |   60|  35.7k|   do {                                                                     \
  |  |   61|  35.7k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 35.7k]
  |  |  ------------------
  |  |   62|  35.7k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  35.7k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 35.7k]
  |  |  ------------------
  ------------------
  233|  35.7k|      secure_vector<word> ws;
  234|  35.7k|      m_v = m_params->mul(v, m_params->R2(), ws);
  235|  35.7k|   }
  236|   247k|}
_ZN5Botan14Montgomery_Int8fix_sizeEv:
  264|   140k|void Montgomery_Int::fix_size() {
  265|   140k|   const size_t p_words = m_params->p_words();
  266|       |
  267|   140k|   if(m_v.sig_words() > p_words) {
  ------------------
  |  Branch (267:7): [True: 0, False: 140k]
  ------------------
  268|      0|      throw Internal_Error("Montgomery_Int::fix_size v too large");
  269|      0|   }
  270|       |
  271|   140k|   m_v.grow_to(p_words);
  272|   140k|}
_ZNK5Botan14Montgomery_Int5valueEv:
  296|  22.1k|BigInt Montgomery_Int::value() const {
  297|  22.1k|   secure_vector<word> ws;
  298|  22.1k|   return m_params->redc(m_v, ws);
  299|  22.1k|}
_ZNK5Botan14Montgomery_IntmlERKS0_:
  335|  96.2k|Montgomery_Int Montgomery_Int::operator*(const Montgomery_Int& other) const {
  336|  96.2k|   secure_vector<word> ws;
  337|  96.2k|   return Montgomery_Int(m_params, m_params->mul(m_v, other.m_v, ws), false);
  338|  96.2k|}
_ZNK5Botan14Montgomery_Int3mulERKS0_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  340|  73.4k|Montgomery_Int Montgomery_Int::mul(const Montgomery_Int& other, secure_vector<word>& ws) const {
  341|  73.4k|   return Montgomery_Int(m_params, m_params->mul(m_v, other.m_v, ws), false);
  342|  73.4k|}
_ZN5Botan14Montgomery_Int6mul_byERKS0_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  344|   653k|Montgomery_Int& Montgomery_Int::mul_by(const Montgomery_Int& other, secure_vector<word>& ws) {
  345|   653k|   m_params->mul_by(m_v, other.m_v, ws);
  346|   653k|   return (*this);
  347|   653k|}
_ZN5Botan14Montgomery_Int19square_this_n_timesERNSt3__16vectorImNS_16secure_allocatorImEEEEm:
  364|   105k|Montgomery_Int& Montgomery_Int::square_this_n_times(secure_vector<word>& ws, size_t n) {
  365|   210k|   for(size_t i = 0; i != n; ++i) {
  ------------------
  |  Branch (365:22): [True: 105k, False: 105k]
  ------------------
  366|   105k|      m_params->square_this(m_v, ws);
  367|   105k|   }
  368|   105k|   return (*this);
  369|   105k|}
_ZN5Botan14Montgomery_Int11square_thisERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  371|  1.19M|Montgomery_Int& Montgomery_Int::square_this(secure_vector<word>& ws) {
  372|  1.19M|   m_params->square_this(m_v, ws);
  373|  1.19M|   return (*this);
  374|  1.19M|}
_ZNK5Botan14Montgomery_Int6squareERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  376|  13.3k|Montgomery_Int Montgomery_Int::square(secure_vector<word>& ws) const {
  377|  13.3k|   return Montgomery_Int(m_params, m_params->sqr(m_v, ws), false);
  378|  13.3k|}

_ZN5Botan30Montgomery_Exponentation_StateC2ERKNSt3__110shared_ptrIKNS_17Montgomery_ParamsEEERKNS_6BigIntEmb:
   40|  22.4k|      m_params(params), m_window_bits(window_bits == 0 ? 4 : window_bits) {
  ------------------
  |  Branch (40:39): [True: 0, False: 22.4k]
  ------------------
   41|  22.4k|   BOTAN_ARG_CHECK(g < m_params->p(), "Montgomery base too big");
  ------------------
  |  |   30|  22.4k|   do {                                                          \
  |  |   31|  22.4k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 54, False: 22.3k]
  |  |  ------------------
  |  |   32|  22.4k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  22.4k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 22.4k]
  |  |  ------------------
  ------------------
   42|       |
   43|  22.4k|   if(m_window_bits < 1 || m_window_bits > 12) {  // really even 8 is too large ...
  ------------------
  |  Branch (43:7): [True: 54, False: 22.3k]
  |  Branch (43:28): [True: 0, False: 22.3k]
  ------------------
   44|      0|      throw Invalid_Argument("Invalid window bits for Montgomery exponentiation");
   45|      0|   }
   46|       |
   47|  22.4k|   const size_t window_size = (static_cast<size_t>(1) << m_window_bits);
   48|       |
   49|  22.4k|   m_g.reserve(window_size);
   50|       |
   51|  22.4k|   m_g.push_back(Montgomery_Int(m_params, m_params->R1(), false));
   52|       |
   53|  22.4k|   m_g.push_back(Montgomery_Int(m_params, g));
   54|       |
   55|   118k|   for(size_t i = 2; i != window_size; ++i) {
  ------------------
  |  Branch (55:22): [True: 96.2k, False: 22.4k]
  ------------------
   56|  96.2k|      m_g.push_back(m_g[1] * m_g[i - 1]);
   57|  96.2k|   }
   58|       |
   59|       |   // Resize each element to exactly p words
   60|   163k|   for(size_t i = 0; i != window_size; ++i) {
  ------------------
  |  Branch (60:22): [True: 140k, False: 22.4k]
  ------------------
   61|   140k|      m_g[i].fix_size();
   62|   140k|      if(const_time) {
  ------------------
  |  Branch (62:10): [True: 110k, False: 30.9k]
  ------------------
   63|   110k|         m_g[i].const_time_poison();
   64|   110k|      }
   65|   140k|   }
   66|  22.4k|}
_ZNK5Botan30Montgomery_Exponentation_State22exponentiation_vartimeERKNS_6BigIntE:
  121|  15.4k|BigInt Montgomery_Exponentation_State::exponentiation_vartime(const BigInt& scalar) const {
  122|  15.4k|   const size_t exp_nibbles = (scalar.bits() + m_window_bits - 1) / m_window_bits;
  123|       |
  124|  15.4k|   secure_vector<word> ws;
  125|       |
  126|  15.4k|   if(exp_nibbles == 0) {
  ------------------
  |  Branch (126:7): [True: 0, False: 15.4k]
  ------------------
  127|      0|      return BigInt::one();
  128|      0|   }
  129|       |
  130|  15.4k|   Montgomery_Int x = m_g[scalar.get_substring(m_window_bits * (exp_nibbles - 1), m_window_bits)];
  131|       |
  132|   120k|   for(size_t i = exp_nibbles - 1; i > 0; --i) {
  ------------------
  |  Branch (132:36): [True: 105k, False: 15.4k]
  ------------------
  133|   105k|      x.square_this_n_times(ws, m_window_bits);
  134|       |
  135|   105k|      const uint32_t nibble = scalar.get_substring(m_window_bits * (i - 1), m_window_bits);
  136|   105k|      if(nibble > 0) {
  ------------------
  |  Branch (136:10): [True: 48.8k, False: 56.6k]
  ------------------
  137|  48.8k|         x.mul_by(m_g[nibble], ws);
  138|  48.8k|      }
  139|   105k|   }
  140|       |
  141|  15.4k|   x.const_time_unpoison();
  142|  15.4k|   return x.value();
  143|  15.4k|}
_ZN5Botan16monty_precomputeERKNSt3__110shared_ptrIKNS_17Montgomery_ParamsEEERKNS_6BigIntEmb:
  146|  22.4k|   const std::shared_ptr<const Montgomery_Params>& params, const BigInt& g, size_t window_bits, bool const_time) {
  147|  22.4k|   return std::make_shared<const Montgomery_Exponentation_State>(params, g, window_bits, const_time);
  148|  22.4k|}
_ZN5Botan21monty_execute_vartimeERKNS_30Montgomery_Exponentation_StateERKNS_6BigIntE:
  154|  15.4k|BigInt monty_execute_vartime(const Montgomery_Exponentation_State& precomputed_state, const BigInt& k) {
  155|  15.4k|   return precomputed_state.exponentiation_vartime(k);
  156|  15.4k|}
_ZN5Botan15monty_multi_expERKNSt3__110shared_ptrIKNS_17Montgomery_ParamsEEERKNS_6BigIntES9_S9_S9_:
  162|  6.67k|                       const BigInt& z2) {
  163|  6.67k|   if(z1.is_negative() || z2.is_negative()) {
  ------------------
  |  Branch (163:7): [True: 0, False: 6.67k]
  |  Branch (163:27): [True: 0, False: 6.67k]
  ------------------
  164|      0|      throw Invalid_Argument("multi_exponentiate exponents must be positive");
  165|      0|   }
  166|       |
  167|  6.67k|   const size_t z_bits = round_up(std::max(z1.bits(), z2.bits()), 2);
  168|       |
  169|  6.67k|   secure_vector<word> ws;
  170|       |
  171|  6.67k|   const Montgomery_Int one(params_p, params_p->R1(), false);
  172|       |   //const Montgomery_Int one(params_p, 1);
  173|       |
  174|  6.67k|   const Montgomery_Int x1(params_p, x_bn);
  175|  6.67k|   const Montgomery_Int x2 = x1.square(ws);
  176|  6.67k|   const Montgomery_Int x3 = x2.mul(x1, ws);
  177|       |
  178|  6.67k|   const Montgomery_Int y1(params_p, y_bn);
  179|  6.67k|   const Montgomery_Int y2 = y1.square(ws);
  180|  6.67k|   const Montgomery_Int y3 = y2.mul(y1, ws);
  181|       |
  182|  6.67k|   const Montgomery_Int y1x1 = y1.mul(x1, ws);
  183|  6.67k|   const Montgomery_Int y1x2 = y1.mul(x2, ws);
  184|  6.67k|   const Montgomery_Int y1x3 = y1.mul(x3, ws);
  185|       |
  186|  6.67k|   const Montgomery_Int y2x1 = y2.mul(x1, ws);
  187|  6.67k|   const Montgomery_Int y2x2 = y2.mul(x2, ws);
  188|  6.67k|   const Montgomery_Int y2x3 = y2.mul(x3, ws);
  189|       |
  190|  6.67k|   const Montgomery_Int y3x1 = y3.mul(x1, ws);
  191|  6.67k|   const Montgomery_Int y3x2 = y3.mul(x2, ws);
  192|  6.67k|   const Montgomery_Int y3x3 = y3.mul(x3, ws);
  193|       |
  194|  6.67k|   const Montgomery_Int* M[16] = {&one,
  195|  6.67k|                                  &x1,  // 0001
  196|  6.67k|                                  &x2,  // 0010
  197|  6.67k|                                  &x3,  // 0011
  198|  6.67k|                                  &y1,  // 0100
  199|  6.67k|                                  &y1x1,
  200|  6.67k|                                  &y1x2,
  201|  6.67k|                                  &y1x3,
  202|  6.67k|                                  &y2,  // 1000
  203|  6.67k|                                  &y2x1,
  204|  6.67k|                                  &y2x2,
  205|  6.67k|                                  &y2x3,
  206|  6.67k|                                  &y3,  // 1100
  207|  6.67k|                                  &y3x1,
  208|  6.67k|                                  &y3x2,
  209|  6.67k|                                  &y3x3};
  210|       |
  211|  6.67k|   Montgomery_Int H = one;
  212|       |
  213|   611k|   for(size_t i = 0; i != z_bits; i += 2) {
  ------------------
  |  Branch (213:22): [True: 604k, False: 6.67k]
  ------------------
  214|   604k|      if(i > 0) {
  ------------------
  |  Branch (214:10): [True: 598k, False: 6.51k]
  ------------------
  215|   598k|         H.square_this(ws);
  216|   598k|         H.square_this(ws);
  217|   598k|      }
  218|       |
  219|   604k|      const uint32_t z1_b = z1.get_substring(z_bits - i - 2, 2);
  220|   604k|      const uint32_t z2_b = z2.get_substring(z_bits - i - 2, 2);
  221|       |
  222|   604k|      const uint32_t z12 = (4 * z2_b) + z1_b;
  223|       |
  224|   604k|      H.mul_by(*M[z12], ws);
  225|   604k|   }
  226|       |
  227|  6.67k|   return H.value();
  228|  6.67k|}

_ZN5Botan10prime_p521Ev:
   15|  2.68M|const BigInt& prime_p521() {
   16|  2.68M|   static const BigInt p521(
   17|  2.68M|      "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
   18|  2.68M|      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
   19|       |
   20|  2.68M|   return p521;
   21|  2.68M|}
_ZN5Botan9redc_p521ERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
   23|  28.3M|void redc_p521(BigInt& x, secure_vector<word>& ws) {
   24|  28.3M|   BOTAN_DEBUG_ASSERT(x.is_positive());
  ------------------
  |  |   99|  28.3M|      do {                          \
  |  |  100|  28.3M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 28.3M]
  |  |  ------------------
  ------------------
   25|       |
   26|  28.3M|   const size_t p_full_words = 521 / BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|  28.3M|#define BOTAN_MP_WORD_BITS 64
  ------------------
   27|  28.3M|   const size_t p_top_bits = 521 % BOTAN_MP_WORD_BITS;
  ------------------
  |  |   50|  28.3M|#define BOTAN_MP_WORD_BITS 64
  ------------------
   28|  28.3M|   const size_t p_words = p_full_words + 1;
   29|       |
   30|  28.3M|   static const constinit auto p521_words = hex_to_words<word>(
   31|  28.3M|      "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF"
   32|  28.3M|      "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF");
   33|       |
   34|  28.3M|   if(ws.size() < p_words + 1) {
  ------------------
  |  Branch (34:7): [True: 0, False: 28.3M]
  ------------------
   35|      0|      ws.resize(p_words + 1);
   36|      0|   }
   37|       |
   38|  28.3M|   clear_mem(ws.data(), ws.size());
   39|  28.3M|   bigint_shr2(ws.data(), x.data(), std::min(x.size(), 2 * p_words), 521);
   40|       |
   41|  28.3M|   x.mask_bits(521);
   42|  28.3M|   x.grow_to(p_words);
   43|       |
   44|       |   // Word-level carry will be zero
   45|  28.3M|   word carry = bigint_add3_nc(x.mutable_data(), x.data(), p_words, ws.data(), p_words);
   46|  28.3M|   BOTAN_ASSERT_EQUAL(carry, 0, "Final carry in P-521 reduction");
  ------------------
  |  |   69|  28.3M|   do {                                                                                                \
  |  |   70|  28.3M|      if((expr1) != (expr2))                                                                           \
  |  |  ------------------
  |  |  |  Branch (70:10): [True: 0, False: 28.3M]
  |  |  ------------------
  |  |   71|  28.3M|         Botan::assertion_failure(#expr1 " == " #expr2, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   72|  28.3M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (72:12): [Folded, False: 28.3M]
  |  |  ------------------
  ------------------
   47|       |
   48|  28.3M|   const word top_word = x.word_at(p_full_words);
   49|       |
   50|       |   /*
   51|       |   * Check if we need to reduce modulo P
   52|       |   * There are two possible cases:
   53|       |   * - The result overflowed past 521 bits, in which case bit 522 will be set
   54|       |   * - The result is exactly 2**521 - 1
   55|       |   */
   56|  28.3M|   const auto bit_522_set = CT::Mask<word>::expand(top_word >> p_top_bits);
   57|       |
   58|  28.3M|   const word max = WordInfo<word>::max;
   59|  28.3M|   word and_512 = max;
   60|   255M|   for(size_t i = 0; i != p_full_words; ++i) {
  ------------------
  |  Branch (60:22): [True: 226M, False: 28.3M]
  ------------------
   61|   226M|      and_512 &= x.word_at(i);
   62|   226M|   }
   63|  28.3M|   const auto all_512_low_bits_set = CT::Mask<word>::is_equal(and_512, max);
   64|  28.3M|   const auto has_p521_top_word = CT::Mask<word>::is_equal(top_word, 0x1FF);
   65|  28.3M|   const auto is_p521 = all_512_low_bits_set & has_p521_top_word;
   66|       |
   67|  28.3M|   const auto needs_reduction = is_p521 | bit_522_set;
   68|       |
   69|  28.3M|   bigint_cnd_sub(needs_reduction.value(), x.mutable_data(), p521_words.data(), p_words);
   70|  28.3M|}
_ZN5Botan10prime_p192Ev:
   97|      8|const BigInt& prime_p192() {
   98|      8|   static const BigInt p192("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF");
   99|      8|   return p192;
  100|      8|}
_ZN5Botan10prime_p224Ev:
  186|      8|const BigInt& prime_p224() {
  187|      8|   static const BigInt p224("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001");
  188|      8|   return p224;
  189|      8|}
_ZN5Botan10prime_p256Ev:
  281|  2.96M|const BigInt& prime_p256() {
  282|  2.96M|   static const BigInt p256("0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF");
  283|  2.96M|   return p256;
  284|  2.96M|}
_ZN5Botan9redc_p256ERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  286|  32.6M|void redc_p256(BigInt& x, secure_vector<word>& ws) {
  287|  32.6M|   BOTAN_DEBUG_ASSERT(x.is_positive());
  ------------------
  |  |   99|  32.6M|      do {                          \
  |  |  100|  32.6M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 32.6M]
  |  |  ------------------
  ------------------
  288|       |
  289|  32.6M|   static const size_t p256_limbs = (BOTAN_MP_WORD_BITS == 32) ? 8 : 4;
  ------------------
  |  |   50|  32.6M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  |  Branch (289:37): [Folded, False: 32.6M]
  ------------------
  290|       |
  291|  32.6M|   BOTAN_UNUSED(ws);
  ------------------
  |  |  118|  32.6M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
  292|       |
  293|  32.6M|   x.grow_to(2 * p256_limbs);
  294|  32.6M|   word* xw = x.mutable_data();
  295|       |
  296|  32.6M|   const int64_t X00 = get_uint32(xw, 0);
  297|  32.6M|   const int64_t X01 = get_uint32(xw, 1);
  298|  32.6M|   const int64_t X02 = get_uint32(xw, 2);
  299|  32.6M|   const int64_t X03 = get_uint32(xw, 3);
  300|  32.6M|   const int64_t X04 = get_uint32(xw, 4);
  301|  32.6M|   const int64_t X05 = get_uint32(xw, 5);
  302|  32.6M|   const int64_t X06 = get_uint32(xw, 6);
  303|  32.6M|   const int64_t X07 = get_uint32(xw, 7);
  304|  32.6M|   const int64_t X08 = get_uint32(xw, 8);
  305|  32.6M|   const int64_t X09 = get_uint32(xw, 9);
  306|  32.6M|   const int64_t X10 = get_uint32(xw, 10);
  307|  32.6M|   const int64_t X11 = get_uint32(xw, 11);
  308|  32.6M|   const int64_t X12 = get_uint32(xw, 12);
  309|  32.6M|   const int64_t X13 = get_uint32(xw, 13);
  310|  32.6M|   const int64_t X14 = get_uint32(xw, 14);
  311|  32.6M|   const int64_t X15 = get_uint32(xw, 15);
  312|       |
  313|       |   // Adds 6 * P-256 to prevent underflow
  314|  32.6M|   const int64_t S0 = 0xFFFFFFFA + X00 + X08 + X09 - (X11 + X12 + X13) - X14;
  315|  32.6M|   const int64_t S1 = 0xFFFFFFFF + X01 + X09 + X10 - X12 - (X13 + X14 + X15);
  316|  32.6M|   const int64_t S2 = 0xFFFFFFFF + X02 + X10 + X11 - (X13 + X14 + X15);
  317|  32.6M|   const int64_t S3 = 0x00000005 + X03 + (X11 + X12) * 2 + X13 - X15 - X08 - X09;
  318|  32.6M|   const int64_t S4 = 0x00000000 + X04 + (X12 + X13) * 2 + X14 - X09 - X10;
  319|  32.6M|   const int64_t S5 = 0x00000000 + X05 + (X13 + X14) * 2 + X15 - X10 - X11;
  320|  32.6M|   const int64_t S6 = 0x00000006 + X06 + X13 + X14 * 3 + X15 * 2 - X08 - X09;
  321|  32.6M|   const int64_t S7 = 0xFFFFFFFA + X07 + X15 * 3 + X08 - X10 - (X11 + X12 + X13);
  322|       |
  323|  32.6M|   int64_t S = 0;
  324|       |
  325|  32.6M|   uint32_t R0 = 0, R1 = 0;
  326|       |
  327|  32.6M|   S += S0;
  328|  32.6M|   R0 = static_cast<uint32_t>(S);
  329|  32.6M|   S >>= 32;
  330|       |
  331|  32.6M|   S += S1;
  332|  32.6M|   R1 = static_cast<uint32_t>(S);
  333|  32.6M|   S >>= 32;
  334|       |
  335|  32.6M|   set_words(xw, 0, R0, R1);
  336|       |
  337|  32.6M|   S += S2;
  338|  32.6M|   R0 = static_cast<uint32_t>(S);
  339|  32.6M|   S >>= 32;
  340|       |
  341|  32.6M|   S += S3;
  342|  32.6M|   R1 = static_cast<uint32_t>(S);
  343|  32.6M|   S >>= 32;
  344|       |
  345|  32.6M|   set_words(xw, 2, R0, R1);
  346|       |
  347|  32.6M|   S += S4;
  348|  32.6M|   R0 = static_cast<uint32_t>(S);
  349|  32.6M|   S >>= 32;
  350|       |
  351|  32.6M|   S += S5;
  352|  32.6M|   R1 = static_cast<uint32_t>(S);
  353|  32.6M|   S >>= 32;
  354|       |
  355|  32.6M|   set_words(xw, 4, R0, R1);
  356|       |
  357|  32.6M|   S += S6;
  358|  32.6M|   R0 = static_cast<uint32_t>(S);
  359|  32.6M|   S >>= 32;
  360|       |
  361|  32.6M|   S += S7;
  362|  32.6M|   R1 = static_cast<uint32_t>(S);
  363|  32.6M|   S >>= 32;
  364|  32.6M|   set_words(xw, 6, R0, R1);
  365|       |
  366|  32.6M|   S += 5;  // the top digits of 6*P-256
  367|       |
  368|       |   /*
  369|       |   This is a table of (i*P-256) % 2**256 for i in 1...10
  370|       |   */
  371|  32.6M|   static const constinit std::array<word, p256_limbs> p256_mults[11] = {
  372|  32.6M|      hex_to_words<word>("FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF"),
  373|  32.6M|      hex_to_words<word>("FFFFFFFE00000002000000000000000000000001FFFFFFFFFFFFFFFFFFFFFFFE"),
  374|  32.6M|      hex_to_words<word>("FFFFFFFD00000003000000000000000000000002FFFFFFFFFFFFFFFFFFFFFFFD"),
  375|  32.6M|      hex_to_words<word>("FFFFFFFC00000004000000000000000000000003FFFFFFFFFFFFFFFFFFFFFFFC"),
  376|  32.6M|      hex_to_words<word>("FFFFFFFB00000005000000000000000000000004FFFFFFFFFFFFFFFFFFFFFFFB"),
  377|  32.6M|      hex_to_words<word>("FFFFFFFA00000006000000000000000000000005FFFFFFFFFFFFFFFFFFFFFFFA"),
  378|  32.6M|      hex_to_words<word>("FFFFFFF900000007000000000000000000000006FFFFFFFFFFFFFFFFFFFFFFF9"),
  379|  32.6M|      hex_to_words<word>("FFFFFFF800000008000000000000000000000007FFFFFFFFFFFFFFFFFFFFFFF8"),
  380|  32.6M|      hex_to_words<word>("FFFFFFF700000009000000000000000000000008FFFFFFFFFFFFFFFFFFFFFFF7"),
  381|  32.6M|      hex_to_words<word>("FFFFFFF60000000A000000000000000000000009FFFFFFFFFFFFFFFFFFFFFFF6"),
  382|  32.6M|      hex_to_words<word>("FFFFFFF50000000B00000000000000000000000AFFFFFFFFFFFFFFFFFFFFFFF5"),
  383|  32.6M|   };
  384|       |
  385|  32.6M|   CT::unpoison(S);
  386|  32.6M|   BOTAN_ASSERT(S >= 0 && S <= 10, "Expected overflow");
  ------------------
  |  |   51|  32.6M|   do {                                                                                 \
  |  |   52|  65.2M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:12): [True: 32.6M, False: 0]
  |  |  |  Branch (52:12): [True: 32.6M, False: 0]
  |  |  ------------------
  |  |   53|  32.6M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  32.6M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 32.6M]
  |  |  ------------------
  ------------------
  387|       |
  388|  32.6M|   BOTAN_ASSERT_NOMSG(x.size() >= p256_limbs + 1);
  ------------------
  |  |   60|  32.6M|   do {                                                                     \
  |  |   61|  32.6M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 32.6M]
  |  |  ------------------
  |  |   62|  32.6M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  32.6M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 32.6M]
  |  |  ------------------
  ------------------
  389|  32.6M|   x.mask_bits(256);
  390|  32.6M|   word borrow = bigint_sub2(x.mutable_data(), p256_limbs + 1, p256_mults[S].data(), p256_limbs);
  391|  32.6M|   BOTAN_DEBUG_ASSERT(borrow == 0 || borrow == 1);
  ------------------
  |  |   99|  32.6M|      do {                          \
  |  |  100|  32.6M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 32.6M]
  |  |  ------------------
  ------------------
  392|  32.6M|   bigint_cnd_add(borrow, x.mutable_data(), p256_limbs + 1, p256_mults[0].data(), p256_limbs);
  393|  32.6M|}
_ZN5Botan10prime_p384Ev:
  395|  8.80M|const BigInt& prime_p384() {
  396|  8.80M|   static const BigInt p384(
  397|  8.80M|      "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF");
  398|  8.80M|   return p384;
  399|  8.80M|}
_ZN5Botan9redc_p384ERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  401|  93.9M|void redc_p384(BigInt& x, secure_vector<word>& ws) {
  402|  93.9M|   BOTAN_DEBUG_ASSERT(x.is_positive());
  ------------------
  |  |   99|  93.9M|      do {                          \
  |  |  100|  93.9M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 93.9M]
  |  |  ------------------
  ------------------
  403|       |
  404|  93.9M|   BOTAN_UNUSED(ws);
  ------------------
  |  |  118|  93.9M|#define BOTAN_UNUSED Botan::ignore_params
  ------------------
  405|       |
  406|  93.9M|   static const size_t p384_limbs = (BOTAN_MP_WORD_BITS == 32) ? 12 : 6;
  ------------------
  |  |   50|  93.9M|#define BOTAN_MP_WORD_BITS 64
  ------------------
  |  Branch (406:37): [Folded, False: 93.9M]
  ------------------
  407|       |
  408|  93.9M|   x.grow_to(2 * p384_limbs);
  409|  93.9M|   word* xw = x.mutable_data();
  410|       |
  411|  93.9M|   const int64_t X00 = get_uint32(xw, 0);
  412|  93.9M|   const int64_t X01 = get_uint32(xw, 1);
  413|  93.9M|   const int64_t X02 = get_uint32(xw, 2);
  414|  93.9M|   const int64_t X03 = get_uint32(xw, 3);
  415|  93.9M|   const int64_t X04 = get_uint32(xw, 4);
  416|  93.9M|   const int64_t X05 = get_uint32(xw, 5);
  417|  93.9M|   const int64_t X06 = get_uint32(xw, 6);
  418|  93.9M|   const int64_t X07 = get_uint32(xw, 7);
  419|  93.9M|   const int64_t X08 = get_uint32(xw, 8);
  420|  93.9M|   const int64_t X09 = get_uint32(xw, 9);
  421|  93.9M|   const int64_t X10 = get_uint32(xw, 10);
  422|  93.9M|   const int64_t X11 = get_uint32(xw, 11);
  423|  93.9M|   const int64_t X12 = get_uint32(xw, 12);
  424|  93.9M|   const int64_t X13 = get_uint32(xw, 13);
  425|  93.9M|   const int64_t X14 = get_uint32(xw, 14);
  426|  93.9M|   const int64_t X15 = get_uint32(xw, 15);
  427|  93.9M|   const int64_t X16 = get_uint32(xw, 16);
  428|  93.9M|   const int64_t X17 = get_uint32(xw, 17);
  429|  93.9M|   const int64_t X18 = get_uint32(xw, 18);
  430|  93.9M|   const int64_t X19 = get_uint32(xw, 19);
  431|  93.9M|   const int64_t X20 = get_uint32(xw, 20);
  432|  93.9M|   const int64_t X21 = get_uint32(xw, 21);
  433|  93.9M|   const int64_t X22 = get_uint32(xw, 22);
  434|  93.9M|   const int64_t X23 = get_uint32(xw, 23);
  435|       |
  436|       |   // One copy of P-384 is added to prevent underflow
  437|  93.9M|   const int64_t S0 = 0xFFFFFFFF + X00 + X12 + X20 + X21 - X23;
  438|  93.9M|   const int64_t S1 = 0x00000000 + X01 + X13 + X22 + X23 - X12 - X20;
  439|  93.9M|   const int64_t S2 = 0x00000000 + X02 + X14 + X23 - X13 - X21;
  440|  93.9M|   const int64_t S3 = 0xFFFFFFFF + X03 + X12 + X15 + X20 + X21 - X14 - X22 - X23;
  441|  93.9M|   const int64_t S4 = 0xFFFFFFFE + X04 + X12 + X13 + X16 + X20 + X21 * 2 + X22 - X15 - X23 * 2;
  442|  93.9M|   const int64_t S5 = 0xFFFFFFFF + X05 + X13 + X14 + X17 + X21 + X22 * 2 + X23 - X16;
  443|  93.9M|   const int64_t S6 = 0xFFFFFFFF + X06 + X14 + X15 + X18 + X22 + X23 * 2 - X17;
  444|  93.9M|   const int64_t S7 = 0xFFFFFFFF + X07 + X15 + X16 + X19 + X23 - X18;
  445|  93.9M|   const int64_t S8 = 0xFFFFFFFF + X08 + X16 + X17 + X20 - X19;
  446|  93.9M|   const int64_t S9 = 0xFFFFFFFF + X09 + X17 + X18 + X21 - X20;
  447|  93.9M|   const int64_t SA = 0xFFFFFFFF + X10 + X18 + X19 + X22 - X21;
  448|  93.9M|   const int64_t SB = 0xFFFFFFFF + X11 + X19 + X20 + X23 - X22;
  449|       |
  450|  93.9M|   int64_t S = 0;
  451|       |
  452|  93.9M|   uint32_t R0 = 0, R1 = 0;
  453|       |
  454|  93.9M|   S += S0;
  455|  93.9M|   R0 = static_cast<uint32_t>(S);
  456|  93.9M|   S >>= 32;
  457|       |
  458|  93.9M|   S += S1;
  459|  93.9M|   R1 = static_cast<uint32_t>(S);
  460|  93.9M|   S >>= 32;
  461|       |
  462|  93.9M|   set_words(xw, 0, R0, R1);
  463|       |
  464|  93.9M|   S += S2;
  465|  93.9M|   R0 = static_cast<uint32_t>(S);
  466|  93.9M|   S >>= 32;
  467|       |
  468|  93.9M|   S += S3;
  469|  93.9M|   R1 = static_cast<uint32_t>(S);
  470|  93.9M|   S >>= 32;
  471|       |
  472|  93.9M|   set_words(xw, 2, R0, R1);
  473|       |
  474|  93.9M|   S += S4;
  475|  93.9M|   R0 = static_cast<uint32_t>(S);
  476|  93.9M|   S >>= 32;
  477|       |
  478|  93.9M|   S += S5;
  479|  93.9M|   R1 = static_cast<uint32_t>(S);
  480|  93.9M|   S >>= 32;
  481|       |
  482|  93.9M|   set_words(xw, 4, R0, R1);
  483|       |
  484|  93.9M|   S += S6;
  485|  93.9M|   R0 = static_cast<uint32_t>(S);
  486|  93.9M|   S >>= 32;
  487|       |
  488|  93.9M|   S += S7;
  489|  93.9M|   R1 = static_cast<uint32_t>(S);
  490|  93.9M|   S >>= 32;
  491|       |
  492|  93.9M|   set_words(xw, 6, R0, R1);
  493|       |
  494|  93.9M|   S += S8;
  495|  93.9M|   R0 = static_cast<uint32_t>(S);
  496|  93.9M|   S >>= 32;
  497|       |
  498|  93.9M|   S += S9;
  499|  93.9M|   R1 = static_cast<uint32_t>(S);
  500|  93.9M|   S >>= 32;
  501|       |
  502|  93.9M|   set_words(xw, 8, R0, R1);
  503|       |
  504|  93.9M|   S += SA;
  505|  93.9M|   R0 = static_cast<uint32_t>(S);
  506|  93.9M|   S >>= 32;
  507|       |
  508|  93.9M|   S += SB;
  509|  93.9M|   R1 = static_cast<uint32_t>(S);
  510|  93.9M|   S >>= 32;
  511|       |
  512|  93.9M|   set_words(xw, 10, R0, R1);
  513|       |
  514|       |   /*
  515|       |   This is a table of (i*P-384) % 2**384 for i in 1...4
  516|       |   */
  517|  93.9M|   static const constinit std::array<word, p384_limbs> p384_mults[5] = {
  518|  93.9M|      hex_to_words<word>(
  519|  93.9M|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF"),
  520|  93.9M|      hex_to_words<word>(
  521|  93.9M|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDFFFFFFFE0000000000000001FFFFFFFE"),
  522|  93.9M|      hex_to_words<word>(
  523|  93.9M|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCFFFFFFFD0000000000000002FFFFFFFD"),
  524|  93.9M|      hex_to_words<word>(
  525|  93.9M|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBFFFFFFFC0000000000000003FFFFFFFC"),
  526|  93.9M|      hex_to_words<word>(
  527|  93.9M|         "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAFFFFFFFB0000000000000004FFFFFFFB"),
  528|  93.9M|   };
  529|       |
  530|  93.9M|   CT::unpoison(S);
  531|  93.9M|   BOTAN_ASSERT(S >= 0 && S <= 4, "Expected overflow");
  ------------------
  |  |   51|  93.9M|   do {                                                                                 \
  |  |   52|   187M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:12): [True: 93.9M, False: 0]
  |  |  |  Branch (52:12): [True: 93.9M, False: 0]
  |  |  ------------------
  |  |   53|  93.9M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  93.9M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 93.9M]
  |  |  ------------------
  ------------------
  532|       |
  533|  93.9M|   BOTAN_ASSERT_NOMSG(x.size() >= p384_limbs + 1);
  ------------------
  |  |   60|  93.9M|   do {                                                                     \
  |  |   61|  93.9M|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 93.9M]
  |  |  ------------------
  |  |   62|  93.9M|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  93.9M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 93.9M]
  |  |  ------------------
  ------------------
  534|  93.9M|   x.mask_bits(384);
  535|  93.9M|   word borrow = bigint_sub2(x.mutable_data(), p384_limbs + 1, p384_mults[S].data(), p384_limbs);
  536|  93.9M|   BOTAN_DEBUG_ASSERT(borrow == 0 || borrow == 1);
  ------------------
  |  |   99|  93.9M|      do {                          \
  |  |  100|  93.9M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 93.9M]
  |  |  ------------------
  ------------------
  537|  93.9M|   bigint_cnd_add(borrow, x.mutable_data(), p384_limbs + 1, p384_mults[0].data(), p384_limbs);
  538|  93.9M|}
nistp_redc.cpp:_ZN5Botan12_GLOBAL__N_110get_uint32EPKmm:
   78|  2.77G|inline uint32_t get_uint32(const word xw[], size_t i) {
   79|       |#if(BOTAN_MP_WORD_BITS == 32)
   80|       |   return xw[i];
   81|       |#else
   82|  2.77G|   return static_cast<uint32_t>(xw[i / 2] >> ((i % 2) * 32));
   83|  2.77G|#endif
   84|  2.77G|}
nistp_redc.cpp:_ZN5Botan12_GLOBAL__N_19set_wordsEPmmjj:
   86|   694M|inline void set_words(word x[], size_t i, uint32_t R0, uint32_t R1) {
   87|       |#if(BOTAN_MP_WORD_BITS == 32)
   88|       |   x[i] = R0;
   89|       |   x[i + 1] = R1;
   90|       |#else
   91|   694M|   x[i / 2] = (static_cast<uint64_t>(R1) << 32) | R0;
   92|   694M|#endif
   93|   694M|}

_ZN5Botan6squareERKNS_6BigIntE:
  157|  27.5k|BigInt square(const BigInt& x) {
  158|  27.5k|   BigInt z = x;
  159|  27.5k|   secure_vector<word> ws;
  160|  27.5k|   z.square(ws);
  161|  27.5k|   return z;
  162|  27.5k|}
_ZN5Botan13low_zero_bitsERKNS_6BigIntE:
  167|    437|size_t low_zero_bits(const BigInt& n) {
  168|    437|   size_t low_zero = 0;
  169|       |
  170|    437|   auto seen_nonempty_word = CT::Mask<word>::cleared();
  171|       |
  172|  3.93k|   for(size_t i = 0; i != n.size(); ++i) {
  ------------------
  |  Branch (172:22): [True: 3.49k, False: 437]
  ------------------
  173|  3.49k|      const word x = n.word_at(i);
  174|       |
  175|       |      // ctz(0) will return sizeof(word)
  176|  3.49k|      const size_t tz_x = ctz(x);
  177|       |
  178|       |      // if x > 0 we want to count tz_x in total but not any
  179|       |      // further words, so set the mask after the addition
  180|  3.49k|      low_zero += seen_nonempty_word.if_not_set_return(tz_x);
  181|       |
  182|  3.49k|      seen_nonempty_word |= CT::Mask<word>::expand(x);
  183|  3.49k|   }
  184|       |
  185|       |   // if we saw no words with x > 0 then n == 0 and the value we have
  186|       |   // computed is meaningless. Instead return BigInt::zero() in that case.
  187|    437|   return static_cast<size_t>(seen_nonempty_word.if_set_return(low_zero));
  188|    437|}

_ZN5Botan15Modular_ReducerC2ERKNS_6BigIntE:
   19|  34.5k|Modular_Reducer::Modular_Reducer(const BigInt& mod) {
   20|  34.5k|   if(mod < 0) {
  ------------------
  |  Branch (20:7): [True: 0, False: 34.5k]
  ------------------
   21|      0|      throw Invalid_Argument("Modular_Reducer: modulus must be positive");
   22|      0|   }
   23|       |
   24|       |   // Left uninitialized if mod == 0
   25|  34.5k|   m_mod_words = 0;
   26|       |
   27|  34.5k|   if(mod > 0) {
  ------------------
  |  Branch (27:7): [True: 34.5k, False: 0]
  ------------------
   28|  34.5k|      m_modulus = mod;
   29|  34.5k|      m_mod_words = m_modulus.sig_words();
   30|       |
   31|       |      // Compute mu = floor(2^{2k} / m)
   32|  34.5k|      m_mu.set_bit(2 * BOTAN_MP_WORD_BITS * m_mod_words);
  ------------------
  |  |   50|  34.5k|#define BOTAN_MP_WORD_BITS 64
  ------------------
   33|  34.5k|      m_mu = ct_divide(m_mu, m_modulus);
   34|  34.5k|   }
   35|  34.5k|}
_ZNK5Botan15Modular_Reducer6reduceERKNS_6BigIntE:
   37|   229k|BigInt Modular_Reducer::reduce(const BigInt& x) const {
   38|   229k|   BigInt r;
   39|   229k|   secure_vector<word> ws;
   40|   229k|   reduce(r, x, ws);
   41|   229k|   return r;
   42|   229k|}
_ZNK5Botan15Modular_Reducer6reduceERNS_6BigIntERKS1_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
   69|   229k|void Modular_Reducer::reduce(BigInt& t1, const BigInt& x, secure_vector<word>& ws) const {
   70|   229k|   if(&t1 == &x) {
  ------------------
  |  Branch (70:7): [True: 0, False: 229k]
  ------------------
   71|      0|      throw Invalid_State("Modular_Reducer arguments cannot alias");
   72|      0|   }
   73|   229k|   if(m_mod_words == 0) {
  ------------------
  |  Branch (73:7): [True: 0, False: 229k]
  ------------------
   74|      0|      throw Invalid_State("Modular_Reducer: Never initalized");
   75|      0|   }
   76|       |
   77|   229k|   const size_t x_sw = x.sig_words();
   78|       |
   79|   229k|   if(x_sw > 2 * m_mod_words) {
  ------------------
  |  Branch (79:7): [True: 0, False: 229k]
  ------------------
   80|       |      // too big, fall back to slow boat division
   81|      0|      t1 = ct_modulo(x, m_modulus);
   82|      0|      return;
   83|      0|   }
   84|       |
   85|   229k|   t1 = x;
   86|   229k|   t1.set_sign(BigInt::Positive);
   87|   229k|   t1 >>= (BOTAN_MP_WORD_BITS * (m_mod_words - 1));
  ------------------
  |  |   50|   229k|#define BOTAN_MP_WORD_BITS 64
  ------------------
   88|       |
   89|   229k|   t1.mul(m_mu, ws);
   90|   229k|   t1 >>= (BOTAN_MP_WORD_BITS * (m_mod_words + 1));
  ------------------
  |  |   50|   229k|#define BOTAN_MP_WORD_BITS 64
  ------------------
   91|       |
   92|       |   // TODO add masked mul to avoid computing high bits
   93|   229k|   t1.mul(m_modulus, ws);
   94|   229k|   t1.mask_bits(BOTAN_MP_WORD_BITS * (m_mod_words + 1));
  ------------------
  |  |   50|   229k|#define BOTAN_MP_WORD_BITS 64
  ------------------
   95|       |
   96|   229k|   t1.rev_sub(x.data(), std::min(x_sw, m_mod_words + 1), ws);
   97|       |
   98|       |   /*
   99|       |   * If t1 < 0 then we must add b^(k+1) where b = 2^w. To avoid a
  100|       |   * side channel perform the addition unconditionally, with ws set
  101|       |   * to either b^(k+1) or else 0.
  102|       |   */
  103|   229k|   const word t1_neg = t1.is_negative();
  104|       |
  105|   229k|   if(ws.size() < m_mod_words + 2) {
  ------------------
  |  Branch (105:7): [True: 3.60k, False: 225k]
  ------------------
  106|  3.60k|      ws.resize(m_mod_words + 2);
  107|  3.60k|   }
  108|   229k|   clear_mem(ws.data(), ws.size());
  109|   229k|   ws[m_mod_words + 1] = t1_neg;
  110|       |
  111|   229k|   t1.add(ws.data(), m_mod_words + 2, BigInt::Positive);
  112|       |
  113|       |   // Per HAC this step requires at most 2 subtractions
  114|   229k|   t1.ct_reduce_below(m_modulus, ws, 2);
  115|       |
  116|   229k|   cnd_rev_sub(t1.is_nonzero() && x.is_negative(), t1, m_modulus.data(), m_modulus.size(), ws);
  ------------------
  |  Branch (116:16): [True: 229k, False: 315]
  |  Branch (116:35): [True: 0, False: 229k]
  ------------------
  117|   229k|}
reducer.cpp:_ZN5Botan12_GLOBAL__N_111cnd_rev_subEbRNS_6BigIntEPKmmRNSt3__16vectorImNS_16secure_allocatorImEEEE:
   49|   229k|void cnd_rev_sub(bool cnd, BigInt& x, const word y[], size_t y_sw, secure_vector<word>& ws) {
   50|   229k|   if(x.sign() != BigInt::Positive) {
  ------------------
  |  Branch (50:7): [True: 0, False: 229k]
  ------------------
   51|      0|      throw Invalid_State("BigInt::sub_rev requires this is positive");
   52|      0|   }
   53|       |
   54|   229k|   const size_t x_sw = x.sig_words();
   55|       |
   56|   229k|   const size_t max_words = std::max(x_sw, y_sw);
   57|   229k|   ws.resize(std::max(x_sw, y_sw));
   58|   229k|   clear_mem(ws.data(), ws.size());
   59|   229k|   x.grow_to(max_words);
   60|       |
   61|   229k|   const int32_t relative_size = bigint_sub_abs(ws.data(), x.data(), x_sw, y, y_sw);
   62|       |
   63|   229k|   x.cond_flip_sign((relative_size > 0) && cnd);
  ------------------
  |  Branch (63:21): [True: 0, False: 229k]
  |  Branch (63:44): [True: 0, False: 0]
  ------------------
   64|   229k|   bigint_cnd_swap(static_cast<word>(cnd), x.mutable_data(), ws.data(), max_words);
   65|   229k|}

_ZN5Botan18Keccak_PermutationC2Emmh:
   22|  16.1k|      m_capacity(capacity),
   23|  16.1k|      m_byterate((1600 - capacity) / 8),
   24|  16.1k|      m_custom_padding(custom_padding),
   25|  16.1k|      m_custom_padding_bit_len(custom_padding_bit_len),
   26|  16.1k|      m_S(25),  // 1600 bit
   27|  16.1k|      m_S_inpos(0),
   28|  16.1k|      m_S_outpos(0) {
   29|  16.1k|   BOTAN_ARG_CHECK(capacity % 64 == 0, "capacity must be a multiple of 64");
  ------------------
  |  |   30|  16.1k|   do {                                                          \
  |  |   31|  16.1k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 16.1k]
  |  |  ------------------
  |  |   32|  16.1k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  16.1k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 16.1k]
  |  |  ------------------
  ------------------
   30|  16.1k|}
_ZN5Botan18Keccak_Permutation5clearEv:
   42|  10.2k|void Keccak_Permutation::clear() {
   43|  10.2k|   zeroise(m_S);
   44|  10.2k|   m_S_inpos = 0;
   45|  10.2k|   m_S_outpos = 0;
   46|  10.2k|}
_ZN5Botan18Keccak_Permutation6absorbENSt3__14spanIKhLm18446744073709551615EEE:
   48|  59.8k|void Keccak_Permutation::absorb(std::span<const uint8_t> input) {
   49|  59.8k|   BufferSlicer input_slicer(input);
   50|       |
   51|       |   // Block-wise incorporation of the input data into the sponge state until
   52|       |   // all input bytes are processed
   53|   130k|   while(!input_slicer.empty()) {
  ------------------
  |  Branch (53:10): [True: 70.5k, False: 59.8k]
  ------------------
   54|  70.5k|      const size_t to_take_this_round = std::min(input_slicer.remaining(), m_byterate - m_S_inpos);
   55|  70.5k|      BufferSlicer input_this_round(input_slicer.take(to_take_this_round));
   56|       |
   57|       |      // If necessary, try to get aligned with the sponge state's 64-bit integer array
   58|   256k|      for(; !input_this_round.empty() && m_S_inpos % 8; ++m_S_inpos) {
  ------------------
  |  Branch (58:13): [True: 248k, False: 7.95k]
  |  Branch (58:42): [True: 185k, False: 62.6k]
  ------------------
   59|   185k|         m_S[m_S_inpos / 8] ^= static_cast<uint64_t>(input_this_round.take_byte()) << (8 * (m_S_inpos % 8));
   60|   185k|      }
   61|       |
   62|       |      // Process as many aligned 64-bit integer values as possible
   63|   255k|      for(; input_this_round.remaining() >= 8; m_S_inpos += 8) {
  ------------------
  |  Branch (63:13): [True: 185k, False: 70.5k]
  ------------------
   64|   185k|         m_S[m_S_inpos / 8] ^= load_le<uint64_t>(input_this_round.take(8).data(), 0);
   65|   185k|      }
   66|       |
   67|       |      // Read remaining output data, causing misalignment, if necessary
   68|   226k|      for(; !input_this_round.empty(); ++m_S_inpos) {
  ------------------
  |  Branch (68:13): [True: 156k, False: 70.5k]
  ------------------
   69|   156k|         m_S[m_S_inpos / 8] ^= static_cast<uint64_t>(input_this_round.take_byte()) << (8 * (m_S_inpos % 8));
   70|   156k|      }
   71|       |
   72|       |      // We reached the end of a sponge state block... permute() and start over
   73|  70.5k|      if(m_S_inpos == m_byterate) {
  ------------------
  |  Branch (73:10): [True: 14.1k, False: 56.4k]
  ------------------
   74|  14.1k|         permute();
   75|  14.1k|         m_S_inpos = 0;
   76|  14.1k|      }
   77|  70.5k|   }
   78|  59.8k|}
_ZN5Botan18Keccak_Permutation7squeezeENSt3__14spanIhLm18446744073709551615EEE:
   80|  10.2k|void Keccak_Permutation::squeeze(std::span<uint8_t> output) {
   81|  10.2k|   BufferStuffer output_stuffer(output);
   82|       |
   83|       |   // Block-wise readout of the sponge state until enough bytes
   84|       |   // were filled into the output buffer
   85|  20.5k|   while(!output_stuffer.full()) {
  ------------------
  |  Branch (85:10): [True: 10.2k, False: 10.2k]
  ------------------
   86|  10.2k|      const size_t bytes_in_this_round = std::min(output_stuffer.remaining_capacity(), m_byterate - m_S_outpos);
   87|  10.2k|      BufferStuffer output_this_round(output_stuffer.next(bytes_in_this_round));
   88|       |
   89|       |      // If necessary, try to get aligned with the sponge state's 64-bit integer array
   90|  10.2k|      for(; !output_this_round.full() && m_S_outpos % 8 != 0; ++m_S_outpos) {
  ------------------
  |  Branch (90:13): [True: 10.2k, False: 0]
  |  Branch (90:42): [True: 0, False: 10.2k]
  ------------------
   91|      0|         output_this_round.next_byte() = static_cast<uint8_t>(m_S[m_S_outpos / 8] >> (8 * (m_S_outpos % 8)));
   92|      0|      }
   93|       |
   94|       |      // Read out as many aligned 64-bit integer values as possible
   95|  70.0k|      for(; output_this_round.remaining_capacity() >= 8; m_S_outpos += 8) {
  ------------------
  |  Branch (95:13): [True: 59.7k, False: 10.2k]
  ------------------
   96|  59.7k|         store_le(m_S[m_S_outpos / 8], output_this_round.next(8).data());
   97|  59.7k|      }
   98|       |
   99|       |      // Read remaining output data, causing misalignment, if necessary
  100|  10.2k|      for(; !output_this_round.full(); ++m_S_outpos) {
  ------------------
  |  Branch (100:13): [True: 0, False: 10.2k]
  ------------------
  101|      0|         output_this_round.next_byte() = static_cast<uint8_t>(m_S[m_S_outpos / 8] >> (8 * (m_S_outpos % 8)));
  102|      0|      }
  103|       |
  104|       |      // We reached the end of a sponge state block... permute() and start over
  105|  10.2k|      if(m_S_outpos == m_byterate) {
  ------------------
  |  Branch (105:10): [True: 0, False: 10.2k]
  ------------------
  106|      0|         permute();
  107|      0|         m_S_outpos = 0;
  108|      0|      }
  109|  10.2k|   }
  110|  10.2k|}
_ZN5Botan18Keccak_Permutation6finishEv:
  112|  10.2k|void Keccak_Permutation::finish() {
  113|       |   // append the first bit of the final padding after the custom padding
  114|  10.2k|   uint8_t init_pad = static_cast<uint8_t>(m_custom_padding | uint64_t(1) << m_custom_padding_bit_len);
  115|  10.2k|   m_S[m_S_inpos / 8] ^= static_cast<uint64_t>(init_pad) << (8 * (m_S_inpos % 8));
  116|       |
  117|       |   // final bit of the padding of the last block
  118|  10.2k|   m_S[(m_byterate / 8) - 1] ^= static_cast<uint64_t>(0x80) << 56;
  119|       |
  120|  10.2k|   permute();
  121|  10.2k|}
_ZN5Botan18Keccak_Permutation7permuteEv:
  123|  24.4k|void Keccak_Permutation::permute() {
  124|       |#if defined(BOTAN_HAS_KECCAK_PERM_BMI2)
  125|       |   if(CPUID::has_bmi2()) {
  126|       |      return permute_bmi2();
  127|       |   }
  128|       |#endif
  129|       |
  130|  24.4k|   static const uint64_t RC[24] = {0x0000000000000001, 0x0000000000008082, 0x800000000000808A, 0x8000000080008000,
  131|  24.4k|                                   0x000000000000808B, 0x0000000080000001, 0x8000000080008081, 0x8000000000008009,
  132|  24.4k|                                   0x000000000000008A, 0x0000000000000088, 0x0000000080008009, 0x000000008000000A,
  133|  24.4k|                                   0x000000008000808B, 0x800000000000008B, 0x8000000000008089, 0x8000000000008003,
  134|  24.4k|                                   0x8000000000008002, 0x8000000000000080, 0x000000000000800A, 0x800000008000000A,
  135|  24.4k|                                   0x8000000080008081, 0x8000000000008080, 0x0000000080000001, 0x8000000080008008};
  136|       |
  137|  24.4k|   uint64_t T[25];
  138|       |
  139|   317k|   for(size_t i = 0; i != 24; i += 2) {
  ------------------
  |  Branch (139:22): [True: 293k, False: 24.4k]
  ------------------
  140|   293k|      Keccak_Permutation_round(T, m_S.data(), RC[i + 0]);
  141|   293k|      Keccak_Permutation_round(m_S.data(), T, RC[i + 1]);
  142|   293k|   }
  143|  24.4k|}

_ZN5Botan4EMSA6createENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   35|  20.6k|std::unique_ptr<EMSA> EMSA::create(std::string_view algo_spec) {
   36|  20.6k|   SCAN_Name req(algo_spec);
   37|       |
   38|  20.6k|#if defined(BOTAN_HAS_EMSA_PKCS1)
   39|  20.6k|   if(req.algo_name() == "EMSA_PKCS1" || req.algo_name() == "PKCS1v15" || req.algo_name() == "EMSA-PKCS1-v1_5" ||
  ------------------
  |  Branch (39:7): [True: 0, False: 20.6k]
  |  Branch (39:42): [True: 0, False: 20.6k]
  |  Branch (39:75): [True: 20.6k, False: 0]
  ------------------
   40|  20.6k|      req.algo_name() == "EMSA3") {
  ------------------
  |  Branch (40:7): [True: 0, False: 0]
  ------------------
   41|  20.6k|      if(req.arg_count() == 2 && req.arg(0) == "Raw") {
  ------------------
  |  Branch (41:10): [True: 20.6k, False: 0]
  |  Branch (41:10): [True: 20.6k, False: 0]
  |  Branch (41:34): [True: 20.6k, False: 0]
  ------------------
   42|  20.6k|         return std::make_unique<EMSA_PKCS1v15_Raw>(req.arg(1));
   43|  20.6k|      } else if(req.arg_count() == 1) {
  ------------------
  |  Branch (43:17): [True: 0, False: 0]
  ------------------
   44|      0|         if(req.arg(0) == "Raw") {
  ------------------
  |  Branch (44:13): [True: 0, False: 0]
  ------------------
   45|      0|            return std::make_unique<EMSA_PKCS1v15_Raw>();
   46|      0|         } else {
   47|      0|            if(auto hash = HashFunction::create(req.arg(0))) {
  ------------------
  |  Branch (47:21): [True: 0, False: 0]
  ------------------
   48|      0|               return std::make_unique<EMSA_PKCS1v15>(std::move(hash));
   49|      0|            }
   50|      0|         }
   51|      0|      }
   52|  20.6k|   }
   53|      0|#endif
   54|       |
   55|      0|#if defined(BOTAN_HAS_EMSA_PSSR)
   56|      0|   if(req.algo_name() == "PSS_Raw" || req.algo_name() == "PSSR_Raw") {
  ------------------
  |  Branch (56:7): [True: 0, False: 0]
  |  Branch (56:39): [True: 0, False: 0]
  ------------------
   57|      0|      if(req.arg_count_between(1, 3) && req.arg(1, "MGF1") == "MGF1") {
  ------------------
  |  Branch (57:10): [True: 0, False: 0]
  |  Branch (57:10): [True: 0, False: 0]
  |  Branch (57:41): [True: 0, False: 0]
  ------------------
   58|      0|         if(auto hash = HashFunction::create(req.arg(0))) {
  ------------------
  |  Branch (58:18): [True: 0, False: 0]
  ------------------
   59|      0|            if(req.arg_count() == 3) {
  ------------------
  |  Branch (59:16): [True: 0, False: 0]
  ------------------
   60|      0|               const size_t salt_size = req.arg_as_integer(2, 0);
   61|      0|               return std::make_unique<PSSR_Raw>(std::move(hash), salt_size);
   62|      0|            } else {
   63|      0|               return std::make_unique<PSSR_Raw>(std::move(hash));
   64|      0|            }
   65|      0|         }
   66|      0|      }
   67|      0|   }
   68|       |
   69|      0|   if(req.algo_name() == "PSS" || req.algo_name() == "PSSR" || req.algo_name() == "EMSA-PSS" ||
  ------------------
  |  Branch (69:7): [True: 0, False: 0]
  |  Branch (69:35): [True: 0, False: 0]
  |  Branch (69:64): [True: 0, False: 0]
  ------------------
   70|      0|      req.algo_name() == "PSS-MGF1" || req.algo_name() == "EMSA4") {
  ------------------
  |  Branch (70:7): [True: 0, False: 0]
  |  Branch (70:40): [True: 0, False: 0]
  ------------------
   71|      0|      if(req.arg_count_between(1, 3) && req.arg(1, "MGF1") == "MGF1") {
  ------------------
  |  Branch (71:10): [True: 0, False: 0]
  |  Branch (71:10): [True: 0, False: 0]
  |  Branch (71:41): [True: 0, False: 0]
  ------------------
   72|      0|         if(auto hash = HashFunction::create(req.arg(0))) {
  ------------------
  |  Branch (72:18): [True: 0, False: 0]
  ------------------
   73|      0|            if(req.arg_count() == 3) {
  ------------------
  |  Branch (73:16): [True: 0, False: 0]
  ------------------
   74|      0|               const size_t salt_size = req.arg_as_integer(2, 0);
   75|      0|               return std::make_unique<PSSR>(std::move(hash), salt_size);
   76|      0|            } else {
   77|      0|               return std::make_unique<PSSR>(std::move(hash));
   78|      0|            }
   79|      0|         }
   80|      0|      }
   81|      0|   }
   82|      0|#endif
   83|       |
   84|       |#if defined(BOTAN_HAS_ISO_9796)
   85|       |   if(req.algo_name() == "ISO_9796_DS2") {
   86|       |      if(req.arg_count_between(1, 3)) {
   87|       |         if(auto hash = HashFunction::create(req.arg(0))) {
   88|       |            const size_t salt_size = req.arg_as_integer(2, hash->output_length());
   89|       |            const bool implicit = req.arg(1, "exp") == "imp";
   90|       |            return std::make_unique<ISO_9796_DS2>(std::move(hash), implicit, salt_size);
   91|       |         }
   92|       |      }
   93|       |   }
   94|       |   //ISO-9796-2 DS 3 is deterministic and DS2 without a salt
   95|       |   if(req.algo_name() == "ISO_9796_DS3") {
   96|       |      if(req.arg_count_between(1, 2)) {
   97|       |         if(auto hash = HashFunction::create(req.arg(0))) {
   98|       |            const bool implicit = req.arg(1, "exp") == "imp";
   99|       |            return std::make_unique<ISO_9796_DS3>(std::move(hash), implicit);
  100|       |         }
  101|       |      }
  102|       |   }
  103|       |#endif
  104|       |
  105|       |#if defined(BOTAN_HAS_EMSA_X931)
  106|       |   if(req.algo_name() == "EMSA_X931" || req.algo_name() == "EMSA2" || req.algo_name() == "X9.31") {
  107|       |      if(req.arg_count() == 1) {
  108|       |         if(auto hash = HashFunction::create(req.arg(0))) {
  109|       |            return std::make_unique<EMSA_X931>(std::move(hash));
  110|       |         }
  111|       |      }
  112|       |   }
  113|       |#endif
  114|       |
  115|      0|#if defined(BOTAN_HAS_EMSA_RAW)
  116|      0|   if(req.algo_name() == "Raw") {
  ------------------
  |  Branch (116:7): [True: 0, False: 0]
  ------------------
  117|      0|      if(req.arg_count() == 0) {
  ------------------
  |  Branch (117:10): [True: 0, False: 0]
  ------------------
  118|      0|         return std::make_unique<EMSA_Raw>();
  119|      0|      } else {
  120|      0|         auto hash = HashFunction::create(req.arg(0));
  121|      0|         if(hash) {
  ------------------
  |  Branch (121:13): [True: 0, False: 0]
  ------------------
  122|      0|            return std::make_unique<EMSA_Raw>(hash->output_length());
  123|      0|         }
  124|      0|      }
  125|      0|   }
  126|      0|#endif
  127|       |
  128|      0|   return nullptr;
  129|      0|}
_ZN5Botan4EMSA15create_or_throwENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
  131|  20.6k|std::unique_ptr<EMSA> EMSA::create_or_throw(std::string_view algo_spec) {
  132|  20.6k|   auto emsa = EMSA::create(algo_spec);
  133|  20.6k|   if(emsa) {
  ------------------
  |  Branch (133:7): [True: 20.6k, False: 0]
  ------------------
  134|  20.6k|      return emsa;
  135|  20.6k|   }
  136|      0|   throw Algorithm_Not_Found(algo_spec);
  137|  20.6k|}

_ZN5Botan17EMSA_PKCS1v15_RawC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   81|  20.6k|EMSA_PKCS1v15_Raw::EMSA_PKCS1v15_Raw(std::string_view hash_algo) {
   82|  20.6k|   std::unique_ptr<HashFunction> hash(HashFunction::create_or_throw(hash_algo));
   83|  20.6k|   m_hash_id = pkcs_hash_id(hash_algo);
   84|  20.6k|   m_hash_name = hash->name();
   85|  20.6k|   m_hash_output_len = hash->output_length();
   86|  20.6k|}
_ZN5Botan17EMSA_PKCS1v15_Raw6updateEPKhm:
   88|  20.6k|void EMSA_PKCS1v15_Raw::update(const uint8_t input[], size_t length) {
   89|  20.6k|   m_message += std::make_pair(input, length);
   90|  20.6k|}
_ZN5Botan17EMSA_PKCS1v15_Raw8raw_dataEv:
   92|  20.6k|std::vector<uint8_t> EMSA_PKCS1v15_Raw::raw_data() {
   93|  20.6k|   std::vector<uint8_t> ret;
   94|  20.6k|   std::swap(ret, m_message);
   95|       |
   96|  20.6k|   if(m_hash_output_len > 0 && ret.size() != m_hash_output_len) {
  ------------------
  |  Branch (96:7): [True: 20.6k, False: 0]
  |  Branch (96:32): [True: 0, False: 20.6k]
  ------------------
   97|      0|      throw Encoding_Error("EMSA_PKCS1v15_Raw::encoding_of: Bad input length");
   98|      0|   }
   99|       |
  100|  20.6k|   return ret;
  101|  20.6k|}
_ZN5Botan17EMSA_PKCS1v15_Raw6verifyERKNSt3__16vectorIhNS1_9allocatorIhEEEES7_m:
  109|  15.4k|bool EMSA_PKCS1v15_Raw::verify(const std::vector<uint8_t>& coded, const std::vector<uint8_t>& raw, size_t key_bits) {
  110|  15.4k|   if(m_hash_output_len > 0 && raw.size() != m_hash_output_len) {
  ------------------
  |  Branch (110:7): [True: 15.4k, False: 0]
  |  Branch (110:32): [True: 0, False: 15.4k]
  ------------------
  111|      0|      return false;
  112|      0|   }
  113|       |
  114|  15.4k|   try {
  115|  15.4k|      return coded == pkcs1v15_sig_encoding(raw, key_bits, m_hash_id);
  116|  15.4k|   } catch(...) {
  117|  1.11k|      return false;
  118|  1.11k|   }
  119|  15.4k|}
emsa_pkcs1.cpp:_ZN5Botan12_GLOBAL__N_121pkcs1v15_sig_encodingERKNSt3__16vectorIhNS1_9allocatorIhEEEEmNS1_4spanIKhLm18446744073709551615EEE:
   20|  15.4k|                                           std::span<const uint8_t> hash_id) {
   21|  15.4k|   const size_t output_length = output_bits / 8;
   22|       |
   23|  15.4k|   if(output_length < hash_id.size() + msg.size() + 2 + 8) {
  ------------------
  |  Branch (23:7): [True: 1.11k, False: 14.3k]
  ------------------
   24|  1.11k|      throw Encoding_Error("pkcs1v15_sig_encoding: Output length is too small");
   25|  1.11k|   }
   26|       |
   27|  14.3k|   std::vector<uint8_t> padded(output_length);
   28|  14.3k|   BufferStuffer stuffer(padded);
   29|       |
   30|  14.3k|   stuffer.append(0x01);
   31|  14.3k|   stuffer.append(0xFF, stuffer.remaining_capacity() - (1 + hash_id.size() + msg.size()));
   32|  14.3k|   stuffer.append(0x00);
   33|  14.3k|   stuffer.append(hash_id);
   34|  14.3k|   stuffer.append(msg);
   35|  14.3k|   BOTAN_ASSERT_NOMSG(stuffer.full());
  ------------------
  |  |   60|  14.3k|   do {                                                                     \
  |  |   61|  14.3k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 14.3k]
  |  |  ------------------
  |  |   62|  14.3k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  14.3k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 14.3k]
  |  |  ------------------
  ------------------
   36|       |
   37|  14.3k|   return padded;
   38|  15.4k|}

_ZN5Botan12pkcs_hash_idENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
   78|  20.6k|std::vector<uint8_t> pkcs_hash_id(std::string_view name) {
   79|       |   // Special case for SSL/TLS RSA signatures
   80|  20.6k|   if(name == "Parallel(MD5,SHA-1)") {
  ------------------
  |  Branch (80:7): [True: 0, False: 20.6k]
  ------------------
   81|      0|      return std::vector<uint8_t>();
   82|      0|   }
   83|       |
   84|       |   // If you add a value to this function, also update test_hash_id.cpp
   85|       |
   86|  20.6k|   if(name == "MD5") {
  ------------------
  |  Branch (86:7): [True: 237, False: 20.4k]
  ------------------
   87|    237|      return std::vector<uint8_t>(MD5_PKCS_ID, MD5_PKCS_ID + sizeof(MD5_PKCS_ID));
   88|    237|   }
   89|       |
   90|  20.4k|   if(name == "RIPEMD-160") {
  ------------------
  |  Branch (90:7): [True: 792, False: 19.6k]
  ------------------
   91|    792|      return std::vector<uint8_t>(RIPEMD_160_PKCS_ID, RIPEMD_160_PKCS_ID + sizeof(RIPEMD_160_PKCS_ID));
   92|    792|   }
   93|       |
   94|  19.6k|   if(name == "SHA-1") {
  ------------------
  |  Branch (94:7): [True: 1.00k, False: 18.6k]
  ------------------
   95|  1.00k|      return std::vector<uint8_t>(SHA_1_PKCS_ID, SHA_1_PKCS_ID + sizeof(SHA_1_PKCS_ID));
   96|  1.00k|   }
   97|       |
   98|  18.6k|   if(name == "SHA-224") {
  ------------------
  |  Branch (98:7): [True: 3.68k, False: 14.9k]
  ------------------
   99|  3.68k|      return std::vector<uint8_t>(SHA_224_PKCS_ID, SHA_224_PKCS_ID + sizeof(SHA_224_PKCS_ID));
  100|  3.68k|   }
  101|       |
  102|  14.9k|   if(name == "SHA-256") {
  ------------------
  |  Branch (102:7): [True: 7.94k, False: 6.98k]
  ------------------
  103|  7.94k|      return std::vector<uint8_t>(SHA_256_PKCS_ID, SHA_256_PKCS_ID + sizeof(SHA_256_PKCS_ID));
  104|  7.94k|   }
  105|       |
  106|  6.98k|   if(name == "SHA-384") {
  ------------------
  |  Branch (106:7): [True: 1.01k, False: 5.96k]
  ------------------
  107|  1.01k|      return std::vector<uint8_t>(SHA_384_PKCS_ID, SHA_384_PKCS_ID + sizeof(SHA_384_PKCS_ID));
  108|  1.01k|   }
  109|       |
  110|  5.96k|   if(name == "SHA-512") {
  ------------------
  |  Branch (110:7): [True: 2.56k, False: 3.40k]
  ------------------
  111|  2.56k|      return std::vector<uint8_t>(SHA_512_PKCS_ID, SHA_512_PKCS_ID + sizeof(SHA_512_PKCS_ID));
  112|  2.56k|   }
  113|       |
  114|  3.40k|   if(name == "SHA-512-256") {
  ------------------
  |  Branch (114:7): [True: 0, False: 3.40k]
  ------------------
  115|      0|      return std::vector<uint8_t>(SHA_512_256_PKCS_ID, SHA_512_256_PKCS_ID + sizeof(SHA_512_256_PKCS_ID));
  116|      0|   }
  117|       |
  118|  3.40k|   if(name == "SHA-3(224)") {
  ------------------
  |  Branch (118:7): [True: 0, False: 3.40k]
  ------------------
  119|      0|      return std::vector<uint8_t>(SHA3_224_PKCS_ID, SHA3_224_PKCS_ID + sizeof(SHA3_224_PKCS_ID));
  120|      0|   }
  121|       |
  122|  3.40k|   if(name == "SHA-3(256)") {
  ------------------
  |  Branch (122:7): [True: 2.67k, False: 723]
  ------------------
  123|  2.67k|      return std::vector<uint8_t>(SHA3_256_PKCS_ID, SHA3_256_PKCS_ID + sizeof(SHA3_256_PKCS_ID));
  124|  2.67k|   }
  125|       |
  126|    723|   if(name == "SHA-3(384)") {
  ------------------
  |  Branch (126:7): [True: 0, False: 723]
  ------------------
  127|      0|      return std::vector<uint8_t>(SHA3_384_PKCS_ID, SHA3_384_PKCS_ID + sizeof(SHA3_384_PKCS_ID));
  128|      0|   }
  129|       |
  130|    723|   if(name == "SHA-3(512)") {
  ------------------
  |  Branch (130:7): [True: 665, False: 58]
  ------------------
  131|    665|      return std::vector<uint8_t>(SHA3_512_PKCS_ID, SHA3_512_PKCS_ID + sizeof(SHA3_512_PKCS_ID));
  132|    665|   }
  133|       |
  134|     58|   if(name == "SM3") {
  ------------------
  |  Branch (134:7): [True: 58, False: 0]
  ------------------
  135|     58|      return std::vector<uint8_t>(SM3_PKCS_ID, SM3_PKCS_ID + sizeof(SM3_PKCS_ID));
  136|     58|   }
  137|       |
  138|      0|   throw Invalid_Argument("No PKCS #1 identifier for " + std::string(name));
  139|     58|}

_ZN5Botan15RawHashFunction8add_dataENSt3__14spanIKhLm18446744073709551615EEE:
   13|  42.2k|void RawHashFunction::add_data(std::span<const uint8_t> input) {
   14|  42.2k|   m_bits += std::make_pair(input.data(), input.size());
   15|  42.2k|}
_ZN5Botan15RawHashFunction12final_resultENSt3__14spanIhLm18446744073709551615EEE:
   17|  42.2k|void RawHashFunction::final_result(std::span<uint8_t> out) {
   18|  42.2k|   if(m_output_length > 0 && m_bits.size() != m_output_length) {
  ------------------
  |  Branch (18:7): [True: 35.3k, False: 6.87k]
  |  Branch (18:30): [True: 0, False: 35.3k]
  ------------------
   19|      0|      m_bits.clear();
   20|      0|      throw Invalid_Argument("Raw padding was configured to use a " + std::to_string(m_output_length) +
   21|      0|                             " byte hash but instead was used for a " + std::to_string(m_bits.size()) + " byte hash");
   22|      0|   }
   23|       |
   24|  42.2k|   copy_mem(out.data(), m_bits.data(), m_bits.size());
   25|  42.2k|   m_bits.clear();
   26|  42.2k|}
_ZNK5Botan15RawHashFunction13output_lengthEv:
   40|  42.2k|size_t RawHashFunction::output_length() const {
   41|  42.2k|   if(m_output_length > 0) {
  ------------------
  |  Branch (41:7): [True: 35.3k, False: 6.87k]
  ------------------
   42|  35.3k|      return m_output_length;
   43|  35.3k|   }
   44|  6.87k|   return m_bits.size();
   45|  42.2k|}

_ZN5Botan12DL_PublicKeyC2ERKNS_8DL_GroupERKNS_6BigIntE:
   39|  6.87k|      m_group(group), m_public_key(public_key) {}

_ZN5Botan8DL_GroupC2ERKNS_6BigIntES3_S3_:
  312|  6.93k|DL_Group::DL_Group(const BigInt& p, const BigInt& q, const BigInt& g) {
  313|  6.93k|   m_data = std::make_shared<DL_Group_Data>(p, q, g, DL_Group_Source::ExternalSource);
  314|  6.93k|}
_ZNK5Botan8DL_Group4dataEv:
  316|  87.9k|const DL_Group_Data& DL_Group::data() const {
  317|  87.9k|   if(m_data) {
  ------------------
  |  Branch (317:7): [True: 87.9k, False: 0]
  ------------------
  318|  87.9k|      return *m_data;
  319|  87.9k|   }
  320|       |
  321|      0|   throw Invalid_State("DL_Group uninitialized");
  322|  87.9k|}
_ZNK5Botan8DL_Group5get_gEv:
  433|  6.67k|const BigInt& DL_Group::get_g() const {
  434|  6.67k|   return data().g();
  435|  6.67k|}
_ZNK5Botan8DL_Group5get_qEv:
  440|  13.5k|const BigInt& DL_Group::get_q() const {
  441|  13.5k|   return data().q();
  442|  13.5k|}
_ZNK5Botan8DL_Group5has_qEv:
  448|  6.87k|bool DL_Group::has_q() const {
  449|  6.87k|   return data().q_is_set();
  450|  6.87k|}
_ZNK5Botan8DL_Group6q_bitsEv:
  460|  6.86k|size_t DL_Group::q_bits() const {
  461|  6.86k|   data().assert_q_is_set("q_bits");
  462|  6.86k|   return data().q_bits();
  463|  6.86k|}
_ZNK5Botan8DL_Group7q_bytesEv:
  465|  6.87k|size_t DL_Group::q_bytes() const {
  466|  6.87k|   data().assert_q_is_set("q_bytes");
  467|  6.87k|   return data().q_bytes();
  468|  6.87k|}
_ZNK5Botan8DL_Group14multiply_mod_qERKNS_6BigIntES3_:
  502|  13.3k|BigInt DL_Group::multiply_mod_q(const BigInt& x, const BigInt& y) const {
  503|  13.3k|   data().assert_q_is_set("multiply_mod_q");
  504|  13.3k|   return data().multiply_mod_q(x, y);
  505|  13.3k|}
_ZNK5Botan8DL_Group18multi_exponentiateERKNS_6BigIntES3_S3_:
  517|  6.67k|BigInt DL_Group::multi_exponentiate(const BigInt& x, const BigInt& y, const BigInt& z) const {
  518|  6.67k|   return monty_multi_exp(data().monty_params_p(), get_g(), x, y, z);
  519|  6.67k|}
_ZNK5Botan13DL_Group_Data1gEv:
   52|  6.67k|      const BigInt& g() const { return m_g; }
_ZNK5Botan13DL_Group_Data1qEv:
   50|  13.5k|      const BigInt& q() const { return m_q; }
_ZNK5Botan13DL_Group_Data14monty_params_pEv:
   64|  6.67k|      std::shared_ptr<const Montgomery_Params> monty_params_p() const { return m_monty_params; }
_ZNK5Botan13DL_Group_Data8q_is_setEv:
   90|  33.9k|      bool q_is_set() const { return m_q_bits > 0; }
_ZNK5Botan13DL_Group_Data15assert_q_is_setENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   92|  27.0k|      void assert_q_is_set(std::string_view function) const {
   93|  27.0k|         if(q_is_set() == false) {
  ------------------
  |  Branch (93:13): [True: 0, False: 27.0k]
  ------------------
   94|      0|            throw Invalid_State(fmt("DL_Group::{}: q is not set for this group", function));
   95|      0|         }
   96|  27.0k|      }
_ZNK5Botan13DL_Group_Data6q_bitsEv:
   68|  6.86k|      size_t q_bits() const { return m_q_bits; }
_ZNK5Botan13DL_Group_Data7q_bytesEv:
   72|  6.87k|      size_t q_bytes() const { return (m_q_bits + 7) / 8; }
_ZNK5Botan13DL_Group_Data14multiply_mod_qERKNS_6BigIntES3_:
   60|  13.3k|      BigInt multiply_mod_q(const BigInt& x, const BigInt& y) const { return m_mod_q.multiply(x, y); }
_ZN5Botan13DL_Group_DataC2ERKNS_6BigIntES3_S3_NS_15DL_Group_SourceE:
   28|  6.93k|            m_p(p),
   29|  6.93k|            m_q(q),
   30|  6.93k|            m_g(g),
   31|  6.93k|            m_mod_p(p),
   32|  6.93k|            m_mod_q(q),
   33|  6.93k|            m_monty_params(std::make_shared<Montgomery_Params>(m_p, m_mod_p)),
   34|  6.93k|            m_monty(monty_precompute(m_monty_params, m_g, /*window bits=*/4)),
   35|  6.93k|            m_p_bits(p.bits()),
   36|  6.93k|            m_q_bits(q.bits()),
   37|  6.93k|            m_estimated_strength(dl_work_factor(m_p_bits)),
   38|  6.93k|            m_exponent_bits(dl_exponent_size(m_p_bits)),
   39|  6.93k|            m_source(source) {}
_ZN5Botan13DL_Group_DataD2Ev:
   41|  6.87k|      ~DL_Group_Data() = default;

_ZNK5Botan13DSA_PublicKey17message_part_sizeEv:
   23|  6.87k|size_t DSA_PublicKey::message_part_size() const {
   24|  6.87k|   return m_public_key->group().q_bytes();
   25|  6.87k|}
_ZN5Botan13DSA_PublicKeyC1ERKNS_8DL_GroupERKNS_6BigIntE:
   61|  6.87k|DSA_PublicKey::DSA_PublicKey(const DL_Group& group, const BigInt& y) {
   62|  6.87k|   m_public_key = std::make_shared<DL_PublicKey>(group, y);
   63|       |
   64|  6.87k|   BOTAN_ARG_CHECK(m_public_key->group().has_q(), "Q parameter must be set for DSA");
  ------------------
  |  |   30|  6.87k|   do {                                                          \
  |  |   31|  6.87k|      if(!(expr))                                                \
  |  |  ------------------
  |  |  |  Branch (31:10): [True: 0, False: 6.87k]
  |  |  ------------------
  |  |   32|  6.87k|         Botan::throw_invalid_argument(msg, __func__, __FILE__); \
  |  |   33|  6.87k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (33:12): [Folded, False: 6.87k]
  |  |  ------------------
  ------------------
   65|  6.87k|}
_ZNK5Botan13DSA_PublicKey22create_verification_opENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  252|  6.87k|                                                                            std::string_view provider) const {
  253|  6.87k|   if(provider == "base" || provider.empty()) {
  ------------------
  |  Branch (253:7): [True: 0, False: 6.87k]
  |  Branch (253:29): [True: 6.87k, False: 0]
  ------------------
  254|  6.87k|      return std::make_unique<DSA_Verification_Operation>(this->m_public_key, params);
  255|  6.87k|   }
  256|      0|   throw Provider_Not_Found(algo_name(), provider);
  257|  6.87k|}
dsa.cpp:_ZN5Botan12_GLOBAL__N_126DSA_Verification_OperationC2ERKNSt3__110shared_ptrIKNS_12DL_PublicKeyEEENS2_17basic_string_viewIcNS2_11char_traitsIcEEEE:
  206|  6.87k|            PK_Ops::Verification_with_Hash(emsa), m_key(key) {}
dsa.cpp:_ZN5Botan12_GLOBAL__N_126DSA_Verification_Operation6verifyEPKhmS3_m:
  217|  6.87k|bool DSA_Verification_Operation::verify(const uint8_t msg[], size_t msg_len, const uint8_t sig[], size_t sig_len) {
  218|  6.87k|   const auto group = m_key->group();
  219|       |
  220|  6.87k|   const BigInt& q = group.get_q();
  221|  6.87k|   const size_t q_bytes = q.bytes();
  222|       |
  223|  6.87k|   if(sig_len != 2 * q_bytes) {
  ------------------
  |  Branch (223:7): [True: 10, False: 6.86k]
  ------------------
  224|     10|      return false;
  225|     10|   }
  226|       |
  227|  6.86k|   BigInt r(sig, q_bytes);
  228|  6.86k|   BigInt s(sig + q_bytes, q_bytes);
  229|  6.86k|   BigInt i = BigInt::from_bytes_with_max_bits(msg, msg_len, group.q_bits());
  230|  6.86k|   if(i >= q) {
  ------------------
  |  Branch (230:7): [True: 3.10k, False: 3.76k]
  ------------------
  231|  3.10k|      i -= q;
  232|  3.10k|   }
  233|       |
  234|  6.86k|   if(r <= 0 || r >= q || s <= 0 || s >= q) {
  ------------------
  |  Branch (234:7): [True: 10, False: 6.85k]
  |  Branch (234:17): [True: 43, False: 6.81k]
  |  Branch (234:27): [True: 10, False: 6.80k]
  |  Branch (234:37): [True: 128, False: 6.67k]
  ------------------
  235|    191|      return false;
  236|    191|   }
  237|       |
  238|  6.67k|   s = inverse_mod(s, q);
  239|       |
  240|  6.67k|   const BigInt sr = group.multiply_mod_q(s, r);
  241|  6.67k|   const BigInt si = group.multiply_mod_q(s, i);
  242|       |
  243|  6.67k|   s = group.multi_exponentiate(si, m_key->public_key(), sr);
  244|       |
  245|       |   // s is too big for Barrett, and verification doesn't need to be const-time
  246|  6.67k|   return (s % group.get_q() == r);
  247|  6.86k|}

_ZN5Botan8CurveGFp11choose_reprERKNS_6BigIntES3_S3_:
  564|      8|std::shared_ptr<CurveGFp_Repr> CurveGFp::choose_repr(const BigInt& p, const BigInt& a, const BigInt& b) {
  565|      8|   if(p == prime_p192()) {
  ------------------
  |  Branch (565:7): [True: 0, False: 8]
  ------------------
  566|      0|      return std::make_shared<CurveGFp_P192>(a, b);
  567|      0|   }
  568|      8|   if(p == prime_p224()) {
  ------------------
  |  Branch (568:7): [True: 0, False: 8]
  ------------------
  569|      0|      return std::make_shared<CurveGFp_P224>(a, b);
  570|      0|   }
  571|      8|   if(p == prime_p256()) {
  ------------------
  |  Branch (571:7): [True: 1, False: 7]
  ------------------
  572|      1|      return std::make_shared<CurveGFp_P256>(a, b);
  573|      1|   }
  574|      7|   if(p == prime_p384()) {
  ------------------
  |  Branch (574:7): [True: 1, False: 6]
  ------------------
  575|      1|      return std::make_shared<CurveGFp_P384>(a, b);
  576|      1|   }
  577|      6|   if(p == prime_p521()) {
  ------------------
  |  Branch (577:7): [True: 1, False: 5]
  ------------------
  578|      1|      return std::make_shared<CurveGFp_P521>(a, b);
  579|      1|   }
  580|       |
  581|      5|   return std::make_shared<CurveGFp_Montgomery>(p, a, b);
  582|      6|}
curve_gfp.cpp:_ZN5Botan12_GLOBAL__N_113CurveGFp_NISTC2EmRKNS_6BigIntES4_:
  157|      3|            m_1(1), m_a(a), m_b(b), m_p_words((p_bits + BOTAN_MP_WORD_BITS - 1) / BOTAN_MP_WORD_BITS) {
  ------------------
  |  |   50|      3|#define BOTAN_MP_WORD_BITS 64
  ------------------
                          m_1(1), m_a(a), m_b(b), m_p_words((p_bits + BOTAN_MP_WORD_BITS - 1) / BOTAN_MP_WORD_BITS) {
  ------------------
  |  |   50|      3|#define BOTAN_MP_WORD_BITS 64
  ------------------
  158|       |         // All Solinas prime curves are assumed a == -3
  159|      3|      }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST5get_aEv:
  165|    290|      const BigInt& get_a() const override { return m_a; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST5get_bEv:
  167|    290|      const BigInt& get_b() const override { return m_b; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST11get_p_wordsEv:
  171|  4.80M|      size_t get_p_words() const override { return m_p_words; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST11get_ws_sizeEv:
  173|   169M|      size_t get_ws_size() const override { return 2 * m_p_words; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST6is_oneERKNS_6BigIntE:
  179|  26.9k|      bool is_one(const BigInt& x) const override { return x == 1; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST9a_is_zeroEv:
  161|  9.61M|      bool a_is_zero() const override { return false; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST12a_is_minus_3Ev:
  163|  9.61M|      bool a_is_minus_3() const override { return true; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST9get_a_repEv:
  175|  55.6k|      const BigInt& get_a_rep() const override { return m_a; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST9get_b_repEv:
  177|   111k|      const BigInt& get_b_rep() const override { return m_b; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST9get_1_repEv:
  169|   108k|      const BigInt& get_1_rep() const override { return m_1; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST12to_curve_repERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  181|  56.2k|      void to_curve_rep(BigInt& x, secure_vector<word>& ws) const override { redc_mod_p(x, ws); }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST14from_curve_repERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  183|   193k|      void from_curve_rep(BigInt& x, secure_vector<word>& ws) const override { redc_mod_p(x, ws); }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST15curve_mul_wordsERNS_6BigIntEPKmmRKS2_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  217|  81.4M|   BigInt& z, const word x_w[], size_t x_size, const BigInt& y, secure_vector<word>& ws) const {
  218|  81.4M|   BOTAN_DEBUG_ASSERT(y.sig_words() <= m_p_words);
  ------------------
  |  |   99|  81.4M|      do {                          \
  |  |  100|  81.4M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 81.4M]
  |  |  ------------------
  ------------------
  219|       |
  220|  81.4M|   if(ws.size() < get_ws_size()) {
  ------------------
  |  Branch (220:7): [True: 0, False: 81.4M]
  ------------------
  221|      0|      ws.resize(get_ws_size());
  222|      0|   }
  223|       |
  224|  81.4M|   const size_t output_size = 2 * m_p_words;
  225|  81.4M|   if(z.size() < output_size) {
  ------------------
  |  Branch (225:7): [True: 2.16M, False: 79.2M]
  ------------------
  226|  2.16M|      z.grow_to(output_size);
  227|  2.16M|   }
  228|       |
  229|  81.4M|   bigint_mul(z.mutable_data(),
  230|  81.4M|              z.size(),
  231|  81.4M|              x_w,
  232|  81.4M|              x_size,
  233|  81.4M|              std::min(m_p_words, x_size),
  234|  81.4M|              y.data(),
  235|  81.4M|              y.size(),
  236|  81.4M|              std::min(m_p_words, y.size()),
  237|  81.4M|              ws.data(),
  238|  81.4M|              ws.size());
  239|       |
  240|  81.4M|   this->redc_mod_p(z, ws);
  241|  81.4M|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST15curve_sqr_wordsERNS_6BigIntEPKmmRNSt3__16vectorImNS_16secure_allocatorImEEEE:
  243|  73.3M|void CurveGFp_NIST::curve_sqr_words(BigInt& z, const word x[], size_t x_size, secure_vector<word>& ws) const {
  244|  73.3M|   if(ws.size() < get_ws_size()) {
  ------------------
  |  Branch (244:7): [True: 81.9k, False: 73.2M]
  ------------------
  245|  81.9k|      ws.resize(get_ws_size());
  246|  81.9k|   }
  247|       |
  248|  73.3M|   const size_t output_size = 2 * m_p_words;
  249|  73.3M|   if(z.size() < output_size) {
  ------------------
  |  Branch (249:7): [True: 10.0M, False: 63.2M]
  ------------------
  250|  10.0M|      z.grow_to(output_size);
  251|  10.0M|   }
  252|       |
  253|  73.3M|   bigint_sqr(z.mutable_data(), output_size, x, x_size, std::min(m_p_words, x_size), ws.data(), ws.size());
  254|       |
  255|  73.3M|   this->redc_mod_p(z, ws);
  256|  73.3M|}
curve_gfp.cpp:_ZN5Botan12_GLOBAL__N_113CurveGFp_P256C2ERKNS_6BigIntES4_:
  289|      1|      CurveGFp_P256(const BigInt& a, const BigInt& b) : CurveGFp_NIST(256, a, b) {}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P2565get_pEv:
  291|  2.96M|      const BigInt& get_p() const override { return prime_p256(); }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P25614invert_elementERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  299|  16.4k|BigInt CurveGFp_P256::invert_element(const BigInt& x, secure_vector<word>& ws) const {
  300|  16.4k|   BigInt r, p2, p4, p8, p16, p32, tmp;
  301|       |
  302|  16.4k|   curve_sqr(r, x, ws);
  303|       |
  304|  16.4k|   curve_mul(p2, r, x, ws);
  305|  16.4k|   curve_sqr(r, p2, ws);
  306|  16.4k|   curve_sqr_tmp(r, tmp, ws);
  307|       |
  308|  16.4k|   curve_mul(p4, r, p2, ws);
  309|       |
  310|  16.4k|   curve_sqr(r, p4, ws);
  311|  65.6k|   for(size_t i = 0; i != 3; ++i) {
  ------------------
  |  Branch (311:22): [True: 49.2k, False: 16.4k]
  ------------------
  312|  49.2k|      curve_sqr_tmp(r, tmp, ws);
  313|  49.2k|   }
  314|  16.4k|   curve_mul(p8, r, p4, ws);
  315|       |
  316|  16.4k|   curve_sqr(r, p8, ws);
  317|   131k|   for(size_t i = 0; i != 7; ++i) {
  ------------------
  |  Branch (317:22): [True: 114k, False: 16.4k]
  ------------------
  318|   114k|      curve_sqr_tmp(r, tmp, ws);
  319|   114k|   }
  320|  16.4k|   curve_mul(p16, r, p8, ws);
  321|       |
  322|  16.4k|   curve_sqr(r, p16, ws);
  323|   262k|   for(size_t i = 0; i != 15; ++i) {
  ------------------
  |  Branch (323:22): [True: 246k, False: 16.4k]
  ------------------
  324|   246k|      curve_sqr_tmp(r, tmp, ws);
  325|   246k|   }
  326|  16.4k|   curve_mul(p32, r, p16, ws);
  327|       |
  328|  16.4k|   curve_sqr(r, p32, ws);
  329|   524k|   for(size_t i = 0; i != 31; ++i) {
  ------------------
  |  Branch (329:22): [True: 508k, False: 16.4k]
  ------------------
  330|   508k|      curve_sqr_tmp(r, tmp, ws);
  331|   508k|   }
  332|  16.4k|   curve_mul_tmp(r, x, tmp, ws);
  333|       |
  334|  2.11M|   for(size_t i = 0; i != 32 * 4; ++i) {
  ------------------
  |  Branch (334:22): [True: 2.09M, False: 16.4k]
  ------------------
  335|  2.09M|      curve_sqr_tmp(r, tmp, ws);
  336|  2.09M|   }
  337|  16.4k|   curve_mul_tmp(r, p32, tmp, ws);
  338|       |
  339|   541k|   for(size_t i = 0; i != 32; ++i) {
  ------------------
  |  Branch (339:22): [True: 524k, False: 16.4k]
  ------------------
  340|   524k|      curve_sqr_tmp(r, tmp, ws);
  341|   524k|   }
  342|  16.4k|   curve_mul_tmp(r, p32, tmp, ws);
  343|       |
  344|   278k|   for(size_t i = 0; i != 16; ++i) {
  ------------------
  |  Branch (344:22): [True: 262k, False: 16.4k]
  ------------------
  345|   262k|      curve_sqr_tmp(r, tmp, ws);
  346|   262k|   }
  347|  16.4k|   curve_mul_tmp(r, p16, tmp, ws);
  348|   147k|   for(size_t i = 0; i != 8; ++i) {
  ------------------
  |  Branch (348:22): [True: 131k, False: 16.4k]
  ------------------
  349|   131k|      curve_sqr_tmp(r, tmp, ws);
  350|   131k|   }
  351|  16.4k|   curve_mul_tmp(r, p8, tmp, ws);
  352|       |
  353|  82.0k|   for(size_t i = 0; i != 4; ++i) {
  ------------------
  |  Branch (353:22): [True: 65.6k, False: 16.4k]
  ------------------
  354|  65.6k|      curve_sqr_tmp(r, tmp, ws);
  355|  65.6k|   }
  356|  16.4k|   curve_mul_tmp(r, p4, tmp, ws);
  357|       |
  358|  49.2k|   for(size_t i = 0; i != 2; ++i) {
  ------------------
  |  Branch (358:22): [True: 32.8k, False: 16.4k]
  ------------------
  359|  32.8k|      curve_sqr_tmp(r, tmp, ws);
  360|  32.8k|   }
  361|  16.4k|   curve_mul_tmp(r, p2, tmp, ws);
  362|       |
  363|  49.2k|   for(size_t i = 0; i != 2; ++i) {
  ------------------
  |  Branch (363:22): [True: 32.8k, False: 16.4k]
  ------------------
  364|  32.8k|      curve_sqr_tmp(r, tmp, ws);
  365|  32.8k|   }
  366|  16.4k|   curve_mul_tmp(r, x, tmp, ws);
  367|       |
  368|  16.4k|   return r;
  369|  16.4k|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST13curve_sqr_tmpERNS_6BigIntES3_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  197|  19.3M|      void curve_sqr_tmp(BigInt& x, BigInt& tmp, secure_vector<word>& ws) const {
  198|  19.3M|         curve_sqr(tmp, x, ws);
  199|  19.3M|         x.swap(tmp);
  200|  19.3M|      }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_NIST13curve_mul_tmpERNS_6BigIntERKS2_S3_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  192|   649k|      void curve_mul_tmp(BigInt& x, const BigInt& y, BigInt& tmp, secure_vector<word>& ws) const {
  193|   649k|         curve_mul(tmp, x, y, ws);
  194|   649k|         x.swap(tmp);
  195|   649k|      }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P25610redc_mod_pERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  294|  32.6M|      void redc_mod_p(BigInt& x, secure_vector<word>& ws) const override { redc_p256(x, ws); }
curve_gfp.cpp:_ZN5Botan12_GLOBAL__N_113CurveGFp_P384C2ERKNS_6BigIntES4_:
  376|      1|      CurveGFp_P384(const BigInt& a, const BigInt& b) : CurveGFp_NIST(384, a, b) {}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P3845get_pEv:
  378|  8.80M|      const BigInt& get_p() const override { return prime_p384(); }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P38414invert_elementERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  386|  30.5k|BigInt CurveGFp_P384::invert_element(const BigInt& x, secure_vector<word>& ws) const {
  387|       |   // From https://briansmith.org/ecc-inversion-addition-chains-01
  388|       |
  389|  30.5k|   BigInt r, x2, x3, x15, x30, tmp, rl;
  390|       |
  391|  30.5k|   r = x;
  392|  30.5k|   curve_sqr_tmp(r, tmp, ws);
  393|  30.5k|   curve_mul_tmp(r, x, tmp, ws);
  394|  30.5k|   x2 = r;
  395|       |
  396|  30.5k|   curve_sqr_tmp(r, tmp, ws);
  397|  30.5k|   curve_mul_tmp(r, x, tmp, ws);
  398|       |
  399|  30.5k|   x3 = r;
  400|       |
  401|   122k|   for(size_t i = 0; i != 3; ++i) {
  ------------------
  |  Branch (401:22): [True: 91.7k, False: 30.5k]
  ------------------
  402|  91.7k|      curve_sqr_tmp(r, tmp, ws);
  403|  91.7k|   }
  404|  30.5k|   curve_mul_tmp(r, x3, tmp, ws);
  405|       |
  406|  30.5k|   rl = r;
  407|   214k|   for(size_t i = 0; i != 6; ++i) {
  ------------------
  |  Branch (407:22): [True: 183k, False: 30.5k]
  ------------------
  408|   183k|      curve_sqr_tmp(r, tmp, ws);
  409|   183k|   }
  410|  30.5k|   curve_mul_tmp(r, rl, tmp, ws);
  411|       |
  412|   122k|   for(size_t i = 0; i != 3; ++i) {
  ------------------
  |  Branch (412:22): [True: 91.7k, False: 30.5k]
  ------------------
  413|  91.7k|      curve_sqr_tmp(r, tmp, ws);
  414|  91.7k|   }
  415|  30.5k|   curve_mul_tmp(r, x3, tmp, ws);
  416|       |
  417|  30.5k|   x15 = r;
  418|   489k|   for(size_t i = 0; i != 15; ++i) {
  ------------------
  |  Branch (418:22): [True: 458k, False: 30.5k]
  ------------------
  419|   458k|      curve_sqr_tmp(r, tmp, ws);
  420|   458k|   }
  421|  30.5k|   curve_mul_tmp(r, x15, tmp, ws);
  422|       |
  423|  30.5k|   x30 = r;
  424|   948k|   for(size_t i = 0; i != 30; ++i) {
  ------------------
  |  Branch (424:22): [True: 917k, False: 30.5k]
  ------------------
  425|   917k|      curve_sqr_tmp(r, tmp, ws);
  426|   917k|   }
  427|  30.5k|   curve_mul_tmp(r, x30, tmp, ws);
  428|       |
  429|  30.5k|   rl = r;
  430|  1.86M|   for(size_t i = 0; i != 60; ++i) {
  ------------------
  |  Branch (430:22): [True: 1.83M, False: 30.5k]
  ------------------
  431|  1.83M|      curve_sqr_tmp(r, tmp, ws);
  432|  1.83M|   }
  433|  30.5k|   curve_mul_tmp(r, rl, tmp, ws);
  434|       |
  435|  30.5k|   rl = r;
  436|  3.70M|   for(size_t i = 0; i != 120; ++i) {
  ------------------
  |  Branch (436:22): [True: 3.67M, False: 30.5k]
  ------------------
  437|  3.67M|      curve_sqr_tmp(r, tmp, ws);
  438|  3.67M|   }
  439|  30.5k|   curve_mul_tmp(r, rl, tmp, ws);
  440|       |
  441|   489k|   for(size_t i = 0; i != 15; ++i) {
  ------------------
  |  Branch (441:22): [True: 458k, False: 30.5k]
  ------------------
  442|   458k|      curve_sqr_tmp(r, tmp, ws);
  443|   458k|   }
  444|  30.5k|   curve_mul_tmp(r, x15, tmp, ws);
  445|       |
  446|   979k|   for(size_t i = 0; i != 31; ++i) {
  ------------------
  |  Branch (446:22): [True: 948k, False: 30.5k]
  ------------------
  447|   948k|      curve_sqr_tmp(r, tmp, ws);
  448|   948k|   }
  449|  30.5k|   curve_mul_tmp(r, x30, tmp, ws);
  450|       |
  451|  91.7k|   for(size_t i = 0; i != 2; ++i) {
  ------------------
  |  Branch (451:22): [True: 61.1k, False: 30.5k]
  ------------------
  452|  61.1k|      curve_sqr_tmp(r, tmp, ws);
  453|  61.1k|   }
  454|  30.5k|   curve_mul_tmp(r, x2, tmp, ws);
  455|       |
  456|  2.90M|   for(size_t i = 0; i != 94; ++i) {
  ------------------
  |  Branch (456:22): [True: 2.87M, False: 30.5k]
  ------------------
  457|  2.87M|      curve_sqr_tmp(r, tmp, ws);
  458|  2.87M|   }
  459|  30.5k|   curve_mul_tmp(r, x30, tmp, ws);
  460|       |
  461|  91.7k|   for(size_t i = 0; i != 2; ++i) {
  ------------------
  |  Branch (461:22): [True: 61.1k, False: 30.5k]
  ------------------
  462|  61.1k|      curve_sqr_tmp(r, tmp, ws);
  463|  61.1k|   }
  464|       |
  465|  30.5k|   curve_mul_tmp(r, x, tmp, ws);
  466|       |
  467|  30.5k|   return r;
  468|  30.5k|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P38410redc_mod_pERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  381|  93.9M|      void redc_mod_p(BigInt& x, secure_vector<word>& ws) const override { redc_p384(x, ws); }
curve_gfp.cpp:_ZN5Botan12_GLOBAL__N_113CurveGFp_P521C2ERKNS_6BigIntES4_:
  475|      1|      CurveGFp_P521(const BigInt& a, const BigInt& b) : CurveGFp_NIST(521, a, b) {}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P5215get_pEv:
  477|  2.68M|      const BigInt& get_p() const override { return prime_p521(); }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P52114invert_elementERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  485|  6.88k|BigInt CurveGFp_P521::invert_element(const BigInt& x, secure_vector<word>& ws) const {
  486|       |   // Addition chain from https://eprint.iacr.org/2014/852.pdf section
  487|       |
  488|  6.88k|   BigInt r;
  489|  6.88k|   BigInt rl;
  490|  6.88k|   BigInt a7;
  491|  6.88k|   BigInt tmp;
  492|       |
  493|  6.88k|   curve_sqr(r, x, ws);
  494|  6.88k|   curve_mul_tmp(r, x, tmp, ws);
  495|       |
  496|  6.88k|   curve_sqr_tmp(r, tmp, ws);
  497|  6.88k|   curve_mul_tmp(r, x, tmp, ws);
  498|       |
  499|  6.88k|   rl = r;
  500|       |
  501|  27.5k|   for(size_t i = 0; i != 3; ++i) {
  ------------------
  |  Branch (501:22): [True: 20.6k, False: 6.88k]
  ------------------
  502|  20.6k|      curve_sqr_tmp(r, tmp, ws);
  503|  20.6k|   }
  504|  6.88k|   curve_mul_tmp(r, rl, tmp, ws);
  505|       |
  506|  6.88k|   curve_sqr_tmp(r, tmp, ws);
  507|  6.88k|   curve_mul_tmp(r, x, tmp, ws);
  508|  6.88k|   a7 = r;  // need this value later
  509|       |
  510|  6.88k|   curve_sqr_tmp(r, tmp, ws);
  511|  6.88k|   curve_mul_tmp(r, x, tmp, ws);
  512|       |
  513|  6.88k|   rl = r;
  514|  61.9k|   for(size_t i = 0; i != 8; ++i) {
  ------------------
  |  Branch (514:22): [True: 55.0k, False: 6.88k]
  ------------------
  515|  55.0k|      curve_sqr_tmp(r, tmp, ws);
  516|  55.0k|   }
  517|  6.88k|   curve_mul_tmp(r, rl, tmp, ws);
  518|       |
  519|  6.88k|   rl = r;
  520|   117k|   for(size_t i = 0; i != 16; ++i) {
  ------------------
  |  Branch (520:22): [True: 110k, False: 6.88k]
  ------------------
  521|   110k|      curve_sqr_tmp(r, tmp, ws);
  522|   110k|   }
  523|  6.88k|   curve_mul_tmp(r, rl, tmp, ws);
  524|       |
  525|  6.88k|   rl = r;
  526|   227k|   for(size_t i = 0; i != 32; ++i) {
  ------------------
  |  Branch (526:22): [True: 220k, False: 6.88k]
  ------------------
  527|   220k|      curve_sqr_tmp(r, tmp, ws);
  528|   220k|   }
  529|  6.88k|   curve_mul_tmp(r, rl, tmp, ws);
  530|       |
  531|  6.88k|   rl = r;
  532|   447k|   for(size_t i = 0; i != 64; ++i) {
  ------------------
  |  Branch (532:22): [True: 440k, False: 6.88k]
  ------------------
  533|   440k|      curve_sqr_tmp(r, tmp, ws);
  534|   440k|   }
  535|  6.88k|   curve_mul_tmp(r, rl, tmp, ws);
  536|       |
  537|  6.88k|   rl = r;
  538|   887k|   for(size_t i = 0; i != 128; ++i) {
  ------------------
  |  Branch (538:22): [True: 881k, False: 6.88k]
  ------------------
  539|   881k|      curve_sqr_tmp(r, tmp, ws);
  540|   881k|   }
  541|  6.88k|   curve_mul_tmp(r, rl, tmp, ws);
  542|       |
  543|  6.88k|   rl = r;
  544|  1.76M|   for(size_t i = 0; i != 256; ++i) {
  ------------------
  |  Branch (544:22): [True: 1.76M, False: 6.88k]
  ------------------
  545|  1.76M|      curve_sqr_tmp(r, tmp, ws);
  546|  1.76M|   }
  547|  6.88k|   curve_mul_tmp(r, rl, tmp, ws);
  548|       |
  549|  55.0k|   for(size_t i = 0; i != 7; ++i) {
  ------------------
  |  Branch (549:22): [True: 48.1k, False: 6.88k]
  ------------------
  550|  48.1k|      curve_sqr_tmp(r, tmp, ws);
  551|  48.1k|   }
  552|  6.88k|   curve_mul_tmp(r, a7, tmp, ws);
  553|       |
  554|  20.6k|   for(size_t i = 0; i != 2; ++i) {
  ------------------
  |  Branch (554:22): [True: 13.7k, False: 6.88k]
  ------------------
  555|  13.7k|      curve_sqr_tmp(r, tmp, ws);
  556|  13.7k|   }
  557|  6.88k|   curve_mul_tmp(r, x, tmp, ws);
  558|       |
  559|  6.88k|   return r;
  560|  6.88k|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_113CurveGFp_P52110redc_mod_pERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
  480|  28.3M|      void redc_mod_p(BigInt& x, secure_vector<word>& ws) const override { redc_p521(x, ws); }
curve_gfp.cpp:_ZN5Botan12_GLOBAL__N_119CurveGFp_MontgomeryC2ERKNS_6BigIntES4_S4_:
   24|      5|            m_p(p), m_a(a), m_b(b), m_p_words(m_p.sig_words()), m_p_dash(monty_inverse(m_p.word_at(0))) {
   25|      5|         Modular_Reducer mod_p(m_p);
   26|       |
   27|      5|         m_r.set_bit(m_p_words * BOTAN_MP_WORD_BITS);
  ------------------
  |  |   50|      5|#define BOTAN_MP_WORD_BITS 64
  ------------------
   28|      5|         m_r = mod_p.reduce(m_r);
   29|       |
   30|      5|         m_r2 = mod_p.square(m_r);
   31|      5|         m_r3 = mod_p.multiply(m_r, m_r2);
   32|      5|         m_a_r = mod_p.multiply(m_r, m_a);
   33|      5|         m_b_r = mod_p.multiply(m_r, m_b);
   34|       |
   35|      5|         m_a_is_zero = m_a.is_zero();
   36|      5|         m_a_is_minus_3 = (m_a + 3 == m_p);
   37|      5|      }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery5get_pEv:
   47|  3.12M|      const BigInt& get_p() const override { return m_p; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery5get_aEv:
   43|  4.42k|      const BigInt& get_a() const override { return m_a; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery5get_bEv:
   45|  4.42k|      const BigInt& get_b() const override { return m_b; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery11get_p_wordsEv:
   57|  1.06M|      size_t get_p_words() const override { return m_p_words; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery11get_ws_sizeEv:
   59|  32.5M|      size_t get_ws_size() const override { return 2 * m_p_words; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery6is_oneERKNS_6BigIntE:
   55|  15.9k|      bool is_one(const BigInt& x) const override { return x == m_r; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery9a_is_zeroEv:
   39|  2.03M|      bool a_is_zero() const override { return m_a_is_zero; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery12a_is_minus_3Ev:
   41|   844k|      bool a_is_minus_3() const override { return m_a_is_minus_3; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery9get_a_repEv:
   49|   459k|      const BigInt& get_a_rep() const override { return m_a_r; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery9get_b_repEv:
   51|  45.5k|      const BigInt& get_b_rep() const override { return m_b_r; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery9get_1_repEv:
   53|  42.8k|      const BigInt& get_1_rep() const override { return m_r; }
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery14invert_elementERKNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
   86|  16.4k|BigInt CurveGFp_Montgomery::invert_element(const BigInt& x, secure_vector<word>& ws) const {
   87|       |   // Should we use Montgomery inverse instead?
   88|  16.4k|   const BigInt inv = inverse_mod(x, m_p);
   89|  16.4k|   BigInt res;
   90|  16.4k|   curve_mul(res, inv, m_r3, ws);
   91|  16.4k|   return res;
   92|  16.4k|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery12to_curve_repERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
   94|  33.0k|void CurveGFp_Montgomery::to_curve_rep(BigInt& x, secure_vector<word>& ws) const {
   95|  33.0k|   const BigInt tx = x;
   96|  33.0k|   curve_mul(x, tx, m_r2, ws);
   97|  33.0k|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery14from_curve_repERNS_6BigIntERNSt3__16vectorImNS_16secure_allocatorImEEEE:
   99|  85.6k|void CurveGFp_Montgomery::from_curve_rep(BigInt& z, secure_vector<word>& ws) const {
  100|  85.6k|   if(ws.size() < get_ws_size()) {
  ------------------
  |  Branch (100:7): [True: 8.85k, False: 76.8k]
  ------------------
  101|  8.85k|      ws.resize(get_ws_size());
  102|  8.85k|   }
  103|       |
  104|  85.6k|   const size_t output_size = 2 * m_p_words;
  105|  85.6k|   if(z.size() < output_size) {
  ------------------
  |  Branch (105:7): [True: 1.08k, False: 84.5k]
  ------------------
  106|  1.08k|      z.grow_to(output_size);
  107|  1.08k|   }
  108|       |
  109|  85.6k|   bigint_monty_redc(z.mutable_data(), m_p.data(), m_p_words, m_p_dash, ws.data(), ws.size());
  110|  85.6k|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery15curve_mul_wordsERNS_6BigIntEPKmmRKS2_RNSt3__16vectorImNS_16secure_allocatorImEEEE:
  113|  16.8M|   BigInt& z, const word x_w[], size_t x_size, const BigInt& y, secure_vector<word>& ws) const {
  114|  16.8M|   BOTAN_DEBUG_ASSERT(y.sig_words() <= m_p_words);
  ------------------
  |  |   99|  16.8M|      do {                          \
  |  |  100|  16.8M|      } while(0)
  |  |  ------------------
  |  |  |  Branch (100:15): [Folded, False: 16.8M]
  |  |  ------------------
  ------------------
  115|       |
  116|  16.8M|   if(ws.size() < get_ws_size()) {
  ------------------
  |  Branch (116:7): [True: 0, False: 16.8M]
  ------------------
  117|      0|      ws.resize(get_ws_size());
  118|      0|   }
  119|       |
  120|  16.8M|   const size_t output_size = 2 * m_p_words;
  121|  16.8M|   if(z.size() < output_size) {
  ------------------
  |  Branch (121:7): [True: 742k, False: 16.0M]
  ------------------
  122|   742k|      z.grow_to(output_size);
  123|   742k|   }
  124|       |
  125|  16.8M|   bigint_mul(z.mutable_data(),
  126|  16.8M|              z.size(),
  127|  16.8M|              x_w,
  128|  16.8M|              x_size,
  129|  16.8M|              std::min(m_p_words, x_size),
  130|  16.8M|              y.data(),
  131|  16.8M|              y.size(),
  132|  16.8M|              std::min(m_p_words, y.size()),
  133|  16.8M|              ws.data(),
  134|  16.8M|              ws.size());
  135|       |
  136|  16.8M|   bigint_monty_redc(z.mutable_data(), m_p.data(), m_p_words, m_p_dash, ws.data(), ws.size());
  137|  16.8M|}
curve_gfp.cpp:_ZNK5Botan12_GLOBAL__N_119CurveGFp_Montgomery15curve_sqr_wordsERNS_6BigIntEPKmmRNSt3__16vectorImNS_16secure_allocatorImEEEE:
  139|  12.5M|void CurveGFp_Montgomery::curve_sqr_words(BigInt& z, const word x[], size_t x_size, secure_vector<word>& ws) const {
  140|  12.5M|   if(ws.size() < get_ws_size()) {
  ------------------
  |  Branch (140:7): [True: 31.2k, False: 12.5M]
  ------------------
  141|  31.2k|      ws.resize(get_ws_size());
  142|  31.2k|   }
  143|       |
  144|  12.5M|   const size_t output_size = 2 * m_p_words;
  145|  12.5M|   if(z.size() < output_size) {
  ------------------
  |  Branch (145:7): [True: 542k, False: 12.0M]
  ------------------
  146|   542k|      z.grow_to(output_size);
  147|   542k|   }
  148|       |
  149|  12.5M|   bigint_sqr(z.mutable_data(), z.size(), x, x_size, std::min(m_p_words, x_size), ws.data(), ws.size());
  150|       |
  151|  12.5M|   bigint_monty_redc(z.mutable_data(), m_p.data(), m_p_words, m_p_dash, ws.data(), ws.size());
  152|  12.5M|}

_ZN5Botan8EC_Group13ec_group_dataEv:
  289|  44.6k|EC_Group_Data_Map& EC_Group::ec_group_data() {
  290|       |   /*
  291|       |   * This exists purely to ensure the allocator is constructed before g_ec_data,
  292|       |   * which ensures that its destructor runs after ~g_ec_data is complete.
  293|       |   */
  294|       |
  295|  44.6k|   static Allocator_Initializer g_init_allocator;
  296|  44.6k|   static EC_Group_Data_Map g_ec_data;
  297|  44.6k|   return g_ec_data;
  298|  44.6k|}
_ZN5Botan8EC_Group18load_EC_group_infoEPKcS2_S2_S2_S2_S2_RKNS_3OIDE:
  312|      8|                                                            const OID& oid) {
  313|      8|   const BigInt p(p_str);
  314|      8|   const BigInt a(a_str);
  315|      8|   const BigInt b(b_str);
  316|      8|   const BigInt g_x(g_x_str);
  317|      8|   const BigInt g_y(g_y_str);
  318|      8|   const BigInt order(order_str);
  319|      8|   const BigInt cofactor(1);  // implicit
  320|       |
  321|      8|   return std::make_shared<EC_Group_Data>(p, a, b, g_x, g_y, order, cofactor, oid, EC_Group_Source::Builtin);
  322|      8|}
_ZN5Botan8EC_GroupD2Ev:
  400|   129k|EC_Group::~EC_Group() = default;
_ZN5Botan8EC_GroupC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
  409|  44.6k|EC_Group::EC_Group(std::string_view str) {
  410|  44.6k|   if(str.empty()) {
  ------------------
  |  Branch (410:7): [True: 0, False: 44.6k]
  ------------------
  411|      0|      return;  // no initialization / uninitialized
  412|      0|   }
  413|       |
  414|  44.6k|   try {
  415|  44.6k|      const OID oid = OID::from_string(str);
  416|  44.6k|      if(oid.has_value()) {
  ------------------
  |  Branch (416:10): [True: 44.6k, False: 0]
  ------------------
  417|  44.6k|         m_data = ec_group_data().lookup(oid);
  418|  44.6k|      }
  419|  44.6k|   } catch(...) {}
  420|       |
  421|  44.6k|   if(m_data == nullptr) {
  ------------------
  |  Branch (421:7): [True: 0, False: 44.6k]
  ------------------
  422|      0|      if(str.size() > 30 && str.substr(0, 29) == "-----BEGIN EC PARAMETERS-----") {
  ------------------
  |  Branch (422:10): [True: 0, False: 0]
  |  Branch (422:29): [True: 0, False: 0]
  ------------------
  423|       |         // OK try it as PEM ...
  424|      0|         secure_vector<uint8_t> ber = PEM_Code::decode_check_label(str, "EC PARAMETERS");
  425|       |
  426|      0|         auto data = BER_decode_EC_group(ber.data(), ber.size(), EC_Group_Source::ExternalSource);
  427|      0|         this->m_data = data.first;
  428|      0|         this->m_explicit_encoding = data.second;
  429|      0|      }
  430|      0|   }
  431|       |
  432|  44.6k|   if(m_data == nullptr) {
  ------------------
  |  Branch (432:7): [True: 0, False: 44.6k]
  ------------------
  433|      0|      throw Invalid_Argument(fmt("Unknown ECC group '{}'", str));
  434|      0|   }
  435|  44.6k|}
_ZNK5Botan8EC_Group4dataEv:
  461|   512k|const EC_Group_Data& EC_Group::data() const {
  462|   512k|   if(m_data == nullptr) {
  ------------------
  |  Branch (462:7): [True: 0, False: 512k]
  ------------------
  463|      0|      throw Invalid_State("EC_Group uninitialized");
  464|      0|   }
  465|   512k|   return *m_data;
  466|   512k|}
_ZNK5Botan8EC_Group11get_p_bytesEv:
  480|  4.71k|size_t EC_Group::get_p_bytes() const {
  481|  4.71k|   return data().p_bytes();
  482|  4.71k|}
_ZNK5Botan8EC_Group14get_order_bitsEv:
  484|  35.3k|size_t EC_Group::get_order_bits() const {
  485|  35.3k|   return data().order_bits();
  486|  35.3k|}
_ZNK5Botan8EC_Group15get_order_bytesEv:
  488|  35.3k|size_t EC_Group::get_order_bytes() const {
  489|  35.3k|   return data().order_bytes();
  490|  35.3k|}
_ZNK5Botan8EC_Group5get_aEv:
  496|  4.71k|const BigInt& EC_Group::get_a() const {
  497|  4.71k|   return data().a();
  498|  4.71k|}
_ZNK5Botan8EC_Group5get_bEv:
  500|  4.71k|const BigInt& EC_Group::get_b() const {
  501|  4.71k|   return data().b();
  502|  4.71k|}
_ZNK5Botan8EC_Group14get_base_pointEv:
  504|  39.9k|const EC_Point& EC_Group::get_base_point() const {
  505|  39.9k|   return data().base_point();
  506|  39.9k|}
_ZNK5Botan8EC_Group9get_orderEv:
  508|   123k|const BigInt& EC_Group::get_order() const {
  509|   123k|   return data().order();
  510|   123k|}
_ZNK5Botan8EC_Group7get_g_xEv:
  512|  4.71k|const BigInt& EC_Group::get_g_x() const {
  513|  4.71k|   return data().g_x();
  514|  4.71k|}
_ZNK5Botan8EC_Group7get_g_yEv:
  516|  4.71k|const BigInt& EC_Group::get_g_y() const {
  517|  4.71k|   return data().g_y();
  518|  4.71k|}
_ZNK5Botan8EC_Group9mod_orderERKNS_6BigIntE:
  524|  69.5k|BigInt EC_Group::mod_order(const BigInt& k) const {
  525|  69.5k|   return data().mod_order(k);
  526|  69.5k|}
_ZNK5Botan8EC_Group18multiply_mod_orderERKNS_6BigIntES3_:
  532|  63.8k|BigInt EC_Group::multiply_mod_order(const BigInt& x, const BigInt& y) const {
  533|  63.8k|   return data().multiply_mod_order(x, y);
  534|  63.8k|}
_ZNK5Botan8EC_Group17inverse_mod_orderERKNS_6BigIntE:
  540|  31.9k|BigInt EC_Group::inverse_mod_order(const BigInt& x) const {
  541|  31.9k|   return data().inverse_mod_order(x);
  542|  31.9k|}
_ZNK5Botan8EC_Group13get_curve_oidEv:
  544|  44.6k|const OID& EC_Group::get_curve_oid() const {
  545|  44.6k|   return data().oid();
  546|  44.6k|}
_ZNK5Botan8EC_Group5pointERKNS_6BigIntES3_:
  565|  44.6k|EC_Point EC_Group::point(const BigInt& x, const BigInt& y) const {
  566|       |   // TODO: randomize the representation?
  567|  44.6k|   return EC_Point(data().curve(), x, y);
  568|  44.6k|}
_ZN5Botan17EC_Group_Data_Map6lookupERKNS_3OIDE:
  156|  44.6k|      std::shared_ptr<EC_Group_Data> lookup(const OID& oid) {
  157|  44.6k|         lock_guard_type<mutex_type> lock(m_mutex);
  158|       |
  159|   145k|         for(auto i : m_registered_curves) {
  ------------------
  |  Branch (159:21): [True: 145k, False: 8]
  ------------------
  160|   145k|            if(i->oid() == oid) {
  ------------------
  |  Branch (160:16): [True: 44.6k, False: 100k]
  ------------------
  161|  44.6k|               return i;
  162|  44.6k|            }
  163|   145k|         }
  164|       |
  165|       |         // Not found, check hardcoded data
  166|      8|         std::shared_ptr<EC_Group_Data> data = EC_Group::EC_group_info(oid);
  167|       |
  168|      8|         if(data) {
  ------------------
  |  Branch (168:13): [True: 8, False: 0]
  ------------------
  169|     28|            for(auto curve : m_registered_curves) {
  ------------------
  |  Branch (169:28): [True: 28, False: 8]
  ------------------
  170|     28|               if(curve->oid().empty() == true && curve->params_match(*data)) {
  ------------------
  |  Branch (170:19): [True: 0, False: 28]
  |  Branch (170:51): [True: 0, False: 0]
  ------------------
  171|      0|                  curve->set_oid(oid);
  172|      0|                  return curve;
  173|      0|               }
  174|     28|            }
  175|       |
  176|      8|            m_registered_curves.push_back(data);
  177|      8|            return data;
  178|      8|         }
  179|       |
  180|       |         // Nope, unknown curve
  181|      0|         return std::shared_ptr<EC_Group_Data>();
  182|      8|      }
_ZN5Botan13EC_Group_DataC2ERKNS_6BigIntES3_S3_S3_S3_S3_S3_RKNS_3OIDENS_15EC_Group_SourceE:
   41|      8|            m_curve(p, a, b),
   42|      8|            m_base_point(m_curve, g_x, g_y),
   43|      8|            m_g_x(g_x),
   44|      8|            m_g_y(g_y),
   45|      8|            m_order(order),
   46|      8|            m_cofactor(cofactor),
   47|      8|            m_mod_order(order),
   48|      8|            m_base_mult(m_base_point, m_mod_order),
   49|      8|            m_oid(oid),
   50|      8|            m_p_bits(p.bits()),
   51|      8|            m_order_bits(order.bits()),
   52|      8|            m_a_is_minus_3(a == p - 3),
   53|      8|            m_a_is_zero(a.is_zero()),
   54|      8|            m_source(source) {}
_ZNK5Botan13EC_Group_Data7p_bytesEv:
   95|  4.71k|      size_t p_bytes() const { return (m_p_bits + 7) / 8; }
_ZNK5Botan13EC_Group_Data10order_bitsEv:
   97|  35.3k|      size_t order_bits() const { return m_order_bits; }
_ZNK5Botan13EC_Group_Data11order_bytesEv:
   99|  35.3k|      size_t order_bytes() const { return (m_order_bits + 7) / 8; }
_ZNK5Botan13EC_Group_Data1aEv:
   81|  4.71k|      const BigInt& a() const { return m_curve.get_a(); }
_ZNK5Botan13EC_Group_Data1bEv:
   83|  4.71k|      const BigInt& b() const { return m_curve.get_b(); }
_ZNK5Botan13EC_Group_Data10base_pointEv:
  103|  39.9k|      const EC_Point& base_point() const { return m_base_point; }
_ZNK5Botan13EC_Group_Data5orderEv:
   85|   123k|      const BigInt& order() const { return m_order; }
_ZNK5Botan13EC_Group_Data3g_xEv:
   89|  4.71k|      const BigInt& g_x() const { return m_g_x; }
_ZNK5Botan13EC_Group_Data3g_yEv:
   91|  4.71k|      const BigInt& g_y() const { return m_g_y; }
_ZNK5Botan13EC_Group_Data9mod_orderERKNS_6BigIntE:
  109|  69.5k|      BigInt mod_order(const BigInt& x) const { return m_mod_order.reduce(x); }
_ZNK5Botan13EC_Group_Data18multiply_mod_orderERKNS_6BigIntES3_:
  113|  63.8k|      BigInt multiply_mod_order(const BigInt& x, const BigInt& y) const { return m_mod_order.multiply(x, y); }
_ZNK5Botan13EC_Group_Data17inverse_mod_orderERKNS_6BigIntE:
  119|  31.9k|      BigInt inverse_mod_order(const BigInt& x) const { return inverse_mod(x, m_order); }
_ZNK5Botan13EC_Group_Data3oidEv:
   77|   190k|      const OID& oid() const { return m_oid; }
_ZNK5Botan13EC_Group_Data5curveEv:
  101|  44.6k|      const CurveGFp& curve() const { return m_curve; }

_ZN5Botan8EC_Group13EC_group_infoERKNS_3OIDE:
   15|      8|std::shared_ptr<EC_Group_Data> EC_Group::EC_group_info(const OID& oid) {
   16|       |   // secp256r1
   17|      8|   if(oid == OID{1, 2, 840, 10045, 3, 1, 7}) {
  ------------------
  |  Branch (17:7): [True: 1, False: 7]
  ------------------
   18|      1|      return load_EC_group_info(
   19|      1|         "0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF",
   20|      1|         "0xFFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC",
   21|      1|         "0x5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B",
   22|      1|         "0x6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296",
   23|      1|         "0x4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5",
   24|      1|         "0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551",
   25|      1|         oid);
   26|      1|   }
   27|       |
   28|       |   // secp384r1
   29|      7|   if(oid == OID{1, 3, 132, 0, 34}) {
  ------------------
  |  Branch (29:7): [True: 1, False: 6]
  ------------------
   30|      1|      return load_EC_group_info(
   31|      1|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF",
   32|      1|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC",
   33|      1|         "0xB3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF",
   34|      1|         "0xAA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7",
   35|      1|         "0x3617DE4A96262C6F5D9E98BF9292DC29F8F41DBD289A147CE9DA3113B5F0B8C00A60B1CE1D7E819D7A431D7C90EA0E5F",
   36|      1|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973",
   37|      1|         oid);
   38|      1|   }
   39|       |
   40|       |   // secp521r1
   41|      6|   if(oid == OID{1, 3, 132, 0, 35}) {
  ------------------
  |  Branch (41:7): [True: 1, False: 5]
  ------------------
   42|      1|      return load_EC_group_info(
   43|      1|         "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
   44|      1|         "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC",
   45|      1|         "0x51953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00",
   46|      1|         "0xC6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66",
   47|      1|         "0x11839296A789A3BC0045C8A5FB42C7D1BD998F54449579B446817AFBD17273E662C97EE72995EF42640C550B9013FAD0761353C7086A272C24088BE94769FD16650",
   48|      1|         "0x1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409",
   49|      1|         oid);
   50|      1|   }
   51|       |
   52|       |   // brainpool160r1
   53|      5|   if(oid == OID{1, 3, 36, 3, 3, 2, 8, 1, 1, 1}) {
  ------------------
  |  Branch (53:7): [True: 0, False: 5]
  ------------------
   54|      0|      return load_EC_group_info(
   55|      0|         "0xE95E4A5F737059DC60DFC7AD95B3D8139515620F",
   56|      0|         "0x340E7BE2A280EB74E2BE61BADA745D97E8F7C300",
   57|      0|         "0x1E589A8595423412134FAA2DBDEC95C8D8675E58",
   58|      0|         "0xBED5AF16EA3F6A4F62938C4631EB5AF7BDBCDBC3",
   59|      0|         "0x1667CB477A1A8EC338F94741669C976316DA6321",
   60|      0|         "0xE95E4A5F737059DC60DF5991D45029409E60FC09",
   61|      0|         oid);
   62|      0|   }
   63|       |
   64|       |   // brainpool192r1
   65|      5|   if(oid == OID{1, 3, 36, 3, 3, 2, 8, 1, 1, 3}) {
  ------------------
  |  Branch (65:7): [True: 0, False: 5]
  ------------------
   66|      0|      return load_EC_group_info(
   67|      0|         "0xC302F41D932A36CDA7A3463093D18DB78FCE476DE1A86297",
   68|      0|         "0x6A91174076B1E0E19C39C031FE8685C1CAE040E5C69A28EF",
   69|      0|         "0x469A28EF7C28CCA3DC721D044F4496BCCA7EF4146FBF25C9",
   70|      0|         "0xC0A0647EAAB6A48753B033C56CB0F0900A2F5C4853375FD6",
   71|      0|         "0x14B690866ABD5BB88B5F4828C1490002E6773FA2FA299B8F",
   72|      0|         "0xC302F41D932A36CDA7A3462F9E9E916B5BE8F1029AC4ACC1",
   73|      0|         oid);
   74|      0|   }
   75|       |
   76|       |   // brainpool224r1
   77|      5|   if(oid == OID{1, 3, 36, 3, 3, 2, 8, 1, 1, 5}) {
  ------------------
  |  Branch (77:7): [True: 0, False: 5]
  ------------------
   78|      0|      return load_EC_group_info(
   79|      0|         "0xD7C134AA264366862A18302575D1D787B09F075797DA89F57EC8C0FF",
   80|      0|         "0x68A5E62CA9CE6C1C299803A6C1530B514E182AD8B0042A59CAD29F43",
   81|      0|         "0x2580F63CCFE44138870713B1A92369E33E2135D266DBB372386C400B",
   82|      0|         "0xD9029AD2C7E5CF4340823B2A87DC68C9E4CE3174C1E6EFDEE12C07D",
   83|      0|         "0x58AA56F772C0726F24C6B89E4ECDAC24354B9E99CAA3F6D3761402CD",
   84|      0|         "0xD7C134AA264366862A18302575D0FB98D116BC4B6DDEBCA3A5A7939F",
   85|      0|         oid);
   86|      0|   }
   87|       |
   88|       |   // brainpool256r1
   89|      5|   if(oid == OID{1, 3, 36, 3, 3, 2, 8, 1, 1, 7}) {
  ------------------
  |  Branch (89:7): [True: 1, False: 4]
  ------------------
   90|      1|      return load_EC_group_info(
   91|      1|         "0xA9FB57DBA1EEA9BC3E660A909D838D726E3BF623D52620282013481D1F6E5377",
   92|      1|         "0x7D5A0975FC2C3057EEF67530417AFFE7FB8055C126DC5C6CE94A4B44F330B5D9",
   93|      1|         "0x26DC5C6CE94A4B44F330B5D9BBD77CBF958416295CF7E1CE6BCCDC18FF8C07B6",
   94|      1|         "0x8BD2AEB9CB7E57CB2C4B482FFC81B7AFB9DE27E1E3BD23C23A4453BD9ACE3262",
   95|      1|         "0x547EF835C3DAC4FD97F8461A14611DC9C27745132DED8E545C1D54C72F046997",
   96|      1|         "0xA9FB57DBA1EEA9BC3E660A909D838D718C397AA3B561A6F7901E0E82974856A7",
   97|      1|         oid);
   98|      1|   }
   99|       |
  100|       |   // brainpool320r1
  101|      4|   if(oid == OID{1, 3, 36, 3, 3, 2, 8, 1, 1, 9}) {
  ------------------
  |  Branch (101:7): [True: 0, False: 4]
  ------------------
  102|      0|      return load_EC_group_info(
  103|      0|         "0xD35E472036BC4FB7E13C785ED201E065F98FCFA6F6F40DEF4F92B9EC7893EC28FCD412B1F1B32E27",
  104|      0|         "0x3EE30B568FBAB0F883CCEBD46D3F3BB8A2A73513F5EB79DA66190EB085FFA9F492F375A97D860EB4",
  105|      0|         "0x520883949DFDBC42D3AD198640688A6FE13F41349554B49ACC31DCCD884539816F5EB4AC8FB1F1A6",
  106|      0|         "0x43BD7E9AFB53D8B85289BCC48EE5BFE6F20137D10A087EB6E7871E2A10A599C710AF8D0D39E20611",
  107|      0|         "0x14FDD05545EC1CC8AB4093247F77275E0743FFED117182EAA9C77877AAAC6AC7D35245D1692E8EE1",
  108|      0|         "0xD35E472036BC4FB7E13C785ED201E065F98FCFA5B68F12A32D482EC7EE8658E98691555B44C59311",
  109|      0|         oid);
  110|      0|   }
  111|       |
  112|       |   // brainpool384r1
  113|      4|   if(oid == OID{1, 3, 36, 3, 3, 2, 8, 1, 1, 11}) {
  ------------------
  |  Branch (113:7): [True: 1, False: 3]
  ------------------
  114|      1|      return load_EC_group_info(
  115|      1|         "0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B412B1DA197FB71123ACD3A729901D1A71874700133107EC53",
  116|      1|         "0x7BC382C63D8C150C3C72080ACE05AFA0C2BEA28E4FB22787139165EFBA91F90F8AA5814A503AD4EB04A8C7DD22CE2826",
  117|      1|         "0x4A8C7DD22CE28268B39B55416F0447C2FB77DE107DCD2A62E880EA53EEB62D57CB4390295DBC9943AB78696FA504C11",
  118|      1|         "0x1D1C64F068CF45FFA2A63A81B7C13F6B8847A3E77EF14FE3DB7FCAFE0CBD10E8E826E03436D646AAEF87B2E247D4AF1E",
  119|      1|         "0x8ABE1D7520F9C2A45CB1EB8E95CFD55262B70B29FEEC5864E19C054FF99129280E4646217791811142820341263C5315",
  120|      1|         "0x8CB91E82A3386D280F5D6F7E50E641DF152F7109ED5456B31F166E6CAC0425A7CF3AB6AF6B7FC3103B883202E9046565",
  121|      1|         oid);
  122|      1|   }
  123|       |
  124|       |   // brainpool512r1
  125|      3|   if(oid == OID{1, 3, 36, 3, 3, 2, 8, 1, 1, 13}) {
  ------------------
  |  Branch (125:7): [True: 1, False: 2]
  ------------------
  126|      1|      return load_EC_group_info(
  127|      1|         "0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA703308717D4D9B009BC66842AECDA12AE6A380E62881FF2F2D82C68528AA6056583A48F3",
  128|      1|         "0x7830A3318B603B89E2327145AC234CC594CBDD8D3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CA",
  129|      1|         "0x3DF91610A83441CAEA9863BC2DED5D5AA8253AA10A2EF1C98B9AC8B57F1117A72BF2C7B9E7C1AC4D77FC94CADC083E67984050B75EBAE5DD2809BD638016F723",
  130|      1|         "0x81AEE4BDD82ED9645A21322E9C4C6A9385ED9F70B5D916C1B43B62EEF4D0098EFF3B1F78E2D0D48D50D1687B93B97D5F7C6D5047406A5E688B352209BCB9F822",
  131|      1|         "0x7DDE385D566332ECC0EABFA9CF7822FDF209F70024A57B1AA000C55B881F8111B2DCDE494A5F485E5BCA4BD88A2763AED1CA2B2FA8F0540678CD1E0F3AD80892",
  132|      1|         "0xAADD9DB8DBE9C48B3FD4E6AE33C9FC07CB308DB3B3C9D20ED6639CCA70330870553E5C414CA92619418661197FAC10471DB1D381085DDADDB58796829CA90069",
  133|      1|         oid);
  134|      1|   }
  135|       |
  136|       |   // frp256v1
  137|      2|   if(oid == OID{1, 2, 250, 1, 223, 101, 256, 1}) {
  ------------------
  |  Branch (137:7): [True: 0, False: 2]
  ------------------
  138|      0|      return load_EC_group_info(
  139|      0|         "0xF1FD178C0B3AD58F10126DE8CE42435B3961ADBCABC8CA6DE8FCF353D86E9C03",
  140|      0|         "0xF1FD178C0B3AD58F10126DE8CE42435B3961ADBCABC8CA6DE8FCF353D86E9C00",
  141|      0|         "0xEE353FCA5428A9300D4ABA754A44C00FDFEC0C9AE4B1A1803075ED967B7BB73F",
  142|      0|         "0xB6B3D4C356C139EB31183D4749D423958C27D2DCAF98B70164C97A2DD98F5CFF",
  143|      0|         "0x6142E0F7C8B204911F9271F0F3ECEF8C2701C307E8E4C9E183115A1554062CFB",
  144|      0|         "0xF1FD178C0B3AD58F10126DE8CE42435B53DC67E140D2BF941FFDD459C6D655E1",
  145|      0|         oid);
  146|      0|   }
  147|       |
  148|       |   // gost_256A
  149|      2|   if(oid == OID{1, 2, 643, 7, 1, 2, 1, 1, 1} || oid == OID{1, 2, 643, 2, 2, 35, 1} || oid == OID{1, 2, 643, 2, 2, 36, 0}) {
  ------------------
  |  Branch (149:7): [True: 0, False: 2]
  |  Branch (149:7): [True: 0, False: 2]
  |  Branch (149:50): [True: 0, False: 2]
  |  Branch (149:88): [True: 0, False: 2]
  ------------------
  150|      0|      return load_EC_group_info(
  151|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97",
  152|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94",
  153|      0|         "0xA6",
  154|      0|         "1",
  155|      0|         "0x8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14",
  156|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893",
  157|      0|         OID{1, 2, 643, 7, 1, 2, 1, 1, 1});
  158|      0|   }
  159|       |
  160|       |   // gost_512A
  161|      2|   if(oid == OID{1, 2, 643, 7, 1, 2, 1, 2, 1}) {
  ------------------
  |  Branch (161:7): [True: 0, False: 2]
  ------------------
  162|      0|      return load_EC_group_info(
  163|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7",
  164|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC4",
  165|      0|         "0xE8C2505DEDFC86DDC1BD0B2B6667F1DA34B82574761CB0E879BD081CFD0B6265EE3CB090F30D27614CB4574010DA90DD862EF9D4EBEE4761503190785A71C760",
  166|      0|         "3",
  167|      0|         "0x7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF1626BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4",
  168|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF27E69532F48D89116FF22B8D4E0560609B4B38ABFAD2B85DCACDB1411F10B275",
  169|      0|         oid);
  170|      0|   }
  171|       |
  172|       |   // secp160k1
  173|      2|   if(oid == OID{1, 3, 132, 0, 9}) {
  ------------------
  |  Branch (173:7): [True: 0, False: 2]
  ------------------
  174|      0|      return load_EC_group_info(
  175|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73",
  176|      0|         "0",
  177|      0|         "7",
  178|      0|         "0x3B4C382CE37AA192A4019E763036F4F5DD4D7EBB",
  179|      0|         "0x938CF935318FDCED6BC28286531733C3F03C4FEE",
  180|      0|         "0x100000000000000000001B8FA16DFAB9ACA16B6B3",
  181|      0|         oid);
  182|      0|   }
  183|       |
  184|       |   // secp160r1
  185|      2|   if(oid == OID{1, 3, 132, 0, 8}) {
  ------------------
  |  Branch (185:7): [True: 0, False: 2]
  ------------------
  186|      0|      return load_EC_group_info(
  187|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF",
  188|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC",
  189|      0|         "0x1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45",
  190|      0|         "0x4A96B5688EF573284664698968C38BB913CBFC82",
  191|      0|         "0x23A628553168947D59DCC912042351377AC5FB32",
  192|      0|         "0x100000000000000000001F4C8F927AED3CA752257",
  193|      0|         oid);
  194|      0|   }
  195|       |
  196|       |   // secp160r2
  197|      2|   if(oid == OID{1, 3, 132, 0, 30}) {
  ------------------
  |  Branch (197:7): [True: 0, False: 2]
  ------------------
  198|      0|      return load_EC_group_info(
  199|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73",
  200|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC70",
  201|      0|         "0xB4E134D3FB59EB8BAB57274904664D5AF50388BA",
  202|      0|         "0x52DCB034293A117E1F4FF11B30F7199D3144CE6D",
  203|      0|         "0xFEAFFEF2E331F296E071FA0DF9982CFEA7D43F2E",
  204|      0|         "0x100000000000000000000351EE786A818F3A1A16B",
  205|      0|         oid);
  206|      0|   }
  207|       |
  208|       |   // secp192k1
  209|      2|   if(oid == OID{1, 3, 132, 0, 31}) {
  ------------------
  |  Branch (209:7): [True: 0, False: 2]
  ------------------
  210|      0|      return load_EC_group_info(
  211|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37",
  212|      0|         "0",
  213|      0|         "3",
  214|      0|         "0xDB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D",
  215|      0|         "0x9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D",
  216|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D",
  217|      0|         oid);
  218|      0|   }
  219|       |
  220|       |   // secp192r1
  221|      2|   if(oid == OID{1, 2, 840, 10045, 3, 1, 1}) {
  ------------------
  |  Branch (221:7): [True: 0, False: 2]
  ------------------
  222|      0|      return load_EC_group_info(
  223|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
  224|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC",
  225|      0|         "0x64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1",
  226|      0|         "0x188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012",
  227|      0|         "0x7192B95FFC8DA78631011ED6B24CDD573F977A11E794811",
  228|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831",
  229|      0|         oid);
  230|      0|   }
  231|       |
  232|       |   // secp224k1
  233|      2|   if(oid == OID{1, 3, 132, 0, 32}) {
  ------------------
  |  Branch (233:7): [True: 0, False: 2]
  ------------------
  234|      0|      return load_EC_group_info(
  235|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFE56D",
  236|      0|         "0",
  237|      0|         "5",
  238|      0|         "0xA1455B334DF099DF30FC28A169A467E9E47075A90F7E650EB6B7A45C",
  239|      0|         "0x7E089FED7FBA344282CAFBD6F7E319F7C0B0BD59E2CA4BDB556D61A5",
  240|      0|         "0x10000000000000000000000000001DCE8D2EC6184CAF0A971769FB1F7",
  241|      0|         oid);
  242|      0|   }
  243|       |
  244|       |   // secp224r1
  245|      2|   if(oid == OID{1, 3, 132, 0, 33}) {
  ------------------
  |  Branch (245:7): [True: 0, False: 2]
  ------------------
  246|      0|      return load_EC_group_info(
  247|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001",
  248|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE",
  249|      0|         "0xB4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4",
  250|      0|         "0xB70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21",
  251|      0|         "0xBD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34",
  252|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D",
  253|      0|         oid);
  254|      0|   }
  255|       |
  256|       |   // secp256k1
  257|      2|   if(oid == OID{1, 3, 132, 0, 10}) {
  ------------------
  |  Branch (257:7): [True: 1, False: 1]
  ------------------
  258|      1|      return load_EC_group_info(
  259|      1|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F",
  260|      1|         "0",
  261|      1|         "7",
  262|      1|         "0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798",
  263|      1|         "0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8",
  264|      1|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141",
  265|      1|         oid);
  266|      1|   }
  267|       |
  268|       |   // sm2p256v1
  269|      1|   if(oid == OID{1, 2, 156, 10197, 1, 301}) {
  ------------------
  |  Branch (269:7): [True: 1, False: 0]
  ------------------
  270|      1|      return load_EC_group_info(
  271|      1|         "0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF",
  272|      1|         "0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC",
  273|      1|         "0x28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93",
  274|      1|         "0x32C4AE2C1F1981195F9904466A39C9948FE30BBFF2660BE1715A4589334C74C7",
  275|      1|         "0xBC3736A2F4F6779C59BDCEE36B692153D0A9877CC62A474002DF32E52139F0A0",
  276|      1|         "0xFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123",
  277|      1|         oid);
  278|      1|   }
  279|       |
  280|       |   // x962_p192v2
  281|      0|   if(oid == OID{1, 2, 840, 10045, 3, 1, 2}) {
  ------------------
  |  Branch (281:7): [True: 0, False: 0]
  ------------------
  282|      0|      return load_EC_group_info(
  283|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
  284|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC",
  285|      0|         "0xCC22D6DFB95C6B25E49C0D6364A4E5980C393AA21668D953",
  286|      0|         "0xEEA2BAE7E1497842F2DE7769CFE9C989C072AD696F48034A",
  287|      0|         "0x6574D11D69B6EC7A672BB82A083DF2F2B0847DE970B2DE15",
  288|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFE5FB1A724DC80418648D8DD31",
  289|      0|         oid);
  290|      0|   }
  291|       |
  292|       |   // x962_p192v3
  293|      0|   if(oid == OID{1, 2, 840, 10045, 3, 1, 3}) {
  ------------------
  |  Branch (293:7): [True: 0, False: 0]
  ------------------
  294|      0|      return load_EC_group_info(
  295|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF",
  296|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC",
  297|      0|         "0x22123DC2395A05CAA7423DAECCC94760A7D462256BD56916",
  298|      0|         "0x7D29778100C65A1DA1783716588DCE2B8B4AEE8E228F1896",
  299|      0|         "0x38A90F22637337334B49DCB66A6DC8F9978ACA7648A943B0",
  300|      0|         "0xFFFFFFFFFFFFFFFFFFFFFFFF7A62D031C83F4294F640EC13",
  301|      0|         oid);
  302|      0|   }
  303|       |
  304|       |   // x962_p239v1
  305|      0|   if(oid == OID{1, 2, 840, 10045, 3, 1, 4}) {
  ------------------
  |  Branch (305:7): [True: 0, False: 0]
  ------------------
  306|      0|      return load_EC_group_info(
  307|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF",
  308|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC",
  309|      0|         "0x6B016C3BDCF18941D0D654921475CA71A9DB2FB27D1D37796185C2942C0A",
  310|      0|         "0xFFA963CDCA8816CCC33B8642BEDF905C3D358573D3F27FBBD3B3CB9AAAF",
  311|      0|         "0x7DEBE8E4E90A5DAE6E4054CA530BA04654B36818CE226B39FCCB7B02F1AE",
  312|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF9E5E9A9F5D9071FBD1522688909D0B",
  313|      0|         oid);
  314|      0|   }
  315|       |
  316|       |   // x962_p239v2
  317|      0|   if(oid == OID{1, 2, 840, 10045, 3, 1, 5}) {
  ------------------
  |  Branch (317:7): [True: 0, False: 0]
  ------------------
  318|      0|      return load_EC_group_info(
  319|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF",
  320|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC",
  321|      0|         "0x617FAB6832576CBBFED50D99F0249C3FEE58B94BA0038C7AE84C8C832F2C",
  322|      0|         "0x38AF09D98727705120C921BB5E9E26296A3CDCF2F35757A0EAFD87B830E7",
  323|      0|         "0x5B0125E4DBEA0EC7206DA0FC01D9B081329FB555DE6EF460237DFF8BE4BA",
  324|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF800000CFA7E8594377D414C03821BC582063",
  325|      0|         oid);
  326|      0|   }
  327|       |
  328|       |   // x962_p239v3
  329|      0|   if(oid == OID{1, 2, 840, 10045, 3, 1, 6}) {
  ------------------
  |  Branch (329:7): [True: 0, False: 0]
  ------------------
  330|      0|      return load_EC_group_info(
  331|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFF",
  332|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFFFFFFFF8000000000007FFFFFFFFFFC",
  333|      0|         "0x255705FA2A306654B1F4CB03D6A750A30C250102D4988717D9BA15AB6D3E",
  334|      0|         "0x6768AE8E18BB92CFCF005C949AA2C6D94853D0E660BBF854B1C9505FE95A",
  335|      0|         "0x1607E6898F390C06BC1D552BAD226F3B6FCFE48B6E818499AF18E3ED6CF3",
  336|      0|         "0x7FFFFFFFFFFFFFFFFFFFFFFF7FFFFF975DEB41B3A6057C3C432146526551",
  337|      0|         oid);
  338|      0|   }
  339|       |
  340|      0|   return std::shared_ptr<EC_Group_Data>();
  341|      0|}

_ZN5Botan8EC_PointC2ERKNS_8CurveGFpE:
   18|  36.4k|EC_Point::EC_Point(const CurveGFp& curve) : m_curve(curve), m_coord_x(0), m_coord_y(curve.get_1_rep()), m_coord_z(0) {
   19|       |   // Assumes Montgomery rep of zero is zero
   20|  36.4k|}
_ZN5Botan8EC_PointC2ERKNS_8CurveGFpERKNS_6BigIntES6_:
   23|  44.6k|      m_curve(curve), m_coord_x(x), m_coord_y(y), m_coord_z(m_curve.get_1_rep()) {
   24|  44.6k|   if(x < 0 || x >= curve.get_p()) {
  ------------------
  |  Branch (24:7): [True: 0, False: 44.6k]
  |  Branch (24:16): [True: 19, False: 44.6k]
  ------------------
   25|     19|      throw Invalid_Argument("Invalid EC_Point affine x");
   26|     19|   }
   27|  44.6k|   if(y < 0 || y >= curve.get_p()) {
  ------------------
  |  Branch (27:7): [True: 0, False: 44.6k]
  |  Branch (27:16): [True: 22, False: 44.6k]
  ------------------
   28|     22|      throw Invalid_Argument("Invalid EC_Point affine y");
   29|     22|   }
   30|       |
   31|  44.6k|   secure_vector<word> monty_ws(m_curve.get_ws_size());
   32|  44.6k|   m_curve.to_rep(m_coord_x, monty_ws);
   33|  44.6k|   m_curve.to_rep(m_coord_y, monty_ws);
   34|  44.6k|}
_ZN5Botan8EC_Point10add_affineEPKmmS2_mRNSt3__16vectorINS_6BigIntENS3_9allocatorIS5_EEEE:
   74|  5.45M|   const word x_words[], size_t x_size, const word y_words[], size_t y_size, std::vector<BigInt>& ws_bn) {
   75|  5.45M|   if((CT::all_zeros(x_words, x_size) & CT::all_zeros(y_words, y_size)).as_bool()) {
  ------------------
  |  Branch (75:7): [True: 0, False: 5.45M]
  ------------------
   76|      0|      return;
   77|      0|   }
   78|       |
   79|  5.45M|   if(is_zero()) {
  ------------------
  |  Branch (79:7): [True: 33.4k, False: 5.42M]
  ------------------
   80|  33.4k|      m_coord_x.set_words(x_words, x_size);
   81|  33.4k|      m_coord_y.set_words(y_words, y_size);
   82|  33.4k|      m_coord_z = m_curve.get_1_rep();
   83|  33.4k|      return;
   84|  33.4k|   }
   85|       |
   86|  5.42M|   resize_ws(ws_bn, m_curve.get_ws_size());
   87|       |
   88|  5.42M|   secure_vector<word>& ws = ws_bn[0].get_word_vector();
   89|  5.42M|   secure_vector<word>& sub_ws = ws_bn[1].get_word_vector();
   90|       |
   91|  5.42M|   BigInt& T0 = ws_bn[2];
   92|  5.42M|   BigInt& T1 = ws_bn[3];
   93|  5.42M|   BigInt& T2 = ws_bn[4];
   94|  5.42M|   BigInt& T3 = ws_bn[5];
   95|  5.42M|   BigInt& T4 = ws_bn[6];
   96|       |
   97|       |   /*
   98|       |   https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-1998-cmo-2
   99|       |   simplified with Z2 = 1
  100|       |   */
  101|       |
  102|  5.42M|   const BigInt& p = m_curve.get_p();
  103|       |
  104|  5.42M|   m_curve.sqr(T3, m_coord_z, ws);            // z1^2
  105|  5.42M|   m_curve.mul(T4, x_words, x_size, T3, ws);  // x2*z1^2
  106|       |
  107|  5.42M|   m_curve.mul(T2, m_coord_z, T3, ws);        // z1^3
  108|  5.42M|   m_curve.mul(T0, y_words, y_size, T2, ws);  // y2*z1^3
  109|       |
  110|  5.42M|   T4.mod_sub(m_coord_x, p, sub_ws);  // x2*z1^2 - x1*z2^2
  111|       |
  112|  5.42M|   T0.mod_sub(m_coord_y, p, sub_ws);
  113|       |
  114|  5.42M|   if(T4.is_zero()) {
  ------------------
  |  Branch (114:7): [True: 0, False: 5.42M]
  ------------------
  115|      0|      if(T0.is_zero()) {
  ------------------
  |  Branch (115:10): [True: 0, False: 0]
  ------------------
  116|      0|         mult2(ws_bn);
  117|      0|         return;
  118|      0|      }
  119|       |
  120|       |      // setting to zero:
  121|      0|      m_coord_x.clear();
  122|      0|      m_coord_y = m_curve.get_1_rep();
  123|      0|      m_coord_z.clear();
  124|      0|      return;
  125|      0|   }
  126|       |
  127|  5.42M|   m_curve.sqr(T2, T4, ws);
  128|       |
  129|  5.42M|   m_curve.mul(T3, m_coord_x, T2, ws);
  130|       |
  131|  5.42M|   m_curve.mul(T1, T2, T4, ws);
  132|       |
  133|  5.42M|   m_curve.sqr(m_coord_x, T0, ws);
  134|  5.42M|   m_coord_x.mod_sub(T1, p, sub_ws);
  135|       |
  136|  5.42M|   m_coord_x.mod_sub(T3, p, sub_ws);
  137|  5.42M|   m_coord_x.mod_sub(T3, p, sub_ws);
  138|       |
  139|  5.42M|   T3.mod_sub(m_coord_x, p, sub_ws);
  140|       |
  141|  5.42M|   m_curve.mul(T2, T0, T3, ws);
  142|  5.42M|   m_curve.mul(T0, m_coord_y, T1, ws);
  143|  5.42M|   T2.mod_sub(T0, p, sub_ws);
  144|  5.42M|   m_coord_y.swap(T2);
  145|       |
  146|  5.42M|   m_curve.mul(T0, m_coord_z, T4, ws);
  147|  5.42M|   m_coord_z.swap(T0);
  148|  5.42M|}
_ZN5Botan8EC_Point3addEPKmmS2_mS2_mRNSt3__16vectorINS_6BigIntENS3_9allocatorIS5_EEEE:
  156|   411k|                   std::vector<BigInt>& ws_bn) {
  157|   411k|   if((CT::all_zeros(x_words, x_size) & CT::all_zeros(z_words, z_size)).as_bool()) {
  ------------------
  |  Branch (157:7): [True: 0, False: 411k]
  ------------------
  158|      0|      return;
  159|      0|   }
  160|       |
  161|   411k|   if(is_zero()) {
  ------------------
  |  Branch (161:7): [True: 0, False: 411k]
  ------------------
  162|      0|      m_coord_x.set_words(x_words, x_size);
  163|      0|      m_coord_y.set_words(y_words, y_size);
  164|      0|      m_coord_z.set_words(z_words, z_size);
  165|      0|      return;
  166|      0|   }
  167|       |
  168|   411k|   resize_ws(ws_bn, m_curve.get_ws_size());
  169|       |
  170|   411k|   secure_vector<word>& ws = ws_bn[0].get_word_vector();
  171|   411k|   secure_vector<word>& sub_ws = ws_bn[1].get_word_vector();
  172|       |
  173|   411k|   BigInt& T0 = ws_bn[2];
  174|   411k|   BigInt& T1 = ws_bn[3];
  175|   411k|   BigInt& T2 = ws_bn[4];
  176|   411k|   BigInt& T3 = ws_bn[5];
  177|   411k|   BigInt& T4 = ws_bn[6];
  178|   411k|   BigInt& T5 = ws_bn[7];
  179|       |
  180|       |   /*
  181|       |   https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#addition-add-1998-cmo-2
  182|       |   */
  183|       |
  184|   411k|   const BigInt& p = m_curve.get_p();
  185|       |
  186|   411k|   m_curve.sqr(T0, z_words, z_size, ws);      // z2^2
  187|   411k|   m_curve.mul(T1, m_coord_x, T0, ws);        // x1*z2^2
  188|   411k|   m_curve.mul(T3, z_words, z_size, T0, ws);  // z2^3
  189|   411k|   m_curve.mul(T2, m_coord_y, T3, ws);        // y1*z2^3
  190|       |
  191|   411k|   m_curve.sqr(T3, m_coord_z, ws);            // z1^2
  192|   411k|   m_curve.mul(T4, x_words, x_size, T3, ws);  // x2*z1^2
  193|       |
  194|   411k|   m_curve.mul(T5, m_coord_z, T3, ws);        // z1^3
  195|   411k|   m_curve.mul(T0, y_words, y_size, T5, ws);  // y2*z1^3
  196|       |
  197|   411k|   T4.mod_sub(T1, p, sub_ws);  // x2*z1^2 - x1*z2^2
  198|       |
  199|   411k|   T0.mod_sub(T2, p, sub_ws);
  200|       |
  201|   411k|   if(T4.is_zero()) {
  ------------------
  |  Branch (201:7): [True: 0, False: 411k]
  ------------------
  202|      0|      if(T0.is_zero()) {
  ------------------
  |  Branch (202:10): [True: 0, False: 0]
  ------------------
  203|      0|         mult2(ws_bn);
  204|      0|         return;
  205|      0|      }
  206|       |
  207|       |      // setting to zero:
  208|      0|      m_coord_x.clear();
  209|      0|      m_coord_y = m_curve.get_1_rep();
  210|      0|      m_coord_z.clear();
  211|      0|      return;
  212|      0|   }
  213|       |
  214|   411k|   m_curve.sqr(T5, T4, ws);
  215|       |
  216|   411k|   m_curve.mul(T3, T1, T5, ws);
  217|       |
  218|   411k|   m_curve.mul(T1, T5, T4, ws);
  219|       |
  220|   411k|   m_curve.sqr(m_coord_x, T0, ws);
  221|   411k|   m_coord_x.mod_sub(T1, p, sub_ws);
  222|   411k|   m_coord_x.mod_sub(T3, p, sub_ws);
  223|   411k|   m_coord_x.mod_sub(T3, p, sub_ws);
  224|       |
  225|   411k|   T3.mod_sub(m_coord_x, p, sub_ws);
  226|       |
  227|   411k|   m_curve.mul(m_coord_y, T0, T3, ws);
  228|   411k|   m_curve.mul(T3, T2, T1, ws);
  229|       |
  230|   411k|   m_coord_y.mod_sub(T3, p, sub_ws);
  231|       |
  232|   411k|   m_curve.mul(T3, z_words, z_size, m_coord_z, ws);
  233|   411k|   m_curve.mul(m_coord_z, T3, T4, ws);
  234|   411k|}
_ZN5Botan8EC_Point6mult2iEmRNSt3__16vectorINS_6BigIntENS1_9allocatorIS3_EEEE:
  236|  5.78M|void EC_Point::mult2i(size_t iterations, std::vector<BigInt>& ws_bn) {
  237|  5.78M|   if(iterations == 0) {
  ------------------
  |  Branch (237:7): [True: 0, False: 5.78M]
  ------------------
  238|      0|      return;
  239|      0|   }
  240|       |
  241|  5.78M|   if(m_coord_y.is_zero()) {
  ------------------
  |  Branch (241:7): [True: 0, False: 5.78M]
  ------------------
  242|      0|      *this = EC_Point(m_curve);  // setting myself to zero
  243|      0|      return;
  244|      0|   }
  245|       |
  246|       |   /*
  247|       |   TODO we can save 2 squarings per iteration by computing
  248|       |   a*Z^4 using values cached from previous iteration
  249|       |   */
  250|  17.3M|   for(size_t i = 0; i != iterations; ++i) {
  ------------------
  |  Branch (250:22): [True: 11.5M, False: 5.78M]
  ------------------
  251|  11.5M|      mult2(ws_bn);
  252|  11.5M|   }
  253|  5.78M|}
_ZN5Botan8EC_Point5mult2ERNSt3__16vectorINS_6BigIntENS1_9allocatorIS3_EEEE:
  256|  11.6M|void EC_Point::mult2(std::vector<BigInt>& ws_bn) {
  257|  11.6M|   if(is_zero()) {
  ------------------
  |  Branch (257:7): [True: 0, False: 11.6M]
  ------------------
  258|      0|      return;
  259|      0|   }
  260|       |
  261|  11.6M|   if(m_coord_y.is_zero()) {
  ------------------
  |  Branch (261:7): [True: 0, False: 11.6M]
  ------------------
  262|      0|      *this = EC_Point(m_curve);  // setting myself to zero
  263|      0|      return;
  264|      0|   }
  265|       |
  266|  11.6M|   resize_ws(ws_bn, m_curve.get_ws_size());
  267|       |
  268|  11.6M|   secure_vector<word>& ws = ws_bn[0].get_word_vector();
  269|  11.6M|   secure_vector<word>& sub_ws = ws_bn[1].get_word_vector();
  270|       |
  271|  11.6M|   BigInt& T0 = ws_bn[2];
  272|  11.6M|   BigInt& T1 = ws_bn[3];
  273|  11.6M|   BigInt& T2 = ws_bn[4];
  274|  11.6M|   BigInt& T3 = ws_bn[5];
  275|  11.6M|   BigInt& T4 = ws_bn[6];
  276|       |
  277|       |   /*
  278|       |   https://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-1986-cc
  279|       |   */
  280|  11.6M|   const BigInt& p = m_curve.get_p();
  281|       |
  282|  11.6M|   m_curve.sqr(T0, m_coord_y, ws);
  283|       |
  284|  11.6M|   m_curve.mul(T1, m_coord_x, T0, ws);
  285|  11.6M|   T1.mod_mul(4, p, sub_ws);
  286|       |
  287|  11.6M|   if(m_curve.a_is_zero()) {
  ------------------
  |  Branch (287:7): [True: 1.19M, False: 10.4M]
  ------------------
  288|       |      // if a == 0 then 3*x^2 + a*z^4 is just 3*x^2
  289|  1.19M|      m_curve.sqr(T4, m_coord_x, ws);  // x^2
  290|  1.19M|      T4.mod_mul(3, p, sub_ws);        // 3*x^2
  291|  10.4M|   } else if(m_curve.a_is_minus_3()) {
  ------------------
  |  Branch (291:14): [True: 10.0M, False: 435k]
  ------------------
  292|       |      /*
  293|       |      if a == -3 then
  294|       |        3*x^2 + a*z^4 == 3*x^2 - 3*z^4 == 3*(x^2-z^4) == 3*(x-z^2)*(x+z^2)
  295|       |      */
  296|  10.0M|      m_curve.sqr(T3, m_coord_z, ws);  // z^2
  297|       |
  298|       |      // (x-z^2)
  299|  10.0M|      T2 = m_coord_x;
  300|  10.0M|      T2.mod_sub(T3, p, sub_ws);
  301|       |
  302|       |      // (x+z^2)
  303|  10.0M|      T3.mod_add(m_coord_x, p, sub_ws);
  304|       |
  305|  10.0M|      m_curve.mul(T4, T2, T3, ws);  // (x-z^2)*(x+z^2)
  306|       |
  307|  10.0M|      T4.mod_mul(3, p, sub_ws);  // 3*(x-z^2)*(x+z^2)
  308|  10.0M|   } else {
  309|   435k|      m_curve.sqr(T3, m_coord_z, ws);                // z^2
  310|   435k|      m_curve.sqr(T4, T3, ws);                       // z^4
  311|   435k|      m_curve.mul(T3, m_curve.get_a_rep(), T4, ws);  // a*z^4
  312|       |
  313|   435k|      m_curve.sqr(T4, m_coord_x, ws);  // x^2
  314|   435k|      T4.mod_mul(3, p, sub_ws);
  315|   435k|      T4.mod_add(T3, p, sub_ws);  // 3*x^2 + a*z^4
  316|   435k|   }
  317|       |
  318|  11.6M|   m_curve.sqr(T2, T4, ws);
  319|  11.6M|   T2.mod_sub(T1, p, sub_ws);
  320|  11.6M|   T2.mod_sub(T1, p, sub_ws);
  321|       |
  322|  11.6M|   m_curve.sqr(T3, T0, ws);
  323|  11.6M|   T3.mod_mul(8, p, sub_ws);
  324|       |
  325|  11.6M|   T1.mod_sub(T2, p, sub_ws);
  326|       |
  327|  11.6M|   m_curve.mul(T0, T4, T1, ws);
  328|  11.6M|   T0.mod_sub(T3, p, sub_ws);
  329|       |
  330|  11.6M|   m_coord_x.swap(T2);
  331|       |
  332|  11.6M|   m_curve.mul(T2, m_coord_y, m_coord_z, ws);
  333|  11.6M|   T2.mod_mul(2, p, sub_ws);
  334|       |
  335|  11.6M|   m_coord_y.swap(T0);
  336|  11.6M|   m_coord_z.swap(T2);
  337|  11.6M|}
_ZN5Botan8EC_Point16force_all_affineERNSt3__16vectorIS0_NS1_9allocatorIS0_EEEERNS2_ImNS_16secure_allocatorImEEEE:
  388|  36.8k|void EC_Point::force_all_affine(std::vector<EC_Point>& points, secure_vector<word>& ws) {
  389|  36.8k|   if(points.size() <= 1) {
  ------------------
  |  Branch (389:7): [True: 0, False: 36.8k]
  ------------------
  390|      0|      for(auto& point : points) {
  ------------------
  |  Branch (390:23): [True: 0, False: 0]
  ------------------
  391|      0|         point.force_affine();
  392|      0|      }
  393|      0|      return;
  394|      0|   }
  395|       |
  396|   563k|   for(auto& point : points) {
  ------------------
  |  Branch (396:20): [True: 563k, False: 36.8k]
  ------------------
  397|   563k|      if(point.is_zero()) {
  ------------------
  |  Branch (397:10): [True: 0, False: 563k]
  ------------------
  398|      0|         throw Invalid_State("Cannot convert zero ECC point to affine");
  399|      0|      }
  400|   563k|   }
  401|       |
  402|       |   /*
  403|       |   For >= 2 points use Montgomery's trick
  404|       |
  405|       |   See Algorithm 2.26 in "Guide to Elliptic Curve Cryptography"
  406|       |   (Hankerson, Menezes, Vanstone)
  407|       |
  408|       |   TODO is it really necessary to save all k points in c?
  409|       |   */
  410|       |
  411|  36.8k|   const CurveGFp& curve = points[0].m_curve;
  412|  36.8k|   const BigInt& rep_1 = curve.get_1_rep();
  413|       |
  414|  36.8k|   if(ws.size() < curve.get_ws_size()) {
  ------------------
  |  Branch (414:7): [True: 0, False: 36.8k]
  ------------------
  415|      0|      ws.resize(curve.get_ws_size());
  416|      0|   }
  417|       |
  418|  36.8k|   std::vector<BigInt> c(points.size());
  419|  36.8k|   c[0] = points[0].m_coord_z;
  420|       |
  421|   563k|   for(size_t i = 1; i != points.size(); ++i) {
  ------------------
  |  Branch (421:22): [True: 526k, False: 36.8k]
  ------------------
  422|   526k|      curve.mul(c[i], c[i - 1], points[i].m_coord_z, ws);
  423|   526k|   }
  424|       |
  425|  36.8k|   BigInt s_inv = curve.invert_element(c[c.size() - 1], ws);
  426|       |
  427|  36.8k|   BigInt z_inv, z2_inv, z3_inv;
  428|       |
  429|   563k|   for(size_t i = points.size() - 1; i != 0; i--) {
  ------------------
  |  Branch (429:38): [True: 526k, False: 36.8k]
  ------------------
  430|   526k|      EC_Point& point = points[i];
  431|       |
  432|   526k|      curve.mul(z_inv, s_inv, c[i - 1], ws);
  433|       |
  434|   526k|      s_inv = curve.mul_to_tmp(s_inv, point.m_coord_z, ws);
  435|       |
  436|   526k|      curve.sqr(z2_inv, z_inv, ws);
  437|   526k|      curve.mul(z3_inv, z2_inv, z_inv, ws);
  438|   526k|      point.m_coord_x = curve.mul_to_tmp(point.m_coord_x, z2_inv, ws);
  439|   526k|      point.m_coord_y = curve.mul_to_tmp(point.m_coord_y, z3_inv, ws);
  440|   526k|      point.m_coord_z = rep_1;
  441|   526k|   }
  442|       |
  443|  36.8k|   curve.sqr(z2_inv, s_inv, ws);
  444|  36.8k|   curve.mul(z3_inv, z2_inv, s_inv, ws);
  445|  36.8k|   points[0].m_coord_x = curve.mul_to_tmp(points[0].m_coord_x, z2_inv, ws);
  446|  36.8k|   points[0].m_coord_y = curve.mul_to_tmp(points[0].m_coord_y, z3_inv, ws);
  447|  36.8k|   points[0].m_coord_z = rep_1;
  448|  36.8k|}
_ZNK5Botan8EC_Point9is_affineEv:
  465|  42.8k|bool EC_Point::is_affine() const {
  466|  42.8k|   return m_curve.is_one(m_coord_z);
  467|  42.8k|}
_ZNK5Botan8EC_Point12get_affine_xEv:
  469|  38.1k|BigInt EC_Point::get_affine_x() const {
  470|  38.1k|   if(is_zero()) {
  ------------------
  |  Branch (470:7): [True: 0, False: 38.1k]
  ------------------
  471|      0|      throw Invalid_State("Cannot convert zero point to affine");
  472|      0|   }
  473|       |
  474|  38.1k|   secure_vector<word> monty_ws;
  475|       |
  476|  38.1k|   if(is_affine()) {
  ------------------
  |  Branch (476:7): [True: 4.71k, False: 33.4k]
  ------------------
  477|  4.71k|      return m_curve.from_rep_to_tmp(m_coord_x, monty_ws);
  478|  4.71k|   }
  479|       |
  480|  33.4k|   BigInt z2 = m_curve.sqr_to_tmp(m_coord_z, monty_ws);
  481|  33.4k|   z2 = m_curve.invert_element(z2, monty_ws);
  482|       |
  483|  33.4k|   BigInt r;
  484|  33.4k|   m_curve.mul(r, m_coord_x, z2, monty_ws);
  485|  33.4k|   m_curve.from_rep(r, monty_ws);
  486|  33.4k|   return r;
  487|  38.1k|}
_ZNK5Botan8EC_Point12get_affine_yEv:
  489|  4.71k|BigInt EC_Point::get_affine_y() const {
  490|  4.71k|   if(is_zero()) {
  ------------------
  |  Branch (490:7): [True: 0, False: 4.71k]
  ------------------
  491|      0|      throw Invalid_State("Cannot convert zero point to affine");
  492|      0|   }
  493|       |
  494|  4.71k|   secure_vector<word> monty_ws;
  495|       |
  496|  4.71k|   if(is_affine()) {
  ------------------
  |  Branch (496:7): [True: 4.71k, False: 0]
  ------------------
  497|  4.71k|      return m_curve.from_rep_to_tmp(m_coord_y, monty_ws);
  498|  4.71k|   }
  499|       |
  500|      0|   const BigInt z2 = m_curve.sqr_to_tmp(m_coord_z, monty_ws);
  501|      0|   const BigInt z3 = m_curve.mul_to_tmp(m_coord_z, z2, monty_ws);
  502|      0|   const BigInt z3_inv = m_curve.invert_element(z3, monty_ws);
  503|       |
  504|      0|   BigInt r;
  505|      0|   m_curve.mul(r, m_coord_y, z3_inv, monty_ws);
  506|      0|   m_curve.from_rep(r, monty_ws);
  507|      0|   return r;
  508|  4.71k|}
_ZNK5Botan8EC_Point12on_the_curveEv:
  510|  79.8k|bool EC_Point::on_the_curve() const {
  511|       |   /*
  512|       |   Is the point still on the curve?? (If everything is correct, the
  513|       |   point is always on its curve; then the function will return true.
  514|       |   If somehow the state is corrupted, which suggests a fault attack
  515|       |   (or internal computational error), then return false.
  516|       |   */
  517|  79.8k|   if(is_zero()) {
  ------------------
  |  Branch (517:7): [True: 0, False: 79.8k]
  ------------------
  518|      0|      return true;
  519|      0|   }
  520|       |
  521|  79.8k|   secure_vector<word> monty_ws;
  522|       |
  523|  79.8k|   const BigInt y2 = m_curve.from_rep_to_tmp(m_curve.sqr_to_tmp(m_coord_y, monty_ws), monty_ws);
  524|  79.8k|   const BigInt x3 = m_curve.mul_to_tmp(m_coord_x, m_curve.sqr_to_tmp(m_coord_x, monty_ws), monty_ws);
  525|  79.8k|   const BigInt ax = m_curve.mul_to_tmp(m_coord_x, m_curve.get_a_rep(), monty_ws);
  526|  79.8k|   const BigInt z2 = m_curve.sqr_to_tmp(m_coord_z, monty_ws);
  527|       |
  528|  79.8k|   if(m_coord_z == z2)  // Is z equal to 1 (in Montgomery form)?
  ------------------
  |  Branch (528:7): [True: 79.8k, False: 0]
  ------------------
  529|  79.8k|   {
  530|  79.8k|      if(y2 != m_curve.from_rep_to_tmp(x3 + ax + m_curve.get_b_rep(), monty_ws)) {
  ------------------
  |  Branch (530:10): [True: 3.02k, False: 76.7k]
  ------------------
  531|  3.02k|         return false;
  532|  3.02k|      }
  533|  79.8k|   }
  534|       |
  535|  76.7k|   const BigInt z3 = m_curve.mul_to_tmp(m_coord_z, z2, monty_ws);
  536|  76.7k|   const BigInt ax_z4 = m_curve.mul_to_tmp(ax, m_curve.sqr_to_tmp(z2, monty_ws), monty_ws);
  537|  76.7k|   const BigInt b_z6 = m_curve.mul_to_tmp(m_curve.get_b_rep(), m_curve.sqr_to_tmp(z3, monty_ws), monty_ws);
  538|       |
  539|  76.7k|   if(y2 != m_curve.from_rep_to_tmp(x3 + ax_z4 + b_z6, monty_ws)) {
  ------------------
  |  Branch (539:7): [True: 0, False: 76.7k]
  ------------------
  540|      0|      return false;
  541|      0|   }
  542|       |
  543|  76.7k|   return true;
  544|  76.7k|}
_ZN5Botan8EC_Point4swapERS0_:
  547|   343k|void EC_Point::swap(EC_Point& other) {
  548|   343k|   m_curve.swap(other.m_curve);
  549|   343k|   m_coord_x.swap(other.m_coord_x);
  550|   343k|   m_coord_y.swap(other.m_coord_y);
  551|   343k|   m_coord_z.swap(other.m_coord_z);
  552|   343k|}
ec_point.cpp:_ZN5Botan12_GLOBAL__N_19resize_wsERNSt3__16vectorINS_6BigIntENS1_9allocatorIS3_EEEEm:
   61|  17.4M|inline void resize_ws(std::vector<BigInt>& ws_bn, size_t cap_size) {
   62|  17.4M|   BOTAN_ASSERT(ws_bn.size() >= EC_Point::WORKSPACE_SIZE, "Expected size for EC_Point workspace");
  ------------------
  |  |   51|  17.4M|   do {                                                                                 \
  |  |   52|  17.4M|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 17.4M]
  |  |  ------------------
  |  |   53|  17.4M|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|  17.4M|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 17.4M]
  |  |  ------------------
  ------------------
   63|       |
   64|   139M|   for(auto& ws : ws_bn) {
  ------------------
  |  Branch (64:17): [True: 139M, False: 17.4M]
  ------------------
   65|   139M|      if(ws.size() < cap_size) {
  ------------------
  |  Branch (65:10): [True: 1.10M, False: 138M]
  ------------------
   66|  1.10M|         ws.get_word_vector().resize(cap_size);
   67|  1.10M|      }
   68|   139M|   }
   69|  17.4M|}

_ZN5Botan30EC_Point_Base_Point_PrecomputeC2ERKNS_8EC_PointERKNS_15Modular_ReducerE:
   30|      8|      m_base_point(base), m_mod_order(mod_order), m_p_words(base.get_curve().get_p().sig_words()) {
   31|      8|   std::vector<BigInt> ws(EC_Point::WORKSPACE_SIZE);
   32|       |
   33|      8|   const size_t p_bits = base.get_curve().get_p().bits();
   34|       |
   35|       |   /*
   36|       |   * Some of the curves (eg secp160k1) have an order slightly larger than
   37|       |   * the size of the prime modulus. In all cases they are at most 1 bit
   38|       |   * longer. The +1 compensates for this.
   39|       |   */
   40|      8|   const size_t T_bits = round_up(p_bits + blinding_size(mod_order.get_modulus()) + 1, WINDOW_BITS) / WINDOW_BITS;
   41|       |
   42|      8|   std::vector<EC_Point> T(WINDOW_SIZE * T_bits);
   43|       |
   44|      8|   EC_Point g = base;
   45|      8|   EC_Point g2, g4;
   46|       |
   47|  1.42k|   for(size_t i = 0; i != T_bits; i++) {
  ------------------
  |  Branch (47:22): [True: 1.42k, False: 8]
  ------------------
   48|  1.42k|      g2 = g;
   49|  1.42k|      g2.mult2(ws);
   50|  1.42k|      g4 = g2;
   51|  1.42k|      g4.mult2(ws);
   52|       |
   53|  1.42k|      T[7 * i + 0] = g;
   54|  1.42k|      T[7 * i + 1] = std::move(g2);
   55|  1.42k|      T[7 * i + 2] = T[7 * i + 1].plus(T[7 * i + 0], ws);  // g2+g
   56|  1.42k|      T[7 * i + 3] = g4;
   57|  1.42k|      T[7 * i + 4] = T[7 * i + 3].plus(T[7 * i + 0], ws);  // g4+g
   58|  1.42k|      T[7 * i + 5] = T[7 * i + 3].plus(T[7 * i + 1], ws);  // g4+g2
   59|  1.42k|      T[7 * i + 6] = T[7 * i + 3].plus(T[7 * i + 2], ws);  // g4+g2+g
   60|       |
   61|  1.42k|      g.swap(g4);
   62|  1.42k|      g.mult2(ws);
   63|  1.42k|   }
   64|       |
   65|      8|   EC_Point::force_all_affine(T, ws[0].get_word_vector());
   66|       |
   67|      8|   m_W.resize(T.size() * 2 * m_p_words);
   68|       |
   69|      8|   word* p = &m_W[0];
   70|  9.94k|   for(size_t i = 0; i != T.size(); ++i) {
  ------------------
  |  Branch (70:22): [True: 9.94k, False: 8]
  ------------------
   71|  9.94k|      T[i].get_x().encode_words(p, m_p_words);
   72|  9.94k|      p += m_p_words;
   73|  9.94k|      T[i].get_y().encode_words(p, m_p_words);
   74|  9.94k|      p += m_p_words;
   75|  9.94k|   }
   76|      8|}
_ZN5Botan31EC_Point_Multi_Point_PrecomputeC2ERKNS_8EC_PointES3_:
  295|  39.9k|EC_Point_Multi_Point_Precompute::EC_Point_Multi_Point_Precompute(const EC_Point& x, const EC_Point& y) {
  296|  39.9k|   if(x.on_the_curve() == false || y.on_the_curve() == false) {
  ------------------
  |  Branch (296:7): [True: 0, False: 39.9k]
  |  Branch (296:36): [True: 3.02k, False: 36.8k]
  ------------------
  297|  3.02k|      m_M.push_back(x.zero());
  298|  3.02k|      return;
  299|  3.02k|   }
  300|       |
  301|  36.8k|   std::vector<BigInt> ws(EC_Point::WORKSPACE_SIZE);
  302|       |
  303|  36.8k|   EC_Point x2 = x;
  304|  36.8k|   x2.mult2(ws);
  305|       |
  306|  36.8k|   const EC_Point x3(x2.plus(x, ws));
  307|       |
  308|  36.8k|   EC_Point y2 = y;
  309|  36.8k|   y2.mult2(ws);
  310|       |
  311|  36.8k|   const EC_Point y3(y2.plus(y, ws));
  312|       |
  313|  36.8k|   m_M.reserve(15);
  314|       |
  315|  36.8k|   m_M.push_back(x);
  316|  36.8k|   m_M.push_back(x2);
  317|  36.8k|   m_M.push_back(x3);
  318|       |
  319|  36.8k|   m_M.push_back(y);
  320|  36.8k|   m_M.push_back(y.plus(x, ws));
  321|  36.8k|   m_M.push_back(y.plus(x2, ws));
  322|  36.8k|   m_M.push_back(y.plus(x3, ws));
  323|       |
  324|  36.8k|   m_M.push_back(y2);
  325|  36.8k|   m_M.push_back(y2.plus(x, ws));
  326|  36.8k|   m_M.push_back(y2.plus(x2, ws));
  327|  36.8k|   m_M.push_back(y2.plus(x3, ws));
  328|       |
  329|  36.8k|   m_M.push_back(y3);
  330|  36.8k|   m_M.push_back(y3.plus(x, ws));
  331|  36.8k|   m_M.push_back(y3.plus(x2, ws));
  332|  36.8k|   m_M.push_back(y3.plus(x3, ws));
  333|       |
  334|  36.8k|   bool no_infinity = true;
  335|   553k|   for(auto& pt : m_M) {
  ------------------
  |  Branch (335:17): [True: 553k, False: 36.8k]
  ------------------
  336|   553k|      if(pt.is_zero()) {
  ------------------
  |  Branch (336:10): [True: 0, False: 553k]
  ------------------
  337|      0|         no_infinity = false;
  338|      0|      }
  339|   553k|   }
  340|       |
  341|  36.8k|   if(no_infinity) {
  ------------------
  |  Branch (341:7): [True: 36.8k, False: 0]
  ------------------
  342|  36.8k|      EC_Point::force_all_affine(m_M, ws[0].get_word_vector());
  343|  36.8k|   }
  344|       |
  345|  36.8k|   m_no_infinity = no_infinity;
  346|  36.8k|}
_ZNK5Botan31EC_Point_Multi_Point_Precompute9multi_expERKNS_6BigIntES3_:
  348|  36.0k|EC_Point EC_Point_Multi_Point_Precompute::multi_exp(const BigInt& z1, const BigInt& z2) const {
  349|  36.0k|   if(m_M.size() == 1) {
  ------------------
  |  Branch (349:7): [True: 2.61k, False: 33.4k]
  ------------------
  350|  2.61k|      return m_M[0];
  351|  2.61k|   }
  352|       |
  353|  33.4k|   std::vector<BigInt> ws(EC_Point::WORKSPACE_SIZE);
  354|       |
  355|  33.4k|   const size_t z_bits = round_up(std::max(z1.bits(), z2.bits()), 2);
  356|       |
  357|  33.4k|   EC_Point H = m_M[0].zero();
  358|       |
  359|  5.85M|   for(size_t i = 0; i != z_bits; i += 2) {
  ------------------
  |  Branch (359:22): [True: 5.81M, False: 33.4k]
  ------------------
  360|  5.81M|      if(i > 0) {
  ------------------
  |  Branch (360:10): [True: 5.78M, False: 33.4k]
  ------------------
  361|  5.78M|         H.mult2i(2, ws);
  362|  5.78M|      }
  363|       |
  364|  5.81M|      const uint32_t z1_b = z1.get_substring(z_bits - i - 2, 2);
  365|  5.81M|      const uint32_t z2_b = z2.get_substring(z_bits - i - 2, 2);
  366|       |
  367|  5.81M|      const uint32_t z12 = (4 * z2_b) + z1_b;
  368|       |
  369|       |      // This function is not intended to be const time
  370|  5.81M|      if(z12) {
  ------------------
  |  Branch (370:10): [True: 5.45M, False: 361k]
  ------------------
  371|  5.45M|         if(m_no_infinity) {
  ------------------
  |  Branch (371:13): [True: 5.45M, False: 0]
  ------------------
  372|  5.45M|            H.add_affine(m_M[z12 - 1], ws);
  373|  5.45M|         } else {
  374|      0|            H.add(m_M[z12 - 1], ws);
  375|      0|         }
  376|  5.45M|      }
  377|  5.81M|   }
  378|       |
  379|  33.4k|   if(z1.is_negative() != z2.is_negative()) {
  ------------------
  |  Branch (379:7): [True: 0, False: 33.4k]
  ------------------
  380|      0|      H.negate();
  381|      0|   }
  382|       |
  383|  33.4k|   return H;
  384|  36.0k|}
point_mul.cpp:_ZN5Botan12_GLOBAL__N_113blinding_sizeERKNS_6BigIntE:
   18|      8|size_t blinding_size(const BigInt& group_order) {
   19|      8|   return (group_order.bits() + 1) / 2;
   20|      8|}

_ZN5Botan12EC_PublicKeyC2ERKNS_8EC_GroupERKNS_8EC_PointE:
   42|  44.6k|      m_domain_params(dom_par), m_public_key(pub_point), m_domain_encoding(default_encoding_for(m_domain_params)) {}
ecc_key.cpp:_ZN5Botan12_GLOBAL__N_120default_encoding_forERNS_8EC_GroupE:
   31|  44.6k|EC_Group_Encoding default_encoding_for(EC_Group& group) {
   32|  44.6k|   if(group.get_curve_oid().empty()) {
  ------------------
  |  Branch (32:7): [True: 0, False: 44.6k]
  ------------------
   33|      0|      return EC_Group_Encoding::Explicit;
   34|  44.6k|   } else {
   35|  44.6k|      return EC_Group_Encoding::NamedCurve;
   36|  44.6k|   }
   37|  44.6k|}

_ZNK5Botan15ECDSA_PublicKey22create_verification_opENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  250|  35.3k|                                                                              std::string_view provider) const {
  251|  35.3k|   if(provider == "base" || provider.empty()) {
  ------------------
  |  Branch (251:7): [True: 0, False: 35.3k]
  |  Branch (251:29): [True: 35.3k, False: 0]
  ------------------
  252|  35.3k|      return std::make_unique<ECDSA_Verification_Operation>(*this, params);
  253|  35.3k|   }
  254|       |
  255|      0|   throw Provider_Not_Found(algo_name(), provider);
  256|  35.3k|}
ecdsa.cpp:_ZN5Botan12_GLOBAL__N_128ECDSA_Verification_OperationC2ERKNS_15ECDSA_PublicKeyENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  198|  35.3k|            PK_Ops::Verification_with_Hash(padding),
  199|  35.3k|            m_group(ecdsa.domain()),
  200|  35.3k|            m_gy_mul(m_group.get_base_point(), ecdsa.public_point()) {}
ecdsa.cpp:_ZN5Botan12_GLOBAL__N_128ECDSA_Verification_Operation6verifyEPKhmS3_m:
  214|  35.3k|bool ECDSA_Verification_Operation::verify(const uint8_t msg[], size_t msg_len, const uint8_t sig[], size_t sig_len) {
  215|  35.3k|   if(sig_len != m_group.get_order_bytes() * 2) {
  ------------------
  |  Branch (215:7): [True: 0, False: 35.3k]
  ------------------
  216|      0|      return false;
  217|      0|   }
  218|       |
  219|  35.3k|   const BigInt e = BigInt::from_bytes_with_max_bits(msg, msg_len, m_group.get_order_bits());
  220|       |
  221|  35.3k|   const BigInt r(sig, sig_len / 2);
  222|  35.3k|   const BigInt s(sig + sig_len / 2, sig_len / 2);
  223|       |
  224|       |   // Cannot be negative here since we just decoded from binary
  225|  35.3k|   if(r.is_zero() || s.is_zero()) {
  ------------------
  |  Branch (225:7): [True: 34, False: 35.3k]
  |  Branch (225:22): [True: 36, False: 35.3k]
  ------------------
  226|     70|      return false;
  227|     70|   }
  228|       |
  229|  35.3k|   if(r >= m_group.get_order() || s >= m_group.get_order()) {
  ------------------
  |  Branch (229:7): [True: 191, False: 35.1k]
  |  Branch (229:35): [True: 3.17k, False: 31.9k]
  ------------------
  230|  3.36k|      return false;
  231|  3.36k|   }
  232|       |
  233|  31.9k|   const BigInt w = m_group.inverse_mod_order(s);
  234|       |
  235|  31.9k|   const BigInt u1 = m_group.multiply_mod_order(m_group.mod_order(e), w);
  236|  31.9k|   const BigInt u2 = m_group.multiply_mod_order(r, w);
  237|  31.9k|   const EC_Point R = m_gy_mul.multi_exp(u1, u2);
  238|       |
  239|  31.9k|   if(R.is_zero()) {
  ------------------
  |  Branch (239:7): [True: 82, False: 31.8k]
  ------------------
  240|     82|      return false;
  241|     82|   }
  242|       |
  243|  31.8k|   const BigInt v = m_group.mod_order(R.get_affine_x());
  244|  31.8k|   return (v == r);
  245|  31.9k|}

_ZN5Botan14ed25519_verifyEPKhmS1_S1_S1_m:
   78|  26.5k|                    size_t domain_sep_len) {
   79|  26.5k|   uint8_t h[64];
   80|  26.5k|   uint8_t rcheck[32];
   81|  26.5k|   ge_p3 A;
   82|  26.5k|   SHA_512 sha;
   83|       |
   84|  26.5k|   if(sig[63] & 224) {
  ------------------
  |  Branch (84:7): [True: 642, False: 25.9k]
  ------------------
   85|    642|      return false;
   86|    642|   }
   87|  25.9k|   if(ge_frombytes_negate_vartime(&A, pk) != 0) {
  ------------------
  |  Branch (87:7): [True: 20, False: 25.9k]
  ------------------
   88|     20|      return false;
   89|     20|   }
   90|       |
   91|  25.9k|   const uint64_t CURVE25519_ORDER[4] = {
   92|  25.9k|      0x1000000000000000,
   93|  25.9k|      0x0000000000000000,
   94|  25.9k|      0x14def9dea2f79cd6,
   95|  25.9k|      0x5812631a5cf5d3ed,
   96|  25.9k|   };
   97|       |
   98|  25.9k|   const uint64_t s[4] = {load_le<uint64_t>(sig + 32, 3),
   99|  25.9k|                          load_le<uint64_t>(sig + 32, 2),
  100|  25.9k|                          load_le<uint64_t>(sig + 32, 1),
  101|  25.9k|                          load_le<uint64_t>(sig + 32, 0)};
  102|       |
  103|       |   // RFC 8032 adds the requirement that we verify that s < order in
  104|       |   // the signature; this did not exist in the original Ed25519 spec.
  105|  26.1k|   for(size_t i = 0; i != 4; ++i) {
  ------------------
  |  Branch (105:22): [True: 26.1k, False: 0]
  ------------------
  106|  26.1k|      if(s[i] > CURVE25519_ORDER[i]) {
  ------------------
  |  Branch (106:10): [True: 247, False: 25.8k]
  ------------------
  107|    247|         return false;
  108|    247|      }
  109|  25.8k|      if(s[i] < CURVE25519_ORDER[i]) {
  ------------------
  |  Branch (109:10): [True: 25.6k, False: 218]
  ------------------
  110|  25.6k|         break;
  111|  25.6k|      }
  112|    218|      if(i == 3) {  // here s == order
  ------------------
  |  Branch (112:10): [True: 0, False: 218]
  ------------------
  113|      0|         return false;
  114|      0|      }
  115|    218|   }
  116|       |
  117|  25.6k|   sha.update(domain_sep, domain_sep_len);
  118|  25.6k|   sha.update(sig, 32);
  119|  25.6k|   sha.update(pk, 32);
  120|  25.6k|   sha.update(m, mlen);
  121|  25.6k|   sha.final(h);
  122|  25.6k|   sc_reduce(h);
  123|       |
  124|  25.6k|   ge_double_scalarmult_vartime(rcheck, h, &A, sig + 32);
  125|       |
  126|  25.6k|   return CT::is_equal(rcheck, sig, 32).as_bool();
  127|  25.9k|}

_ZN5Botan8FE_255196invertERKS0_:
   18|  25.6k|FE_25519 FE_25519::invert(const FE_25519& z) {
   19|  25.6k|   FE_25519 t0;
   20|  25.6k|   FE_25519 t1;
   21|  25.6k|   FE_25519 t2;
   22|  25.6k|   FE_25519 t3;
   23|       |
   24|  25.6k|   fe_sq(t0, z);
   25|  25.6k|   fe_sq_iter(t1, t0, 2);
   26|  25.6k|   fe_mul(t1, z, t1);
   27|  25.6k|   fe_mul(t0, t0, t1);
   28|  25.6k|   fe_sq(t2, t0);
   29|  25.6k|   fe_mul(t1, t1, t2);
   30|  25.6k|   fe_sq_iter(t2, t1, 5);
   31|  25.6k|   fe_mul(t1, t2, t1);
   32|  25.6k|   fe_sq_iter(t2, t1, 10);
   33|  25.6k|   fe_mul(t2, t2, t1);
   34|  25.6k|   fe_sq_iter(t3, t2, 20);
   35|  25.6k|   fe_mul(t2, t3, t2);
   36|  25.6k|   fe_sq_iter(t2, t2, 10);
   37|  25.6k|   fe_mul(t1, t2, t1);
   38|  25.6k|   fe_sq_iter(t2, t1, 50);
   39|  25.6k|   fe_mul(t2, t2, t1);
   40|  25.6k|   fe_sq_iter(t3, t2, 100);
   41|  25.6k|   fe_mul(t2, t3, t2);
   42|  25.6k|   fe_sq_iter(t2, t2, 50);
   43|  25.6k|   fe_mul(t1, t2, t1);
   44|  25.6k|   fe_sq_iter(t1, t1, 5);
   45|       |
   46|  25.6k|   fe_mul(t0, t1, t0);
   47|  25.6k|   return t0;
   48|  25.6k|}
_ZN5Botan8FE_255199pow_22523ERKS0_:
   50|  25.9k|FE_25519 FE_25519::pow_22523(const fe& z) {
   51|  25.9k|   FE_25519 t0;
   52|  25.9k|   FE_25519 t1;
   53|  25.9k|   FE_25519 t2;
   54|       |
   55|  25.9k|   fe_sq(t0, z);
   56|  25.9k|   fe_sq_iter(t1, t0, 2);
   57|  25.9k|   fe_mul(t1, z, t1);
   58|  25.9k|   fe_mul(t0, t0, t1);
   59|  25.9k|   fe_sq(t0, t0);
   60|  25.9k|   fe_mul(t0, t1, t0);
   61|  25.9k|   fe_sq_iter(t1, t0, 5);
   62|  25.9k|   fe_mul(t0, t1, t0);
   63|  25.9k|   fe_sq_iter(t1, t0, 10);
   64|  25.9k|   fe_mul(t1, t1, t0);
   65|  25.9k|   fe_sq_iter(t2, t1, 20);
   66|  25.9k|   fe_mul(t1, t2, t1);
   67|  25.9k|   fe_sq_iter(t1, t1, 10);
   68|  25.9k|   fe_mul(t0, t1, t0);
   69|  25.9k|   fe_sq_iter(t1, t0, 50);
   70|  25.9k|   fe_mul(t1, t1, t0);
   71|  25.9k|   fe_sq_iter(t2, t1, 100);
   72|  25.9k|   fe_mul(t1, t2, t1);
   73|  25.9k|   fe_sq_iter(t1, t1, 50);
   74|  25.9k|   fe_mul(t0, t1, t0);
   75|  25.9k|   fe_sq_iter(t0, t0, 2);
   76|       |
   77|  25.9k|   fe_mul(t0, t0, z);
   78|  25.9k|   return t0;
   79|  25.9k|}
_ZN5Botan8FE_255193mulERKS0_S2_:
  114|  37.8M|FE_25519 FE_25519::mul(const FE_25519& f, const FE_25519& g) {
  115|  37.8M|   const int32_t f0 = f[0];
  116|  37.8M|   const int32_t f1 = f[1];
  117|  37.8M|   const int32_t f2 = f[2];
  118|  37.8M|   const int32_t f3 = f[3];
  119|  37.8M|   const int32_t f4 = f[4];
  120|  37.8M|   const int32_t f5 = f[5];
  121|  37.8M|   const int32_t f6 = f[6];
  122|  37.8M|   const int32_t f7 = f[7];
  123|  37.8M|   const int32_t f8 = f[8];
  124|  37.8M|   const int32_t f9 = f[9];
  125|       |
  126|  37.8M|   const int32_t g0 = g[0];
  127|  37.8M|   const int32_t g1 = g[1];
  128|  37.8M|   const int32_t g2 = g[2];
  129|  37.8M|   const int32_t g3 = g[3];
  130|  37.8M|   const int32_t g4 = g[4];
  131|  37.8M|   const int32_t g5 = g[5];
  132|  37.8M|   const int32_t g6 = g[6];
  133|  37.8M|   const int32_t g7 = g[7];
  134|  37.8M|   const int32_t g8 = g[8];
  135|  37.8M|   const int32_t g9 = g[9];
  136|       |
  137|  37.8M|   const int32_t g1_19 = 19 * g1; /* 1.959375*2^29 */
  138|  37.8M|   const int32_t g2_19 = 19 * g2; /* 1.959375*2^30; still ok */
  139|  37.8M|   const int32_t g3_19 = 19 * g3;
  140|  37.8M|   const int32_t g4_19 = 19 * g4;
  141|  37.8M|   const int32_t g5_19 = 19 * g5;
  142|  37.8M|   const int32_t g6_19 = 19 * g6;
  143|  37.8M|   const int32_t g7_19 = 19 * g7;
  144|  37.8M|   const int32_t g8_19 = 19 * g8;
  145|  37.8M|   const int32_t g9_19 = 19 * g9;
  146|  37.8M|   const int32_t f1_2 = 2 * f1;
  147|  37.8M|   const int32_t f3_2 = 2 * f3;
  148|  37.8M|   const int32_t f5_2 = 2 * f5;
  149|  37.8M|   const int32_t f7_2 = 2 * f7;
  150|  37.8M|   const int32_t f9_2 = 2 * f9;
  151|       |
  152|  37.8M|   const int64_t f0g0 = f0 * static_cast<int64_t>(g0);
  153|  37.8M|   const int64_t f0g1 = f0 * static_cast<int64_t>(g1);
  154|  37.8M|   const int64_t f0g2 = f0 * static_cast<int64_t>(g2);
  155|  37.8M|   const int64_t f0g3 = f0 * static_cast<int64_t>(g3);
  156|  37.8M|   const int64_t f0g4 = f0 * static_cast<int64_t>(g4);
  157|  37.8M|   const int64_t f0g5 = f0 * static_cast<int64_t>(g5);
  158|  37.8M|   const int64_t f0g6 = f0 * static_cast<int64_t>(g6);
  159|  37.8M|   const int64_t f0g7 = f0 * static_cast<int64_t>(g7);
  160|  37.8M|   const int64_t f0g8 = f0 * static_cast<int64_t>(g8);
  161|  37.8M|   const int64_t f0g9 = f0 * static_cast<int64_t>(g9);
  162|  37.8M|   const int64_t f1g0 = f1 * static_cast<int64_t>(g0);
  163|  37.8M|   const int64_t f1g1_2 = f1_2 * static_cast<int64_t>(g1);
  164|  37.8M|   const int64_t f1g2 = f1 * static_cast<int64_t>(g2);
  165|  37.8M|   const int64_t f1g3_2 = f1_2 * static_cast<int64_t>(g3);
  166|  37.8M|   const int64_t f1g4 = f1 * static_cast<int64_t>(g4);
  167|  37.8M|   const int64_t f1g5_2 = f1_2 * static_cast<int64_t>(g5);
  168|  37.8M|   const int64_t f1g6 = f1 * static_cast<int64_t>(g6);
  169|  37.8M|   const int64_t f1g7_2 = f1_2 * static_cast<int64_t>(g7);
  170|  37.8M|   const int64_t f1g8 = f1 * static_cast<int64_t>(g8);
  171|  37.8M|   const int64_t f1g9_38 = f1_2 * static_cast<int64_t>(g9_19);
  172|  37.8M|   const int64_t f2g0 = f2 * static_cast<int64_t>(g0);
  173|  37.8M|   const int64_t f2g1 = f2 * static_cast<int64_t>(g1);
  174|  37.8M|   const int64_t f2g2 = f2 * static_cast<int64_t>(g2);
  175|  37.8M|   const int64_t f2g3 = f2 * static_cast<int64_t>(g3);
  176|  37.8M|   const int64_t f2g4 = f2 * static_cast<int64_t>(g4);
  177|  37.8M|   const int64_t f2g5 = f2 * static_cast<int64_t>(g5);
  178|  37.8M|   const int64_t f2g6 = f2 * static_cast<int64_t>(g6);
  179|  37.8M|   const int64_t f2g7 = f2 * static_cast<int64_t>(g7);
  180|  37.8M|   const int64_t f2g8_19 = f2 * static_cast<int64_t>(g8_19);
  181|  37.8M|   const int64_t f2g9_19 = f2 * static_cast<int64_t>(g9_19);
  182|  37.8M|   const int64_t f3g0 = f3 * static_cast<int64_t>(g0);
  183|  37.8M|   const int64_t f3g1_2 = f3_2 * static_cast<int64_t>(g1);
  184|  37.8M|   const int64_t f3g2 = f3 * static_cast<int64_t>(g2);
  185|  37.8M|   const int64_t f3g3_2 = f3_2 * static_cast<int64_t>(g3);
  186|  37.8M|   const int64_t f3g4 = f3 * static_cast<int64_t>(g4);
  187|  37.8M|   const int64_t f3g5_2 = f3_2 * static_cast<int64_t>(g5);
  188|  37.8M|   const int64_t f3g6 = f3 * static_cast<int64_t>(g6);
  189|  37.8M|   const int64_t f3g7_38 = f3_2 * static_cast<int64_t>(g7_19);
  190|  37.8M|   const int64_t f3g8_19 = f3 * static_cast<int64_t>(g8_19);
  191|  37.8M|   const int64_t f3g9_38 = f3_2 * static_cast<int64_t>(g9_19);
  192|  37.8M|   const int64_t f4g0 = f4 * static_cast<int64_t>(g0);
  193|  37.8M|   const int64_t f4g1 = f4 * static_cast<int64_t>(g1);
  194|  37.8M|   const int64_t f4g2 = f4 * static_cast<int64_t>(g2);
  195|  37.8M|   const int64_t f4g3 = f4 * static_cast<int64_t>(g3);
  196|  37.8M|   const int64_t f4g4 = f4 * static_cast<int64_t>(g4);
  197|  37.8M|   const int64_t f4g5 = f4 * static_cast<int64_t>(g5);
  198|  37.8M|   const int64_t f4g6_19 = f4 * static_cast<int64_t>(g6_19);
  199|  37.8M|   const int64_t f4g7_19 = f4 * static_cast<int64_t>(g7_19);
  200|  37.8M|   const int64_t f4g8_19 = f4 * static_cast<int64_t>(g8_19);
  201|  37.8M|   const int64_t f4g9_19 = f4 * static_cast<int64_t>(g9_19);
  202|  37.8M|   const int64_t f5g0 = f5 * static_cast<int64_t>(g0);
  203|  37.8M|   const int64_t f5g1_2 = f5_2 * static_cast<int64_t>(g1);
  204|  37.8M|   const int64_t f5g2 = f5 * static_cast<int64_t>(g2);
  205|  37.8M|   const int64_t f5g3_2 = f5_2 * static_cast<int64_t>(g3);
  206|  37.8M|   const int64_t f5g4 = f5 * static_cast<int64_t>(g4);
  207|  37.8M|   const int64_t f5g5_38 = f5_2 * static_cast<int64_t>(g5_19);
  208|  37.8M|   const int64_t f5g6_19 = f5 * static_cast<int64_t>(g6_19);
  209|  37.8M|   const int64_t f5g7_38 = f5_2 * static_cast<int64_t>(g7_19);
  210|  37.8M|   const int64_t f5g8_19 = f5 * static_cast<int64_t>(g8_19);
  211|  37.8M|   const int64_t f5g9_38 = f5_2 * static_cast<int64_t>(g9_19);
  212|  37.8M|   const int64_t f6g0 = f6 * static_cast<int64_t>(g0);
  213|  37.8M|   const int64_t f6g1 = f6 * static_cast<int64_t>(g1);
  214|  37.8M|   const int64_t f6g2 = f6 * static_cast<int64_t>(g2);
  215|  37.8M|   const int64_t f6g3 = f6 * static_cast<int64_t>(g3);
  216|  37.8M|   const int64_t f6g4_19 = f6 * static_cast<int64_t>(g4_19);
  217|  37.8M|   const int64_t f6g5_19 = f6 * static_cast<int64_t>(g5_19);
  218|  37.8M|   const int64_t f6g6_19 = f6 * static_cast<int64_t>(g6_19);
  219|  37.8M|   const int64_t f6g7_19 = f6 * static_cast<int64_t>(g7_19);
  220|  37.8M|   const int64_t f6g8_19 = f6 * static_cast<int64_t>(g8_19);
  221|  37.8M|   const int64_t f6g9_19 = f6 * static_cast<int64_t>(g9_19);
  222|  37.8M|   const int64_t f7g0 = f7 * static_cast<int64_t>(g0);
  223|  37.8M|   const int64_t f7g1_2 = f7_2 * static_cast<int64_t>(g1);
  224|  37.8M|   const int64_t f7g2 = f7 * static_cast<int64_t>(g2);
  225|  37.8M|   const int64_t f7g3_38 = f7_2 * static_cast<int64_t>(g3_19);
  226|  37.8M|   const int64_t f7g4_19 = f7 * static_cast<int64_t>(g4_19);
  227|  37.8M|   const int64_t f7g5_38 = f7_2 * static_cast<int64_t>(g5_19);
  228|  37.8M|   const int64_t f7g6_19 = f7 * static_cast<int64_t>(g6_19);
  229|  37.8M|   const int64_t f7g7_38 = f7_2 * static_cast<int64_t>(g7_19);
  230|  37.8M|   const int64_t f7g8_19 = f7 * static_cast<int64_t>(g8_19);
  231|  37.8M|   const int64_t f7g9_38 = f7_2 * static_cast<int64_t>(g9_19);
  232|  37.8M|   const int64_t f8g0 = f8 * static_cast<int64_t>(g0);
  233|  37.8M|   const int64_t f8g1 = f8 * static_cast<int64_t>(g1);
  234|  37.8M|   const int64_t f8g2_19 = f8 * static_cast<int64_t>(g2_19);
  235|  37.8M|   const int64_t f8g3_19 = f8 * static_cast<int64_t>(g3_19);
  236|  37.8M|   const int64_t f8g4_19 = f8 * static_cast<int64_t>(g4_19);
  237|  37.8M|   const int64_t f8g5_19 = f8 * static_cast<int64_t>(g5_19);
  238|  37.8M|   const int64_t f8g6_19 = f8 * static_cast<int64_t>(g6_19);
  239|  37.8M|   const int64_t f8g7_19 = f8 * static_cast<int64_t>(g7_19);
  240|  37.8M|   const int64_t f8g8_19 = f8 * static_cast<int64_t>(g8_19);
  241|  37.8M|   const int64_t f8g9_19 = f8 * static_cast<int64_t>(g9_19);
  242|  37.8M|   const int64_t f9g0 = f9 * static_cast<int64_t>(g0);
  243|  37.8M|   const int64_t f9g1_38 = f9_2 * static_cast<int64_t>(g1_19);
  244|  37.8M|   const int64_t f9g2_19 = f9 * static_cast<int64_t>(g2_19);
  245|  37.8M|   const int64_t f9g3_38 = f9_2 * static_cast<int64_t>(g3_19);
  246|  37.8M|   const int64_t f9g4_19 = f9 * static_cast<int64_t>(g4_19);
  247|  37.8M|   const int64_t f9g5_38 = f9_2 * static_cast<int64_t>(g5_19);
  248|  37.8M|   const int64_t f9g6_19 = f9 * static_cast<int64_t>(g6_19);
  249|  37.8M|   const int64_t f9g7_38 = f9_2 * static_cast<int64_t>(g7_19);
  250|  37.8M|   const int64_t f9g8_19 = f9 * static_cast<int64_t>(g8_19);
  251|  37.8M|   const int64_t f9g9_38 = f9_2 * static_cast<int64_t>(g9_19);
  252|       |
  253|  37.8M|   int64_t h0 = f0g0 + f1g9_38 + f2g8_19 + f3g7_38 + f4g6_19 + f5g5_38 + f6g4_19 + f7g3_38 + f8g2_19 + f9g1_38;
  254|  37.8M|   int64_t h1 = f0g1 + f1g0 + f2g9_19 + f3g8_19 + f4g7_19 + f5g6_19 + f6g5_19 + f7g4_19 + f8g3_19 + f9g2_19;
  255|  37.8M|   int64_t h2 = f0g2 + f1g1_2 + f2g0 + f3g9_38 + f4g8_19 + f5g7_38 + f6g6_19 + f7g5_38 + f8g4_19 + f9g3_38;
  256|  37.8M|   int64_t h3 = f0g3 + f1g2 + f2g1 + f3g0 + f4g9_19 + f5g8_19 + f6g7_19 + f7g6_19 + f8g5_19 + f9g4_19;
  257|  37.8M|   int64_t h4 = f0g4 + f1g3_2 + f2g2 + f3g1_2 + f4g0 + f5g9_38 + f6g8_19 + f7g7_38 + f8g6_19 + f9g5_38;
  258|  37.8M|   int64_t h5 = f0g5 + f1g4 + f2g3 + f3g2 + f4g1 + f5g0 + f6g9_19 + f7g8_19 + f8g7_19 + f9g6_19;
  259|  37.8M|   int64_t h6 = f0g6 + f1g5_2 + f2g4 + f3g3_2 + f4g2 + f5g1_2 + f6g0 + f7g9_38 + f8g8_19 + f9g7_38;
  260|  37.8M|   int64_t h7 = f0g7 + f1g6 + f2g5 + f3g4 + f4g3 + f5g2 + f6g1 + f7g0 + f8g9_19 + f9g8_19;
  261|  37.8M|   int64_t h8 = f0g8 + f1g7_2 + f2g6 + f3g5_2 + f4g4 + f5g3_2 + f6g2 + f7g1_2 + f8g0 + f9g9_38;
  262|  37.8M|   int64_t h9 = f0g9 + f1g8 + f2g7 + f3g6 + f4g5 + f5g4 + f6g3 + f7g2 + f8g1 + f9g0;
  263|       |
  264|       |   /*
  265|       |   |h0| <= (1.65*1.65*2^52*(1+19+19+19+19)+1.65*1.65*2^50*(38+38+38+38+38))
  266|       |   i.e. |h0| <= 1.4*2^60; narrower ranges for h2, h4, h6, h8
  267|       |   |h1| <= (1.65*1.65*2^51*(1+1+19+19+19+19+19+19+19+19))
  268|       |   i.e. |h1| <= 1.7*2^59; narrower ranges for h3, h5, h7, h9
  269|       |   */
  270|  37.8M|   carry<26>(h0, h1);
  271|  37.8M|   carry<26>(h4, h5);
  272|       |
  273|       |   /* |h0| <= 2^25 */
  274|       |   /* |h4| <= 2^25 */
  275|       |   /* |h1| <= 1.71*2^59 */
  276|       |   /* |h5| <= 1.71*2^59 */
  277|       |
  278|  37.8M|   carry<25>(h1, h2);
  279|  37.8M|   carry<25>(h5, h6);
  280|       |
  281|       |   /* |h1| <= 2^24; from now on fits into int32 */
  282|       |   /* |h5| <= 2^24; from now on fits into int32 */
  283|       |   /* |h2| <= 1.41*2^60 */
  284|       |   /* |h6| <= 1.41*2^60 */
  285|       |
  286|  37.8M|   carry<26>(h2, h3);
  287|  37.8M|   carry<26>(h6, h7);
  288|       |   /* |h2| <= 2^25; from now on fits into int32 unchanged */
  289|       |   /* |h6| <= 2^25; from now on fits into int32 unchanged */
  290|       |   /* |h3| <= 1.71*2^59 */
  291|       |   /* |h7| <= 1.71*2^59 */
  292|       |
  293|  37.8M|   carry<25>(h3, h4);
  294|  37.8M|   carry<25>(h7, h8);
  295|       |   /* |h3| <= 2^24; from now on fits into int32 unchanged */
  296|       |   /* |h7| <= 2^24; from now on fits into int32 unchanged */
  297|       |   /* |h4| <= 1.72*2^34 */
  298|       |   /* |h8| <= 1.41*2^60 */
  299|       |
  300|  37.8M|   carry<26>(h4, h5);
  301|  37.8M|   carry<26>(h8, h9);
  302|       |   /* |h4| <= 2^25; from now on fits into int32 unchanged */
  303|       |   /* |h8| <= 2^25; from now on fits into int32 unchanged */
  304|       |   /* |h5| <= 1.01*2^24 */
  305|       |   /* |h9| <= 1.71*2^59 */
  306|       |
  307|  37.8M|   carry<25, 19>(h9, h0);
  308|       |
  309|       |   /* |h9| <= 2^24; from now on fits into int32 unchanged */
  310|       |   /* |h0| <= 1.1*2^39 */
  311|       |
  312|  37.8M|   carry<26>(h0, h1);
  313|       |   /* |h0| <= 2^25; from now on fits into int32 unchanged */
  314|       |   /* |h1| <= 1.01*2^24 */
  315|       |
  316|  37.8M|   return FE_25519(h0, h1, h2, h3, h4, h5, h6, h7, h8, h9);
  317|  37.8M|}
_ZN5Botan8FE_255198sqr_iterERKS0_m:
  335|  20.0M|FE_25519 FE_25519::sqr_iter(const FE_25519& f, size_t iter) {
  336|  20.0M|   int32_t f0 = f[0];
  337|  20.0M|   int32_t f1 = f[1];
  338|  20.0M|   int32_t f2 = f[2];
  339|  20.0M|   int32_t f3 = f[3];
  340|  20.0M|   int32_t f4 = f[4];
  341|  20.0M|   int32_t f5 = f[5];
  342|  20.0M|   int32_t f6 = f[6];
  343|  20.0M|   int32_t f7 = f[7];
  344|  20.0M|   int32_t f8 = f[8];
  345|  20.0M|   int32_t f9 = f[9];
  346|       |
  347|  52.6M|   for(size_t i = 0; i != iter; ++i) {
  ------------------
  |  Branch (347:22): [True: 32.5M, False: 20.0M]
  ------------------
  348|  32.5M|      const int32_t f0_2 = 2 * f0;
  349|  32.5M|      const int32_t f1_2 = 2 * f1;
  350|  32.5M|      const int32_t f2_2 = 2 * f2;
  351|  32.5M|      const int32_t f3_2 = 2 * f3;
  352|  32.5M|      const int32_t f4_2 = 2 * f4;
  353|  32.5M|      const int32_t f5_2 = 2 * f5;
  354|  32.5M|      const int32_t f6_2 = 2 * f6;
  355|  32.5M|      const int32_t f7_2 = 2 * f7;
  356|  32.5M|      const int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
  357|  32.5M|      const int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
  358|  32.5M|      const int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
  359|  32.5M|      const int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
  360|  32.5M|      const int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
  361|       |
  362|  32.5M|      const int64_t f0f0 = f0 * static_cast<int64_t>(f0);
  363|  32.5M|      const int64_t f0f1_2 = f0_2 * static_cast<int64_t>(f1);
  364|  32.5M|      const int64_t f0f2_2 = f0_2 * static_cast<int64_t>(f2);
  365|  32.5M|      const int64_t f0f3_2 = f0_2 * static_cast<int64_t>(f3);
  366|  32.5M|      const int64_t f0f4_2 = f0_2 * static_cast<int64_t>(f4);
  367|  32.5M|      const int64_t f0f5_2 = f0_2 * static_cast<int64_t>(f5);
  368|  32.5M|      const int64_t f0f6_2 = f0_2 * static_cast<int64_t>(f6);
  369|  32.5M|      const int64_t f0f7_2 = f0_2 * static_cast<int64_t>(f7);
  370|  32.5M|      const int64_t f0f8_2 = f0_2 * static_cast<int64_t>(f8);
  371|  32.5M|      const int64_t f0f9_2 = f0_2 * static_cast<int64_t>(f9);
  372|  32.5M|      const int64_t f1f1_2 = f1_2 * static_cast<int64_t>(f1);
  373|  32.5M|      const int64_t f1f2_2 = f1_2 * static_cast<int64_t>(f2);
  374|  32.5M|      const int64_t f1f3_4 = f1_2 * static_cast<int64_t>(f3_2);
  375|  32.5M|      const int64_t f1f4_2 = f1_2 * static_cast<int64_t>(f4);
  376|  32.5M|      const int64_t f1f5_4 = f1_2 * static_cast<int64_t>(f5_2);
  377|  32.5M|      const int64_t f1f6_2 = f1_2 * static_cast<int64_t>(f6);
  378|  32.5M|      const int64_t f1f7_4 = f1_2 * static_cast<int64_t>(f7_2);
  379|  32.5M|      const int64_t f1f8_2 = f1_2 * static_cast<int64_t>(f8);
  380|  32.5M|      const int64_t f1f9_76 = f1_2 * static_cast<int64_t>(f9_38);
  381|  32.5M|      const int64_t f2f2 = f2 * static_cast<int64_t>(f2);
  382|  32.5M|      const int64_t f2f3_2 = f2_2 * static_cast<int64_t>(f3);
  383|  32.5M|      const int64_t f2f4_2 = f2_2 * static_cast<int64_t>(f4);
  384|  32.5M|      const int64_t f2f5_2 = f2_2 * static_cast<int64_t>(f5);
  385|  32.5M|      const int64_t f2f6_2 = f2_2 * static_cast<int64_t>(f6);
  386|  32.5M|      const int64_t f2f7_2 = f2_2 * static_cast<int64_t>(f7);
  387|  32.5M|      const int64_t f2f8_38 = f2_2 * static_cast<int64_t>(f8_19);
  388|  32.5M|      const int64_t f2f9_38 = f2 * static_cast<int64_t>(f9_38);
  389|  32.5M|      const int64_t f3f3_2 = f3_2 * static_cast<int64_t>(f3);
  390|  32.5M|      const int64_t f3f4_2 = f3_2 * static_cast<int64_t>(f4);
  391|  32.5M|      const int64_t f3f5_4 = f3_2 * static_cast<int64_t>(f5_2);
  392|  32.5M|      const int64_t f3f6_2 = f3_2 * static_cast<int64_t>(f6);
  393|  32.5M|      const int64_t f3f7_76 = f3_2 * static_cast<int64_t>(f7_38);
  394|  32.5M|      const int64_t f3f8_38 = f3_2 * static_cast<int64_t>(f8_19);
  395|  32.5M|      const int64_t f3f9_76 = f3_2 * static_cast<int64_t>(f9_38);
  396|  32.5M|      const int64_t f4f4 = f4 * static_cast<int64_t>(f4);
  397|  32.5M|      const int64_t f4f5_2 = f4_2 * static_cast<int64_t>(f5);
  398|  32.5M|      const int64_t f4f6_38 = f4_2 * static_cast<int64_t>(f6_19);
  399|  32.5M|      const int64_t f4f7_38 = f4 * static_cast<int64_t>(f7_38);
  400|  32.5M|      const int64_t f4f8_38 = f4_2 * static_cast<int64_t>(f8_19);
  401|  32.5M|      const int64_t f4f9_38 = f4 * static_cast<int64_t>(f9_38);
  402|  32.5M|      const int64_t f5f5_38 = f5 * static_cast<int64_t>(f5_38);
  403|  32.5M|      const int64_t f5f6_38 = f5_2 * static_cast<int64_t>(f6_19);
  404|  32.5M|      const int64_t f5f7_76 = f5_2 * static_cast<int64_t>(f7_38);
  405|  32.5M|      const int64_t f5f8_38 = f5_2 * static_cast<int64_t>(f8_19);
  406|  32.5M|      const int64_t f5f9_76 = f5_2 * static_cast<int64_t>(f9_38);
  407|  32.5M|      const int64_t f6f6_19 = f6 * static_cast<int64_t>(f6_19);
  408|  32.5M|      const int64_t f6f7_38 = f6 * static_cast<int64_t>(f7_38);
  409|  32.5M|      const int64_t f6f8_38 = f6_2 * static_cast<int64_t>(f8_19);
  410|  32.5M|      const int64_t f6f9_38 = f6 * static_cast<int64_t>(f9_38);
  411|  32.5M|      const int64_t f7f7_38 = f7 * static_cast<int64_t>(f7_38);
  412|  32.5M|      const int64_t f7f8_38 = f7_2 * static_cast<int64_t>(f8_19);
  413|  32.5M|      const int64_t f7f9_76 = f7_2 * static_cast<int64_t>(f9_38);
  414|  32.5M|      const int64_t f8f8_19 = f8 * static_cast<int64_t>(f8_19);
  415|  32.5M|      const int64_t f8f9_38 = f8 * static_cast<int64_t>(f9_38);
  416|  32.5M|      const int64_t f9f9_38 = f9 * static_cast<int64_t>(f9_38);
  417|       |
  418|  32.5M|      int64_t h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38;
  419|  32.5M|      int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38;
  420|  32.5M|      int64_t h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19;
  421|  32.5M|      int64_t h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38;
  422|  32.5M|      int64_t h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38;
  423|  32.5M|      int64_t h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38;
  424|  32.5M|      int64_t h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19;
  425|  32.5M|      int64_t h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38;
  426|  32.5M|      int64_t h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38;
  427|  32.5M|      int64_t h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2;
  428|       |
  429|  32.5M|      carry<26>(h0, h1);
  430|  32.5M|      carry<26>(h4, h5);
  431|  32.5M|      carry<25>(h1, h2);
  432|  32.5M|      carry<25>(h5, h6);
  433|  32.5M|      carry<26>(h2, h3);
  434|  32.5M|      carry<26>(h6, h7);
  435|       |
  436|  32.5M|      carry<25>(h3, h4);
  437|  32.5M|      carry<25>(h7, h8);
  438|       |
  439|  32.5M|      carry<26>(h4, h5);
  440|  32.5M|      carry<26>(h8, h9);
  441|  32.5M|      carry<25, 19>(h9, h0);
  442|  32.5M|      carry<26>(h0, h1);
  443|       |
  444|  32.5M|      f0 = static_cast<int32_t>(h0);
  445|  32.5M|      f1 = static_cast<int32_t>(h1);
  446|  32.5M|      f2 = static_cast<int32_t>(h2);
  447|  32.5M|      f3 = static_cast<int32_t>(h3);
  448|  32.5M|      f4 = static_cast<int32_t>(h4);
  449|  32.5M|      f5 = static_cast<int32_t>(h5);
  450|  32.5M|      f6 = static_cast<int32_t>(h6);
  451|  32.5M|      f7 = static_cast<int32_t>(h7);
  452|  32.5M|      f8 = static_cast<int32_t>(h8);
  453|  32.5M|      f9 = static_cast<int32_t>(h9);
  454|  32.5M|   }
  455|       |
  456|  20.0M|   return FE_25519(f0, f1, f2, f3, f4, f5, f6, f7, f8, f9);
  457|  20.0M|}
_ZN5Botan8FE_255194sqr2ERKS0_:
  475|  6.46M|FE_25519 FE_25519::sqr2(const FE_25519& f) {
  476|  6.46M|   const int32_t f0 = f[0];
  477|  6.46M|   const int32_t f1 = f[1];
  478|  6.46M|   const int32_t f2 = f[2];
  479|  6.46M|   const int32_t f3 = f[3];
  480|  6.46M|   const int32_t f4 = f[4];
  481|  6.46M|   const int32_t f5 = f[5];
  482|  6.46M|   const int32_t f6 = f[6];
  483|  6.46M|   const int32_t f7 = f[7];
  484|  6.46M|   const int32_t f8 = f[8];
  485|  6.46M|   const int32_t f9 = f[9];
  486|  6.46M|   const int32_t f0_2 = 2 * f0;
  487|  6.46M|   const int32_t f1_2 = 2 * f1;
  488|  6.46M|   const int32_t f2_2 = 2 * f2;
  489|  6.46M|   const int32_t f3_2 = 2 * f3;
  490|  6.46M|   const int32_t f4_2 = 2 * f4;
  491|  6.46M|   const int32_t f5_2 = 2 * f5;
  492|  6.46M|   const int32_t f6_2 = 2 * f6;
  493|  6.46M|   const int32_t f7_2 = 2 * f7;
  494|  6.46M|   const int32_t f5_38 = 38 * f5; /* 1.959375*2^30 */
  495|  6.46M|   const int32_t f6_19 = 19 * f6; /* 1.959375*2^30 */
  496|  6.46M|   const int32_t f7_38 = 38 * f7; /* 1.959375*2^30 */
  497|  6.46M|   const int32_t f8_19 = 19 * f8; /* 1.959375*2^30 */
  498|  6.46M|   const int32_t f9_38 = 38 * f9; /* 1.959375*2^30 */
  499|  6.46M|   const int64_t f0f0 = f0 * static_cast<int64_t>(f0);
  500|  6.46M|   const int64_t f0f1_2 = f0_2 * static_cast<int64_t>(f1);
  501|  6.46M|   const int64_t f0f2_2 = f0_2 * static_cast<int64_t>(f2);
  502|  6.46M|   const int64_t f0f3_2 = f0_2 * static_cast<int64_t>(f3);
  503|  6.46M|   const int64_t f0f4_2 = f0_2 * static_cast<int64_t>(f4);
  504|  6.46M|   const int64_t f0f5_2 = f0_2 * static_cast<int64_t>(f5);
  505|  6.46M|   const int64_t f0f6_2 = f0_2 * static_cast<int64_t>(f6);
  506|  6.46M|   const int64_t f0f7_2 = f0_2 * static_cast<int64_t>(f7);
  507|  6.46M|   const int64_t f0f8_2 = f0_2 * static_cast<int64_t>(f8);
  508|  6.46M|   const int64_t f0f9_2 = f0_2 * static_cast<int64_t>(f9);
  509|  6.46M|   const int64_t f1f1_2 = f1_2 * static_cast<int64_t>(f1);
  510|  6.46M|   const int64_t f1f2_2 = f1_2 * static_cast<int64_t>(f2);
  511|  6.46M|   const int64_t f1f3_4 = f1_2 * static_cast<int64_t>(f3_2);
  512|  6.46M|   const int64_t f1f4_2 = f1_2 * static_cast<int64_t>(f4);
  513|  6.46M|   const int64_t f1f5_4 = f1_2 * static_cast<int64_t>(f5_2);
  514|  6.46M|   const int64_t f1f6_2 = f1_2 * static_cast<int64_t>(f6);
  515|  6.46M|   const int64_t f1f7_4 = f1_2 * static_cast<int64_t>(f7_2);
  516|  6.46M|   const int64_t f1f8_2 = f1_2 * static_cast<int64_t>(f8);
  517|  6.46M|   const int64_t f1f9_76 = f1_2 * static_cast<int64_t>(f9_38);
  518|  6.46M|   const int64_t f2f2 = f2 * static_cast<int64_t>(f2);
  519|  6.46M|   const int64_t f2f3_2 = f2_2 * static_cast<int64_t>(f3);
  520|  6.46M|   const int64_t f2f4_2 = f2_2 * static_cast<int64_t>(f4);
  521|  6.46M|   const int64_t f2f5_2 = f2_2 * static_cast<int64_t>(f5);
  522|  6.46M|   const int64_t f2f6_2 = f2_2 * static_cast<int64_t>(f6);
  523|  6.46M|   const int64_t f2f7_2 = f2_2 * static_cast<int64_t>(f7);
  524|  6.46M|   const int64_t f2f8_38 = f2_2 * static_cast<int64_t>(f8_19);
  525|  6.46M|   const int64_t f2f9_38 = f2 * static_cast<int64_t>(f9_38);
  526|  6.46M|   const int64_t f3f3_2 = f3_2 * static_cast<int64_t>(f3);
  527|  6.46M|   const int64_t f3f4_2 = f3_2 * static_cast<int64_t>(f4);
  528|  6.46M|   const int64_t f3f5_4 = f3_2 * static_cast<int64_t>(f5_2);
  529|  6.46M|   const int64_t f3f6_2 = f3_2 * static_cast<int64_t>(f6);
  530|  6.46M|   const int64_t f3f7_76 = f3_2 * static_cast<int64_t>(f7_38);
  531|  6.46M|   const int64_t f3f8_38 = f3_2 * static_cast<int64_t>(f8_19);
  532|  6.46M|   const int64_t f3f9_76 = f3_2 * static_cast<int64_t>(f9_38);
  533|  6.46M|   const int64_t f4f4 = f4 * static_cast<int64_t>(f4);
  534|  6.46M|   const int64_t f4f5_2 = f4_2 * static_cast<int64_t>(f5);
  535|  6.46M|   const int64_t f4f6_38 = f4_2 * static_cast<int64_t>(f6_19);
  536|  6.46M|   const int64_t f4f7_38 = f4 * static_cast<int64_t>(f7_38);
  537|  6.46M|   const int64_t f4f8_38 = f4_2 * static_cast<int64_t>(f8_19);
  538|  6.46M|   const int64_t f4f9_38 = f4 * static_cast<int64_t>(f9_38);
  539|  6.46M|   const int64_t f5f5_38 = f5 * static_cast<int64_t>(f5_38);
  540|  6.46M|   const int64_t f5f6_38 = f5_2 * static_cast<int64_t>(f6_19);
  541|  6.46M|   const int64_t f5f7_76 = f5_2 * static_cast<int64_t>(f7_38);
  542|  6.46M|   const int64_t f5f8_38 = f5_2 * static_cast<int64_t>(f8_19);
  543|  6.46M|   const int64_t f5f9_76 = f5_2 * static_cast<int64_t>(f9_38);
  544|  6.46M|   const int64_t f6f6_19 = f6 * static_cast<int64_t>(f6_19);
  545|  6.46M|   const int64_t f6f7_38 = f6 * static_cast<int64_t>(f7_38);
  546|  6.46M|   const int64_t f6f8_38 = f6_2 * static_cast<int64_t>(f8_19);
  547|  6.46M|   const int64_t f6f9_38 = f6 * static_cast<int64_t>(f9_38);
  548|  6.46M|   const int64_t f7f7_38 = f7 * static_cast<int64_t>(f7_38);
  549|  6.46M|   const int64_t f7f8_38 = f7_2 * static_cast<int64_t>(f8_19);
  550|  6.46M|   const int64_t f7f9_76 = f7_2 * static_cast<int64_t>(f9_38);
  551|  6.46M|   const int64_t f8f8_19 = f8 * static_cast<int64_t>(f8_19);
  552|  6.46M|   const int64_t f8f9_38 = f8 * static_cast<int64_t>(f9_38);
  553|  6.46M|   const int64_t f9f9_38 = f9 * static_cast<int64_t>(f9_38);
  554|       |
  555|  6.46M|   int64_t h0 = f0f0 + f1f9_76 + f2f8_38 + f3f7_76 + f4f6_38 + f5f5_38;
  556|  6.46M|   int64_t h1 = f0f1_2 + f2f9_38 + f3f8_38 + f4f7_38 + f5f6_38;
  557|  6.46M|   int64_t h2 = f0f2_2 + f1f1_2 + f3f9_76 + f4f8_38 + f5f7_76 + f6f6_19;
  558|  6.46M|   int64_t h3 = f0f3_2 + f1f2_2 + f4f9_38 + f5f8_38 + f6f7_38;
  559|  6.46M|   int64_t h4 = f0f4_2 + f1f3_4 + f2f2 + f5f9_76 + f6f8_38 + f7f7_38;
  560|  6.46M|   int64_t h5 = f0f5_2 + f1f4_2 + f2f3_2 + f6f9_38 + f7f8_38;
  561|  6.46M|   int64_t h6 = f0f6_2 + f1f5_4 + f2f4_2 + f3f3_2 + f7f9_76 + f8f8_19;
  562|  6.46M|   int64_t h7 = f0f7_2 + f1f6_2 + f2f5_2 + f3f4_2 + f8f9_38;
  563|  6.46M|   int64_t h8 = f0f8_2 + f1f7_4 + f2f6_2 + f3f5_4 + f4f4 + f9f9_38;
  564|  6.46M|   int64_t h9 = f0f9_2 + f1f8_2 + f2f7_2 + f3f6_2 + f4f5_2;
  565|       |
  566|  6.46M|   h0 += h0;
  567|  6.46M|   h1 += h1;
  568|  6.46M|   h2 += h2;
  569|  6.46M|   h3 += h3;
  570|  6.46M|   h4 += h4;
  571|  6.46M|   h5 += h5;
  572|  6.46M|   h6 += h6;
  573|  6.46M|   h7 += h7;
  574|  6.46M|   h8 += h8;
  575|  6.46M|   h9 += h9;
  576|       |
  577|  6.46M|   carry<26>(h0, h1);
  578|  6.46M|   carry<26>(h4, h5);
  579|       |
  580|  6.46M|   carry<25>(h1, h2);
  581|  6.46M|   carry<25>(h5, h6);
  582|       |
  583|  6.46M|   carry<26>(h2, h3);
  584|  6.46M|   carry<26>(h6, h7);
  585|       |
  586|  6.46M|   carry<25>(h3, h4);
  587|  6.46M|   carry<25>(h7, h8);
  588|  6.46M|   carry<26>(h4, h5);
  589|  6.46M|   carry<26>(h8, h9);
  590|  6.46M|   carry<25, 19>(h9, h0);
  591|  6.46M|   carry<26>(h0, h1);
  592|       |
  593|  6.46M|   return FE_25519(h0, h1, h2, h3, h4, h5, h6, h7, h8, h9);
  594|  6.46M|}
_ZN5Botan8FE_2551910from_bytesEPKh:
  600|  25.9k|void FE_25519::from_bytes(const uint8_t s[32]) {
  601|  25.9k|   int64_t h0 = load_4(s);
  602|  25.9k|   int64_t h1 = load_3(s + 4) << 6;
  603|  25.9k|   int64_t h2 = load_3(s + 7) << 5;
  604|  25.9k|   int64_t h3 = load_3(s + 10) << 3;
  605|  25.9k|   int64_t h4 = load_3(s + 13) << 2;
  606|  25.9k|   int64_t h5 = load_4(s + 16);
  607|  25.9k|   int64_t h6 = load_3(s + 20) << 7;
  608|  25.9k|   int64_t h7 = load_3(s + 23) << 5;
  609|  25.9k|   int64_t h8 = load_3(s + 26) << 4;
  610|  25.9k|   int64_t h9 = (load_3(s + 29) & 0x7fffff) << 2;
  611|       |
  612|  25.9k|   carry<25, 19>(h9, h0);
  613|  25.9k|   carry<25>(h1, h2);
  614|  25.9k|   carry<25>(h3, h4);
  615|  25.9k|   carry<25>(h5, h6);
  616|  25.9k|   carry<25>(h7, h8);
  617|       |
  618|  25.9k|   carry<26>(h0, h1);
  619|  25.9k|   carry<26>(h2, h3);
  620|  25.9k|   carry<26>(h4, h5);
  621|  25.9k|   carry<26>(h6, h7);
  622|  25.9k|   carry<26>(h8, h9);
  623|       |
  624|  25.9k|   m_fe[0] = static_cast<int32_t>(h0);
  625|  25.9k|   m_fe[1] = static_cast<int32_t>(h1);
  626|  25.9k|   m_fe[2] = static_cast<int32_t>(h2);
  627|  25.9k|   m_fe[3] = static_cast<int32_t>(h3);
  628|  25.9k|   m_fe[4] = static_cast<int32_t>(h4);
  629|  25.9k|   m_fe[5] = static_cast<int32_t>(h5);
  630|  25.9k|   m_fe[6] = static_cast<int32_t>(h6);
  631|  25.9k|   m_fe[7] = static_cast<int32_t>(h7);
  632|  25.9k|   m_fe[8] = static_cast<int32_t>(h8);
  633|  25.9k|   m_fe[9] = static_cast<int32_t>(h9);
  634|  25.9k|}
_ZNK5Botan8FE_255198to_bytesEPh:
  661|   113k|void FE_25519::to_bytes(uint8_t s[32]) const {
  662|   113k|   const int64_t X25 = (1 << 25);
  663|       |
  664|   113k|   int32_t h0 = m_fe[0];
  665|   113k|   int32_t h1 = m_fe[1];
  666|   113k|   int32_t h2 = m_fe[2];
  667|   113k|   int32_t h3 = m_fe[3];
  668|   113k|   int32_t h4 = m_fe[4];
  669|   113k|   int32_t h5 = m_fe[5];
  670|   113k|   int32_t h6 = m_fe[6];
  671|   113k|   int32_t h7 = m_fe[7];
  672|   113k|   int32_t h8 = m_fe[8];
  673|   113k|   int32_t h9 = m_fe[9];
  674|   113k|   int32_t q;
  675|       |
  676|   113k|   q = (19 * h9 + ((static_cast<int32_t>(1) << 24))) >> 25;
  677|   113k|   q = (h0 + q) >> 26;
  678|   113k|   q = (h1 + q) >> 25;
  679|   113k|   q = (h2 + q) >> 26;
  680|   113k|   q = (h3 + q) >> 25;
  681|   113k|   q = (h4 + q) >> 26;
  682|   113k|   q = (h5 + q) >> 25;
  683|   113k|   q = (h6 + q) >> 26;
  684|   113k|   q = (h7 + q) >> 25;
  685|   113k|   q = (h8 + q) >> 26;
  686|   113k|   q = (h9 + q) >> 25;
  687|       |
  688|       |   /* Goal: Output h-(2^255-19)q, which is between 0 and 2^255-20. */
  689|   113k|   h0 += 19 * q;
  690|       |   /* Goal: Output h-2^255 q, which is between 0 and 2^255-20. */
  691|       |
  692|   113k|   carry0<26>(h0, h1);
  693|   113k|   carry0<25>(h1, h2);
  694|   113k|   carry0<26>(h2, h3);
  695|   113k|   carry0<25>(h3, h4);
  696|   113k|   carry0<26>(h4, h5);
  697|   113k|   carry0<25>(h5, h6);
  698|   113k|   carry0<26>(h6, h7);
  699|   113k|   carry0<25>(h7, h8);
  700|   113k|   carry0<26>(h8, h9);
  701|       |
  702|   113k|   int32_t carry9 = h9 >> 25;
  703|   113k|   h9 -= carry9 * X25;
  704|       |   /* h10 = carry9 */
  705|       |
  706|       |   /*
  707|       |   Goal: Output h0+...+2^255 h10-2^255 q, which is between 0 and 2^255-20.
  708|       |   Have h0+...+2^230 h9 between 0 and 2^255-1;
  709|       |   evidently 2^255 h10-2^255 q = 0.
  710|       |   Goal: Output h0+...+2^230 h9.
  711|       |   */
  712|       |
  713|   113k|   s[0] = static_cast<uint8_t>(h0 >> 0);
  714|   113k|   s[1] = static_cast<uint8_t>(h0 >> 8);
  715|   113k|   s[2] = static_cast<uint8_t>(h0 >> 16);
  716|   113k|   s[3] = static_cast<uint8_t>((h0 >> 24) | (h1 << 2));
  717|   113k|   s[4] = static_cast<uint8_t>(h1 >> 6);
  718|   113k|   s[5] = static_cast<uint8_t>(h1 >> 14);
  719|   113k|   s[6] = static_cast<uint8_t>((h1 >> 22) | (h2 << 3));
  720|   113k|   s[7] = static_cast<uint8_t>(h2 >> 5);
  721|   113k|   s[8] = static_cast<uint8_t>(h2 >> 13);
  722|   113k|   s[9] = static_cast<uint8_t>((h2 >> 21) | (h3 << 5));
  723|   113k|   s[10] = static_cast<uint8_t>(h3 >> 3);
  724|   113k|   s[11] = static_cast<uint8_t>(h3 >> 11);
  725|   113k|   s[12] = static_cast<uint8_t>((h3 >> 19) | (h4 << 6));
  726|   113k|   s[13] = static_cast<uint8_t>(h4 >> 2);
  727|   113k|   s[14] = static_cast<uint8_t>(h4 >> 10);
  728|   113k|   s[15] = static_cast<uint8_t>(h4 >> 18);
  729|   113k|   s[16] = static_cast<uint8_t>(h5 >> 0);
  730|   113k|   s[17] = static_cast<uint8_t>(h5 >> 8);
  731|   113k|   s[18] = static_cast<uint8_t>(h5 >> 16);
  732|   113k|   s[19] = static_cast<uint8_t>((h5 >> 24) | (h6 << 1));
  733|   113k|   s[20] = static_cast<uint8_t>(h6 >> 7);
  734|   113k|   s[21] = static_cast<uint8_t>(h6 >> 15);
  735|   113k|   s[22] = static_cast<uint8_t>((h6 >> 23) | (h7 << 3));
  736|   113k|   s[23] = static_cast<uint8_t>(h7 >> 5);
  737|   113k|   s[24] = static_cast<uint8_t>(h7 >> 13);
  738|   113k|   s[25] = static_cast<uint8_t>((h7 >> 21) | (h8 << 4));
  739|   113k|   s[26] = static_cast<uint8_t>(h8 >> 4);
  740|   113k|   s[27] = static_cast<uint8_t>(h8 >> 12);
  741|   113k|   s[28] = static_cast<uint8_t>((h8 >> 20) | (h9 << 6));
  742|   113k|   s[29] = static_cast<uint8_t>(h9 >> 2);
  743|   113k|   s[30] = static_cast<uint8_t>(h9 >> 10);
  744|   113k|   s[31] = static_cast<uint8_t>(h9 >> 18);
  745|   113k|}

_ZN5Botan17Ed25519_PublicKeyC1EPKhm:
   67|  26.5k|Ed25519_PublicKey::Ed25519_PublicKey(const uint8_t pub_key[], size_t pub_len) {
   68|  26.5k|   if(pub_len != 32) {
  ------------------
  |  Branch (68:7): [True: 0, False: 26.5k]
  ------------------
   69|      0|      throw Decoding_Error("Invalid length for Ed25519 key");
   70|      0|   }
   71|  26.5k|   m_public.assign(pub_key, pub_key + pub_len);
   72|  26.5k|}
_ZNK5Botan17Ed25519_PublicKey22create_verification_opENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  273|  26.5k|                                                                                std::string_view provider) const {
  274|  26.5k|   if(provider == "base" || provider.empty()) {
  ------------------
  |  Branch (274:7): [True: 0, False: 26.5k]
  |  Branch (274:29): [True: 26.5k, False: 0]
  ------------------
  275|  26.5k|      if(params.empty() || params == "Identity" || params == "Pure") {
  ------------------
  |  Branch (275:10): [True: 0, False: 26.5k]
  |  Branch (275:28): [True: 0, False: 26.5k]
  |  Branch (275:52): [True: 26.5k, False: 0]
  ------------------
  276|  26.5k|         return std::make_unique<Ed25519_Pure_Verify_Operation>(*this);
  277|  26.5k|      } else if(params == "Ed25519ph") {
  ------------------
  |  Branch (277:17): [True: 0, False: 0]
  ------------------
  278|      0|         return std::make_unique<Ed25519_Hashed_Verify_Operation>(*this, "SHA-512", true);
  279|      0|      } else {
  280|      0|         return std::make_unique<Ed25519_Hashed_Verify_Operation>(*this, params, false);
  281|      0|      }
  282|  26.5k|   }
  283|      0|   throw Provider_Not_Found(algo_name(), provider);
  284|  26.5k|}
ed25519_key.cpp:_ZN5Botan12_GLOBAL__N_129Ed25519_Pure_Verify_OperationC2ERKNS_17Ed25519_PublicKeyE:
  142|  26.5k|      explicit Ed25519_Pure_Verify_Operation(const Ed25519_PublicKey& key) : m_key(key.get_public_key()) {}
ed25519_key.cpp:_ZN5Botan12_GLOBAL__N_129Ed25519_Pure_Verify_Operation6updateEPKhm:
  144|  26.5k|      void update(const uint8_t msg[], size_t msg_len) override { m_msg.insert(m_msg.end(), msg, msg + msg_len); }
ed25519_key.cpp:_ZN5Botan12_GLOBAL__N_129Ed25519_Pure_Verify_Operation18is_valid_signatureEPKhm:
  146|  26.5k|      bool is_valid_signature(const uint8_t sig[], size_t sig_len) override {
  147|  26.5k|         if(sig_len != 64) {
  ------------------
  |  Branch (147:13): [True: 0, False: 26.5k]
  ------------------
  148|      0|            return false;
  149|      0|         }
  150|       |
  151|  26.5k|         BOTAN_ASSERT_EQUAL(m_key.size(), 32, "Expected size");
  ------------------
  |  |   69|  26.5k|   do {                                                                                                \
  |  |   70|  26.5k|      if((expr1) != (expr2))                                                                           \
  |  |  ------------------
  |  |  |  Branch (70:10): [True: 0, False: 26.5k]
  |  |  ------------------
  |  |   71|  26.5k|         Botan::assertion_failure(#expr1 " == " #expr2, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   72|  26.5k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (72:12): [Folded, False: 26.5k]
  |  |  ------------------
  ------------------
  152|  26.5k|         const bool ok = ed25519_verify(m_msg.data(), m_msg.size(), sig, m_key.data(), nullptr, 0);
  153|  26.5k|         m_msg.clear();
  154|  26.5k|         return ok;
  155|  26.5k|      }

_ZN5Botan27ge_frombytes_negate_vartimeEPNS_5ge_p3EPKh:
  425|  25.9k|int ge_frombytes_negate_vartime(ge_p3* h, const uint8_t* s) {
  426|  25.9k|   static const FE_25519 d = {
  427|  25.9k|      -10913610, 13857413, -15372611, 6949391, 114729, -8787816, -6275908, -3247719, -18696448, -12055116};
  428|  25.9k|   static const FE_25519 sqrtm1 = {
  429|  25.9k|      -32595792, -7943725, 9377950, 3500415, 12389472, -272473, -25146209, -2005654, 326686, 11406482};
  430|       |
  431|  25.9k|   FE_25519 u;
  432|  25.9k|   FE_25519 v;
  433|  25.9k|   FE_25519 v3;
  434|  25.9k|   FE_25519 vxx;
  435|  25.9k|   FE_25519 check;
  436|       |
  437|  25.9k|   fe_frombytes(h->Y, s);
  438|  25.9k|   fe_1(h->Z);
  439|  25.9k|   fe_sq(u, h->Y);
  440|  25.9k|   fe_mul(v, u, d);
  441|  25.9k|   fe_sub(u, u, h->Z); /* u = y^2-1 */
  442|  25.9k|   fe_add(v, v, h->Z); /* v = dy^2+1 */
  443|       |
  444|  25.9k|   fe_sq(v3, v);
  445|  25.9k|   fe_mul(v3, v3, v); /* v3 = v^3 */
  446|  25.9k|   fe_sq(h->X, v3);
  447|  25.9k|   fe_mul(h->X, h->X, v);
  448|  25.9k|   fe_mul(h->X, h->X, u); /* x = uv^7 */
  449|       |
  450|  25.9k|   fe_pow22523(h->X, h->X); /* x = (uv^7)^((q-5)/8) */
  451|  25.9k|   fe_mul(h->X, h->X, v3);
  452|  25.9k|   fe_mul(h->X, h->X, u); /* x = uv^3(uv^7)^((q-5)/8) */
  453|       |
  454|  25.9k|   fe_sq(vxx, h->X);
  455|  25.9k|   fe_mul(vxx, vxx, v);
  456|  25.9k|   fe_sub(check, vxx, u); /* vx^2-u */
  457|  25.9k|   if(fe_isnonzero(check)) {
  ------------------
  |  Branch (457:7): [True: 10.0k, False: 15.8k]
  ------------------
  458|  10.0k|      fe_add(check, vxx, u); /* vx^2+u */
  459|  10.0k|      if(fe_isnonzero(check)) {
  ------------------
  |  Branch (459:10): [True: 20, False: 10.0k]
  ------------------
  460|     20|         return -1;
  461|     20|      }
  462|  10.0k|      fe_mul(h->X, h->X, sqrtm1);
  463|  10.0k|   }
  464|       |
  465|  25.9k|   if(fe_isnegative(h->X) == (s[31] >> 7)) {
  ------------------
  |  Branch (465:7): [True: 5.26k, False: 20.6k]
  ------------------
  466|  5.26k|      fe_neg(h->X, h->X);
  467|  5.26k|   }
  468|       |
  469|  25.9k|   fe_mul(h->T, h->X, h->Y);
  470|  25.9k|   return 0;
  471|  25.9k|}
_ZN5Botan28ge_double_scalarmult_vartimeEPhPKhPKNS_5ge_p3ES2_:
  480|  25.6k|void ge_double_scalarmult_vartime(uint8_t out[32], const uint8_t* a, const ge_p3* A, const uint8_t* b) {
  481|  25.6k|   static const ge_precomp Bi[8] = {
  482|  25.6k|      {
  483|  25.6k|         {25967493, -14356035, 29566456, 3660896, -12694345, 4014787, 27544626, -11754271, -6079156, 2047605},
  484|  25.6k|         {-12545711, 934262, -2722910, 3049990, -727428, 9406986, 12720692, 5043384, 19500929, -15469378},
  485|  25.6k|         {-8738181, 4489570, 9688441, -14785194, 10184609, -12363380, 29287919, 11864899, -24514362, -4438546},
  486|  25.6k|      },
  487|  25.6k|      {
  488|  25.6k|         {15636291, -9688557, 24204773, -7912398, 616977, -16685262, 27787600, -14772189, 28944400, -1550024},
  489|  25.6k|         {16568933, 4717097, -11556148, -1102322, 15682896, -11807043, 16354577, -11775962, 7689662, 11199574},
  490|  25.6k|         {30464156, -5976125, -11779434, -15670865, 23220365, 15915852, 7512774, 10017326, -17749093, -9920357},
  491|  25.6k|      },
  492|  25.6k|      {
  493|  25.6k|         {10861363, 11473154, 27284546, 1981175, -30064349, 12577861, 32867885, 14515107, -15438304, 10819380},
  494|  25.6k|         {4708026, 6336745, 20377586, 9066809, -11272109, 6594696, -25653668, 12483688, -12668491, 5581306},
  495|  25.6k|         {19563160, 16186464, -29386857, 4097519, 10237984, -4348115, 28542350, 13850243, -23678021, -15815942},
  496|  25.6k|      },
  497|  25.6k|      {
  498|  25.6k|         {5153746, 9909285, 1723747, -2777874, 30523605, 5516873, 19480852, 5230134, -23952439, -15175766},
  499|  25.6k|         {-30269007, -3463509, 7665486, 10083793, 28475525, 1649722, 20654025, 16520125, 30598449, 7715701},
  500|  25.6k|         {28881845, 14381568, 9657904, 3680757, -20181635, 7843316, -31400660, 1370708, 29794553, -1409300},
  501|  25.6k|      },
  502|  25.6k|      {
  503|  25.6k|         {-22518993, -6692182, 14201702, -8745502, -23510406, 8844726, 18474211, -1361450, -13062696, 13821877},
  504|  25.6k|         {-6455177, -7839871, 3374702, -4740862, -27098617, -10571707, 31655028, -7212327, 18853322, -14220951},
  505|  25.6k|         {4566830, -12963868, -28974889, -12240689, -7602672, -2830569, -8514358, -10431137, 2207753, -3209784},
  506|  25.6k|      },
  507|  25.6k|      {
  508|  25.6k|         {-25154831, -4185821, 29681144, 7868801, -6854661, -9423865, -12437364, -663000, -31111463, -16132436},
  509|  25.6k|         {25576264, -2703214, 7349804, -11814844, 16472782, 9300885, 3844789, 15725684, 171356, 6466918},
  510|  25.6k|         {23103977, 13316479, 9739013, -16149481, 817875, -15038942, 8965339, -14088058, -30714912, 16193877},
  511|  25.6k|      },
  512|  25.6k|      {
  513|  25.6k|         {-33521811, 3180713, -2394130, 14003687, -16903474, -16270840, 17238398, 4729455, -18074513, 9256800},
  514|  25.6k|         {-25182317, -4174131, 32336398, 5036987, -21236817, 11360617, 22616405, 9761698, -19827198, 630305},
  515|  25.6k|         {-13720693, 2639453, -24237460, -7406481, 9494427, -5774029, -6554551, -15960994, -2449256, -14291300},
  516|  25.6k|      },
  517|  25.6k|      {
  518|  25.6k|         {-3151181, -5046075, 9282714, 6866145, -31907062, -863023, -18940575, 15033784, 25105118, -7894876},
  519|  25.6k|         {-24326370, 15950226, -31801215, -14592823, -11662737, -5090925, 1573892, -2625887, 2198790, -15804619},
  520|  25.6k|         {-3099351, 10324967, -2241613, 7453183, -5446979, -2735503, -13812022, -16236442, -32461234, -12290683},
  521|  25.6k|      },
  522|  25.6k|   };
  523|       |
  524|  25.6k|   int8_t aslide[256];
  525|  25.6k|   int8_t bslide[256];
  526|  25.6k|   ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */
  527|  25.6k|   ge_p1p1 t;
  528|  25.6k|   ge_p3 u;
  529|  25.6k|   ge_p3 A2;
  530|  25.6k|   ge_p2 r;
  531|  25.6k|   int i;
  532|       |
  533|  25.6k|   slide(aslide, a);
  534|  25.6k|   slide(bslide, b);
  535|       |
  536|  25.6k|   ge_p3_to_cached(&Ai[0], A);
  537|  25.6k|   ge_p3_dbl(&t, A);
  538|  25.6k|   ge_p1p1_to_p3(&A2, &t);
  539|  25.6k|   ge_add(&t, &A2, &Ai[0]);
  540|  25.6k|   ge_p1p1_to_p3(&u, &t);
  541|  25.6k|   ge_p3_to_cached(&Ai[1], &u);
  542|  25.6k|   ge_add(&t, &A2, &Ai[1]);
  543|  25.6k|   ge_p1p1_to_p3(&u, &t);
  544|  25.6k|   ge_p3_to_cached(&Ai[2], &u);
  545|  25.6k|   ge_add(&t, &A2, &Ai[2]);
  546|  25.6k|   ge_p1p1_to_p3(&u, &t);
  547|  25.6k|   ge_p3_to_cached(&Ai[3], &u);
  548|  25.6k|   ge_add(&t, &A2, &Ai[3]);
  549|  25.6k|   ge_p1p1_to_p3(&u, &t);
  550|  25.6k|   ge_p3_to_cached(&Ai[4], &u);
  551|  25.6k|   ge_add(&t, &A2, &Ai[4]);
  552|  25.6k|   ge_p1p1_to_p3(&u, &t);
  553|  25.6k|   ge_p3_to_cached(&Ai[5], &u);
  554|  25.6k|   ge_add(&t, &A2, &Ai[5]);
  555|  25.6k|   ge_p1p1_to_p3(&u, &t);
  556|  25.6k|   ge_p3_to_cached(&Ai[6], &u);
  557|  25.6k|   ge_add(&t, &A2, &Ai[6]);
  558|  25.6k|   ge_p1p1_to_p3(&u, &t);
  559|  25.6k|   ge_p3_to_cached(&Ai[7], &u);
  560|       |
  561|  25.6k|   ge_p2_0(&r);
  562|       |
  563|   159k|   for(i = 255; i >= 0; --i) {
  ------------------
  |  Branch (563:17): [True: 159k, False: 0]
  ------------------
  564|   159k|      if(aslide[i] || bslide[i]) {
  ------------------
  |  Branch (564:10): [True: 16.6k, False: 142k]
  |  Branch (564:23): [True: 9.04k, False: 133k]
  ------------------
  565|  25.6k|         break;
  566|  25.6k|      }
  567|   159k|   }
  568|       |
  569|  6.46M|   for(; i >= 0; --i) {
  ------------------
  |  Branch (569:10): [True: 6.43M, False: 25.6k]
  ------------------
  570|  6.43M|      ge_p2_dbl(&t, &r);
  571|       |
  572|  6.43M|      if(aslide[i] > 0) {
  ------------------
  |  Branch (572:10): [True: 551k, False: 5.88M]
  ------------------
  573|   551k|         ge_p1p1_to_p3(&u, &t);
  574|   551k|         ge_add(&t, &u, &Ai[aslide[i] >> 1]);
  575|  5.88M|      } else if(aslide[i] < 0) {
  ------------------
  |  Branch (575:17): [True: 538k, False: 5.34M]
  ------------------
  576|   538k|         ge_p1p1_to_p3(&u, &t);
  577|   538k|         ge_sub(&t, &u, &Ai[(-aslide[i]) >> 1]);
  578|   538k|      }
  579|       |
  580|  6.43M|      if(bslide[i] > 0) {
  ------------------
  |  Branch (580:10): [True: 560k, False: 5.87M]
  ------------------
  581|   560k|         ge_p1p1_to_p3(&u, &t);
  582|   560k|         ge_madd(&t, &u, &Bi[bslide[i] >> 1]);
  583|  5.87M|      } else if(bslide[i] < 0) {
  ------------------
  |  Branch (583:17): [True: 471k, False: 5.40M]
  ------------------
  584|   471k|         ge_p1p1_to_p3(&u, &t);
  585|   471k|         ge_msub(&t, &u, &Bi[(-bslide[i]) >> 1]);
  586|   471k|      }
  587|       |
  588|  6.43M|      ge_p1p1_to_p2(&r, &t);
  589|  6.43M|   }
  590|       |
  591|  25.6k|   ge_tobytes(out, &r);
  592|  25.6k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_15slideEPaPKh:
  375|  51.3k|void slide(int8_t* r, const uint8_t* a) {
  376|  13.1M|   for(size_t i = 0; i < 256; ++i) {
  ------------------
  |  Branch (376:22): [True: 13.1M, False: 51.3k]
  ------------------
  377|  13.1M|      r[i] = 1 & (a[i >> 3] >> (i & 7));
  378|  13.1M|   }
  379|       |
  380|  13.1M|   for(size_t i = 0; i < 256; ++i) {
  ------------------
  |  Branch (380:22): [True: 13.1M, False: 51.3k]
  ------------------
  381|  13.1M|      if(r[i]) {
  ------------------
  |  Branch (381:10): [True: 2.12M, False: 11.0M]
  ------------------
  382|  12.2M|         for(size_t b = 1; b <= 6 && i + b < 256; ++b) {
  ------------------
  |  Branch (382:28): [True: 11.7M, False: 567k]
  |  Branch (382:38): [True: 11.6M, False: 19.8k]
  ------------------
  383|  11.6M|            if(r[i + b]) {
  ------------------
  |  Branch (383:16): [True: 5.61M, False: 6.06M]
  ------------------
  384|  5.61M|               if(r[i] + (r[i + b] << b) <= 15) {
  ------------------
  |  Branch (384:19): [True: 3.07M, False: 2.54M]
  ------------------
  385|  3.07M|                  r[i] += r[i + b] << b;
  386|  3.07M|                  r[i + b] = 0;
  387|  3.07M|               } else if(r[i] - (r[i + b] << b) >= -15) {
  ------------------
  |  Branch (387:26): [True: 1.01M, False: 1.53M]
  ------------------
  388|  1.01M|                  r[i] -= r[i + b] << b;
  389|  3.05M|                  for(size_t k = i + b; k < 256; ++k) {
  ------------------
  |  Branch (389:41): [True: 3.05M, False: 0]
  ------------------
  390|  3.05M|                     if(!r[k]) {
  ------------------
  |  Branch (390:25): [True: 1.01M, False: 2.04M]
  ------------------
  391|  1.01M|                        r[k] = 1;
  392|  1.01M|                        break;
  393|  1.01M|                     }
  394|  2.04M|                     r[k] = 0;
  395|  2.04M|                  }
  396|  1.53M|               } else {
  397|  1.53M|                  break;
  398|  1.53M|               }
  399|  5.61M|            }
  400|  11.6M|         }
  401|  2.12M|      }
  402|  13.1M|   }
  403|  51.3k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_115ge_p3_to_cachedEPNS0_9ge_cachedEPKNS_5ge_p3E:
  304|   205k|void ge_p3_to_cached(ge_cached* r, const ge_p3* p) {
  305|   205k|   static const FE_25519 d2 = {
  306|   205k|      -21827239, -5839606, -30745221, 13898782, 229458, 15978800, -12551817, -6495438, 29715968, 9444199};
  307|   205k|   fe_add(r->YplusX, p->Y, p->X);
  308|   205k|   fe_sub(r->YminusX, p->Y, p->X);
  309|   205k|   fe_copy(r->Z, p->Z);
  310|   205k|   fe_mul(r->T2d, p->T, d2);
  311|   205k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_19ge_p3_dblEPNS0_7ge_p1p1EPKNS_5ge_p3E:
  291|  25.6k|void ge_p3_dbl(ge_p1p1* r, const ge_p3* p) {
  292|  25.6k|   ge_p2 q;
  293|       |   // Convert to p2 rep
  294|  25.6k|   q.X = p->X;
  295|  25.6k|   q.Y = p->Y;
  296|  25.6k|   q.Z = p->Z;
  297|  25.6k|   ge_p2_dbl(r, &q);
  298|  25.6k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_113ge_p1p1_to_p3EPNS_5ge_p3EPKNS0_7ge_p1p1E:
  221|  2.32M|void ge_p1p1_to_p3(ge_p3* r, const ge_p1p1* p) {
  222|  2.32M|   fe_mul(r->X, p->X, p->T);
  223|  2.32M|   fe_mul(r->Y, p->Y, p->Z);
  224|  2.32M|   fe_mul(r->Z, p->Z, p->T);
  225|  2.32M|   fe_mul(r->T, p->X, p->Y);
  226|  2.32M|}
ge.cpp:_ZN5Botan12_GLOBAL__N_16ge_addEPNS0_7ge_p1p1EPKNS_5ge_p3EPKNS0_9ge_cachedE:
   54|   731k|void ge_add(ge_p1p1* r, const ge_p3* p, const ge_cached* q) {
   55|   731k|   FE_25519 t0;
   56|       |   /* qhasm: YpX1 = Y1+X1 */
   57|       |   /* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
   58|       |   /* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
   59|   731k|   fe_add(r->X, p->Y, p->X);
   60|       |
   61|       |   /* qhasm: YmX1 = Y1-X1 */
   62|       |   /* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
   63|       |   /* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
   64|   731k|   fe_sub(r->Y, p->Y, p->X);
   65|       |
   66|       |   /* qhasm: A = YpX1*YpX2 */
   67|       |   /* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YpX2=fe#15); */
   68|       |   /* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YpX2=q->YplusX); */
   69|   731k|   fe_mul(r->Z, r->X, q->YplusX);
   70|       |
   71|       |   /* qhasm: B = YmX1*YmX2 */
   72|       |   /* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YmX2=fe#16); */
   73|       |   /* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YmX2=q->YminusX); */
   74|   731k|   fe_mul(r->Y, r->Y, q->YminusX);
   75|       |
   76|       |   /* qhasm: C = T2d2*T1 */
   77|       |   /* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */
   78|       |   /* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */
   79|   731k|   fe_mul(r->T, q->T2d, p->T);
   80|       |
   81|       |   /* qhasm: ZZ = Z1*Z2 */
   82|       |   /* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */
   83|       |   /* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */
   84|   731k|   fe_mul(r->X, p->Z, q->Z);
   85|       |
   86|       |   /* qhasm: D = 2*ZZ */
   87|       |   /* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */
   88|       |   /* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */
   89|   731k|   fe_add(t0, r->X, r->X);
   90|       |
   91|       |   /* qhasm: X3 = A-B */
   92|       |   /* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
   93|       |   /* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
   94|   731k|   fe_sub(r->X, r->Z, r->Y);
   95|       |
   96|       |   /* qhasm: Y3 = A+B */
   97|       |   /* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
   98|       |   /* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
   99|   731k|   fe_add(r->Y, r->Z, r->Y);
  100|       |
  101|       |   /* qhasm: Z3 = D+C */
  102|       |   /* asm 1: fe_add(>Z3=fe#3,<D=fe#5,<C=fe#4); */
  103|       |   /* asm 2: fe_add(>Z3=r->Z,<D=t0,<C=r->T); */
  104|   731k|   fe_add(r->Z, t0, r->T);
  105|       |
  106|       |   /* qhasm: T3 = D-C */
  107|       |   /* asm 1: fe_sub(>T3=fe#4,<D=fe#5,<C=fe#4); */
  108|       |   /* asm 2: fe_sub(>T3=r->T,<D=t0,<C=r->T); */
  109|   731k|   fe_sub(r->T, t0, r->T);
  110|   731k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_17ge_p2_0EPNS0_5ge_p2E:
  417|  25.6k|void ge_p2_0(ge_p2* h) {
  418|  25.6k|   fe_0(h->X);
  419|  25.6k|   fe_1(h->Y);
  420|  25.6k|   fe_1(h->Z);
  421|  25.6k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_19ge_p2_dblEPNS0_7ge_p1p1EPKNS0_5ge_p2E:
  232|  6.46M|void ge_p2_dbl(ge_p1p1* r, const ge_p2* p) {
  233|  6.46M|   FE_25519 t0;
  234|       |   /* qhasm: XX=X1^2 */
  235|       |   /* asm 1: fe_sq(>XX=fe#1,<X1=fe#11); */
  236|       |   /* asm 2: fe_sq(>XX=r->X,<X1=p->X); */
  237|  6.46M|   fe_sq(r->X, p->X);
  238|       |
  239|       |   /* qhasm: YY=Y1^2 */
  240|       |   /* asm 1: fe_sq(>YY=fe#3,<Y1=fe#12); */
  241|       |   /* asm 2: fe_sq(>YY=r->Z,<Y1=p->Y); */
  242|  6.46M|   fe_sq(r->Z, p->Y);
  243|       |
  244|       |   /* qhasm: B=2*Z1^2 */
  245|       |   /* asm 1: fe_sq2(>B=fe#4,<Z1=fe#13); */
  246|       |   /* asm 2: fe_sq2(>B=r->T,<Z1=p->Z); */
  247|  6.46M|   fe_sq2(r->T, p->Z);
  248|       |
  249|       |   /* qhasm: A=X1+Y1 */
  250|       |   /* asm 1: fe_add(>A=fe#2,<X1=fe#11,<Y1=fe#12); */
  251|       |   /* asm 2: fe_add(>A=r->Y,<X1=p->X,<Y1=p->Y); */
  252|  6.46M|   fe_add(r->Y, p->X, p->Y);
  253|       |
  254|       |   /* qhasm: AA=A^2 */
  255|       |   /* asm 1: fe_sq(>AA=fe#5,<A=fe#2); */
  256|       |   /* asm 2: fe_sq(>AA=t0,<A=r->Y); */
  257|  6.46M|   fe_sq(t0, r->Y);
  258|       |
  259|       |   /* qhasm: Y3=YY+XX */
  260|       |   /* asm 1: fe_add(>Y3=fe#2,<YY=fe#3,<XX=fe#1); */
  261|       |   /* asm 2: fe_add(>Y3=r->Y,<YY=r->Z,<XX=r->X); */
  262|  6.46M|   fe_add(r->Y, r->Z, r->X);
  263|       |
  264|       |   /* qhasm: Z3=YY-XX */
  265|       |   /* asm 1: fe_sub(>Z3=fe#3,<YY=fe#3,<XX=fe#1); */
  266|       |   /* asm 2: fe_sub(>Z3=r->Z,<YY=r->Z,<XX=r->X); */
  267|  6.46M|   fe_sub(r->Z, r->Z, r->X);
  268|       |
  269|       |   /* qhasm: X3=AA-Y3 */
  270|       |   /* asm 1: fe_sub(>X3=fe#1,<AA=fe#5,<Y3=fe#2); */
  271|       |   /* asm 2: fe_sub(>X3=r->X,<AA=t0,<Y3=r->Y); */
  272|  6.46M|   fe_sub(r->X, t0, r->Y);
  273|       |
  274|       |   /* qhasm: T3=B-Z3 */
  275|       |   /* asm 1: fe_sub(>T3=fe#4,<B=fe#4,<Z3=fe#3); */
  276|       |   /* asm 2: fe_sub(>T3=r->T,<B=r->T,<Z3=r->Z); */
  277|  6.46M|   fe_sub(r->T, r->T, r->Z);
  278|  6.46M|}
ge.cpp:_ZN5Botan12_GLOBAL__N_16ge_subEPNS0_7ge_p1p1EPKNS_5ge_p3EPKNS0_9ge_cachedE:
  317|   538k|void ge_sub(ge_p1p1* r, const ge_p3* p, const ge_cached* q) {
  318|   538k|   FE_25519 t0;
  319|       |   /* qhasm: YpX1 = Y1+X1 */
  320|       |   /* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
  321|       |   /* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
  322|   538k|   fe_add(r->X, p->Y, p->X);
  323|       |
  324|       |   /* qhasm: YmX1 = Y1-X1 */
  325|       |   /* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
  326|       |   /* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
  327|   538k|   fe_sub(r->Y, p->Y, p->X);
  328|       |
  329|       |   /* qhasm: A = YpX1*YmX2 */
  330|       |   /* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YmX2=fe#16); */
  331|       |   /* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YmX2=q->YminusX); */
  332|   538k|   fe_mul(r->Z, r->X, q->YminusX);
  333|       |
  334|       |   /* qhasm: B = YmX1*YpX2 */
  335|       |   /* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YpX2=fe#15); */
  336|       |   /* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YpX2=q->YplusX); */
  337|   538k|   fe_mul(r->Y, r->Y, q->YplusX);
  338|       |
  339|       |   /* qhasm: C = T2d2*T1 */
  340|       |   /* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */
  341|       |   /* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */
  342|   538k|   fe_mul(r->T, q->T2d, p->T);
  343|       |
  344|       |   /* qhasm: ZZ = Z1*Z2 */
  345|       |   /* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */
  346|       |   /* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */
  347|   538k|   fe_mul(r->X, p->Z, q->Z);
  348|       |
  349|       |   /* qhasm: D = 2*ZZ */
  350|       |   /* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */
  351|       |   /* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */
  352|   538k|   fe_add(t0, r->X, r->X);
  353|       |
  354|       |   /* qhasm: X3 = A-B */
  355|       |   /* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
  356|       |   /* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
  357|   538k|   fe_sub(r->X, r->Z, r->Y);
  358|       |
  359|       |   /* qhasm: Y3 = A+B */
  360|       |   /* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
  361|       |   /* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
  362|   538k|   fe_add(r->Y, r->Z, r->Y);
  363|       |
  364|       |   /* qhasm: Z3 = D-C */
  365|       |   /* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */
  366|       |   /* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */
  367|   538k|   fe_sub(r->Z, t0, r->T);
  368|       |
  369|       |   /* qhasm: T3 = D+C */
  370|       |   /* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */
  371|       |   /* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */
  372|   538k|   fe_add(r->T, t0, r->T);
  373|   538k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_17ge_maddEPNS0_7ge_p1p1EPKNS_5ge_p3EPKNS0_10ge_precompE:
  116|   560k|void ge_madd(ge_p1p1* r, const ge_p3* p, const ge_precomp* q) {
  117|   560k|   FE_25519 t0;
  118|       |   /* qhasm: YpX1 = Y1+X1 */
  119|   560k|   fe_add(r->X, p->Y, p->X);
  120|       |
  121|       |   /* qhasm: YmX1 = Y1-X1 */
  122|   560k|   fe_sub(r->Y, p->Y, p->X);
  123|       |
  124|       |   /* qhasm: A = YpX1*ypx2 */
  125|   560k|   fe_mul(r->Z, r->X, q->yplusx);
  126|       |
  127|       |   /* qhasm: B = YmX1*ymx2 */
  128|   560k|   fe_mul(r->Y, r->Y, q->yminusx);
  129|       |
  130|       |   /* qhasm: C = xy2d2*T1 */
  131|   560k|   fe_mul(r->T, q->xy2d, p->T);
  132|       |
  133|       |   /* qhasm: D = 2*Z1 */
  134|   560k|   fe_add(t0, p->Z, p->Z);
  135|       |
  136|       |   /* qhasm: X3 = A-B */
  137|   560k|   fe_sub(r->X, r->Z, r->Y);
  138|       |
  139|       |   /* qhasm: Y3 = A+B */
  140|   560k|   fe_add(r->Y, r->Z, r->Y);
  141|       |
  142|       |   /* qhasm: Z3 = D+C */
  143|   560k|   fe_add(r->Z, t0, r->T);
  144|       |
  145|       |   /* qhasm: T3 = D-C */
  146|   560k|   fe_sub(r->T, t0, r->T);
  147|   560k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_17ge_msubEPNS0_7ge_p1p1EPKNS_5ge_p3EPKNS0_10ge_precompE:
  153|   471k|void ge_msub(ge_p1p1* r, const ge_p3* p, const ge_precomp* q) {
  154|   471k|   FE_25519 t0;
  155|       |
  156|       |   /* qhasm: YpX1 = Y1+X1 */
  157|       |   /* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
  158|       |   /* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
  159|   471k|   fe_add(r->X, p->Y, p->X);
  160|       |
  161|       |   /* qhasm: YmX1 = Y1-X1 */
  162|       |   /* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
  163|       |   /* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
  164|   471k|   fe_sub(r->Y, p->Y, p->X);
  165|       |
  166|       |   /* qhasm: A = YpX1*ymx2 */
  167|       |   /* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<ymx2=fe#16); */
  168|       |   /* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<ymx2=q->yminusx); */
  169|   471k|   fe_mul(r->Z, r->X, q->yminusx);
  170|       |
  171|       |   /* qhasm: B = YmX1*ypx2 */
  172|       |   /* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<ypx2=fe#15); */
  173|       |   /* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<ypx2=q->yplusx); */
  174|   471k|   fe_mul(r->Y, r->Y, q->yplusx);
  175|       |
  176|       |   /* qhasm: C = xy2d2*T1 */
  177|       |   /* asm 1: fe_mul(>C=fe#4,<xy2d2=fe#17,<T1=fe#14); */
  178|       |   /* asm 2: fe_mul(>C=r->T,<xy2d2=q->xy2d,<T1=p->T); */
  179|   471k|   fe_mul(r->T, q->xy2d, p->T);
  180|       |
  181|       |   /* qhasm: D = 2*Z1 */
  182|       |   /* asm 1: fe_add(>D=fe#5,<Z1=fe#13,<Z1=fe#13); */
  183|       |   /* asm 2: fe_add(>D=t0,<Z1=p->Z,<Z1=p->Z); */
  184|   471k|   fe_add(t0, p->Z, p->Z);
  185|       |
  186|       |   /* qhasm: X3 = A-B */
  187|       |   /* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
  188|       |   /* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
  189|   471k|   fe_sub(r->X, r->Z, r->Y);
  190|       |
  191|       |   /* qhasm: Y3 = A+B */
  192|       |   /* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
  193|       |   /* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
  194|   471k|   fe_add(r->Y, r->Z, r->Y);
  195|       |
  196|       |   /* qhasm: Z3 = D-C */
  197|       |   /* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */
  198|       |   /* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */
  199|   471k|   fe_sub(r->Z, t0, r->T);
  200|       |
  201|       |   /* qhasm: T3 = D+C */
  202|       |   /* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */
  203|       |   /* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */
  204|   471k|   fe_add(r->T, t0, r->T);
  205|   471k|}
ge.cpp:_ZN5Botan12_GLOBAL__N_113ge_p1p1_to_p2EPNS0_5ge_p2EPKNS0_7ge_p1p1E:
  211|  6.43M|void ge_p1p1_to_p2(ge_p2* r, const ge_p1p1* p) {
  212|  6.43M|   fe_mul(r->X, p->X, p->T);
  213|  6.43M|   fe_mul(r->Y, p->Y, p->Z);
  214|  6.43M|   fe_mul(r->Z, p->Z, p->T);
  215|  6.43M|}
ge.cpp:_ZN5Botan12_GLOBAL__N_110ge_tobytesEPhPKNS0_5ge_p2E:
  405|  25.6k|void ge_tobytes(uint8_t* s, const ge_p2* h) {
  406|  25.6k|   FE_25519 recip;
  407|  25.6k|   FE_25519 x;
  408|  25.6k|   FE_25519 y;
  409|       |
  410|  25.6k|   fe_invert(recip, h->Z);
  411|  25.6k|   fe_mul(x, h->X, recip);
  412|  25.6k|   fe_mul(y, h->Y, recip);
  413|  25.6k|   fe_tobytes(s, y);
  414|  25.6k|   s[31] ^= fe_isnegative(x) << 7;
  415|  25.6k|}

_ZN5Botan9sc_reduceEPh:
   25|  25.6k|void sc_reduce(uint8_t* s) {
   26|  25.6k|   const uint32_t MASK = 0x1fffff;
   27|       |
   28|  25.6k|   int64_t s0 = MASK & load_3(s);
   29|  25.6k|   int64_t s1 = MASK & (load_4(s + 2) >> 5);
   30|  25.6k|   int64_t s2 = MASK & (load_3(s + 5) >> 2);
   31|  25.6k|   int64_t s3 = MASK & (load_4(s + 7) >> 7);
   32|  25.6k|   int64_t s4 = MASK & (load_4(s + 10) >> 4);
   33|  25.6k|   int64_t s5 = MASK & (load_3(s + 13) >> 1);
   34|  25.6k|   int64_t s6 = MASK & (load_4(s + 15) >> 6);
   35|  25.6k|   int64_t s7 = MASK & (load_3(s + 18) >> 3);
   36|  25.6k|   int64_t s8 = MASK & load_3(s + 21);
   37|  25.6k|   int64_t s9 = MASK & (load_4(s + 23) >> 5);
   38|  25.6k|   int64_t s10 = MASK & (load_3(s + 26) >> 2);
   39|  25.6k|   int64_t s11 = MASK & (load_4(s + 28) >> 7);
   40|  25.6k|   int64_t s12 = MASK & (load_4(s + 31) >> 4);
   41|  25.6k|   int64_t s13 = MASK & (load_3(s + 34) >> 1);
   42|  25.6k|   int64_t s14 = MASK & (load_4(s + 36) >> 6);
   43|  25.6k|   int64_t s15 = MASK & (load_3(s + 39) >> 3);
   44|  25.6k|   int64_t s16 = MASK & load_3(s + 42);
   45|  25.6k|   int64_t s17 = MASK & (load_4(s + 44) >> 5);
   46|  25.6k|   int64_t s18 = MASK & (load_3(s + 47) >> 2);
   47|  25.6k|   int64_t s19 = MASK & (load_4(s + 49) >> 7);
   48|  25.6k|   int64_t s20 = MASK & (load_4(s + 52) >> 4);
   49|  25.6k|   int64_t s21 = MASK & (load_3(s + 55) >> 1);
   50|  25.6k|   int64_t s22 = MASK & (load_4(s + 57) >> 6);
   51|  25.6k|   int64_t s23 = (load_4(s + 60) >> 3);
   52|       |
   53|  25.6k|   redc_mul(s11, s12, s13, s14, s15, s16, s23);
   54|  25.6k|   redc_mul(s10, s11, s12, s13, s14, s15, s22);
   55|  25.6k|   redc_mul(s9, s10, s11, s12, s13, s14, s21);
   56|  25.6k|   redc_mul(s8, s9, s10, s11, s12, s13, s20);
   57|  25.6k|   redc_mul(s7, s8, s9, s10, s11, s12, s19);
   58|  25.6k|   redc_mul(s6, s7, s8, s9, s10, s11, s18);
   59|       |
   60|  25.6k|   carry<21>(s6, s7);
   61|  25.6k|   carry<21>(s8, s9);
   62|  25.6k|   carry<21>(s10, s11);
   63|  25.6k|   carry<21>(s12, s13);
   64|  25.6k|   carry<21>(s14, s15);
   65|  25.6k|   carry<21>(s16, s17);
   66|       |
   67|  25.6k|   carry<21>(s7, s8);
   68|  25.6k|   carry<21>(s9, s10);
   69|  25.6k|   carry<21>(s11, s12);
   70|  25.6k|   carry<21>(s13, s14);
   71|  25.6k|   carry<21>(s15, s16);
   72|       |
   73|  25.6k|   redc_mul(s5, s6, s7, s8, s9, s10, s17);
   74|  25.6k|   redc_mul(s4, s5, s6, s7, s8, s9, s16);
   75|  25.6k|   redc_mul(s3, s4, s5, s6, s7, s8, s15);
   76|  25.6k|   redc_mul(s2, s3, s4, s5, s6, s7, s14);
   77|  25.6k|   redc_mul(s1, s2, s3, s4, s5, s6, s13);
   78|  25.6k|   redc_mul(s0, s1, s2, s3, s4, s5, s12);
   79|       |
   80|  25.6k|   carry<21>(s0, s1);
   81|  25.6k|   carry<21>(s2, s3);
   82|  25.6k|   carry<21>(s4, s5);
   83|  25.6k|   carry<21>(s6, s7);
   84|  25.6k|   carry<21>(s8, s9);
   85|  25.6k|   carry<21>(s10, s11);
   86|       |
   87|  25.6k|   carry<21>(s1, s2);
   88|  25.6k|   carry<21>(s3, s4);
   89|  25.6k|   carry<21>(s5, s6);
   90|  25.6k|   carry<21>(s7, s8);
   91|  25.6k|   carry<21>(s9, s10);
   92|  25.6k|   carry<21>(s11, s12);
   93|       |
   94|  25.6k|   redc_mul(s0, s1, s2, s3, s4, s5, s12);
   95|       |
   96|  25.6k|   carry0<21>(s0, s1);
   97|  25.6k|   carry0<21>(s1, s2);
   98|  25.6k|   carry0<21>(s2, s3);
   99|  25.6k|   carry0<21>(s3, s4);
  100|  25.6k|   carry0<21>(s4, s5);
  101|  25.6k|   carry0<21>(s5, s6);
  102|  25.6k|   carry0<21>(s6, s7);
  103|  25.6k|   carry0<21>(s7, s8);
  104|  25.6k|   carry0<21>(s8, s9);
  105|  25.6k|   carry0<21>(s9, s10);
  106|  25.6k|   carry0<21>(s10, s11);
  107|  25.6k|   carry0<21>(s11, s12);
  108|       |
  109|  25.6k|   redc_mul(s0, s1, s2, s3, s4, s5, s12);
  110|       |
  111|  25.6k|   carry0<21>(s0, s1);
  112|  25.6k|   carry0<21>(s1, s2);
  113|  25.6k|   carry0<21>(s2, s3);
  114|  25.6k|   carry0<21>(s3, s4);
  115|  25.6k|   carry0<21>(s4, s5);
  116|  25.6k|   carry0<21>(s5, s6);
  117|  25.6k|   carry0<21>(s6, s7);
  118|  25.6k|   carry0<21>(s7, s8);
  119|  25.6k|   carry0<21>(s8, s9);
  120|  25.6k|   carry0<21>(s9, s10);
  121|  25.6k|   carry0<21>(s10, s11);
  122|  25.6k|   carry0<21>(s11, s12);
  123|       |
  124|  25.6k|   s[0] = static_cast<uint8_t>(s0 >> 0);
  125|  25.6k|   s[1] = static_cast<uint8_t>(s0 >> 8);
  126|  25.6k|   s[2] = static_cast<uint8_t>((s0 >> 16) | (s1 << 5));
  127|  25.6k|   s[3] = static_cast<uint8_t>(s1 >> 3);
  128|  25.6k|   s[4] = static_cast<uint8_t>(s1 >> 11);
  129|  25.6k|   s[5] = static_cast<uint8_t>((s1 >> 19) | (s2 << 2));
  130|  25.6k|   s[6] = static_cast<uint8_t>(s2 >> 6);
  131|  25.6k|   s[7] = static_cast<uint8_t>((s2 >> 14) | (s3 << 7));
  132|  25.6k|   s[8] = static_cast<uint8_t>(s3 >> 1);
  133|  25.6k|   s[9] = static_cast<uint8_t>(s3 >> 9);
  134|  25.6k|   s[10] = static_cast<uint8_t>((s3 >> 17) | (s4 << 4));
  135|  25.6k|   s[11] = static_cast<uint8_t>(s4 >> 4);
  136|  25.6k|   s[12] = static_cast<uint8_t>(s4 >> 12);
  137|  25.6k|   s[13] = static_cast<uint8_t>((s4 >> 20) | (s5 << 1));
  138|  25.6k|   s[14] = static_cast<uint8_t>(s5 >> 7);
  139|  25.6k|   s[15] = static_cast<uint8_t>((s5 >> 15) | (s6 << 6));
  140|  25.6k|   s[16] = static_cast<uint8_t>(s6 >> 2);
  141|  25.6k|   s[17] = static_cast<uint8_t>(s6 >> 10);
  142|  25.6k|   s[18] = static_cast<uint8_t>((s6 >> 18) | (s7 << 3));
  143|  25.6k|   s[19] = static_cast<uint8_t>(s7 >> 5);
  144|  25.6k|   s[20] = static_cast<uint8_t>(s7 >> 13);
  145|  25.6k|   s[21] = static_cast<uint8_t>(s8 >> 0);
  146|  25.6k|   s[22] = static_cast<uint8_t>(s8 >> 8);
  147|  25.6k|   s[23] = static_cast<uint8_t>((s8 >> 16) | (s9 << 5));
  148|  25.6k|   s[24] = static_cast<uint8_t>(s9 >> 3);
  149|  25.6k|   s[25] = static_cast<uint8_t>(s9 >> 11);
  150|  25.6k|   s[26] = static_cast<uint8_t>((s9 >> 19) | (s10 << 2));
  151|  25.6k|   s[27] = static_cast<uint8_t>(s10 >> 6);
  152|  25.6k|   s[28] = static_cast<uint8_t>((s10 >> 14) | (s11 << 7));
  153|  25.6k|   s[29] = static_cast<uint8_t>(s11 >> 1);
  154|  25.6k|   s[30] = static_cast<uint8_t>(s11 >> 9);
  155|  25.6k|   s[31] = static_cast<uint8_t>(s11 >> 17);
  156|  25.6k|}

_ZN5Botan6PK_Ops22Verification_with_HashC2ENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEE:
  127|  42.2k|      Verification(), m_hash(create_signature_hash(padding)) {}
_ZN5Botan6PK_Ops22Verification_with_Hash6updateEPKhm:
  152|  42.2k|void PK_Ops::Verification_with_Hash::update(const uint8_t msg[], size_t msg_len) {
  153|  42.2k|   m_hash->update(msg, msg_len);
  154|  42.2k|}
_ZN5Botan6PK_Ops22Verification_with_Hash18is_valid_signatureEPKhm:
  156|  42.2k|bool PK_Ops::Verification_with_Hash::is_valid_signature(const uint8_t sig[], size_t sig_len) {
  157|  42.2k|   const secure_vector<uint8_t> msg = m_hash->final();
  158|  42.2k|   return verify(msg.data(), msg.size(), sig, sig_len);
  159|  42.2k|}
pk_ops.cpp:_ZN5Botan12_GLOBAL__N_121create_signature_hashENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   72|  42.2k|std::unique_ptr<HashFunction> create_signature_hash(std::string_view padding) {
   73|  42.2k|   if(auto hash = HashFunction::create(padding)) {
  ------------------
  |  Branch (73:12): [True: 0, False: 42.2k]
  ------------------
   74|      0|      return hash;
   75|      0|   }
   76|       |
   77|  42.2k|   SCAN_Name req(padding);
   78|       |
   79|  42.2k|   if(req.algo_name() == "EMSA1" && req.arg_count() == 1) {
  ------------------
  |  Branch (79:7): [True: 0, False: 42.2k]
  |  Branch (79:37): [True: 0, False: 0]
  ------------------
   80|      0|      if(auto hash = HashFunction::create(req.arg(0))) {
  ------------------
  |  Branch (80:15): [True: 0, False: 0]
  ------------------
   81|      0|         return hash;
   82|      0|      }
   83|      0|   }
   84|       |
   85|  42.2k|#if defined(BOTAN_HAS_RAW_HASH_FN)
   86|  42.2k|   if(req.algo_name() == "Raw") {
  ------------------
  |  Branch (86:7): [True: 42.2k, False: 0]
  ------------------
   87|  42.2k|      if(req.arg_count() == 0) {
  ------------------
  |  Branch (87:10): [True: 6.87k, False: 35.3k]
  ------------------
   88|  6.87k|         return std::make_unique<RawHashFunction>("Raw", 0);
   89|  6.87k|      }
   90|       |
   91|  35.3k|      if(req.arg_count() == 1) {
  ------------------
  |  Branch (91:10): [True: 35.3k, False: 0]
  ------------------
   92|  35.3k|         if(auto hash = HashFunction::create(req.arg(0))) {
  ------------------
  |  Branch (92:18): [True: 35.3k, False: 0]
  ------------------
   93|  35.3k|            return std::make_unique<RawHashFunction>(std::move(hash));
   94|  35.3k|         }
   95|  35.3k|      }
   96|  35.3k|   }
   97|      0|#endif
   98|       |
   99|      0|   throw Algorithm_Not_Found(padding);
  100|  42.2k|}

_ZN5Botan11PK_VerifierC2ERKNS_10Public_KeyENSt3__117basic_string_viewIcNS4_11char_traitsIcEEEENS_16Signature_FormatES8_:
  328|  94.0k|                         std::string_view provider) {
  329|  94.0k|   m_op = key.create_verification_op(emsa, provider);
  330|  94.0k|   if(!m_op) {
  ------------------
  |  Branch (330:7): [True: 0, False: 94.0k]
  ------------------
  331|      0|      throw Invalid_Argument(fmt("Key type {} does not support signature verification", key.algo_name()));
  332|      0|   }
  333|  94.0k|   m_sig_format = format;
  334|  94.0k|   m_parts = key.message_parts();
  335|  94.0k|   m_part_size = key.message_part_size();
  336|  94.0k|   check_der_format_supported(format, m_parts);
  337|  94.0k|}
_ZN5Botan11PK_VerifierD2Ev:
  354|  94.0k|PK_Verifier::~PK_Verifier() = default;
_ZN5Botan11PK_Verifier14verify_messageEPKhmS2_m:
  368|  5.35k|bool PK_Verifier::verify_message(const uint8_t msg[], size_t msg_length, const uint8_t sig[], size_t sig_length) {
  369|  5.35k|   update(msg, msg_length);
  370|  5.35k|   return check_signature(sig, sig_length);
  371|  5.35k|}
_ZN5Botan11PK_Verifier6updateEPKhm:
  377|  94.0k|void PK_Verifier::update(const uint8_t in[], size_t length) {
  378|  94.0k|   m_op->update(in, length);
  379|  94.0k|}
_ZN5Botan11PK_Verifier15check_signatureEPKhm:
  413|  94.0k|bool PK_Verifier::check_signature(const uint8_t sig[], size_t length) {
  414|  94.0k|   try {
  415|  94.0k|      if(m_sig_format == Signature_Format::Standard) {
  ------------------
  |  Branch (415:10): [True: 94.0k, False: 0]
  ------------------
  416|  94.0k|         return m_op->is_valid_signature(sig, length);
  417|  94.0k|      } else if(m_sig_format == Signature_Format::DerSequence) {
  ------------------
  |  Branch (417:17): [True: 0, False: 0]
  ------------------
  418|      0|         bool decoding_success = false;
  419|      0|         std::vector<uint8_t> real_sig;
  420|       |
  421|      0|         try {
  422|      0|            real_sig = decode_der_signature(sig, length, m_parts, m_part_size);
  423|      0|            decoding_success = true;
  424|      0|         } catch(Decoding_Error&) {}
  425|       |
  426|      0|         bool accept = m_op->is_valid_signature(real_sig.data(), real_sig.size());
  427|       |
  428|      0|         return accept && decoding_success;
  ------------------
  |  Branch (428:17): [True: 0, False: 0]
  |  Branch (428:27): [True: 0, False: 0]
  ------------------
  429|      0|      } else {
  430|      0|         throw Internal_Error("PK_Verifier: Invalid signature format enum");
  431|      0|      }
  432|  94.0k|   } catch(Invalid_Argument&) {
  433|      0|      return false;
  434|  5.17k|   } catch(Decoding_Error&) {
  435|  5.17k|      return false;
  436|  5.17k|   } catch(Encoding_Error&) {
  437|      0|      return false;
  438|      0|   }
  439|  94.0k|}
pubkey.cpp:_ZN5Botan12_GLOBAL__N_126check_der_format_supportedENS_16Signature_FormatEm:
  238|  94.0k|void check_der_format_supported(Signature_Format format, size_t parts) {
  239|  94.0k|   if(format != Signature_Format::Standard && parts == 1) {
  ------------------
  |  Branch (239:7): [True: 0, False: 94.0k]
  |  Branch (239:47): [True: 0, False: 0]
  ------------------
  240|      0|      throw Invalid_Argument("This algorithm does not support DER encoding");
  241|      0|   }
  242|  94.0k|}

_ZNK5Botan13RSA_PublicKey11public_dataEv:
  118|  20.6k|std::shared_ptr<const RSA_Public_Data> RSA_PublicKey::public_data() const {
  119|  20.6k|   return m_public;
  120|  20.6k|}
_ZN5Botan13RSA_PublicKey4initEONS_6BigIntES2_:
  144|  21.4k|void RSA_PublicKey::init(BigInt&& n, BigInt&& e) {
  145|  21.4k|   if(n.is_negative() || n.is_even() || n.bits() < 5 /* n >= 3*5 */ || e.is_negative() || e.is_even()) {
  ------------------
  |  Branch (145:7): [True: 0, False: 21.4k]
  |  Branch (145:26): [True: 230, False: 21.1k]
  |  Branch (145:41): [True: 252, False: 20.9k]
  |  Branch (145:72): [True: 0, False: 20.9k]
  |  Branch (145:91): [True: 301, False: 20.6k]
  ------------------
  146|    783|      throw Decoding_Error("Invalid RSA public key parameters");
  147|    783|   }
  148|  20.6k|   m_public = std::make_shared<RSA_Public_Data>(std::move(n), std::move(e));
  149|  20.6k|}
_ZN5Botan13RSA_PublicKeyC1ERKNS_6BigIntES3_:
  163|  21.4k|RSA_PublicKey::RSA_PublicKey(const BigInt& modulus, const BigInt& exponent) {
  164|  21.4k|   BigInt n = modulus;
  165|  21.4k|   BigInt e = exponent;
  166|  21.4k|   init(std::move(n), std::move(e));
  167|  21.4k|}
_ZNK5Botan13RSA_PublicKey22create_verification_opENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  732|  20.6k|                                                                            std::string_view provider) const {
  733|  20.6k|   if(provider == "base" || provider.empty()) {
  ------------------
  |  Branch (733:7): [True: 0, False: 20.6k]
  |  Branch (733:29): [True: 20.6k, False: 0]
  ------------------
  734|  20.6k|      return std::make_unique<RSA_Verify_Operation>(*this, params);
  735|  20.6k|   }
  736|       |
  737|      0|   throw Provider_Not_Found(algo_name(), provider);
  738|  20.6k|}
_ZNK5Botan15RSA_Public_Data5get_nEv:
   46|  16.0k|      const BigInt& get_n() const { return m_n; }
_ZNK5Botan15RSA_Public_Data19public_modulus_bitsEv:
   50|  15.4k|      size_t public_modulus_bits() const { return m_public_modulus_bits; }
_ZN5Botan15RSA_Public_DataC2EONS_6BigIntES2_:
   34|  20.6k|            m_n(n),
   35|  20.6k|            m_e(e),
   36|  20.6k|            m_monty_n(std::make_shared<Montgomery_Params>(m_n)),
   37|  20.6k|            m_public_modulus_bits(m_n.bits()),
   38|  20.6k|            m_public_modulus_bytes(m_n.bytes()) {}
rsa.cpp:_ZN5Botan12_GLOBAL__N_120RSA_Public_OperationC2ERKNS_13RSA_PublicKeyE:
  623|  20.6k|      explicit RSA_Public_Operation(const RSA_PublicKey& rsa) : m_public(rsa.public_data()) {}
rsa.cpp:_ZNK5Botan12_GLOBAL__N_120RSA_Public_Operation20public_modulus_bytesEv:
  636|  20.6k|      size_t public_modulus_bytes() const { return m_public->public_modulus_bytes(); }
_ZNK5Botan15RSA_Public_Data20public_modulus_bytesEv:
   52|  20.6k|      size_t public_modulus_bytes() const { return m_public_modulus_bytes; }
rsa.cpp:_ZNK5Botan12_GLOBAL__N_120RSA_Public_Operation19public_modulus_bitsEv:
  625|  15.4k|      size_t public_modulus_bits() const { return m_public->public_modulus_bits(); }
rsa.cpp:_ZNK5Botan12_GLOBAL__N_120RSA_Public_Operation9public_opERKNS_6BigIntE:
  628|  16.0k|      BigInt public_op(const BigInt& m) const {
  629|  16.0k|         if(m >= m_public->get_n()) {
  ------------------
  |  Branch (629:13): [True: 526, False: 15.4k]
  ------------------
  630|    526|            throw Decoding_Error("RSA public op - input is too large");
  631|    526|         }
  632|       |
  633|  15.4k|         return m_public->public_op(m);
  634|  16.0k|      }
_ZNK5Botan15RSA_Public_Data9public_opERKNS_6BigIntE:
   40|  15.4k|      BigInt public_op(const BigInt& m) const {
   41|  15.4k|         const size_t powm_window = 1;
   42|  15.4k|         auto powm_m_n = monty_precompute(m_monty_n, m, powm_window, false);
   43|  15.4k|         return monty_execute_vartime(*powm_m_n, m_e);
   44|  15.4k|      }
rsa.cpp:_ZN5Botan12_GLOBAL__N_120RSA_Verify_OperationC2ERKNS_13RSA_PublicKeyENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEE:
  674|  20.6k|            RSA_Public_Operation(rsa), m_emsa(EMSA::create_or_throw(padding)) {}
rsa.cpp:_ZN5Botan12_GLOBAL__N_120RSA_Verify_Operation6updateEPKhm:
  665|  20.6k|      void update(const uint8_t msg[], size_t msg_len) override { m_emsa->update(msg, msg_len); }
rsa.cpp:_ZN5Botan12_GLOBAL__N_120RSA_Verify_Operation18is_valid_signatureEPKhm:
  667|  20.6k|      bool is_valid_signature(const uint8_t sig[], size_t sig_len) override {
  668|  20.6k|         const auto msg = m_emsa->raw_data();
  669|  20.6k|         const auto message_repr = recover_message_repr(sig, sig_len);
  670|  20.6k|         return m_emsa->verify(message_repr, msg, public_modulus_bits() - 1);
  671|  20.6k|      }
rsa.cpp:_ZN5Botan12_GLOBAL__N_120RSA_Verify_Operation20recover_message_reprEPKhm:
  679|  20.6k|      std::vector<uint8_t> recover_message_repr(const uint8_t input[], size_t input_len) {
  680|  20.6k|         if(input_len > public_modulus_bytes()) {
  ------------------
  |  Branch (680:13): [True: 4.64k, False: 16.0k]
  ------------------
  681|  4.64k|            throw Decoding_Error("RSA signature too large to be valid for this key");
  682|  4.64k|         }
  683|  16.0k|         BigInt input_bn(input, input_len);
  684|  16.0k|         return BigInt::encode(public_op(input_bn));
  685|  20.6k|      }

_ZNK5Botan13SM2_PublicKey9algo_nameEv:
   21|  4.71k|std::string SM2_PublicKey::algo_name() const {
   22|  4.71k|   return "SM2";
   23|  4.71k|}
_ZN5Botan14sm2_compute_zaERNS_12HashFunctionENSt3__117basic_string_viewIcNS2_11char_traitsIcEEEERKNS_8EC_GroupERKNS_8EC_PointE:
   61|  4.71k|                                    const EC_Point& pubkey) {
   62|  4.71k|   if(user_id.size() >= 8192) {
  ------------------
  |  Branch (62:7): [True: 0, False: 4.71k]
  ------------------
   63|      0|      throw Invalid_Argument("SM2 user id too long to represent");
   64|      0|   }
   65|       |
   66|  4.71k|   const uint16_t uid_len = static_cast<uint16_t>(8 * user_id.size());
   67|       |
   68|  4.71k|   hash.update(get_byte<0>(uid_len));
   69|  4.71k|   hash.update(get_byte<1>(uid_len));
   70|  4.71k|   hash.update(user_id);
   71|       |
   72|  4.71k|   const size_t p_bytes = domain.get_p_bytes();
   73|       |
   74|  4.71k|   hash.update(BigInt::encode_1363(domain.get_a(), p_bytes));
   75|  4.71k|   hash.update(BigInt::encode_1363(domain.get_b(), p_bytes));
   76|  4.71k|   hash.update(BigInt::encode_1363(domain.get_g_x(), p_bytes));
   77|  4.71k|   hash.update(BigInt::encode_1363(domain.get_g_y(), p_bytes));
   78|  4.71k|   hash.update(BigInt::encode_1363(pubkey.get_affine_x(), p_bytes));
   79|  4.71k|   hash.update(BigInt::encode_1363(pubkey.get_affine_y(), p_bytes));
   80|       |
   81|  4.71k|   std::vector<uint8_t> za(hash.output_length());
   82|  4.71k|   hash.final(za.data());
   83|       |
   84|  4.71k|   return za;
   85|  4.71k|}
_ZNK5Botan13SM2_PublicKey22create_verification_opENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEES5_:
  255|  4.53k|                                                                            std::string_view provider) const {
  256|  4.53k|   if(provider == "base" || provider.empty()) {
  ------------------
  |  Branch (256:7): [True: 0, False: 4.53k]
  |  Branch (256:29): [True: 4.53k, False: 0]
  ------------------
  257|  4.53k|      std::string userid, hash;
  258|  4.53k|      parse_sm2_param_string(params, userid, hash);
  259|  4.53k|      return std::make_unique<SM2_Verification_Operation>(*this, userid, hash);
  260|  4.53k|   }
  261|       |
  262|      0|   throw Provider_Not_Found(algo_name(), provider);
  263|  4.53k|}
sm2.cpp:_ZN5Botan12_GLOBAL__N_122parse_sm2_param_stringENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEERNS1_12basic_stringIcS4_NS1_9allocatorIcEEEESA_:
  225|  4.53k|void parse_sm2_param_string(std::string_view params, std::string& userid, std::string& hash) {
  226|       |   // GM/T 0009-2012 specifies this as the default userid
  227|  4.53k|   const std::string default_userid = "1234567812345678";
  228|       |
  229|       |   // defaults:
  230|  4.53k|   userid = default_userid;
  231|  4.53k|   hash = "SM3";
  232|       |
  233|       |   /*
  234|       |   * SM2 parameters have the following possible formats:
  235|       |   * Ident [since 2.2.0]
  236|       |   * Ident,Hash [since 2.3.0]
  237|       |   */
  238|       |
  239|  4.53k|   auto comma = params.find(',');
  240|  4.53k|   if(comma == std::string::npos) {
  ------------------
  |  Branch (240:7): [True: 0, False: 4.53k]
  ------------------
  241|      0|      userid = params;
  242|  4.53k|   } else {
  243|  4.53k|      userid = params.substr(0, comma);
  244|  4.53k|      hash = params.substr(comma + 1, std::string::npos);
  245|  4.53k|   }
  246|  4.53k|}
sm2.cpp:_ZN5Botan12_GLOBAL__N_126SM2_Verification_OperationC2ERKNS_13SM2_PublicKeyENSt3__117basic_string_viewIcNS5_11char_traitsIcEEEES9_:
  156|  4.53k|            m_group(sm2.domain()), m_gy_mul(m_group.get_base_point(), sm2.public_point()) {
  157|  4.53k|         if(hash == "Raw") {
  ------------------
  |  Branch (157:13): [True: 4.53k, False: 0]
  ------------------
  158|       |            // m_hash is null, m_za is empty
  159|  4.53k|         } else {
  160|      0|            m_hash = HashFunction::create_or_throw(hash);
  161|       |            // ZA=H256(ENTLA || IDA || a || b || xG || yG || xA || yA)
  162|      0|            m_za = sm2_compute_za(*m_hash, ident, m_group, sm2.public_point());
  163|      0|            m_hash->update(m_za);
  164|      0|         }
  165|  4.53k|      }
sm2.cpp:_ZN5Botan12_GLOBAL__N_126SM2_Verification_Operation6updateEPKhm:
  167|  4.53k|      void update(const uint8_t msg[], size_t msg_len) override {
  168|  4.53k|         if(m_hash) {
  ------------------
  |  Branch (168:13): [True: 0, False: 4.53k]
  ------------------
  169|      0|            m_hash->update(msg, msg_len);
  170|  4.53k|         } else {
  171|  4.53k|            m_digest.insert(m_digest.end(), msg, msg + msg_len);
  172|  4.53k|         }
  173|  4.53k|      }
sm2.cpp:_ZN5Botan12_GLOBAL__N_126SM2_Verification_Operation18is_valid_signatureEPKhm:
  187|  4.53k|bool SM2_Verification_Operation::is_valid_signature(const uint8_t sig[], size_t sig_len) {
  188|  4.53k|   BigInt e;
  189|  4.53k|   if(m_hash) {
  ------------------
  |  Branch (189:7): [True: 0, False: 4.53k]
  ------------------
  190|      0|      e = BigInt::decode(m_hash->final());
  191|       |      // prepend ZA for next signature if any
  192|      0|      m_hash->update(m_za);
  193|  4.53k|   } else {
  194|  4.53k|      e = BigInt::decode(m_digest);
  195|  4.53k|      m_digest.clear();
  196|  4.53k|   }
  197|       |
  198|  4.53k|   if(sig_len != m_group.get_order().bytes() * 2) {
  ------------------
  |  Branch (198:7): [True: 0, False: 4.53k]
  ------------------
  199|      0|      return false;
  200|      0|   }
  201|       |
  202|  4.53k|   const BigInt r(sig, sig_len / 2);
  203|  4.53k|   const BigInt s(sig + sig_len / 2, sig_len / 2);
  204|       |
  205|  4.53k|   if(r <= 0 || r >= m_group.get_order() || s <= 0 || s >= m_group.get_order()) {
  ------------------
  |  Branch (205:7): [True: 15, False: 4.51k]
  |  Branch (205:17): [True: 323, False: 4.19k]
  |  Branch (205:45): [True: 40, False: 4.15k]
  |  Branch (205:55): [True: 28, False: 4.12k]
  ------------------
  206|    406|      return false;
  207|    406|   }
  208|       |
  209|  4.12k|   const BigInt t = m_group.mod_order(r + s);
  210|       |
  211|  4.12k|   if(t == 0) {
  ------------------
  |  Branch (211:7): [True: 0, False: 4.12k]
  ------------------
  212|      0|      return false;
  213|      0|   }
  214|       |
  215|  4.12k|   const EC_Point R = m_gy_mul.multi_exp(s, t);
  216|       |
  217|       |   // ???
  218|  4.12k|   if(R.is_zero()) {
  ------------------
  |  Branch (218:7): [True: 2.53k, False: 1.59k]
  ------------------
  219|  2.53k|      return false;
  220|  2.53k|   }
  221|       |
  222|  1.59k|   return (m_group.mod_order(R.get_affine_x() + e) == r);
  223|  4.12k|}

_ZN5Botan14if_work_factorEm:
   36|  6.87k|size_t if_work_factor(size_t bits) {
   37|  6.87k|   if(bits < 512) {
  ------------------
  |  Branch (37:7): [True: 0, False: 6.87k]
  ------------------
   38|      0|      return 0;
   39|      0|   }
   40|       |
   41|       |   // RFC 3766 estimates k at .02 and o(1) to be effectively zero for sizes of interest
   42|       |
   43|  6.87k|   const double log2_k = -5.6438;  // log2(.02)
   44|  6.87k|   return nfs_workfactor(bits, log2_k);
   45|  6.87k|}
_ZN5Botan14dl_work_factorEm:
   47|  6.87k|size_t dl_work_factor(size_t bits) {
   48|       |   // Lacking better estimates...
   49|  6.87k|   return if_work_factor(bits);
   50|  6.87k|}
_ZN5Botan16dl_exponent_sizeEm:
   52|  6.87k|size_t dl_exponent_size(size_t bits) {
   53|  6.87k|   if(bits == 0) {
  ------------------
  |  Branch (53:7): [True: 0, False: 6.87k]
  ------------------
   54|      0|      return 0;
   55|      0|   }
   56|  6.87k|   if(bits <= 256) {
  ------------------
  |  Branch (56:7): [True: 0, False: 6.87k]
  ------------------
   57|      0|      return bits - 1;
   58|      0|   }
   59|  6.87k|   if(bits <= 1024) {
  ------------------
  |  Branch (59:7): [True: 5.07k, False: 1.80k]
  ------------------
   60|  5.07k|      return 192;
   61|  5.07k|   }
   62|  1.80k|   if(bits <= 1536) {
  ------------------
  |  Branch (62:7): [True: 39, False: 1.76k]
  ------------------
   63|     39|      return 224;
   64|     39|   }
   65|  1.76k|   if(bits <= 2048) {
  ------------------
  |  Branch (65:7): [True: 512, False: 1.25k]
  ------------------
   66|    512|      return 256;
   67|    512|   }
   68|  1.25k|   if(bits <= 4096) {
  ------------------
  |  Branch (68:7): [True: 1.25k, False: 0]
  ------------------
   69|  1.25k|      return 384;
   70|  1.25k|   }
   71|      0|   return 512;
   72|  1.25k|}
workfactor.cpp:_ZN5Botan12_GLOBAL__N_114nfs_workfactorEmd:
   20|  6.87k|size_t nfs_workfactor(size_t bits, double log2_k) {
   21|       |   // approximates natural logarithm of an integer of given bitsize
   22|  6.87k|   const double log2_e = 1.44269504088896340736;
   23|  6.87k|   const double log_p = bits / log2_e;
   24|       |
   25|  6.87k|   const double log_log_p = std::log(log_p);
   26|       |
   27|       |   // RFC 3766: k * e^((1.92 + o(1)) * cubrt(ln(n) * (ln(ln(n)))^2))
   28|  6.87k|   const double est = 1.92 * std::pow(log_p * log_log_p * log_log_p, 1.0 / 3.0);
   29|       |
   30|       |   // return log2 of the workfactor
   31|  6.87k|   return static_cast<size_t>(log2_k + log2_e * est);
   32|  6.87k|}

_ZN5Botan14AutoSeeded_RNGD2Ev:
   42|  96.3k|AutoSeeded_RNG::~AutoSeeded_RNG() = default;
_ZN5Botan14AutoSeeded_RNGC2ERNS_21RandomNumberGeneratorEm:
   44|  96.3k|AutoSeeded_RNG::AutoSeeded_RNG(RandomNumberGenerator& underlying_rng, size_t reseed_interval) {
   45|  96.3k|   m_rng = std::make_unique<HMAC_DRBG>(auto_rng_hmac(), underlying_rng, reseed_interval);
   46|       |
   47|  96.3k|   force_reseed();
   48|  96.3k|}
_ZN5Botan14AutoSeeded_RNGC2Em:
   66|  96.3k|      AutoSeeded_RNG(system_rng(), reseed_interval)
   67|       |#else
   68|       |      AutoSeeded_RNG(Entropy_Sources::global_sources(), reseed_interval)
   69|       |#endif
   70|  96.3k|{
   71|  96.3k|}
_ZN5Botan14AutoSeeded_RNG12force_reseedEv:
   73|  96.3k|void AutoSeeded_RNG::force_reseed() {
   74|  96.3k|   m_rng->force_reseed();
   75|  96.3k|   m_rng->next_byte();
   76|       |
   77|  96.3k|   if(!m_rng->is_seeded()) {
  ------------------
  |  Branch (77:7): [True: 0, False: 96.3k]
  ------------------
   78|      0|      throw Internal_Error("AutoSeeded_RNG reseeding failed");
   79|      0|   }
   80|  96.3k|}
auto_rng.cpp:_ZN5Botan12_GLOBAL__N_113auto_rng_hmacEv:
   24|  96.3k|std::unique_ptr<MessageAuthenticationCode> auto_rng_hmac() {
   25|  96.3k|   const std::string possible_auto_rng_hmacs[] = {
   26|  96.3k|      "HMAC(SHA-512)",
   27|  96.3k|      "HMAC(SHA-256)",
   28|  96.3k|   };
   29|       |
   30|  96.3k|   for(const auto& hmac : possible_auto_rng_hmacs) {
  ------------------
  |  Branch (30:25): [True: 96.3k, False: 0]
  ------------------
   31|  96.3k|      if(auto mac = MessageAuthenticationCode::create_or_throw(hmac)) {
  ------------------
  |  Branch (31:15): [True: 96.3k, False: 0]
  ------------------
   32|  96.3k|         return mac;
   33|  96.3k|      }
   34|  96.3k|   }
   35|       |
   36|       |   // This shouldn't happen since this module has a dependency on sha2_32
   37|      0|   throw Internal_Error("AutoSeeded_RNG: No usable HMAC hash found");
   38|  96.3k|}

_ZN5Botan9HMAC_DRBGC2ENSt3__110unique_ptrINS_25MessageAuthenticationCodeENS1_14default_deleteIS3_EEEERNS_21RandomNumberGeneratorEmm:
   50|  96.3k|      Stateful_RNG(underlying_rng, reseed_interval),
   51|  96.3k|      m_mac(std::move(prf)),
   52|  96.3k|      m_max_number_of_bytes_per_request(max_number_of_bytes_per_request),
   53|  96.3k|      m_security_level(hmac_drbg_security_level(m_mac->output_length())) {
   54|  96.3k|   BOTAN_ASSERT_NONNULL(m_mac);
  ------------------
  |  |   87|  96.3k|   do {                                                                                   \
  |  |   88|  96.3k|      if((ptr) == nullptr)                                                                \
  |  |  ------------------
  |  |  |  Branch (88:10): [True: 0, False: 96.3k]
  |  |  ------------------
  |  |   89|  96.3k|         Botan::assertion_failure(#ptr " is not null", "", __func__, __FILE__, __LINE__); \
  |  |   90|  96.3k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (90:12): [Folded, False: 96.3k]
  |  |  ------------------
  ------------------
   55|       |
   56|  96.3k|   check_limits(reseed_interval, max_number_of_bytes_per_request);
   57|       |
   58|  96.3k|   clear();
   59|  96.3k|}
_ZN5Botan9HMAC_DRBG11clear_stateEv:
  109|  96.3k|void HMAC_DRBG::clear_state() {
  110|  96.3k|   if(m_V.empty()) {
  ------------------
  |  Branch (110:7): [True: 96.3k, False: 0]
  ------------------
  111|  96.3k|      const size_t output_length = m_mac->output_length();
  112|  96.3k|      m_V.resize(output_length);
  113|  96.3k|   }
  114|       |
  115|  6.26M|   for(size_t i = 0; i != m_V.size(); ++i) {
  ------------------
  |  Branch (115:22): [True: 6.16M, False: 96.3k]
  ------------------
  116|  6.16M|      m_V[i] = 0x01;
  117|  6.16M|   }
  118|  96.3k|   m_mac->set_key(std::vector<uint8_t>(m_V.size(), 0x00));
  119|  96.3k|}
_ZN5Botan9HMAC_DRBG15generate_outputENSt3__14spanIhLm18446744073709551615EEENS2_IKhLm18446744073709551615EEE:
  129|  96.3k|void HMAC_DRBG::generate_output(std::span<uint8_t> output, std::span<const uint8_t> input) {
  130|  96.3k|   BOTAN_ASSERT_NOMSG(!output.empty());
  ------------------
  |  |   60|  96.3k|   do {                                                                     \
  |  |   61|  96.3k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 96.3k]
  |  |  ------------------
  |  |   62|  96.3k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  96.3k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 96.3k]
  |  |  ------------------
  ------------------
  131|       |
  132|  96.3k|   if(!input.empty()) {
  ------------------
  |  Branch (132:7): [True: 0, False: 96.3k]
  ------------------
  133|      0|      update(input);
  134|      0|   }
  135|       |
  136|   192k|   while(!output.empty()) {
  ------------------
  |  Branch (136:10): [True: 96.3k, False: 96.3k]
  ------------------
  137|  96.3k|      const size_t to_copy = std::min(output.size(), m_V.size());
  138|  96.3k|      m_mac->update(m_V);
  139|  96.3k|      m_mac->final(m_V);
  140|  96.3k|      copy_mem(output.data(), m_V.data(), to_copy);
  141|       |
  142|  96.3k|      output = output.subspan(to_copy);
  143|  96.3k|   }
  144|       |
  145|  96.3k|   update(input);
  146|  96.3k|}
_ZN5Botan9HMAC_DRBG6updateENSt3__14spanIKhLm18446744073709551615EEE:
  152|   192k|void HMAC_DRBG::update(std::span<const uint8_t> input) {
  153|   192k|   secure_vector<uint8_t> T(m_V.size());
  154|   192k|   m_mac->update(m_V);
  155|   192k|   m_mac->update(0x00);
  156|   192k|   m_mac->update(input);
  157|   192k|   m_mac->final(T);
  158|   192k|   m_mac->set_key(T);
  159|       |
  160|   192k|   m_mac->update(m_V);
  161|   192k|   m_mac->final(m_V);
  162|       |
  163|   192k|   if(!input.empty()) {
  ------------------
  |  Branch (163:7): [True: 96.3k, False: 96.3k]
  ------------------
  164|  96.3k|      m_mac->update(m_V);
  165|  96.3k|      m_mac->update(0x01);
  166|  96.3k|      m_mac->update(input);
  167|  96.3k|      m_mac->final(T);
  168|  96.3k|      m_mac->set_key(T);
  169|       |
  170|  96.3k|      m_mac->update(m_V);
  171|  96.3k|      m_mac->final(m_V);
  172|  96.3k|   }
  173|   192k|}
_ZNK5Botan9HMAC_DRBG14security_levelEv:
  175|   289k|size_t HMAC_DRBG::security_level() const {
  176|   289k|   return m_security_level;
  177|   289k|}
hmac_drbg.cpp:_ZN5Botan12_GLOBAL__N_124hmac_drbg_security_levelEm:
   17|  96.3k|size_t hmac_drbg_security_level(size_t mac_output_length) {
   18|       |   // security strength of the hash function
   19|       |   // for pre-image resistance (see NIST SP 800-57)
   20|       |   // SHA-1: 128 bits
   21|       |   // SHA-224, SHA-512/224: 192 bits,
   22|       |   // SHA-256, SHA-512/256, SHA-384, SHA-512: >= 256 bits
   23|       |   // NIST SP 800-90A only supports up to 256 bits though
   24|       |
   25|  96.3k|   if(mac_output_length < 32) {
  ------------------
  |  Branch (25:7): [True: 0, False: 96.3k]
  ------------------
   26|      0|      return (mac_output_length - 4) * 8;
   27|  96.3k|   } else {
   28|  96.3k|      return 32 * 8;
   29|  96.3k|   }
   30|  96.3k|}
hmac_drbg.cpp:_ZN5Botan12_GLOBAL__N_112check_limitsEmm:
   32|  96.3k|void check_limits(size_t reseed_interval, size_t max_number_of_bytes_per_request) {
   33|       |   // SP800-90A permits up to 2^48, but it is not usable on 32 bit
   34|       |   // platforms, so we only allow up to 2^24, which is still reasonably high
   35|  96.3k|   if(reseed_interval == 0 || reseed_interval > static_cast<size_t>(1) << 24) {
  ------------------
  |  Branch (35:7): [True: 0, False: 96.3k]
  |  Branch (35:31): [True: 0, False: 96.3k]
  ------------------
   36|      0|      throw Invalid_Argument("Invalid value for reseed_interval");
   37|      0|   }
   38|       |
   39|  96.3k|   if(max_number_of_bytes_per_request == 0 || max_number_of_bytes_per_request > 64 * 1024) {
  ------------------
  |  Branch (39:7): [True: 0, False: 96.3k]
  |  Branch (39:47): [True: 0, False: 96.3k]
  ------------------
   40|      0|      throw Invalid_Argument("Invalid value for max_number_of_bytes_per_request");
   41|      0|   }
   42|  96.3k|}

_ZN5Botan21RandomNumberGenerator15reseed_from_rngERS0_m:
   57|  96.3k|void RandomNumberGenerator::reseed_from_rng(RandomNumberGenerator& rng, size_t poll_bits) {
   58|  96.3k|   if(this->accepts_input()) {
  ------------------
  |  Branch (58:7): [True: 96.3k, False: 0]
  ------------------
   59|  96.3k|      this->add_entropy(rng.random_vec(poll_bits / 8));
   60|  96.3k|   }
   61|  96.3k|}

_ZN5Botan12Stateful_RNG5clearEv:
   14|  96.3k|void Stateful_RNG::clear() {
   15|  96.3k|   lock_guard_type<recursive_mutex_type> lock(m_mutex);
   16|  96.3k|   m_reseed_counter = 0;
   17|  96.3k|   m_last_pid = 0;
   18|  96.3k|   clear_state();
   19|  96.3k|}
_ZN5Botan12Stateful_RNG12force_reseedEv:
   21|  96.3k|void Stateful_RNG::force_reseed() {
   22|  96.3k|   lock_guard_type<recursive_mutex_type> lock(m_mutex);
   23|  96.3k|   m_reseed_counter = 0;
   24|  96.3k|}
_ZNK5Botan12Stateful_RNG9is_seededEv:
   26|   289k|bool Stateful_RNG::is_seeded() const {
   27|   289k|   lock_guard_type<recursive_mutex_type> lock(m_mutex);
   28|   289k|   return m_reseed_counter > 0;
   29|   289k|}
_ZN5Botan12Stateful_RNG23generate_batched_outputENSt3__14spanIhLm18446744073709551615EEENS2_IKhLm18446744073709551615EEE:
   38|  96.3k|void Stateful_RNG::generate_batched_output(std::span<uint8_t> output, std::span<const uint8_t> input) {
   39|  96.3k|   BOTAN_ASSERT_NOMSG(!output.empty());
  ------------------
  |  |   60|  96.3k|   do {                                                                     \
  |  |   61|  96.3k|      if(!(expr))                                                           \
  |  |  ------------------
  |  |  |  Branch (61:10): [True: 0, False: 96.3k]
  |  |  ------------------
  |  |   62|  96.3k|         Botan::assertion_failure(#expr, "", __func__, __FILE__, __LINE__); \
  |  |   63|  96.3k|   } while(0)
  |  |  ------------------
  |  |  |  Branch (63:12): [Folded, False: 96.3k]
  |  |  ------------------
  ------------------
   40|       |
   41|  96.3k|   const size_t max_per_request = max_number_of_bytes_per_request();
   42|       |
   43|  96.3k|   if(max_per_request == 0)  // no limit
  ------------------
  |  Branch (43:7): [True: 0, False: 96.3k]
  ------------------
   44|      0|   {
   45|      0|      reseed_check();
   46|      0|      this->generate_output(output, input);
   47|  96.3k|   } else {
   48|   192k|      while(!output.empty()) {
  ------------------
  |  Branch (48:13): [True: 96.3k, False: 96.3k]
  ------------------
   49|  96.3k|         const size_t this_req = std::min(max_per_request, output.size());
   50|       |
   51|  96.3k|         reseed_check();
   52|  96.3k|         this->generate_output(output.subspan(0, this_req), input);
   53|       |
   54|       |         // only include the input for the first iteration
   55|  96.3k|         input = {};
   56|       |
   57|  96.3k|         output = output.subspan(this_req);
   58|  96.3k|      }
   59|  96.3k|   }
   60|  96.3k|}
_ZN5Botan12Stateful_RNG21fill_bytes_with_inputENSt3__14spanIhLm18446744073709551615EEENS2_IKhLm18446744073709551615EEE:
   62|   192k|void Stateful_RNG::fill_bytes_with_input(std::span<uint8_t> output, std::span<const uint8_t> input) {
   63|   192k|   lock_guard_type<recursive_mutex_type> lock(m_mutex);
   64|       |
   65|   192k|   if(output.empty()) {
  ------------------
  |  Branch (65:7): [True: 96.3k, False: 96.3k]
  ------------------
   66|       |      // Special case for exclusively adding entropy to the stateful RNG.
   67|  96.3k|      this->update(input);
   68|       |
   69|  96.3k|      if(8 * input.size() >= security_level()) {
  ------------------
  |  Branch (69:10): [True: 96.3k, False: 0]
  ------------------
   70|  96.3k|         reset_reseed_counter();
   71|  96.3k|      }
   72|  96.3k|   } else {
   73|  96.3k|      generate_batched_output(output, input);
   74|  96.3k|   }
   75|   192k|}
_ZN5Botan12Stateful_RNG15reseed_from_rngERNS_21RandomNumberGeneratorEm:
   89|  96.3k|void Stateful_RNG::reseed_from_rng(RandomNumberGenerator& rng, size_t poll_bits) {
   90|  96.3k|   lock_guard_type<recursive_mutex_type> lock(m_mutex);
   91|       |
   92|  96.3k|   RandomNumberGenerator::reseed_from_rng(rng, poll_bits);
   93|       |
   94|  96.3k|   if(poll_bits >= security_level()) {
  ------------------
  |  Branch (94:7): [True: 96.3k, False: 0]
  ------------------
   95|  96.3k|      reset_reseed_counter();
   96|  96.3k|   }
   97|  96.3k|}
_ZN5Botan12Stateful_RNG20reset_reseed_counterEv:
   99|   192k|void Stateful_RNG::reset_reseed_counter() {
  100|       |   // Lock is held whenever this function is called
  101|   192k|   m_reseed_counter = 1;
  102|   192k|}
_ZN5Botan12Stateful_RNG12reseed_checkEv:
  104|  96.3k|void Stateful_RNG::reseed_check() {
  105|       |   // Lock is held whenever this function is called
  106|       |
  107|  96.3k|   const uint32_t cur_pid = OS::get_process_id();
  108|       |
  109|  96.3k|   const bool fork_detected = (m_last_pid > 0) && (cur_pid != m_last_pid);
  ------------------
  |  Branch (109:31): [True: 0, False: 96.3k]
  |  Branch (109:51): [True: 0, False: 0]
  ------------------
  110|       |
  111|  96.3k|   if(is_seeded() == false || fork_detected || (m_reseed_interval > 0 && m_reseed_counter >= m_reseed_interval)) {
  ------------------
  |  Branch (111:7): [True: 96.3k, False: 0]
  |  Branch (111:31): [True: 0, False: 0]
  |  Branch (111:49): [True: 0, False: 0]
  |  Branch (111:74): [True: 0, False: 0]
  ------------------
  112|  96.3k|      m_reseed_counter = 0;
  113|  96.3k|      m_last_pid = cur_pid;
  114|       |
  115|  96.3k|      if(m_underlying_rng) {
  ------------------
  |  Branch (115:10): [True: 96.3k, False: 0]
  ------------------
  116|  96.3k|         reseed_from_rng(*m_underlying_rng, security_level());
  117|  96.3k|      }
  118|       |
  119|  96.3k|      if(m_entropy_sources) {
  ------------------
  |  Branch (119:10): [True: 0, False: 96.3k]
  ------------------
  120|      0|         reseed(*m_entropy_sources, security_level());
  121|      0|      }
  122|       |
  123|  96.3k|      if(!is_seeded()) {
  ------------------
  |  Branch (123:10): [True: 0, False: 96.3k]
  ------------------
  124|      0|         if(fork_detected) {
  ------------------
  |  Branch (124:13): [True: 0, False: 0]
  ------------------
  125|      0|            throw Invalid_State("Detected use of fork but cannot reseed DRBG");
  126|      0|         } else {
  127|      0|            throw PRNG_Unseeded(name());
  128|      0|         }
  129|      0|      }
  130|  96.3k|   } else {
  131|      0|      BOTAN_ASSERT(m_reseed_counter != 0, "RNG is seeded");
  ------------------
  |  |   51|      0|   do {                                                                                 \
  |  |   52|      0|      if(!(expr))                                                                       \
  |  |  ------------------
  |  |  |  Branch (52:10): [True: 0, False: 0]
  |  |  ------------------
  |  |   53|      0|         Botan::assertion_failure(#expr, assertion_made, __func__, __FILE__, __LINE__); \
  |  |   54|      0|   } while(0)
  |  |  ------------------
  |  |  |  Branch (54:12): [Folded, False: 0]
  |  |  ------------------
  ------------------
  132|      0|      m_reseed_counter += 1;
  133|      0|   }
  134|  96.3k|}

_ZN5Botan10system_rngEv:
  368|  96.3k|RandomNumberGenerator& system_rng() {
  369|  96.3k|   static System_RNG_Impl g_system_rng;
  370|  96.3k|   return g_system_rng;
  371|  96.3k|}
system_rng.cpp:_ZN5Botan12_GLOBAL__N_115System_RNG_Impl21fill_bytes_with_inputENSt3__14spanIhLm18446744073709551615EEENS3_IKhLm18446744073709551615EEE:
  210|  96.3k|      void fill_bytes_with_input(std::span<uint8_t> output, std::span<const uint8_t> /* ignored */) override {
  211|  96.3k|         const unsigned int flags = 0;
  212|       |
  213|  96.3k|         uint8_t* buf = output.data();
  214|  96.3k|         size_t len = output.size();
  215|   192k|         while(len > 0) {
  ------------------
  |  Branch (215:16): [True: 96.3k, False: 96.3k]
  ------------------
  216|       |   #if defined(__GLIBC__) && __GLIBC__ == 2 && __GLIBC_MINOR__ < 25
  217|       |            const ssize_t got = ::syscall(SYS_getrandom, buf, len, flags);
  218|       |   #else
  219|  96.3k|            const ssize_t got = ::getrandom(buf, len, flags);
  220|  96.3k|   #endif
  221|       |
  222|  96.3k|            if(got < 0) {
  ------------------
  |  Branch (222:16): [True: 0, False: 96.3k]
  ------------------
  223|      0|               if(errno == EINTR) {
  ------------------
  |  Branch (223:19): [True: 0, False: 0]
  ------------------
  224|      0|                  continue;
  225|      0|               }
  226|      0|               throw System_Error("System_RNG getrandom failed", errno);
  227|      0|            }
  228|       |
  229|  96.3k|            buf += got;
  230|  96.3k|            len -= got;
  231|  96.3k|         }
  232|  96.3k|      }

_ZN5Botan15allocate_memoryEmm:
   20|  12.0M|BOTAN_MALLOC_FN void* allocate_memory(size_t elems, size_t elem_size) {
   21|  12.0M|   if(elems == 0 || elem_size == 0) {
  ------------------
  |  Branch (21:7): [True: 0, False: 12.0M]
  |  Branch (21:21): [True: 0, False: 12.0M]
  ------------------
   22|      0|      return nullptr;
   23|      0|   }
   24|       |
   25|       |   // Some calloc implementations do not check for overflow (?!?)
   26|       |
   27|  12.0M|   if(!BOTAN_CHECKED_MUL(elems, elem_size).has_value()) {
  ------------------
  |  |   74|  12.0M|#define BOTAN_CHECKED_MUL(x, y) checked_mul(x, y)
  ------------------
  |  Branch (27:7): [True: 0, False: 12.0M]
  ------------------
   28|      0|      throw std::bad_alloc();
   29|      0|   }
   30|       |
   31|       |#if defined(BOTAN_HAS_LOCKING_ALLOCATOR)
   32|       |   if(void* p = mlock_allocator::instance().allocate(elems, elem_size)) {
   33|       |      return p;
   34|       |   }
   35|       |#endif
   36|       |
   37|       |#if defined(BOTAN_TARGET_OS_HAS_ALLOC_CONCEAL)
   38|       |   void* ptr = ::calloc_conceal(elems, elem_size);
   39|       |#else
   40|  12.0M|   void* ptr = std::calloc(elems, elem_size);  // NOLINT(*-no-malloc)
   41|  12.0M|#endif
   42|  12.0M|   if(!ptr) {
  ------------------
  |  Branch (42:7): [True: 0, False: 12.0M]
  ------------------
   43|      0|      [[unlikely]] throw std::bad_alloc();
   44|      0|   }
   45|  12.0M|   return ptr;
   46|  12.0M|}
_ZN5Botan17deallocate_memoryEPvmm:
   48|  12.0M|void deallocate_memory(void* p, size_t elems, size_t elem_size) {
   49|  12.0M|   if(p == nullptr) {
  ------------------
  |  Branch (49:7): [True: 0, False: 12.0M]
  ------------------
   50|      0|      [[unlikely]] return;
   51|      0|   }
   52|       |
   53|  12.0M|   secure_scrub_memory(p, elems * elem_size);
   54|       |
   55|       |#if defined(BOTAN_HAS_LOCKING_ALLOCATOR)
   56|       |   if(mlock_allocator::instance().deallocate(p, elems, elem_size)) {
   57|       |      return;
   58|       |   }
   59|       |#endif
   60|       |
   61|  12.0M|   std::free(p);  // NOLINT(*-no-malloc)
   62|  12.0M|}
_ZN5Botan20initialize_allocatorEv:
   64|      1|void initialize_allocator() {
   65|       |#if defined(BOTAN_HAS_LOCKING_ALLOCATOR)
   66|       |   mlock_allocator::instance();
   67|       |#endif
   68|      1|}

_ZN5Botan22throw_invalid_argumentEPKcS1_S1_:
   21|     54|void throw_invalid_argument(const char* message, const char* func, const char* file) {
   22|     54|   throw Invalid_Argument(fmt("{} in {}:{}", message, func, file));
   23|     54|}

_ZN5Botan9ExceptionC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   71|  6.05k|Exception::Exception(std::string_view msg) : m_msg(msg) {}
_ZN5Botan9ExceptionC2EPKcNSt3__117basic_string_viewIcNS3_11char_traitsIcEEEE:
   75|  1.11k|Exception::Exception(const char* prefix, std::string_view msg) : m_msg(fmt("{} {}", prefix, msg)) {}
_ZN5Botan16Invalid_ArgumentC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   77|    102|Invalid_Argument::Invalid_Argument(std::string_view msg) : Exception(msg) {}
_ZN5Botan14Encoding_ErrorC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
  123|  1.11k|Encoding_Error::Encoding_Error(std::string_view name) : Exception("Encoding error:", name) {}
_ZN5Botan14Decoding_ErrorC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
  125|  5.95k|Decoding_Error::Decoding_Error(std::string_view name) : Exception(name) {}

_ZN5Botan19secure_scrub_memoryEPvm:
   87|   145M|void secure_scrub_memory(void* ptr, size_t n) {
   88|       |#if defined(BOTAN_TARGET_OS_HAS_RTLSECUREZEROMEMORY)
   89|       |   ::RtlSecureZeroMemory(ptr, n);
   90|       |
   91|       |#elif defined(BOTAN_TARGET_OS_HAS_EXPLICIT_BZERO)
   92|       |   ::explicit_bzero(ptr, n);
   93|       |
   94|       |#elif defined(BOTAN_TARGET_OS_HAS_EXPLICIT_MEMSET)
   95|       |   (void)::explicit_memset(ptr, 0, n);
   96|       |
   97|       |#elif defined(BOTAN_USE_VOLATILE_MEMSET_FOR_ZERO) && (BOTAN_USE_VOLATILE_MEMSET_FOR_ZERO == 1)
   98|       |   /*
   99|       |   Call memset through a static volatile pointer, which the compiler
  100|       |   should not elide. This construct should be safe in conforming
  101|       |   compilers, but who knows. I did confirm that on x86-64 GCC 6.1 and
  102|       |   Clang 3.8 both create code that saves the memset address in the
  103|       |   data segment and unconditionally loads and jumps to that address.
  104|       |   */
  105|       |   static void* (*const volatile memset_ptr)(void*, int, size_t) = std::memset;
  106|       |   (memset_ptr)(ptr, 0, n);
  107|       |#else
  108|       |
  109|       |   volatile uint8_t* p = reinterpret_cast<volatile uint8_t*>(ptr);
  110|       |
  111|       |   for(size_t i = 0; i != n; ++i)
  112|       |      p[i] = 0;
  113|       |#endif
  114|   145M|}
_ZN5Botan2OS14get_process_idEv:
  116|  96.3k|uint32_t OS::get_process_id() {
  117|  96.3k|#if defined(BOTAN_TARGET_OS_HAS_POSIX1)
  118|  96.3k|   return ::getpid();
  119|       |#elif defined(BOTAN_TARGET_OS_HAS_WIN32)
  120|       |   return ::GetCurrentProcessId();
  121|       |#elif defined(BOTAN_TARGET_OS_IS_LLVM) || defined(BOTAN_TARGET_OS_IS_NONE)
  122|       |   return 0;  // truly no meaningful value
  123|       |#else
  124|       |   #error "Missing get_process_id"
  125|       |#endif
  126|  96.3k|}
_ZN5Botan2OS10get_auxvalEm:
  128|    885|unsigned long OS::get_auxval(unsigned long id) {
  129|    885|#if defined(BOTAN_TARGET_OS_HAS_GETAUXVAL)
  130|    885|   return ::getauxval(id);
  131|       |#elif defined(BOTAN_TARGET_OS_IS_ANDROID) && defined(BOTAN_TARGET_ARCH_IS_ARM32)
  132|       |
  133|       |   if(id == 0)
  134|       |      return 0;
  135|       |
  136|       |   char** p = environ;
  137|       |
  138|       |   while(*p++ != nullptr)
  139|       |      ;
  140|       |
  141|       |   Elf32_auxv_t* e = reinterpret_cast<Elf32_auxv_t*>(p);
  142|       |
  143|       |   while(e != nullptr) {
  144|       |      if(e->a_type == id)
  145|       |         return e->a_un.a_val;
  146|       |      e++;
  147|       |   }
  148|       |
  149|       |   return 0;
  150|       |#elif defined(BOTAN_TARGET_OS_HAS_ELF_AUX_INFO)
  151|       |   unsigned long auxinfo = 0;
  152|       |   ::elf_aux_info(static_cast<int>(id), &auxinfo, sizeof(auxinfo));
  153|       |   return auxinfo;
  154|       |#elif defined(BOTAN_TARGET_OS_HAS_AUXINFO)
  155|       |   for(const AuxInfo* auxinfo = static_cast<AuxInfo*>(::_dlauxinfo()); auxinfo != AT_NULL; ++auxinfo) {
  156|       |      if(id == auxinfo->a_type)
  157|       |         return auxinfo->a_v;
  158|       |   }
  159|       |
  160|       |   return 0;
  161|       |#else
  162|       |   BOTAN_UNUSED(id);
  163|       |   return 0;
  164|       |#endif
  165|    885|}
_ZN5Botan2OS27running_in_privileged_stateEv:
  167|    885|bool OS::running_in_privileged_state() {
  168|    885|#if defined(AT_SECURE)
  169|    885|   return OS::get_auxval(AT_SECURE) != 0;
  170|       |#elif defined(BOTAN_TARGET_OS_HAS_POSIX1)
  171|       |   return (::getuid() != ::geteuid()) || (::getgid() != ::getegid());
  172|       |#else
  173|       |   return false;
  174|       |#endif
  175|    885|}
_ZN5Botan2OS17read_env_variableERNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEENS1_17basic_string_viewIcS4_EE:
  409|    885|bool OS::read_env_variable(std::string& value_out, std::string_view name_view) {
  410|    885|   value_out = "";
  411|       |
  412|    885|   if(running_in_privileged_state()) {
  ------------------
  |  Branch (412:7): [True: 0, False: 885]
  ------------------
  413|      0|      return false;
  414|      0|   }
  415|       |
  416|       |#if defined(BOTAN_TARGET_OS_HAS_WIN32) && defined(BOTAN_BUILD_COMPILER_IS_MSVC)
  417|       |   const std::string name(name_view);
  418|       |   char val[128] = {0};
  419|       |   size_t req_size = 0;
  420|       |   if(getenv_s(&req_size, val, sizeof(val), name.c_str()) == 0) {
  421|       |      // Microsoft's implementation always writes a terminating \0,
  422|       |      // and includes it in the reported length of the environment variable
  423|       |      // if a value exists.
  424|       |      if(req_size > 0 && val[req_size - 1] == '\0') {
  425|       |         value_out = std::string(val);
  426|       |      } else {
  427|       |         value_out = std::string(val, req_size);
  428|       |      }
  429|       |      return true;
  430|       |   }
  431|       |#else
  432|    885|   const std::string name(name_view);
  433|    885|   if(const char* val = std::getenv(name.c_str())) {
  ------------------
  |  Branch (433:19): [True: 0, False: 885]
  ------------------
  434|      0|      value_out = val;
  435|      0|      return true;
  436|      0|   }
  437|    885|#endif
  438|       |
  439|    885|   return false;
  440|    885|}

_ZN5Botan9to_u32bitENSt3__117basic_string_viewIcNS0_11char_traitsIcEEEE:
   32|  16.1k|uint32_t to_u32bit(std::string_view str_view) {
   33|  16.1k|   const std::string str(str_view);
   34|       |
   35|       |   // std::stoul is not strict enough. Ensure that str is digit only [0-9]*
   36|  48.3k|   for(const char chr : str) {
  ------------------
  |  Branch (36:23): [True: 48.3k, False: 16.1k]
  ------------------
   37|  48.3k|      if(chr < '0' || chr > '9') {
  ------------------
  |  Branch (37:10): [True: 0, False: 48.3k]
  |  Branch (37:23): [True: 0, False: 48.3k]
  ------------------
   38|      0|         throw Invalid_Argument("to_u32bit invalid decimal string '" + str + "'");
   39|      0|      }
   40|  48.3k|   }
   41|       |
   42|  16.1k|   const unsigned long int x = std::stoul(str);
   43|       |
   44|  16.1k|   if constexpr(sizeof(unsigned long int) > 4) {
   45|       |      // x might be uint64
   46|  16.1k|      if(x > std::numeric_limits<uint32_t>::max()) {
  ------------------
  |  Branch (46:10): [True: 0, False: 16.1k]
  ------------------
   47|      0|         throw Invalid_Argument("Integer value of " + str + " exceeds 32 bit range");
   48|      0|      }
   49|  16.1k|   }
   50|       |
   51|  16.1k|   return static_cast<uint32_t>(x);
   52|  16.1k|}

_ZN5Botan9SCAN_NameC2ENSt3__117basic_string_viewIcNS1_11char_traitsIcEEEE:
   58|   219k|SCAN_Name::SCAN_Name(std::string_view algo_spec) : m_orig_algo_spec(algo_spec), m_alg_name(), m_args(), m_mode_info() {
   59|   219k|   if(algo_spec.empty()) {
  ------------------
  |  Branch (59:7): [True: 0, False: 219k]
  ------------------
   60|      0|      throw Invalid_Argument("Expected algorithm name, got empty string");
   61|      0|   }
   62|       |
   63|   219k|   std::vector<std::pair<size_t, std::string>> name;
   64|   219k|   size_t level = 0;
   65|   219k|   std::pair<size_t, std::string> accum = std::make_pair(level, "");
   66|       |
   67|   219k|   const std::string decoding_error = "Bad SCAN name '" + m_orig_algo_spec + "': ";
   68|       |
   69|  2.87M|   for(char c : algo_spec) {
  ------------------
  |  Branch (69:15): [True: 2.87M, False: 219k]
  ------------------
   70|  2.87M|      if(c == '/' || c == ',' || c == '(' || c == ')') {
  ------------------
  |  Branch (70:10): [True: 0, False: 2.87M]
  |  Branch (70:22): [True: 20.6k, False: 2.85M]
  |  Branch (70:34): [True: 212k, False: 2.64M]
  |  Branch (70:46): [True: 212k, False: 2.43M]
  ------------------
   71|   444k|         if(c == '(') {
  ------------------
  |  Branch (71:13): [True: 212k, False: 232k]
  ------------------
   72|   212k|            ++level;
   73|   232k|         } else if(c == ')') {
  ------------------
  |  Branch (73:20): [True: 212k, False: 20.6k]
  ------------------
   74|   212k|            if(level == 0) {
  ------------------
  |  Branch (74:16): [True: 0, False: 212k]
  ------------------
   75|      0|               throw Decoding_Error(decoding_error + "Mismatched parens");
   76|      0|            }
   77|   212k|            --level;
   78|   212k|         }
   79|       |
   80|   444k|         if(c == '/' && level > 0) {
  ------------------
  |  Branch (80:13): [True: 0, False: 444k]
  |  Branch (80:25): [True: 0, False: 0]
  ------------------
   81|      0|            accum.second.push_back(c);
   82|   444k|         } else {
   83|   444k|            if(!accum.second.empty()) {
  ------------------
  |  Branch (83:16): [True: 436k, False: 8.27k]
  ------------------
   84|   436k|               name.push_back(accum);
   85|   436k|            }
   86|   444k|            accum = std::make_pair(level, "");
   87|   444k|         }
   88|  2.43M|      } else {
   89|  2.43M|         accum.second.push_back(c);
   90|  2.43M|      }
   91|  2.87M|   }
   92|       |
   93|   219k|   if(!accum.second.empty()) {
  ------------------
  |  Branch (93:7): [True: 15.5k, False: 203k]
  ------------------
   94|  15.5k|      name.push_back(accum);
   95|  15.5k|   }
   96|       |
   97|   219k|   if(level != 0) {
  ------------------
  |  Branch (97:7): [True: 0, False: 219k]
  ------------------
   98|      0|      throw Decoding_Error(decoding_error + "Missing close paren");
   99|      0|   }
  100|       |
  101|   219k|   if(name.empty()) {
  ------------------
  |  Branch (101:7): [True: 0, False: 219k]
  ------------------
  102|      0|      throw Decoding_Error(decoding_error + "Empty name");
  103|      0|   }
  104|       |
  105|   219k|   m_alg_name = name[0].second;
  106|       |
  107|   219k|   bool in_modes = false;
  108|       |
  109|   452k|   for(size_t i = 1; i != name.size(); ++i) {
  ------------------
  |  Branch (109:22): [True: 232k, False: 219k]
  ------------------
  110|   232k|      if(name[i].first == 0) {
  ------------------
  |  Branch (110:10): [True: 0, False: 232k]
  ------------------
  111|      0|         m_mode_info.push_back(make_arg(name, i));
  112|      0|         in_modes = true;
  113|   232k|      } else if(name[i].first == 1 && !in_modes) {
  ------------------
  |  Branch (113:17): [True: 224k, False: 8.27k]
  |  Branch (113:39): [True: 224k, False: 0]
  ------------------
  114|   224k|         m_args.push_back(make_arg(name, i));
  115|   224k|      }
  116|   232k|   }
  117|   219k|}
_ZNK5Botan9SCAN_Name3argEm:
  119|   173k|std::string SCAN_Name::arg(size_t i) const {
  120|   173k|   if(i >= arg_count()) {
  ------------------
  |  Branch (120:7): [True: 0, False: 173k]
  ------------------
  121|      0|      throw Invalid_Argument("SCAN_Name::arg " + std::to_string(i) + " out of range for '" + to_string() + "'");
  122|      0|   }
  123|   173k|   return m_args[i];
  124|   173k|}
_ZNK5Botan9SCAN_Name14arg_as_integerEmm:
  133|  16.1k|size_t SCAN_Name::arg_as_integer(size_t i, size_t def_value) const {
  134|  16.1k|   if(i >= arg_count()) {
  ------------------
  |  Branch (134:7): [True: 0, False: 16.1k]
  ------------------
  135|      0|      return def_value;
  136|      0|   }
  137|  16.1k|   return to_u32bit(m_args[i]);
  138|  16.1k|}
scan_name.cpp:_ZN5Botan12_GLOBAL__N_18make_argERKNSt3__16vectorINS1_4pairImNS1_12basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEEEENS7_ISA_EEEEm:
   17|   224k|std::string make_arg(const std::vector<std::pair<size_t, std::string>>& name, size_t start) {
   18|   224k|   std::string output = name[start].second;
   19|   224k|   size_t level = name[start].first;
   20|       |
   21|   224k|   size_t paren_depth = 0;
   22|       |
   23|   232k|   for(size_t i = start + 1; i != name.size(); ++i) {
  ------------------
  |  Branch (23:30): [True: 28.9k, False: 203k]
  ------------------
   24|  28.9k|      if(name[i].first <= name[start].first) {
  ------------------
  |  Branch (24:10): [True: 20.6k, False: 8.27k]
  ------------------
   25|  20.6k|         break;
   26|  20.6k|      }
   27|       |
   28|  8.27k|      if(name[i].first > level) {
  ------------------
  |  Branch (28:10): [True: 8.27k, False: 0]
  ------------------
   29|  8.27k|         output += "(" + name[i].second;
   30|  8.27k|         ++paren_depth;
   31|  8.27k|      } else if(name[i].first < level) {
  ------------------
  |  Branch (31:17): [True: 0, False: 0]
  ------------------
   32|      0|         for(size_t j = name[i].first; j < level; j++) {
  ------------------
  |  Branch (32:40): [True: 0, False: 0]
  ------------------
   33|      0|            output += ")";
   34|      0|            --paren_depth;
   35|      0|         }
   36|      0|         output += "," + name[i].second;
   37|      0|      } else {
   38|      0|         if(output[output.size() - 1] != '(') {
  ------------------
  |  Branch (38:13): [True: 0, False: 0]
  ------------------
   39|      0|            output += ",";
   40|      0|         }
   41|      0|         output += name[i].second;
   42|      0|      }
   43|       |
   44|  8.27k|      level = name[i].first;
   45|  8.27k|   }
   46|       |
   47|   232k|   for(size_t i = 0; i != paren_depth; ++i) {
  ------------------
  |  Branch (47:22): [True: 8.27k, False: 224k]
  ------------------
   48|  8.27k|      output += ")";
   49|  8.27k|   }
   50|       |
   51|   224k|   return output;
   52|   224k|}

_ZN3rnp13is_blank_lineEPKcm:
   72|   127k|{
   73|   141k|    for (size_t i = 0; i < len && line[i]; i++) {
  ------------------
  |  Branch (73:24): [True: 141k, False: 0]
  |  Branch (73:35): [True: 141k, False: 0]
  ------------------
   74|   141k|        if (line[i] != ' ' && line[i] != '\t' && line[i] != '\r') {
  ------------------
  |  Branch (74:13): [True: 140k, False: 1.01k]
  |  Branch (74:31): [True: 127k, False: 13.0k]
  |  Branch (74:50): [True: 127k, False: 357]
  ------------------
   75|   127k|            return false;
   76|   127k|        }
   77|   141k|    }
   78|      0|    return true;
   79|   127k|}
_ZN3rnp6is_hexERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  114|   424k|{
  115|  29.6M|    for (size_t i = hex_prefix_len(s); i < s.length(); i++) {
  ------------------
  |  Branch (115:40): [True: 29.2M, False: 424k]
  ------------------
  116|  29.2M|        auto &ch = s[i];
  117|  29.2M|        if ((ch >= '0') && (ch <= '9')) {
  ------------------
  |  Branch (117:13): [True: 29.2M, False: 0]
  |  Branch (117:28): [True: 16.3M, False: 12.8M]
  ------------------
  118|  16.3M|            continue;
  119|  16.3M|        }
  120|  12.8M|        if ((ch >= 'a') && (ch <= 'f')) {
  ------------------
  |  Branch (120:13): [True: 12.3M, False: 544k]
  |  Branch (120:28): [True: 12.3M, False: 0]
  ------------------
  121|  12.3M|            continue;
  122|  12.3M|        }
  123|   544k|        if ((ch >= 'A') && (ch <= 'F')) {
  ------------------
  |  Branch (123:13): [True: 544k, False: 0]
  |  Branch (123:28): [True: 544k, False: 0]
  ------------------
  124|   544k|            continue;
  125|   544k|        }
  126|      0|        if ((ch == ' ') || (ch == '\t')) {
  ------------------
  |  Branch (126:13): [True: 0, False: 0]
  |  Branch (126:28): [True: 0, False: 0]
  ------------------
  127|      0|            continue;
  128|      0|        }
  129|      0|        return false;
  130|      0|    }
  131|   424k|    return true;
  132|   424k|}
str-utils.cpp:_ZN3rnpL14hex_prefix_lenERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  105|   424k|{
  106|   424k|    if ((str.length() >= 2) && (str[0] == '0') && ((str[1] == 'x') || (str[1] == 'X'))) {
  ------------------
  |  Branch (106:9): [True: 424k, False: 0]
  |  Branch (106:32): [True: 424k, False: 0]
  |  Branch (106:52): [True: 424k, False: 0]
  |  Branch (106:71): [True: 0, False: 0]
  ------------------
  107|   424k|        return 2;
  108|   424k|    }
  109|      0|    return 0;
  110|   424k|}

LLVMFuzzerTestOneInput:
   38|  12.0k|{
   39|  12.0k|    rnp_input_t  input = NULL;
   40|  12.0k|    rnp_result_t ret = 0;
   41|  12.0k|    rnp_ffi_t    ffi = NULL;
   42|  12.0k|    uint32_t     flags = RNP_LOAD_SAVE_PUBLIC_KEYS | RNP_LOAD_SAVE_SECRET_KEYS;
  ------------------
  |  |   80|  12.0k|#define RNP_LOAD_SAVE_PUBLIC_KEYS (1U << 0)
  ------------------
                  uint32_t     flags = RNP_LOAD_SAVE_PUBLIC_KEYS | RNP_LOAD_SAVE_SECRET_KEYS;
  ------------------
  |  |   81|  12.0k|#define RNP_LOAD_SAVE_SECRET_KEYS (1U << 1)
  ------------------
   43|       |
   44|       |    /* try non-permissive import */
   45|  12.0k|    ret = rnp_input_from_memory(&input, data, size, false);
   46|  12.0k|    ret = rnp_ffi_create(&ffi, "GPG", "GPG");
   47|  12.0k|    char *results = NULL;
   48|  12.0k|    ret = rnp_import_keys(ffi, input, flags, &results);
   49|  12.0k|    rnp_buffer_destroy(results);
   50|  12.0k|    rnp_input_destroy(input);
   51|  12.0k|    rnp_ffi_destroy(ffi);
   52|       |
   53|       |    /* try permissive import */
   54|  12.0k|    rnp_input_t input2 = NULL;
   55|  12.0k|    ret = rnp_input_from_memory(&input2, data, size, false);
   56|  12.0k|    ret = rnp_ffi_create(&ffi, "GPG", "GPG");
   57|  12.0k|    results = NULL;
   58|  12.0k|    ret = rnp_import_keys(ffi, input2, flags | RNP_LOAD_SAVE_PERMISSIVE, &results);
  ------------------
  |  |   82|  12.0k|#define RNP_LOAD_SAVE_PERMISSIVE (1U << 8)
  ------------------
   59|  12.0k|    rnp_buffer_destroy(results);
   60|  12.0k|    rnp_input_destroy(input2);
   61|  12.0k|    rnp_ffi_destroy(ffi);
   62|       |
   63|       |    /* try non-permissive iterative import */
   64|  12.0k|    rnp_input_t input3 = NULL;
   65|  12.0k|    ret = rnp_input_from_memory(&input3, data, size, false);
   66|  12.0k|    ret = rnp_ffi_create(&ffi, "GPG", "GPG");
   67|  12.0k|    flags |= RNP_LOAD_SAVE_SINGLE;
  ------------------
  |  |   83|  12.0k|#define RNP_LOAD_SAVE_SINGLE (1U << 9)
  ------------------
   68|  36.0k|    do {
   69|  36.0k|        results = NULL;
   70|  36.0k|        ret = rnp_import_keys(ffi, input3, flags, &results);
   71|  36.0k|        rnp_buffer_destroy(results);
   72|  36.0k|    } while (!ret);
  ------------------
  |  Branch (72:14): [True: 23.9k, False: 12.0k]
  ------------------
   73|  12.0k|    rnp_input_destroy(input3);
   74|  12.0k|    rnp_ffi_destroy(ffi);
   75|       |
   76|       |    /* try permissive iterative import */
   77|  12.0k|    rnp_input_t input4 = NULL;
   78|  12.0k|    ret = rnp_input_from_memory(&input4, data, size, false);
   79|  12.0k|    ret = rnp_ffi_create(&ffi, "GPG", "GPG");
   80|  12.0k|    flags |= RNP_LOAD_SAVE_PERMISSIVE;
  ------------------
  |  |   82|  12.0k|#define RNP_LOAD_SAVE_PERMISSIVE (1U << 8)
  ------------------
   81|   102k|    do {
   82|   102k|        results = NULL;
   83|   102k|        ret = rnp_import_keys(ffi, input4, flags, &results);
   84|   102k|        rnp_buffer_destroy(results);
   85|   102k|    } while (!ret);
  ------------------
  |  Branch (85:14): [True: 90.0k, False: 12.0k]
  ------------------
   86|  12.0k|    rnp_input_destroy(input4);
   87|  12.0k|    rnp_ffi_destroy(ffi);
   88|       |
   89|  12.0k|    return 0;
   90|  12.0k|}

_ZN3rnp12backend_initEPPv:
  179|  48.1k|{
  180|  48.1k|    return true;
  181|  48.1k|}
_ZN3rnp14backend_finishEPv:
  185|  48.1k|{
  186|       |    // Do nothing
  187|  48.1k|}

_ZN3rnp2bnC2ERKN3pgp3mpiE:
   56|  70.6k|    bn(const pgp::mpi &val) : bn(val.data(), val.size()){};
_ZN3rnp2bnC2EPKhm:
   46|   159k|    {
   47|   159k|        botan_mp_init(&bn_);
   48|   159k|        if (bn_ && botan_mp_from_bin(bn_, val, len)) {
  ------------------
  |  Branch (48:13): [True: 159k, False: 0]
  |  Branch (48:20): [True: 0, False: 159k]
  ------------------
   49|       |            /* LCOV_EXCL_START */
   50|      0|            botan_mp_destroy(bn_);
   51|      0|            bn_ = NULL;
   52|       |            /* LCOV_EXCL_END */
   53|      0|        }
   54|   159k|    }
_ZNK3rnp2bncvbEv:
   66|   159k|    {
   67|   159k|        return bn_;
   68|   159k|    }
_ZN3rnp5botan6PubkeyC2Ev:
  112|  94.4k|    Pubkey() : key_(NULL){};
_ZN3rnp5botan6Pubkey3getEv:
  123|   187k|    {
  124|   187k|        return key_;
  125|   187k|    };
_ZN3rnp2bn3getEv:
   72|   159k|    {
   73|   159k|        return bn_;
   74|   159k|    }
_ZN3rnp2bnD2Ev:
   61|   159k|    {
   62|   159k|        botan_mp_destroy(bn_);
   63|   159k|    }
_ZN3rnp5botan6PubkeyD2Ev:
  117|  94.4k|    {
  118|  94.4k|        botan_pubkey_destroy(key_);
  119|  94.4k|    }
_ZN3rnp5botan2op6VerifyC2Ev:
  199|  88.6k|    Verify() : op_(NULL){};
_ZN3rnp5botan2op6Verify3getEv:
  210|   265k|    {
  211|   265k|        return op_;
  212|   265k|    };
_ZN3rnp5botan2op6VerifyD2Ev:
  204|  88.6k|    {
  205|  88.6k|        botan_pk_op_verify_destroy(op_);
  206|  88.6k|    }

_ZNK27pgp_dilithium_private_key_t5paramEv:
   53|     36|    {
   54|     36|        return dilithium_param_;
   55|     36|    }
_ZNK27pgp_dilithium_private_key_t11get_encodedEv:
   60|     36|    {
   61|     36|        return Botan::unlock(key_encoded_);
   62|     36|    };
_ZNK26pgp_dilithium_public_key_t11get_encodedEv:
   97|    506|    {
   98|    506|        return key_encoded_;
   99|    506|    };
_ZN26pgp_dilithium_public_key_tC2Ev:
   79|  2.61k|    pgp_dilithium_public_key_t() = default;

_ZN26pgp_dilithium_public_key_tC2EPKhm21dilithium_parameter_e:
   34|    954|    : key_encoded_(key_encoded, key_encoded + key_encoded_len), dilithium_param_(param),
   35|    954|      is_initialized_(true)
   36|    954|{
   37|    954|}
_ZN27pgp_dilithium_private_key_tC2EPKhm21dilithium_parameter_e:
   48|     36|    : key_encoded_(key_encoded, key_encoded + key_encoded_len), dilithium_param_(param),
   49|     36|      is_initialized_(true)
   50|     36|{
   51|     36|}
_ZN27pgp_dilithium_private_key_tC2ERKNSt3__16vectorIhNS0_9allocatorIhEEEE21dilithium_parameter_e:
   55|     36|    : key_encoded_(Botan::secure_vector<uint8_t>(key_encoded.begin(), key_encoded.end())),
   56|     36|      dilithium_param_(param), is_initialized_(true)
   57|     36|{
   58|     36|}
_Z22dilithium_privkey_size21dilithium_parameter_e:
   62|     89|{
   63|     89|    switch (parameter) {
   64|     29|    case dilithium_L3:
  ------------------
  |  Branch (64:5): [True: 29, False: 60]
  ------------------
   65|     29|        return 4000;
   66|     60|    case dilithium_L5:
  ------------------
  |  Branch (66:5): [True: 60, False: 29]
  ------------------
   67|     60|        return 4864;
   68|      0|    default:
  ------------------
  |  Branch (68:5): [True: 0, False: 89]
  ------------------
   69|      0|        RNP_LOG("invalid parameter given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   70|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   71|     89|    }
   72|     89|}
_Z21dilithium_pubkey_size21dilithium_parameter_e:
   76|  2.57k|{
   77|  2.57k|    switch (parameter) {
   78|  2.23k|    case dilithium_L3:
  ------------------
  |  Branch (78:5): [True: 2.23k, False: 340]
  ------------------
   79|  2.23k|        return 1952;
   80|    340|    case dilithium_L5:
  ------------------
  |  Branch (80:5): [True: 340, False: 2.23k]
  ------------------
   81|    340|        return 2592;
   82|      0|    default:
  ------------------
  |  Branch (82:5): [True: 0, False: 2.57k]
  ------------------
   83|      0|        RNP_LOG("invalid parameter given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   85|  2.57k|    }
   86|  2.57k|}
_Z24dilithium_signature_size21dilithium_parameter_e:
   90|    510|{
   91|    510|    switch (parameter) {
   92|    370|    case dilithium_L3:
  ------------------
  |  Branch (92:5): [True: 370, False: 140]
  ------------------
   93|    370|        return 3293;
   94|    140|    case dilithium_L5:
  ------------------
  |  Branch (94:5): [True: 140, False: 370]
  ------------------
   95|    140|        return 4595;
   96|      0|    default:
  ------------------
  |  Branch (96:5): [True: 0, False: 510]
  ------------------
   97|      0|        RNP_LOG("invalid parameter given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   99|    510|    }
  100|    510|}

_ZN35pgp_dilithium_exdsa_composite_key_tD2Ev:
   32|  10.5k|{
   33|  10.5k|}
_ZNK35pgp_dilithium_exdsa_composite_key_t20initialized_or_throwEv:
   37|    506|{
   38|    506|    if (!is_initialized()) {
  ------------------
  |  Branch (38:9): [True: 0, False: 506]
  ------------------
   39|      0|        RNP_LOG("Trying to use uninitialized mldsa-ecdsa/eddsa key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   40|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_STATE);
   41|      0|    }
   42|    506|}
_ZN35pgp_dilithium_exdsa_composite_key_t24exdsa_curve_privkey_sizeE11pgp_curve_t:
   73|    125|{
   74|    125|    switch (curve) {
   75|     10|    case PGP_CURVE_ED25519:
  ------------------
  |  Branch (75:5): [True: 10, False: 115]
  ------------------
   76|     10|        return 32;
   77|       |    /* TODO */
   78|       |    // case PGP_CURVE_ED448:
   79|       |    //   return 56;
   80|      2|    case PGP_CURVE_NIST_P_256:
  ------------------
  |  Branch (80:5): [True: 2, False: 123]
  ------------------
   81|      2|        return 32;
   82|     19|    case PGP_CURVE_NIST_P_384:
  ------------------
  |  Branch (82:5): [True: 19, False: 106]
  ------------------
   83|     19|        return 48;
   84|     28|    case PGP_CURVE_BP256:
  ------------------
  |  Branch (84:5): [True: 28, False: 97]
  ------------------
   85|     28|        return 32;
   86|     66|    case PGP_CURVE_BP384:
  ------------------
  |  Branch (86:5): [True: 66, False: 59]
  ------------------
   87|     66|        return 48;
   88|      0|    default:
  ------------------
  |  Branch (88:5): [True: 0, False: 125]
  ------------------
   89|      0|        RNP_LOG("invalid curve given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   91|    125|    }
   92|    125|}
_ZN35pgp_dilithium_exdsa_composite_key_t23exdsa_curve_pubkey_sizeE11pgp_curve_t:
   96|  3.53k|{
   97|  3.53k|    switch (curve) {
   98|    156|    case PGP_CURVE_ED25519:
  ------------------
  |  Branch (98:5): [True: 156, False: 3.37k]
  ------------------
   99|    156|        return 32;
  100|       |    /* TODO */
  101|       |    //  case PGP_CURVE_ED448:
  102|       |    //    return 56;
  103|  2.55k|    case PGP_CURVE_NIST_P_256:
  ------------------
  |  Branch (103:5): [True: 2.55k, False: 978]
  ------------------
  104|  2.55k|        return 65;
  105|    174|    case PGP_CURVE_NIST_P_384:
  ------------------
  |  Branch (105:5): [True: 174, False: 3.35k]
  ------------------
  106|    174|        return 97;
  107|    390|    case PGP_CURVE_BP256:
  ------------------
  |  Branch (107:5): [True: 390, False: 3.14k]
  ------------------
  108|    390|        return 65;
  109|    258|    case PGP_CURVE_BP384:
  ------------------
  |  Branch (109:5): [True: 258, False: 3.27k]
  ------------------
  110|    258|        return 97;
  111|      0|    default:
  ------------------
  |  Branch (111:5): [True: 0, False: 3.53k]
  ------------------
  112|      0|        RNP_LOG("invalid curve given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  114|  3.53k|    }
  115|  3.53k|}
_ZN35pgp_dilithium_exdsa_composite_key_t26exdsa_curve_signature_sizeE11pgp_curve_t:
  119|    510|{
  120|    510|    switch (curve) {
  121|     71|    case PGP_CURVE_ED25519:
  ------------------
  |  Branch (121:5): [True: 71, False: 439]
  ------------------
  122|     71|        return 64;
  123|       |    /* TODO */
  124|       |    //  case PGP_CURVE_ED448:
  125|       |    //    return 114;
  126|    224|    case PGP_CURVE_NIST_P_256:
  ------------------
  |  Branch (126:5): [True: 224, False: 286]
  ------------------
  127|    224|        return 64;
  128|     70|    case PGP_CURVE_NIST_P_384:
  ------------------
  |  Branch (128:5): [True: 70, False: 440]
  ------------------
  129|     70|        return 96;
  130|     75|    case PGP_CURVE_BP256:
  ------------------
  |  Branch (130:5): [True: 75, False: 435]
  ------------------
  131|     75|        return 64;
  132|     70|    case PGP_CURVE_BP384:
  ------------------
  |  Branch (132:5): [True: 70, False: 440]
  ------------------
  133|     70|        return 96;
  134|      0|    default:
  ------------------
  |  Branch (134:5): [True: 0, False: 510]
  ------------------
  135|      0|        RNP_LOG("invalid curve given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  137|    510|    }
  138|    510|}
_ZN35pgp_dilithium_exdsa_composite_key_t22pk_alg_to_dilithium_idE16pgp_pubkey_alg_t:
  142|  4.16k|{
  143|  4.16k|    switch (pk_alg) {
  144|    237|    case PGP_PKA_DILITHIUM3_ED25519:
  ------------------
  |  Branch (144:5): [True: 237, False: 3.92k]
  ------------------
  145|    237|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    237|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  146|  3.01k|    case PGP_PKA_DILITHIUM3_P256:
  ------------------
  |  Branch (146:5): [True: 2.77k, False: 1.38k]
  ------------------
  147|  3.01k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  3.01k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  148|  3.50k|    case PGP_PKA_DILITHIUM3_BP256:
  ------------------
  |  Branch (148:5): [True: 493, False: 3.67k]
  ------------------
  149|  3.50k|        return dilithium_L3;
  150|    394|    case PGP_PKA_DILITHIUM5_BP384:
  ------------------
  |  Branch (150:5): [True: 394, False: 3.77k]
  ------------------
  151|    394|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    394|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  152|    657|    case PGP_PKA_DILITHIUM5_P384:
  ------------------
  |  Branch (152:5): [True: 263, False: 3.90k]
  ------------------
  153|    657|        return dilithium_L5;
  154|      0|    default:
  ------------------
  |  Branch (154:5): [True: 0, False: 4.16k]
  ------------------
  155|      0|        RNP_LOG("invalid PK alg given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  156|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  157|  4.16k|    }
  158|  4.16k|}
_ZN35pgp_dilithium_exdsa_composite_key_t18pk_alg_to_curve_idE16pgp_pubkey_alg_t:
  162|  5.15k|{
  163|  5.15k|    switch (pk_alg) {
  164|    280|    case PGP_PKA_DILITHIUM3_ED25519:
  ------------------
  |  Branch (164:5): [True: 280, False: 4.87k]
  ------------------
  165|    280|        return PGP_CURVE_ED25519;
  166|  3.56k|    case PGP_PKA_DILITHIUM3_P256:
  ------------------
  |  Branch (166:5): [True: 3.56k, False: 1.59k]
  ------------------
  167|  3.56k|        return PGP_CURVE_NIST_P_256;
  168|    541|    case PGP_PKA_DILITHIUM3_BP256:
  ------------------
  |  Branch (168:5): [True: 541, False: 4.61k]
  ------------------
  169|    541|        return PGP_CURVE_BP256;
  170|    477|    case PGP_PKA_DILITHIUM5_BP384:
  ------------------
  |  Branch (170:5): [True: 477, False: 4.67k]
  ------------------
  171|    477|        return PGP_CURVE_BP384;
  172|    297|    case PGP_PKA_DILITHIUM5_P384:
  ------------------
  |  Branch (172:5): [True: 297, False: 4.85k]
  ------------------
  173|    297|        return PGP_CURVE_NIST_P_384;
  174|       |    /*case PGP_PKA_DILITHIUM5_ED448:
  175|       |      throw rnp::rnp_exception(RNP_ERROR_NOT_IMPLEMENTED);*/
  176|      0|    default:
  ------------------
  |  Branch (176:5): [True: 0, False: 5.15k]
  ------------------
  177|      0|        RNP_LOG("invalid PK alg given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  179|  5.15k|    }
  180|  5.15k|}
_ZN42pgp_dilithium_exdsa_composite_public_key_tC2ERKNSt3__16vectorIhNS0_9allocatorIhEEEE16pgp_pubkey_alg_t:
  191|    954|    : pk_alg_(pk_alg)
  192|    954|{
  193|    954|    parse_component_keys(key_encoded);
  194|    954|}
_ZN43pgp_dilithium_exdsa_composite_private_key_tC2EPKhm16pgp_pubkey_alg_t:
  214|     36|    : pk_alg_(pk_alg)
  215|     36|{
  216|     36|    parse_component_keys(std::vector<uint8_t>(key_encoded, key_encoded + key_encoded_len));
  217|     36|}
_ZN43pgp_dilithium_exdsa_composite_private_key_taSERKS_:
  231|  3.16k|{
  232|  3.16k|    pgp_dilithium_exdsa_composite_key_t::operator=(other);
  233|  3.16k|    pk_alg_ = other.pk_alg_;
  234|  3.16k|    if (other.is_initialized() && other.dilithium_key_) {
  ------------------
  |  Branch (234:9): [True: 36, False: 3.12k]
  |  Branch (234:35): [True: 36, False: 0]
  ------------------
  235|     36|        dilithium_key_ =
  236|     36|          std::make_unique<pgp_dilithium_private_key_t>(pgp_dilithium_private_key_t(
  237|     36|            other.dilithium_key_->get_encoded(), other.dilithium_key_->param()));
  238|     36|    }
  239|  3.16k|    if (other.is_initialized() && other.exdsa_key_) {
  ------------------
  |  Branch (239:9): [True: 36, False: 3.12k]
  |  Branch (239:35): [True: 36, False: 0]
  ------------------
  240|     36|        exdsa_key_ = std::make_unique<exdsa_private_key_t>(
  241|     36|          exdsa_private_key_t(other.exdsa_key_->get_encoded(), other.exdsa_key_->get_curve()));
  242|     36|    }
  243|       |
  244|  3.16k|    return *this;
  245|  3.16k|}
_ZN43pgp_dilithium_exdsa_composite_private_key_tC2ERKS_:
  249|  3.12k|{
  250|  3.12k|    *this = other;
  251|  3.12k|}
_ZN43pgp_dilithium_exdsa_composite_private_key_t12encoded_sizeE16pgp_pubkey_alg_t:
  275|     89|{
  276|     89|    dilithium_parameter_e dilithium_param = pk_alg_to_dilithium_id(pk_alg);
  277|     89|    pgp_curve_t           curve = pk_alg_to_curve_id(pk_alg);
  278|     89|    return exdsa_curve_privkey_size(curve) + dilithium_privkey_size(dilithium_param);
  279|     89|}
_ZN43pgp_dilithium_exdsa_composite_private_key_t20parse_component_keysENSt3__16vectorIhNS0_9allocatorIhEEEE:
  284|     36|{
  285|     36|    if (key_encoded.size() != encoded_size(pk_alg_)) {
  ------------------
  |  Branch (285:9): [True: 0, False: 36]
  ------------------
  286|      0|        RNP_LOG("ML-DSA composite key format invalid: length mismatch");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  287|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  288|      0|    }
  289|       |
  290|     36|    dilithium_parameter_e dilithium_param = pk_alg_to_dilithium_id(pk_alg_);
  291|     36|    pgp_curve_t           curve = pk_alg_to_curve_id(pk_alg_);
  292|     36|    size_t                split_at = exdsa_curve_privkey_size(pk_alg_to_curve_id(pk_alg_));
  293|       |
  294|     36|    dilithium_key_ = std::make_unique<pgp_dilithium_private_key_t>(pgp_dilithium_private_key_t(
  295|     36|      key_encoded.data() + split_at, key_encoded.size() - split_at, dilithium_param));
  296|     36|    exdsa_key_ = std::make_unique<exdsa_private_key_t>(
  297|     36|      exdsa_private_key_t(key_encoded.data(), split_at, curve));
  298|       |
  299|     36|    is_initialized_ = true;
  300|     36|}
_ZN43pgp_dilithium_exdsa_composite_private_key_t12secure_clearEv:
  348|    700|{
  349|       |    // private key buffer is stored in a secure_vector and will be securely erased by the
  350|       |    // destructor.
  351|    700|    dilithium_key_.reset();
  352|    700|    exdsa_key_.reset();
  353|    700|    is_initialized_ = false;
  354|    700|}
_ZN42pgp_dilithium_exdsa_composite_public_key_t12encoded_sizeE16pgp_pubkey_alg_t:
  358|  2.57k|{
  359|  2.57k|    dilithium_parameter_e dilithium_param = pk_alg_to_dilithium_id(pk_alg);
  360|  2.57k|    pgp_curve_t           curve = pk_alg_to_curve_id(pk_alg);
  361|  2.57k|    return exdsa_curve_pubkey_size(curve) + dilithium_pubkey_size(dilithium_param);
  362|  2.57k|}
_ZN42pgp_dilithium_exdsa_composite_public_key_t20parse_component_keysENSt3__16vectorIhNS0_9allocatorIhEEEE:
  367|    954|{
  368|    954|    if (key_encoded.size() != encoded_size(pk_alg_)) {
  ------------------
  |  Branch (368:9): [True: 0, False: 954]
  ------------------
  369|      0|        RNP_LOG("ML-DSA composite key format invalid: length mismatch");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  370|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  371|      0|    }
  372|       |
  373|    954|    dilithium_parameter_e dilithium_param = pk_alg_to_dilithium_id(pk_alg_);
  374|    954|    pgp_curve_t           curve = pk_alg_to_curve_id(pk_alg_);
  375|    954|    size_t                split_at = exdsa_curve_pubkey_size(pk_alg_to_curve_id(pk_alg_));
  376|       |
  377|    954|    dilithium_key_ = pgp_dilithium_public_key_t(
  378|    954|      key_encoded.data() + split_at, key_encoded.size() - split_at, dilithium_param);
  379|    954|    exdsa_key_ = exdsa_public_key_t(key_encoded.data(), split_at, curve);
  380|       |
  381|    954|    is_initialized_ = true;
  382|    954|}
_ZNK42pgp_dilithium_exdsa_composite_public_key_t11get_encodedEv:
  386|    506|{
  387|    506|    initialized_or_throw();
  388|    506|    std::vector<uint8_t> result;
  389|    506|    std::vector<uint8_t> exdsa_key_encoded = exdsa_key_.get_encoded();
  390|    506|    std::vector<uint8_t> dilithium_key_encoded = dilithium_key_.get_encoded();
  391|       |
  392|    506|    result.insert(result.end(), std::begin(exdsa_key_encoded), std::end(exdsa_key_encoded));
  393|    506|    result.insert(
  394|    506|      result.end(), std::begin(dilithium_key_encoded), std::end(dilithium_key_encoded));
  395|    506|    return result;
  396|    506|};

_ZNK35pgp_dilithium_exdsa_composite_key_t14is_initializedEv:
   58|  6.83k|    {
   59|  6.83k|        return is_initialized_;
   60|  6.83k|    }
_ZN31pgp_dilithium_exdsa_signature_t24composite_signature_sizeE16pgp_pubkey_alg_t:
   72|    510|    {
   73|    510|        return dilithium_signature_size(
   74|    510|                 pgp_dilithium_exdsa_composite_key_t::pk_alg_to_dilithium_id(pk_alg)) +
   75|    510|               pgp_dilithium_exdsa_composite_key_t::exdsa_curve_signature_size(
   76|    510|                 pgp_dilithium_exdsa_composite_key_t::pk_alg_to_curve_id(pk_alg));
   77|    510|    }
_ZN43pgp_dilithium_exdsa_composite_private_key_tC2Ev:
   96|  1.65k|    pgp_dilithium_exdsa_composite_private_key_t() = default;
_ZN42pgp_dilithium_exdsa_composite_public_key_tC2Ev:
  140|  1.65k|    pgp_dilithium_exdsa_composite_public_key_t() = default;

_ZNK3pgp3dsa3Key6verifyERKNS0_9SignatureERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
  125|  6.96k|{
  126|  6.96k|    size_t q_order = q.size();
  127|  6.96k|    size_t z_len = std::min(hash.size(), q_order);
  128|  6.96k|    size_t r_blen = sig.r.size();
  129|  6.96k|    size_t s_blen = sig.s.size();
  130|  6.96k|    if ((r_blen > q_order) || (s_blen > q_order)) {
  ------------------
  |  Branch (130:9): [True: 13, False: 6.94k]
  |  Branch (130:31): [True: 10, False: 6.93k]
  ------------------
  131|     23|        RNP_LOG("Wrong signature");
  ------------------
  |  |   76|     23|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     23|    do {                                                                                 \
  |  |  |  |   69|     23|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 23, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     23|            break;                                                                       \
  |  |  |  |   71|     23|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  132|     23|        return RNP_ERROR_BAD_PARAMETERS;
  133|     23|    }
  134|       |
  135|  6.93k|    rnp::bn bp(p);
  136|  6.93k|    rnp::bn bq(q);
  137|  6.93k|    rnp::bn bg(g);
  138|  6.93k|    rnp::bn by(y);
  139|       |
  140|  6.93k|    if (!bp || !bq || !bg || !by) {
  ------------------
  |  Branch (140:9): [True: 0, False: 6.93k]
  |  Branch (140:16): [True: 0, False: 6.93k]
  |  Branch (140:23): [True: 0, False: 6.93k]
  |  Branch (140:30): [True: 0, False: 6.93k]
  ------------------
  141|      0|        RNP_LOG("out of memory");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  142|      0|        return RNP_ERROR_OUT_OF_MEMORY;
  143|      0|    }
  144|       |
  145|  6.93k|    rnp::botan::Pubkey dsa_key;
  146|  6.93k|    if (botan_pubkey_load_dsa(&dsa_key.get(), bp.get(), bq.get(), bg.get(), by.get())) {
  ------------------
  |  Branch (146:9): [True: 61, False: 6.87k]
  ------------------
  147|     61|        RNP_LOG("Wrong key");
  ------------------
  |  |   76|     61|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     61|    do {                                                                                 \
  |  |  |  |   69|     61|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 61, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     61|            break;                                                                       \
  |  |  |  |   71|     61|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|     61|        return RNP_ERROR_GENERIC;
  149|     61|    }
  150|       |
  151|  6.87k|    std::vector<uint8_t> sign_buf(q_order * 2, 0);
  152|  6.87k|    sig.r.copy(sign_buf.data() + q_order - r_blen);
  153|  6.87k|    sig.s.copy(sign_buf.data() + 2 * q_order - s_blen);
  154|       |
  155|  6.87k|    rnp::botan::op::Verify verify_op;
  156|  6.87k|    if (botan_pk_op_verify_create(&verify_op.get(), dsa_key.get(), "Raw", 0)) {
  ------------------
  |  Branch (156:9): [True: 0, False: 6.87k]
  ------------------
  157|      0|        RNP_LOG("Can't create verifier");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  158|      0|        return RNP_ERROR_GENERIC;
  159|      0|    }
  160|       |
  161|  6.87k|    if (botan_pk_op_verify_update(verify_op.get(), hash.data(), z_len)) {
  ------------------
  |  Branch (161:9): [True: 0, False: 6.87k]
  ------------------
  162|      0|        return RNP_ERROR_GENERIC;
  163|      0|    }
  164|       |
  165|  6.87k|    if (botan_pk_op_verify_finish(verify_op.get(), sign_buf.data(), 2 * q_order)) {
  ------------------
  |  Branch (165:9): [True: 6.18k, False: 693]
  ------------------
  166|  6.18k|        return RNP_ERROR_SIGNATURE_INVALID;
  167|  6.18k|    }
  168|    693|    return RNP_SUCCESS;
  169|  6.87k|}

_ZN3pgp3dsa3Key12clear_secretEv:
   56|  52.3k|    {
   57|  52.3k|        x.forget();
   58|  52.3k|    }
_ZN3pgp3dsa3KeyD2Ev:
   61|  45.8k|    {
   62|  45.8k|        clear_secret();
   63|  45.8k|    }

_ZNK3pgp2ec5Curve5bytesEv:
  102|   115k|    {
  103|       |        return BITS_TO_BYTES(bitlen);
  ------------------
  |  |   56|   115k|#define BITS_TO_BYTES(b) (((b) + (CHAR_BIT - 1)) / CHAR_BIT)
  ------------------
  104|   115k|    }
_ZN3pgp2ec3Key12clear_secretEv:
  125|   618k|    {
  126|   618k|        x.forget();
  127|   618k|    }
_ZN3pgp2ec3KeyD2Ev:
  130|   555k|    {
  131|   555k|        clear_secret();
  132|   555k|    }
_ZN17pgp_ed25519_key_t12clear_secretEv:
  189|  39.9k|    {
  190|  39.9k|        secure_clear(priv.data(), priv.size());
  191|  39.9k|        priv.resize(0);
  192|  39.9k|    }
_ZN17pgp_ed25519_key_tD2Ev:
  195|  34.1k|    {
  196|  34.1k|        clear_secret();
  197|  34.1k|    }
_ZN16pgp_x25519_key_t12clear_secretEv:
  210|  17.0k|    {
  211|  17.0k|        secure_clear(priv.data(), priv.size());
  212|  17.0k|        priv.resize(0);
  213|  17.0k|    }
_ZN16pgp_x25519_key_tD2Ev:
  216|  14.3k|    {
  217|  14.3k|        clear_secret();
  218|  14.3k|    }

_ZN3pgp2ec5Curve6by_OIDERKNSt3__16vectorIhNS2_9allocatorIhEEEE:
  262|   137k|{
  263|  1.05M|    for (size_t i = 0; i < PGP_CURVE_MAX; i++) {
  ------------------
  |  Branch (263:24): [True: 1.03M, False: 14.7k]
  ------------------
  264|  1.03M|        if (oid == ec_curves[i].OID) {
  ------------------
  |  Branch (264:13): [True: 122k, False: 913k]
  ------------------
  265|   122k|            return static_cast<pgp_curve_t>(i);
  266|   122k|        }
  267|  1.03M|    }
  268|  14.7k|    return PGP_CURVE_MAX;
  269|   137k|}
_ZN3pgp2ec5Curve3getE11pgp_curve_t:
  285|   222k|{
  286|   222k|    return (curve_id < PGP_CURVE_MAX && curve_id > 0) ? &ec_curves[curve_id] : NULL;
  ------------------
  |  Branch (286:13): [True: 222k, False: 0]
  |  Branch (286:41): [True: 222k, False: 659]
  ------------------
  287|   222k|}
_ZN3pgp2ec5Curve12is_supportedE11pgp_curve_t:
  310|  35.9k|{
  311|  35.9k|    auto info = Curve::get(curve);
  312|  35.9k|    return info && info->supported;
  ------------------
  |  Branch (312:12): [True: 35.9k, False: 0]
  |  Branch (312:20): [True: 35.9k, False: 0]
  ------------------
  313|  35.9k|}

_ZN3pgp5ecdsa15padding_str_forE14pgp_hash_alg_t:
  107|  35.3k|{
  108|  35.3k|    switch (hash_alg) {
  109|  3.73k|    case PGP_HASH_MD5:
  ------------------
  |  Branch (109:5): [True: 3.73k, False: 31.6k]
  ------------------
  110|  3.73k|        return "Raw(MD5)";
  111|    655|    case PGP_HASH_SHA1:
  ------------------
  |  Branch (111:5): [True: 655, False: 34.7k]
  ------------------
  112|    655|        return "Raw(SHA-1)";
  113|    814|    case PGP_HASH_RIPEMD:
  ------------------
  |  Branch (113:5): [True: 814, False: 34.5k]
  ------------------
  114|    814|        return "Raw(RIPEMD-160)";
  115|  7.75k|    case PGP_HASH_SHA256:
  ------------------
  |  Branch (115:5): [True: 7.75k, False: 27.6k]
  ------------------
  116|  7.75k|        return "Raw(SHA-256)";
  117|  10.8k|    case PGP_HASH_SHA384:
  ------------------
  |  Branch (117:5): [True: 10.8k, False: 24.5k]
  ------------------
  118|  10.8k|        return "Raw(SHA-384)";
  119|  6.78k|    case PGP_HASH_SHA512:
  ------------------
  |  Branch (119:5): [True: 6.78k, False: 28.5k]
  ------------------
  120|  6.78k|        return "Raw(SHA-512)";
  121|    388|    case PGP_HASH_SHA224:
  ------------------
  |  Branch (121:5): [True: 388, False: 34.9k]
  ------------------
  122|    388|        return "Raw(SHA-224)";
  123|  1.56k|    case PGP_HASH_SHA3_256:
  ------------------
  |  Branch (123:5): [True: 1.56k, False: 33.8k]
  ------------------
  124|  1.56k|        return "Raw(SHA-3(256))";
  125|    898|    case PGP_HASH_SHA3_512:
  ------------------
  |  Branch (125:5): [True: 898, False: 34.4k]
  ------------------
  126|    898|        return "Raw(SHA-3(512))";
  127|  1.91k|    case PGP_HASH_SM3:
  ------------------
  |  Branch (127:5): [True: 1.91k, False: 33.4k]
  ------------------
  128|  1.91k|        return "Raw(SM3)";
  129|      0|    default:
  ------------------
  |  Branch (129:5): [True: 0, False: 35.3k]
  ------------------
  130|      0|        return "Raw";
  131|  35.3k|    }
  132|  35.3k|}
_ZN3pgp5ecdsa6verifyERKNS_2ec9SignatureE14pgp_hash_alg_tRKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEERKNS1_3KeyE:
  179|  35.4k|{
  180|  35.4k|    auto curve = ec::Curve::get(key.curve);
  181|  35.4k|    if (!curve) {
  ------------------
  |  Branch (181:9): [True: 0, False: 35.4k]
  ------------------
  182|      0|        RNP_LOG("unknown curve");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  183|      0|        return RNP_ERROR_BAD_PARAMETERS;
  184|      0|    }
  185|       |
  186|  35.4k|    size_t curve_order = curve->bytes();
  187|  35.4k|    size_t r_blen = sig.r.size();
  188|  35.4k|    size_t s_blen = sig.s.size();
  189|  35.4k|    if ((r_blen > curve_order) || (s_blen > curve_order) ||
  ------------------
  |  Branch (189:9): [True: 25, False: 35.4k]
  |  Branch (189:35): [True: 7, False: 35.4k]
  ------------------
  190|  35.4k|        (curve_order > MAX_CURVE_BYTELEN)) {
  ------------------
  |  |   40|  35.4k|#define MAX_CURVE_BYTELEN ((MAX_CURVE_BIT_SIZE + 7) / 8)
  |  |  ------------------
  |  |  |  |   38|  35.4k|#define MAX_CURVE_BIT_SIZE 521 // secp521r1
  |  |  ------------------
  ------------------
  |  Branch (190:9): [True: 0, False: 35.4k]
  ------------------
  191|     32|        return RNP_ERROR_BAD_PARAMETERS;
  192|     32|    }
  193|       |
  194|  35.4k|    rnp::botan::Pubkey pub;
  195|  35.4k|    if (!load_public_key(pub, key)) {
  ------------------
  |  Branch (195:9): [True: 63, False: 35.3k]
  ------------------
  196|     63|        return RNP_ERROR_SIGNATURE_INVALID;
  197|     63|    }
  198|       |
  199|  35.3k|    rnp::botan::op::Verify verifier;
  200|  35.3k|    auto                   pad = padding_str_for(hash_alg);
  201|  35.3k|    if (botan_pk_op_verify_create(&verifier.get(), pub.get(), pad, 0) ||
  ------------------
  |  Branch (201:9): [True: 0, False: 35.3k]
  ------------------
  202|  35.3k|        botan_pk_op_verify_update(verifier.get(), hash.data(), hash.size())) {
  ------------------
  |  Branch (202:9): [True: 0, False: 35.3k]
  ------------------
  203|      0|        return RNP_ERROR_SIGNATURE_INVALID;
  204|      0|    }
  205|       |
  206|  35.3k|    std::vector<uint8_t> sign_buf(2 * curve_order, 0);
  207|       |    // Both can't fail
  208|  35.3k|    sig.r.copy(sign_buf.data() + curve_order - r_blen);
  209|  35.3k|    sig.s.copy(sign_buf.data() + 2 * curve_order - s_blen);
  210|       |
  211|  35.3k|    if (botan_pk_op_verify_finish(verifier.get(), sign_buf.data(), sign_buf.size())) {
  ------------------
  |  Branch (211:9): [True: 31.4k, False: 3.97k]
  ------------------
  212|  31.4k|        return RNP_ERROR_SIGNATURE_INVALID;
  213|  31.4k|    }
  214|  3.97k|    return RNP_SUCCESS;
  215|  35.3k|}
ecdsa.cpp:_ZN3pgp5ecdsaL15load_public_keyERN3rnp5botan6PubkeyERKNS_2ec3KeyE:
   38|  35.4k|{
   39|  35.4k|    auto curve = ec::Curve::get(keydata.curve);
   40|  35.4k|    if (!curve) {
  ------------------
  |  Branch (40:9): [True: 0, False: 35.4k]
  ------------------
   41|      0|        RNP_LOG("unknown curve");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   42|      0|        return false;
   43|      0|    }
   44|  35.4k|    if (!keydata.p.size() || (keydata.p[0] != 0x04)) {
  ------------------
  |  Branch (44:9): [True: 0, False: 35.4k]
  |  Branch (44:30): [True: 43, False: 35.3k]
  ------------------
   45|     43|        RNP_LOG("Failed to load public key: %02x", keydata.p[0]);
  ------------------
  |  |   76|     43|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     43|    do {                                                                                 \
  |  |  |  |   69|     43|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 43, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     43|            break;                                                                       \
  |  |  |  |   71|     43|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   46|     43|        return false;
   47|     43|    }
   48|  35.3k|    const size_t curve_order = curve->bytes();
   49|  35.3k|    if (keydata.p.size() != 2 * curve_order + 1) {
  ------------------
  |  Branch (49:9): [True: 10, False: 35.3k]
  ------------------
   50|     10|        return false;
   51|     10|    }
   52|  35.3k|    rnp::bn px(&keydata.p[1], curve_order);
   53|  35.3k|    rnp::bn py(&keydata.p[1] + curve_order, curve_order);
   54|       |
   55|  35.3k|    if (!px || !py) {
  ------------------
  |  Branch (55:9): [True: 0, False: 35.3k]
  |  Branch (55:16): [True: 0, False: 35.3k]
  ------------------
   56|      0|        return false;
   57|      0|    }
   58|       |
   59|  35.3k|    bool res = !botan_pubkey_load_ecdsa(&pubkey.get(), px.get(), py.get(), curve->botan_name);
   60|  35.3k|    if (!res) {
  ------------------
  |  Branch (60:9): [True: 10, False: 35.3k]
  ------------------
   61|     10|        RNP_LOG("failed to load ecdsa %s public key", curve->botan_name);
  ------------------
  |  |   76|     10|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     10|    do {                                                                                 \
  |  |  |  |   69|     10|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 10, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     10|            break;                                                                       \
  |  |  |  |   71|     10|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   62|     10|    }
   63|  35.3k|    return res;
   64|  35.3k|}

_Z21ed25519_verify_nativeRKNSt3__16vectorIhNS_9allocatorIhEEEES5_PKhm:
   69|  5.35k|{
   70|  5.35k|    Botan::Ed25519_PublicKey pub_key(key);
   71|  5.35k|    auto                     verifier = Botan::PK_Verifier(pub_key, "Pure");
   72|  5.35k|    if (verifier.verify_message(hash, hash_len, sig.data(), sig.size())) {
  ------------------
  |  Branch (72:9): [True: 1.23k, False: 4.12k]
  ------------------
   73|  1.23k|        return RNP_SUCCESS;
   74|  1.23k|    }
   75|  4.12k|    return RNP_ERROR_VERIFICATION_FAILED;
   76|  5.35k|}

_ZN3pgp5eddsa6verifyERKNS_2ec9SignatureERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEERKNS1_3KeyE:
  119|  21.3k|{
  120|       |    // Unexpected size for Ed25519 signature
  121|  21.3k|    if ((sig.r.size() > 32) || (sig.s.size() > 32)) {
  ------------------
  |  Branch (121:9): [True: 18, False: 21.3k]
  |  Branch (121:32): [True: 38, False: 21.3k]
  ------------------
  122|     56|        return RNP_ERROR_SIGNATURE_INVALID;
  123|     56|    }
  124|       |
  125|  21.3k|    rnp::botan::Pubkey eddsa;
  126|  21.3k|    if (!load_public_key(eddsa, key)) {
  ------------------
  |  Branch (126:9): [True: 83, False: 21.2k]
  ------------------
  127|     83|        return RNP_ERROR_BAD_PARAMETERS;
  128|     83|    }
  129|       |
  130|  21.2k|    rnp::botan::op::Verify verify_op;
  131|  21.2k|    if (botan_pk_op_verify_create(&verify_op.get(), eddsa.get(), "Pure", 0) ||
  ------------------
  |  Branch (131:9): [True: 0, False: 21.2k]
  ------------------
  132|  21.2k|        botan_pk_op_verify_update(verify_op.get(), hash.data(), hash.size())) {
  ------------------
  |  Branch (132:9): [True: 0, False: 21.2k]
  ------------------
  133|      0|        return RNP_ERROR_SIGNATURE_INVALID;
  134|      0|    }
  135|       |
  136|  21.2k|    uint8_t bn_buf[64] = {0};
  137|  21.2k|    sig.r.copy(bn_buf + 32 - sig.r.size());
  138|  21.2k|    sig.s.copy(bn_buf + 64 - sig.s.size());
  139|       |
  140|  21.2k|    if (botan_pk_op_verify_finish(verify_op.get(), bn_buf, 64)) {
  ------------------
  |  Branch (140:9): [True: 17.6k, False: 3.55k]
  ------------------
  141|  17.6k|        return RNP_ERROR_SIGNATURE_INVALID;
  142|  17.6k|    }
  143|  3.55k|    return RNP_SUCCESS;
  144|  21.2k|}
eddsa.cpp:_ZN3pgp5eddsaL15load_public_keyERN3rnp5botan6PubkeyERKNS_2ec3KeyE:
   39|  21.3k|{
   40|  21.3k|    if (keydata.curve != PGP_CURVE_ED25519) {
  ------------------
  |  Branch (40:9): [True: 10, False: 21.3k]
  ------------------
   41|     10|        return false;
   42|     10|    }
   43|       |    /*
   44|       |     * See draft-ietf-openpgp-rfc4880bis-01 section 13.3
   45|       |     */
   46|  21.3k|    if ((keydata.p.size() != 33) || (keydata.p[0] != 0x40)) {
  ------------------
  |  Branch (46:9): [True: 34, False: 21.2k]
  |  Branch (46:37): [True: 39, False: 21.2k]
  ------------------
   47|     73|        return false;
   48|     73|    }
   49|  21.2k|    if (botan_pubkey_load_ed25519(&pubkey.get(), &keydata.p[1])) {
  ------------------
  |  Branch (49:9): [True: 0, False: 21.2k]
  ------------------
   50|      0|        return false;
   51|      0|    }
   52|  21.2k|    return true;
   53|  21.2k|}

_ZN3pgp2eg3Key12clear_secretEv:
   62|  27.9k|    {
   63|  27.9k|        x.forget();
   64|  27.9k|    }
_ZN3pgp2eg3KeyD2Ev:
   67|  25.2k|    {
   68|  25.2k|        clear_secret();
   69|  25.2k|    }

_ZN8ec_key_tD2Ev:
   39|  44.4k|{
   40|  44.4k|}
_ZN8ec_key_tC2E11pgp_curve_t:
   42|  6.25k|ec_key_t::ec_key_t(pgp_curve_t curve) : curve_(curve)
   43|  6.25k|{
   44|  6.25k|}
_ZN21ecdh_kem_public_key_tC2EPhm11pgp_curve_t:
   49|  4.92k|    : ec_key_t(curve), key_(std::vector<uint8_t>(key_buf, key_buf + key_buf_len))
   50|  4.92k|{
   51|  4.92k|}
_ZN22ecdh_kem_private_key_tC2EPhm11pgp_curve_t:
   60|     91|    : ec_key_t(curve), key_(key_buf, key_buf + key_buf_len)
   61|     91|{
   62|     91|}
_ZN22ecdh_kem_private_key_tC2ENSt3__16vectorIhNS0_9allocatorIhEEEE11pgp_curve_t:
   64|    211|    : ec_key_t(curve), key_(Botan::secure_vector<uint8_t>(key.begin(), key.end()))
   65|    211|{
   66|    211|}
_ZN18exdsa_public_key_tC2EPhm11pgp_curve_t:
  176|    954|    : ec_key_t(curve), key_(key_buf, key_buf + key_buf_len)
  177|    954|{
  178|    954|}
_ZN19exdsa_private_key_tC2EPhm11pgp_curve_t:
  187|     36|    : ec_key_t(curve), key_(key_buf, key_buf + key_buf_len)
  188|     36|{
  189|     36|}
_ZN19exdsa_private_key_tC2ENSt3__16vectorIhNS0_9allocatorIhEEEE11pgp_curve_t:
  191|     36|    : ec_key_t(curve), key_(Botan::secure_vector<uint8_t>(key.begin(), key.end()))
  192|     36|{
  193|     36|}

_ZNK8ec_key_t9get_curveEv:
   61|    247|    {
   62|    247|        return curve_;
   63|    247|    }
_ZNK21ecdh_kem_public_key_t11get_encodedEv:
   85|  3.01k|    {
   86|  3.01k|        return key_;
   87|  3.01k|    }
_ZNK22ecdh_kem_private_key_t11get_encodedEv:
  110|    211|    {
  111|    211|        return Botan::unlock(key_);
  112|    211|    }
_ZNK18exdsa_public_key_t11get_encodedEv:
  148|    506|    {
  149|    506|        return key_;
  150|    506|    }
_ZNK19exdsa_private_key_t11get_encodedEv:
  173|     36|    {
  174|     36|        return Botan::unlock(key_);
  175|     36|    }
_ZN8ec_key_tC2Ev:
   50|  13.4k|    ec_key_t() = default;
_ZN21ecdh_kem_public_key_tC2Ev:
   73|  10.8k|    ecdh_kem_public_key_t() = default;
_ZN18exdsa_public_key_tC2Ev:
  136|  2.61k|    exdsa_public_key_t() = default;

_ZN3rnp10Hash_BotanC2E14pgp_hash_alg_t:
   49|   115k|Hash_Botan::Hash_Botan(pgp_hash_alg_t alg) : Hash(alg)
   50|   115k|{
   51|   115k|    auto name = Hash_Botan::name_backend(alg);
   52|   115k|    if (!name) {
  ------------------
  |  Branch (52:9): [True: 0, False: 115k]
  ------------------
   53|      0|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   54|      0|    }
   55|       |
   56|   115k|    fn_ = Botan::HashFunction::create(name);
   57|   115k|    if (!fn_) {
  ------------------
  |  Branch (57:9): [True: 1.80k, False: 113k]
  ------------------
   58|  1.80k|        RNP_LOG("Error creating hash object for '%s'", name);
  ------------------
  |  |   76|  1.80k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.80k|    do {                                                                                 \
  |  |  |  |   69|  1.80k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.80k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.80k|            break;                                                                       \
  |  |  |  |   71|  1.80k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   59|  1.80k|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   60|  1.80k|    }
   61|       |
   62|   115k|    assert(size_ == fn_->output_length());
   63|   113k|}
_ZN3rnp10Hash_BotanD2Ev:
   74|   113k|{
   75|   113k|}
_ZN3rnp10Hash_Botan6createE14pgp_hash_alg_t:
   79|   115k|{
   80|   115k|    return std::unique_ptr<Hash_Botan>(new Hash_Botan(alg));
   81|   115k|}
_ZN3rnp10Hash_Botan3addEPKvm:
   91|   537k|{
   92|   537k|    if (!fn_) {
  ------------------
  |  Branch (92:9): [True: 0, False: 537k]
  ------------------
   93|      0|        throw rnp_exception(RNP_ERROR_NULL_POINTER);
   94|      0|    }
   95|   537k|    fn_->update(static_cast<const uint8_t *>(buf), len);
   96|   537k|}
_ZN3rnp10Hash_Botan6finishEPh:
  100|   113k|{
  101|   113k|    assert(fn_);
  102|   113k|    if (!fn_) {
  ------------------
  |  Branch (102:9): [True: 0, False: 113k]
  ------------------
  103|      0|        return;
  104|      0|    }
  105|   113k|    if (digest) {
  ------------------
  |  Branch (105:9): [True: 113k, False: 0]
  ------------------
  106|   113k|        fn_->final(digest);
  107|   113k|    }
  108|   113k|    fn_ = nullptr;
  109|   113k|    size_ = 0;
  110|   113k|}
_ZN3rnp10Hash_Botan12name_backendE14pgp_hash_alg_t:
  114|   140k|{
  115|   140k|    return id_str_pair::lookup(botan_alg_map, alg);
  116|   140k|}
_ZN3rnp11CRC24_BotanC2Ev:
  119|  46.1k|{
  120|  46.1k|    fn_ = Botan::HashFunction::create("CRC24");
  121|  46.1k|    if (!fn_) {
  ------------------
  |  Branch (121:9): [True: 0, False: 46.1k]
  ------------------
  122|      0|        RNP_LOG("Error creating CRC24 object");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|      0|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  124|      0|    }
  125|  46.1k|    assert(3 == fn_->output_length());
  126|  46.1k|}
_ZN3rnp11CRC24_BotanD2Ev:
  129|  46.1k|{
  130|  46.1k|}
_ZN3rnp11CRC24_Botan6createEv:
  134|  46.1k|{
  135|  46.1k|    return std::unique_ptr<CRC24_Botan>(new CRC24_Botan());
  136|  46.1k|}
_ZN3rnp11CRC24_Botan3addEPKvm:
  140|  73.0k|{
  141|  73.0k|    if (!fn_) {
  ------------------
  |  Branch (141:9): [True: 0, False: 73.0k]
  ------------------
  142|      0|        throw rnp_exception(RNP_ERROR_NULL_POINTER);
  143|      0|    }
  144|  73.0k|    fn_->update(static_cast<const uint8_t *>(buf), len);
  145|  73.0k|}
_ZN3rnp11CRC24_Botan6finishEv:
  149|  35.7k|{
  150|  35.7k|    if (!fn_) {
  ------------------
  |  Branch (150:9): [True: 0, False: 35.7k]
  ------------------
  151|      0|        throw rnp_exception(RNP_ERROR_NULL_POINTER);
  152|      0|    }
  153|  35.7k|    std::array<uint8_t, 3> crc{};
  154|  35.7k|    fn_->final(crc.data());
  155|  35.7k|    fn_ = nullptr;
  156|  35.7k|    return crc;
  157|  35.7k|}

_ZN3rnp4HashC2E14pgp_hash_alg_t:
   48|   876k|    Hash(pgp_hash_alg_t alg) : alg_(alg)
   49|   876k|    {
   50|   876k|        size_ = Hash::size(alg);
   51|   876k|    };
_ZN3rnp5CRC24C2Ev:
   81|  46.1k|    CRC24(){};
_ZN3rnp5CRC24D2Ev:
   89|  46.1k|    virtual ~CRC24(){};

_ZNK3rnp4Hash3algEv:
   60|   101k|{
   61|   101k|    return alg_;
   62|   101k|}
_ZNK3rnp4Hash4sizeEv:
   66|   101k|{
   67|   101k|    return Hash::size(alg_);
   68|   101k|}
_ZN3rnp4Hash6createE14pgp_hash_alg_t:
   72|   876k|{
   73|   876k|    if (alg == PGP_HASH_SHA1) {
  ------------------
  |  Branch (73:9): [True: 761k, False: 115k]
  ------------------
   74|   761k|        return Hash_SHA1CD::create();
   75|   761k|    }
   76|       |#if !defined(ENABLE_SM2)
   77|       |    if (alg == PGP_HASH_SM3) {
   78|       |        RNP_LOG("SM3 hash is not available.");
   79|       |        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   80|       |    }
   81|       |#endif
   82|       |#if defined(CRYPTO_BACKEND_OPENSSL)
   83|       |    return Hash_OpenSSL::create(alg);
   84|       |#elif defined(CRYPTO_BACKEND_BOTAN)
   85|   115k|    return Hash_Botan::create(alg);
   86|       |#else
   87|       |#error "Crypto backend not specified"
   88|       |#endif
   89|   876k|}
_ZN3rnp5CRC246createEv:
   93|  46.1k|{
   94|       |#if defined(CRYPTO_BACKEND_OPENSSL)
   95|       |    return CRC24_RNP::create();
   96|       |#elif defined(CRYPTO_BACKEND_BOTAN)
   97|       |    return CRC24_Botan::create();
   98|       |#else
   99|       |#error "Crypto backend not specified"
  100|       |#endif
  101|  46.1k|}
_ZN3rnp4Hash3addERKNSt3__16vectorIhNS1_9allocatorIhEEEE:
  105|  1.22M|{
  106|  1.22M|    add(val.data(), val.size());
  107|  1.22M|}
_ZN3rnp4Hash3addEj:
  111|  25.5k|{
  112|  25.5k|    uint8_t ibuf[4];
  113|  25.5k|    write_uint32(ibuf, val);
  114|  25.5k|    add(ibuf, sizeof(ibuf));
  115|  25.5k|}
_ZN3rnp4Hash3addERKN3pgp3mpiE:
  119|  25.5k|{
  120|  25.5k|    size_t len = val.size();
  121|  25.5k|    size_t idx = 0;
  122|   119k|    while ((idx < len) && (!val[idx])) {
  ------------------
  |  Branch (122:12): [True: 118k, False: 981]
  |  Branch (122:27): [True: 94.2k, False: 24.5k]
  ------------------
  123|  94.2k|        idx++;
  124|  94.2k|    }
  125|       |
  126|  25.5k|    if (idx >= len) {
  ------------------
  |  Branch (126:9): [True: 981, False: 24.5k]
  ------------------
  127|    981|        add(0);
  128|    981|        return;
  129|    981|    }
  130|       |
  131|  24.5k|    add(len - idx);
  132|  24.5k|    if (val[idx] & 0x80) {
  ------------------
  |  Branch (132:9): [True: 7.60k, False: 16.9k]
  ------------------
  133|  7.60k|        uint8_t padbyte = 0;
  134|  7.60k|        add(&padbyte, 1);
  135|  7.60k|    }
  136|  24.5k|    add(val.data() + idx, len - idx);
  137|  24.5k|}
_ZN3rnp4Hash6finishEv:
  141|   183k|{
  142|   183k|    std::vector<uint8_t> res(size_, 0);
  143|   183k|    finish(res.data());
  144|   183k|    return res;
  145|   183k|}
_ZN3rnp4HashD2Ev:
  156|   876k|{
  157|   876k|}
_ZN3rnp4Hash4sizeE14pgp_hash_alg_t:
  183|   996k|{
  184|   996k|    size_t val = 0;
  185|   996k|    ARRAY_LOOKUP_BY_ID(hash_alg_map, type, len, alg, val);
  ------------------
  |  |   45|   996k|    do {                                                                  \
  |  |   46|  2.73M|        for (size_t i__ = 0; i__ < ARRAY_SIZE(array); i__++) {            \
  |  |  ------------------
  |  |  |  |   34|  2.73M|#define ARRAY_SIZE(a) (sizeof(a) / sizeof(*(a)))
  |  |  ------------------
  |  |  |  Branch (46:30): [True: 2.73M, False: 2.27k]
  |  |  ------------------
  |  |   47|  2.73M|            if ((array)[i__].id_field == (lookup_value)) {                \
  |  |  ------------------
  |  |  |  Branch (47:17): [True: 994k, False: 1.74M]
  |  |  ------------------
  |  |   48|   994k|                (ret) = (array)[i__].ret_field;                           \
  |  |   49|   994k|                break;                                                    \
  |  |   50|   994k|            }                                                             \
  |  |   51|  2.73M|        }                                                                 \
  |  |   52|   996k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (52:14): [Folded, False: 996k]
  |  |  ------------------
  ------------------
  186|   996k|    return val;
  187|   996k|}

_ZN3rnp11Hash_SHA1CDC2Ev:
   35|   761k|Hash_SHA1CD::Hash_SHA1CD() : Hash(PGP_HASH_SHA1)
   36|   761k|{
   37|       |    assert(size_ == 20);
   38|   761k|    SHA1DCInit(&ctx_);
   39|   761k|}
_ZN3rnp11Hash_SHA1CDD2Ev:
   47|   761k|{
   48|   761k|}
_ZN3rnp11Hash_SHA1CD6createEv:
   52|   761k|{
   53|   761k|    return std::unique_ptr<Hash_SHA1CD>(new Hash_SHA1CD());
   54|   761k|}
_ZN3rnp11Hash_SHA1CD3addEPKvm:
   69|  2.64M|{
   70|  2.64M|    SHA1DCUpdate(&ctx_, (const char *) buf, len);
   71|  2.64M|}
_ZN3rnp11Hash_SHA1CD6finishEPh:
   78|   760k|{
   79|   760k|    unsigned char fixed_digest[20];
   80|   760k|    int           res = SHA1DCFinal(fixed_digest, &ctx_);
   81|   760k|    if (res && digest) {
  ------------------
  |  Branch (81:9): [True: 0, False: 760k]
  |  Branch (81:16): [True: 0, False: 0]
  ------------------
   82|       |        /* Show warning only if digest is non-null */
   83|      0|        RNP_LOG("Warning! SHA1 collision detected and mitigated.");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   84|      0|    }
   85|   760k|    if (res) {
  ------------------
  |  Branch (85:9): [True: 0, False: 760k]
  ------------------
   86|      0|        return;
   87|      0|    }
   88|   760k|    if (digest) {
  ------------------
  |  Branch (88:9): [True: 760k, False: 0]
  ------------------
   89|   760k|        memcpy(digest, fixed_digest, 20);
   90|   760k|    }
   91|   760k|}

_ZNK23pgp_kyber_private_key_t11get_encodedEv:
   60|    211|    {
   61|    211|        return Botan::unlock(key_encoded_);
   62|    211|    };
_ZNK23pgp_kyber_private_key_t5paramEv:
   66|    211|    {
   67|    211|        return kyber_mode_;
   68|    211|    }
_ZNK22pgp_kyber_public_key_t11get_encodedEv:
   97|  3.01k|    {
   98|  3.01k|        return key_encoded_;
   99|  3.01k|    };
_ZN22pgp_kyber_public_key_tC2Ev:
   84|  10.8k|    pgp_kyber_public_key_t() = default;

_Z18kyber_privkey_size17kyber_parameter_e:
   33|    239|{
   34|    239|    switch (parameter) {
   35|    188|    case kyber_768:
  ------------------
  |  Branch (35:5): [True: 188, False: 51]
  ------------------
   36|    188|        return 2400;
   37|     51|    case kyber_1024:
  ------------------
  |  Branch (37:5): [True: 51, False: 188]
  ------------------
   38|     51|        return 3168;
   39|      0|    default:
  ------------------
  |  Branch (39:5): [True: 0, False: 239]
  ------------------
   40|      0|        RNP_LOG("invalid parameter given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   41|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   42|    239|    }
   43|    239|}
_Z17kyber_pubkey_size17kyber_parameter_e:
   47|  10.5k|{
   48|  10.5k|    switch (parameter) {
   49|  9.88k|    case kyber_768:
  ------------------
  |  Branch (49:5): [True: 9.88k, False: 636]
  ------------------
   50|  9.88k|        return 1184;
   51|    636|    case kyber_1024:
  ------------------
  |  Branch (51:5): [True: 636, False: 9.88k]
  ------------------
   52|    636|        return 1568;
   53|      0|    default:
  ------------------
  |  Branch (53:5): [True: 0, False: 10.5k]
  ------------------
   54|      0|        RNP_LOG("invalid parameter given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   55|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   56|  10.5k|    }
   57|  10.5k|}
_ZN22pgp_kyber_public_key_tC2EPKhm17kyber_parameter_e:
   90|  4.92k|    : key_encoded_(key_encoded, key_encoded + key_encoded_len), kyber_mode_(mode),
   91|  4.92k|      is_initialized_(true)
   92|  4.92k|{
   93|  4.92k|}
_ZN23pgp_kyber_private_key_tC2EPKhm17kyber_parameter_e:
  104|     91|    : key_encoded_(key_encoded, key_encoded + key_encoded_len), kyber_mode_(mode),
  105|     91|      is_initialized_(true)
  106|     91|{
  107|     91|}
_ZN23pgp_kyber_private_key_tC2ERKNSt3__16vectorIhNS0_9allocatorIhEEEE17kyber_parameter_e:
  111|    211|    : key_encoded_(Botan::secure_vector<uint8_t>(key_encoded.begin(), key_encoded.end())),
  112|    211|      kyber_mode_(mode), is_initialized_(true)
  113|    211|{
  114|    211|}

_ZN30pgp_kyber_ecdh_composite_key_tD2Ev:
   37|  59.3k|{
   38|  59.3k|}
_ZNK30pgp_kyber_ecdh_composite_key_t20initialized_or_throwEv:
   42|  3.01k|{
   43|  3.01k|    if (!is_initialized()) {
  ------------------
  |  Branch (43:9): [True: 0, False: 3.01k]
  ------------------
   44|      0|        RNP_LOG("Trying to use uninitialized kyber-ecdh key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   45|      0|        throw rnp::rnp_exception(RNP_ERROR_GENERIC); /* TODO better return error */
   46|      0|    }
   47|  3.01k|}
_ZN30pgp_kyber_ecdh_composite_key_t23ecdh_curve_privkey_sizeE11pgp_curve_t:
   78|    330|{
   79|    330|    switch (curve) {
   80|    165|    case PGP_CURVE_25519:
  ------------------
  |  Branch (80:5): [True: 165, False: 165]
  ------------------
   81|    165|        return 32;
   82|       |    /* TODO */
   83|       |    // case PGP_CURVE_X448:
   84|       |    //   return 56;
   85|      9|    case PGP_CURVE_NIST_P_256:
  ------------------
  |  Branch (85:5): [True: 9, False: 321]
  ------------------
   86|      9|        return 32;
   87|     10|    case PGP_CURVE_NIST_P_384:
  ------------------
  |  Branch (87:5): [True: 10, False: 320]
  ------------------
   88|     10|        return 48;
   89|     86|    case PGP_CURVE_BP256:
  ------------------
  |  Branch (89:5): [True: 86, False: 244]
  ------------------
   90|     86|        return 32;
   91|     60|    case PGP_CURVE_BP384:
  ------------------
  |  Branch (91:5): [True: 60, False: 270]
  ------------------
   92|     60|        return 48;
   93|      0|    default:
  ------------------
  |  Branch (93:5): [True: 0, False: 330]
  ------------------
   94|      0|        RNP_LOG("invalid curve given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   96|    330|    }
   97|    330|}
_ZN30pgp_kyber_ecdh_composite_key_t22ecdh_curve_pubkey_sizeE11pgp_curve_t:
  101|  15.4k|{
  102|  15.4k|    switch (curve) {
  103|  12.0k|    case PGP_CURVE_25519:
  ------------------
  |  Branch (103:5): [True: 12.0k, False: 3.35k]
  ------------------
  104|  12.0k|        return 32;
  105|       |    /* TODO */
  106|       |    //  case PGP_CURVE_X448:
  107|       |    //    return 56;
  108|    902|    case PGP_CURVE_NIST_P_256:
  ------------------
  |  Branch (108:5): [True: 902, False: 14.5k]
  ------------------
  109|    902|        return 65;
  110|    282|    case PGP_CURVE_NIST_P_384:
  ------------------
  |  Branch (110:5): [True: 282, False: 15.1k]
  ------------------
  111|    282|        return 97;
  112|  1.52k|    case PGP_CURVE_BP256:
  ------------------
  |  Branch (112:5): [True: 1.52k, False: 13.9k]
  ------------------
  113|  1.52k|        return 65;
  114|    647|    case PGP_CURVE_BP384:
  ------------------
  |  Branch (114:5): [True: 647, False: 14.8k]
  ------------------
  115|    647|        return 97;
  116|      0|    default:
  ------------------
  |  Branch (116:5): [True: 0, False: 15.4k]
  ------------------
  117|      0|        RNP_LOG("invalid curve given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  118|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  119|  15.4k|    }
  120|  15.4k|}
_ZN30pgp_kyber_ecdh_composite_key_t18pk_alg_to_kyber_idE16pgp_pubkey_alg_t:
  170|  15.7k|{
  171|  15.7k|    switch (pk_alg) {
  172|  12.2k|    case PGP_PKA_KYBER768_X25519:
  ------------------
  |  Branch (172:5): [True: 12.2k, False: 3.51k]
  ------------------
  173|  12.2k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  12.2k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  174|  13.1k|    case PGP_PKA_KYBER768_P256:
  ------------------
  |  Branch (174:5): [True: 911, False: 14.8k]
  ------------------
  175|  13.1k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  13.1k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  176|  14.7k|    case PGP_PKA_KYBER768_BP256:
  ------------------
  |  Branch (176:5): [True: 1.60k, False: 14.1k]
  ------------------
  177|  14.7k|        return kyber_768;
  178|    707|    case PGP_PKA_KYBER1024_BP384:
  ------------------
  |  Branch (178:5): [True: 707, False: 15.0k]
  ------------------
  179|    707|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    707|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  180|    999|    case PGP_PKA_KYBER1024_P384:
  ------------------
  |  Branch (180:5): [True: 292, False: 15.4k]
  ------------------
  181|    999|        return kyber_1024;
  182|      0|    default:
  ------------------
  |  Branch (182:5): [True: 0, False: 15.7k]
  ------------------
  183|      0|        RNP_LOG("invalid PK alg given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  184|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  185|  15.7k|    }
  186|  15.7k|}
_ZN30pgp_kyber_ecdh_composite_key_t18pk_alg_to_curve_idE16pgp_pubkey_alg_t:
  190|  20.7k|{
  191|  20.7k|    switch (pk_alg) {
  192|  16.3k|    case PGP_PKA_KYBER768_X25519:
  ------------------
  |  Branch (192:5): [True: 16.3k, False: 4.45k]
  ------------------
  193|  16.3k|        return PGP_CURVE_25519;
  194|  1.01k|    case PGP_PKA_KYBER768_P256:
  ------------------
  |  Branch (194:5): [True: 1.01k, False: 19.7k]
  ------------------
  195|  1.01k|        return PGP_CURVE_NIST_P_256;
  196|  2.13k|    case PGP_PKA_KYBER768_BP256:
  ------------------
  |  Branch (196:5): [True: 2.13k, False: 18.6k]
  ------------------
  197|  2.13k|        return PGP_CURVE_BP256;
  198|    929|    case PGP_PKA_KYBER1024_BP384:
  ------------------
  |  Branch (198:5): [True: 929, False: 19.8k]
  ------------------
  199|    929|        return PGP_CURVE_BP384;
  200|    382|    case PGP_PKA_KYBER1024_P384:
  ------------------
  |  Branch (200:5): [True: 382, False: 20.4k]
  ------------------
  201|    382|        return PGP_CURVE_NIST_P_384;
  202|       |    /*case PGP_PKA_KYBER1024_X448:
  203|       |      return ... NOT_IMPLEMENTED*/
  204|      0|    default:
  ------------------
  |  Branch (204:5): [True: 0, False: 20.7k]
  ------------------
  205|      0|        RNP_LOG("invalid PK alg given");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  206|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  207|  20.7k|    }
  208|  20.7k|}
_ZN38pgp_kyber_ecdh_composite_private_key_tC2EPKhm16pgp_pubkey_alg_t:
  212|     91|    : pk_alg_(pk_alg)
  213|     91|{
  214|     91|    parse_component_keys(std::vector<uint8_t>(key_encoded, key_encoded + key_encoded_len));
  215|     91|}
_ZN38pgp_kyber_ecdh_composite_private_key_taSERKS_:
  249|  21.3k|{
  250|  21.3k|    pgp_kyber_ecdh_composite_key_t::operator=(other);
  251|  21.3k|    pk_alg_ = other.pk_alg_;
  252|  21.3k|    if (other.is_initialized() && other.kyber_key_) {
  ------------------
  |  Branch (252:9): [True: 211, False: 21.1k]
  |  Branch (252:35): [True: 211, False: 0]
  ------------------
  253|    211|        kyber_key_ = std::make_unique<pgp_kyber_private_key_t>(
  254|    211|          pgp_kyber_private_key_t(other.kyber_key_->get_encoded(), other.kyber_key_->param()));
  255|    211|    }
  256|  21.3k|    if (other.is_initialized() && other.ecdh_key_) {
  ------------------
  |  Branch (256:9): [True: 211, False: 21.1k]
  |  Branch (256:35): [True: 211, False: 0]
  ------------------
  257|    211|        ecdh_key_ = std::make_unique<ecdh_kem_private_key_t>(ecdh_kem_private_key_t(
  258|    211|          other.ecdh_key_->get_encoded(), other.ecdh_key_->get_curve()));
  259|    211|    }
  260|       |
  261|  21.3k|    return *this;
  262|  21.3k|}
_ZN38pgp_kyber_ecdh_composite_private_key_tC2ERKS_:
  266|  21.2k|{
  267|  21.2k|    *this = other;
  268|  21.2k|}
_ZN38pgp_kyber_ecdh_composite_private_key_t12encoded_sizeE16pgp_pubkey_alg_t:
  272|    239|{
  273|    239|    kyber_parameter_e kyber_param = pk_alg_to_kyber_id(pk_alg);
  274|    239|    pgp_curve_t       curve = pk_alg_to_curve_id(pk_alg);
  275|    239|    return ecdh_curve_privkey_size(curve) + kyber_privkey_size(kyber_param);
  276|    239|}
_ZN38pgp_kyber_ecdh_composite_private_key_t20parse_component_keysENSt3__16vectorIhNS0_9allocatorIhEEEE:
  280|     91|{
  281|     91|    if (key_encoded.size() != encoded_size(pk_alg_)) {
  ------------------
  |  Branch (281:9): [True: 0, False: 91]
  ------------------
  282|      0|        RNP_LOG("ML-KEM composite key format invalid: length mismatch");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  284|      0|    }
  285|       |
  286|     91|    kyber_parameter_e kyber_param = pk_alg_to_kyber_id(pk_alg_);
  287|     91|    pgp_curve_t       ecdh_curve = pk_alg_to_curve_id(pk_alg_);
  288|     91|    size_t            split_at = ecdh_curve_privkey_size(pk_alg_to_curve_id(pk_alg_));
  289|       |
  290|     91|    kyber_key_ = std::make_unique<pgp_kyber_private_key_t>(pgp_kyber_private_key_t(
  291|     91|      key_encoded.data() + split_at, key_encoded.size() - split_at, kyber_param));
  292|     91|    ecdh_key_ = std::make_unique<ecdh_kem_private_key_t>(
  293|     91|      ecdh_kem_private_key_t(key_encoded.data(), split_at, ecdh_curve));
  294|       |
  295|     91|    is_initialized_ = true;
  296|     91|}
_ZN38pgp_kyber_ecdh_composite_private_key_t12secure_clearEv:
  417|  3.09k|{
  418|       |    // private key buffer is stored in a secure_vector and will be securely erased by the
  419|       |    // destructor.
  420|  3.09k|    kyber_key_.reset();
  421|  3.09k|    ecdh_key_.reset();
  422|  3.09k|    is_initialized_ = false;
  423|  3.09k|}
_ZN37pgp_kyber_ecdh_composite_public_key_tC2ERKNSt3__16vectorIhNS0_9allocatorIhEEEE16pgp_pubkey_alg_t:
  447|  4.92k|    : pk_alg_(pk_alg)
  448|  4.92k|{
  449|  4.92k|    parse_component_keys(key_encoded);
  450|  4.92k|}
_ZN37pgp_kyber_ecdh_composite_public_key_t12encoded_sizeE16pgp_pubkey_alg_t:
  469|  10.5k|{
  470|  10.5k|    kyber_parameter_e kyber_param = pk_alg_to_kyber_id(pk_alg);
  471|  10.5k|    pgp_curve_t       curve = pk_alg_to_curve_id(pk_alg);
  472|  10.5k|    return ecdh_curve_pubkey_size(curve) + kyber_pubkey_size(kyber_param);
  473|  10.5k|}
_ZN37pgp_kyber_ecdh_composite_public_key_t20parse_component_keysENSt3__16vectorIhNS0_9allocatorIhEEEE:
  477|  4.92k|{
  478|  4.92k|    if (key_encoded.size() != encoded_size(pk_alg_)) {
  ------------------
  |  Branch (478:9): [True: 0, False: 4.92k]
  ------------------
  479|      0|        RNP_LOG("ML-KEM composite key format invalid: length mismatch");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  480|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  481|      0|    }
  482|       |
  483|  4.92k|    kyber_parameter_e kyber_param = pk_alg_to_kyber_id(pk_alg_);
  484|  4.92k|    pgp_curve_t       ecdh_curve = pk_alg_to_curve_id(pk_alg_);
  485|  4.92k|    size_t            split_at = ecdh_curve_pubkey_size(pk_alg_to_curve_id(pk_alg_));
  486|       |
  487|  4.92k|    kyber_key_ = pgp_kyber_public_key_t(
  488|  4.92k|      key_encoded.data() + split_at, key_encoded.size() - split_at, kyber_param);
  489|  4.92k|    ecdh_key_ = ecdh_kem_public_key_t(key_encoded.data(), split_at, ecdh_curve);
  490|       |
  491|  4.92k|    is_initialized_ = true;
  492|  4.92k|}
_ZNK37pgp_kyber_ecdh_composite_public_key_t11get_encodedEv:
  555|  3.01k|{
  556|  3.01k|    initialized_or_throw();
  557|  3.01k|    std::vector<uint8_t> result;
  558|  3.01k|    std::vector<uint8_t> ecdh_key_encoded = ecdh_key_.get_encoded();
  559|  3.01k|    std::vector<uint8_t> kyber_key_encoded = kyber_key_.get_encoded();
  560|       |
  561|  3.01k|    result.insert(result.end(), std::begin(ecdh_key_encoded), std::end(ecdh_key_encoded));
  562|  3.01k|    result.insert(result.end(), std::begin(kyber_key_encoded), std::end(kyber_key_encoded));
  563|  3.01k|    return result;
  564|  3.01k|};

_ZNK30pgp_kyber_ecdh_composite_key_t14is_initializedEv:
   60|  45.7k|    {
   61|  45.7k|        return is_initialized_;
   62|  45.7k|    }
_ZN38pgp_kyber_ecdh_composite_private_key_tC2Ev:
   97|  5.89k|    pgp_kyber_ecdh_composite_private_key_t() = default;
_ZN37pgp_kyber_ecdh_composite_public_key_tC2Ev:
  139|  5.89k|    pgp_kyber_ecdh_composite_public_key_t() = default;

_Z12secure_clearPvm:
   35|  9.18M|{
   36|  9.18M|    botan_scrub_mem(vp, size);
   37|  9.18M|}
_ZN3rnp10hex_encodeEPKhmPcmNS_9HexFormatE:
   43|   164k|{
   44|   164k|    uint32_t flags = format == HexFormat::Lowercase ? BOTAN_FFI_HEX_LOWER_CASE : 0;
  ------------------
  |  Branch (44:22): [True: 164k, False: 0]
  ------------------
   45|       |
   46|   164k|    if (hex_len < (buf_len * 2 + 1)) {
  ------------------
  |  Branch (46:9): [True: 0, False: 164k]
  ------------------
   47|      0|        return false;
   48|      0|    }
   49|   164k|    hex[buf_len * 2] = '\0';
   50|   164k|    return botan_hex_encode(buf, buf_len, hex, flags) == 0;
   51|   164k|}
_ZN3rnp10hex_decodeEPKcPhm:
   55|   424k|{
   56|   424k|    size_t hexlen = strlen(hex);
   57|       |
   58|       |    /* check for 0x prefix */
   59|   424k|    if ((hexlen >= 2) && (hex[0] == '0') && ((hex[1] == 'x') || (hex[1] == 'X'))) {
  ------------------
  |  Branch (59:9): [True: 424k, False: 0]
  |  Branch (59:26): [True: 424k, False: 0]
  |  Branch (59:46): [True: 424k, False: 0]
  |  Branch (59:65): [True: 0, False: 0]
  ------------------
   60|   424k|        hex += 2;
   61|   424k|        hexlen -= 2;
   62|   424k|    }
   63|   424k|    if (botan_hex_decode(hex, hexlen, buf, &buf_len) != 0) {
  ------------------
  |  Branch (63:9): [True: 0, False: 424k]
  ------------------
   64|      0|        RNP_LOG("Hex decode failed on string: %s", hex);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   65|      0|        return 0;
   66|      0|    }
   67|   424k|    return buf_len;
   68|   424k|}

_ZN3rnp10bin_to_hexEPKhmNS_9HexFormatE:
  173|   164k|{
  174|   164k|    std::string res(len * 2 + 1, '\0');
  175|   164k|    (void) hex_encode(data, len, &res.front(), res.size(), format);
  176|   164k|    res.resize(len * 2);
  177|   164k|    return res;
  178|   164k|}
_ZN3rnp10hex_to_binERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  188|   424k|{
  189|   424k|    if (str.empty() || !is_hex(str)) {
  ------------------
  |  Branch (189:9): [True: 0, False: 424k]
  |  Branch (189:24): [True: 0, False: 424k]
  ------------------
  190|      0|        return {};
  191|      0|    }
  192|       |    /* 1 extra char for case of non-even input , 1 for terminating zero */
  193|   424k|    std::vector<uint8_t> res(str.size() / 2 + 2);
  194|   424k|    size_t               len = hex_decode(str.c_str(), res.data(), res.size());
  195|   424k|    res.resize(len);
  196|   424k|    return res;
  197|   424k|}

_ZNK3pgp3mpi4bitsEv:
   37|   944k|{
   38|   944k|    size_t  bits = 0;
   39|   944k|    size_t  idx = 0;
   40|   944k|    uint8_t bt;
   41|       |
   42|  1.25M|    for (idx = 0; (idx < size()) && !data_[idx]; idx++)
  ------------------
  |  Branch (42:19): [True: 1.17M, False: 87.0k]
  |  Branch (42:37): [True: 312k, False: 857k]
  ------------------
   43|   312k|        ;
   44|       |
   45|   944k|    if (idx < size()) {
  ------------------
  |  Branch (45:9): [True: 857k, False: 87.0k]
  ------------------
   46|  6.41M|        for (bits = (size() - idx - 1) << 3, bt = data_[idx]; bt; bits++, bt = bt >> 1)
  ------------------
  |  Branch (46:63): [True: 5.55M, False: 857k]
  ------------------
   47|  5.55M|            ;
   48|   857k|    }
   49|       |
   50|   944k|    return bits;
   51|   944k|}
_ZNK3pgp3mpi4sizeEv:
   55|  4.11M|{
   56|  4.11M|    return data_.size();
   57|  4.11M|}
_ZN3pgp3mpi4dataEv:
   61|  1.11M|{
   62|  1.11M|    return data_.data();
   63|  1.11M|}
_ZNK3pgp3mpi4dataEv:
   67|   672k|{
   68|   672k|    return data_.data();
   69|   672k|}
_ZN3pgp3mpiixEm:
   95|  70.7k|{
   96|  70.7k|    return data_.at(idx);
   97|  70.7k|}
_ZNK3pgp3mpiixEm:
  101|  2.54M|{
  102|  2.54M|    return data_.at(idx);
  103|  2.54M|}
_ZN3pgp3mpi6assignEPKhm:
  107|   282k|{
  108|   282k|    data_.assign(val, val + size);
  109|   282k|}
_ZNK3pgp3mpi4copyEPh:
  113|   136k|{
  114|   136k|    memcpy(dst, data_.data(), data_.size());
  115|   136k|}
_ZN3pgp3mpi6resizeEmh:
  119|  1.04M|{
  120|  1.04M|    data_.resize(size, fill);
  121|  1.04M|}
_ZN3pgp3mpi6forgetEv:
  125|  3.73M|{
  126|  3.73M|    secure_clear(data_.data(), data_.size());
  127|  3.73M|    data_.resize(0);
  128|  3.73M|}

_ZN3rnp3RNGC2ENS0_4TypeE:
   34|  48.1k|{
   35|  48.1k|    if (botan_rng_init(&botan_rng, type == Type::DRBG ? "user" : NULL)) {
  ------------------
  |  Branch (35:9): [True: 0, False: 48.1k]
  |  Branch (35:36): [True: 48.1k, False: 0]
  ------------------
   36|      0|        throw rnp::rnp_exception(RNP_ERROR_RNG);
   37|      0|    }
   38|  48.1k|#if defined(ENABLE_CRYPTO_REFRESH) || defined(ENABLE_PQC)
   39|  48.1k|    if (type == Type::DRBG) {
  ------------------
  |  Branch (39:9): [True: 48.1k, False: 0]
  ------------------
   40|  48.1k|        botan_rng_obj.reset(new Botan::AutoSeeded_RNG);
   41|  48.1k|    } else {
   42|      0|        botan_rng_obj.reset(new Botan::System_RNG);
   43|      0|    }
   44|  48.1k|#endif
   45|  48.1k|}
_ZN3rnp3RNGD2Ev:
   48|  48.1k|{
   49|  48.1k|    (void) botan_rng_destroy(botan_rng);
   50|  48.1k|}

_ZNK3pgp3rsa3Key12verify_pkcs1ERKNS0_9SignatureE14pgp_hash_alg_tRKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
  115|  21.4k|{
  116|  21.4k|    rnp::botan::Pubkey rsa_key;
  117|  21.4k|    if (!load_public_key(rsa_key, *this)) {
  ------------------
  |  Branch (117:9): [True: 783, False: 20.6k]
  ------------------
  118|    783|        RNP_LOG("failed to load key");
  ------------------
  |  |   76|    783|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    783|    do {                                                                                 \
  |  |  |  |   69|    783|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 783, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    783|            break;                                                                       \
  |  |  |  |   71|    783|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  119|    783|        return RNP_ERROR_OUT_OF_MEMORY;
  120|    783|    }
  121|       |
  122|  20.6k|    char pad[64] = {0};
  123|  20.6k|    snprintf(
  124|  20.6k|      pad, sizeof(pad), "EMSA-PKCS1-v1_5(Raw,%s)", rnp::Hash_Botan::name_backend(hash_alg));
  125|       |
  126|  20.6k|    rnp::botan::op::Verify verify_op;
  127|  20.6k|    if (botan_pk_op_verify_create(&verify_op.get(), rsa_key.get(), pad, 0) ||
  ------------------
  |  Branch (127:9): [True: 0, False: 20.6k]
  ------------------
  128|  20.6k|        botan_pk_op_verify_update(verify_op.get(), hash.data(), hash.size()) ||
  ------------------
  |  Branch (128:9): [True: 0, False: 20.6k]
  ------------------
  129|  20.6k|        botan_pk_op_verify_finish(verify_op.get(), sig.s.data(), sig.s.size())) {
  ------------------
  |  Branch (129:9): [True: 20.1k, False: 536]
  ------------------
  130|  20.1k|        return RNP_ERROR_SIGNATURE_INVALID;
  131|  20.1k|    }
  132|    536|    return RNP_SUCCESS;
  133|  20.6k|}
rsa.cpp:_ZN3pgp3rsaL15load_public_keyERN3rnp5botan6PubkeyERKNS0_3KeyE:
   41|  21.4k|{
   42|  21.4k|    rnp::bn n(key.n);
   43|  21.4k|    rnp::bn e(key.e);
   44|       |
   45|  21.4k|    if (!n || !e) {
  ------------------
  |  Branch (45:9): [True: 0, False: 21.4k]
  |  Branch (45:15): [True: 0, False: 21.4k]
  ------------------
   46|      0|        RNP_LOG("out of memory");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   47|      0|        return false;
   48|      0|    }
   49|  21.4k|    return !botan_pubkey_load_rsa(&bkey.get(), n.get(), e.get());
   50|  21.4k|}

_ZN3pgp3rsa3Key12clear_secretEv:
   61|   758k|    {
   62|   758k|        d.forget();
   63|   758k|        p.forget();
   64|   758k|        q.forget();
   65|   758k|        u.forget();
   66|   758k|    }
_ZN3pgp3rsa3KeyD2Ev:
   69|   664k|    {
   70|   664k|        clear_secret();
   71|   664k|    }

sha1_compression_states:
  465|  1.70M|{
  466|  1.70M|    uint32_t a = ihv[0], b = ihv[1], c = ihv[2], d = ihv[3], e = ihv[4];
  467|  1.70M|    uint32_t temp;
  468|       |
  469|       |#ifdef DOSTORESTATE00
  470|       |    SHA1_STORE_STATE(0)
  471|       |#endif
  472|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 0, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  473|       |
  474|       |#ifdef DOSTORESTATE01
  475|       |    SHA1_STORE_STATE(1)
  476|       |#endif
  477|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e, a, b, c, d, m, W, 1, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  478|       |
  479|       |#ifdef DOSTORESTATE02
  480|       |    SHA1_STORE_STATE(2)
  481|       |#endif
  482|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d, e, a, b, c, m, W, 2, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  483|       |
  484|       |#ifdef DOSTORESTATE03
  485|       |    SHA1_STORE_STATE(3)
  486|       |#endif
  487|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c, d, e, a, b, m, W, 3, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  488|       |
  489|       |#ifdef DOSTORESTATE04
  490|       |    SHA1_STORE_STATE(4)
  491|       |#endif
  492|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b, c, d, e, a, m, W, 4, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  493|       |
  494|       |#ifdef DOSTORESTATE05
  495|       |    SHA1_STORE_STATE(5)
  496|       |#endif
  497|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 5, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  498|       |
  499|       |#ifdef DOSTORESTATE06
  500|       |    SHA1_STORE_STATE(6)
  501|       |#endif
  502|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e, a, b, c, d, m, W, 6, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  503|       |
  504|       |#ifdef DOSTORESTATE07
  505|       |    SHA1_STORE_STATE(7)
  506|       |#endif
  507|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d, e, a, b, c, m, W, 7, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  508|       |
  509|       |#ifdef DOSTORESTATE08
  510|       |    SHA1_STORE_STATE(8)
  511|       |#endif
  512|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c, d, e, a, b, m, W, 8, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  513|       |
  514|       |#ifdef DOSTORESTATE09
  515|       |    SHA1_STORE_STATE(9)
  516|       |#endif
  517|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b, c, d, e, a, m, W, 9, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  518|       |
  519|       |#ifdef DOSTORESTATE10
  520|       |    SHA1_STORE_STATE(10)
  521|       |#endif
  522|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 10, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  523|       |
  524|       |#ifdef DOSTORESTATE11
  525|       |    SHA1_STORE_STATE(11)
  526|       |#endif
  527|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(e, a, b, c, d, m, W, 11, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  528|       |
  529|       |#ifdef DOSTORESTATE12
  530|       |    SHA1_STORE_STATE(12)
  531|       |#endif
  532|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(d, e, a, b, c, m, W, 12, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  533|       |
  534|       |#ifdef DOSTORESTATE13
  535|       |    SHA1_STORE_STATE(13)
  536|       |#endif
  537|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(c, d, e, a, b, m, W, 13, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  538|       |
  539|       |#ifdef DOSTORESTATE14
  540|       |    SHA1_STORE_STATE(14)
  541|       |#endif
  542|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(b, c, d, e, a, m, W, 14, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  543|       |
  544|       |#ifdef DOSTORESTATE15
  545|       |    SHA1_STORE_STATE(15)
  546|       |#endif
  547|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_LOAD(a, b, c, d, e, m, W, 15, temp);
  ------------------
  |  |  208|  1.70M|    {                                                                    \
  |  |  209|  1.70M|        sha1_load(m, t, temp);                                           \
  |  |  ------------------
  |  |  |  |  152|  1.70M|    {                         \
  |  |  |  |  153|  1.70M|        temp = m[t];          \
  |  |  |  |  154|  1.70M|        sha1_bswap32(temp);   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  138|  1.70M|    {                                                        \
  |  |  |  |  |  |  139|  1.70M|        x = ((x << 8) & 0xFF00FF00) | ((x >> 8) & 0xFF00FF); \
  |  |  |  |  |  |  140|  1.70M|        x = (x << 16) | (x >> 16);                           \
  |  |  |  |  |  |  141|  1.70M|    }
  |  |  |  |  ------------------
  |  |  |  |  155|  1.70M|    }
  |  |  ------------------
  |  |  210|  1.70M|        sha1_store(W, t, temp);                                          \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  211|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;   \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  212|  1.70M|        b = rotate_left(b, 30);                                          \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  213|  1.70M|    }
  ------------------
  548|       |
  549|       |#ifdef DOSTORESTATE16
  550|       |    SHA1_STORE_STATE(16)
  551|       |#endif
  552|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(e, a, b, c, d, W, 16, temp);
  ------------------
  |  |  216|  1.70M|    {                                                                   \
  |  |  217|  1.70M|        temp = sha1_mix(W, t);                                          \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  218|  1.70M|        sha1_store(W, t, temp);                                         \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  219|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  220|  1.70M|        b = rotate_left(b, 30);                                         \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  221|  1.70M|    }
  ------------------
  553|       |
  554|       |#ifdef DOSTORESTATE17
  555|       |    SHA1_STORE_STATE(17)
  556|       |#endif
  557|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(d, e, a, b, c, W, 17, temp);
  ------------------
  |  |  216|  1.70M|    {                                                                   \
  |  |  217|  1.70M|        temp = sha1_mix(W, t);                                          \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  218|  1.70M|        sha1_store(W, t, temp);                                         \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  219|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  220|  1.70M|        b = rotate_left(b, 30);                                         \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  221|  1.70M|    }
  ------------------
  558|       |
  559|       |#ifdef DOSTORESTATE18
  560|       |    SHA1_STORE_STATE(18)
  561|       |#endif
  562|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(c, d, e, a, b, W, 18, temp);
  ------------------
  |  |  216|  1.70M|    {                                                                   \
  |  |  217|  1.70M|        temp = sha1_mix(W, t);                                          \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  218|  1.70M|        sha1_store(W, t, temp);                                         \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  219|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  220|  1.70M|        b = rotate_left(b, 30);                                         \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  221|  1.70M|    }
  ------------------
  563|       |
  564|       |#ifdef DOSTORESTATE19
  565|       |    SHA1_STORE_STATE(19)
  566|       |#endif
  567|  1.70M|    SHA1COMPRESS_FULL_ROUND1_STEP_EXPAND(b, c, d, e, a, W, 19, temp);
  ------------------
  |  |  216|  1.70M|    {                                                                   \
  |  |  217|  1.70M|        temp = sha1_mix(W, t);                                          \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  218|  1.70M|        sha1_store(W, t, temp);                                         \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  219|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999;  \
  |  |  ------------------
  |  |  |  |  160|  1.70M|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  220|  1.70M|        b = rotate_left(b, 30);                                         \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  221|  1.70M|    }
  ------------------
  568|       |
  569|       |#ifdef DOSTORESTATE20
  570|       |    SHA1_STORE_STATE(20)
  571|       |#endif
  572|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 20, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  573|       |
  574|       |#ifdef DOSTORESTATE21
  575|       |    SHA1_STORE_STATE(21)
  576|       |#endif
  577|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 21, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  578|       |
  579|       |#ifdef DOSTORESTATE22
  580|       |    SHA1_STORE_STATE(22)
  581|       |#endif
  582|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 22, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  583|       |
  584|       |#ifdef DOSTORESTATE23
  585|       |    SHA1_STORE_STATE(23)
  586|       |#endif
  587|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 23, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  588|       |
  589|       |#ifdef DOSTORESTATE24
  590|       |    SHA1_STORE_STATE(24)
  591|       |#endif
  592|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 24, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  593|       |
  594|       |#ifdef DOSTORESTATE25
  595|       |    SHA1_STORE_STATE(25)
  596|       |#endif
  597|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 25, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  598|       |
  599|       |#ifdef DOSTORESTATE26
  600|       |    SHA1_STORE_STATE(26)
  601|       |#endif
  602|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 26, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  603|       |
  604|       |#ifdef DOSTORESTATE27
  605|       |    SHA1_STORE_STATE(27)
  606|       |#endif
  607|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 27, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  608|       |
  609|       |#ifdef DOSTORESTATE28
  610|       |    SHA1_STORE_STATE(28)
  611|       |#endif
  612|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 28, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  613|       |
  614|       |#ifdef DOSTORESTATE29
  615|       |    SHA1_STORE_STATE(29)
  616|       |#endif
  617|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 29, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  618|       |
  619|       |#ifdef DOSTORESTATE30
  620|       |    SHA1_STORE_STATE(30)
  621|       |#endif
  622|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 30, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  623|       |
  624|       |#ifdef DOSTORESTATE31
  625|       |    SHA1_STORE_STATE(31)
  626|       |#endif
  627|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 31, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  628|       |
  629|       |#ifdef DOSTORESTATE32
  630|       |    SHA1_STORE_STATE(32)
  631|       |#endif
  632|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 32, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  633|       |
  634|       |#ifdef DOSTORESTATE33
  635|       |    SHA1_STORE_STATE(33)
  636|       |#endif
  637|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 33, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  638|       |
  639|       |#ifdef DOSTORESTATE34
  640|       |    SHA1_STORE_STATE(34)
  641|       |#endif
  642|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 34, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  643|       |
  644|       |#ifdef DOSTORESTATE35
  645|       |    SHA1_STORE_STATE(35)
  646|       |#endif
  647|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(a, b, c, d, e, W, 35, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  648|       |
  649|       |#ifdef DOSTORESTATE36
  650|       |    SHA1_STORE_STATE(36)
  651|       |#endif
  652|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(e, a, b, c, d, W, 36, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  653|       |
  654|       |#ifdef DOSTORESTATE37
  655|       |    SHA1_STORE_STATE(37)
  656|       |#endif
  657|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(d, e, a, b, c, W, 37, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  658|       |
  659|       |#ifdef DOSTORESTATE38
  660|       |    SHA1_STORE_STATE(38)
  661|       |#endif
  662|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(c, d, e, a, b, W, 38, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  663|       |
  664|       |#ifdef DOSTORESTATE39
  665|       |    SHA1_STORE_STATE(39)
  666|       |#endif
  667|  1.70M|    SHA1COMPRESS_FULL_ROUND2_STEP(b, c, d, e, a, W, 39, temp);
  ------------------
  |  |  224|  1.70M|    {                                                                  \
  |  |  225|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  226|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  227|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1; \
  |  |  ------------------
  |  |  |  |  161|  1.70M|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  228|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  229|  1.70M|    }
  ------------------
  668|       |
  669|       |#ifdef DOSTORESTATE40
  670|       |    SHA1_STORE_STATE(40)
  671|       |#endif
  672|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 40, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  673|       |
  674|       |#ifdef DOSTORESTATE41
  675|       |    SHA1_STORE_STATE(41)
  676|       |#endif
  677|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 41, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  678|       |
  679|       |#ifdef DOSTORESTATE42
  680|       |    SHA1_STORE_STATE(42)
  681|       |#endif
  682|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 42, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  683|       |
  684|       |#ifdef DOSTORESTATE43
  685|       |    SHA1_STORE_STATE(43)
  686|       |#endif
  687|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 43, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  688|       |
  689|       |#ifdef DOSTORESTATE44
  690|       |    SHA1_STORE_STATE(44)
  691|       |#endif
  692|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 44, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  693|       |
  694|       |#ifdef DOSTORESTATE45
  695|       |    SHA1_STORE_STATE(45)
  696|       |#endif
  697|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 45, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  698|       |
  699|       |#ifdef DOSTORESTATE46
  700|       |    SHA1_STORE_STATE(46)
  701|       |#endif
  702|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 46, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  703|       |
  704|       |#ifdef DOSTORESTATE47
  705|       |    SHA1_STORE_STATE(47)
  706|       |#endif
  707|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 47, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  708|       |
  709|       |#ifdef DOSTORESTATE48
  710|       |    SHA1_STORE_STATE(48)
  711|       |#endif
  712|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 48, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  713|       |
  714|       |#ifdef DOSTORESTATE49
  715|       |    SHA1_STORE_STATE(49)
  716|       |#endif
  717|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 49, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  718|       |
  719|       |#ifdef DOSTORESTATE50
  720|       |    SHA1_STORE_STATE(50)
  721|       |#endif
  722|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 50, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  723|       |
  724|       |#ifdef DOSTORESTATE51
  725|       |    SHA1_STORE_STATE(51)
  726|       |#endif
  727|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 51, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  728|       |
  729|       |#ifdef DOSTORESTATE52
  730|       |    SHA1_STORE_STATE(52)
  731|       |#endif
  732|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 52, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  733|       |
  734|       |#ifdef DOSTORESTATE53
  735|       |    SHA1_STORE_STATE(53)
  736|       |#endif
  737|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 53, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  738|       |
  739|       |#ifdef DOSTORESTATE54
  740|       |    SHA1_STORE_STATE(54)
  741|       |#endif
  742|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 54, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  743|       |
  744|       |#ifdef DOSTORESTATE55
  745|       |    SHA1_STORE_STATE(55)
  746|       |#endif
  747|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(a, b, c, d, e, W, 55, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  748|       |
  749|       |#ifdef DOSTORESTATE56
  750|       |    SHA1_STORE_STATE(56)
  751|       |#endif
  752|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(e, a, b, c, d, W, 56, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  753|       |
  754|       |#ifdef DOSTORESTATE57
  755|       |    SHA1_STORE_STATE(57)
  756|       |#endif
  757|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(d, e, a, b, c, W, 57, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  758|       |
  759|  1.70M|#ifdef DOSTORESTATE58
  760|  1.70M|    SHA1_STORE_STATE(58)
  ------------------
  |  |  248|  1.70M|    states[i][0] = a;       \
  |  |  249|  1.70M|    states[i][1] = b;       \
  |  |  250|  1.70M|    states[i][2] = c;       \
  |  |  251|  1.70M|    states[i][3] = d;       \
  |  |  252|  1.70M|    states[i][4] = e;
  ------------------
  761|  1.70M|#endif
  762|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(c, d, e, a, b, W, 58, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  763|       |
  764|       |#ifdef DOSTORESTATE59
  765|       |    SHA1_STORE_STATE(59)
  766|       |#endif
  767|  1.70M|    SHA1COMPRESS_FULL_ROUND3_STEP(b, c, d, e, a, W, 59, temp);
  ------------------
  |  |  232|  1.70M|    {                                                                  \
  |  |  233|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  234|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  235|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC; \
  |  |  ------------------
  |  |  |  |  162|  1.70M|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  236|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  237|  1.70M|    }
  ------------------
  768|       |
  769|       |#ifdef DOSTORESTATE60
  770|       |    SHA1_STORE_STATE(60)
  771|       |#endif
  772|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 60, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  773|       |
  774|       |#ifdef DOSTORESTATE61
  775|       |    SHA1_STORE_STATE(61)
  776|       |#endif
  777|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 61, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  778|       |
  779|       |#ifdef DOSTORESTATE62
  780|       |    SHA1_STORE_STATE(62)
  781|       |#endif
  782|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 62, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  783|       |
  784|       |#ifdef DOSTORESTATE63
  785|       |    SHA1_STORE_STATE(63)
  786|       |#endif
  787|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 63, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  788|       |
  789|       |#ifdef DOSTORESTATE64
  790|       |    SHA1_STORE_STATE(64)
  791|       |#endif
  792|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 64, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  793|       |
  794|  1.70M|#ifdef DOSTORESTATE65
  795|  1.70M|    SHA1_STORE_STATE(65)
  ------------------
  |  |  248|  1.70M|    states[i][0] = a;       \
  |  |  249|  1.70M|    states[i][1] = b;       \
  |  |  250|  1.70M|    states[i][2] = c;       \
  |  |  251|  1.70M|    states[i][3] = d;       \
  |  |  252|  1.70M|    states[i][4] = e;
  ------------------
  796|  1.70M|#endif
  797|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 65, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  798|       |
  799|       |#ifdef DOSTORESTATE66
  800|       |    SHA1_STORE_STATE(66)
  801|       |#endif
  802|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 66, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  803|       |
  804|       |#ifdef DOSTORESTATE67
  805|       |    SHA1_STORE_STATE(67)
  806|       |#endif
  807|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 67, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  808|       |
  809|       |#ifdef DOSTORESTATE68
  810|       |    SHA1_STORE_STATE(68)
  811|       |#endif
  812|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 68, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  813|       |
  814|       |#ifdef DOSTORESTATE69
  815|       |    SHA1_STORE_STATE(69)
  816|       |#endif
  817|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 69, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  818|       |
  819|       |#ifdef DOSTORESTATE70
  820|       |    SHA1_STORE_STATE(70)
  821|       |#endif
  822|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 70, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  823|       |
  824|       |#ifdef DOSTORESTATE71
  825|       |    SHA1_STORE_STATE(71)
  826|       |#endif
  827|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 71, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  828|       |
  829|       |#ifdef DOSTORESTATE72
  830|       |    SHA1_STORE_STATE(72)
  831|       |#endif
  832|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 72, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  833|       |
  834|       |#ifdef DOSTORESTATE73
  835|       |    SHA1_STORE_STATE(73)
  836|       |#endif
  837|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 73, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  838|       |
  839|       |#ifdef DOSTORESTATE74
  840|       |    SHA1_STORE_STATE(74)
  841|       |#endif
  842|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 74, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  843|       |
  844|       |#ifdef DOSTORESTATE75
  845|       |    SHA1_STORE_STATE(75)
  846|       |#endif
  847|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(a, b, c, d, e, W, 75, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  848|       |
  849|       |#ifdef DOSTORESTATE76
  850|       |    SHA1_STORE_STATE(76)
  851|       |#endif
  852|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(e, a, b, c, d, W, 76, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  853|       |
  854|       |#ifdef DOSTORESTATE77
  855|       |    SHA1_STORE_STATE(77)
  856|       |#endif
  857|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(d, e, a, b, c, W, 77, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  858|       |
  859|       |#ifdef DOSTORESTATE78
  860|       |    SHA1_STORE_STATE(78)
  861|       |#endif
  862|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(c, d, e, a, b, W, 78, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  863|       |
  864|       |#ifdef DOSTORESTATE79
  865|       |    SHA1_STORE_STATE(79)
  866|       |#endif
  867|  1.70M|    SHA1COMPRESS_FULL_ROUND4_STEP(b, c, d, e, a, W, 79, temp);
  ------------------
  |  |  240|  1.70M|    {                                                                  \
  |  |  241|  1.70M|        temp = sha1_mix(W, t);                                         \
  |  |  ------------------
  |  |  |  |  143|  1.70M|#define sha1_mix(W, t) (rotate_left(W[t - 3] ^ W[t - 8] ^ W[t - 14] ^ W[t - 16], 1))
  |  |  |  |  ------------------
  |  |  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  242|  1.70M|        sha1_store(W, t, temp);                                        \
  |  |  ------------------
  |  |  |  |  158|  1.70M|#define sha1_store(W, t, x) *(volatile uint32_t *) &W[t] = x
  |  |  ------------------
  |  |  243|  1.70M|        e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += temp + rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6; \
  |  |  ------------------
  |  |  |  |  163|  1.70M|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  244|  1.70M|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  1.70M|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  245|  1.70M|    }
  ------------------
  868|       |
  869|  1.70M|    ihv[0] += a;
  870|  1.70M|    ihv[1] += b;
  871|  1.70M|    ihv[2] += c;
  872|  1.70M|    ihv[3] += d;
  873|  1.70M|    ihv[4] += e;
  874|  1.70M|}
SHA1DCInit:
 2019|   761k|{
 2020|   761k|    ctx->total = 0;
 2021|   761k|    ctx->ihv[0] = 0x67452301;
 2022|   761k|    ctx->ihv[1] = 0xEFCDAB89;
 2023|   761k|    ctx->ihv[2] = 0x98BADCFE;
 2024|   761k|    ctx->ihv[3] = 0x10325476;
 2025|   761k|    ctx->ihv[4] = 0xC3D2E1F0;
 2026|   761k|    ctx->found_collision = 0;
 2027|   761k|    ctx->safe_hash = SHA1DC_INIT_SAFE_HASH_DEFAULT;
  ------------------
  |  |   23|   761k|#define SHA1DC_INIT_SAFE_HASH_DEFAULT 1
  ------------------
 2028|   761k|    ctx->ubc_check = 1;
 2029|   761k|    ctx->detect_coll = 1;
 2030|   761k|    ctx->reduced_round_coll = 0;
 2031|       |    ctx->callback = NULL;
 2032|   761k|}
SHA1DCUpdate:
 2078|  3.40M|{
 2079|  3.40M|    unsigned left, fill;
 2080|       |
 2081|  3.40M|    if (len == 0)
  ------------------
  |  Branch (2081:9): [True: 306, False: 3.40M]
  ------------------
 2082|    306|        return;
 2083|       |
 2084|  3.40M|    left = ctx->total & 63;
 2085|  3.40M|    fill = 64 - left;
 2086|       |
 2087|  3.40M|    if (left && len >= fill) {
  ------------------
  |  Branch (2087:9): [True: 2.61M, False: 797k]
  |  Branch (2087:17): [True: 527k, False: 2.08M]
  ------------------
 2088|   527k|        ctx->total += fill;
 2089|   527k|        memcpy(ctx->buffer + left, buf, fill);
 2090|   527k|        sha1_process(ctx, (uint32_t *) (ctx->buffer));
 2091|   527k|        buf += fill;
 2092|   527k|        len -= fill;
 2093|   527k|        left = 0;
 2094|   527k|    }
 2095|  3.82M|    while (len >= 64) {
  ------------------
  |  Branch (2095:12): [True: 418k, False: 3.40M]
  ------------------
 2096|   418k|        ctx->total += 64;
 2097|       |
 2098|   418k|#if defined(SHA1DC_ALLOW_UNALIGNED_ACCESS)
 2099|   418k|        sha1_process(ctx, (uint32_t *) (buf));
 2100|       |#else
 2101|       |        memcpy(ctx->buffer, buf, 64);
 2102|       |        sha1_process(ctx, (uint32_t *) (ctx->buffer));
 2103|       |#endif /* defined(SHA1DC_ALLOW_UNALIGNED_ACCESS) */
 2104|   418k|        buf += 64;
 2105|   418k|        len -= 64;
 2106|   418k|    }
 2107|  3.40M|    if (len > 0) {
  ------------------
  |  Branch (2107:9): [True: 3.37M, False: 36.7k]
  ------------------
 2108|  3.37M|        ctx->total += len;
 2109|  3.37M|        memcpy(ctx->buffer + left, buf, len);
 2110|  3.37M|    }
 2111|  3.40M|}
SHA1DCFinal:
 2120|   760k|{
 2121|   760k|    uint32_t last = ctx->total & 63;
 2122|   760k|    uint32_t padn = (last < 56) ? (56 - last) : (120 - last);
  ------------------
  |  Branch (2122:21): [True: 731k, False: 28.5k]
  ------------------
 2123|   760k|    uint64_t total;
 2124|   760k|    SHA1DCUpdate(ctx, (const char *) (sha1_padding), padn);
 2125|       |
 2126|   760k|    total = ctx->total - padn;
 2127|   760k|    total <<= 3;
 2128|   760k|    ctx->buffer[56] = (unsigned char) (total >> 56);
 2129|   760k|    ctx->buffer[57] = (unsigned char) (total >> 48);
 2130|   760k|    ctx->buffer[58] = (unsigned char) (total >> 40);
 2131|   760k|    ctx->buffer[59] = (unsigned char) (total >> 32);
 2132|   760k|    ctx->buffer[60] = (unsigned char) (total >> 24);
 2133|   760k|    ctx->buffer[61] = (unsigned char) (total >> 16);
 2134|   760k|    ctx->buffer[62] = (unsigned char) (total >> 8);
 2135|   760k|    ctx->buffer[63] = (unsigned char) (total);
 2136|   760k|    sha1_process(ctx, (uint32_t *) (ctx->buffer));
 2137|   760k|    output[0] = (unsigned char) (ctx->ihv[0] >> 24);
 2138|   760k|    output[1] = (unsigned char) (ctx->ihv[0] >> 16);
 2139|   760k|    output[2] = (unsigned char) (ctx->ihv[0] >> 8);
 2140|   760k|    output[3] = (unsigned char) (ctx->ihv[0]);
 2141|   760k|    output[4] = (unsigned char) (ctx->ihv[1] >> 24);
 2142|   760k|    output[5] = (unsigned char) (ctx->ihv[1] >> 16);
 2143|   760k|    output[6] = (unsigned char) (ctx->ihv[1] >> 8);
 2144|   760k|    output[7] = (unsigned char) (ctx->ihv[1]);
 2145|   760k|    output[8] = (unsigned char) (ctx->ihv[2] >> 24);
 2146|   760k|    output[9] = (unsigned char) (ctx->ihv[2] >> 16);
 2147|   760k|    output[10] = (unsigned char) (ctx->ihv[2] >> 8);
 2148|   760k|    output[11] = (unsigned char) (ctx->ihv[2]);
 2149|   760k|    output[12] = (unsigned char) (ctx->ihv[3] >> 24);
 2150|   760k|    output[13] = (unsigned char) (ctx->ihv[3] >> 16);
 2151|   760k|    output[14] = (unsigned char) (ctx->ihv[3] >> 8);
 2152|   760k|    output[15] = (unsigned char) (ctx->ihv[3]);
 2153|   760k|    output[16] = (unsigned char) (ctx->ihv[4] >> 24);
 2154|   760k|    output[17] = (unsigned char) (ctx->ihv[4] >> 16);
 2155|   760k|    output[18] = (unsigned char) (ctx->ihv[4] >> 8);
 2156|   760k|    output[19] = (unsigned char) (ctx->ihv[4]);
 2157|   760k|    return ctx->found_collision;
 2158|   760k|}
sha1.c:sha1_process:
 1963|  1.70M|{
 1964|  1.70M|    unsigned i, j;
 1965|  1.70M|    uint32_t ubc_dv_mask[DVMASKSIZE] = {0xFFFFFFFF};
 1966|  1.70M|    uint32_t ihvtmp[5];
 1967|       |
 1968|  1.70M|    ctx->ihv1[0] = ctx->ihv[0];
 1969|  1.70M|    ctx->ihv1[1] = ctx->ihv[1];
 1970|  1.70M|    ctx->ihv1[2] = ctx->ihv[2];
 1971|  1.70M|    ctx->ihv1[3] = ctx->ihv[3];
 1972|  1.70M|    ctx->ihv1[4] = ctx->ihv[4];
 1973|       |
 1974|  1.70M|    sha1_compression_states(ctx->ihv, block, ctx->m1, ctx->states);
 1975|       |
 1976|  1.70M|    if (ctx->detect_coll) {
  ------------------
  |  Branch (1976:9): [True: 1.70M, False: 0]
  ------------------
 1977|  1.70M|        if (ctx->ubc_check) {
  ------------------
  |  Branch (1977:13): [True: 1.70M, False: 0]
  ------------------
 1978|  1.70M|            ubc_check(ctx->m1, ubc_dv_mask);
 1979|  1.70M|        }
 1980|       |
 1981|  1.70M|        if (ubc_dv_mask[0] != 0) {
  ------------------
  |  Branch (1981:13): [True: 96.4k, False: 1.61M]
  ------------------
 1982|  3.18M|            for (i = 0; sha1_dvs[i].dvType != 0; ++i) {
  ------------------
  |  Branch (1982:25): [True: 3.08M, False: 96.4k]
  ------------------
 1983|  3.08M|                if (ubc_dv_mask[0] & ((uint32_t)(1) << sha1_dvs[i].maskb)) {
  ------------------
  |  Branch (1983:21): [True: 107k, False: 2.97M]
  ------------------
 1984|  8.74M|                    for (j = 0; j < 80; ++j)
  ------------------
  |  Branch (1984:33): [True: 8.63M, False: 107k]
  ------------------
 1985|  8.63M|                        ctx->m2[j] = ctx->m1[j] ^ sha1_dvs[i].dm[j];
 1986|       |
 1987|   107k|                    sha1_recompression_step(sha1_dvs[i].testt,
 1988|   107k|                                            ctx->ihv2,
 1989|   107k|                                            ihvtmp,
 1990|   107k|                                            ctx->m2,
 1991|   107k|                                            ctx->states[sha1_dvs[i].testt]);
 1992|       |
 1993|       |                    /* to verify SHA-1 collision detection code with collisions for
 1994|       |                     * reduced-step SHA-1 */
 1995|   107k|                    if ((0 == ((ihvtmp[0] ^ ctx->ihv[0]) | (ihvtmp[1] ^ ctx->ihv[1]) |
  ------------------
  |  Branch (1995:25): [True: 0, False: 107k]
  ------------------
 1996|   107k|                               (ihvtmp[2] ^ ctx->ihv[2]) | (ihvtmp[3] ^ ctx->ihv[3]) |
 1997|   107k|                               (ihvtmp[4] ^ ctx->ihv[4]))) ||
 1998|   107k|                        (ctx->reduced_round_coll &&
  ------------------
  |  Branch (1998:26): [True: 0, False: 107k]
  ------------------
 1999|      0|                         0 == ((ctx->ihv1[0] ^ ctx->ihv2[0]) | (ctx->ihv1[1] ^ ctx->ihv2[1]) |
  ------------------
  |  Branch (1999:26): [True: 0, False: 0]
  ------------------
 2000|      0|                               (ctx->ihv1[2] ^ ctx->ihv2[2]) | (ctx->ihv1[3] ^ ctx->ihv2[3]) |
 2001|      0|                               (ctx->ihv1[4] ^ ctx->ihv2[4])))) {
 2002|      0|                        ctx->found_collision = 1;
 2003|       |
 2004|      0|                        if (ctx->safe_hash) {
  ------------------
  |  Branch (2004:29): [True: 0, False: 0]
  ------------------
 2005|      0|                            sha1_compression_W(ctx->ihv, ctx->m1);
 2006|      0|                            sha1_compression_W(ctx->ihv, ctx->m1);
 2007|      0|                        }
 2008|       |
 2009|      0|                        break;
 2010|      0|                    }
 2011|   107k|                }
 2012|  3.08M|            }
 2013|  96.4k|        }
 2014|  1.70M|    }
 2015|  1.70M|}
sha1.c:sha1_recompression_step:
 1554|   107k|{
 1555|   107k|    switch (step) {
 1556|       |#ifdef DOSTORESTATE0
 1557|       |    case 0:
 1558|       |        sha1recompress_fast_0(ihvin, ihvout, me2, state);
 1559|       |        break;
 1560|       |#endif
 1561|       |#ifdef DOSTORESTATE1
 1562|       |    case 1:
 1563|       |        sha1recompress_fast_1(ihvin, ihvout, me2, state);
 1564|       |        break;
 1565|       |#endif
 1566|       |#ifdef DOSTORESTATE2
 1567|       |    case 2:
 1568|       |        sha1recompress_fast_2(ihvin, ihvout, me2, state);
 1569|       |        break;
 1570|       |#endif
 1571|       |#ifdef DOSTORESTATE3
 1572|       |    case 3:
 1573|       |        sha1recompress_fast_3(ihvin, ihvout, me2, state);
 1574|       |        break;
 1575|       |#endif
 1576|       |#ifdef DOSTORESTATE4
 1577|       |    case 4:
 1578|       |        sha1recompress_fast_4(ihvin, ihvout, me2, state);
 1579|       |        break;
 1580|       |#endif
 1581|       |#ifdef DOSTORESTATE5
 1582|       |    case 5:
 1583|       |        sha1recompress_fast_5(ihvin, ihvout, me2, state);
 1584|       |        break;
 1585|       |#endif
 1586|       |#ifdef DOSTORESTATE6
 1587|       |    case 6:
 1588|       |        sha1recompress_fast_6(ihvin, ihvout, me2, state);
 1589|       |        break;
 1590|       |#endif
 1591|       |#ifdef DOSTORESTATE7
 1592|       |    case 7:
 1593|       |        sha1recompress_fast_7(ihvin, ihvout, me2, state);
 1594|       |        break;
 1595|       |#endif
 1596|       |#ifdef DOSTORESTATE8
 1597|       |    case 8:
 1598|       |        sha1recompress_fast_8(ihvin, ihvout, me2, state);
 1599|       |        break;
 1600|       |#endif
 1601|       |#ifdef DOSTORESTATE9
 1602|       |    case 9:
 1603|       |        sha1recompress_fast_9(ihvin, ihvout, me2, state);
 1604|       |        break;
 1605|       |#endif
 1606|       |#ifdef DOSTORESTATE10
 1607|       |    case 10:
 1608|       |        sha1recompress_fast_10(ihvin, ihvout, me2, state);
 1609|       |        break;
 1610|       |#endif
 1611|       |#ifdef DOSTORESTATE11
 1612|       |    case 11:
 1613|       |        sha1recompress_fast_11(ihvin, ihvout, me2, state);
 1614|       |        break;
 1615|       |#endif
 1616|       |#ifdef DOSTORESTATE12
 1617|       |    case 12:
 1618|       |        sha1recompress_fast_12(ihvin, ihvout, me2, state);
 1619|       |        break;
 1620|       |#endif
 1621|       |#ifdef DOSTORESTATE13
 1622|       |    case 13:
 1623|       |        sha1recompress_fast_13(ihvin, ihvout, me2, state);
 1624|       |        break;
 1625|       |#endif
 1626|       |#ifdef DOSTORESTATE14
 1627|       |    case 14:
 1628|       |        sha1recompress_fast_14(ihvin, ihvout, me2, state);
 1629|       |        break;
 1630|       |#endif
 1631|       |#ifdef DOSTORESTATE15
 1632|       |    case 15:
 1633|       |        sha1recompress_fast_15(ihvin, ihvout, me2, state);
 1634|       |        break;
 1635|       |#endif
 1636|       |#ifdef DOSTORESTATE16
 1637|       |    case 16:
 1638|       |        sha1recompress_fast_16(ihvin, ihvout, me2, state);
 1639|       |        break;
 1640|       |#endif
 1641|       |#ifdef DOSTORESTATE17
 1642|       |    case 17:
 1643|       |        sha1recompress_fast_17(ihvin, ihvout, me2, state);
 1644|       |        break;
 1645|       |#endif
 1646|       |#ifdef DOSTORESTATE18
 1647|       |    case 18:
 1648|       |        sha1recompress_fast_18(ihvin, ihvout, me2, state);
 1649|       |        break;
 1650|       |#endif
 1651|       |#ifdef DOSTORESTATE19
 1652|       |    case 19:
 1653|       |        sha1recompress_fast_19(ihvin, ihvout, me2, state);
 1654|       |        break;
 1655|       |#endif
 1656|       |#ifdef DOSTORESTATE20
 1657|       |    case 20:
 1658|       |        sha1recompress_fast_20(ihvin, ihvout, me2, state);
 1659|       |        break;
 1660|       |#endif
 1661|       |#ifdef DOSTORESTATE21
 1662|       |    case 21:
 1663|       |        sha1recompress_fast_21(ihvin, ihvout, me2, state);
 1664|       |        break;
 1665|       |#endif
 1666|       |#ifdef DOSTORESTATE22
 1667|       |    case 22:
 1668|       |        sha1recompress_fast_22(ihvin, ihvout, me2, state);
 1669|       |        break;
 1670|       |#endif
 1671|       |#ifdef DOSTORESTATE23
 1672|       |    case 23:
 1673|       |        sha1recompress_fast_23(ihvin, ihvout, me2, state);
 1674|       |        break;
 1675|       |#endif
 1676|       |#ifdef DOSTORESTATE24
 1677|       |    case 24:
 1678|       |        sha1recompress_fast_24(ihvin, ihvout, me2, state);
 1679|       |        break;
 1680|       |#endif
 1681|       |#ifdef DOSTORESTATE25
 1682|       |    case 25:
 1683|       |        sha1recompress_fast_25(ihvin, ihvout, me2, state);
 1684|       |        break;
 1685|       |#endif
 1686|       |#ifdef DOSTORESTATE26
 1687|       |    case 26:
 1688|       |        sha1recompress_fast_26(ihvin, ihvout, me2, state);
 1689|       |        break;
 1690|       |#endif
 1691|       |#ifdef DOSTORESTATE27
 1692|       |    case 27:
 1693|       |        sha1recompress_fast_27(ihvin, ihvout, me2, state);
 1694|       |        break;
 1695|       |#endif
 1696|       |#ifdef DOSTORESTATE28
 1697|       |    case 28:
 1698|       |        sha1recompress_fast_28(ihvin, ihvout, me2, state);
 1699|       |        break;
 1700|       |#endif
 1701|       |#ifdef DOSTORESTATE29
 1702|       |    case 29:
 1703|       |        sha1recompress_fast_29(ihvin, ihvout, me2, state);
 1704|       |        break;
 1705|       |#endif
 1706|       |#ifdef DOSTORESTATE30
 1707|       |    case 30:
 1708|       |        sha1recompress_fast_30(ihvin, ihvout, me2, state);
 1709|       |        break;
 1710|       |#endif
 1711|       |#ifdef DOSTORESTATE31
 1712|       |    case 31:
 1713|       |        sha1recompress_fast_31(ihvin, ihvout, me2, state);
 1714|       |        break;
 1715|       |#endif
 1716|       |#ifdef DOSTORESTATE32
 1717|       |    case 32:
 1718|       |        sha1recompress_fast_32(ihvin, ihvout, me2, state);
 1719|       |        break;
 1720|       |#endif
 1721|       |#ifdef DOSTORESTATE33
 1722|       |    case 33:
 1723|       |        sha1recompress_fast_33(ihvin, ihvout, me2, state);
 1724|       |        break;
 1725|       |#endif
 1726|       |#ifdef DOSTORESTATE34
 1727|       |    case 34:
 1728|       |        sha1recompress_fast_34(ihvin, ihvout, me2, state);
 1729|       |        break;
 1730|       |#endif
 1731|       |#ifdef DOSTORESTATE35
 1732|       |    case 35:
 1733|       |        sha1recompress_fast_35(ihvin, ihvout, me2, state);
 1734|       |        break;
 1735|       |#endif
 1736|       |#ifdef DOSTORESTATE36
 1737|       |    case 36:
 1738|       |        sha1recompress_fast_36(ihvin, ihvout, me2, state);
 1739|       |        break;
 1740|       |#endif
 1741|       |#ifdef DOSTORESTATE37
 1742|       |    case 37:
 1743|       |        sha1recompress_fast_37(ihvin, ihvout, me2, state);
 1744|       |        break;
 1745|       |#endif
 1746|       |#ifdef DOSTORESTATE38
 1747|       |    case 38:
 1748|       |        sha1recompress_fast_38(ihvin, ihvout, me2, state);
 1749|       |        break;
 1750|       |#endif
 1751|       |#ifdef DOSTORESTATE39
 1752|       |    case 39:
 1753|       |        sha1recompress_fast_39(ihvin, ihvout, me2, state);
 1754|       |        break;
 1755|       |#endif
 1756|       |#ifdef DOSTORESTATE40
 1757|       |    case 40:
 1758|       |        sha1recompress_fast_40(ihvin, ihvout, me2, state);
 1759|       |        break;
 1760|       |#endif
 1761|       |#ifdef DOSTORESTATE41
 1762|       |    case 41:
 1763|       |        sha1recompress_fast_41(ihvin, ihvout, me2, state);
 1764|       |        break;
 1765|       |#endif
 1766|       |#ifdef DOSTORESTATE42
 1767|       |    case 42:
 1768|       |        sha1recompress_fast_42(ihvin, ihvout, me2, state);
 1769|       |        break;
 1770|       |#endif
 1771|       |#ifdef DOSTORESTATE43
 1772|       |    case 43:
 1773|       |        sha1recompress_fast_43(ihvin, ihvout, me2, state);
 1774|       |        break;
 1775|       |#endif
 1776|       |#ifdef DOSTORESTATE44
 1777|       |    case 44:
 1778|       |        sha1recompress_fast_44(ihvin, ihvout, me2, state);
 1779|       |        break;
 1780|       |#endif
 1781|       |#ifdef DOSTORESTATE45
 1782|       |    case 45:
 1783|       |        sha1recompress_fast_45(ihvin, ihvout, me2, state);
 1784|       |        break;
 1785|       |#endif
 1786|       |#ifdef DOSTORESTATE46
 1787|       |    case 46:
 1788|       |        sha1recompress_fast_46(ihvin, ihvout, me2, state);
 1789|       |        break;
 1790|       |#endif
 1791|       |#ifdef DOSTORESTATE47
 1792|       |    case 47:
 1793|       |        sha1recompress_fast_47(ihvin, ihvout, me2, state);
 1794|       |        break;
 1795|       |#endif
 1796|       |#ifdef DOSTORESTATE48
 1797|       |    case 48:
 1798|       |        sha1recompress_fast_48(ihvin, ihvout, me2, state);
 1799|       |        break;
 1800|       |#endif
 1801|       |#ifdef DOSTORESTATE49
 1802|       |    case 49:
 1803|       |        sha1recompress_fast_49(ihvin, ihvout, me2, state);
 1804|       |        break;
 1805|       |#endif
 1806|       |#ifdef DOSTORESTATE50
 1807|       |    case 50:
 1808|       |        sha1recompress_fast_50(ihvin, ihvout, me2, state);
 1809|       |        break;
 1810|       |#endif
 1811|       |#ifdef DOSTORESTATE51
 1812|       |    case 51:
 1813|       |        sha1recompress_fast_51(ihvin, ihvout, me2, state);
 1814|       |        break;
 1815|       |#endif
 1816|       |#ifdef DOSTORESTATE52
 1817|       |    case 52:
 1818|       |        sha1recompress_fast_52(ihvin, ihvout, me2, state);
 1819|       |        break;
 1820|       |#endif
 1821|       |#ifdef DOSTORESTATE53
 1822|       |    case 53:
 1823|       |        sha1recompress_fast_53(ihvin, ihvout, me2, state);
 1824|       |        break;
 1825|       |#endif
 1826|       |#ifdef DOSTORESTATE54
 1827|       |    case 54:
 1828|       |        sha1recompress_fast_54(ihvin, ihvout, me2, state);
 1829|       |        break;
 1830|       |#endif
 1831|       |#ifdef DOSTORESTATE55
 1832|       |    case 55:
 1833|       |        sha1recompress_fast_55(ihvin, ihvout, me2, state);
 1834|       |        break;
 1835|       |#endif
 1836|       |#ifdef DOSTORESTATE56
 1837|       |    case 56:
 1838|       |        sha1recompress_fast_56(ihvin, ihvout, me2, state);
 1839|       |        break;
 1840|       |#endif
 1841|       |#ifdef DOSTORESTATE57
 1842|       |    case 57:
 1843|       |        sha1recompress_fast_57(ihvin, ihvout, me2, state);
 1844|       |        break;
 1845|       |#endif
 1846|      0|#ifdef DOSTORESTATE58
 1847|  86.4k|    case 58:
  ------------------
  |  Branch (1847:5): [True: 86.4k, False: 21.5k]
  ------------------
 1848|  86.4k|        sha1recompress_fast_58(ihvin, ihvout, me2, state);
 1849|  86.4k|        break;
 1850|      0|#endif
 1851|       |#ifdef DOSTORESTATE59
 1852|       |    case 59:
 1853|       |        sha1recompress_fast_59(ihvin, ihvout, me2, state);
 1854|       |        break;
 1855|       |#endif
 1856|       |#ifdef DOSTORESTATE60
 1857|       |    case 60:
 1858|       |        sha1recompress_fast_60(ihvin, ihvout, me2, state);
 1859|       |        break;
 1860|       |#endif
 1861|       |#ifdef DOSTORESTATE61
 1862|       |    case 61:
 1863|       |        sha1recompress_fast_61(ihvin, ihvout, me2, state);
 1864|       |        break;
 1865|       |#endif
 1866|       |#ifdef DOSTORESTATE62
 1867|       |    case 62:
 1868|       |        sha1recompress_fast_62(ihvin, ihvout, me2, state);
 1869|       |        break;
 1870|       |#endif
 1871|       |#ifdef DOSTORESTATE63
 1872|       |    case 63:
 1873|       |        sha1recompress_fast_63(ihvin, ihvout, me2, state);
 1874|       |        break;
 1875|       |#endif
 1876|       |#ifdef DOSTORESTATE64
 1877|       |    case 64:
 1878|       |        sha1recompress_fast_64(ihvin, ihvout, me2, state);
 1879|       |        break;
 1880|       |#endif
 1881|      0|#ifdef DOSTORESTATE65
 1882|  21.5k|    case 65:
  ------------------
  |  Branch (1882:5): [True: 21.5k, False: 86.4k]
  ------------------
 1883|  21.5k|        sha1recompress_fast_65(ihvin, ihvout, me2, state);
 1884|  21.5k|        break;
 1885|      0|#endif
 1886|       |#ifdef DOSTORESTATE66
 1887|       |    case 66:
 1888|       |        sha1recompress_fast_66(ihvin, ihvout, me2, state);
 1889|       |        break;
 1890|       |#endif
 1891|       |#ifdef DOSTORESTATE67
 1892|       |    case 67:
 1893|       |        sha1recompress_fast_67(ihvin, ihvout, me2, state);
 1894|       |        break;
 1895|       |#endif
 1896|       |#ifdef DOSTORESTATE68
 1897|       |    case 68:
 1898|       |        sha1recompress_fast_68(ihvin, ihvout, me2, state);
 1899|       |        break;
 1900|       |#endif
 1901|       |#ifdef DOSTORESTATE69
 1902|       |    case 69:
 1903|       |        sha1recompress_fast_69(ihvin, ihvout, me2, state);
 1904|       |        break;
 1905|       |#endif
 1906|       |#ifdef DOSTORESTATE70
 1907|       |    case 70:
 1908|       |        sha1recompress_fast_70(ihvin, ihvout, me2, state);
 1909|       |        break;
 1910|       |#endif
 1911|       |#ifdef DOSTORESTATE71
 1912|       |    case 71:
 1913|       |        sha1recompress_fast_71(ihvin, ihvout, me2, state);
 1914|       |        break;
 1915|       |#endif
 1916|       |#ifdef DOSTORESTATE72
 1917|       |    case 72:
 1918|       |        sha1recompress_fast_72(ihvin, ihvout, me2, state);
 1919|       |        break;
 1920|       |#endif
 1921|       |#ifdef DOSTORESTATE73
 1922|       |    case 73:
 1923|       |        sha1recompress_fast_73(ihvin, ihvout, me2, state);
 1924|       |        break;
 1925|       |#endif
 1926|       |#ifdef DOSTORESTATE74
 1927|       |    case 74:
 1928|       |        sha1recompress_fast_74(ihvin, ihvout, me2, state);
 1929|       |        break;
 1930|       |#endif
 1931|       |#ifdef DOSTORESTATE75
 1932|       |    case 75:
 1933|       |        sha1recompress_fast_75(ihvin, ihvout, me2, state);
 1934|       |        break;
 1935|       |#endif
 1936|       |#ifdef DOSTORESTATE76
 1937|       |    case 76:
 1938|       |        sha1recompress_fast_76(ihvin, ihvout, me2, state);
 1939|       |        break;
 1940|       |#endif
 1941|       |#ifdef DOSTORESTATE77
 1942|       |    case 77:
 1943|       |        sha1recompress_fast_77(ihvin, ihvout, me2, state);
 1944|       |        break;
 1945|       |#endif
 1946|       |#ifdef DOSTORESTATE78
 1947|       |    case 78:
 1948|       |        sha1recompress_fast_78(ihvin, ihvout, me2, state);
 1949|       |        break;
 1950|       |#endif
 1951|       |#ifdef DOSTORESTATE79
 1952|       |    case 79:
 1953|       |        sha1recompress_fast_79(ihvin, ihvout, me2, state);
 1954|       |        break;
 1955|       |#endif
 1956|      0|    default:
  ------------------
  |  Branch (1956:5): [True: 0, False: 107k]
  ------------------
 1957|      0|        abort();
 1958|   107k|    }
 1959|   107k|}
sha1.c:sha1recompress_fast_58:
  879|  86.4k|    {                                                                                         \
  880|  86.4k|        uint32_t a = state[0], b = state[1], c = state[2], d = state[3], e = state[4];        \
  881|  86.4k|        if (t > 79)                                                                           \
  ------------------
  |  Branch (881:13): [Folded, False: 86.4k]
  ------------------
  882|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 79);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  883|  86.4k|        if (t > 78)                                                                           \
  ------------------
  |  Branch (883:13): [Folded, False: 86.4k]
  ------------------
  884|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 78);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  885|  86.4k|        if (t > 77)                                                                           \
  ------------------
  |  Branch (885:13): [Folded, False: 86.4k]
  ------------------
  886|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 77);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  887|  86.4k|        if (t > 76)                                                                           \
  ------------------
  |  Branch (887:13): [Folded, False: 86.4k]
  ------------------
  888|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 76);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  889|  86.4k|        if (t > 75)                                                                           \
  ------------------
  |  Branch (889:13): [Folded, False: 86.4k]
  ------------------
  890|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 75);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  891|  86.4k|        if (t > 74)                                                                           \
  ------------------
  |  Branch (891:13): [Folded, False: 86.4k]
  ------------------
  892|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 74);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  893|  86.4k|        if (t > 73)                                                                           \
  ------------------
  |  Branch (893:13): [Folded, False: 86.4k]
  ------------------
  894|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 73);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  895|  86.4k|        if (t > 72)                                                                           \
  ------------------
  |  Branch (895:13): [Folded, False: 86.4k]
  ------------------
  896|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 72);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  897|  86.4k|        if (t > 71)                                                                           \
  ------------------
  |  Branch (897:13): [Folded, False: 86.4k]
  ------------------
  898|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 71);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  899|  86.4k|        if (t > 70)                                                                           \
  ------------------
  |  Branch (899:13): [Folded, False: 86.4k]
  ------------------
  900|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 70);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  901|  86.4k|        if (t > 69)                                                                           \
  ------------------
  |  Branch (901:13): [Folded, False: 86.4k]
  ------------------
  902|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 69);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  903|  86.4k|        if (t > 68)                                                                           \
  ------------------
  |  Branch (903:13): [Folded, False: 86.4k]
  ------------------
  904|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 68);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  905|  86.4k|        if (t > 67)                                                                           \
  ------------------
  |  Branch (905:13): [Folded, False: 86.4k]
  ------------------
  906|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 67);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  907|  86.4k|        if (t > 66)                                                                           \
  ------------------
  |  Branch (907:13): [Folded, False: 86.4k]
  ------------------
  908|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 66);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  909|  86.4k|        if (t > 65)                                                                           \
  ------------------
  |  Branch (909:13): [Folded, False: 86.4k]
  ------------------
  910|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 65);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  911|  86.4k|        if (t > 64)                                                                           \
  ------------------
  |  Branch (911:13): [Folded, False: 86.4k]
  ------------------
  912|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 64);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  913|  86.4k|        if (t > 63)                                                                           \
  ------------------
  |  Branch (913:13): [Folded, False: 86.4k]
  ------------------
  914|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 63);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  915|  86.4k|        if (t > 62)                                                                           \
  ------------------
  |  Branch (915:13): [Folded, False: 86.4k]
  ------------------
  916|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 62);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  917|  86.4k|        if (t > 61)                                                                           \
  ------------------
  |  Branch (917:13): [Folded, False: 86.4k]
  ------------------
  918|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 61);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  919|  86.4k|        if (t > 60)                                                                           \
  ------------------
  |  Branch (919:13): [Folded, False: 86.4k]
  ------------------
  920|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 60);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  921|  86.4k|        if (t > 59)                                                                           \
  ------------------
  |  Branch (921:13): [Folded, False: 86.4k]
  ------------------
  922|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 59);                    \
  ------------------
  |  |  197|      0|    {                                                                  \
  |  |  198|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|      0|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|      0|    }
  ------------------
  923|  86.4k|        if (t > 58)                                                                           \
  ------------------
  |  Branch (923:13): [Folded, False: 86.4k]
  ------------------
  924|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 58);                    \
  ------------------
  |  |  197|      0|    {                                                                  \
  |  |  198|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|      0|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|      0|    }
  ------------------
  925|  86.4k|        if (t > 57)                                                                           \
  ------------------
  |  Branch (925:13): [True: 86.4k, Folded]
  ------------------
  926|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 57);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  927|  86.4k|        if (t > 56)                                                                           \
  ------------------
  |  Branch (927:13): [True: 86.4k, Folded]
  ------------------
  928|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 56);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  929|  86.4k|        if (t > 55)                                                                           \
  ------------------
  |  Branch (929:13): [True: 86.4k, Folded]
  ------------------
  930|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 55);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  931|  86.4k|        if (t > 54)                                                                           \
  ------------------
  |  Branch (931:13): [True: 86.4k, Folded]
  ------------------
  932|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 54);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  933|  86.4k|        if (t > 53)                                                                           \
  ------------------
  |  Branch (933:13): [True: 86.4k, Folded]
  ------------------
  934|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 53);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  935|  86.4k|        if (t > 52)                                                                           \
  ------------------
  |  Branch (935:13): [True: 86.4k, Folded]
  ------------------
  936|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 52);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  937|  86.4k|        if (t > 51)                                                                           \
  ------------------
  |  Branch (937:13): [True: 86.4k, Folded]
  ------------------
  938|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 51);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  939|  86.4k|        if (t > 50)                                                                           \
  ------------------
  |  Branch (939:13): [True: 86.4k, Folded]
  ------------------
  940|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 50);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  941|  86.4k|        if (t > 49)                                                                           \
  ------------------
  |  Branch (941:13): [True: 86.4k, Folded]
  ------------------
  942|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 49);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  943|  86.4k|        if (t > 48)                                                                           \
  ------------------
  |  Branch (943:13): [True: 86.4k, Folded]
  ------------------
  944|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 48);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  945|  86.4k|        if (t > 47)                                                                           \
  ------------------
  |  Branch (945:13): [True: 86.4k, Folded]
  ------------------
  946|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 47);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  947|  86.4k|        if (t > 46)                                                                           \
  ------------------
  |  Branch (947:13): [True: 86.4k, Folded]
  ------------------
  948|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 46);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  949|  86.4k|        if (t > 45)                                                                           \
  ------------------
  |  Branch (949:13): [True: 86.4k, Folded]
  ------------------
  950|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 45);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  951|  86.4k|        if (t > 44)                                                                           \
  ------------------
  |  Branch (951:13): [True: 86.4k, Folded]
  ------------------
  952|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 44);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  953|  86.4k|        if (t > 43)                                                                           \
  ------------------
  |  Branch (953:13): [True: 86.4k, Folded]
  ------------------
  954|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 43);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  955|  86.4k|        if (t > 42)                                                                           \
  ------------------
  |  Branch (955:13): [True: 86.4k, Folded]
  ------------------
  956|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 42);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  957|  86.4k|        if (t > 41)                                                                           \
  ------------------
  |  Branch (957:13): [True: 86.4k, Folded]
  ------------------
  958|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 41);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  959|  86.4k|        if (t > 40)                                                                           \
  ------------------
  |  Branch (959:13): [True: 86.4k, Folded]
  ------------------
  960|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 40);                    \
  ------------------
  |  |  197|  86.4k|    {                                                                  \
  |  |  198|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  86.4k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  86.4k|    }
  ------------------
  961|  86.4k|        if (t > 39)                                                                           \
  ------------------
  |  Branch (961:13): [True: 86.4k, Folded]
  ------------------
  962|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 39);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  963|  86.4k|        if (t > 38)                                                                           \
  ------------------
  |  Branch (963:13): [True: 86.4k, Folded]
  ------------------
  964|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 38);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  965|  86.4k|        if (t > 37)                                                                           \
  ------------------
  |  Branch (965:13): [True: 86.4k, Folded]
  ------------------
  966|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 37);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  967|  86.4k|        if (t > 36)                                                                           \
  ------------------
  |  Branch (967:13): [True: 86.4k, Folded]
  ------------------
  968|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 36);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  969|  86.4k|        if (t > 35)                                                                           \
  ------------------
  |  Branch (969:13): [True: 86.4k, Folded]
  ------------------
  970|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 35);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  971|  86.4k|        if (t > 34)                                                                           \
  ------------------
  |  Branch (971:13): [True: 86.4k, Folded]
  ------------------
  972|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 34);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  973|  86.4k|        if (t > 33)                                                                           \
  ------------------
  |  Branch (973:13): [True: 86.4k, Folded]
  ------------------
  974|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 33);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  975|  86.4k|        if (t > 32)                                                                           \
  ------------------
  |  Branch (975:13): [True: 86.4k, Folded]
  ------------------
  976|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 32);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  977|  86.4k|        if (t > 31)                                                                           \
  ------------------
  |  Branch (977:13): [True: 86.4k, Folded]
  ------------------
  978|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 31);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  979|  86.4k|        if (t > 30)                                                                           \
  ------------------
  |  Branch (979:13): [True: 86.4k, Folded]
  ------------------
  980|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 30);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  981|  86.4k|        if (t > 29)                                                                           \
  ------------------
  |  Branch (981:13): [True: 86.4k, Folded]
  ------------------
  982|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 29);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  983|  86.4k|        if (t > 28)                                                                           \
  ------------------
  |  Branch (983:13): [True: 86.4k, Folded]
  ------------------
  984|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 28);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  985|  86.4k|        if (t > 27)                                                                           \
  ------------------
  |  Branch (985:13): [True: 86.4k, Folded]
  ------------------
  986|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 27);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  987|  86.4k|        if (t > 26)                                                                           \
  ------------------
  |  Branch (987:13): [True: 86.4k, Folded]
  ------------------
  988|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 26);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  989|  86.4k|        if (t > 25)                                                                           \
  ------------------
  |  Branch (989:13): [True: 86.4k, Folded]
  ------------------
  990|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 25);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  991|  86.4k|        if (t > 24)                                                                           \
  ------------------
  |  Branch (991:13): [True: 86.4k, Folded]
  ------------------
  992|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 24);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  993|  86.4k|        if (t > 23)                                                                           \
  ------------------
  |  Branch (993:13): [True: 86.4k, Folded]
  ------------------
  994|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 23);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  995|  86.4k|        if (t > 22)                                                                           \
  ------------------
  |  Branch (995:13): [True: 86.4k, Folded]
  ------------------
  996|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 22);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  997|  86.4k|        if (t > 21)                                                                           \
  ------------------
  |  Branch (997:13): [True: 86.4k, Folded]
  ------------------
  998|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 21);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
  999|  86.4k|        if (t > 20)                                                                           \
  ------------------
  |  Branch (999:13): [True: 86.4k, Folded]
  ------------------
 1000|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 20);                    \
  ------------------
  |  |  192|  86.4k|    {                                                                  \
  |  |  193|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  86.4k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  86.4k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  86.4k|    }
  ------------------
 1001|  86.4k|        if (t > 19)                                                                           \
  ------------------
  |  Branch (1001:13): [True: 86.4k, Folded]
  ------------------
 1002|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 19);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1003|  86.4k|        if (t > 18)                                                                           \
  ------------------
  |  Branch (1003:13): [True: 86.4k, Folded]
  ------------------
 1004|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 18);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1005|  86.4k|        if (t > 17)                                                                           \
  ------------------
  |  Branch (1005:13): [True: 86.4k, Folded]
  ------------------
 1006|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 17);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1007|  86.4k|        if (t > 16)                                                                           \
  ------------------
  |  Branch (1007:13): [True: 86.4k, Folded]
  ------------------
 1008|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 16);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1009|  86.4k|        if (t > 15)                                                                           \
  ------------------
  |  Branch (1009:13): [True: 86.4k, Folded]
  ------------------
 1010|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 15);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1011|  86.4k|        if (t > 14)                                                                           \
  ------------------
  |  Branch (1011:13): [True: 86.4k, Folded]
  ------------------
 1012|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 14);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1013|  86.4k|        if (t > 13)                                                                           \
  ------------------
  |  Branch (1013:13): [True: 86.4k, Folded]
  ------------------
 1014|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 13);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1015|  86.4k|        if (t > 12)                                                                           \
  ------------------
  |  Branch (1015:13): [True: 86.4k, Folded]
  ------------------
 1016|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 12);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1017|  86.4k|        if (t > 11)                                                                           \
  ------------------
  |  Branch (1017:13): [True: 86.4k, Folded]
  ------------------
 1018|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 11);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1019|  86.4k|        if (t > 10)                                                                           \
  ------------------
  |  Branch (1019:13): [True: 86.4k, Folded]
  ------------------
 1020|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 10);                    \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1021|  86.4k|        if (t > 9)                                                                            \
  ------------------
  |  Branch (1021:13): [True: 86.4k, Folded]
  ------------------
 1022|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 9);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1023|  86.4k|        if (t > 8)                                                                            \
  ------------------
  |  Branch (1023:13): [True: 86.4k, Folded]
  ------------------
 1024|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 8);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1025|  86.4k|        if (t > 7)                                                                            \
  ------------------
  |  Branch (1025:13): [True: 86.4k, Folded]
  ------------------
 1026|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 7);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1027|  86.4k|        if (t > 6)                                                                            \
  ------------------
  |  Branch (1027:13): [True: 86.4k, Folded]
  ------------------
 1028|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 6);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1029|  86.4k|        if (t > 5)                                                                            \
  ------------------
  |  Branch (1029:13): [True: 86.4k, Folded]
  ------------------
 1030|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 5);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1031|  86.4k|        if (t > 4)                                                                            \
  ------------------
  |  Branch (1031:13): [True: 86.4k, Folded]
  ------------------
 1032|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 4);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1033|  86.4k|        if (t > 3)                                                                            \
  ------------------
  |  Branch (1033:13): [True: 86.4k, Folded]
  ------------------
 1034|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 3);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1035|  86.4k|        if (t > 2)                                                                            \
  ------------------
  |  Branch (1035:13): [True: 86.4k, Folded]
  ------------------
 1036|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 2);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1037|  86.4k|        if (t > 1)                                                                            \
  ------------------
  |  Branch (1037:13): [True: 86.4k, Folded]
  ------------------
 1038|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 1);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1039|  86.4k|        if (t > 0)                                                                            \
  ------------------
  |  Branch (1039:13): [True: 86.4k, Folded]
  ------------------
 1040|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 0);                     \
  ------------------
  |  |  187|  86.4k|    {                                                                  \
  |  |  188|  86.4k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  86.4k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  86.4k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  86.4k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  86.4k|    }
  ------------------
 1041|  86.4k|        ihvin[0] = a;                                                                         \
 1042|  86.4k|        ihvin[1] = b;                                                                         \
 1043|  86.4k|        ihvin[2] = c;                                                                         \
 1044|  86.4k|        ihvin[3] = d;                                                                         \
 1045|  86.4k|        ihvin[4] = e;                                                                         \
 1046|  86.4k|        a = state[0];                                                                         \
 1047|  86.4k|        b = state[1];                                                                         \
 1048|  86.4k|        c = state[2];                                                                         \
 1049|  86.4k|        d = state[3];                                                                         \
 1050|  86.4k|        e = state[4];                                                                         \
 1051|  86.4k|        if (t <= 0)                                                                           \
  ------------------
  |  Branch (1051:13): [Folded, False: 86.4k]
  ------------------
 1052|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 0);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1053|  86.4k|        if (t <= 1)                                                                           \
  ------------------
  |  Branch (1053:13): [Folded, False: 86.4k]
  ------------------
 1054|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 1);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1055|  86.4k|        if (t <= 2)                                                                           \
  ------------------
  |  Branch (1055:13): [Folded, False: 86.4k]
  ------------------
 1056|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 2);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1057|  86.4k|        if (t <= 3)                                                                           \
  ------------------
  |  Branch (1057:13): [Folded, False: 86.4k]
  ------------------
 1058|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 3);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1059|  86.4k|        if (t <= 4)                                                                           \
  ------------------
  |  Branch (1059:13): [Folded, False: 86.4k]
  ------------------
 1060|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 4);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1061|  86.4k|        if (t <= 5)                                                                           \
  ------------------
  |  Branch (1061:13): [Folded, False: 86.4k]
  ------------------
 1062|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 5);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1063|  86.4k|        if (t <= 6)                                                                           \
  ------------------
  |  Branch (1063:13): [Folded, False: 86.4k]
  ------------------
 1064|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 6);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1065|  86.4k|        if (t <= 7)                                                                           \
  ------------------
  |  Branch (1065:13): [Folded, False: 86.4k]
  ------------------
 1066|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 7);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1067|  86.4k|        if (t <= 8)                                                                           \
  ------------------
  |  Branch (1067:13): [Folded, False: 86.4k]
  ------------------
 1068|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 8);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1069|  86.4k|        if (t <= 9)                                                                           \
  ------------------
  |  Branch (1069:13): [Folded, False: 86.4k]
  ------------------
 1070|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 9);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1071|  86.4k|        if (t <= 10)                                                                          \
  ------------------
  |  Branch (1071:13): [Folded, False: 86.4k]
  ------------------
 1072|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 10);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1073|  86.4k|        if (t <= 11)                                                                          \
  ------------------
  |  Branch (1073:13): [Folded, False: 86.4k]
  ------------------
 1074|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 11);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1075|  86.4k|        if (t <= 12)                                                                          \
  ------------------
  |  Branch (1075:13): [Folded, False: 86.4k]
  ------------------
 1076|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 12);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1077|  86.4k|        if (t <= 13)                                                                          \
  ------------------
  |  Branch (1077:13): [Folded, False: 86.4k]
  ------------------
 1078|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 13);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1079|  86.4k|        if (t <= 14)                                                                          \
  ------------------
  |  Branch (1079:13): [Folded, False: 86.4k]
  ------------------
 1080|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 14);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1081|  86.4k|        if (t <= 15)                                                                          \
  ------------------
  |  Branch (1081:13): [Folded, False: 86.4k]
  ------------------
 1082|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 15);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1083|  86.4k|        if (t <= 16)                                                                          \
  ------------------
  |  Branch (1083:13): [Folded, False: 86.4k]
  ------------------
 1084|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 16);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1085|  86.4k|        if (t <= 17)                                                                          \
  ------------------
  |  Branch (1085:13): [Folded, False: 86.4k]
  ------------------
 1086|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 17);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1087|  86.4k|        if (t <= 18)                                                                          \
  ------------------
  |  Branch (1087:13): [Folded, False: 86.4k]
  ------------------
 1088|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 18);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1089|  86.4k|        if (t <= 19)                                                                          \
  ------------------
  |  Branch (1089:13): [Folded, False: 86.4k]
  ------------------
 1090|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 19);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1091|  86.4k|        if (t <= 20)                                                                          \
  ------------------
  |  Branch (1091:13): [Folded, False: 86.4k]
  ------------------
 1092|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 20);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1093|  86.4k|        if (t <= 21)                                                                          \
  ------------------
  |  Branch (1093:13): [Folded, False: 86.4k]
  ------------------
 1094|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 21);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1095|  86.4k|        if (t <= 22)                                                                          \
  ------------------
  |  Branch (1095:13): [Folded, False: 86.4k]
  ------------------
 1096|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 22);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1097|  86.4k|        if (t <= 23)                                                                          \
  ------------------
  |  Branch (1097:13): [Folded, False: 86.4k]
  ------------------
 1098|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 23);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1099|  86.4k|        if (t <= 24)                                                                          \
  ------------------
  |  Branch (1099:13): [Folded, False: 86.4k]
  ------------------
 1100|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 24);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1101|  86.4k|        if (t <= 25)                                                                          \
  ------------------
  |  Branch (1101:13): [Folded, False: 86.4k]
  ------------------
 1102|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 25);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1103|  86.4k|        if (t <= 26)                                                                          \
  ------------------
  |  Branch (1103:13): [Folded, False: 86.4k]
  ------------------
 1104|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 26);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1105|  86.4k|        if (t <= 27)                                                                          \
  ------------------
  |  Branch (1105:13): [Folded, False: 86.4k]
  ------------------
 1106|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 27);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1107|  86.4k|        if (t <= 28)                                                                          \
  ------------------
  |  Branch (1107:13): [Folded, False: 86.4k]
  ------------------
 1108|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 28);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1109|  86.4k|        if (t <= 29)                                                                          \
  ------------------
  |  Branch (1109:13): [Folded, False: 86.4k]
  ------------------
 1110|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 29);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1111|  86.4k|        if (t <= 30)                                                                          \
  ------------------
  |  Branch (1111:13): [Folded, False: 86.4k]
  ------------------
 1112|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 30);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1113|  86.4k|        if (t <= 31)                                                                          \
  ------------------
  |  Branch (1113:13): [Folded, False: 86.4k]
  ------------------
 1114|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 31);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1115|  86.4k|        if (t <= 32)                                                                          \
  ------------------
  |  Branch (1115:13): [Folded, False: 86.4k]
  ------------------
 1116|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 32);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1117|  86.4k|        if (t <= 33)                                                                          \
  ------------------
  |  Branch (1117:13): [Folded, False: 86.4k]
  ------------------
 1118|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 33);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1119|  86.4k|        if (t <= 34)                                                                          \
  ------------------
  |  Branch (1119:13): [Folded, False: 86.4k]
  ------------------
 1120|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 34);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1121|  86.4k|        if (t <= 35)                                                                          \
  ------------------
  |  Branch (1121:13): [Folded, False: 86.4k]
  ------------------
 1122|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 35);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1123|  86.4k|        if (t <= 36)                                                                          \
  ------------------
  |  Branch (1123:13): [Folded, False: 86.4k]
  ------------------
 1124|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 36);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1125|  86.4k|        if (t <= 37)                                                                          \
  ------------------
  |  Branch (1125:13): [Folded, False: 86.4k]
  ------------------
 1126|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 37);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1127|  86.4k|        if (t <= 38)                                                                          \
  ------------------
  |  Branch (1127:13): [Folded, False: 86.4k]
  ------------------
 1128|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 38);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1129|  86.4k|        if (t <= 39)                                                                          \
  ------------------
  |  Branch (1129:13): [Folded, False: 86.4k]
  ------------------
 1130|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 39);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1131|  86.4k|        if (t <= 40)                                                                          \
  ------------------
  |  Branch (1131:13): [Folded, False: 86.4k]
  ------------------
 1132|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 40);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1133|  86.4k|        if (t <= 41)                                                                          \
  ------------------
  |  Branch (1133:13): [Folded, False: 86.4k]
  ------------------
 1134|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 41);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1135|  86.4k|        if (t <= 42)                                                                          \
  ------------------
  |  Branch (1135:13): [Folded, False: 86.4k]
  ------------------
 1136|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 42);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1137|  86.4k|        if (t <= 43)                                                                          \
  ------------------
  |  Branch (1137:13): [Folded, False: 86.4k]
  ------------------
 1138|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 43);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1139|  86.4k|        if (t <= 44)                                                                          \
  ------------------
  |  Branch (1139:13): [Folded, False: 86.4k]
  ------------------
 1140|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 44);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1141|  86.4k|        if (t <= 45)                                                                          \
  ------------------
  |  Branch (1141:13): [Folded, False: 86.4k]
  ------------------
 1142|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 45);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1143|  86.4k|        if (t <= 46)                                                                          \
  ------------------
  |  Branch (1143:13): [Folded, False: 86.4k]
  ------------------
 1144|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 46);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1145|  86.4k|        if (t <= 47)                                                                          \
  ------------------
  |  Branch (1145:13): [Folded, False: 86.4k]
  ------------------
 1146|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 47);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1147|  86.4k|        if (t <= 48)                                                                          \
  ------------------
  |  Branch (1147:13): [Folded, False: 86.4k]
  ------------------
 1148|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 48);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1149|  86.4k|        if (t <= 49)                                                                          \
  ------------------
  |  Branch (1149:13): [Folded, False: 86.4k]
  ------------------
 1150|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 49);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1151|  86.4k|        if (t <= 50)                                                                          \
  ------------------
  |  Branch (1151:13): [Folded, False: 86.4k]
  ------------------
 1152|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 50);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1153|  86.4k|        if (t <= 51)                                                                          \
  ------------------
  |  Branch (1153:13): [Folded, False: 86.4k]
  ------------------
 1154|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 51);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1155|  86.4k|        if (t <= 52)                                                                          \
  ------------------
  |  Branch (1155:13): [Folded, False: 86.4k]
  ------------------
 1156|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 52);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1157|  86.4k|        if (t <= 53)                                                                          \
  ------------------
  |  Branch (1157:13): [Folded, False: 86.4k]
  ------------------
 1158|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 53);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1159|  86.4k|        if (t <= 54)                                                                          \
  ------------------
  |  Branch (1159:13): [Folded, False: 86.4k]
  ------------------
 1160|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 54);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1161|  86.4k|        if (t <= 55)                                                                          \
  ------------------
  |  Branch (1161:13): [Folded, False: 86.4k]
  ------------------
 1162|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 55);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1163|  86.4k|        if (t <= 56)                                                                          \
  ------------------
  |  Branch (1163:13): [Folded, False: 86.4k]
  ------------------
 1164|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 56);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1165|  86.4k|        if (t <= 57)                                                                          \
  ------------------
  |  Branch (1165:13): [Folded, False: 86.4k]
  ------------------
 1166|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 57);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1167|  86.4k|        if (t <= 58)                                                                          \
  ------------------
  |  Branch (1167:13): [True: 86.4k, Folded]
  ------------------
 1168|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 58);                       \
  ------------------
  |  |  176|  86.4k|    {                                                                  \
  |  |  177|  86.4k|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|  86.4k|    }
  ------------------
 1169|  86.4k|        if (t <= 59)                                                                          \
  ------------------
  |  Branch (1169:13): [True: 86.4k, Folded]
  ------------------
 1170|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 59);                       \
  ------------------
  |  |  176|  86.4k|    {                                                                  \
  |  |  177|  86.4k|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  86.4k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|  86.4k|    }
  ------------------
 1171|  86.4k|        if (t <= 60)                                                                          \
  ------------------
  |  Branch (1171:13): [True: 86.4k, Folded]
  ------------------
 1172|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 60);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1173|  86.4k|        if (t <= 61)                                                                          \
  ------------------
  |  Branch (1173:13): [True: 86.4k, Folded]
  ------------------
 1174|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 61);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1175|  86.4k|        if (t <= 62)                                                                          \
  ------------------
  |  Branch (1175:13): [True: 86.4k, Folded]
  ------------------
 1176|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 62);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1177|  86.4k|        if (t <= 63)                                                                          \
  ------------------
  |  Branch (1177:13): [True: 86.4k, Folded]
  ------------------
 1178|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 63);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1179|  86.4k|        if (t <= 64)                                                                          \
  ------------------
  |  Branch (1179:13): [True: 86.4k, Folded]
  ------------------
 1180|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 64);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1181|  86.4k|        if (t <= 65)                                                                          \
  ------------------
  |  Branch (1181:13): [True: 86.4k, Folded]
  ------------------
 1182|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 65);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1183|  86.4k|        if (t <= 66)                                                                          \
  ------------------
  |  Branch (1183:13): [True: 86.4k, Folded]
  ------------------
 1184|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 66);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1185|  86.4k|        if (t <= 67)                                                                          \
  ------------------
  |  Branch (1185:13): [True: 86.4k, Folded]
  ------------------
 1186|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 67);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1187|  86.4k|        if (t <= 68)                                                                          \
  ------------------
  |  Branch (1187:13): [True: 86.4k, Folded]
  ------------------
 1188|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 68);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1189|  86.4k|        if (t <= 69)                                                                          \
  ------------------
  |  Branch (1189:13): [True: 86.4k, Folded]
  ------------------
 1190|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 69);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1191|  86.4k|        if (t <= 70)                                                                          \
  ------------------
  |  Branch (1191:13): [True: 86.4k, Folded]
  ------------------
 1192|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 70);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1193|  86.4k|        if (t <= 71)                                                                          \
  ------------------
  |  Branch (1193:13): [True: 86.4k, Folded]
  ------------------
 1194|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 71);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1195|  86.4k|        if (t <= 72)                                                                          \
  ------------------
  |  Branch (1195:13): [True: 86.4k, Folded]
  ------------------
 1196|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 72);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1197|  86.4k|        if (t <= 73)                                                                          \
  ------------------
  |  Branch (1197:13): [True: 86.4k, Folded]
  ------------------
 1198|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 73);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1199|  86.4k|        if (t <= 74)                                                                          \
  ------------------
  |  Branch (1199:13): [True: 86.4k, Folded]
  ------------------
 1200|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 74);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1201|  86.4k|        if (t <= 75)                                                                          \
  ------------------
  |  Branch (1201:13): [True: 86.4k, Folded]
  ------------------
 1202|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 75);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1203|  86.4k|        if (t <= 76)                                                                          \
  ------------------
  |  Branch (1203:13): [True: 86.4k, Folded]
  ------------------
 1204|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 76);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1205|  86.4k|        if (t <= 77)                                                                          \
  ------------------
  |  Branch (1205:13): [True: 86.4k, Folded]
  ------------------
 1206|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 77);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1207|  86.4k|        if (t <= 78)                                                                          \
  ------------------
  |  Branch (1207:13): [True: 86.4k, Folded]
  ------------------
 1208|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 78);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1209|  86.4k|        if (t <= 79)                                                                          \
  ------------------
  |  Branch (1209:13): [True: 86.4k, Folded]
  ------------------
 1210|  86.4k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 79);                       \
  ------------------
  |  |  181|  86.4k|    {                                                                  \
  |  |  182|  86.4k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  86.4k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  86.4k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  86.4k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  86.4k|    }
  ------------------
 1211|  86.4k|        ihvout[0] = ihvin[0] + a;                                                             \
 1212|  86.4k|        ihvout[1] = ihvin[1] + b;                                                             \
 1213|  86.4k|        ihvout[2] = ihvin[2] + c;                                                             \
 1214|  86.4k|        ihvout[3] = ihvin[3] + d;                                                             \
 1215|  86.4k|        ihvout[4] = ihvin[4] + e;                                                             \
 1216|  86.4k|    }
sha1.c:sha1recompress_fast_65:
  879|  21.5k|    {                                                                                         \
  880|  21.5k|        uint32_t a = state[0], b = state[1], c = state[2], d = state[3], e = state[4];        \
  881|  21.5k|        if (t > 79)                                                                           \
  ------------------
  |  Branch (881:13): [Folded, False: 21.5k]
  ------------------
  882|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 79);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  883|  21.5k|        if (t > 78)                                                                           \
  ------------------
  |  Branch (883:13): [Folded, False: 21.5k]
  ------------------
  884|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 78);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  885|  21.5k|        if (t > 77)                                                                           \
  ------------------
  |  Branch (885:13): [Folded, False: 21.5k]
  ------------------
  886|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 77);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  887|  21.5k|        if (t > 76)                                                                           \
  ------------------
  |  Branch (887:13): [Folded, False: 21.5k]
  ------------------
  888|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 76);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  889|  21.5k|        if (t > 75)                                                                           \
  ------------------
  |  Branch (889:13): [Folded, False: 21.5k]
  ------------------
  890|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 75);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  891|  21.5k|        if (t > 74)                                                                           \
  ------------------
  |  Branch (891:13): [Folded, False: 21.5k]
  ------------------
  892|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 74);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  893|  21.5k|        if (t > 73)                                                                           \
  ------------------
  |  Branch (893:13): [Folded, False: 21.5k]
  ------------------
  894|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 73);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  895|  21.5k|        if (t > 72)                                                                           \
  ------------------
  |  Branch (895:13): [Folded, False: 21.5k]
  ------------------
  896|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 72);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  897|  21.5k|        if (t > 71)                                                                           \
  ------------------
  |  Branch (897:13): [Folded, False: 21.5k]
  ------------------
  898|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 71);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  899|  21.5k|        if (t > 70)                                                                           \
  ------------------
  |  Branch (899:13): [Folded, False: 21.5k]
  ------------------
  900|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 70);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  901|  21.5k|        if (t > 69)                                                                           \
  ------------------
  |  Branch (901:13): [Folded, False: 21.5k]
  ------------------
  902|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 69);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  903|  21.5k|        if (t > 68)                                                                           \
  ------------------
  |  Branch (903:13): [Folded, False: 21.5k]
  ------------------
  904|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 68);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  905|  21.5k|        if (t > 67)                                                                           \
  ------------------
  |  Branch (905:13): [Folded, False: 21.5k]
  ------------------
  906|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 67);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  907|  21.5k|        if (t > 66)                                                                           \
  ------------------
  |  Branch (907:13): [Folded, False: 21.5k]
  ------------------
  908|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 66);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  909|  21.5k|        if (t > 65)                                                                           \
  ------------------
  |  Branch (909:13): [Folded, False: 21.5k]
  ------------------
  910|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 65);                    \
  ------------------
  |  |  202|      0|    {                                                                  \
  |  |  203|      0|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|      0|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|      0|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|      0|    }
  ------------------
  911|  21.5k|        if (t > 64)                                                                           \
  ------------------
  |  Branch (911:13): [True: 21.5k, Folded]
  ------------------
  912|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(b, c, d, e, a, me2, 64);                    \
  ------------------
  |  |  202|  21.5k|    {                                                                  \
  |  |  203|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|  21.5k|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|  21.5k|    }
  ------------------
  913|  21.5k|        if (t > 63)                                                                           \
  ------------------
  |  Branch (913:13): [True: 21.5k, Folded]
  ------------------
  914|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(c, d, e, a, b, me2, 63);                    \
  ------------------
  |  |  202|  21.5k|    {                                                                  \
  |  |  203|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|  21.5k|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|  21.5k|    }
  ------------------
  915|  21.5k|        if (t > 62)                                                                           \
  ------------------
  |  Branch (915:13): [True: 21.5k, Folded]
  ------------------
  916|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(d, e, a, b, c, me2, 62);                    \
  ------------------
  |  |  202|  21.5k|    {                                                                  \
  |  |  203|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|  21.5k|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|  21.5k|    }
  ------------------
  917|  21.5k|        if (t > 61)                                                                           \
  ------------------
  |  Branch (917:13): [True: 21.5k, Folded]
  ------------------
  918|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(e, a, b, c, d, me2, 61);                    \
  ------------------
  |  |  202|  21.5k|    {                                                                  \
  |  |  203|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|  21.5k|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|  21.5k|    }
  ------------------
  919|  21.5k|        if (t > 60)                                                                           \
  ------------------
  |  Branch (919:13): [True: 21.5k, Folded]
  ------------------
  920|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP_BW(a, b, c, d, e, me2, 60);                    \
  ------------------
  |  |  202|  21.5k|    {                                                                  \
  |  |  203|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  204|  21.5k|        e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  205|  21.5k|    }
  ------------------
  921|  21.5k|        if (t > 59)                                                                           \
  ------------------
  |  Branch (921:13): [True: 21.5k, Folded]
  ------------------
  922|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 59);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  923|  21.5k|        if (t > 58)                                                                           \
  ------------------
  |  Branch (923:13): [True: 21.5k, Folded]
  ------------------
  924|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 58);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  925|  21.5k|        if (t > 57)                                                                           \
  ------------------
  |  Branch (925:13): [True: 21.5k, Folded]
  ------------------
  926|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 57);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  927|  21.5k|        if (t > 56)                                                                           \
  ------------------
  |  Branch (927:13): [True: 21.5k, Folded]
  ------------------
  928|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 56);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  929|  21.5k|        if (t > 55)                                                                           \
  ------------------
  |  Branch (929:13): [True: 21.5k, Folded]
  ------------------
  930|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 55);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  931|  21.5k|        if (t > 54)                                                                           \
  ------------------
  |  Branch (931:13): [True: 21.5k, Folded]
  ------------------
  932|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 54);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  933|  21.5k|        if (t > 53)                                                                           \
  ------------------
  |  Branch (933:13): [True: 21.5k, Folded]
  ------------------
  934|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 53);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  935|  21.5k|        if (t > 52)                                                                           \
  ------------------
  |  Branch (935:13): [True: 21.5k, Folded]
  ------------------
  936|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 52);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  937|  21.5k|        if (t > 51)                                                                           \
  ------------------
  |  Branch (937:13): [True: 21.5k, Folded]
  ------------------
  938|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 51);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  939|  21.5k|        if (t > 50)                                                                           \
  ------------------
  |  Branch (939:13): [True: 21.5k, Folded]
  ------------------
  940|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 50);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  941|  21.5k|        if (t > 49)                                                                           \
  ------------------
  |  Branch (941:13): [True: 21.5k, Folded]
  ------------------
  942|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 49);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  943|  21.5k|        if (t > 48)                                                                           \
  ------------------
  |  Branch (943:13): [True: 21.5k, Folded]
  ------------------
  944|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 48);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  945|  21.5k|        if (t > 47)                                                                           \
  ------------------
  |  Branch (945:13): [True: 21.5k, Folded]
  ------------------
  946|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 47);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  947|  21.5k|        if (t > 46)                                                                           \
  ------------------
  |  Branch (947:13): [True: 21.5k, Folded]
  ------------------
  948|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 46);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  949|  21.5k|        if (t > 45)                                                                           \
  ------------------
  |  Branch (949:13): [True: 21.5k, Folded]
  ------------------
  950|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 45);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  951|  21.5k|        if (t > 44)                                                                           \
  ------------------
  |  Branch (951:13): [True: 21.5k, Folded]
  ------------------
  952|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(b, c, d, e, a, me2, 44);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  953|  21.5k|        if (t > 43)                                                                           \
  ------------------
  |  Branch (953:13): [True: 21.5k, Folded]
  ------------------
  954|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(c, d, e, a, b, me2, 43);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  955|  21.5k|        if (t > 42)                                                                           \
  ------------------
  |  Branch (955:13): [True: 21.5k, Folded]
  ------------------
  956|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(d, e, a, b, c, me2, 42);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  957|  21.5k|        if (t > 41)                                                                           \
  ------------------
  |  Branch (957:13): [True: 21.5k, Folded]
  ------------------
  958|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(e, a, b, c, d, me2, 41);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  959|  21.5k|        if (t > 40)                                                                           \
  ------------------
  |  Branch (959:13): [True: 21.5k, Folded]
  ------------------
  960|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP_BW(a, b, c, d, e, me2, 40);                    \
  ------------------
  |  |  197|  21.5k|    {                                                                  \
  |  |  198|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  199|  21.5k|        e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|  21.5k|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  200|  21.5k|    }
  ------------------
  961|  21.5k|        if (t > 39)                                                                           \
  ------------------
  |  Branch (961:13): [True: 21.5k, Folded]
  ------------------
  962|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 39);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  963|  21.5k|        if (t > 38)                                                                           \
  ------------------
  |  Branch (963:13): [True: 21.5k, Folded]
  ------------------
  964|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 38);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  965|  21.5k|        if (t > 37)                                                                           \
  ------------------
  |  Branch (965:13): [True: 21.5k, Folded]
  ------------------
  966|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 37);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  967|  21.5k|        if (t > 36)                                                                           \
  ------------------
  |  Branch (967:13): [True: 21.5k, Folded]
  ------------------
  968|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 36);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  969|  21.5k|        if (t > 35)                                                                           \
  ------------------
  |  Branch (969:13): [True: 21.5k, Folded]
  ------------------
  970|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 35);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  971|  21.5k|        if (t > 34)                                                                           \
  ------------------
  |  Branch (971:13): [True: 21.5k, Folded]
  ------------------
  972|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 34);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  973|  21.5k|        if (t > 33)                                                                           \
  ------------------
  |  Branch (973:13): [True: 21.5k, Folded]
  ------------------
  974|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 33);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  975|  21.5k|        if (t > 32)                                                                           \
  ------------------
  |  Branch (975:13): [True: 21.5k, Folded]
  ------------------
  976|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 32);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  977|  21.5k|        if (t > 31)                                                                           \
  ------------------
  |  Branch (977:13): [True: 21.5k, Folded]
  ------------------
  978|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 31);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  979|  21.5k|        if (t > 30)                                                                           \
  ------------------
  |  Branch (979:13): [True: 21.5k, Folded]
  ------------------
  980|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 30);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  981|  21.5k|        if (t > 29)                                                                           \
  ------------------
  |  Branch (981:13): [True: 21.5k, Folded]
  ------------------
  982|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 29);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  983|  21.5k|        if (t > 28)                                                                           \
  ------------------
  |  Branch (983:13): [True: 21.5k, Folded]
  ------------------
  984|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 28);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  985|  21.5k|        if (t > 27)                                                                           \
  ------------------
  |  Branch (985:13): [True: 21.5k, Folded]
  ------------------
  986|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 27);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  987|  21.5k|        if (t > 26)                                                                           \
  ------------------
  |  Branch (987:13): [True: 21.5k, Folded]
  ------------------
  988|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 26);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  989|  21.5k|        if (t > 25)                                                                           \
  ------------------
  |  Branch (989:13): [True: 21.5k, Folded]
  ------------------
  990|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 25);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  991|  21.5k|        if (t > 24)                                                                           \
  ------------------
  |  Branch (991:13): [True: 21.5k, Folded]
  ------------------
  992|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(b, c, d, e, a, me2, 24);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  993|  21.5k|        if (t > 23)                                                                           \
  ------------------
  |  Branch (993:13): [True: 21.5k, Folded]
  ------------------
  994|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(c, d, e, a, b, me2, 23);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  995|  21.5k|        if (t > 22)                                                                           \
  ------------------
  |  Branch (995:13): [True: 21.5k, Folded]
  ------------------
  996|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(d, e, a, b, c, me2, 22);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  997|  21.5k|        if (t > 21)                                                                           \
  ------------------
  |  Branch (997:13): [True: 21.5k, Folded]
  ------------------
  998|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(e, a, b, c, d, me2, 21);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
  999|  21.5k|        if (t > 20)                                                                           \
  ------------------
  |  Branch (999:13): [True: 21.5k, Folded]
  ------------------
 1000|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP_BW(a, b, c, d, e, me2, 20);                    \
  ------------------
  |  |  192|  21.5k|    {                                                                  \
  |  |  193|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  194|  21.5k|        e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|  21.5k|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  195|  21.5k|    }
  ------------------
 1001|  21.5k|        if (t > 19)                                                                           \
  ------------------
  |  Branch (1001:13): [True: 21.5k, Folded]
  ------------------
 1002|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 19);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1003|  21.5k|        if (t > 18)                                                                           \
  ------------------
  |  Branch (1003:13): [True: 21.5k, Folded]
  ------------------
 1004|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 18);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1005|  21.5k|        if (t > 17)                                                                           \
  ------------------
  |  Branch (1005:13): [True: 21.5k, Folded]
  ------------------
 1006|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 17);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1007|  21.5k|        if (t > 16)                                                                           \
  ------------------
  |  Branch (1007:13): [True: 21.5k, Folded]
  ------------------
 1008|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 16);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1009|  21.5k|        if (t > 15)                                                                           \
  ------------------
  |  Branch (1009:13): [True: 21.5k, Folded]
  ------------------
 1010|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 15);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1011|  21.5k|        if (t > 14)                                                                           \
  ------------------
  |  Branch (1011:13): [True: 21.5k, Folded]
  ------------------
 1012|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 14);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1013|  21.5k|        if (t > 13)                                                                           \
  ------------------
  |  Branch (1013:13): [True: 21.5k, Folded]
  ------------------
 1014|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 13);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1015|  21.5k|        if (t > 12)                                                                           \
  ------------------
  |  Branch (1015:13): [True: 21.5k, Folded]
  ------------------
 1016|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 12);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1017|  21.5k|        if (t > 11)                                                                           \
  ------------------
  |  Branch (1017:13): [True: 21.5k, Folded]
  ------------------
 1018|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 11);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1019|  21.5k|        if (t > 10)                                                                           \
  ------------------
  |  Branch (1019:13): [True: 21.5k, Folded]
  ------------------
 1020|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 10);                    \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1021|  21.5k|        if (t > 9)                                                                            \
  ------------------
  |  Branch (1021:13): [True: 21.5k, Folded]
  ------------------
 1022|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 9);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1023|  21.5k|        if (t > 8)                                                                            \
  ------------------
  |  Branch (1023:13): [True: 21.5k, Folded]
  ------------------
 1024|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 8);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1025|  21.5k|        if (t > 7)                                                                            \
  ------------------
  |  Branch (1025:13): [True: 21.5k, Folded]
  ------------------
 1026|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 7);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1027|  21.5k|        if (t > 6)                                                                            \
  ------------------
  |  Branch (1027:13): [True: 21.5k, Folded]
  ------------------
 1028|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 6);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1029|  21.5k|        if (t > 5)                                                                            \
  ------------------
  |  Branch (1029:13): [True: 21.5k, Folded]
  ------------------
 1030|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 5);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1031|  21.5k|        if (t > 4)                                                                            \
  ------------------
  |  Branch (1031:13): [True: 21.5k, Folded]
  ------------------
 1032|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(b, c, d, e, a, me2, 4);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1033|  21.5k|        if (t > 3)                                                                            \
  ------------------
  |  Branch (1033:13): [True: 21.5k, Folded]
  ------------------
 1034|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(c, d, e, a, b, me2, 3);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1035|  21.5k|        if (t > 2)                                                                            \
  ------------------
  |  Branch (1035:13): [True: 21.5k, Folded]
  ------------------
 1036|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(d, e, a, b, c, me2, 2);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1037|  21.5k|        if (t > 1)                                                                            \
  ------------------
  |  Branch (1037:13): [True: 21.5k, Folded]
  ------------------
 1038|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(e, a, b, c, d, me2, 1);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1039|  21.5k|        if (t > 0)                                                                            \
  ------------------
  |  Branch (1039:13): [True: 21.5k, Folded]
  ------------------
 1040|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP_BW(a, b, c, d, e, me2, 0);                     \
  ------------------
  |  |  187|  21.5k|    {                                                                  \
  |  |  188|  21.5k|        b = rotate_right(b, 30);                                       \
  |  |  ------------------
  |  |  |  |  134|  21.5k|#define rotate_right(x, n) (((x) >> (n)) | ((x) << (32 - (n))))
  |  |  ------------------
  |  |  189|  21.5k|        e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e -= rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|  21.5k|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  190|  21.5k|    }
  ------------------
 1041|  21.5k|        ihvin[0] = a;                                                                         \
 1042|  21.5k|        ihvin[1] = b;                                                                         \
 1043|  21.5k|        ihvin[2] = c;                                                                         \
 1044|  21.5k|        ihvin[3] = d;                                                                         \
 1045|  21.5k|        ihvin[4] = e;                                                                         \
 1046|  21.5k|        a = state[0];                                                                         \
 1047|  21.5k|        b = state[1];                                                                         \
 1048|  21.5k|        c = state[2];                                                                         \
 1049|  21.5k|        d = state[3];                                                                         \
 1050|  21.5k|        e = state[4];                                                                         \
 1051|  21.5k|        if (t <= 0)                                                                           \
  ------------------
  |  Branch (1051:13): [Folded, False: 21.5k]
  ------------------
 1052|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 0);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1053|  21.5k|        if (t <= 1)                                                                           \
  ------------------
  |  Branch (1053:13): [Folded, False: 21.5k]
  ------------------
 1054|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 1);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1055|  21.5k|        if (t <= 2)                                                                           \
  ------------------
  |  Branch (1055:13): [Folded, False: 21.5k]
  ------------------
 1056|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 2);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1057|  21.5k|        if (t <= 3)                                                                           \
  ------------------
  |  Branch (1057:13): [Folded, False: 21.5k]
  ------------------
 1058|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 3);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1059|  21.5k|        if (t <= 4)                                                                           \
  ------------------
  |  Branch (1059:13): [Folded, False: 21.5k]
  ------------------
 1060|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 4);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1061|  21.5k|        if (t <= 5)                                                                           \
  ------------------
  |  Branch (1061:13): [Folded, False: 21.5k]
  ------------------
 1062|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 5);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1063|  21.5k|        if (t <= 6)                                                                           \
  ------------------
  |  Branch (1063:13): [Folded, False: 21.5k]
  ------------------
 1064|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 6);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1065|  21.5k|        if (t <= 7)                                                                           \
  ------------------
  |  Branch (1065:13): [Folded, False: 21.5k]
  ------------------
 1066|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 7);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1067|  21.5k|        if (t <= 8)                                                                           \
  ------------------
  |  Branch (1067:13): [Folded, False: 21.5k]
  ------------------
 1068|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 8);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1069|  21.5k|        if (t <= 9)                                                                           \
  ------------------
  |  Branch (1069:13): [Folded, False: 21.5k]
  ------------------
 1070|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 9);                        \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1071|  21.5k|        if (t <= 10)                                                                          \
  ------------------
  |  Branch (1071:13): [Folded, False: 21.5k]
  ------------------
 1072|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 10);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1073|  21.5k|        if (t <= 11)                                                                          \
  ------------------
  |  Branch (1073:13): [Folded, False: 21.5k]
  ------------------
 1074|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 11);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1075|  21.5k|        if (t <= 12)                                                                          \
  ------------------
  |  Branch (1075:13): [Folded, False: 21.5k]
  ------------------
 1076|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 12);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1077|  21.5k|        if (t <= 13)                                                                          \
  ------------------
  |  Branch (1077:13): [Folded, False: 21.5k]
  ------------------
 1078|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 13);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1079|  21.5k|        if (t <= 14)                                                                          \
  ------------------
  |  Branch (1079:13): [Folded, False: 21.5k]
  ------------------
 1080|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 14);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1081|  21.5k|        if (t <= 15)                                                                          \
  ------------------
  |  Branch (1081:13): [Folded, False: 21.5k]
  ------------------
 1082|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(a, b, c, d, e, me2, 15);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1083|  21.5k|        if (t <= 16)                                                                          \
  ------------------
  |  Branch (1083:13): [Folded, False: 21.5k]
  ------------------
 1084|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(e, a, b, c, d, me2, 16);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1085|  21.5k|        if (t <= 17)                                                                          \
  ------------------
  |  Branch (1085:13): [Folded, False: 21.5k]
  ------------------
 1086|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(d, e, a, b, c, me2, 17);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1087|  21.5k|        if (t <= 18)                                                                          \
  ------------------
  |  Branch (1087:13): [Folded, False: 21.5k]
  ------------------
 1088|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(c, d, e, a, b, me2, 18);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1089|  21.5k|        if (t <= 19)                                                                          \
  ------------------
  |  Branch (1089:13): [Folded, False: 21.5k]
  ------------------
 1090|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND1_STEP(b, c, d, e, a, me2, 19);                       \
  ------------------
  |  |  166|      0|    {                                                                  \
  |  |  167|      0|        e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f1(b, c, d) + 0x5A827999 + m[t]; \
  |  |  ------------------
  |  |  |  |  160|      0|#define sha1_f1(b, c, d) ((d) ^ ((b) & ((c) ^ (d))))
  |  |  ------------------
  |  |  168|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  169|      0|    }
  ------------------
 1091|  21.5k|        if (t <= 20)                                                                          \
  ------------------
  |  Branch (1091:13): [Folded, False: 21.5k]
  ------------------
 1092|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 20);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1093|  21.5k|        if (t <= 21)                                                                          \
  ------------------
  |  Branch (1093:13): [Folded, False: 21.5k]
  ------------------
 1094|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 21);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1095|  21.5k|        if (t <= 22)                                                                          \
  ------------------
  |  Branch (1095:13): [Folded, False: 21.5k]
  ------------------
 1096|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 22);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1097|  21.5k|        if (t <= 23)                                                                          \
  ------------------
  |  Branch (1097:13): [Folded, False: 21.5k]
  ------------------
 1098|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 23);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1099|  21.5k|        if (t <= 24)                                                                          \
  ------------------
  |  Branch (1099:13): [Folded, False: 21.5k]
  ------------------
 1100|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 24);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1101|  21.5k|        if (t <= 25)                                                                          \
  ------------------
  |  Branch (1101:13): [Folded, False: 21.5k]
  ------------------
 1102|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 25);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1103|  21.5k|        if (t <= 26)                                                                          \
  ------------------
  |  Branch (1103:13): [Folded, False: 21.5k]
  ------------------
 1104|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 26);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1105|  21.5k|        if (t <= 27)                                                                          \
  ------------------
  |  Branch (1105:13): [Folded, False: 21.5k]
  ------------------
 1106|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 27);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1107|  21.5k|        if (t <= 28)                                                                          \
  ------------------
  |  Branch (1107:13): [Folded, False: 21.5k]
  ------------------
 1108|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 28);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1109|  21.5k|        if (t <= 29)                                                                          \
  ------------------
  |  Branch (1109:13): [Folded, False: 21.5k]
  ------------------
 1110|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 29);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1111|  21.5k|        if (t <= 30)                                                                          \
  ------------------
  |  Branch (1111:13): [Folded, False: 21.5k]
  ------------------
 1112|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 30);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1113|  21.5k|        if (t <= 31)                                                                          \
  ------------------
  |  Branch (1113:13): [Folded, False: 21.5k]
  ------------------
 1114|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 31);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1115|  21.5k|        if (t <= 32)                                                                          \
  ------------------
  |  Branch (1115:13): [Folded, False: 21.5k]
  ------------------
 1116|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 32);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1117|  21.5k|        if (t <= 33)                                                                          \
  ------------------
  |  Branch (1117:13): [Folded, False: 21.5k]
  ------------------
 1118|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 33);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1119|  21.5k|        if (t <= 34)                                                                          \
  ------------------
  |  Branch (1119:13): [Folded, False: 21.5k]
  ------------------
 1120|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 34);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1121|  21.5k|        if (t <= 35)                                                                          \
  ------------------
  |  Branch (1121:13): [Folded, False: 21.5k]
  ------------------
 1122|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(a, b, c, d, e, me2, 35);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1123|  21.5k|        if (t <= 36)                                                                          \
  ------------------
  |  Branch (1123:13): [Folded, False: 21.5k]
  ------------------
 1124|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(e, a, b, c, d, me2, 36);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1125|  21.5k|        if (t <= 37)                                                                          \
  ------------------
  |  Branch (1125:13): [Folded, False: 21.5k]
  ------------------
 1126|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(d, e, a, b, c, me2, 37);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1127|  21.5k|        if (t <= 38)                                                                          \
  ------------------
  |  Branch (1127:13): [Folded, False: 21.5k]
  ------------------
 1128|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(c, d, e, a, b, me2, 38);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1129|  21.5k|        if (t <= 39)                                                                          \
  ------------------
  |  Branch (1129:13): [Folded, False: 21.5k]
  ------------------
 1130|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND2_STEP(b, c, d, e, a, me2, 39);                       \
  ------------------
  |  |  171|      0|    {                                                                  \
  |  |  172|      0|        e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f2(b, c, d) + 0x6ED9EBA1 + m[t]; \
  |  |  ------------------
  |  |  |  |  161|      0|#define sha1_f2(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  173|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  174|      0|    }
  ------------------
 1131|  21.5k|        if (t <= 40)                                                                          \
  ------------------
  |  Branch (1131:13): [Folded, False: 21.5k]
  ------------------
 1132|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 40);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1133|  21.5k|        if (t <= 41)                                                                          \
  ------------------
  |  Branch (1133:13): [Folded, False: 21.5k]
  ------------------
 1134|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 41);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1135|  21.5k|        if (t <= 42)                                                                          \
  ------------------
  |  Branch (1135:13): [Folded, False: 21.5k]
  ------------------
 1136|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 42);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1137|  21.5k|        if (t <= 43)                                                                          \
  ------------------
  |  Branch (1137:13): [Folded, False: 21.5k]
  ------------------
 1138|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 43);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1139|  21.5k|        if (t <= 44)                                                                          \
  ------------------
  |  Branch (1139:13): [Folded, False: 21.5k]
  ------------------
 1140|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 44);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1141|  21.5k|        if (t <= 45)                                                                          \
  ------------------
  |  Branch (1141:13): [Folded, False: 21.5k]
  ------------------
 1142|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 45);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1143|  21.5k|        if (t <= 46)                                                                          \
  ------------------
  |  Branch (1143:13): [Folded, False: 21.5k]
  ------------------
 1144|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 46);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1145|  21.5k|        if (t <= 47)                                                                          \
  ------------------
  |  Branch (1145:13): [Folded, False: 21.5k]
  ------------------
 1146|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 47);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1147|  21.5k|        if (t <= 48)                                                                          \
  ------------------
  |  Branch (1147:13): [Folded, False: 21.5k]
  ------------------
 1148|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 48);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1149|  21.5k|        if (t <= 49)                                                                          \
  ------------------
  |  Branch (1149:13): [Folded, False: 21.5k]
  ------------------
 1150|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 49);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1151|  21.5k|        if (t <= 50)                                                                          \
  ------------------
  |  Branch (1151:13): [Folded, False: 21.5k]
  ------------------
 1152|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 50);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1153|  21.5k|        if (t <= 51)                                                                          \
  ------------------
  |  Branch (1153:13): [Folded, False: 21.5k]
  ------------------
 1154|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 51);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1155|  21.5k|        if (t <= 52)                                                                          \
  ------------------
  |  Branch (1155:13): [Folded, False: 21.5k]
  ------------------
 1156|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 52);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1157|  21.5k|        if (t <= 53)                                                                          \
  ------------------
  |  Branch (1157:13): [Folded, False: 21.5k]
  ------------------
 1158|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 53);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1159|  21.5k|        if (t <= 54)                                                                          \
  ------------------
  |  Branch (1159:13): [Folded, False: 21.5k]
  ------------------
 1160|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 54);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1161|  21.5k|        if (t <= 55)                                                                          \
  ------------------
  |  Branch (1161:13): [Folded, False: 21.5k]
  ------------------
 1162|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(a, b, c, d, e, me2, 55);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1163|  21.5k|        if (t <= 56)                                                                          \
  ------------------
  |  Branch (1163:13): [Folded, False: 21.5k]
  ------------------
 1164|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(e, a, b, c, d, me2, 56);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1165|  21.5k|        if (t <= 57)                                                                          \
  ------------------
  |  Branch (1165:13): [Folded, False: 21.5k]
  ------------------
 1166|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(d, e, a, b, c, me2, 57);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1167|  21.5k|        if (t <= 58)                                                                          \
  ------------------
  |  Branch (1167:13): [Folded, False: 21.5k]
  ------------------
 1168|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(c, d, e, a, b, me2, 58);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1169|  21.5k|        if (t <= 59)                                                                          \
  ------------------
  |  Branch (1169:13): [Folded, False: 21.5k]
  ------------------
 1170|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND3_STEP(b, c, d, e, a, me2, 59);                       \
  ------------------
  |  |  176|      0|    {                                                                  \
  |  |  177|      0|        e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f3(b, c, d) + 0x8F1BBCDC + m[t]; \
  |  |  ------------------
  |  |  |  |  162|      0|#define sha1_f3(b, c, d) (((b) & (c)) + ((d) & ((b) ^ (c))))
  |  |  ------------------
  |  |  178|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  179|      0|    }
  ------------------
 1171|  21.5k|        if (t <= 60)                                                                          \
  ------------------
  |  Branch (1171:13): [Folded, False: 21.5k]
  ------------------
 1172|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 60);                       \
  ------------------
  |  |  181|      0|    {                                                                  \
  |  |  182|      0|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|      0|    }
  ------------------
 1173|  21.5k|        if (t <= 61)                                                                          \
  ------------------
  |  Branch (1173:13): [Folded, False: 21.5k]
  ------------------
 1174|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 61);                       \
  ------------------
  |  |  181|      0|    {                                                                  \
  |  |  182|      0|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|      0|    }
  ------------------
 1175|  21.5k|        if (t <= 62)                                                                          \
  ------------------
  |  Branch (1175:13): [Folded, False: 21.5k]
  ------------------
 1176|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 62);                       \
  ------------------
  |  |  181|      0|    {                                                                  \
  |  |  182|      0|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|      0|    }
  ------------------
 1177|  21.5k|        if (t <= 63)                                                                          \
  ------------------
  |  Branch (1177:13): [Folded, False: 21.5k]
  ------------------
 1178|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 63);                       \
  ------------------
  |  |  181|      0|    {                                                                  \
  |  |  182|      0|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|      0|    }
  ------------------
 1179|  21.5k|        if (t <= 64)                                                                          \
  ------------------
  |  Branch (1179:13): [Folded, False: 21.5k]
  ------------------
 1180|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 64);                       \
  ------------------
  |  |  181|      0|    {                                                                  \
  |  |  182|      0|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|      0|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|      0|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|      0|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|      0|    }
  ------------------
 1181|  21.5k|        if (t <= 65)                                                                          \
  ------------------
  |  Branch (1181:13): [True: 21.5k, Folded]
  ------------------
 1182|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 65);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1183|  21.5k|        if (t <= 66)                                                                          \
  ------------------
  |  Branch (1183:13): [True: 21.5k, Folded]
  ------------------
 1184|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 66);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1185|  21.5k|        if (t <= 67)                                                                          \
  ------------------
  |  Branch (1185:13): [True: 21.5k, Folded]
  ------------------
 1186|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 67);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1187|  21.5k|        if (t <= 68)                                                                          \
  ------------------
  |  Branch (1187:13): [True: 21.5k, Folded]
  ------------------
 1188|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 68);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1189|  21.5k|        if (t <= 69)                                                                          \
  ------------------
  |  Branch (1189:13): [True: 21.5k, Folded]
  ------------------
 1190|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 69);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1191|  21.5k|        if (t <= 70)                                                                          \
  ------------------
  |  Branch (1191:13): [True: 21.5k, Folded]
  ------------------
 1192|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 70);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1193|  21.5k|        if (t <= 71)                                                                          \
  ------------------
  |  Branch (1193:13): [True: 21.5k, Folded]
  ------------------
 1194|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 71);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1195|  21.5k|        if (t <= 72)                                                                          \
  ------------------
  |  Branch (1195:13): [True: 21.5k, Folded]
  ------------------
 1196|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 72);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1197|  21.5k|        if (t <= 73)                                                                          \
  ------------------
  |  Branch (1197:13): [True: 21.5k, Folded]
  ------------------
 1198|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 73);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1199|  21.5k|        if (t <= 74)                                                                          \
  ------------------
  |  Branch (1199:13): [True: 21.5k, Folded]
  ------------------
 1200|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 74);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1201|  21.5k|        if (t <= 75)                                                                          \
  ------------------
  |  Branch (1201:13): [True: 21.5k, Folded]
  ------------------
 1202|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(a, b, c, d, e, me2, 75);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1203|  21.5k|        if (t <= 76)                                                                          \
  ------------------
  |  Branch (1203:13): [True: 21.5k, Folded]
  ------------------
 1204|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(e, a, b, c, d, me2, 76);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1205|  21.5k|        if (t <= 77)                                                                          \
  ------------------
  |  Branch (1205:13): [True: 21.5k, Folded]
  ------------------
 1206|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(d, e, a, b, c, me2, 77);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1207|  21.5k|        if (t <= 78)                                                                          \
  ------------------
  |  Branch (1207:13): [True: 21.5k, Folded]
  ------------------
 1208|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(c, d, e, a, b, me2, 78);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1209|  21.5k|        if (t <= 79)                                                                          \
  ------------------
  |  Branch (1209:13): [True: 21.5k, Folded]
  ------------------
 1210|  21.5k|            HASHCLASH_SHA1COMPRESS_ROUND4_STEP(b, c, d, e, a, me2, 79);                       \
  ------------------
  |  |  181|  21.5k|    {                                                                  \
  |  |  182|  21.5k|        e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |                       e += rotate_left(a, 5) + sha1_f4(b, c, d) + 0xCA62C1D6 + m[t]; \
  |  |  ------------------
  |  |  |  |  163|  21.5k|#define sha1_f4(b, c, d) ((b) ^ (c) ^ (d))
  |  |  ------------------
  |  |  183|  21.5k|        b = rotate_left(b, 30);                                        \
  |  |  ------------------
  |  |  |  |  135|  21.5k|#define rotate_left(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
  |  |  ------------------
  |  |  184|  21.5k|    }
  ------------------
 1211|  21.5k|        ihvout[0] = ihvin[0] + a;                                                             \
 1212|  21.5k|        ihvout[1] = ihvin[1] + b;                                                             \
 1213|  21.5k|        ihvout[2] = ihvin[2] + c;                                                             \
 1214|  21.5k|        ihvout[3] = ihvin[3] + d;                                                             \
 1215|  21.5k|        ihvout[4] = ihvin[4] + e;                                                             \
 1216|  21.5k|    }

ubc_check:
  571|  1.70M|{
  572|  1.70M|    uint32_t mask = ~((uint32_t)(0));
  573|  1.70M|    mask &= (((((W[44] ^ W[45]) >> 29) & 1) - 1) |
  574|  1.70M|             ~(DV_I_48_0_bit | DV_I_51_0_bit | DV_I_52_0_bit | DV_II_45_0_bit |
  575|  1.70M|               DV_II_46_0_bit | DV_II_50_0_bit | DV_II_51_0_bit));
  576|  1.70M|    mask &= (((((W[49] ^ W[50]) >> 29) & 1) - 1) |
  577|  1.70M|             ~(DV_I_46_0_bit | DV_II_45_0_bit | DV_II_50_0_bit | DV_II_51_0_bit |
  578|  1.70M|               DV_II_55_0_bit | DV_II_56_0_bit));
  579|  1.70M|    mask &= (((((W[48] ^ W[49]) >> 29) & 1) - 1) |
  580|  1.70M|             ~(DV_I_45_0_bit | DV_I_52_0_bit | DV_II_49_0_bit | DV_II_50_0_bit |
  581|  1.70M|               DV_II_54_0_bit | DV_II_55_0_bit));
  582|  1.70M|    mask &= ((((W[47] ^ (W[50] >> 25)) & (1 << 4)) - (1 << 4)) |
  583|  1.70M|             ~(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit |
  584|  1.70M|               DV_II_51_0_bit | DV_II_56_0_bit));
  585|  1.70M|    mask &= (((((W[47] ^ W[48]) >> 29) & 1) - 1) |
  586|  1.70M|             ~(DV_I_44_0_bit | DV_I_51_0_bit | DV_II_48_0_bit | DV_II_49_0_bit |
  587|  1.70M|               DV_II_53_0_bit | DV_II_54_0_bit));
  588|  1.70M|    mask &= (((((W[46] >> 4) ^ (W[49] >> 29)) & 1) - 1) |
  589|  1.70M|             ~(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit | DV_II_50_0_bit |
  590|  1.70M|               DV_II_55_0_bit));
  591|  1.70M|    mask &= (((((W[46] ^ W[47]) >> 29) & 1) - 1) |
  592|  1.70M|             ~(DV_I_43_0_bit | DV_I_50_0_bit | DV_II_47_0_bit | DV_II_48_0_bit |
  593|  1.70M|               DV_II_52_0_bit | DV_II_53_0_bit));
  594|  1.70M|    mask &= (((((W[45] >> 4) ^ (W[48] >> 29)) & 1) - 1) |
  595|  1.70M|             ~(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit | DV_II_49_0_bit |
  596|  1.70M|               DV_II_54_0_bit));
  597|  1.70M|    mask &= (((((W[45] ^ W[46]) >> 29) & 1) - 1) |
  598|  1.70M|             ~(DV_I_49_0_bit | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_47_0_bit |
  599|  1.70M|               DV_II_51_0_bit | DV_II_52_0_bit));
  600|  1.70M|    mask &= (((((W[44] >> 4) ^ (W[47] >> 29)) & 1) - 1) |
  601|  1.70M|             ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit | DV_II_48_0_bit |
  602|  1.70M|               DV_II_53_0_bit));
  603|  1.70M|    mask &= (((((W[43] >> 4) ^ (W[46] >> 29)) & 1) - 1) |
  604|  1.70M|             ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit | DV_II_47_0_bit |
  605|  1.70M|               DV_II_52_0_bit));
  606|  1.70M|    mask &= (((((W[43] ^ W[44]) >> 29) & 1) - 1) |
  607|  1.70M|             ~(DV_I_47_0_bit | DV_I_50_0_bit | DV_I_51_0_bit | DV_II_45_0_bit |
  608|  1.70M|               DV_II_49_0_bit | DV_II_50_0_bit));
  609|  1.70M|    mask &= (((((W[42] >> 4) ^ (W[45] >> 29)) & 1) - 1) |
  610|  1.70M|             ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit | DV_I_52_0_bit | DV_II_46_0_bit |
  611|  1.70M|               DV_II_51_0_bit));
  612|  1.70M|    mask &= (((((W[41] >> 4) ^ (W[44] >> 29)) & 1) - 1) |
  613|  1.70M|             ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit | DV_I_51_0_bit | DV_II_45_0_bit |
  614|  1.70M|               DV_II_50_0_bit));
  615|  1.70M|    mask &= (((((W[40] ^ W[41]) >> 29) & 1) - 1) |
  616|  1.70M|             ~(DV_I_44_0_bit | DV_I_47_0_bit | DV_I_48_0_bit | DV_II_46_0_bit |
  617|  1.70M|               DV_II_47_0_bit | DV_II_56_0_bit));
  618|  1.70M|    mask &=
  619|  1.70M|      (((((W[54] ^ W[55]) >> 29) & 1) - 1) |
  620|  1.70M|       ~(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_50_0_bit | DV_II_55_0_bit | DV_II_56_0_bit));
  621|  1.70M|    mask &=
  622|  1.70M|      (((((W[53] ^ W[54]) >> 29) & 1) - 1) |
  623|  1.70M|       ~(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_49_0_bit | DV_II_54_0_bit | DV_II_55_0_bit));
  624|  1.70M|    mask &=
  625|  1.70M|      (((((W[52] ^ W[53]) >> 29) & 1) - 1) |
  626|  1.70M|       ~(DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit | DV_II_53_0_bit | DV_II_54_0_bit));
  627|  1.70M|    mask &=
  628|  1.70M|      ((((W[50] ^ (W[53] >> 25)) & (1 << 4)) - (1 << 4)) |
  629|  1.70M|       ~(DV_I_50_0_bit | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_48_0_bit | DV_II_54_0_bit));
  630|  1.70M|    mask &=
  631|  1.70M|      (((((W[50] ^ W[51]) >> 29) & 1) - 1) |
  632|  1.70M|       ~(DV_I_47_0_bit | DV_II_46_0_bit | DV_II_51_0_bit | DV_II_52_0_bit | DV_II_56_0_bit));
  633|  1.70M|    mask &=
  634|  1.70M|      ((((W[49] ^ (W[52] >> 25)) & (1 << 4)) - (1 << 4)) |
  635|  1.70M|       ~(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit | DV_II_47_0_bit | DV_II_53_0_bit));
  636|  1.70M|    mask &=
  637|  1.70M|      ((((W[48] ^ (W[51] >> 25)) & (1 << 4)) - (1 << 4)) |
  638|  1.70M|       ~(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit | DV_II_46_0_bit | DV_II_52_0_bit));
  639|  1.70M|    mask &=
  640|  1.70M|      (((((W[42] ^ W[43]) >> 29) & 1) - 1) |
  641|  1.70M|       ~(DV_I_46_0_bit | DV_I_49_0_bit | DV_I_50_0_bit | DV_II_48_0_bit | DV_II_49_0_bit));
  642|  1.70M|    mask &=
  643|  1.70M|      (((((W[41] ^ W[42]) >> 29) & 1) - 1) |
  644|  1.70M|       ~(DV_I_45_0_bit | DV_I_48_0_bit | DV_I_49_0_bit | DV_II_47_0_bit | DV_II_48_0_bit));
  645|  1.70M|    mask &=
  646|  1.70M|      (((((W[40] >> 4) ^ (W[43] >> 29)) & 1) - 1) |
  647|  1.70M|       ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_50_0_bit | DV_II_49_0_bit | DV_II_56_0_bit));
  648|  1.70M|    mask &=
  649|  1.70M|      (((((W[39] >> 4) ^ (W[42] >> 29)) & 1) - 1) |
  650|  1.70M|       ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_49_0_bit | DV_II_48_0_bit | DV_II_55_0_bit));
  651|  1.70M|    if (mask &
  ------------------
  |  Branch (651:9): [True: 191k, False: 1.51M]
  ------------------
  652|  1.70M|        (DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit | DV_II_54_0_bit | DV_II_56_0_bit))
  653|   191k|        mask &= (((((W[38] >> 4) ^ (W[41] >> 29)) & 1) - 1) |
  654|   191k|                 ~(DV_I_44_0_bit | DV_I_48_0_bit | DV_II_47_0_bit | DV_II_54_0_bit |
  655|   191k|                   DV_II_56_0_bit));
  656|  1.70M|    mask &=
  657|  1.70M|      (((((W[37] >> 4) ^ (W[40] >> 29)) & 1) - 1) |
  658|  1.70M|       ~(DV_I_43_0_bit | DV_I_47_0_bit | DV_II_46_0_bit | DV_II_53_0_bit | DV_II_55_0_bit));
  659|  1.70M|    if (mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_51_0_bit | DV_II_56_0_bit))
  ------------------
  |  Branch (659:9): [True: 96.2k, False: 1.61M]
  ------------------
  660|  96.2k|        mask &= (((((W[55] ^ W[56]) >> 29) & 1) - 1) |
  661|  96.2k|                 ~(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_51_0_bit | DV_II_56_0_bit));
  662|  1.70M|    if (mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit | DV_II_56_0_bit))
  ------------------
  |  Branch (662:9): [True: 88.7k, False: 1.61M]
  ------------------
  663|  88.7k|        mask &= ((((W[52] ^ (W[55] >> 25)) & (1 << 4)) - (1 << 4)) |
  664|  88.7k|                 ~(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_50_0_bit | DV_II_56_0_bit));
  665|  1.70M|    if (mask & (DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit | DV_II_55_0_bit))
  ------------------
  |  Branch (665:9): [True: 82.2k, False: 1.62M]
  ------------------
  666|  82.2k|        mask &= ((((W[51] ^ (W[54] >> 25)) & (1 << 4)) - (1 << 4)) |
  667|  82.2k|                 ~(DV_I_51_0_bit | DV_II_47_0_bit | DV_II_49_0_bit | DV_II_55_0_bit));
  668|  1.70M|    if (mask & (DV_I_48_0_bit | DV_II_47_0_bit | DV_II_52_0_bit | DV_II_53_0_bit))
  ------------------
  |  Branch (668:9): [True: 133k, False: 1.57M]
  ------------------
  669|   133k|        mask &= (((((W[51] ^ W[52]) >> 29) & 1) - 1) |
  670|   133k|                 ~(DV_I_48_0_bit | DV_II_47_0_bit | DV_II_52_0_bit | DV_II_53_0_bit));
  671|  1.70M|    if (mask & (DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit))
  ------------------
  |  Branch (671:9): [True: 85.1k, False: 1.62M]
  ------------------
  672|  85.1k|        mask &= (((((W[36] >> 4) ^ (W[40] >> 29)) & 1) - 1) |
  673|  85.1k|                 ~(DV_I_46_0_bit | DV_I_49_0_bit | DV_II_45_0_bit | DV_II_48_0_bit));
  674|  1.70M|    if (mask & (DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit))
  ------------------
  |  Branch (674:9): [True: 46.6k, False: 1.65M]
  ------------------
  675|  46.6k|        mask &= ((0 - (((W[53] ^ W[56]) >> 29) & 1)) |
  676|  46.6k|                 ~(DV_I_52_0_bit | DV_II_48_0_bit | DV_II_49_0_bit));
  677|  1.70M|    if (mask & (DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit))
  ------------------
  |  Branch (677:9): [True: 48.4k, False: 1.65M]
  ------------------
  678|  48.4k|        mask &= ((0 - (((W[51] ^ W[54]) >> 29) & 1)) |
  679|  48.4k|                 ~(DV_I_50_0_bit | DV_II_46_0_bit | DV_II_47_0_bit));
  680|  1.70M|    if (mask & (DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit))
  ------------------
  |  Branch (680:9): [True: 50.8k, False: 1.65M]
  ------------------
  681|  50.8k|        mask &= ((0 - (((W[50] ^ W[52]) >> 29) & 1)) |
  682|  50.8k|                 ~(DV_I_49_0_bit | DV_I_51_0_bit | DV_II_45_0_bit));
  683|  1.70M|    if (mask & (DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit))
  ------------------
  |  Branch (683:9): [True: 37.2k, False: 1.66M]
  ------------------
  684|  37.2k|        mask &= ((0 - (((W[49] ^ W[51]) >> 29) & 1)) |
  685|  37.2k|                 ~(DV_I_48_0_bit | DV_I_50_0_bit | DV_I_52_0_bit));
  686|  1.70M|    if (mask & (DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit))
  ------------------
  |  Branch (686:9): [True: 49.0k, False: 1.65M]
  ------------------
  687|  49.0k|        mask &= ((0 - (((W[48] ^ W[50]) >> 29) & 1)) |
  688|  49.0k|                 ~(DV_I_47_0_bit | DV_I_49_0_bit | DV_I_51_0_bit));
  689|  1.70M|    if (mask & (DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit))
  ------------------
  |  Branch (689:9): [True: 50.3k, False: 1.65M]
  ------------------
  690|  50.3k|        mask &= ((0 - (((W[47] ^ W[49]) >> 29) & 1)) |
  691|  50.3k|                 ~(DV_I_46_0_bit | DV_I_48_0_bit | DV_I_50_0_bit));
  692|  1.70M|    if (mask & (DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit))
  ------------------
  |  Branch (692:9): [True: 69.3k, False: 1.63M]
  ------------------
  693|  69.3k|        mask &= ((0 - (((W[46] ^ W[48]) >> 29) & 1)) |
  694|  69.3k|                 ~(DV_I_45_0_bit | DV_I_47_0_bit | DV_I_49_0_bit));
  695|  1.70M|    mask &= ((((W[45] ^ W[47]) & (1 << 6)) - (1 << 6)) |
  696|  1.70M|             ~(DV_I_47_2_bit | DV_I_49_2_bit | DV_I_51_2_bit));
  697|  1.70M|    if (mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit))
  ------------------
  |  Branch (697:9): [True: 101k, False: 1.60M]
  ------------------
  698|   101k|        mask &= ((0 - (((W[45] ^ W[47]) >> 29) & 1)) |
  699|   101k|                 ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_I_48_0_bit));
  700|  1.70M|    mask &=
  701|  1.70M|      (((((W[44] ^ W[46]) >> 6) & 1) - 1) | ~(DV_I_46_2_bit | DV_I_48_2_bit | DV_I_50_2_bit));
  702|  1.70M|    if (mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit))
  ------------------
  |  Branch (702:9): [True: 112k, False: 1.59M]
  ------------------
  703|   112k|        mask &= ((0 - (((W[44] ^ W[46]) >> 29) & 1)) |
  704|   112k|                 ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_I_47_0_bit));
  705|  1.70M|    mask &= ((0 - ((W[41] ^ (W[42] >> 5)) & (1 << 1))) |
  706|  1.70M|             ~(DV_I_48_2_bit | DV_II_46_2_bit | DV_II_51_2_bit));
  707|  1.70M|    mask &= ((0 - ((W[40] ^ (W[41] >> 5)) & (1 << 1))) |
  708|  1.70M|             ~(DV_I_47_2_bit | DV_I_51_2_bit | DV_II_50_2_bit));
  709|  1.70M|    if (mask & (DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit))
  ------------------
  |  Branch (709:9): [True: 58.6k, False: 1.64M]
  ------------------
  710|  58.6k|        mask &= ((0 - (((W[40] ^ W[42]) >> 4) & 1)) |
  711|  58.6k|                 ~(DV_I_44_0_bit | DV_I_46_0_bit | DV_II_56_0_bit));
  712|  1.70M|    mask &= ((0 - ((W[39] ^ (W[40] >> 5)) & (1 << 1))) |
  713|  1.70M|             ~(DV_I_46_2_bit | DV_I_50_2_bit | DV_II_49_2_bit));
  714|  1.70M|    if (mask & (DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit))
  ------------------
  |  Branch (714:9): [True: 78.6k, False: 1.62M]
  ------------------
  715|  78.6k|        mask &= ((0 - (((W[39] ^ W[41]) >> 4) & 1)) |
  716|  78.6k|                 ~(DV_I_43_0_bit | DV_I_45_0_bit | DV_II_55_0_bit));
  717|  1.70M|    if (mask & (DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit))
  ------------------
  |  Branch (717:9): [True: 96.5k, False: 1.60M]
  ------------------
  718|  96.5k|        mask &= ((0 - (((W[38] ^ W[40]) >> 4) & 1)) |
  719|  96.5k|                 ~(DV_I_44_0_bit | DV_II_54_0_bit | DV_II_56_0_bit));
  720|  1.70M|    if (mask & (DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit))
  ------------------
  |  Branch (720:9): [True: 66.8k, False: 1.63M]
  ------------------
  721|  66.8k|        mask &= ((0 - (((W[37] ^ W[39]) >> 4) & 1)) |
  722|  66.8k|                 ~(DV_I_43_0_bit | DV_II_53_0_bit | DV_II_55_0_bit));
  723|  1.70M|    mask &= ((0 - ((W[36] ^ (W[37] >> 5)) & (1 << 1))) |
  724|  1.70M|             ~(DV_I_47_2_bit | DV_I_50_2_bit | DV_II_46_2_bit));
  725|  1.70M|    if (mask & (DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit))
  ------------------
  |  Branch (725:9): [True: 9.13k, False: 1.69M]
  ------------------
  726|  9.13k|        mask &= (((((W[35] >> 4) ^ (W[39] >> 29)) & 1) - 1) |
  727|  9.13k|                 ~(DV_I_45_0_bit | DV_I_48_0_bit | DV_II_47_0_bit));
  728|  1.70M|    if (mask & (DV_I_48_0_bit | DV_II_48_0_bit))
  ------------------
  |  Branch (728:9): [True: 1.00k, False: 1.70M]
  ------------------
  729|  1.00k|        mask &=
  730|  1.00k|          ((0 - ((W[63] ^ (W[64] >> 5)) & (1 << 0))) | ~(DV_I_48_0_bit | DV_II_48_0_bit));
  731|  1.70M|    if (mask & (DV_I_45_0_bit | DV_II_45_0_bit))
  ------------------
  |  Branch (731:9): [True: 8.66k, False: 1.69M]
  ------------------
  732|  8.66k|        mask &=
  733|  8.66k|          ((0 - ((W[63] ^ (W[64] >> 5)) & (1 << 1))) | ~(DV_I_45_0_bit | DV_II_45_0_bit));
  734|  1.70M|    if (mask & (DV_I_47_0_bit | DV_II_47_0_bit))
  ------------------
  |  Branch (734:9): [True: 2.65k, False: 1.70M]
  ------------------
  735|  2.65k|        mask &=
  736|  2.65k|          ((0 - ((W[62] ^ (W[63] >> 5)) & (1 << 0))) | ~(DV_I_47_0_bit | DV_II_47_0_bit));
  737|  1.70M|    if (mask & (DV_I_46_0_bit | DV_II_46_0_bit))
  ------------------
  |  Branch (737:9): [True: 6.79k, False: 1.69M]
  ------------------
  738|  6.79k|        mask &=
  739|  6.79k|          ((0 - ((W[61] ^ (W[62] >> 5)) & (1 << 0))) | ~(DV_I_46_0_bit | DV_II_46_0_bit));
  740|  1.70M|    mask &= ((0 - ((W[61] ^ (W[62] >> 5)) & (1 << 2))) | ~(DV_I_46_2_bit | DV_II_46_2_bit));
  741|  1.70M|    if (mask & (DV_I_45_0_bit | DV_II_45_0_bit))
  ------------------
  |  Branch (741:9): [True: 7.38k, False: 1.69M]
  ------------------
  742|  7.38k|        mask &=
  743|  7.38k|          ((0 - ((W[60] ^ (W[61] >> 5)) & (1 << 0))) | ~(DV_I_45_0_bit | DV_II_45_0_bit));
  744|  1.70M|    if (mask & (DV_II_51_0_bit | DV_II_54_0_bit))
  ------------------
  |  Branch (744:9): [True: 61.7k, False: 1.64M]
  ------------------
  745|  61.7k|        mask &= (((((W[58] ^ W[59]) >> 29) & 1) - 1) | ~(DV_II_51_0_bit | DV_II_54_0_bit));
  746|  1.70M|    if (mask & (DV_II_50_0_bit | DV_II_53_0_bit))
  ------------------
  |  Branch (746:9): [True: 67.8k, False: 1.63M]
  ------------------
  747|  67.8k|        mask &= (((((W[57] ^ W[58]) >> 29) & 1) - 1) | ~(DV_II_50_0_bit | DV_II_53_0_bit));
  748|  1.70M|    if (mask & (DV_II_52_0_bit | DV_II_54_0_bit))
  ------------------
  |  Branch (748:9): [True: 54.7k, False: 1.65M]
  ------------------
  749|  54.7k|        mask &= ((((W[56] ^ (W[59] >> 25)) & (1 << 4)) - (1 << 4)) |
  750|  54.7k|                 ~(DV_II_52_0_bit | DV_II_54_0_bit));
  751|  1.70M|    if (mask & (DV_II_51_0_bit | DV_II_52_0_bit))
  ------------------
  |  Branch (751:9): [True: 58.5k, False: 1.64M]
  ------------------
  752|  58.5k|        mask &= ((0 - (((W[56] ^ W[59]) >> 29) & 1)) | ~(DV_II_51_0_bit | DV_II_52_0_bit));
  753|  1.70M|    if (mask & (DV_II_49_0_bit | DV_II_52_0_bit))
  ------------------
  |  Branch (753:9): [True: 9.94k, False: 1.69M]
  ------------------
  754|  9.94k|        mask &= (((((W[56] ^ W[57]) >> 29) & 1) - 1) | ~(DV_II_49_0_bit | DV_II_52_0_bit));
  755|  1.70M|    if (mask & (DV_II_51_0_bit | DV_II_53_0_bit))
  ------------------
  |  Branch (755:9): [True: 6.87k, False: 1.69M]
  ------------------
  756|  6.87k|        mask &= ((((W[55] ^ (W[58] >> 25)) & (1 << 4)) - (1 << 4)) |
  757|  6.87k|                 ~(DV_II_51_0_bit | DV_II_53_0_bit));
  758|  1.70M|    if (mask & (DV_II_50_0_bit | DV_II_52_0_bit))
  ------------------
  |  Branch (758:9): [True: 64.6k, False: 1.64M]
  ------------------
  759|  64.6k|        mask &= ((((W[54] ^ (W[57] >> 25)) & (1 << 4)) - (1 << 4)) |
  760|  64.6k|                 ~(DV_II_50_0_bit | DV_II_52_0_bit));
  761|  1.70M|    if (mask & (DV_II_49_0_bit | DV_II_51_0_bit))
  ------------------
  |  Branch (761:9): [True: 7.57k, False: 1.69M]
  ------------------
  762|  7.57k|        mask &= ((((W[53] ^ (W[56] >> 25)) & (1 << 4)) - (1 << 4)) |
  763|  7.57k|                 ~(DV_II_49_0_bit | DV_II_51_0_bit));
  764|  1.70M|    mask &=
  765|  1.70M|      ((((W[51] ^ (W[50] >> 5)) & (1 << 1)) - (1 << 1)) | ~(DV_I_50_2_bit | DV_II_46_2_bit));
  766|  1.70M|    mask &= ((((W[48] ^ W[50]) & (1 << 6)) - (1 << 6)) | ~(DV_I_50_2_bit | DV_II_46_2_bit));
  767|  1.70M|    if (mask & (DV_I_51_0_bit | DV_I_52_0_bit))
  ------------------
  |  Branch (767:9): [True: 3.55k, False: 1.70M]
  ------------------
  768|  3.55k|        mask &= ((0 - (((W[48] ^ W[55]) >> 29) & 1)) | ~(DV_I_51_0_bit | DV_I_52_0_bit));
  769|  1.70M|    mask &= ((((W[47] ^ W[49]) & (1 << 6)) - (1 << 6)) | ~(DV_I_49_2_bit | DV_I_51_2_bit));
  770|  1.70M|    mask &=
  771|  1.70M|      ((((W[48] ^ (W[47] >> 5)) & (1 << 1)) - (1 << 1)) | ~(DV_I_47_2_bit | DV_II_51_2_bit));
  772|  1.70M|    mask &= ((((W[46] ^ W[48]) & (1 << 6)) - (1 << 6)) | ~(DV_I_48_2_bit | DV_I_50_2_bit));
  773|  1.70M|    mask &=
  774|  1.70M|      ((((W[47] ^ (W[46] >> 5)) & (1 << 1)) - (1 << 1)) | ~(DV_I_46_2_bit | DV_II_50_2_bit));
  775|  1.70M|    mask &= ((0 - ((W[44] ^ (W[45] >> 5)) & (1 << 1))) | ~(DV_I_51_2_bit | DV_II_49_2_bit));
  776|  1.70M|    mask &= ((((W[43] ^ W[45]) & (1 << 6)) - (1 << 6)) | ~(DV_I_47_2_bit | DV_I_49_2_bit));
  777|  1.70M|    mask &= (((((W[42] ^ W[44]) >> 6) & 1) - 1) | ~(DV_I_46_2_bit | DV_I_48_2_bit));
  778|  1.70M|    mask &=
  779|  1.70M|      ((((W[43] ^ (W[42] >> 5)) & (1 << 1)) - (1 << 1)) | ~(DV_II_46_2_bit | DV_II_51_2_bit));
  780|  1.70M|    mask &=
  781|  1.70M|      ((((W[42] ^ (W[41] >> 5)) & (1 << 1)) - (1 << 1)) | ~(DV_I_51_2_bit | DV_II_50_2_bit));
  782|  1.70M|    mask &=
  783|  1.70M|      ((((W[41] ^ (W[40] >> 5)) & (1 << 1)) - (1 << 1)) | ~(DV_I_50_2_bit | DV_II_49_2_bit));
  784|  1.70M|    if (mask & (DV_I_52_0_bit | DV_II_51_0_bit))
  ------------------
  |  Branch (784:9): [True: 3.77k, False: 1.70M]
  ------------------
  785|  3.77k|        mask &= ((((W[39] ^ (W[43] >> 25)) & (1 << 4)) - (1 << 4)) |
  786|  3.77k|                 ~(DV_I_52_0_bit | DV_II_51_0_bit));
  787|  1.70M|    if (mask & (DV_I_51_0_bit | DV_II_50_0_bit))
  ------------------
  |  Branch (787:9): [True: 45.9k, False: 1.66M]
  ------------------
  788|  45.9k|        mask &= ((((W[38] ^ (W[42] >> 25)) & (1 << 4)) - (1 << 4)) |
  789|  45.9k|                 ~(DV_I_51_0_bit | DV_II_50_0_bit));
  790|  1.70M|    if (mask & (DV_I_48_2_bit | DV_I_51_2_bit))
  ------------------
  |  Branch (790:9): [True: 184k, False: 1.52M]
  ------------------
  791|   184k|        mask &= ((0 - ((W[37] ^ (W[38] >> 5)) & (1 << 1))) | ~(DV_I_48_2_bit | DV_I_51_2_bit));
  792|  1.70M|    if (mask & (DV_I_50_0_bit | DV_II_49_0_bit))
  ------------------
  |  Branch (792:9): [True: 3.64k, False: 1.70M]
  ------------------
  793|  3.64k|        mask &= ((((W[37] ^ (W[41] >> 25)) & (1 << 4)) - (1 << 4)) |
  794|  3.64k|                 ~(DV_I_50_0_bit | DV_II_49_0_bit));
  795|  1.70M|    if (mask & (DV_II_52_0_bit | DV_II_54_0_bit))
  ------------------
  |  Branch (795:9): [True: 7.89k, False: 1.69M]
  ------------------
  796|  7.89k|        mask &= ((0 - ((W[36] ^ W[38]) & (1 << 4))) | ~(DV_II_52_0_bit | DV_II_54_0_bit));
  797|  1.70M|    mask &= ((0 - ((W[35] ^ (W[36] >> 5)) & (1 << 1))) | ~(DV_I_46_2_bit | DV_I_49_2_bit));
  798|  1.70M|    if (mask & (DV_I_51_0_bit | DV_II_47_0_bit))
  ------------------
  |  Branch (798:9): [True: 1.37k, False: 1.70M]
  ------------------
  799|  1.37k|        mask &= ((((W[35] ^ (W[39] >> 25)) & (1 << 3)) - (1 << 3)) |
  800|  1.37k|                 ~(DV_I_51_0_bit | DV_II_47_0_bit));
  801|  1.70M|    if (mask) {
  ------------------
  |  Branch (801:9): [True: 710k, False: 995k]
  ------------------
  802|   710k|        if (mask & DV_I_43_0_bit)
  ------------------
  |  Branch (802:13): [True: 5.97k, False: 704k]
  ------------------
  803|  5.97k|            if (!((W[61] ^ (W[62] >> 5)) & (1 << 1)) ||
  ------------------
  |  Branch (803:17): [True: 871, False: 5.10k]
  ------------------
  804|  5.10k|                !(!((W[59] ^ (W[63] >> 25)) & (1 << 5))) ||
  ------------------
  |  Branch (804:17): [True: 3.54k, False: 1.56k]
  ------------------
  805|  1.56k|                !((W[58] ^ (W[63] >> 30)) & (1 << 0)))
  ------------------
  |  Branch (805:17): [True: 963, False: 604]
  ------------------
  806|  5.37k|                mask &= ~DV_I_43_0_bit;
  807|   710k|        if (mask & DV_I_44_0_bit)
  ------------------
  |  Branch (807:13): [True: 6.91k, False: 703k]
  ------------------
  808|  6.91k|            if (!((W[62] ^ (W[63] >> 5)) & (1 << 1)) ||
  ------------------
  |  Branch (808:17): [True: 4.41k, False: 2.50k]
  ------------------
  809|  2.50k|                !(!((W[60] ^ (W[64] >> 25)) & (1 << 5))) ||
  ------------------
  |  Branch (809:17): [True: 551, False: 1.95k]
  ------------------
  810|  1.95k|                !((W[59] ^ (W[64] >> 30)) & (1 << 0)))
  ------------------
  |  Branch (810:17): [True: 1.29k, False: 657]
  ------------------
  811|  6.26k|                mask &= ~DV_I_44_0_bit;
  812|   710k|        if (mask & DV_I_46_2_bit)
  ------------------
  |  Branch (812:13): [True: 28.9k, False: 681k]
  ------------------
  813|  28.9k|            mask &= ((~((W[40] ^ W[42]) >> 2)) | ~DV_I_46_2_bit);
  814|   710k|        if (mask & DV_I_47_2_bit)
  ------------------
  |  Branch (814:13): [True: 63.5k, False: 647k]
  ------------------
  815|  63.5k|            if (!((W[62] ^ (W[63] >> 5)) & (1 << 2)) || !(!((W[41] ^ W[43]) & (1 << 6))))
  ------------------
  |  Branch (815:17): [True: 37.8k, False: 25.7k]
  |  Branch (815:57): [True: 10.4k, False: 15.2k]
  ------------------
  816|  48.3k|                mask &= ~DV_I_47_2_bit;
  817|   710k|        if (mask & DV_I_48_2_bit)
  ------------------
  |  Branch (817:13): [True: 51.4k, False: 659k]
  ------------------
  818|  51.4k|            if (!((W[63] ^ (W[64] >> 5)) & (1 << 2)) ||
  ------------------
  |  Branch (818:17): [True: 12.8k, False: 38.6k]
  ------------------
  819|  38.6k|                !(!((W[48] ^ (W[49] << 5)) & (1 << 6))))
  ------------------
  |  Branch (819:17): [True: 9.57k, False: 29.0k]
  ------------------
  820|  22.3k|                mask &= ~DV_I_48_2_bit;
  821|   710k|        if (mask & DV_I_49_2_bit)
  ------------------
  |  Branch (821:13): [True: 74.8k, False: 635k]
  ------------------
  822|  74.8k|            if (!(!((W[49] ^ (W[50] << 5)) & (1 << 6))) || !((W[42] ^ W[50]) & (1 << 1)) ||
  ------------------
  |  Branch (822:17): [True: 31.5k, False: 43.3k]
  |  Branch (822:60): [True: 13.1k, False: 30.1k]
  ------------------
  823|  30.1k|                !(!((W[39] ^ (W[40] << 5)) & (1 << 6))) || !((W[38] ^ W[40]) & (1 << 1)))
  ------------------
  |  Branch (823:17): [True: 9.04k, False: 21.1k]
  |  Branch (823:60): [True: 12.3k, False: 8.76k]
  ------------------
  824|  66.1k|                mask &= ~DV_I_49_2_bit;
  825|   710k|        if (mask & DV_I_50_0_bit)
  ------------------
  |  Branch (825:13): [True: 135, False: 710k]
  ------------------
  826|    135|            mask &= ((((W[36] ^ W[37]) << 7)) | ~DV_I_50_0_bit);
  827|   710k|        if (mask & DV_I_50_2_bit)
  ------------------
  |  Branch (827:13): [True: 15.7k, False: 695k]
  ------------------
  828|  15.7k|            mask &= ((((W[43] ^ W[51]) << 11)) | ~DV_I_50_2_bit);
  829|   710k|        if (mask & DV_I_51_0_bit)
  ------------------
  |  Branch (829:13): [True: 1.23k, False: 709k]
  ------------------
  830|  1.23k|            mask &= ((((W[37] ^ W[38]) << 9)) | ~DV_I_51_0_bit);
  831|   710k|        if (mask & DV_I_51_2_bit)
  ------------------
  |  Branch (831:13): [True: 64.4k, False: 646k]
  ------------------
  832|  64.4k|            if (!(!((W[51] ^ (W[52] << 5)) & (1 << 6))) || !(!((W[49] ^ W[51]) & (1 << 6))) ||
  ------------------
  |  Branch (832:17): [True: 11.7k, False: 52.7k]
  |  Branch (832:60): [True: 23.9k, False: 28.7k]
  ------------------
  833|  28.7k|                !(!((W[37] ^ (W[37] >> 5)) & (1 << 1))) ||
  ------------------
  |  Branch (833:17): [True: 23.3k, False: 5.41k]
  ------------------
  834|  5.41k|                !(!((W[35] ^ (W[39] >> 25)) & (1 << 5))))
  ------------------
  |  Branch (834:17): [True: 2.04k, False: 3.37k]
  ------------------
  835|  61.0k|                mask &= ~DV_I_51_2_bit;
  836|   710k|        if (mask & DV_I_52_0_bit)
  ------------------
  |  Branch (836:13): [True: 688, False: 710k]
  ------------------
  837|    688|            mask &= ((((W[38] ^ W[39]) << 11)) | ~DV_I_52_0_bit);
  838|   710k|        if (mask & DV_II_46_2_bit)
  ------------------
  |  Branch (838:13): [True: 28.3k, False: 682k]
  ------------------
  839|  28.3k|            mask &= ((((W[47] ^ W[51]) << 17)) | ~DV_II_46_2_bit);
  840|   710k|        if (mask & DV_II_48_0_bit)
  ------------------
  |  Branch (840:13): [True: 703, False: 710k]
  ------------------
  841|    703|            if (!(!((W[36] ^ (W[40] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (841:17): [True: 44, False: 659]
  ------------------
  842|    659|                !((W[35] ^ (W[40] << 2)) & (1 << 30)))
  ------------------
  |  Branch (842:17): [True: 314, False: 345]
  ------------------
  843|    358|                mask &= ~DV_II_48_0_bit;
  844|   710k|        if (mask & DV_II_49_0_bit)
  ------------------
  |  Branch (844:13): [True: 2.75k, False: 708k]
  ------------------
  845|  2.75k|            if (!(!((W[37] ^ (W[41] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (845:17): [True: 550, False: 2.20k]
  ------------------
  846|  2.20k|                !((W[36] ^ (W[41] << 2)) & (1 << 30)))
  ------------------
  |  Branch (846:17): [True: 1.23k, False: 968]
  ------------------
  847|  1.78k|                mask &= ~DV_II_49_0_bit;
  848|   710k|        if (mask & DV_II_49_2_bit)
  ------------------
  |  Branch (848:13): [True: 195k, False: 515k]
  ------------------
  849|   195k|            if (!(!((W[53] ^ (W[54] << 5)) & (1 << 6))) || !(!((W[51] ^ W[53]) & (1 << 6))) ||
  ------------------
  |  Branch (849:17): [True: 86.5k, False: 109k]
  |  Branch (849:60): [True: 48.9k, False: 60.2k]
  ------------------
  850|  60.2k|                !((W[50] ^ W[54]) & (1 << 1)) || !(!((W[45] ^ (W[46] << 5)) & (1 << 6))) ||
  ------------------
  |  Branch (850:17): [True: 41.1k, False: 19.0k]
  |  Branch (850:50): [True: 13.5k, False: 5.50k]
  ------------------
  851|  5.50k|                !(!((W[37] ^ (W[41] >> 25)) & (1 << 5))) ||
  ------------------
  |  Branch (851:17): [True: 2.09k, False: 3.41k]
  ------------------
  852|  3.41k|                !((W[36] ^ (W[41] >> 30)) & (1 << 0)))
  ------------------
  |  Branch (852:17): [True: 1.56k, False: 1.85k]
  ------------------
  853|   193k|                mask &= ~DV_II_49_2_bit;
  854|   710k|        if (mask & DV_II_50_0_bit)
  ------------------
  |  Branch (854:13): [True: 40.0k, False: 670k]
  ------------------
  855|  40.0k|            if (!((W[55] ^ W[58]) & (1 << 29)) || !(!((W[38] ^ (W[42] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (855:17): [True: 38.2k, False: 1.80k]
  |  Branch (855:51): [True: 450, False: 1.35k]
  ------------------
  856|  1.35k|                !((W[37] ^ (W[42] << 2)) & (1 << 30)))
  ------------------
  |  Branch (856:17): [True: 241, False: 1.11k]
  ------------------
  857|  38.8k|                mask &= ~DV_II_50_0_bit;
  858|   710k|        if (mask & DV_II_50_2_bit)
  ------------------
  |  Branch (858:13): [True: 179k, False: 531k]
  ------------------
  859|   179k|            if (!(!((W[54] ^ (W[55] << 5)) & (1 << 6))) || !(!((W[52] ^ W[54]) & (1 << 6))) ||
  ------------------
  |  Branch (859:17): [True: 91.2k, False: 87.9k]
  |  Branch (859:60): [True: 38.0k, False: 49.8k]
  ------------------
  860|  49.8k|                !((W[51] ^ W[55]) & (1 << 1)) || !((W[45] ^ W[47]) & (1 << 1)) ||
  ------------------
  |  Branch (860:17): [True: 20.6k, False: 29.2k]
  |  Branch (860:50): [True: 4.81k, False: 24.3k]
  ------------------
  861|  24.3k|                !(!((W[38] ^ (W[42] >> 25)) & (1 << 5))) ||
  ------------------
  |  Branch (861:17): [True: 2.94k, False: 21.4k]
  ------------------
  862|  21.4k|                !((W[37] ^ (W[42] >> 30)) & (1 << 0)))
  ------------------
  |  Branch (862:17): [True: 19.7k, False: 1.70k]
  ------------------
  863|   177k|                mask &= ~DV_II_50_2_bit;
  864|   710k|        if (mask & DV_II_51_0_bit)
  ------------------
  |  Branch (864:13): [True: 2.54k, False: 708k]
  ------------------
  865|  2.54k|            if (!(!((W[39] ^ (W[43] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (865:17): [True: 1.76k, False: 785]
  ------------------
  866|    785|                !((W[38] ^ (W[43] << 2)) & (1 << 30)))
  ------------------
  |  Branch (866:17): [True: 513, False: 272]
  ------------------
  867|  2.27k|                mask &= ~DV_II_51_0_bit;
  868|   710k|        if (mask & DV_II_51_2_bit)
  ------------------
  |  Branch (868:13): [True: 176k, False: 534k]
  ------------------
  869|   176k|            if (!(!((W[55] ^ (W[56] << 5)) & (1 << 6))) || !(!((W[53] ^ W[55]) & (1 << 6))) ||
  ------------------
  |  Branch (869:17): [True: 90.3k, False: 85.7k]
  |  Branch (869:60): [True: 51.3k, False: 34.3k]
  ------------------
  870|  34.3k|                !((W[52] ^ W[56]) & (1 << 1)) || !((W[46] ^ W[48]) & (1 << 1)) ||
  ------------------
  |  Branch (870:17): [True: 14.3k, False: 19.9k]
  |  Branch (870:50): [True: 8.35k, False: 11.5k]
  ------------------
  871|  11.5k|                !(!((W[39] ^ (W[43] >> 25)) & (1 << 5))) ||
  ------------------
  |  Branch (871:17): [True: 8.91k, False: 2.66k]
  ------------------
  872|  2.66k|                !((W[38] ^ (W[43] >> 30)) & (1 << 0)))
  ------------------
  |  Branch (872:17): [True: 1.36k, False: 1.30k]
  ------------------
  873|   174k|                mask &= ~DV_II_51_2_bit;
  874|   710k|        if (mask & DV_II_52_0_bit)
  ------------------
  |  Branch (874:13): [True: 2.39k, False: 708k]
  ------------------
  875|  2.39k|            if (!(!((W[59] ^ W[60]) & (1 << 29))) ||
  ------------------
  |  Branch (875:17): [True: 1.22k, False: 1.16k]
  ------------------
  876|  1.16k|                !(!((W[40] ^ (W[44] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (876:17): [True: 533, False: 631]
  ------------------
  877|    631|                !(!((W[40] ^ (W[44] >> 25)) & (1 << 4))) ||
  ------------------
  |  Branch (877:17): [True: 153, False: 478]
  ------------------
  878|    478|                !((W[39] ^ (W[44] << 2)) & (1 << 30)))
  ------------------
  |  Branch (878:17): [True: 199, False: 279]
  ------------------
  879|  2.11k|                mask &= ~DV_II_52_0_bit;
  880|   710k|        if (mask & DV_II_53_0_bit)
  ------------------
  |  Branch (880:13): [True: 2.06k, False: 708k]
  ------------------
  881|  2.06k|            if (!((W[58] ^ W[61]) & (1 << 29)) || !(!((W[57] ^ (W[61] >> 25)) & (1 << 4))) ||
  ------------------
  |  Branch (881:17): [True: 479, False: 1.59k]
  |  Branch (881:51): [True: 167, False: 1.42k]
  ------------------
  882|  1.42k|                !(!((W[41] ^ (W[45] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (882:17): [True: 675, False: 748]
  ------------------
  883|    748|                !(!((W[41] ^ (W[45] >> 25)) & (1 << 4))))
  ------------------
  |  Branch (883:17): [True: 25, False: 723]
  ------------------
  884|  1.34k|                mask &= ~DV_II_53_0_bit;
  885|   710k|        if (mask & DV_II_54_0_bit)
  ------------------
  |  Branch (885:13): [True: 3.88k, False: 706k]
  ------------------
  886|  3.88k|            if (!(!((W[58] ^ (W[62] >> 25)) & (1 << 4))) ||
  ------------------
  |  Branch (886:17): [True: 1.89k, False: 1.98k]
  ------------------
  887|  1.98k|                !(!((W[42] ^ (W[46] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (887:17): [True: 713, False: 1.27k]
  ------------------
  888|  1.27k|                !(!((W[42] ^ (W[46] >> 25)) & (1 << 4))))
  ------------------
  |  Branch (888:17): [True: 516, False: 755]
  ------------------
  889|  3.12k|                mask &= ~DV_II_54_0_bit;
  890|   710k|        if (mask & DV_II_55_0_bit)
  ------------------
  |  Branch (890:13): [True: 4.14k, False: 706k]
  ------------------
  891|  4.14k|            if (!(!((W[59] ^ (W[63] >> 25)) & (1 << 4))) ||
  ------------------
  |  Branch (891:17): [True: 1.69k, False: 2.44k]
  ------------------
  892|  2.44k|                !(!((W[57] ^ (W[59] >> 25)) & (1 << 4))) ||
  ------------------
  |  Branch (892:17): [True: 469, False: 1.97k]
  ------------------
  893|  1.97k|                !(!((W[43] ^ (W[47] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (893:17): [True: 529, False: 1.44k]
  ------------------
  894|  1.44k|                !(!((W[43] ^ (W[47] >> 25)) & (1 << 4))))
  ------------------
  |  Branch (894:17): [True: 734, False: 713]
  ------------------
  895|  3.43k|                mask &= ~DV_II_55_0_bit;
  896|   710k|        if (mask & DV_II_56_0_bit)
  ------------------
  |  Branch (896:13): [True: 1.63k, False: 709k]
  ------------------
  897|  1.63k|            if (!(!((W[60] ^ (W[64] >> 25)) & (1 << 4))) ||
  ------------------
  |  Branch (897:17): [True: 800, False: 839]
  ------------------
  898|    839|                !(!((W[44] ^ (W[48] >> 25)) & (1 << 3))) ||
  ------------------
  |  Branch (898:17): [True: 198, False: 641]
  ------------------
  899|    641|                !(!((W[44] ^ (W[48] >> 25)) & (1 << 4))))
  ------------------
  |  Branch (899:17): [True: 285, False: 356]
  ------------------
  900|  1.28k|                mask &= ~DV_II_56_0_bit;
  901|   710k|    }
  902|       |
  903|  1.70M|    dvmask[0] = mask;
  904|  1.70M|}

_Z14signature_initRK13pgp_key_pkt_tRKN3pgp3pkt9SignatureE:
   95|  98.9k|{
   96|  98.9k|    auto hash = rnp::Hash::create(sig.halg);
   97|       |
   98|  98.9k|#if defined(ENABLE_CRYPTO_REFRESH)
   99|  98.9k|    if (key.version == PGP_V6) {
  ------------------
  |  Branch (99:9): [True: 5.39k, False: 93.5k]
  ------------------
  100|  5.39k|        hash->add(sig.salt);
  101|  5.39k|    }
  102|  98.9k|#endif
  103|       |
  104|  98.9k|    if (key.material->alg() == PGP_PKA_SM2) {
  ------------------
  |  Branch (104:9): [True: 4.77k, False: 94.1k]
  ------------------
  105|  4.77k|        auto &sm2 = dynamic_cast<pgp::SM2KeyMaterial &>(*key.material);
  106|  4.77k|        sm2.compute_za(*hash);
  107|  4.77k|    }
  108|  98.9k|    return hash;
  109|  98.9k|}
_Z18signature_validateRKN3pgp3pkt9SignatureERKNS_11KeyMaterialERN3rnp4HashERKNS7_15SecurityContextEPK17pgp_literal_hdr_t:
  157|  97.0k|{
  158|  97.0k|    rnp::SigValidity res;
  159|  97.0k|    if (sig.palg != key.alg()) {
  ------------------
  |  Branch (159:9): [True: 14.3k, False: 82.6k]
  ------------------
  160|  14.3k|        RNP_LOG(
  ------------------
  |  |   76|  14.3k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  14.3k|    do {                                                                                 \
  |  |  |  |   69|  14.3k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 14.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  14.3k|            break;                                                                       \
  |  |  |  |   71|  14.3k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  161|  14.3k|          "Signature and key do not agree on algorithm type: %d vs %d", sig.palg, key.alg());
  162|  14.3k|        res.add_error(RNP_ERROR_SIG_PUB_ALG_MISMATCH);
  163|  14.3k|    }
  164|       |
  165|       |    /* Check signature security */
  166|  97.0k|    auto action =
  167|  97.0k|      sig.is_document() ? rnp::SecurityAction::VerifyData : rnp::SecurityAction::VerifyKey;
  ------------------
  |  Branch (167:7): [True: 0, False: 97.0k]
  ------------------
  168|  97.0k|    if (ctx.profile.hash_level(sig.halg, sig.creation(), action) <
  ------------------
  |  Branch (168:9): [True: 1.35k, False: 95.6k]
  ------------------
  169|  97.0k|        rnp::SecurityLevel::Default) {
  170|  1.35k|        RNP_LOG("Insecure hash algorithm %d, marking signature as invalid.", sig.halg);
  ------------------
  |  |   76|  1.35k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.35k|    do {                                                                                 \
  |  |  |  |   69|  1.35k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.35k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.35k|            break;                                                                       \
  |  |  |  |   71|  1.35k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  171|  1.35k|        res.add_error(RNP_ERROR_SIG_WEAK_HASH);
  172|  1.35k|    }
  173|       |
  174|  97.0k|#if defined(ENABLE_PQC)
  175|       |    /* check that hash matches key requirements */
  176|  97.0k|    if (!key.sig_hash_allowed(hash.alg())) {
  ------------------
  |  Branch (176:9): [True: 483, False: 96.5k]
  ------------------
  177|    483|        RNP_LOG("Signature invalid since hash algorithm requirements are not met for the "
  ------------------
  |  |   76|    483|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    483|    do {                                                                                 \
  |  |  |  |   69|    483|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 483, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    483|            break;                                                                       \
  |  |  |  |   71|    483|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  178|    483|                "given key.");
  179|    483|        res.add_error(RNP_ERROR_SIG_HASH_ALG_MISMATCH);
  180|    483|    }
  181|  97.0k|#endif
  182|       |
  183|       |    /* Finalize hash */
  184|  97.0k|    auto hval = signature_hash_finish(sig, hash, hdr);
  185|       |
  186|       |    /* compare lbits */
  187|  97.0k|    if (memcmp(hval.data(), sig.lbits.data(), 2)) {
  ------------------
  |  Branch (187:9): [True: 67.9k, False: 29.1k]
  ------------------
  188|  67.9k|        RNP_LOG("wrong lbits");
  ------------------
  |  |   76|  67.9k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  67.9k|    do {                                                                                 \
  |  |  |  |   69|  67.9k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 67.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  67.9k|            break;                                                                       \
  |  |  |  |   71|  67.9k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|  67.9k|        res.add_error(RNP_ERROR_SIG_LBITS_MISMATCH);
  190|  67.9k|    }
  191|       |
  192|       |    /* validate signature */
  193|       |    /* We check whether material could be parsed during the signature parsing */
  194|  97.0k|    auto material = sig.parse_material();
  195|  97.0k|    assert(material);
  196|  97.0k|    auto ret = key.verify(ctx, *material, hval);
  197|  97.0k|    if (ret) {
  ------------------
  |  Branch (197:9): [True: 86.5k, False: 10.5k]
  ------------------
  198|  86.5k|        res.add_error(ret);
  199|  86.5k|    }
  200|  97.0k|    return res;
  201|  97.0k|}
signatures.cpp:_ZL21signature_hash_finishRKN3pgp3pkt9SignatureERN3rnp4HashEPK17pgp_literal_hdr_t:
   50|  97.0k|{
   51|  97.0k|    hash.add(sig.hashed_data);
   52|  97.0k|    switch (sig.version) {
   53|  70.9k|    case PGP_V4:
  ------------------
  |  Branch (53:5): [True: 70.9k, False: 26.1k]
  ------------------
   54|  70.9k|#if defined(ENABLE_CRYPTO_REFRESH)
   55|  76.2k|    case PGP_V6:
  ------------------
  |  Branch (55:5): [True: 5.35k, False: 91.6k]
  ------------------
   56|  76.2k|#endif
   57|  76.2k|    {
   58|  76.2k|        uint8_t trailer[6] = {0x00, 0xff, 0x00, 0x00, 0x00, 0x00};
   59|  76.2k|        trailer[0] = sig.version;
   60|  76.2k|        write_uint32(&trailer[2], sig.hashed_data.size());
   61|  76.2k|        hash.add(trailer, 6);
   62|  76.2k|        break;
   63|  70.9k|    }
   64|     33|    case PGP_V5: {
  ------------------
  |  Branch (64:5): [True: 33, False: 97.0k]
  ------------------
   65|     33|        uint64_t hash_len = sig.hashed_data.size();
   66|     33|        if (sig.is_document()) {
  ------------------
  |  Branch (66:13): [True: 0, False: 33]
  ------------------
   67|      0|            uint8_t doc_trailer[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
   68|       |            /* This data is not added to the hash_len as per spec */
   69|      0|            if (hdr) {
  ------------------
  |  Branch (69:17): [True: 0, False: 0]
  ------------------
   70|      0|                doc_trailer[0] = hdr->format;
   71|      0|                doc_trailer[1] = hdr->fname_len;
   72|      0|                write_uint32(&doc_trailer[2], hdr->timestamp);
   73|      0|                hash.add(doc_trailer, 2);
   74|      0|                hash.add(hdr->fname, hdr->fname_len);
   75|      0|                hash.add(&doc_trailer[2], 4);
   76|      0|            } else {
   77|      0|                hash.add(doc_trailer, 6);
   78|      0|            }
   79|      0|        }
   80|     33|        uint8_t trailer[10] = {0x05, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
   81|     33|        write_uint64(&trailer[2], hash_len);
   82|     33|        hash.add(trailer, 10);
   83|     33|        break;
   84|  70.9k|    }
   85|  20.7k|    default:
  ------------------
  |  Branch (85:5): [True: 20.7k, False: 76.3k]
  ------------------
   86|  20.7k|        break;
   87|  97.0k|    }
   88|  97.0k|    rnp::secure_bytes res(hash.size());
   89|  97.0k|    hash.finish(res.data());
   90|  97.0k|    return res;
   91|  97.0k|}

_ZN3pgp3sm210compute_zaERKNS_2ec3KeyERN3rnp4HashEPKc:
   79|  4.77k|{
   80|  4.77k|    rnp::botan::Pubkey sm2_key;
   81|  4.77k|    if (!load_public_key(sm2_key, key)) {
  ------------------
  |  Branch (81:9): [True: 57, False: 4.71k]
  ------------------
   82|     57|        RNP_LOG("Failed to load SM2 key");
  ------------------
  |  |   76|     57|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     57|    do {                                                                                 \
  |  |  |  |   69|     57|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 57, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     57|            break;                                                                       \
  |  |  |  |   71|     57|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|     57|        return RNP_ERROR_GENERIC;
   84|     57|    }
   85|       |
   86|  4.71k|    if (!ident_field) {
  ------------------
  |  Branch (86:9): [True: 4.71k, False: 0]
  ------------------
   87|  4.71k|        ident_field = "1234567812345678";
   88|  4.71k|    }
   89|       |
   90|  4.71k|    auto                 hash_algo = rnp::Hash_Botan::name_backend(hash.alg());
   91|  4.71k|    size_t               digest_len = hash.size();
   92|  4.71k|    std::vector<uint8_t> digest_buf(digest_len, 0);
   93|       |
   94|  4.71k|    int rc = botan_pubkey_sm2_compute_za(
   95|  4.71k|      digest_buf.data(), &digest_len, ident_field, hash_algo, sm2_key.get());
   96|  4.71k|    if (rc) {
  ------------------
  |  Branch (96:9): [True: 0, False: 4.71k]
  ------------------
   97|      0|        RNP_LOG("compute_za failed %d", rc);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|      0|        return RNP_ERROR_GENERIC;
   99|      0|    }
  100|  4.71k|    hash.add(digest_buf);
  101|  4.71k|    return RNP_SUCCESS;
  102|  4.71k|}
_ZN3pgp3sm26verifyERKNS_2ec9SignatureE14pgp_hash_alg_tRKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEERKNS1_3KeyE:
  177|  4.66k|{
  178|  4.66k|    if (botan_ffi_supports_api(20180713) != 0) {
  ------------------
  |  Branch (178:9): [True: 0, False: 4.66k]
  ------------------
  179|      0|        RNP_LOG("SM2 signatures requires Botan 2.8 or higher");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  180|      0|        return RNP_ERROR_NOT_SUPPORTED;
  181|      0|    }
  182|       |
  183|  4.66k|    if (hash.size() != rnp::Hash::size(hash_alg)) {
  ------------------
  |  Branch (183:9): [True: 0, False: 4.66k]
  ------------------
  184|      0|        return RNP_ERROR_BAD_PARAMETERS;
  185|      0|    }
  186|       |
  187|  4.66k|    auto curve = ec::Curve::get(key.curve);
  188|  4.66k|    if (!curve) {
  ------------------
  |  Branch (188:9): [True: 0, False: 4.66k]
  ------------------
  189|      0|        return RNP_ERROR_BAD_PARAMETERS;
  190|      0|    }
  191|       |
  192|  4.66k|    size_t r_blen = sig.r.size();
  193|  4.66k|    size_t s_blen = sig.s.size();
  194|  4.66k|    size_t sign_half_len = curve->bytes();
  195|       |
  196|  4.66k|    assert(sign_half_len <= MAX_CURVE_BYTELEN);
  197|  4.66k|    if (!r_blen || (r_blen > sign_half_len) || !s_blen || (s_blen > sign_half_len)) {
  ------------------
  |  Branch (197:9): [True: 0, False: 4.66k]
  |  Branch (197:20): [True: 45, False: 4.62k]
  |  Branch (197:48): [True: 0, False: 4.62k]
  |  Branch (197:59): [True: 92, False: 4.53k]
  ------------------
  198|    137|        return RNP_ERROR_SIGNATURE_INVALID;
  199|    137|    }
  200|       |
  201|  4.53k|    rnp::botan::Pubkey pub;
  202|  4.53k|    if (!load_public_key(pub, key)) {
  ------------------
  |  Branch (202:9): [True: 0, False: 4.53k]
  ------------------
  203|      0|        RNP_LOG("Failed to load public key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  204|      0|        return RNP_ERROR_SIGNATURE_INVALID;
  205|      0|    }
  206|       |
  207|  4.53k|    rnp::botan::op::Verify verifier;
  208|  4.53k|    if (botan_pk_op_verify_create(&verifier.get(), pub.get(), ",Raw", 0) ||
  ------------------
  |  Branch (208:9): [True: 0, False: 4.53k]
  ------------------
  209|  4.53k|        botan_pk_op_verify_update(verifier.get(), hash.data(), hash.size())) {
  ------------------
  |  Branch (209:9): [True: 0, False: 4.53k]
  ------------------
  210|      0|        return RNP_ERROR_SIGNATURE_INVALID;
  211|      0|    }
  212|       |
  213|  4.53k|    std::vector<uint8_t> sign_buf(2 * sign_half_len, 0);
  214|  4.53k|    sig.r.copy(sign_buf.data() + sign_half_len - r_blen);
  215|  4.53k|    sig.s.copy(sign_buf.data() + 2 * sign_half_len - s_blen);
  216|       |
  217|  4.53k|    if (botan_pk_op_verify_finish(verifier.get(), sign_buf.data(), sign_buf.size())) {
  ------------------
  |  Branch (217:9): [True: 3.98k, False: 552]
  ------------------
  218|  3.98k|        return RNP_ERROR_SIGNATURE_INVALID;
  219|  3.98k|    }
  220|    552|    return RNP_SUCCESS;
  221|  4.53k|}
sm2.cpp:_ZN3pgp3sm2L15load_public_keyERN3rnp5botan6PubkeyERKNS_2ec3KeyE:
   40|  9.30k|{
   41|  9.30k|    auto curve = ec::Curve::get(keydata.curve);
   42|  9.30k|    if (!curve) {
  ------------------
  |  Branch (42:9): [True: 0, False: 9.30k]
  ------------------
   43|      0|        return false;
   44|      0|    }
   45|       |
   46|  9.30k|    const size_t sign_half_len = curve->bytes();
   47|  9.30k|    size_t       sz = keydata.p.size();
   48|  9.30k|    if (!sz || (sz != (2 * sign_half_len + 1)) || (keydata.p[0] != 0x04)) {
  ------------------
  |  Branch (48:9): [True: 0, False: 9.30k]
  |  Branch (48:16): [True: 16, False: 9.29k]
  |  Branch (48:51): [True: 10, False: 9.28k]
  ------------------
   49|     26|        return false;
   50|     26|    }
   51|       |
   52|  9.28k|    rnp::bn px(keydata.p.data() + 1, sign_half_len);
   53|  9.28k|    rnp::bn py(keydata.p.data() + 1 + sign_half_len, sign_half_len);
   54|       |
   55|  9.28k|    if (!px || !py) {
  ------------------
  |  Branch (55:9): [True: 0, False: 9.28k]
  |  Branch (55:16): [True: 0, False: 9.28k]
  ------------------
   56|      0|        return false;
   57|      0|    }
   58|  9.28k|    return !botan_pubkey_load_sm2(&pubkey.get(), px.get(), py.get(), curve->botan_name);
   59|  9.28k|}

_ZN28pgp_sphincsplus_public_key_tC2ERKNSt3__16vectorIhNS0_9allocatorIhEEEE23sphincsplus_parameter_t16pgp_pubkey_alg_t:
  118|  1.34k|    : key_encoded_(key_encoded), pk_alg_(alg), sphincsplus_param_(param),
  119|  1.34k|      sphincsplus_hash_func_(rnp_sphincsplus_alg_to_hashfunc(alg)), is_initialized_(true)
  120|  1.34k|{
  121|  1.34k|}
_ZN29pgp_sphincsplus_private_key_tC2ERKNSt3__16vectorIhNS0_9allocatorIhEEEE23sphincsplus_parameter_t16pgp_pubkey_alg_t:
  145|    636|    : key_encoded_(Botan::secure_vector<uint8_t>(key_encoded.begin(), key_encoded.end())),
  146|    636|      pk_alg_(alg), sphincsplus_param_(param),
  147|    636|      sphincsplus_hash_func_(rnp_sphincsplus_alg_to_hashfunc(alg)), is_initialized_(true)
  148|    636|{
  149|    636|}
_ZNK28pgp_sphincsplus_public_key_t36validate_signature_hash_requirementsE14pgp_hash_alg_t:
  238|    543|{
  239|       |    /* check if key is allowed with the hash algorithm */
  240|    543|    return sphincsplus_hash_allowed(pk_alg_, sphincsplus_param_, hash_alg);
  241|    543|}
_Z24sphincsplus_privkey_size23sphincsplus_parameter_t:
  283|    660|{
  284|    660|    return 2 * sphincsplus_pubkey_size(param);
  285|    660|}
_Z23sphincsplus_pubkey_size23sphincsplus_parameter_t:
  289|  2.29k|{
  290|  2.29k|    switch (param) {
  291|    515|    case sphincsplus_simple_128s:
  ------------------
  |  Branch (291:5): [True: 515, False: 1.78k]
  ------------------
  292|    515|        return 32;
  293|    144|    case sphincsplus_simple_128f:
  ------------------
  |  Branch (293:5): [True: 144, False: 2.15k]
  ------------------
  294|    144|        return 32;
  295|    422|    case sphincsplus_simple_192s:
  ------------------
  |  Branch (295:5): [True: 422, False: 1.87k]
  ------------------
  296|    422|        return 48;
  297|    320|    case sphincsplus_simple_192f:
  ------------------
  |  Branch (297:5): [True: 320, False: 1.97k]
  ------------------
  298|    320|        return 48;
  299|    264|    case sphincsplus_simple_256s:
  ------------------
  |  Branch (299:5): [True: 264, False: 2.03k]
  ------------------
  300|    264|        return 64;
  301|     27|    case sphincsplus_simple_256f:
  ------------------
  |  Branch (301:5): [True: 27, False: 2.27k]
  ------------------
  302|     27|        return 64;
  303|    607|    default:
  ------------------
  |  Branch (303:5): [True: 607, False: 1.69k]
  ------------------
  304|    607|        RNP_LOG("invalid SLH-DSA parameter identifier");
  ------------------
  |  |   76|    607|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    607|    do {                                                                                 \
  |  |  |  |   69|    607|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 607, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    607|            break;                                                                       \
  |  |  |  |   71|    607|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|    607|        return 0;
  306|  2.29k|    }
  307|  2.29k|}
_Z26sphincsplus_signature_size23sphincsplus_parameter_t:
  311|    206|{
  312|    206|    switch (param) {
  313|      7|    case sphincsplus_simple_128s:
  ------------------
  |  Branch (313:5): [True: 7, False: 199]
  ------------------
  314|      7|        return 7856;
  315|      6|    case sphincsplus_simple_128f:
  ------------------
  |  Branch (315:5): [True: 6, False: 200]
  ------------------
  316|      6|        return 17088;
  317|     94|    case sphincsplus_simple_192s:
  ------------------
  |  Branch (317:5): [True: 94, False: 112]
  ------------------
  318|     94|        return 16224;
  319|     40|    case sphincsplus_simple_192f:
  ------------------
  |  Branch (319:5): [True: 40, False: 166]
  ------------------
  320|     40|        return 35664;
  321|      1|    case sphincsplus_simple_256s:
  ------------------
  |  Branch (321:5): [True: 1, False: 205]
  ------------------
  322|      1|        return 29792;
  323|      8|    case sphincsplus_simple_256f:
  ------------------
  |  Branch (323:5): [True: 8, False: 198]
  ------------------
  324|      8|        return 49856;
  325|     50|    default:
  ------------------
  |  Branch (325:5): [True: 50, False: 156]
  ------------------
  326|     50|        RNP_LOG("invalid SLH-DSA parameter identifier");
  ------------------
  |  |   76|     50|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     50|    do {                                                                                 \
  |  |  |  |   69|     50|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 50, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     50|            break;                                                                       \
  |  |  |  |   71|     50|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  327|     50|        return 0;
  328|    206|    }
  329|    206|}
_Z24sphincsplus_hash_allowed16pgp_pubkey_alg_t23sphincsplus_parameter_t14pgp_hash_alg_t:
  335|    543|{
  336|       |    /* draft-wussler-openpgp-pqc-02 Table 14*/
  337|    543|    switch (pk_alg) {
  338|     71|    case PGP_PKA_SPHINCSPLUS_SHA2:
  ------------------
  |  Branch (338:5): [True: 71, False: 472]
  ------------------
  339|     71|        switch (sphincsplus_param) {
  ------------------
  |  Branch (339:17): [True: 71, False: 0]
  ------------------
  340|     25|        case sphincsplus_simple_128s:
  ------------------
  |  Branch (340:9): [True: 25, False: 46]
  ------------------
  341|     25|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|     25|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  342|     25|        case sphincsplus_simple_128f:
  ------------------
  |  Branch (342:9): [True: 0, False: 71]
  ------------------
  343|     25|            if (hash_alg != PGP_HASH_SHA256) {
  ------------------
  |  Branch (343:17): [True: 19, False: 6]
  ------------------
  344|     19|                return false;
  345|     19|            }
  346|      6|            break;
  347|     46|        case sphincsplus_simple_192s:
  ------------------
  |  Branch (347:9): [True: 46, False: 25]
  ------------------
  348|     46|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|     46|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  349|     46|        case sphincsplus_simple_192f:
  ------------------
  |  Branch (349:9): [True: 0, False: 71]
  ------------------
  350|     46|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|     46|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  351|     46|        case sphincsplus_simple_256s:
  ------------------
  |  Branch (351:9): [True: 0, False: 71]
  ------------------
  352|     46|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|     46|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  353|     46|        case sphincsplus_simple_256f:
  ------------------
  |  Branch (353:9): [True: 0, False: 71]
  ------------------
  354|     46|            if (hash_alg != PGP_HASH_SHA512) {
  ------------------
  |  Branch (354:17): [True: 26, False: 20]
  ------------------
  355|     26|                return false;
  356|     26|            }
  357|     20|            break;
  358|     71|        }
  359|     26|        break;
  360|    472|    case PGP_PKA_SPHINCSPLUS_SHAKE:
  ------------------
  |  Branch (360:5): [True: 472, False: 71]
  ------------------
  361|    472|        switch (sphincsplus_param) {
  ------------------
  |  Branch (361:17): [True: 472, False: 0]
  ------------------
  362|      0|        case sphincsplus_simple_128s:
  ------------------
  |  Branch (362:9): [True: 0, False: 472]
  ------------------
  363|      0|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|      0|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  364|      0|        case sphincsplus_simple_128f:
  ------------------
  |  Branch (364:9): [True: 0, False: 472]
  ------------------
  365|      0|            if (hash_alg != PGP_HASH_SHA3_256) {
  ------------------
  |  Branch (365:17): [True: 0, False: 0]
  ------------------
  366|      0|                return false;
  367|      0|            }
  368|      0|            break;
  369|      0|        case sphincsplus_simple_192s:
  ------------------
  |  Branch (369:9): [True: 0, False: 472]
  ------------------
  370|      0|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|      0|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  371|    472|        case sphincsplus_simple_192f:
  ------------------
  |  Branch (371:9): [True: 472, False: 0]
  ------------------
  372|    472|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    472|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  373|    472|        case sphincsplus_simple_256s:
  ------------------
  |  Branch (373:9): [True: 0, False: 472]
  ------------------
  374|    472|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    472|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  375|    472|        case sphincsplus_simple_256f:
  ------------------
  |  Branch (375:9): [True: 0, False: 472]
  ------------------
  376|    472|            if (hash_alg != PGP_HASH_SHA3_512) {
  ------------------
  |  Branch (376:17): [True: 438, False: 34]
  ------------------
  377|    438|                return false;
  378|    438|            }
  379|     34|            break;
  380|    472|        }
  381|     34|        break;
  382|     34|    default:
  ------------------
  |  Branch (382:5): [True: 0, False: 543]
  ------------------
  383|      0|        break;
  384|    543|    }
  385|     60|    return true;
  386|    543|}
sphincsplus.cpp:_ZN12_GLOBAL__N_131rnp_sphincsplus_alg_to_hashfuncE16pgp_pubkey_alg_t:
   70|  1.98k|{
   71|  1.98k|    switch (alg) {
   72|  1.39k|    case PGP_PKA_SPHINCSPLUS_SHA2:
  ------------------
  |  Branch (72:5): [True: 1.39k, False: 590]
  ------------------
   73|  1.39k|        return sphincsplus_sha256;
   74|    590|    case PGP_PKA_SPHINCSPLUS_SHAKE:
  ------------------
  |  Branch (74:5): [True: 590, False: 1.39k]
  ------------------
   75|    590|        return sphinscplus_shake256;
   76|      0|    default:
  ------------------
  |  Branch (76:5): [True: 0, False: 1.98k]
  ------------------
   77|      0|        RNP_LOG("invalid SLH-DSA alg id");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   78|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   79|  1.98k|    }
   80|  1.98k|}

_ZN29pgp_sphincsplus_private_key_t12secure_clearEv:
  102|  1.39k|    {
  103|  1.39k|        is_initialized_ = false;
  104|  1.39k|        Botan::zap(key_encoded_);
  105|  1.39k|    };
_ZNK28pgp_sphincsplus_public_key_t11get_encodedEv:
  161|  1.01k|    {
  162|  1.01k|        return key_encoded_;
  163|  1.01k|    };
_ZN28pgp_sphincsplus_public_key_tC2Ev:
  129|  1.89k|    pgp_sphincsplus_public_key_t() = default;
_ZN29pgp_sphincsplus_private_key_tC2Ev:
   68|  1.89k|    pgp_sphincsplus_private_key_t() = default;

_Z14pgp_block_size14pgp_symm_alg_t:
  210|  47.7k|{
  211|  47.7k|    switch (alg) {
  212|  4.98k|    case PGP_SA_IDEA:
  ------------------
  |  Branch (212:5): [True: 4.98k, False: 42.8k]
  ------------------
  213|  9.26k|    case PGP_SA_TRIPLEDES:
  ------------------
  |  Branch (213:5): [True: 4.28k, False: 43.5k]
  ------------------
  214|  15.6k|    case PGP_SA_CAST5:
  ------------------
  |  Branch (214:5): [True: 6.38k, False: 41.4k]
  ------------------
  215|  17.5k|    case PGP_SA_BLOWFISH:
  ------------------
  |  Branch (215:5): [True: 1.92k, False: 45.8k]
  ------------------
  216|  17.5k|        return 8;
  217|  23.6k|    case PGP_SA_AES_128:
  ------------------
  |  Branch (217:5): [True: 23.6k, False: 24.1k]
  ------------------
  218|  24.5k|    case PGP_SA_AES_192:
  ------------------
  |  Branch (218:5): [True: 925, False: 46.8k]
  ------------------
  219|  26.2k|    case PGP_SA_AES_256:
  ------------------
  |  Branch (219:5): [True: 1.68k, False: 46.1k]
  ------------------
  220|  26.8k|    case PGP_SA_TWOFISH:
  ------------------
  |  Branch (220:5): [True: 610, False: 47.1k]
  ------------------
  221|  27.5k|    case PGP_SA_CAMELLIA_128:
  ------------------
  |  Branch (221:5): [True: 627, False: 47.1k]
  ------------------
  222|  27.9k|    case PGP_SA_CAMELLIA_192:
  ------------------
  |  Branch (222:5): [True: 444, False: 47.3k]
  ------------------
  223|  28.3k|    case PGP_SA_CAMELLIA_256:
  ------------------
  |  Branch (223:5): [True: 428, False: 47.3k]
  ------------------
  224|  28.6k|    case PGP_SA_SM4:
  ------------------
  |  Branch (224:5): [True: 204, False: 47.5k]
  ------------------
  225|  28.6k|        return 16;
  226|  1.61k|    default:
  ------------------
  |  Branch (226:5): [True: 1.61k, False: 46.1k]
  ------------------
  227|  1.61k|        return 0;
  228|  47.7k|    }
  229|  47.7k|}

_ZN3pgp11FingerprintC2Ev:
   38|  1.88M|Fingerprint::Fingerprint() : keyid_({})
   39|  1.88M|{
   40|  1.88M|}
_ZN3pgp11FingerprintC2EPKhm:
   42|  96.0k|Fingerprint::Fingerprint(const uint8_t *data, size_t size) : Fingerprint()
   43|  96.0k|{
   44|  96.0k|    fp_.assign(data, data + size);
   45|  96.0k|}
_ZN3pgp11FingerprintC2ERK13pgp_key_pkt_t:
   48|   183k|{
   49|   183k|    switch (key.version) {
   50|  3.05k|    case PGP_V2:
  ------------------
  |  Branch (50:5): [True: 3.05k, False: 180k]
  ------------------
   51|  12.7k|    case PGP_V3: {
  ------------------
  |  Branch (51:5): [True: 9.70k, False: 173k]
  ------------------
   52|       |        /* v2/3 fingerprint is calculated from RSA public numbers */
   53|  12.7k|        if (!is_rsa_key_alg(key.alg)) {
  ------------------
  |  Branch (53:13): [True: 0, False: 12.7k]
  ------------------
   54|      0|            RNP_LOG("bad algorithm");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   55|      0|            throw rnp::rnp_exception(RNP_ERROR_NOT_SUPPORTED);
   56|      0|        }
   57|  12.7k|        auto &rsa = dynamic_cast<const pgp::RSAKeyMaterial &>(*key.material);
   58|  12.7k|        auto  hash = rnp::Hash::create(PGP_HASH_MD5);
   59|  12.7k|        hash->add(rsa.n());
   60|  12.7k|        hash->add(rsa.e());
   61|  12.7k|        fp_ = hash->finish();
   62|       |        /* keyid just low bytes of RSA n */
   63|  12.7k|        size_t n = rsa.n().size();
   64|  12.7k|        size_t sz = std::min(rsa.n().size(), keyid_.size());
   65|  12.7k|        std::memcpy(keyid_.data(), rsa.n().data() + n - sz, sz);
   66|  12.7k|        return;
   67|  12.7k|    }
   68|   159k|    case PGP_V4:
  ------------------
  |  Branch (68:5): [True: 159k, False: 24.0k]
  ------------------
   69|   160k|    case PGP_V5:
  ------------------
  |  Branch (69:5): [True: 1.26k, False: 181k]
  ------------------
   70|   160k|#if defined(ENABLE_CRYPTO_REFRESH)
   71|   170k|    case PGP_V6:
  ------------------
  |  Branch (71:5): [True: 10.0k, False: 173k]
  ------------------
   72|   170k|#endif
   73|   170k|    {
   74|   170k|        auto halg = key.version == PGP_V4 ? PGP_HASH_SHA1 : PGP_HASH_SHA256;
  ------------------
  |  Branch (74:21): [True: 159k, False: 11.3k]
  ------------------
   75|   170k|        auto hash = rnp::Hash::create(halg);
   76|   170k|        signature_hash_key(key, *hash, key.version);
   77|   170k|        fp_ = hash->finish();
   78|       |        /* keyid */
   79|   170k|        if (key.version == PGP_V4) {
  ------------------
  |  Branch (79:13): [True: 159k, False: 11.3k]
  ------------------
   80|   159k|            assert(fp_.size() == PGP_FINGERPRINT_V4_SIZE);
   81|   159k|            const size_t inc = PGP_FINGERPRINT_V4_SIZE - PGP_KEY_ID_SIZE;
  ------------------
  |  |   43|   159k|#define PGP_FINGERPRINT_V4_SIZE 20
  ------------------
                          const size_t inc = PGP_FINGERPRINT_V4_SIZE - PGP_KEY_ID_SIZE;
  ------------------
  |  |   39|   159k|#define PGP_KEY_ID_SIZE 8
  ------------------
   82|   159k|            memcpy(keyid_.data(), fp_.data() + inc, keyid_.size());
   83|   159k|        } else {
   84|  11.3k|            memcpy(keyid_.data(), fp_.data(), keyid_.size());
   85|  11.3k|        }
   86|   170k|        return;
   87|   160k|    }
   88|      0|    default:
  ------------------
  |  Branch (88:5): [True: 0, False: 183k]
  ------------------
   89|      0|        RNP_LOG("unsupported key version");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   90|      0|        throw rnp::rnp_exception(RNP_ERROR_NOT_SUPPORTED);
   91|   183k|    }
   92|   183k|}
_ZNK3pgp11FingerprinteqERKS0_:
   96|  3.05M|{
   97|  3.05M|    return fp_ == src.fp_;
   98|  3.05M|}
_ZNK3pgp11FingerprintneERKS0_:
  102|   157k|{
  103|   157k|    return !(*this == src);
  104|   157k|}
_ZNK3pgp11Fingerprint5keyidEv:
  115|   186k|{
  116|   186k|    return keyid_;
  117|   186k|}
_ZNK3pgp11Fingerprint4dataEv:
  127|  2.14M|{
  128|  2.14M|    return fp_.data();
  129|  2.14M|}
_ZNK3pgp11Fingerprint4sizeEv:
  133|  2.91M|{
  134|  2.91M|    return fp_.size();
  135|  2.91M|}

_ZNKSt3__14hashIN3pgp11FingerprintEEclERKS2_:
   88|  2.01M|    {
   89|       |        /* since fingerprint value is hash itself, we may use its low bytes */
   90|  2.01M|        size_t res = 0;
   91|  2.01M|        size_t copy = std::min(sizeof(res), fp.size());
   92|  2.01M|        std::memcpy(&res, fp.data(), copy);
   93|  2.01M|        return res;
   94|  2.01M|    }

_Z8json_addP11json_objectPKcS0_:
   35|   521k|{
   36|   521k|    if (!val) {
  ------------------
  |  Branch (36:9): [True: 0, False: 521k]
  ------------------
   37|      0|        return false;
   38|      0|    }
   39|       |    // TODO: in JSON-C 0.13 json_object_object_add returns bool instead of void
   40|   521k|    json_object_object_add(obj, name, val);
   41|   521k|    if (!json_object_object_get_ex(obj, name, NULL)) {
  ------------------
  |  Branch (41:9): [True: 0, False: 521k]
  ------------------
   42|      0|        json_object_put(val);
   43|      0|        return false;
   44|      0|    }
   45|       |
   46|   521k|    return true;
   47|   521k|}
_Z8json_addP11json_objectPKcS2_:
   51|   265k|{
   52|   265k|    return json_add(obj, name, json_object_new_string(value));
   53|   265k|}
_Z8json_addP11json_objectPKcRKNSt3__112basic_stringIcNS3_11char_traitsIcEENS3_9allocatorIcEEEE:
   85|   132k|{
   86|   132k|    return json_add(obj, name, json_object_new_string_len(value.data(), value.size()));
   87|   132k|}
_Z12json_add_hexP11json_objectPKcPKhm:
   91|   132k|{
   92|   132k|    if (val_len > 1024 * 1024) {
  ------------------
  |  Branch (92:9): [True: 0, False: 132k]
  ------------------
   93|      0|        RNP_LOG("too large json hex field: %zu", val_len);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   94|      0|        val_len = 1024 * 1024;
   95|      0|    }
   96|       |
   97|   132k|    return json_add(obj, name, bin_to_hex(val, val_len, rnp::HexFormat::Lowercase));
   98|   132k|}
_Z8json_addP11json_objectPKcRKN3pgp11FingerprintE:
  114|   132k|{
  115|   132k|    return json_add_hex(obj, name, fp.data(), fp.size());
  116|   132k|}
_Z14json_array_addP11json_objectS0_:
  126|   132k|{
  127|   132k|    if (!val) {
  ------------------
  |  Branch (127:9): [True: 0, False: 132k]
  ------------------
  128|      0|        return false;
  129|      0|    }
  130|   132k|    if (json_object_array_add(obj, val)) {
  ------------------
  |  Branch (130:9): [True: 0, False: 132k]
  ------------------
  131|      0|        json_object_put(val);
  132|      0|        return false;
  133|      0|    }
  134|   132k|    return true;
  135|   132k|}

_ZN3rnp10JSONObjectC2EP11json_object:
  138|   124k|    JSONObject(json_object *obj) : obj_(obj)
  139|   124k|    {
  140|   124k|    }
_ZN3rnp10JSONObjectD2Ev:
  143|   124k|    {
  144|   124k|        if (obj_) {
  ------------------
  |  Branch (144:13): [True: 124k, False: 0]
  ------------------
  145|   124k|            json_object_put(obj_);
  146|   124k|        }
  147|   124k|    }

_ZN3rnp9KeySearch6createERKNSt3__15arrayIhLm8EEE:
   56|  5.25k|{
   57|  5.25k|    return std::unique_ptr<KeySearch>(new KeyIDSearch(keyid));
   58|  5.25k|}
_ZN3rnp9KeySearch6createERKN3pgp11FingerprintE:
   62|  22.2k|{
   63|  22.2k|    return std::unique_ptr<KeySearch>(new KeyFingerprintSearch(fp));
   64|  22.2k|}
_ZNK3rnp11KeyIDSearch7matchesERKNS_3KeyE:
  125|  3.14k|{
  126|  3.14k|    return (key.keyid() == keyid_) || (keyid_ == pgp::KeyID({}));
  ------------------
  |  Branch (126:12): [True: 263, False: 2.88k]
  |  Branch (126:39): [True: 17, False: 2.86k]
  ------------------
  127|  3.14k|}
_ZN3rnp11KeyIDSearchC2ERKNSt3__15arrayIhLm8EEE:
  148|  5.25k|{
  149|  5.25k|    type_ = Type::KeyID;
  150|  5.25k|    keyid_ = keyid;
  151|  5.25k|}
_ZN3rnp20KeyFingerprintSearchC2ERKN3pgp11FingerprintE:
  172|  22.2k|{
  173|  22.2k|    type_ = Type::Fingerprint;
  174|  22.2k|    fp_ = fp;
  175|  22.2k|}
_ZNK3rnp20KeyFingerprintSearch6get_fpEv:
  179|  22.2k|{
  180|  22.2k|    return fp_;
  181|  22.2k|}

_ZNK3rnp9KeySearch4typeEv:
   49|  27.4k|    {
   50|  27.4k|        return type_;
   51|  27.4k|    }
_ZN3rnp11KeyProviderC2EPFPNS_3KeyEPK21pgp_key_request_ctx_tPvES6_:
  120|  48.1k|        : callback(cb), userdata(ud){};
_ZN3rnp9KeySearchD2Ev:
   55|  27.4k|    virtual ~KeySearch() = default;

_ZN14pgp_validity_t5resetEv:
   59|  1.12M|{
   60|  1.12M|    validated = false;
   61|  1.12M|    valid = false;
   62|  1.12M|    expired = false;
   63|  1.12M|}
_ZN3rnp3KeyC2ERK13pgp_key_pkt_t:
  416|   183k|Key::Key(const pgp_key_pkt_t &keypkt) : pkt_(keypkt)
  417|   183k|{
  418|   183k|    if (!is_key_pkt(pkt_.tag) || !pkt_.material->alg()) {
  ------------------
  |  Branch (418:9): [True: 0, False: 183k]
  |  Branch (418:34): [True: 0, False: 183k]
  ------------------
  419|      0|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  420|      0|    }
  421|   183k|    fingerprint_ = pgp::Fingerprint(pkt_);
  422|   183k|    grip_ = pkt_.material->grip();
  423|       |
  424|       |    /* parse secret key if not encrypted */
  425|   183k|    if (is_secret_key_pkt(pkt_.tag)) {
  ------------------
  |  Branch (425:9): [True: 60.8k, False: 122k]
  ------------------
  426|  60.8k|        bool cleartext = pkt_.sec_protection.s2k.usage == PGP_S2KU_NONE;
  427|  60.8k|        if (cleartext && decrypt_secret_key(&pkt_, NULL)) {
  ------------------
  |  Branch (427:13): [True: 14.2k, False: 46.6k]
  |  Branch (427:26): [True: 1.33k, False: 12.8k]
  ------------------
  428|  1.33k|            RNP_LOG("failed to setup key fields");
  ------------------
  |  |   76|  1.33k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.33k|    do {                                                                                 \
  |  |  |  |   69|  1.33k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.33k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.33k|            break;                                                                       \
  |  |  |  |   71|  1.33k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|  1.33k|            throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  430|  1.33k|        }
  431|       |        /* decryption resets validity */
  432|  59.5k|        pkt_.material->set_validity(keypkt.material->validity());
  433|  59.5k|    }
  434|       |    /* add rawpacket */
  435|   181k|    rawpkt_ = RawPacket(pkt_);
  436|   181k|    format = KeyFormat::GPG;
  437|   181k|}
_ZN3rnp3KeyC2ERKS0_b:
  445|   438k|{
  446|       |    /* Do some checks for g10 keys */
  447|   438k|    if (src.format == KeyFormat::G10) {
  ------------------
  |  Branch (447:9): [True: 0, False: 438k]
  ------------------
  448|      0|        if (pubonly) {
  ------------------
  |  Branch (448:13): [True: 0, False: 0]
  ------------------
  449|      0|            RNP_LOG("attempt to copy public part from g10 key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|      0|            throw std::invalid_argument("pubonly");
  451|      0|        }
  452|      0|    }
  453|       |
  454|   438k|    if (pubonly) {
  ------------------
  |  Branch (454:9): [True: 180k, False: 257k]
  ------------------
  455|   180k|        pkt_ = pgp_key_pkt_t(src.pkt_, true);
  456|   180k|        rawpkt_ = RawPacket(pkt_);
  457|   257k|    } else {
  458|   257k|        pkt_ = src.pkt_;
  459|   257k|        rawpkt_ = src.rawpkt_;
  460|   257k|    }
  461|       |
  462|   438k|    uids_ = src.uids_;
  463|   438k|    sigs_ = src.sigs_;
  464|   438k|    sigs_map_ = src.sigs_map_;
  465|   438k|    keysigs_ = src.keysigs_;
  466|   438k|    subkey_fps_ = src.subkey_fps_;
  467|   438k|    primary_fp_set_ = src.primary_fp_set_;
  468|   438k|    primary_fp_ = src.primary_fp_;
  469|   438k|    expiration_ = src.expiration_;
  470|   438k|    flags_ = src.flags_;
  471|   438k|    fingerprint_ = src.fingerprint_;
  472|   438k|    grip_ = src.grip_;
  473|   438k|    uid0_ = src.uid0_;
  474|   438k|    uid0_set_ = src.uid0_set_;
  475|   438k|    revoked_ = src.revoked_;
  476|   438k|    revocation_ = src.revocation_;
  477|   438k|    revokers_ = src.revokers_;
  478|   438k|    format = src.format;
  479|   438k|    validity_ = src.validity_;
  480|   438k|    valid_till_ = src.valid_till_;
  481|   438k|}
_ZN3rnp3KeyC2ERK22pgp_transferable_key_t:
  483|   108k|Key::Key(const pgp_transferable_key_t &src) : Key(src.key)
  484|   108k|{
  485|       |    /* add direct-key signatures */
  486|   108k|    for (auto &sig : src.signatures) {
  ------------------
  |  Branch (486:20): [True: 25.2k, False: 108k]
  ------------------
  487|  25.2k|        add_sig(sig);
  488|  25.2k|    }
  489|       |
  490|       |    /* add userids and their signatures */
  491|  4.66M|    for (auto &uid : src.userids) {
  ------------------
  |  Branch (491:20): [True: 4.66M, False: 108k]
  ------------------
  492|  4.66M|        add_uid(uid);
  493|  4.66M|    }
  494|   108k|}
_ZN3rnp3KeyC2ERK25pgp_transferable_subkey_tPS0_:
  496|  74.9k|Key::Key(const pgp_transferable_subkey_t &src, Key *primary) : Key(src.subkey)
  497|  74.9k|{
  498|       |    /* add subkey binding signatures */
  499|  74.9k|    for (auto &sig : src.signatures) {
  ------------------
  |  Branch (499:20): [True: 48.6k, False: 74.9k]
  ------------------
  500|  48.6k|        add_sig(sig);
  501|  48.6k|    }
  502|       |
  503|       |    /* setup key grips if primary is available */
  504|  74.9k|    if (primary) {
  ------------------
  |  Branch (504:9): [True: 68.1k, False: 6.86k]
  ------------------
  505|  68.1k|        primary->link_subkey_fp(*this);
  506|  68.1k|    }
  507|  74.9k|}
_ZNK3rnp3Key9sig_countEv:
  511|   609k|{
  512|   609k|    return sigs_.size();
  513|   609k|}
_ZN3rnp3Key7get_sigEm:
  517|  10.2k|{
  518|  10.2k|    return get_sig(sigs_.at(idx));
  519|  10.2k|}
_ZNK3rnp3Key7get_sigEm:
  523|   187k|{
  524|   187k|    return get_sig(sigs_.at(idx));
  525|   187k|}
_ZNK3rnp3Key7has_sigERKNSt3__15arrayIhLm20EEE:
  529|  18.5M|{
  530|  18.5M|    return sigs_map_.count(id);
  531|  18.5M|}
_ZN3rnp3Key7get_sigERKNSt3__15arrayIhLm20EEE:
  535|  18.1M|{
  536|  18.1M|    if (!has_sig(id)) {
  ------------------
  |  Branch (536:9): [True: 0, False: 18.1M]
  ------------------
  537|      0|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  538|      0|    }
  539|  18.1M|    return sigs_map_.at(id);
  540|  18.1M|}
_ZNK3rnp3Key7get_sigERKNSt3__15arrayIhLm20EEE:
  544|   227k|{
  545|   227k|    if (!has_sig(id)) {
  ------------------
  |  Branch (545:9): [True: 0, False: 227k]
  ------------------
  546|      0|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  547|      0|    }
  548|   227k|    return sigs_map_.at(id);
  549|   227k|}
_ZN3rnp3Key7add_sigERKN3pgp3pkt9SignatureEmb:
  580|   205k|{
  581|   205k|    auto sigid = sig.get_id();
  582|   205k|    sigs_map_.erase(sigid);
  583|   205k|    auto &res = sigs_map_.emplace(std::make_pair(sigid, sig)).first->second;
  584|   205k|    res.uid = uid;
  585|   205k|    if (uid == UserID::None) {
  ------------------
  |  Branch (585:9): [True: 85.4k, False: 120k]
  ------------------
  586|  85.4k|        size_t idx = begin ? 0 : keysigs_.size();
  ------------------
  |  Branch (586:22): [True: 0, False: 85.4k]
  ------------------
  587|  85.4k|        sigs_.insert(sigs_.begin() + idx, sigid);
  588|  85.4k|        keysigs_.insert(keysigs_.begin() + idx, sigid);
  589|  85.4k|        return res;
  590|  85.4k|    }
  591|       |
  592|       |    /* Calculate correct position in sigs_ */
  593|   120k|    size_t idx = keysigs_.size();
  594|  18.0M|    for (size_t u = 0; u < uid; u++) {
  ------------------
  |  Branch (594:24): [True: 17.9M, False: 120k]
  ------------------
  595|  17.9M|        idx += uids_[u].sig_count();
  596|  17.9M|    }
  597|   120k|    if (!begin) {
  ------------------
  |  Branch (597:9): [True: 120k, False: 0]
  ------------------
  598|   120k|        idx += uids_[uid].sig_count();
  599|   120k|    }
  600|   120k|    sigs_.insert(sigs_.begin() + idx, sigid);
  601|   120k|    uids_[uid].add_sig(sigid, begin);
  602|   120k|    return res;
  603|   205k|}
_ZNK3rnp3Key9uid_countEv:
  674|   572k|{
  675|   572k|    return uids_.size();
  676|   572k|}
_ZN3rnp3Key7get_uidEm:
  680|  47.6k|{
  681|  47.6k|    return uids_.at(idx);
  682|  47.6k|}
_ZNK3rnp3Key7get_uidEm:
  686|  53.9k|{
  687|  53.9k|    return uids_.at(idx);
  688|  53.9k|}
_ZNK3rnp3Key7uid_idxERK16pgp_userid_pkt_t:
  706|  2.70M|{
  707|  65.8M|    for (uint32_t idx = 0; idx < uids_.size(); idx++) {
  ------------------
  |  Branch (707:28): [True: 65.8M, False: 8.84k]
  ------------------
  708|  65.8M|        if (uids_[idx].pkt == uid) {
  ------------------
  |  Branch (708:13): [True: 2.69M, False: 63.1M]
  ------------------
  709|  2.69M|            return idx;
  710|  2.69M|        }
  711|  65.8M|    }
  712|  8.84k|    return UserID::None;
  713|  2.70M|}
_ZN3rnp3Key7add_uidERK25pgp_transferable_userid_t:
  763|  4.66M|{
  764|       |    /* construct userid */
  765|  4.66M|    uids_.emplace_back(uid.uid);
  766|       |    /* add certifications */
  767|  4.66M|    for (auto &sig : uid.signatures) {
  ------------------
  |  Branch (767:20): [True: 92.7k, False: 4.66M]
  ------------------
  768|  92.7k|        add_sig(sig, uid_count() - 1);
  769|  92.7k|    }
  770|  4.66M|    return uids_.back();
  771|  4.66M|}
_ZNK3rnp3Key7revokedEv:
  775|   825k|{
  776|   825k|    return revoked_;
  777|   825k|}
_ZN3rnp3Key13clear_revokesEv:
  790|  1.17M|{
  791|  1.17M|    revoked_ = false;
  792|  1.17M|    revocation_ = {};
  793|  38.9M|    for (auto &uid : uids_) {
  ------------------
  |  Branch (793:20): [True: 38.9M, False: 1.17M]
  ------------------
  794|  38.9M|        uid.revoked = false;
  795|  38.9M|        uid.revocation = {};
  796|  38.9M|    }
  797|  1.17M|}
_ZN3rnp3Key11add_revokerERKN3pgp11FingerprintE:
  801|  6.54k|{
  802|  6.54k|    if (std::find(revokers_.begin(), revokers_.end(), revoker) == revokers_.end()) {
  ------------------
  |  Branch (802:9): [True: 6.17k, False: 375]
  ------------------
  803|  6.17k|        revokers_.push_back(revoker);
  804|  6.17k|    }
  805|  6.54k|}
_ZNK3rnp3Key11has_revokerERKN3pgp11FingerprintE:
  809|  21.3k|{
  810|  21.3k|    return std::find(revokers_.begin(), revokers_.end(), revoker) != revokers_.end();
  811|  21.3k|}
_ZNK3rnp3Key3pktEv:
  827|   114k|{
  828|   114k|    return pkt_;
  829|   114k|}
_ZN3rnp3Key3pktEv:
  833|     62|{
  834|     62|    return pkt_;
  835|     62|}
_ZNK3rnp3Key8materialEv:
  845|   101k|{
  846|   101k|    return pkt_.material.get();
  847|   101k|}
_ZNK3rnp3Key3algEv:
  857|  1.14M|{
  858|  1.14M|    return pkt_.alg;
  859|  1.14M|}
_ZNK3rnp3Key9encryptedEv:
  881|  50.7k|{
  882|  50.7k|    return is_secret() && material() && !material()->secret();
  ------------------
  |  Branch (882:12): [True: 50.7k, False: 0]
  |  Branch (882:27): [True: 50.7k, False: 0]
  |  Branch (882:41): [True: 31.5k, False: 19.2k]
  ------------------
  883|  50.7k|}
_ZNK3rnp3Key10expirationEv:
  995|   978k|{
  996|   978k|    if (pkt_.version >= 4) {
  ------------------
  |  Branch (996:9): [True: 837k, False: 140k]
  ------------------
  997|   837k|        return expiration_;
  998|   837k|    }
  999|       |    /* too large value for pkt.v3_days may overflow uint32_t */
 1000|   140k|    if (pkt_.v3_days > (0xffffffffu / 86400)) {
  ------------------
  |  Branch (1000:9): [True: 14.6k, False: 126k]
  ------------------
 1001|  14.6k|        return 0xffffffffu;
 1002|  14.6k|    }
 1003|   126k|    return (uint32_t) pkt_.v3_days * 86400;
 1004|   140k|}
_ZNK3rnp3Key7expiredEv:
 1008|  2.16M|{
 1009|  2.16M|    return validity_.expired;
 1010|  2.16M|}
_ZNK3rnp3Key8creationEv:
 1014|   182k|{
 1015|   182k|    return pkt_.creation_time;
 1016|   182k|}
_ZNK3rnp3Key9is_secretEv:
 1026|   683k|{
 1027|   683k|    return is_secret_key_pkt(pkt_.tag);
 1028|   683k|}
_ZNK3rnp3Key10is_primaryEv:
 1032|  1.82M|{
 1033|  1.82M|    return is_primary_key_pkt(pkt_.tag);
 1034|  1.82M|}
_ZNK3rnp3Key9is_subkeyEv:
 1038|  2.40M|{
 1039|  2.40M|    return is_subkey_pkt(pkt_.tag);
 1040|  2.40M|}
_ZNK3rnp3Key9is_lockedEv:
 1044|  50.7k|{
 1045|  50.7k|    if (!is_secret()) {
  ------------------
  |  Branch (1045:9): [True: 0, False: 50.7k]
  ------------------
 1046|      0|        RNP_LOG("key is not a secret key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1047|      0|        return false;
 1048|      0|    }
 1049|  50.7k|    return encrypted();
 1050|  50.7k|}
_ZNK3rnp3Key5validEv:
 1064|  1.31M|{
 1065|  1.31M|    return validity_.validated && validity_.valid && !validity_.expired;
  ------------------
  |  Branch (1065:12): [True: 1.31M, False: 0]
  |  Branch (1065:35): [True: 106k, False: 1.21M]
  |  Branch (1065:54): [True: 106k, False: 0]
  ------------------
 1066|  1.31M|}
_ZNK3rnp3Key9validatedEv:
 1070|  1.32M|{
 1071|  1.32M|    return validity_.validated;
 1072|  1.32M|}
_ZNK3rnp3Key17valid_till_commonEb:
 1076|  1.17M|{
 1077|  1.17M|    if (!validated()) {
  ------------------
  |  Branch (1077:9): [True: 322k, False: 855k]
  ------------------
 1078|   322k|        return 0;
 1079|   322k|    }
 1080|   855k|    uint64_t till = expiration() ? (uint64_t) creation() + expiration() : UINT64_MAX;
  ------------------
  |  Branch (1080:21): [True: 65.2k, False: 790k]
  ------------------
 1081|   855k|    if (valid()) {
  ------------------
  |  Branch (1081:9): [True: 30.5k, False: 825k]
  ------------------
 1082|  30.5k|        return till;
 1083|  30.5k|    }
 1084|   825k|    if (revoked()) {
  ------------------
  |  Branch (1084:9): [True: 3.58k, False: 821k]
  ------------------
 1085|       |        /* we should not believe to the compromised key at all */
 1086|  3.58k|        if (revocation_.code == PGP_REVOCATION_COMPROMISED) {
  ------------------
  |  Branch (1086:13): [True: 2.63k, False: 946]
  ------------------
 1087|  2.63k|            return 0;
 1088|  2.63k|        }
 1089|    946|        auto &revsig = get_sig(revocation_.sigid);
 1090|    946|        if (revsig.sig.creation() > creation()) {
  ------------------
  |  Branch (1090:13): [True: 946, False: 0]
  ------------------
 1091|       |            /* pick less time from revocation time and expiration time */
 1092|    946|            return std::min((uint64_t) revsig.sig.creation(), till);
 1093|    946|        }
 1094|      0|        return 0;
 1095|    946|    }
 1096|       |    /* if key is not marked as expired then it wasn't valid at all */
 1097|   821k|    return expiry ? till : 0;
  ------------------
  |  Branch (1097:12): [True: 10.0k, False: 811k]
  ------------------
 1098|   825k|}
_ZNK3rnp3Key10valid_tillEv:
 1102|   602k|{
 1103|   602k|    return valid_till_;
 1104|   602k|}
_ZNK3rnp3Key5keyidEv:
 1116|   185k|{
 1117|   185k|    return fingerprint_.keyid();
 1118|   185k|}
_ZNK3rnp3Key2fpEv:
 1122|  2.19M|{
 1123|  2.19M|    return fingerprint_;
 1124|  2.19M|}
_ZNK3rnp3Key10primary_fpEv:
 1134|   454k|{
 1135|   454k|    if (!primary_fp_set_) {
  ------------------
  |  Branch (1135:9): [True: 0, False: 454k]
  ------------------
 1136|      0|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
 1137|      0|    }
 1138|   454k|    return primary_fp_;
 1139|   454k|}
_ZNK3rnp3Key14has_primary_fpEv:
 1143|   525k|{
 1144|   525k|    return primary_fp_set_;
 1145|   525k|}
_ZN3rnp3Key16unset_primary_fpEv:
 1149|  1.58k|{
 1150|  1.58k|    primary_fp_set_ = false;
 1151|  1.58k|    primary_fp_ = {};
 1152|  1.58k|}
_ZN3rnp3Key14link_subkey_fpERS0_:
 1156|   213k|{
 1157|   213k|    if (!is_primary() || !subkey.is_subkey()) {
  ------------------
  |  Branch (1157:9): [True: 35, False: 213k]
  |  Branch (1157:26): [True: 579, False: 213k]
  ------------------
 1158|    614|        throw rnp_exception(RNP_ERROR_BAD_PARAMETERS);
 1159|    614|    }
 1160|   213k|    subkey.primary_fp_ = fp();
 1161|   213k|    subkey.primary_fp_set_ = true;
 1162|   213k|    add_subkey_fp(subkey.fp());
 1163|   213k|}
_ZN3rnp3Key13add_subkey_fpERKN3pgp11FingerprintE:
 1167|   273k|{
 1168|   273k|    if (std::find(subkey_fps_.begin(), subkey_fps_.end(), fp) == subkey_fps_.end()) {
  ------------------
  |  Branch (1168:9): [True: 60.5k, False: 212k]
  ------------------
 1169|  60.5k|        subkey_fps_.push_back(fp);
 1170|  60.5k|    }
 1171|   273k|}
_ZNK3rnp3Key12subkey_countEv:
 1175|  1.17M|{
 1176|  1.17M|    return subkey_fps_.size();
 1177|  1.17M|}
_ZN3rnp3Key16remove_subkey_fpERKN3pgp11FingerprintE:
 1181|  19.0k|{
 1182|  19.0k|    auto it = std::find(subkey_fps_.begin(), subkey_fps_.end(), fp);
 1183|  19.0k|    if (it != subkey_fps_.end()) {
  ------------------
  |  Branch (1183:9): [True: 18.2k, False: 752]
  ------------------
 1184|  18.2k|        subkey_fps_.erase(it);
 1185|  18.2k|    }
 1186|  19.0k|}
_ZNK3rnp3Key13get_subkey_fpEm:
 1190|   444k|{
 1191|   444k|    return subkey_fps_[idx];
 1192|   444k|}
_ZNK3rnp3Key10subkey_fpsEv:
 1196|   103k|{
 1197|   103k|    return subkey_fps_;
 1198|   103k|}
_ZNK3rnp3Key12rawpkt_countEv:
 1202|   381k|{
 1203|   381k|    if (format == KeyFormat::G10) {
  ------------------
  |  Branch (1203:9): [True: 0, False: 381k]
  ------------------
 1204|      0|        return 1;
 1205|      0|    }
 1206|   381k|    return 1 + uid_count() + sig_count();
 1207|   381k|}
_ZNK3rnp3Key6rawpktEv:
 1217|    175|{
 1218|    175|    return rawpkt_;
 1219|    175|}
_ZN3rnp3Key14latest_selfsigEjb:
 1463|  2.60M|{
 1464|  2.60M|    uint32_t   latest = 0;
 1465|  2.60M|    Signature *res = nullptr;
 1466|       |
 1467|  6.84M|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (1467:22): [True: 6.84M, False: 2.60M]
  ------------------
 1468|  6.84M|        auto &sig = get_sig(sigid);
 1469|  6.84M|        if (validated && !sig.validity.valid()) {
  ------------------
  |  Branch (1469:13): [True: 6.84M, False: 0]
  |  Branch (1469:26): [True: 6.59M, False: 251k]
  ------------------
 1470|  6.59M|            continue;
 1471|  6.59M|        }
 1472|   251k|        bool skip = false;
 1473|   251k|        switch (uid) {
 1474|  80.7k|        case UserID::None:
  ------------------
  |  Branch (1474:9): [True: 80.7k, False: 170k]
  ------------------
 1475|  80.7k|            skip = (sig.uid != UserID::None) || !is_direct_self(sig);
  ------------------
  |  Branch (1475:20): [True: 55.6k, False: 25.0k]
  |  Branch (1475:49): [True: 1.64k, False: 23.4k]
  ------------------
 1476|  80.7k|            break;
 1477|  77.2k|        case UserID::Primary: {
  ------------------
  |  Branch (1477:9): [True: 77.2k, False: 174k]
  ------------------
 1478|  77.2k|            skip = !is_self_cert(sig) ||
  ------------------
  |  Branch (1478:20): [True: 29.1k, False: 48.0k]
  ------------------
 1479|  48.0k|                   !sig.sig.get_subpkt(pgp::pkt::sigsub::Type::PrimaryUserID) ||
  ------------------
  |  Branch (1479:20): [True: 28.0k, False: 20.0k]
  ------------------
 1480|  20.0k|                   !sig.sig.primary_uid() || (sig.uid == UserID::None);
  ------------------
  |  Branch (1480:20): [True: 330, False: 19.7k]
  |  Branch (1480:46): [True: 0, False: 19.7k]
  ------------------
 1481|  77.2k|            break;
 1482|      0|        }
 1483|  63.7k|        case UserID::Any:
  ------------------
  |  Branch (1483:9): [True: 63.7k, False: 187k]
  ------------------
 1484|  63.7k|            skip = !is_self_cert(sig) || (sig.uid == UserID::None);
  ------------------
  |  Branch (1484:20): [True: 22.6k, False: 41.0k]
  |  Branch (1484:42): [True: 0, False: 41.0k]
  ------------------
 1485|  63.7k|            break;
 1486|  29.5k|        default:
  ------------------
  |  Branch (1486:9): [True: 29.5k, False: 221k]
  ------------------
 1487|  29.5k|            skip = (sig.uid != uid) || !is_self_cert(sig);
  ------------------
  |  Branch (1487:20): [True: 8.20k, False: 21.3k]
  |  Branch (1487:40): [True: 1.59k, False: 19.7k]
  ------------------
 1488|  29.5k|            break;
 1489|   251k|        }
 1490|   251k|        if (skip) {
  ------------------
  |  Branch (1490:13): [True: 147k, False: 104k]
  ------------------
 1491|   147k|            continue;
 1492|   147k|        }
 1493|       |
 1494|   104k|        uint32_t creation = sig.sig.creation();
 1495|   104k|        if (creation >= latest) {
  ------------------
  |  Branch (1495:13): [True: 101k, False: 2.59k]
  ------------------
 1496|   101k|            latest = creation;
 1497|   101k|            res = &sig;
 1498|   101k|        }
 1499|   104k|    }
 1500|       |
 1501|       |    /* if there is later self-sig for the same uid without primary flag, then drop res */
 1502|  2.60M|    if ((uid == UserID::Primary) && res) {
  ------------------
  |  Branch (1502:9): [True: 862k, False: 1.73M]
  |  Branch (1502:37): [True: 19.4k, False: 843k]
  ------------------
 1503|  19.4k|        auto overres = latest_selfsig(res->uid, validated);
 1504|  19.4k|        if (overres && (overres->sig.creation() > res->sig.creation())) {
  ------------------
  |  Branch (1504:13): [True: 19.4k, False: 0]
  |  Branch (1504:24): [True: 66, False: 19.4k]
  ------------------
 1505|     66|            res = nullptr;
 1506|     66|        }
 1507|  19.4k|    }
 1508|  2.60M|    return res;
 1509|  2.60M|}
_ZN3rnp3Key14latest_bindingEb:
 1513|  1.00M|{
 1514|  1.00M|    uint32_t   latest = 0;
 1515|  1.00M|    Signature *res = nullptr;
 1516|       |
 1517|  1.40M|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (1517:22): [True: 1.40M, False: 1.00M]
  ------------------
 1518|  1.40M|        auto &sig = get_sig(sigid);
 1519|  1.40M|        if (validated && !sig.validity.valid()) {
  ------------------
  |  Branch (1519:13): [True: 1.29M, False: 106k]
  |  Branch (1519:26): [True: 1.27M, False: 21.2k]
  ------------------
 1520|  1.27M|            continue;
 1521|  1.27M|        }
 1522|   127k|        if (!is_binding(sig)) {
  ------------------
  |  Branch (1522:13): [True: 98.1k, False: 29.4k]
  ------------------
 1523|  98.1k|            continue;
 1524|  98.1k|        }
 1525|       |
 1526|  29.4k|        uint32_t creation = sig.sig.creation();
 1527|  29.4k|        if (creation >= latest) {
  ------------------
  |  Branch (1527:13): [True: 28.5k, False: 916]
  ------------------
 1528|  28.5k|            latest = creation;
 1529|  28.5k|            res = &sig;
 1530|  28.5k|        }
 1531|  29.4k|    }
 1532|  1.00M|    return res;
 1533|  1.00M|}
_ZNK3rnp3Key9is_signerERKNS_9SignatureE:
 1565|  1.44M|{
 1566|       |    /* if we have fingerprint let's check it */
 1567|  1.44M|    if (sig.sig.has_keyfp()) {
  ------------------
  |  Branch (1567:9): [True: 654k, False: 795k]
  ------------------
 1568|   654k|        return sig.sig.keyfp() == fp();
 1569|   654k|    }
 1570|   795k|    if (!sig.sig.has_keyid()) {
  ------------------
  |  Branch (1570:9): [True: 645k, False: 149k]
  ------------------
 1571|   645k|        return false;
 1572|   645k|    }
 1573|   149k|    return keyid() == sig.sig.keyid();
 1574|   795k|}
_ZNK3rnp3Key12expired_withERKNS_9SignatureEm:
 1578|  31.4k|{
 1579|       |    /* key expiration: absence of subpkt or 0 means it never expires */
 1580|  31.4k|    uint64_t expiration = sig.sig.key_expiration();
 1581|  31.4k|    if (!expiration) {
  ------------------
  |  Branch (1581:9): [True: 24.4k, False: 6.94k]
  ------------------
 1582|  24.4k|        return false;
 1583|  24.4k|    }
 1584|  6.94k|    return expiration + creation() < at;
 1585|  31.4k|}
_ZNK3rnp3Key12is_self_certERKNS_9SignatureE:
 1589|   352k|{
 1590|   352k|    return is_primary() && sig.is_cert() && is_signer(sig);
  ------------------
  |  Branch (1590:12): [True: 331k, False: 21.2k]
  |  Branch (1590:28): [True: 183k, False: 148k]
  |  Branch (1590:45): [True: 183k, False: 0]
  ------------------
 1591|   352k|}
_ZNK3rnp3Key14is_direct_selfERKNS_9SignatureE:
 1595|   168k|{
 1596|   168k|    return is_primary() && (sig.sig.type() == PGP_SIG_DIRECT) && is_signer(sig);
  ------------------
  |  Branch (1596:12): [True: 168k, False: 0]
  |  Branch (1596:28): [True: 44.0k, False: 124k]
  |  Branch (1596:66): [True: 44.0k, False: 0]
  ------------------
 1597|   168k|}
_ZNK3rnp3Key13is_revocationERKNS_9SignatureE:
 1601|   203k|{
 1602|   203k|    return is_primary() ? (sig.sig.type() == PGP_SIG_REV_KEY) :
  ------------------
  |  Branch (1602:12): [True: 162k, False: 40.4k]
  ------------------
 1603|   203k|                          (sig.sig.type() == PGP_SIG_REV_SUBKEY);
 1604|   203k|}
_ZNK3rnp3Key17is_uid_revocationERKNS_9SignatureE:
 1608|  98.7k|{
 1609|  98.7k|    return is_primary() && (sig.sig.type() == PGP_SIG_REV_CERT);
  ------------------
  |  Branch (1609:12): [True: 98.7k, False: 0]
  |  Branch (1609:28): [True: 20.4k, False: 78.2k]
  ------------------
 1610|  98.7k|}
_ZNK3rnp3Key10is_bindingERKNS_9SignatureE:
 1614|   245k|{
 1615|   245k|    return is_subkey() && (sig.sig.type() == PGP_SIG_SUBKEY);
  ------------------
  |  Branch (1615:12): [True: 197k, False: 47.6k]
  |  Branch (1615:27): [True: 75.9k, False: 122k]
  ------------------
 1616|   245k|}
_ZNK3rnp3Key12validate_sigERKS0_RNS_9SignatureERKNS_15SecurityContextE:
 1620|   104k|{
 1621|   104k|    sig.validity.reset();
 1622|       |
 1623|   104k|    SignatureInfo sinfo;
 1624|   104k|    sinfo.sig = &sig.sig;
 1625|   104k|    sinfo.signer_valid = true;
 1626|   104k|    sinfo.ignore_expiry = key.is_self_cert(sig) || key.is_binding(sig);
  ------------------
  |  Branch (1626:27): [True: 37.3k, False: 67.1k]
  |  Branch (1626:52): [True: 19.7k, False: 47.4k]
  ------------------
 1627|   104k|    sinfo.ignore_sig_expiry = sig.is_revocation();
 1628|       |
 1629|   104k|    pgp_sig_type_t stype = sig.sig.type();
 1630|   104k|    try {
 1631|   104k|        switch (stype) {
 1632|      0|        case PGP_SIG_BINARY:
  ------------------
  |  Branch (1632:9): [True: 0, False: 104k]
  ------------------
 1633|      0|        case PGP_SIG_TEXT:
  ------------------
  |  Branch (1633:9): [True: 0, False: 104k]
  ------------------
 1634|      0|        case PGP_SIG_STANDALONE:
  ------------------
  |  Branch (1634:9): [True: 0, False: 104k]
  ------------------
 1635|      0|        case PGP_SIG_PRIMARY:
  ------------------
  |  Branch (1635:9): [True: 0, False: 104k]
  ------------------
 1636|      0|            RNP_LOG("Invalid key signature type: %d", (int) stype);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1637|      0|            sinfo.validity.add_error(RNP_ERROR_SIG_WRONG_KEY_SIG);
 1638|      0|            break;
 1639|  4.65k|        case PGP_CERT_GENERIC:
  ------------------
  |  Branch (1639:9): [True: 4.65k, False: 99.9k]
  ------------------
 1640|  4.79k|        case PGP_CERT_PERSONA:
  ------------------
  |  Branch (1640:9): [True: 134, False: 104k]
  ------------------
 1641|  4.93k|        case PGP_CERT_CASUAL:
  ------------------
  |  Branch (1641:9): [True: 137, False: 104k]
  ------------------
 1642|  37.3k|        case PGP_CERT_POSITIVE:
  ------------------
  |  Branch (1642:9): [True: 32.4k, False: 72.1k]
  ------------------
 1643|  53.9k|        case PGP_SIG_REV_CERT: {
  ------------------
  |  Branch (1643:9): [True: 16.5k, False: 87.9k]
  ------------------
 1644|  53.9k|            if (sig.uid >= key.uid_count()) {
  ------------------
  |  Branch (1644:17): [True: 63, False: 53.9k]
  ------------------
 1645|     63|                RNP_LOG("Userid not found");
  ------------------
  |  |   76|     63|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     63|    do {                                                                                 \
  |  |  |  |   69|     63|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 63, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     63|            break;                                                                       \
  |  |  |  |   71|     63|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1646|     63|                sinfo.validity.add_error(RNP_ERROR_SIG_UID_MISSING);
 1647|     63|                break;
 1648|     63|            }
 1649|  53.9k|            validate_cert(sinfo, key.pkt(), key.get_uid(sig.uid).pkt, ctx);
 1650|  53.9k|            break;
 1651|  53.9k|        }
 1652|  19.7k|        case PGP_SIG_SUBKEY:
  ------------------
  |  Branch (1652:9): [True: 19.7k, False: 84.8k]
  ------------------
 1653|  19.7k|            if (!is_signer(sig)) {
  ------------------
  |  Branch (1653:17): [True: 6.42k, False: 13.3k]
  ------------------
 1654|  6.42k|                RNP_LOG("Invalid subkey binding's signer.");
  ------------------
  |  |   76|  6.42k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  6.42k|    do {                                                                                 \
  |  |  |  |   69|  6.42k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 6.42k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  6.42k|            break;                                                                       \
  |  |  |  |   71|  6.42k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1655|  6.42k|                sinfo.validity.add_error(RNP_ERROR_SIG_WRONG_BINDING);
 1656|  6.42k|                break;
 1657|  6.42k|            }
 1658|  13.3k|            validate_binding(sinfo, key, ctx);
 1659|  13.3k|            break;
 1660|  5.35k|        case PGP_SIG_DIRECT:
  ------------------
  |  Branch (1660:9): [True: 5.35k, False: 99.2k]
  ------------------
 1661|  5.35k|            if (!is_signer(sig)) {
  ------------------
  |  Branch (1661:17): [True: 0, False: 5.35k]
  ------------------
 1662|      0|                RNP_LOG("Invalid direct key signer.");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1663|      0|                sinfo.validity.add_error(RNP_ERROR_SIG_WRONG_DIRECT);
 1664|      0|                break;
 1665|      0|            }
 1666|  5.35k|            validate_direct(sinfo, ctx);
 1667|  5.35k|            break;
 1668|  24.0k|        case PGP_SIG_REV_KEY:
  ------------------
  |  Branch (1668:9): [True: 24.0k, False: 80.5k]
  ------------------
 1669|  24.0k|            if (!is_signer(sig)) {
  ------------------
  |  Branch (1669:17): [True: 162, False: 23.8k]
  ------------------
 1670|    162|                RNP_LOG("Invalid key revocation signer.");
  ------------------
  |  |   76|    162|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    162|    do {                                                                                 \
  |  |  |  |   69|    162|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 162, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    162|            break;                                                                       \
  |  |  |  |   71|    162|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1671|    162|                sinfo.validity.add_error(RNP_ERROR_SIG_WRONG_REV);
 1672|    162|                break;
 1673|    162|            }
 1674|  23.8k|            validate_key_rev(sinfo, key.pkt(), ctx);
 1675|  23.8k|            break;
 1676|  1.45k|        case PGP_SIG_REV_SUBKEY:
  ------------------
  |  Branch (1676:9): [True: 1.45k, False: 103k]
  ------------------
 1677|  1.45k|            if (!is_signer(sig)) {
  ------------------
  |  Branch (1677:17): [True: 472, False: 985]
  ------------------
 1678|    472|                RNP_LOG("Invalid subkey revocation's signer.");
  ------------------
  |  |   76|    472|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    472|    do {                                                                                 \
  |  |  |  |   69|    472|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 472, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    472|            break;                                                                       \
  |  |  |  |   71|    472|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1679|    472|                sinfo.validity.add_error(RNP_ERROR_SIG_WRONG_REV);
 1680|    472|                break;
 1681|    472|            }
 1682|    985|            validate_sub_rev(sinfo, key.pkt(), ctx);
 1683|    985|            break;
 1684|      0|        default:
  ------------------
  |  Branch (1684:9): [True: 0, False: 104k]
  ------------------
 1685|      0|            RNP_LOG("Unsupported key signature type: %d", (int) stype);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1686|      0|            sinfo.validity.add_error(RNP_ERROR_SIG_UNSUPPORTED);
 1687|      0|            break;
 1688|   104k|        }
 1689|   104k|    } catch (const std::exception &e) {
 1690|  1.86k|        RNP_LOG("Key signature validation failed: %s", e.what());
  ------------------
  |  |   76|  1.86k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.86k|    do {                                                                                 \
  |  |  |  |   69|  1.86k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.86k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.86k|            break;                                                                       \
  |  |  |  |   71|  1.86k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1691|  1.86k|        sinfo.validity.add_error(RNP_ERROR_SIG_ERROR);
 1692|  1.86k|    }
 1693|       |
 1694|   104k|    sinfo.validity.mark_validated();
 1695|   104k|    sig.validity = std::move(sinfo.validity);
 1696|   104k|}
_ZNK3rnp3Key12validate_sigERNS_13SignatureInfoERNS_4HashERKNS_15SecurityContextEPK17pgp_literal_hdr_t:
 1703|  97.0k|{
 1704|       |    /* Validate signature itself */
 1705|  97.0k|    auto res = signature_validate(*sinfo.sig, *pkt_.material, hash, ctx, hdr);
 1706|  97.0k|    if (!sinfo.signer_valid && !valid_at(sinfo.sig->creation())) {
  ------------------
  |  Branch (1706:9): [True: 0, False: 97.0k]
  |  Branch (1706:32): [True: 0, False: 0]
  ------------------
 1707|      0|        RNP_LOG("invalid or untrusted key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1708|      0|        res.add_error(RNP_ERROR_SIG_SIGNER_UNTRUSTED);
 1709|      0|    }
 1710|       |
 1711|       |    /* Check signature's expiration time */
 1712|  97.0k|    uint32_t now = ctx.time();
 1713|  97.0k|    uint32_t create = sinfo.sig->creation();
 1714|  97.0k|    uint32_t expiry = sinfo.sig->expiration();
 1715|  97.0k|    if (create > now) {
  ------------------
  |  Branch (1715:9): [True: 4.12k, False: 92.9k]
  ------------------
 1716|       |        /* signature created later then now */
 1717|  4.12k|        RNP_LOG("signature created %d seconds in future", (int) (create - now));
  ------------------
  |  |   76|  4.12k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  4.12k|    do {                                                                                 \
  |  |  |  |   69|  4.12k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 4.12k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  4.12k|            break;                                                                       \
  |  |  |  |   71|  4.12k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1718|  4.12k|        if (!sinfo.ignore_sig_expiry) {
  ------------------
  |  Branch (1718:13): [True: 2.24k, False: 1.88k]
  ------------------
 1719|  2.24k|            res.add_error(RNP_ERROR_SIG_FROM_FUTURE);
 1720|  2.24k|        }
 1721|  4.12k|    }
 1722|  97.0k|    if (create && expiry && (create + expiry < now)) {
  ------------------
  |  Branch (1722:9): [True: 90.1k, False: 6.91k]
  |  Branch (1722:19): [True: 857, False: 89.2k]
  |  Branch (1722:29): [True: 691, False: 166]
  ------------------
 1723|       |        /* signature expired */
 1724|    691|        RNP_LOG("signature expired");
  ------------------
  |  |   76|    691|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    691|    do {                                                                                 \
  |  |  |  |   69|    691|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 691, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    691|            break;                                                                       \
  |  |  |  |   71|    691|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1725|    691|        if (!sinfo.ignore_sig_expiry) {
  ------------------
  |  Branch (1725:13): [True: 657, False: 34]
  ------------------
 1726|    657|            res.add_error(RNP_ERROR_SIG_EXPIRED);
 1727|    657|        }
 1728|    691|    }
 1729|       |
 1730|       |    /* check key creation time vs signature creation */
 1731|  97.0k|    if (creation() > create) {
  ------------------
  |  Branch (1731:9): [True: 17.7k, False: 79.2k]
  ------------------
 1732|  17.7k|        RNP_LOG("key is newer than signature");
  ------------------
  |  |   76|  17.7k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  17.7k|    do {                                                                                 \
  |  |  |  |   69|  17.7k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 17.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  17.7k|            break;                                                                       \
  |  |  |  |   71|  17.7k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1733|  17.7k|        res.add_error(RNP_ERROR_SIG_OLDER_KEY);
 1734|  17.7k|    }
 1735|       |
 1736|       |    /* check whether key was not expired when sig created */
 1737|  97.0k|    if (!sinfo.ignore_expiry && expiration() && (creation() + expiration() < create)) {
  ------------------
  |  Branch (1737:9): [True: 45.0k, False: 51.9k]
  |  Branch (1737:33): [True: 12.3k, False: 32.7k]
  |  Branch (1737:49): [True: 2.47k, False: 9.85k]
  ------------------
 1738|  2.47k|        RNP_LOG("signature made after key expiration");
  ------------------
  |  |   76|  2.47k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  2.47k|    do {                                                                                 \
  |  |  |  |   69|  2.47k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 2.47k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  2.47k|            break;                                                                       \
  |  |  |  |   71|  2.47k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1739|  2.47k|        res.add_error(RNP_ERROR_SIG_EXPIRED_KEY);
 1740|  2.47k|    }
 1741|       |
 1742|       |    /* Check signer's fingerprint */
 1743|  97.0k|    if (sinfo.sig->has_keyfp() && (sinfo.sig->keyfp() != fp())) {
  ------------------
  |  Branch (1743:9): [True: 65.5k, False: 31.4k]
  |  Branch (1743:9): [True: 74, False: 96.9k]
  |  Branch (1743:35): [True: 74, False: 65.5k]
  ------------------
 1744|     74|        RNP_LOG("issuer fingerprint doesn't match signer's one");
  ------------------
  |  |   76|     74|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     74|    do {                                                                                 \
  |  |  |  |   69|     74|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 74, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     74|            break;                                                                       \
  |  |  |  |   71|     74|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1745|     74|        res.add_error(RNP_ERROR_SIG_FP_MISMATCH);
 1746|     74|    }
 1747|       |
 1748|       |    /* Check for unknown critical notations */
 1749|   485k|    for (auto &subpkt : sinfo.sig->subpkts) {
  ------------------
  |  Branch (1749:23): [True: 485k, False: 97.0k]
  ------------------
 1750|   485k|        if (!subpkt->critical() || (subpkt->type() != pgp::pkt::sigsub::Type::NotationData)) {
  ------------------
  |  Branch (1750:13): [True: 477k, False: 7.41k]
  |  Branch (1750:36): [True: 7.09k, False: 325]
  ------------------
 1751|   484k|            continue;
 1752|   484k|        }
 1753|    325|        auto &notation = dynamic_cast<pgp::pkt::sigsub::NotationData &>(*subpkt);
 1754|    325|        RNP_LOG("unknown critical notation: %s", notation.name().c_str());
  ------------------
  |  |   76|    325|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    325|    do {                                                                                 \
  |  |  |  |   69|    325|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 325, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    325|            break;                                                                       \
  |  |  |  |   71|    325|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1755|    325|        res.add_error(RNP_ERROR_SIG_UNKNOWN_NOTATION);
 1756|    325|    }
 1757|       |
 1758|   194k|    for (auto &err : res.errors()) {
  ------------------
  |  Branch (1758:20): [True: 194k, False: 97.0k]
  ------------------
 1759|   194k|        sinfo.validity.add_error(err);
 1760|   194k|    }
 1761|  97.0k|    sinfo.validity.mark_validated();
 1762|  97.0k|}
_ZNK3rnp3Key13validate_certERNS_13SignatureInfoERK13pgp_key_pkt_tRK16pgp_userid_pkt_tRKNS_15SecurityContextE:
 1769|  53.9k|{
 1770|  53.9k|    auto hash = signature_hash_certification(*sinfo.sig, key, uid);
 1771|  53.9k|    validate_sig(sinfo, *hash, ctx);
 1772|  53.9k|}
_ZNK3rnp3Key16validate_bindingERNS_13SignatureInfoERKS0_RKNS_15SecurityContextE:
 1778|  13.3k|{
 1779|  13.3k|    if (!is_primary() || !subkey.is_subkey()) {
  ------------------
  |  Branch (1779:9): [True: 0, False: 13.3k]
  |  Branch (1779:26): [True: 0, False: 13.3k]
  ------------------
 1780|      0|        RNP_LOG("Invalid binding signature key type(s)");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1781|      0|        sinfo.validity.add_error(RNP_ERROR_SIG_ERROR);
 1782|      0|        sinfo.validity.mark_validated();
 1783|      0|        return;
 1784|      0|    }
 1785|  13.3k|    auto hash = signature_hash_binding(*sinfo.sig, pkt(), subkey.pkt());
 1786|  13.3k|    validate_sig(sinfo, *hash, ctx);
 1787|       |    /* Check whether subkey is capable of signing and return otherwise */
 1788|  13.3k|    if (!sinfo.validity.valid() || !(sinfo.sig->key_flags() & PGP_KF_SIGN)) {
  ------------------
  |  Branch (1788:9): [True: 10.5k, False: 2.79k]
  |  Branch (1788:36): [True: 529, False: 2.26k]
  ------------------
 1789|  11.0k|        return;
 1790|  11.0k|    }
 1791|       |
 1792|       |    /* check primary key binding signature if any */
 1793|  2.32k|    auto sub = dynamic_cast<pgp::pkt::sigsub::EmbeddedSignature *>(
 1794|  2.32k|      sinfo.sig->get_subpkt(pgp::pkt::sigsub::Type::EmbeddedSignature, false));
 1795|  2.32k|    if (!sub) {
  ------------------
  |  Branch (1795:9): [True: 535, False: 1.78k]
  ------------------
 1796|    535|        RNP_LOG("error! no primary key binding signature");
  ------------------
  |  |   76|    535|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    535|    do {                                                                                 \
  |  |  |  |   69|    535|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 535, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    535|            break;                                                                       \
  |  |  |  |   71|    535|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1797|    535|        sinfo.validity.add_error(RNP_ERROR_SIG_NO_PRIMARY_BINDING);
 1798|    535|        return;
 1799|    535|    }
 1800|  1.78k|    if (!sub->signature()) {
  ------------------
  |  Branch (1800:9): [True: 0, False: 1.78k]
  ------------------
 1801|      0|        RNP_LOG("invalid embedded signature subpacket");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1802|      0|        sinfo.validity.add_error(RNP_ERROR_SIG_BINDING_PARSE);
 1803|      0|        return;
 1804|      0|    }
 1805|  1.78k|    if (sub->signature()->type() != PGP_SIG_PRIMARY) {
  ------------------
  |  Branch (1805:9): [True: 252, False: 1.53k]
  ------------------
 1806|    252|        RNP_LOG("invalid primary key binding signature");
  ------------------
  |  |   76|    252|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    252|    do {                                                                                 \
  |  |  |  |   69|    252|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 252, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    252|            break;                                                                       \
  |  |  |  |   71|    252|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1807|    252|        sinfo.validity.add_error(RNP_ERROR_SIG_WRONG_BIND_TYPE);
 1808|    252|        return;
 1809|    252|    }
 1810|  1.53k|    if (sub->signature()->version < PGP_V4) {
  ------------------
  |  Branch (1810:9): [True: 0, False: 1.53k]
  ------------------
 1811|      0|        RNP_LOG("invalid primary key binding signature version");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1812|      0|        sinfo.validity.add_error(RNP_ERROR_SIG_WRONG_BIND_TYPE);
 1813|      0|        return;
 1814|      0|    }
 1815|       |
 1816|  1.53k|    hash = signature_hash_binding(*sub->signature(), pkt(), subkey.pkt());
 1817|  1.53k|    SignatureInfo bindinfo;
 1818|  1.53k|    bindinfo.sig = sub->signature();
 1819|  1.53k|    bindinfo.signer_valid = true;
 1820|  1.53k|    bindinfo.ignore_expiry = true;
 1821|  1.53k|    subkey.validate_sig(bindinfo, *hash, ctx);
 1822|  1.53k|    if (!bindinfo.validity.valid()) {
  ------------------
  |  Branch (1822:9): [True: 249, False: 1.28k]
  ------------------
 1823|    249|        sinfo.validity.add_error(RNP_ERROR_SIG_INVALID_BINDING);
 1824|    502|        for (auto &err : bindinfo.validity.errors()) {
  ------------------
  |  Branch (1824:24): [True: 502, False: 249]
  ------------------
 1825|    502|            sinfo.validity.add_error(err);
 1826|    502|        }
 1827|    249|    }
 1828|  1.53k|}
_ZNK3rnp3Key16validate_sub_revERNS_13SignatureInfoERK13pgp_key_pkt_tRKNS_15SecurityContextE:
 1834|    985|{
 1835|    985|    auto hash = signature_hash_binding(*sinfo.sig, pkt(), subkey);
 1836|    985|    validate_sig(sinfo, *hash, ctx);
 1837|    985|}
_ZNK3rnp3Key15validate_directERNS_13SignatureInfoERKNS_15SecurityContextE:
 1841|  5.35k|{
 1842|  5.35k|    auto hash = signature_hash_direct(*sinfo.sig, pkt());
 1843|  5.35k|    validate_sig(sinfo, *hash, ctx);
 1844|  5.35k|}
_ZNK3rnp3Key16validate_key_revERNS_13SignatureInfoERK13pgp_key_pkt_tRKNS_15SecurityContextE:
 1850|  23.8k|{
 1851|  23.8k|    auto hash = signature_hash_direct(*sinfo.sig, key);
 1852|  23.8k|    validate_sig(sinfo, *hash, ctx);
 1853|  23.8k|}
_ZN3rnp3Key24validate_self_signaturesERKNS_15SecurityContextE:
 1857|   866k|{
 1858|  2.28M|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (1858:22): [True: 2.28M, False: 866k]
  ------------------
 1859|  2.28M|        auto &sig = get_sig(sigid);
 1860|  2.28M|        if (sig.validity.validated()) {
  ------------------
  |  Branch (1860:13): [True: 1.16M, False: 1.11M]
  ------------------
 1861|  1.16M|            continue;
 1862|  1.16M|        }
 1863|  1.11M|        if (!is_signer(sig)) {
  ------------------
  |  Branch (1863:13): [True: 1.02M, False: 91.3k]
  ------------------
 1864|  1.02M|            continue;
 1865|  1.02M|        }
 1866|       |
 1867|  91.3k|        if (is_direct_self(sig) || is_self_cert(sig) || is_uid_revocation(sig) ||
  ------------------
  |  Branch (1867:13): [True: 5.35k, False: 85.9k]
  |  Branch (1867:36): [True: 37.3k, False: 48.5k]
  |  Branch (1867:57): [True: 16.5k, False: 31.9k]
  ------------------
 1868|  66.4k|            is_revocation(sig)) {
  ------------------
  |  Branch (1868:13): [True: 7.15k, False: 24.8k]
  ------------------
 1869|  66.4k|            validate_sig(*this, sig, ctx);
 1870|  66.4k|        }
 1871|  91.3k|    }
 1872|   866k|}
_ZN3rnp3Key24validate_self_signaturesERS0_RKNS_15SecurityContextE:
 1876|  1.06M|{
 1877|  1.38M|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (1877:22): [True: 1.38M, False: 1.06M]
  ------------------
 1878|  1.38M|        auto &sig = get_sig(sigid);
 1879|  1.38M|        if (sig.validity.validated()) {
  ------------------
  |  Branch (1879:13): [True: 1.34M, False: 43.4k]
  ------------------
 1880|  1.34M|            continue;
 1881|  1.34M|        }
 1882|       |
 1883|  43.4k|        if (is_binding(sig) || is_revocation(sig)) {
  ------------------
  |  Branch (1883:13): [True: 19.7k, False: 23.7k]
  |  Branch (1883:32): [True: 1.62k, False: 22.0k]
  ------------------
 1884|  21.3k|            primary.validate_sig(*this, sig, ctx);
 1885|  21.3k|        }
 1886|  43.4k|    }
 1887|  1.06M|}
_ZN3rnp3Key22validate_desig_revokesERNS_8KeyStoreE:
 1891|  1.59M|{
 1892|  1.59M|    if (revokers_.empty()) {
  ------------------
  |  Branch (1892:9): [True: 1.58M, False: 7.97k]
  ------------------
 1893|  1.58M|        return false;
 1894|  1.58M|    }
 1895|  7.97k|    bool refresh = false;
 1896|  48.5k|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (1896:22): [True: 48.5k, False: 7.97k]
  ------------------
 1897|  48.5k|        auto &sig = get_sig(sigid);
 1898|  48.5k|        if (!is_revocation(sig) || is_signer(sig)) {
  ------------------
  |  Branch (1898:13): [True: 26.3k, False: 22.2k]
  |  Branch (1898:36): [True: 275, False: 21.9k]
  ------------------
 1899|  26.5k|            continue;
 1900|  26.5k|        }
 1901|       |        /* Don't think we should deal with sigs without issuer's fingerprint */
 1902|  21.9k|        if (!sig.sig.has_keyfp() || !has_revoker(sig.sig.keyfp())) {
  ------------------
  |  Branch (1902:13): [True: 617, False: 21.3k]
  |  Branch (1902:13): [True: 1.90k, False: 20.0k]
  |  Branch (1902:37): [True: 1.28k, False: 20.0k]
  ------------------
 1903|  1.90k|            continue;
 1904|  1.90k|        }
 1905|       |        /* If signature was validated and valid, do not re-validate it */
 1906|  20.0k|        if (sig.validity.valid()) {
  ------------------
  |  Branch (1906:13): [True: 1.34k, False: 18.7k]
  ------------------
 1907|  1.34k|            continue;
 1908|  1.34k|        }
 1909|       |
 1910|  18.7k|        auto revoker = keyring.get_signer(sig.sig);
 1911|  18.7k|        if (!revoker) {
  ------------------
  |  Branch (1911:13): [True: 2.04k, False: 16.7k]
  ------------------
 1912|  2.04k|            continue;
 1913|  2.04k|        }
 1914|       |
 1915|  16.7k|        revoker->validate_sig(*this, sig, keyring.secctx);
 1916|  16.7k|        if (sig.validity.valid()) {
  ------------------
  |  Branch (1916:13): [True: 51, False: 16.6k]
  ------------------
 1917|       |            /* return true only if new valid revocation was added */
 1918|     51|            refresh = true;
 1919|     51|        }
 1920|  16.7k|    }
 1921|       |
 1922|  7.97k|    return refresh;
 1923|  1.59M|}
_ZN3rnp3Key16validate_primaryERNS_8KeyStoreE:
 1927|   313k|{
 1928|       |    /* validate signatures if needed */
 1929|   313k|    validate_self_signatures(keyring.secctx);
 1930|       |
 1931|       |    /* consider public key as valid on this level if it is not expired and has at least one
 1932|       |     * valid self-signature, and is not revoked */
 1933|   313k|    validity_.reset();
 1934|   313k|    validity_.validated = true;
 1935|   313k|    bool has_cert = false;
 1936|   313k|    bool has_expired = false;
 1937|       |    /* check whether key is revoked */
 1938|   827k|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (1938:22): [True: 827k, False: 312k]
  ------------------
 1939|   827k|        auto &sig = get_sig(sigid);
 1940|   827k|        if (!sig.validity.valid()) {
  ------------------
  |  Branch (1940:13): [True: 797k, False: 29.8k]
  ------------------
 1941|   797k|            continue;
 1942|   797k|        }
 1943|  29.8k|        if (is_revocation(sig)) {
  ------------------
  |  Branch (1943:13): [True: 990, False: 28.8k]
  ------------------
 1944|    990|            return;
 1945|    990|        }
 1946|  29.8k|    }
 1947|       |    /* if we have direct-key signature, then it has higher priority for expiration check */
 1948|   312k|    uint64_t now = keyring.secctx.time();
 1949|   312k|    auto     dirsig = latest_selfsig(UserID::None);
 1950|   312k|    if (dirsig) {
  ------------------
  |  Branch (1950:9): [True: 7.72k, False: 304k]
  ------------------
 1951|  7.72k|        has_expired = expired_with(*dirsig, now);
 1952|  7.72k|        has_cert = !has_expired;
 1953|  7.72k|    }
 1954|       |    /* if we have primary uid and it is more restrictive, then use it as well */
 1955|   312k|    Signature *prisig = nullptr;
 1956|   312k|    if (!has_expired && (prisig = latest_selfsig(UserID::Primary))) {
  ------------------
  |  Branch (1956:9): [True: 309k, False: 2.65k]
  |  Branch (1956:25): [True: 6.66k, False: 302k]
  ------------------
 1957|  6.66k|        has_expired = expired_with(*prisig, now);
 1958|  6.66k|        has_cert = !has_expired;
 1959|  6.66k|    }
 1960|       |    /* if we don't have direct-key sig and primary uid, use the latest self-cert */
 1961|   312k|    Signature *latest = nullptr;
 1962|   312k|    if (!dirsig && !prisig && (latest = latest_selfsig(UserID::Any))) {
  ------------------
  |  Branch (1962:9): [True: 304k, False: 7.72k]
  |  Branch (1962:20): [True: 300k, False: 4.45k]
  |  Branch (1962:31): [True: 8.11k, False: 291k]
  ------------------
 1963|  8.11k|        has_expired = expired_with(*latest, now);
 1964|  8.11k|        has_cert = !has_expired;
 1965|  8.11k|    }
 1966|       |
 1967|       |    /* we have at least one non-expiring key self-signature */
 1968|   312k|    if (has_cert) {
  ------------------
  |  Branch (1968:9): [True: 16.1k, False: 296k]
  ------------------
 1969|  16.1k|        validity_.valid = true;
 1970|  16.1k|        return;
 1971|  16.1k|    }
 1972|       |    /* we have valid self-signature which expires key */
 1973|   296k|    if (has_expired) {
  ------------------
  |  Branch (1973:9): [True: 4.17k, False: 291k]
  ------------------
 1974|  4.17k|        validity_.expired = true;
 1975|  4.17k|        return;
 1976|  4.17k|    }
 1977|       |
 1978|       |    /* let's check whether key has at least one valid subkey binding */
 1979|   733k|    for (size_t i = 0; i < subkey_count(); i++) {
  ------------------
  |  Branch (1979:24): [True: 443k, False: 290k]
  ------------------
 1980|   443k|        Key *sub = keyring.get_subkey(*this, i);
 1981|   443k|        if (!sub) {
  ------------------
  |  Branch (1981:13): [True: 60.2k, False: 382k]
  ------------------
 1982|  60.2k|            continue;
 1983|  60.2k|        }
 1984|   382k|        sub->validate_self_signatures(*this, keyring.secctx);
 1985|   382k|        auto sig = sub->latest_binding();
 1986|   382k|        if (!sig) {
  ------------------
  |  Branch (1986:13): [True: 380k, False: 2.24k]
  ------------------
 1987|   380k|            continue;
 1988|   380k|        }
 1989|       |        /* check whether subkey is expired - then do not mark key as valid */
 1990|  2.24k|        if (sub->expired_with(*sig, now)) {
  ------------------
  |  Branch (1990:13): [True: 321, False: 1.91k]
  ------------------
 1991|    321|            continue;
 1992|    321|        }
 1993|  1.91k|        validity_.valid = true;
 1994|  1.91k|        return;
 1995|  2.24k|    }
 1996|   291k|}
_ZN3rnp3Key15validate_subkeyEPS0_RKNS_15SecurityContextE:
 2000|   480k|{
 2001|       |    /* consider subkey as valid on this level if it has valid primary key, has at least one
 2002|       |     * non-expired binding signature, and is not revoked. */
 2003|   480k|    validity_.reset();
 2004|   480k|    validity_.validated = true;
 2005|   480k|    if (!primary || (!primary->valid() && !primary->expired())) {
  ------------------
  |  Branch (2005:9): [True: 22.5k, False: 457k]
  |  Branch (2005:22): [True: 387k, False: 70.3k]
  |  Branch (2005:43): [True: 382k, False: 4.84k]
  ------------------
 2006|   405k|        return;
 2007|   405k|    }
 2008|       |    /* validate signatures if needed */
 2009|  75.1k|    validate_self_signatures(*primary, ctx);
 2010|       |
 2011|  75.1k|    bool has_binding = false;
 2012|  75.1k|    bool has_expired = false;
 2013|  92.3k|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (2013:22): [True: 92.3k, False: 74.7k]
  ------------------
 2014|  92.3k|        auto &sig = get_sig(sigid);
 2015|  92.3k|        if (!sig.validity.valid()) {
  ------------------
  |  Branch (2015:13): [True: 84.9k, False: 7.37k]
  ------------------
 2016|  84.9k|            continue;
 2017|  84.9k|        }
 2018|       |
 2019|  7.37k|        if (is_binding(sig) && !has_binding) {
  ------------------
  |  Branch (2019:13): [True: 7.00k, False: 376]
  |  Branch (2019:32): [True: 6.70k, False: 301]
  ------------------
 2020|       |            /* check whether subkey is expired */
 2021|  6.70k|            if (expired_with(sig, ctx.time())) {
  ------------------
  |  Branch (2021:17): [True: 406, False: 6.29k]
  ------------------
 2022|    406|                has_expired = true;
 2023|    406|                continue;
 2024|    406|            }
 2025|  6.29k|            has_binding = true;
 2026|  6.29k|        } else if (is_revocation(sig)) {
  ------------------
  |  Branch (2026:20): [True: 376, False: 301]
  ------------------
 2027|    376|            return;
 2028|    376|        }
 2029|  7.37k|    }
 2030|  74.7k|    validity_.valid = has_binding && primary->valid();
  ------------------
  |  Branch (2030:23): [True: 6.29k, False: 68.4k]
  |  Branch (2030:38): [True: 5.53k, False: 765]
  ------------------
 2031|  74.7k|    if (!validity_.valid) {
  ------------------
  |  Branch (2031:9): [True: 69.2k, False: 5.53k]
  ------------------
 2032|  69.2k|        validity_.expired = has_expired;
 2033|  69.2k|    }
 2034|  74.7k|}
_ZN3rnp3Key8validateERNS_8KeyStoreE:
 2038|   313k|{
 2039|   313k|    validity_.reset();
 2040|   313k|    if (!is_subkey()) {
  ------------------
  |  Branch (2040:9): [True: 313k, False: 0]
  ------------------
 2041|   313k|        validate_primary(keyring);
 2042|   313k|        return;
 2043|   313k|    }
 2044|      0|    Key *primary = nullptr;
 2045|      0|    if (has_primary_fp()) {
  ------------------
  |  Branch (2045:9): [True: 0, False: 0]
  ------------------
 2046|      0|        primary = keyring.get_key(primary_fp());
 2047|      0|    }
 2048|      0|    validate_subkey(primary, keyring.secctx);
 2049|      0|}
_ZN3rnp3Key10revalidateERNS_8KeyStoreE:
 2053|   406k|{
 2054|   406k|    if (is_subkey()) {
  ------------------
  |  Branch (2054:9): [True: 93.5k, False: 313k]
  ------------------
 2055|  93.5k|        Key *primary = keyring.primary_key(*this);
 2056|  93.5k|        if (primary) {
  ------------------
  |  Branch (2056:13): [True: 77.0k, False: 16.4k]
  ------------------
 2057|  77.0k|            primary->revalidate(keyring);
 2058|  77.0k|        } else {
 2059|  16.4k|            validate_subkey(NULL, keyring.secctx);
 2060|  16.4k|        }
 2061|  93.5k|        return;
 2062|  93.5k|    }
 2063|       |
 2064|   313k|    validate_desig_revokes(keyring);
 2065|   313k|    validate(keyring);
 2066|   313k|    if (!refresh_data(keyring.secctx)) {
  ------------------
  |  Branch (2066:9): [True: 0, False: 313k]
  ------------------
 2067|      0|        RNP_LOG("Failed to refresh key data");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2068|      0|    }
 2069|       |    /* validate/re-validate all subkeys as well */
 2070|   532k|    for (auto &fp : subkey_fps_) {
  ------------------
  |  Branch (2070:19): [True: 532k, False: 313k]
  ------------------
 2071|   532k|        Key *subkey = keyring.get_key(fp);
 2072|   532k|        if (subkey) {
  ------------------
  |  Branch (2072:13): [True: 457k, False: 75.0k]
  ------------------
 2073|   457k|            subkey->validate_subkey(this, keyring.secctx);
 2074|   457k|            if (!subkey->refresh_data(this, keyring.secctx)) {
  ------------------
  |  Branch (2074:17): [True: 0, False: 457k]
  ------------------
 2075|      0|                RNP_LOG("Failed to refresh subkey data");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2076|      0|            }
 2077|   457k|        }
 2078|   532k|    }
 2079|   313k|}
_ZN3rnp3Key19refresh_revocationsEv:
 2298|   553k|{
 2299|   553k|    clear_revokes();
 2300|  1.45M|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (2300:22): [True: 1.45M, False: 553k]
  ------------------
 2301|  1.45M|        auto &sig = get_sig(sigid);
 2302|  1.45M|        if (!sig.validity.valid()) {
  ------------------
  |  Branch (2302:13): [True: 1.40M, False: 52.0k]
  ------------------
 2303|  1.40M|            continue;
 2304|  1.40M|        }
 2305|  52.0k|        if (is_revocation(sig)) {
  ------------------
  |  Branch (2305:13): [True: 1.87k, False: 50.1k]
  ------------------
 2306|  1.87k|            if (revoked_) {
  ------------------
  |  Branch (2306:17): [True: 373, False: 1.50k]
  ------------------
 2307|    373|                continue;
 2308|    373|            }
 2309|  1.50k|            revoked_ = true;
 2310|  1.50k|            revocation_ = Revocation(sig);
 2311|  1.50k|            continue;
 2312|  1.87k|        }
 2313|  50.1k|        if (is_uid_revocation(sig)) {
  ------------------
  |  Branch (2313:13): [True: 3.86k, False: 46.2k]
  ------------------
 2314|  3.86k|            if (sig.uid >= uid_count()) {
  ------------------
  |  Branch (2314:17): [True: 0, False: 3.86k]
  ------------------
 2315|      0|                RNP_LOG("Invalid uid index");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2316|      0|                continue;
 2317|      0|            }
 2318|  3.86k|            auto &uid = get_uid(sig.uid);
 2319|  3.86k|            if (uid.revoked) {
  ------------------
  |  Branch (2319:17): [True: 301, False: 3.56k]
  ------------------
 2320|    301|                continue;
 2321|    301|            }
 2322|  3.56k|            uid.revoked = true;
 2323|  3.56k|            uid.revocation = Revocation(sig);
 2324|  3.56k|        }
 2325|  50.1k|    }
 2326|   553k|}
_ZN3rnp3Key12refresh_dataERKNS_15SecurityContextE:
 2330|   554k|{
 2331|   554k|    if (!is_primary()) {
  ------------------
  |  Branch (2331:9): [True: 1.24k, False: 553k]
  ------------------
 2332|  1.24k|        RNP_LOG("key must be primary");
  ------------------
  |  |   76|  1.24k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.24k|    do {                                                                                 \
  |  |  |  |   69|  1.24k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.24k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.24k|            break;                                                                       \
  |  |  |  |   71|  1.24k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2333|  1.24k|        return false;
 2334|  1.24k|    }
 2335|       |    /* validate self-signatures if not done yet */
 2336|   553k|    validate_self_signatures(ctx);
 2337|       |    /* key expiration */
 2338|   553k|    expiration_ = 0;
 2339|       |    /* if we have direct-key signature, then it has higher priority */
 2340|   553k|    auto dirsig = latest_selfsig(UserID::None);
 2341|   553k|    if (dirsig) {
  ------------------
  |  Branch (2341:9): [True: 13.9k, False: 539k]
  ------------------
 2342|  13.9k|        expiration_ = dirsig->sig.key_expiration();
 2343|  13.9k|    }
 2344|       |    /* if we have primary uid and it is more restrictive, then use it as well */
 2345|   553k|    auto prisig = latest_selfsig(UserID::Primary);
 2346|   553k|    if (prisig && prisig->sig.key_expiration() &&
  ------------------
  |  Branch (2346:9): [True: 12.7k, False: 540k]
  |  Branch (2346:19): [True: 3.19k, False: 9.54k]
  ------------------
 2347|  3.19k|        (!expiration_ || (prisig->sig.key_expiration() < expiration_))) {
  ------------------
  |  Branch (2347:10): [True: 3.17k, False: 22]
  |  Branch (2347:26): [True: 0, False: 22]
  ------------------
 2348|  3.17k|        expiration_ = prisig->sig.key_expiration();
 2349|  3.17k|    }
 2350|       |    /* if we don't have direct-key sig and primary uid, use the latest self-cert */
 2351|   553k|    auto latest = latest_selfsig(UserID::Any);
 2352|   553k|    if (!dirsig && !prisig && latest) {
  ------------------
  |  Branch (2352:9): [True: 539k, False: 13.9k]
  |  Branch (2352:20): [True: 531k, False: 7.54k]
  |  Branch (2352:31): [True: 14.8k, False: 516k]
  ------------------
 2353|  14.8k|        expiration_ = latest->sig.key_expiration();
 2354|  14.8k|    }
 2355|       |    /* key flags: check in direct-key sig first, then primary uid, and then latest */
 2356|   553k|    if (dirsig && dirsig->sig.has_subpkt(PGP_SIG_SUBPKT_KEY_FLAGS)) {
  ------------------
  |  Branch (2356:9): [True: 13.9k, False: 539k]
  |  Branch (2356:19): [True: 3.72k, False: 10.2k]
  ------------------
 2357|  3.72k|        flags_ = dirsig->sig.key_flags();
 2358|   549k|    } else if (prisig && prisig->sig.has_subpkt(PGP_SIG_SUBPKT_KEY_FLAGS)) {
  ------------------
  |  Branch (2358:16): [True: 9.88k, False: 539k]
  |  Branch (2358:26): [True: 4.52k, False: 5.35k]
  ------------------
 2359|  4.52k|        flags_ = prisig->sig.key_flags();
 2360|   545k|    } else if (latest && latest->sig.has_subpkt(PGP_SIG_SUBPKT_KEY_FLAGS)) {
  ------------------
  |  Branch (2360:16): [True: 20.2k, False: 524k]
  |  Branch (2360:26): [True: 14.6k, False: 5.61k]
  ------------------
 2361|  14.6k|        flags_ = latest->sig.key_flags();
 2362|   530k|    } else {
 2363|   530k|        flags_ = pgp_pk_alg_capabilities(alg());
 2364|   530k|    }
 2365|       |    /* designated revokers */
 2366|   553k|    revokers_.clear();
 2367|  1.45M|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (2367:22): [True: 1.45M, False: 553k]
  ------------------
 2368|  1.45M|        auto &sig = get_sig(sigid);
 2369|       |        /* pick designated revokers only from direct-key signatures */
 2370|  1.45M|        if (!sig.validity.valid() || !is_direct_self(sig)) {
  ------------------
  |  Branch (2370:13): [True: 1.40M, False: 52.0k]
  |  Branch (2370:38): [True: 36.7k, False: 15.2k]
  ------------------
 2371|  1.43M|            continue;
 2372|  1.43M|        }
 2373|  15.2k|        if (!sig.sig.has_revoker()) {
  ------------------
  |  Branch (2373:13): [True: 8.74k, False: 6.54k]
  ------------------
 2374|  8.74k|            continue;
 2375|  8.74k|        }
 2376|  6.54k|        add_revoker(sig.sig.revoker());
 2377|  6.54k|    }
 2378|       |    /* revocation(s) */
 2379|   553k|    refresh_revocations();
 2380|       |    /* valid till */
 2381|   553k|    valid_till_ = valid_till_common(expired());
 2382|       |    /* userid validities */
 2383|  38.9M|    for (auto &uid : uids_) {
  ------------------
  |  Branch (2383:20): [True: 38.9M, False: 553k]
  ------------------
 2384|  38.9M|        uid.valid = false;
 2385|  38.9M|    }
 2386|  1.45M|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (2386:22): [True: 1.45M, False: 553k]
  ------------------
 2387|  1.45M|        auto &sig = get_sig(sigid);
 2388|       |        /* consider userid as valid if it has at least one non-expired self-sig */
 2389|  1.45M|        if (!sig.validity.valid() || !sig.is_cert() || !is_signer(sig) ||
  ------------------
  |  Branch (2389:13): [True: 1.40M, False: 52.0k]
  |  Branch (2389:38): [True: 21.0k, False: 31.0k]
  |  Branch (2389:56): [True: 0, False: 31.0k]
  ------------------
 2390|  1.42M|            sig.expired(ctx.time())) {
  ------------------
  |  Branch (2390:13): [True: 0, False: 31.0k]
  ------------------
 2391|  1.42M|            continue;
 2392|  1.42M|        }
 2393|  31.0k|        if (sig.uid >= uid_count()) {
  ------------------
  |  Branch (2393:13): [True: 0, False: 31.0k]
  ------------------
 2394|      0|            continue;
 2395|      0|        }
 2396|  31.0k|        get_uid(sig.uid).valid = true;
 2397|  31.0k|    }
 2398|       |    /* check whether uid is revoked */
 2399|  38.9M|    for (auto &uid : uids_) {
  ------------------
  |  Branch (2399:20): [True: 38.9M, False: 553k]
  ------------------
 2400|  38.9M|        if (uid.revoked) {
  ------------------
  |  Branch (2400:13): [True: 3.56k, False: 38.9M]
  ------------------
 2401|  3.56k|            uid.valid = false;
 2402|  3.56k|        }
 2403|  38.9M|    }
 2404|       |    /* primary userid: use latest one which is not overridden by later non-primary selfsig */
 2405|   553k|    uid0_set_ = false;
 2406|   553k|    if (prisig && get_uid(prisig->uid).valid) {
  ------------------
  |  Branch (2406:9): [True: 12.7k, False: 540k]
  |  Branch (2406:19): [True: 11.7k, False: 977]
  ------------------
 2407|  11.7k|        uid0_ = prisig->uid;
 2408|  11.7k|        uid0_set_ = true;
 2409|  11.7k|    }
 2410|   553k|    return true;
 2411|   554k|}
_ZN3rnp3Key12refresh_dataEPS0_RKNS_15SecurityContextE:
 2415|   625k|{
 2416|       |    /* validate self-signatures if not done yet */
 2417|   625k|    if (primary) {
  ------------------
  |  Branch (2417:9): [True: 602k, False: 22.4k]
  ------------------
 2418|   602k|        validate_self_signatures(*primary, ctx);
 2419|   602k|    }
 2420|   625k|    auto sig = latest_binding(primary);
 2421|       |    /* subkey expiration */
 2422|   625k|    expiration_ = sig ? sig->sig.key_expiration() : 0;
  ------------------
  |  Branch (2422:19): [True: 17.5k, False: 607k]
  ------------------
 2423|       |    /* subkey flags */
 2424|   625k|    if (sig && sig->sig.has_subpkt(PGP_SIG_SUBPKT_KEY_FLAGS)) {
  ------------------
  |  Branch (2424:9): [True: 17.5k, False: 607k]
  |  Branch (2424:16): [True: 14.2k, False: 3.32k]
  ------------------
 2425|  14.2k|        flags_ = sig->sig.key_flags();
 2426|   610k|    } else {
 2427|   610k|        flags_ = pgp_pk_alg_capabilities(alg());
 2428|   610k|    }
 2429|       |    /* revocation */
 2430|   625k|    clear_revokes();
 2431|   857k|    for (auto &sigid : sigs_) {
  ------------------
  |  Branch (2431:22): [True: 857k, False: 621k]
  ------------------
 2432|   857k|        auto &rev = get_sig(sigid);
 2433|   857k|        if (!rev.validity.valid() || !is_revocation(rev)) {
  ------------------
  |  Branch (2433:13): [True: 841k, False: 16.5k]
  |  Branch (2433:38): [True: 12.7k, False: 3.81k]
  ------------------
 2434|   853k|            continue;
 2435|   853k|        }
 2436|  3.81k|        revoked_ = true;
 2437|  3.81k|        try {
 2438|  3.81k|            revocation_ = Revocation(rev);
 2439|  3.81k|        } catch (const std::exception &e) {
 2440|      0|            RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2441|      0|            return false;
 2442|      0|        }
 2443|  3.81k|        break;
 2444|  3.81k|    }
 2445|       |    /* valid till */
 2446|   625k|    if (primary) {
  ------------------
  |  Branch (2446:9): [True: 602k, False: 22.4k]
  ------------------
 2447|   602k|        valid_till_ =
 2448|   602k|          std::min(primary->valid_till(), valid_till_common(expired() || primary->expired()));
  ------------------
  |  Branch (2448:61): [True: 477, False: 602k]
  |  Branch (2448:74): [True: 5.79k, False: 596k]
  ------------------
 2449|   602k|    } else {
 2450|  22.4k|        valid_till_ = valid_till_common(expired());
 2451|  22.4k|    }
 2452|   625k|    return true;
 2453|   625k|}
_ZN3rnp3Key14merge_validityERK14pgp_validity_t:
 2457|   199k|{
 2458|   199k|    validity_.valid = validity_.valid && src.valid;
  ------------------
  |  Branch (2458:23): [True: 9.94k, False: 189k]
  |  Branch (2458:42): [True: 4.76k, False: 5.17k]
  ------------------
 2459|       |    /* We may safely leave validated status only if both merged keys are valid && validated.
 2460|       |     * Otherwise we'll need to revalidate. For instance, one validated but invalid key may add
 2461|       |     * revocation signature, or valid key may add certification to the invalid one. */
 2462|   199k|    validity_.validated = validity_.valid && validity_.validated && src.validated;
  ------------------
  |  Branch (2462:27): [True: 4.76k, False: 194k]
  |  Branch (2462:46): [True: 4.76k, False: 0]
  |  Branch (2462:69): [True: 4.76k, False: 0]
  ------------------
 2463|       |    /* if expired is true at least in one case then valid and validated are false */
 2464|   199k|    validity_.expired = false;
 2465|   199k|}
_ZN3rnp3Key5mergeERKS0_:
 2469|   103k|{
 2470|   103k|    assert(!is_subkey());
 2471|   103k|    assert(!src.is_subkey());
 2472|       |
 2473|       |    /* if src is secret key then merged key will become secret as well. */
 2474|   103k|    if (src.is_secret() && !is_secret()) {
  ------------------
  |  Branch (2474:9): [True: 18.6k, False: 84.5k]
  |  Branch (2474:28): [True: 143, False: 18.4k]
  ------------------
 2475|    143|        pkt_ = src.pkt();
 2476|    143|        rawpkt_ = src.rawpkt();
 2477|       |        /* no subkey processing here - they are separated from the main key */
 2478|    143|    }
 2479|       |
 2480|       |    /* merge direct-key signatures */
 2481|   103k|    for (auto &sigid : src.keysigs_) {
  ------------------
  |  Branch (2481:22): [True: 39.0k, False: 103k]
  ------------------
 2482|  39.0k|        if (has_sig(sigid)) {
  ------------------
  |  Branch (2482:13): [True: 32.2k, False: 6.82k]
  ------------------
 2483|  32.2k|            continue;
 2484|  32.2k|        }
 2485|  6.82k|        add_sig(src.get_sig(sigid).sig);
 2486|  6.82k|    }
 2487|       |
 2488|       |    /* merge user ids and their signatures */
 2489|  2.70M|    for (auto &srcuid : src.uids_) {
  ------------------
  |  Branch (2489:23): [True: 2.70M, False: 103k]
  ------------------
 2490|       |        /* check whether we have this uid and add if needed */
 2491|  2.70M|        auto uididx = uid_idx(srcuid.pkt);
 2492|  2.70M|        if (uididx == UserID::None) {
  ------------------
  |  Branch (2492:13): [True: 8.84k, False: 2.69M]
  ------------------
 2493|  8.84k|            uididx = uid_count();
 2494|  8.84k|            uids_.emplace_back(srcuid.pkt);
 2495|  8.84k|        }
 2496|       |        /* add uid signatures */
 2497|  2.81M|        for (size_t idx = 0; idx < srcuid.sig_count(); idx++) {
  ------------------
  |  Branch (2497:30): [True: 114k, False: 2.70M]
  ------------------
 2498|   114k|            auto &sigid = srcuid.get_sig(idx);
 2499|   114k|            if (has_sig(sigid)) {
  ------------------
  |  Branch (2499:17): [True: 87.0k, False: 27.4k]
  ------------------
 2500|  87.0k|                continue;
 2501|  87.0k|            }
 2502|  27.4k|            add_sig(src.get_sig(sigid).sig, uididx);
 2503|  27.4k|        }
 2504|  2.70M|    }
 2505|       |
 2506|       |    /* Update subkey fingerprints */
 2507|   103k|    for (auto &fp : src.subkey_fps()) {
  ------------------
  |  Branch (2507:19): [True: 59.9k, False: 103k]
  ------------------
 2508|  59.9k|        add_subkey_fp(fp);
 2509|  59.9k|    }
 2510|       |
 2511|       |    /* check whether key was unlocked and assign secret key data */
 2512|   103k|    if (src.is_secret() && !src.is_locked() && (!is_secret() || is_locked())) {
  ------------------
  |  Branch (2512:9): [True: 18.6k, False: 84.5k]
  |  Branch (2512:28): [True: 4.83k, False: 13.7k]
  |  Branch (2512:49): [True: 0, False: 4.83k]
  |  Branch (2512:65): [True: 22, False: 4.80k]
  ------------------
 2513|     22|        pkt().material = src.pkt().material->clone();
 2514|     22|    }
 2515|       |    /* copy validity status */
 2516|   103k|    merge_validity(src.validity_);
 2517|   103k|    return true;
 2518|   103k|}
_ZN3rnp3Key5mergeERKS0_PS0_:
 2522|  96.0k|{
 2523|  96.0k|    assert(is_subkey());
 2524|  96.0k|    assert(src.is_subkey());
 2525|       |
 2526|       |    /* if src is secret key then merged key will become secret as well. */
 2527|  96.0k|    if (src.is_secret() && !is_secret()) {
  ------------------
  |  Branch (2527:9): [True: 22.4k, False: 73.5k]
  |  Branch (2527:28): [True: 32, False: 22.4k]
  ------------------
 2528|     32|        pkt_ = src.pkt();
 2529|     32|        rawpkt_ = src.rawpkt();
 2530|     32|    }
 2531|       |
 2532|       |    /* add subkey binding signatures */
 2533|  96.0k|    for (auto &sigid : src.keysigs_) {
  ------------------
  |  Branch (2533:22): [True: 77.4k, False: 96.0k]
  ------------------
 2534|  77.4k|        if (has_sig(sigid)) {
  ------------------
  |  Branch (2534:13): [True: 72.6k, False: 4.78k]
  ------------------
 2535|  72.6k|            continue;
 2536|  72.6k|        }
 2537|  4.78k|        add_sig(src.get_sig(sigid).sig);
 2538|  4.78k|    }
 2539|       |
 2540|       |    /* check whether key was unlocked and assign secret key data */
 2541|  96.0k|    if (src.is_secret() && !src.is_locked() && (!is_secret() || is_locked())) {
  ------------------
  |  Branch (2541:9): [True: 22.4k, False: 73.5k]
  |  Branch (2541:28): [True: 4.81k, False: 17.6k]
  |  Branch (2541:49): [True: 0, False: 4.81k]
  |  Branch (2541:65): [True: 40, False: 4.77k]
  ------------------
 2542|     40|        pkt().material = src.pkt().material->clone();
 2543|     40|    }
 2544|       |    /* copy validity status */
 2545|  96.0k|    merge_validity(src.validity_);
 2546|       |    /* link subkey fps */
 2547|  96.0k|    if (primary) {
  ------------------
  |  Branch (2547:9): [True: 87.4k, False: 8.61k]
  ------------------
 2548|  87.4k|        primary->link_subkey_fp(*this);
 2549|  87.4k|    }
 2550|  96.0k|    return true;
 2551|  96.0k|}
_Z23pgp_pk_alg_capabilities16pgp_pubkey_alg_t:
 2556|  1.14M|{
 2557|  1.14M|    switch (alg) {
 2558|   272k|    case PGP_PKA_RSA:
  ------------------
  |  Branch (2558:5): [True: 272k, False: 868k]
  ------------------
 2559|   272k|        return pgp_key_flags_t(PGP_KF_SIGN | PGP_KF_CERTIFY | PGP_KF_AUTH | PGP_KF_ENCRYPT);
 2560|       |
 2561|   216k|    case PGP_PKA_RSA_SIGN_ONLY:
  ------------------
  |  Branch (2561:5): [True: 216k, False: 924k]
  ------------------
 2562|       |        // deprecated, but still usable
 2563|   216k|        return PGP_KF_SIGN;
 2564|       |
 2565|  52.3k|    case PGP_PKA_RSA_ENCRYPT_ONLY:
  ------------------
  |  Branch (2565:5): [True: 52.3k, False: 1.08M]
  ------------------
 2566|       |        // deprecated, but still usable
 2567|  52.3k|        return PGP_KF_ENCRYPT;
 2568|       |
 2569|  7.02k|    case PGP_PKA_ELGAMAL_ENCRYPT_OR_SIGN: /* deprecated */
  ------------------
  |  Branch (2569:5): [True: 7.02k, False: 1.13M]
  ------------------
 2570|       |        // These are no longer permitted per the RFC
 2571|  7.02k|        return PGP_KF_NONE;
 2572|       |
 2573|  28.7k|    case PGP_PKA_DSA:
  ------------------
  |  Branch (2573:5): [True: 28.7k, False: 1.11M]
  ------------------
 2574|   112k|    case PGP_PKA_ECDSA:
  ------------------
  |  Branch (2574:5): [True: 83.7k, False: 1.05M]
  ------------------
 2575|   310k|    case PGP_PKA_EDDSA:
  ------------------
  |  Branch (2575:5): [True: 197k, False: 943k]
  ------------------
 2576|   310k|        return pgp_key_flags_t(PGP_KF_SIGN | PGP_KF_CERTIFY | PGP_KF_AUTH);
 2577|       |
 2578|      0|#if defined(ENABLE_CRYPTO_REFRESH)
 2579|  23.9k|    case PGP_PKA_ED25519:
  ------------------
  |  Branch (2579:5): [True: 23.9k, False: 1.11M]
  ------------------
 2580|  23.9k|        return pgp_key_flags_t(PGP_KF_SIGN | PGP_KF_CERTIFY | PGP_KF_AUTH);
 2581|  11.8k|    case PGP_PKA_X25519:
  ------------------
  |  Branch (2581:5): [True: 11.8k, False: 1.12M]
  ------------------
 2582|  11.8k|        return PGP_KF_ENCRYPT;
 2583|      0|#endif
 2584|       |
 2585|  17.6k|    case PGP_PKA_SM2:
  ------------------
  |  Branch (2585:5): [True: 17.6k, False: 1.12M]
  ------------------
 2586|  17.6k|        return pgp_key_flags_t(PGP_KF_SIGN | PGP_KF_CERTIFY | PGP_KF_AUTH | PGP_KF_ENCRYPT);
 2587|       |
 2588|   154k|    case PGP_PKA_ECDH:
  ------------------
  |  Branch (2588:5): [True: 154k, False: 986k]
  ------------------
 2589|   164k|    case PGP_PKA_ELGAMAL:
  ------------------
  |  Branch (2589:5): [True: 10.1k, False: 1.13M]
  ------------------
 2590|   164k|        return PGP_KF_ENCRYPT;
 2591|       |
 2592|      0|#if defined(ENABLE_PQC)
 2593|  51.2k|    case PGP_PKA_KYBER768_X25519:
  ------------------
  |  Branch (2593:5): [True: 51.2k, False: 1.08M]
  ------------------
 2594|  51.2k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  51.2k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2595|       |    // TODO: Add case for PGP_PKA_KYBER1024_X448 with FALLTHROUGH_STATEMENT;
 2596|  51.9k|    case PGP_PKA_KYBER768_P256:
  ------------------
  |  Branch (2596:5): [True: 613, False: 1.14M]
  ------------------
 2597|  51.9k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  51.9k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2598|  52.3k|    case PGP_PKA_KYBER1024_P384:
  ------------------
  |  Branch (2598:5): [True: 480, False: 1.14M]
  ------------------
 2599|  52.3k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  52.3k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2600|  52.9k|    case PGP_PKA_KYBER768_BP256:
  ------------------
  |  Branch (2600:5): [True: 613, False: 1.14M]
  ------------------
 2601|  52.9k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  52.9k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2602|  54.1k|    case PGP_PKA_KYBER1024_BP384:
  ------------------
  |  Branch (2602:5): [True: 1.11k, False: 1.14M]
  ------------------
 2603|  54.1k|        return PGP_KF_ENCRYPT;
 2604|       |
 2605|    268|    case PGP_PKA_DILITHIUM3_ED25519:
  ------------------
  |  Branch (2605:5): [True: 268, False: 1.14M]
  ------------------
 2606|    268|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    268|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2607|       |    // TODO: Add case PGP_PKA_DILITHIUM5_ED448: FALLTHROUGH_STATEMENT;
 2608|  2.70k|    case PGP_PKA_DILITHIUM3_P256:
  ------------------
  |  Branch (2608:5): [True: 2.44k, False: 1.13M]
  ------------------
 2609|  2.70k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  2.70k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2610|  2.77k|    case PGP_PKA_DILITHIUM5_P384:
  ------------------
  |  Branch (2610:5): [True: 66, False: 1.14M]
  ------------------
 2611|  2.77k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  2.77k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2612|  2.85k|    case PGP_PKA_DILITHIUM3_BP256:
  ------------------
  |  Branch (2612:5): [True: 84, False: 1.14M]
  ------------------
 2613|  2.85k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  2.85k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2614|  3.31k|    case PGP_PKA_DILITHIUM5_BP384:
  ------------------
  |  Branch (2614:5): [True: 456, False: 1.14M]
  ------------------
 2615|  3.31k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  3.31k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2616|  7.94k|    case PGP_PKA_SPHINCSPLUS_SHA2:
  ------------------
  |  Branch (2616:5): [True: 4.63k, False: 1.13M]
  ------------------
 2617|  7.94k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  7.94k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
 2618|  9.58k|    case PGP_PKA_SPHINCSPLUS_SHAKE:
  ------------------
  |  Branch (2618:5): [True: 1.63k, False: 1.13M]
  ------------------
 2619|  9.58k|        return pgp_key_flags_t(PGP_KF_SIGN | PGP_KF_CERTIFY | PGP_KF_AUTH);
 2620|      0|#endif
 2621|       |
 2622|      0|    default:
  ------------------
  |  Branch (2622:5): [True: 0, False: 1.14M]
  ------------------
 2623|      0|        RNP_LOG("unknown pk alg: %d\n", alg);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2624|      0|        return PGP_KF_NONE;
 2625|  1.14M|    }
 2626|  1.14M|}

_ZN3rnp3KeyC2Ev:
   88|   210k|    Key() = default;
_ZN3rnp3KeyaSEOS0_:
   95|   210k|    Key &operator=(Key &&) = default;

_ZN3pgp11KeyMaterialD2Ev:
  238|  1.37M|{
  239|  1.37M|}
_ZNK3pgp11KeyMaterial3algEv:
  243|   414k|{
  244|   414k|    return alg_;
  245|   414k|}
_ZNK3pgp11KeyMaterial6secretEv:
  249|  50.7k|{
  250|  50.7k|    return secret_;
  251|  50.7k|}
_ZNK3pgp11KeyMaterial8validityEv:
  277|  59.5k|{
  278|  59.5k|    return validity_;
  279|  59.5k|}
_ZN3pgp11KeyMaterial12set_validityERK14pgp_validity_t:
  283|  59.5k|{
  284|  59.5k|    validity_ = val;
  285|  59.5k|}
_ZN3pgp11KeyMaterial14reset_validityEv:
  289|  14.2k|{
  290|  14.2k|    validity_.reset();
  291|  14.2k|}
_ZN3pgp11KeyMaterial12clear_secretEv:
  295|   180k|{
  296|   180k|    secret_ = false;
  297|   180k|}
_ZNK3pgp11KeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
  334|     20|{
  335|     20|    return RNP_ERROR_NOT_SUPPORTED;
  336|     20|}
_ZNK3pgp11KeyMaterial16sig_hash_allowedE14pgp_hash_alg_t:
  354|  96.5k|{
  355|  96.5k|    return true;
  356|  96.5k|}
_ZNK3pgp11KeyMaterial4gripEv:
  366|   183k|{
  367|   183k|    auto hash = rnp::Hash::create(PGP_HASH_SHA1);
  368|   183k|    grip_update(*hash);
  369|   183k|    KeyGrip res{};
  370|   183k|    hash->finish(res.data());
  371|   183k|    return res;
  372|   183k|}
_ZN3pgp11KeyMaterial6createE16pgp_pubkey_alg_t:
  376|   322k|{
  377|   322k|    switch (alg) {
  378|  73.9k|    case PGP_PKA_RSA:
  ------------------
  |  Branch (378:5): [True: 73.9k, False: 248k]
  ------------------
  379|  87.6k|    case PGP_PKA_RSA_ENCRYPT_ONLY:
  ------------------
  |  Branch (379:5): [True: 13.7k, False: 308k]
  ------------------
  380|   135k|    case PGP_PKA_RSA_SIGN_ONLY:
  ------------------
  |  Branch (380:5): [True: 47.5k, False: 274k]
  ------------------
  381|   135k|        return std::unique_ptr<KeyMaterial>(new RSAKeyMaterial(alg));
  382|  5.63k|    case PGP_PKA_ELGAMAL:
  ------------------
  |  Branch (382:5): [True: 5.63k, False: 316k]
  ------------------
  383|  7.70k|    case PGP_PKA_ELGAMAL_ENCRYPT_OR_SIGN:
  ------------------
  |  Branch (383:5): [True: 2.07k, False: 320k]
  ------------------
  384|  7.70k|        return std::unique_ptr<KeyMaterial>(new EGKeyMaterial(alg));
  385|  10.5k|    case PGP_PKA_DSA:
  ------------------
  |  Branch (385:5): [True: 10.5k, False: 311k]
  ------------------
  386|  10.5k|        return std::unique_ptr<KeyMaterial>(new DSAKeyMaterial());
  387|  63.0k|    case PGP_PKA_ECDH:
  ------------------
  |  Branch (387:5): [True: 63.0k, False: 259k]
  ------------------
  388|  63.0k|        return std::unique_ptr<KeyMaterial>(new ECDHKeyMaterial());
  389|  31.6k|    case PGP_PKA_ECDSA:
  ------------------
  |  Branch (389:5): [True: 31.6k, False: 290k]
  ------------------
  390|  31.6k|        return std::unique_ptr<KeyMaterial>(new ECDSAKeyMaterial());
  391|  37.4k|    case PGP_PKA_EDDSA:
  ------------------
  |  Branch (391:5): [True: 37.4k, False: 284k]
  ------------------
  392|  37.4k|        return std::unique_ptr<KeyMaterial>(new EDDSAKeyMaterial());
  393|      0|#if defined(ENABLE_CRYPTO_REFRESH)
  394|  7.29k|    case PGP_PKA_ED25519:
  ------------------
  |  Branch (394:5): [True: 7.29k, False: 314k]
  ------------------
  395|  7.29k|        return std::unique_ptr<KeyMaterial>(new Ed25519KeyMaterial());
  396|  2.87k|    case PGP_PKA_X25519:
  ------------------
  |  Branch (396:5): [True: 2.87k, False: 319k]
  ------------------
  397|  2.87k|        return std::unique_ptr<KeyMaterial>(new X25519KeyMaterial());
  398|      0|#endif
  399|  7.71k|    case PGP_PKA_SM2:
  ------------------
  |  Branch (399:5): [True: 7.71k, False: 314k]
  ------------------
  400|  7.71k|        return std::unique_ptr<KeyMaterial>(new SM2KeyMaterial());
  401|      0|#if defined(ENABLE_PQC)
  402|  4.06k|    case PGP_PKA_KYBER768_X25519:
  ------------------
  |  Branch (402:5): [True: 4.06k, False: 318k]
  ------------------
  403|  4.06k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  4.06k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  404|       |    // TODO: Add case for PGP_PKA_KYBER1024_X448
  405|  4.76k|    case PGP_PKA_KYBER768_P256:
  ------------------
  |  Branch (405:5): [True: 699, False: 321k]
  ------------------
  406|  4.76k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  4.76k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  407|  4.86k|    case PGP_PKA_KYBER1024_P384:
  ------------------
  |  Branch (407:5): [True: 106, False: 321k]
  ------------------
  408|  4.86k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  4.86k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  409|  5.39k|    case PGP_PKA_KYBER768_BP256:
  ------------------
  |  Branch (409:5): [True: 525, False: 321k]
  ------------------
  410|  5.39k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  5.39k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  411|  5.89k|    case PGP_PKA_KYBER1024_BP384:
  ------------------
  |  Branch (411:5): [True: 507, False: 321k]
  ------------------
  412|  5.89k|        return std::unique_ptr<KeyMaterial>(new MlkemEcdhKeyMaterial(alg));
  413|     76|    case PGP_PKA_DILITHIUM3_ED25519:
  ------------------
  |  Branch (413:5): [True: 76, False: 322k]
  ------------------
  414|     76|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|     76|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  415|       |    // TODO: Add case for PGP_PKA_DILITHIUM5_ED448
  416|  1.06k|    case PGP_PKA_DILITHIUM3_P256:
  ------------------
  |  Branch (416:5): [True: 989, False: 321k]
  ------------------
  417|  1.06k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  1.06k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  418|  1.17k|    case PGP_PKA_DILITHIUM5_P384:
  ------------------
  |  Branch (418:5): [True: 114, False: 321k]
  ------------------
  419|  1.17k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  1.17k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  420|  1.51k|    case PGP_PKA_DILITHIUM3_BP256:
  ------------------
  |  Branch (420:5): [True: 337, False: 321k]
  ------------------
  421|  1.51k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  1.51k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  422|  1.65k|    case PGP_PKA_DILITHIUM5_BP384:
  ------------------
  |  Branch (422:5): [True: 141, False: 321k]
  ------------------
  423|  1.65k|        return std::unique_ptr<KeyMaterial>(new DilithiumEccKeyMaterial(alg));
  424|    962|    case PGP_PKA_SPHINCSPLUS_SHA2:
  ------------------
  |  Branch (424:5): [True: 962, False: 321k]
  ------------------
  425|    962|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    962|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  426|  1.89k|    case PGP_PKA_SPHINCSPLUS_SHAKE:
  ------------------
  |  Branch (426:5): [True: 934, False: 321k]
  ------------------
  427|  1.89k|        return std::unique_ptr<KeyMaterial>(new SlhdsaKeyMaterial(alg));
  428|      0|#endif
  429|  9.14k|    default:
  ------------------
  |  Branch (429:5): [True: 9.14k, False: 312k]
  ------------------
  430|  9.14k|        return nullptr;
  431|   322k|    }
  432|   322k|}
_ZN3pgp14RSAKeyMaterial5cloneEv:
  471|   528k|{
  472|   528k|    return std::unique_ptr<KeyMaterial>(new RSAKeyMaterial(*this));
  473|   528k|}
_ZNK3pgp14RSAKeyMaterial11grip_updateERN3rnp4HashE:
  477|  91.4k|{
  478|       |    /* keygrip is subjectKeyHash from pkcs#15 for RSA. */
  479|  91.4k|    grip_hash_mpi(hash, key_.n, '\0');
  480|  91.4k|}
_ZN3pgp14RSAKeyMaterial12clear_secretEv:
  490|  94.5k|{
  491|  94.5k|    key_.clear_secret();
  492|  94.5k|    KeyMaterial::clear_secret();
  493|  94.5k|}
_ZN3pgp14RSAKeyMaterial5parseER17pgp_packet_body_t:
  497|   134k|{
  498|   134k|    secret_ = false;
  499|   134k|    return pkt.get(key_.n) && pkt.get(key_.e);
  ------------------
  |  Branch (499:12): [True: 132k, False: 2.22k]
  |  Branch (499:31): [True: 131k, False: 1.00k]
  ------------------
  500|   134k|}
_ZN3pgp14RSAKeyMaterial12parse_secretER17pgp_packet_body_t:
  504|    281|{
  505|    281|    if (!pkt.get(key_.d) || !pkt.get(key_.p) || !pkt.get(key_.q) || !pkt.get(key_.u)) {
  ------------------
  |  Branch (505:9): [True: 76, False: 205]
  |  Branch (505:29): [True: 19, False: 186]
  |  Branch (505:49): [True: 17, False: 169]
  |  Branch (505:69): [True: 14, False: 155]
  ------------------
  506|    126|        RNP_LOG("failed to parse rsa secret key data");
  ------------------
  |  |   76|    126|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    126|    do {                                                                                 \
  |  |  |  |   69|    126|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 126, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    126|            break;                                                                       \
  |  |  |  |   71|    126|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  507|    126|        return false;
  508|    126|    }
  509|    155|    secret_ = true;
  510|    155|    return true;
  511|    281|}
_ZNK3pgp14RSAKeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
  572|  21.9k|{
  573|  21.9k|    if (alg() == PGP_PKA_RSA_ENCRYPT_ONLY) {
  ------------------
  |  Branch (573:9): [True: 234, False: 21.6k]
  ------------------
  574|    234|        RNP_LOG("RSA encrypt-only signature considered as invalid.");
  ------------------
  |  |   76|    234|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    234|    do {                                                                                 \
  |  |  |  |   69|    234|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 234, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    234|            break;                                                                       \
  |  |  |  |   71|    234|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  575|    234|        return RNP_ERROR_SIGNATURE_INVALID;
  576|    234|    }
  577|  21.6k|    auto rsa = dynamic_cast<const RSASigMaterial *>(&sig);
  578|  21.6k|    if (!rsa) {
  ------------------
  |  Branch (578:9): [True: 237, False: 21.4k]
  ------------------
  579|    237|        return RNP_ERROR_BAD_PARAMETERS;
  580|    237|    }
  581|  21.4k|    return key_.verify_pkcs1(rsa->sig, rsa->halg, hash);
  582|  21.6k|}
_ZNK3pgp14RSAKeyMaterial1nEv:
  614|  51.0k|{
  615|  51.0k|    return key_.n;
  616|  51.0k|}
_ZNK3pgp14RSAKeyMaterial1eEv:
  620|  12.7k|{
  621|  12.7k|    return key_.e;
  622|  12.7k|}
_ZN3pgp14DSAKeyMaterial5cloneEv:
  650|  35.2k|{
  651|  35.2k|    return std::unique_ptr<KeyMaterial>(new DSAKeyMaterial(*this));
  652|  35.2k|}
_ZNK3pgp14DSAKeyMaterial11grip_updateERN3rnp4HashE:
  656|  6.27k|{
  657|  6.27k|    grip_hash_mpi(hash, key_.p, 'p');
  658|  6.27k|    grip_hash_mpi(hash, key_.q, 'q');
  659|  6.27k|    grip_hash_mpi(hash, key_.g, 'g');
  660|  6.27k|    grip_hash_mpi(hash, key_.y, 'y');
  661|  6.27k|}
_ZN3pgp14DSAKeyMaterial12clear_secretEv:
  671|  6.49k|{
  672|  6.49k|    key_.clear_secret();
  673|  6.49k|    KeyMaterial::clear_secret();
  674|  6.49k|}
_ZN3pgp14DSAKeyMaterial5parseER17pgp_packet_body_t:
  678|  10.5k|{
  679|  10.5k|    secret_ = false;
  680|  10.5k|    return pkt.get(key_.p) && pkt.get(key_.q) && pkt.get(key_.g) && pkt.get(key_.y);
  ------------------
  |  Branch (680:12): [True: 10.1k, False: 490]
  |  Branch (680:31): [True: 9.86k, False: 238]
  |  Branch (680:50): [True: 9.76k, False: 100]
  |  Branch (680:69): [True: 9.63k, False: 129]
  ------------------
  681|  10.5k|}
_ZN3pgp14DSAKeyMaterial12parse_secretER17pgp_packet_body_t:
  685|  1.08k|{
  686|  1.08k|    if (!pkt.get(key_.x)) {
  ------------------
  |  Branch (686:9): [True: 14, False: 1.07k]
  ------------------
  687|     14|        RNP_LOG("failed to parse dsa secret key data");
  ------------------
  |  |   76|     14|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     14|    do {                                                                                 \
  |  |  |  |   69|     14|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 14, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     14|            break;                                                                       \
  |  |  |  |   71|     14|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  688|     14|        return false;
  689|     14|    }
  690|  1.07k|    secret_ = true;
  691|  1.07k|    return true;
  692|  1.08k|}
_ZNK3pgp14DSAKeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
  724|  6.97k|{
  725|  6.97k|    auto dsa = dynamic_cast<const DSASigMaterial *>(&sig);
  726|  6.97k|    if (!dsa) {
  ------------------
  |  Branch (726:9): [True: 18, False: 6.96k]
  ------------------
  727|     18|        return RNP_ERROR_BAD_PARAMETERS;
  728|     18|    }
  729|  6.96k|    return key_.verify(dsa->sig, hash);
  730|  6.97k|}
_ZN3pgp13EGKeyMaterial5cloneEv:
  805|  17.5k|{
  806|  17.5k|    return std::unique_ptr<KeyMaterial>(new EGKeyMaterial(*this));
  807|  17.5k|}
_ZNK3pgp13EGKeyMaterial11grip_updateERN3rnp4HashE:
  811|  2.85k|{
  812|  2.85k|    grip_hash_mpi(hash, key_.p, 'p');
  813|  2.85k|    grip_hash_mpi(hash, key_.g, 'g');
  814|  2.85k|    grip_hash_mpi(hash, key_.y, 'y');
  815|  2.85k|}
_ZN3pgp13EGKeyMaterial12clear_secretEv:
  825|  2.66k|{
  826|  2.66k|    key_.clear_secret();
  827|  2.66k|    KeyMaterial::clear_secret();
  828|  2.66k|}
_ZN3pgp13EGKeyMaterial5parseER17pgp_packet_body_t:
  832|  7.66k|{
  833|  7.66k|    secret_ = false;
  834|  7.66k|    return pkt.get(key_.p) && pkt.get(key_.g) && pkt.get(key_.y);
  ------------------
  |  Branch (834:12): [True: 6.50k, False: 1.15k]
  |  Branch (834:31): [True: 4.06k, False: 2.44k]
  |  Branch (834:50): [True: 4.04k, False: 20]
  ------------------
  835|  7.66k|}
_ZN3pgp13EGKeyMaterial12parse_secretER17pgp_packet_body_t:
  839|    406|{
  840|    406|    if (!pkt.get(key_.x)) {
  ------------------
  |  Branch (840:9): [True: 18, False: 388]
  ------------------
  841|     18|        RNP_LOG("failed to parse eg secret key data");
  ------------------
  |  |   76|     18|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     18|    do {                                                                                 \
  |  |  |  |   69|     18|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 18, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     18|            break;                                                                       \
  |  |  |  |   71|     18|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  842|     18|        return false;
  843|     18|    }
  844|    388|    secret_ = true;
  845|    388|    return true;
  846|    406|}
_ZNK3pgp13EGKeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
  905|     38|{
  906|     38|    RNP_LOG("ElGamal signatures are considered as invalid.");
  ------------------
  |  |   76|     38|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     38|    do {                                                                                 \
  |  |  |  |   69|     38|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 38, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     38|            break;                                                                       \
  |  |  |  |   71|     38|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  907|     38|    return RNP_ERROR_SIGNATURE_INVALID;
  908|     38|}
_ZNK3pgp13ECKeyMaterial11grip_updateERN3rnp4HashE:
  949|  71.3k|{
  950|  71.3k|    grip_hash_ec(hash, key_);
  951|  71.3k|}
_ZN3pgp13ECKeyMaterial12clear_secretEv:
  955|  63.0k|{
  956|  63.0k|    key_.clear_secret();
  957|  63.0k|    KeyMaterial::clear_secret();
  958|  63.0k|}
_ZN3pgp13ECKeyMaterial5parseER17pgp_packet_body_t:
  982|   139k|{
  983|   139k|    secret_ = false;
  984|   139k|    if (!pkt.get(key_.curve) || !pkt.get(key_.p)) {
  ------------------
  |  Branch (984:9): [True: 16.5k, False: 122k]
  |  Branch (984:33): [True: 2.83k, False: 120k]
  ------------------
  985|  19.4k|        return false;
  986|  19.4k|    }
  987|   120k|    return true;
  988|   139k|}
_ZN3pgp13ECKeyMaterial12parse_secretER17pgp_packet_body_t:
  992|  8.34k|{
  993|  8.34k|    if (!pkt.get(key_.x)) {
  ------------------
  |  Branch (993:9): [True: 36, False: 8.30k]
  ------------------
  994|     36|        RNP_LOG("failed to parse ecc secret key data");
  ------------------
  |  |   76|     36|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     36|    do {                                                                                 \
  |  |  |  |   69|     36|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 36, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     36|            break;                                                                       \
  |  |  |  |   71|     36|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  995|     36|        return false;
  996|     36|    }
  997|  8.30k|    secret_ = true;
  998|  8.30k|    return true;
  999|  8.34k|}
_ZN3pgp16ECDSAKeyMaterial5cloneEv:
 1075|   105k|{
 1076|   105k|    return std::unique_ptr<KeyMaterial>(new ECDSAKeyMaterial(*this));
 1077|   105k|}
_ZNK3pgp16ECDSAKeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
 1083|  35.9k|{
 1084|  35.9k|    if (!ec::Curve::is_supported(key_.curve)) {
  ------------------
  |  Branch (1084:9): [True: 0, False: 35.9k]
  ------------------
 1085|      0|        RNP_LOG("Curve %d is not supported.", key_.curve);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1086|      0|        return RNP_ERROR_NOT_SUPPORTED;
 1087|      0|    }
 1088|  35.9k|    auto ec = dynamic_cast<const ECSigMaterial *>(&sig);
 1089|  35.9k|    if (!ec) {
  ------------------
  |  Branch (1089:9): [True: 531, False: 35.4k]
  ------------------
 1090|    531|        return RNP_ERROR_BAD_PARAMETERS;
 1091|    531|    }
 1092|  35.4k|    return ecdsa::verify(ec->sig, ec->halg, hash, key_);
 1093|  35.9k|}
_ZN3pgp15ECDHKeyMaterial5cloneEv:
 1134|   154k|{
 1135|   154k|    return std::unique_ptr<KeyMaterial>(new ECDHKeyMaterial(*this));
 1136|   154k|}
_ZN3pgp15ECDHKeyMaterial5parseER17pgp_packet_body_t:
 1140|  62.7k|{
 1141|  62.7k|    if (!ECKeyMaterial::parse(pkt)) {
  ------------------
  |  Branch (1141:9): [True: 15.4k, False: 47.3k]
  ------------------
 1142|  15.4k|        return false;
 1143|  15.4k|    }
 1144|       |    /* Additional ECDH fields */
 1145|       |    /* Read KDF parameters. At the moment should be 0x03 0x01 halg ealg */
 1146|  47.3k|    uint8_t len = 0, halg = 0, walg = 0;
 1147|  47.3k|    if (!pkt.get(len) || (len != 3)) {
  ------------------
  |  Branch (1147:9): [True: 371, False: 46.9k]
  |  Branch (1147:26): [True: 942, False: 45.9k]
  ------------------
 1148|  1.31k|        return false;
 1149|  1.31k|    }
 1150|  45.9k|    if (!pkt.get(len) || (len != 1)) {
  ------------------
  |  Branch (1150:9): [True: 34, False: 45.9k]
  |  Branch (1150:26): [True: 4.14k, False: 41.8k]
  ------------------
 1151|  4.17k|        return false;
 1152|  4.17k|    }
 1153|  41.8k|    if (!pkt.get(halg) || !pkt.get(walg)) {
  ------------------
  |  Branch (1153:9): [True: 196, False: 41.6k]
  |  Branch (1153:27): [True: 34, False: 41.5k]
  ------------------
 1154|    230|        return false;
 1155|    230|    }
 1156|  41.5k|    key_.kdf_hash_alg = (pgp_hash_alg_t) halg;
 1157|  41.5k|    key_.key_wrap_alg = (pgp_symm_alg_t) walg;
 1158|  41.5k|    return true;
 1159|  41.8k|}
_ZN3pgp16EDDSAKeyMaterial5cloneEv:
 1259|   132k|{
 1260|   132k|    return std::unique_ptr<KeyMaterial>(new EDDSAKeyMaterial(*this));
 1261|   132k|}
_ZNK3pgp16EDDSAKeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
 1277|  21.4k|{
 1278|  21.4k|    auto ec = dynamic_cast<const ECSigMaterial *>(&sig);
 1279|  21.4k|    if (!ec) {
  ------------------
  |  Branch (1279:9): [True: 88, False: 21.3k]
  ------------------
 1280|     88|        return RNP_ERROR_BAD_PARAMETERS;
 1281|     88|    }
 1282|  21.3k|    return eddsa::verify(ec->sig, hash, key_);
 1283|  21.4k|}
_ZN3pgp14SM2KeyMaterial5cloneEv:
 1310|  22.0k|{
 1311|  22.0k|    return std::unique_ptr<KeyMaterial>(new SM2KeyMaterial(*this));
 1312|  22.0k|}
_ZNK3pgp14SM2KeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
 1352|  4.71k|{
 1353|  4.71k|#if defined(ENABLE_SM2)
 1354|  4.71k|    auto ec = dynamic_cast<const ECSigMaterial *>(&sig);
 1355|  4.71k|    if (!ec) {
  ------------------
  |  Branch (1355:9): [True: 50, False: 4.66k]
  ------------------
 1356|     50|        return RNP_ERROR_BAD_PARAMETERS;
 1357|     50|    }
 1358|  4.66k|    return sm2::verify(ec->sig, ec->halg, hash, key_);
 1359|       |#else
 1360|       |    RNP_LOG("SM2 verification is not available.");
 1361|       |    return RNP_ERROR_NOT_IMPLEMENTED;
 1362|       |#endif
 1363|  4.71k|}
_ZNK3pgp14SM2KeyMaterial10compute_zaERN3rnp4HashE:
 1388|  4.77k|{
 1389|  4.77k|#if defined(ENABLE_SM2)
 1390|  4.77k|    auto res = sm2::compute_za(key_, hash);
 1391|  4.77k|    if (res) {
  ------------------
  |  Branch (1391:9): [True: 57, False: 4.71k]
  ------------------
 1392|     57|        RNP_LOG("failed to compute SM2 ZA field");
  ------------------
  |  |   76|     57|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     57|    do {                                                                                 \
  |  |  |  |   69|     57|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 57, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     57|            break;                                                                       \
  |  |  |  |   71|     57|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1393|     57|        throw rnp::rnp_exception(res);
 1394|     57|    }
 1395|       |#else
 1396|       |    RNP_LOG("SM2 ZA computation not available");
 1397|       |    throw rnp::rnp_exception(RNP_ERROR_NOT_IMPLEMENTED);
 1398|       |#endif
 1399|  4.77k|}
_ZN3pgp18Ed25519KeyMaterial5cloneEv:
 1404|  26.8k|{
 1405|  26.8k|    return std::unique_ptr<KeyMaterial>(new Ed25519KeyMaterial(*this));
 1406|  26.8k|}
_ZNK3pgp18Ed25519KeyMaterial11grip_updateERN3rnp4HashE:
 1410|  4.97k|{
 1411|       |    // TODO: if GnuPG would ever support v6, check whether this works correctly.
 1412|  4.97k|    hash.add(pub());
 1413|  4.97k|}
_ZN3pgp18Ed25519KeyMaterial12clear_secretEv:
 1423|  5.78k|{
 1424|  5.78k|    key_.clear_secret();
 1425|  5.78k|    KeyMaterial::clear_secret();
 1426|  5.78k|}
_ZN3pgp18Ed25519KeyMaterial5parseER17pgp_packet_body_t:
 1430|  7.28k|{
 1431|  7.28k|    secret_ = false;
 1432|  7.28k|    auto                 ec_desc = ec::Curve::get(PGP_CURVE_ED25519);
 1433|  7.28k|    std::vector<uint8_t> buf(ec_desc->bytes());
 1434|  7.28k|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1434:9): [True: 232, False: 7.05k]
  ------------------
 1435|    232|        RNP_LOG("failed to parse Ed25519 public key data");
  ------------------
  |  |   76|    232|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    232|    do {                                                                                 \
  |  |  |  |   69|    232|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 232, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    232|            break;                                                                       \
  |  |  |  |   71|    232|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1436|    232|        return false;
 1437|    232|    }
 1438|  7.05k|    key_.pub = buf;
 1439|  7.05k|    return true;
 1440|  7.28k|}
_ZN3pgp18Ed25519KeyMaterial12parse_secretER17pgp_packet_body_t:
 1444|  1.50k|{
 1445|  1.50k|    auto                 ec_desc = ec::Curve::get(PGP_CURVE_ED25519);
 1446|  1.50k|    std::vector<uint8_t> buf(ec_desc->bytes());
 1447|  1.50k|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1447:9): [True: 11, False: 1.49k]
  ------------------
 1448|     11|        RNP_LOG("failed to parse Ed25519 secret key data");
  ------------------
  |  |   76|     11|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     11|    do {                                                                                 \
  |  |  |  |   69|     11|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 11, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     11|            break;                                                                       \
  |  |  |  |   71|     11|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1449|     11|        return false;
 1450|     11|    }
 1451|  1.49k|    key_.priv = buf;
 1452|  1.49k|    secret_ = true;
 1453|  1.49k|    return true;
 1454|  1.50k|}
_ZNK3pgp18Ed25519KeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
 1482|  5.39k|{
 1483|  5.39k|    auto ed25519 = dynamic_cast<const Ed25519SigMaterial *>(&sig);
 1484|  5.39k|    if (!ed25519) {
  ------------------
  |  Branch (1484:9): [True: 42, False: 5.35k]
  ------------------
 1485|     42|        return RNP_ERROR_BAD_PARAMETERS;
 1486|     42|    }
 1487|  5.35k|    return ed25519_verify_native(ed25519->sig.sig, key_.pub, hash.data(), hash.size());
 1488|  5.39k|}
_ZNK3pgp18Ed25519KeyMaterial3pubEv:
 1517|  4.97k|{
 1518|  4.97k|    return key_.pub;
 1519|  4.97k|}
_ZN3pgp17X25519KeyMaterial5cloneEv:
 1529|  11.4k|{
 1530|  11.4k|    return std::unique_ptr<KeyMaterial>(new X25519KeyMaterial(*this));
 1531|  11.4k|}
_ZNK3pgp17X25519KeyMaterial11grip_updateERN3rnp4HashE:
 1535|  1.72k|{
 1536|       |    // TODO: if GnuPG would ever support v6, check whether this works correctly.
 1537|  1.72k|    hash.add(pub());
 1538|  1.72k|}
_ZN3pgp17X25519KeyMaterial12clear_secretEv:
 1548|  2.67k|{
 1549|  2.67k|    key_.clear_secret();
 1550|  2.67k|    KeyMaterial::clear_secret();
 1551|  2.67k|}
_ZN3pgp17X25519KeyMaterial5parseER17pgp_packet_body_t:
 1555|  2.87k|{
 1556|  2.87k|    secret_ = false;
 1557|  2.87k|    auto                 ec_desc = ec::Curve::get(PGP_CURVE_25519);
 1558|  2.87k|    std::vector<uint8_t> buf(ec_desc->bytes());
 1559|  2.87k|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1559:9): [True: 66, False: 2.81k]
  ------------------
 1560|     66|        RNP_LOG("failed to parse X25519 public key data");
  ------------------
  |  |   76|     66|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     66|    do {                                                                                 \
  |  |  |  |   69|     66|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 66, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     66|            break;                                                                       \
  |  |  |  |   71|     66|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1561|     66|        return false;
 1562|     66|    }
 1563|  2.81k|    key_.pub = buf;
 1564|  2.81k|    return true;
 1565|  2.87k|}
_ZN3pgp17X25519KeyMaterial12parse_secretER17pgp_packet_body_t:
 1569|    912|{
 1570|    912|    auto                 ec_desc = ec::Curve::get(PGP_CURVE_25519);
 1571|    912|    std::vector<uint8_t> buf(ec_desc->bytes());
 1572|    912|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1572:9): [True: 22, False: 890]
  ------------------
 1573|     22|        RNP_LOG("failed to parse X25519 secret key data");
  ------------------
  |  |   76|     22|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     22|    do {                                                                                 \
  |  |  |  |   69|     22|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 22, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     22|            break;                                                                       \
  |  |  |  |   71|     22|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1574|     22|        return false;
 1575|     22|    }
 1576|    890|    key_.priv = buf;
 1577|    890|    secret_ = true;
 1578|    890|    return true;
 1579|    912|}
_ZNK3pgp17X25519KeyMaterial3pubEv:
 1647|  1.72k|{
 1648|  1.72k|    return key_.pub;
 1649|  1.72k|}
_ZN3pgp20MlkemEcdhKeyMaterial5cloneEv:
 1661|  21.2k|{
 1662|  21.2k|    return std::unique_ptr<KeyMaterial>(new MlkemEcdhKeyMaterial(*this));
 1663|  21.2k|}
_ZNK3pgp20MlkemEcdhKeyMaterial11grip_updateERN3rnp4HashE:
 1667|  3.01k|{
 1668|  3.01k|    hash.add(pub().get_encoded());
 1669|  3.01k|}
_ZN3pgp20MlkemEcdhKeyMaterial12clear_secretEv:
 1679|  3.09k|{
 1680|  3.09k|    key_.priv.secure_clear();
 1681|  3.09k|    KeyMaterial::clear_secret();
 1682|  3.09k|}
_ZN3pgp20MlkemEcdhKeyMaterial5parseER17pgp_packet_body_t:
 1686|  5.59k|{
 1687|  5.59k|    secret_ = false;
 1688|  5.59k|    std::vector<uint8_t> buf(pgp_kyber_ecdh_composite_public_key_t::encoded_size(alg()));
 1689|  5.59k|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1689:9): [True: 670, False: 4.92k]
  ------------------
 1690|    670|        RNP_LOG("failed to parse mlkem-ecdh public key data");
  ------------------
  |  |   76|    670|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    670|    do {                                                                                 \
  |  |  |  |   69|    670|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 670, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    670|            break;                                                                       \
  |  |  |  |   71|    670|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1691|    670|        return false;
 1692|    670|    }
 1693|  4.92k|    key_.pub = pgp_kyber_ecdh_composite_public_key_t(buf, alg());
 1694|  4.92k|    return true;
 1695|  5.59k|}
_ZN3pgp20MlkemEcdhKeyMaterial12parse_secretER17pgp_packet_body_t:
 1699|    148|{
 1700|    148|    std::vector<uint8_t> buf(pgp_kyber_ecdh_composite_private_key_t::encoded_size(alg()));
 1701|    148|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1701:9): [True: 57, False: 91]
  ------------------
 1702|     57|        RNP_LOG("failed to parse mkem-ecdh secret key data");
  ------------------
  |  |   76|     57|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     57|    do {                                                                                 \
  |  |  |  |   69|     57|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 57, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     57|            break;                                                                       \
  |  |  |  |   71|     57|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1703|     57|        return false;
 1704|     57|    }
 1705|     91|    key_.priv = pgp_kyber_ecdh_composite_private_key_t(buf.data(), buf.size(), alg());
 1706|     91|    secret_ = true;
 1707|     91|    return true;
 1708|    148|}
_ZNK3pgp20MlkemEcdhKeyMaterial3pubEv:
 1770|  3.01k|{
 1771|  3.01k|    return key_.pub;
 1772|  3.01k|}
_ZN3pgp23DilithiumEccKeyMaterial5cloneEv:
 1782|  3.12k|{
 1783|  3.12k|    return std::unique_ptr<KeyMaterial>(new DilithiumEccKeyMaterial(*this));
 1784|  3.12k|}
_ZNK3pgp23DilithiumEccKeyMaterial11grip_updateERN3rnp4HashE:
 1788|    506|{
 1789|    506|    hash.add(pub().get_encoded());
 1790|    506|}
_ZN3pgp23DilithiumEccKeyMaterial12clear_secretEv:
 1800|    700|{
 1801|    700|    key_.priv.secure_clear();
 1802|    700|    KeyMaterial::clear_secret();
 1803|    700|}
_ZN3pgp23DilithiumEccKeyMaterial5parseER17pgp_packet_body_t:
 1807|  1.62k|{
 1808|  1.62k|    secret_ = false;
 1809|  1.62k|    std::vector<uint8_t> buf(pgp_dilithium_exdsa_composite_public_key_t::encoded_size(alg()));
 1810|  1.62k|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1810:9): [True: 669, False: 954]
  ------------------
 1811|    669|        RNP_LOG("failed to parse mldsa-ecdsa/eddsa public key data");
  ------------------
  |  |   76|    669|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    669|    do {                                                                                 \
  |  |  |  |   69|    669|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 669, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    669|            break;                                                                       \
  |  |  |  |   71|    669|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1812|    669|        return false;
 1813|    669|    }
 1814|    954|    key_.pub = pgp_dilithium_exdsa_composite_public_key_t(buf, alg());
 1815|    954|    return true;
 1816|  1.62k|}
_ZN3pgp23DilithiumEccKeyMaterial12parse_secretER17pgp_packet_body_t:
 1820|     53|{
 1821|     53|    std::vector<uint8_t> buf(pgp_dilithium_exdsa_composite_private_key_t::encoded_size(alg()));
 1822|     53|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1822:9): [True: 17, False: 36]
  ------------------
 1823|     17|        RNP_LOG("failed to parse mldsa-ecdsa/eddsa secret key data");
  ------------------
  |  |   76|     17|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     17|    do {                                                                                 \
  |  |  |  |   69|     17|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 17, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     17|            break;                                                                       \
  |  |  |  |   71|     17|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1824|     17|        return false;
 1825|     17|    }
 1826|     36|    key_.priv = pgp_dilithium_exdsa_composite_private_key_t(buf.data(), buf.size(), alg());
 1827|     36|    secret_ = true;
 1828|     36|    return true;
 1829|     53|}
_ZNK3pgp23DilithiumEccKeyMaterial3pubEv:
 1892|    506|{
 1893|    506|    return key_.pub;
 1894|    506|}
_ZN3pgp17SlhdsaKeyMaterial5cloneEv:
 1904|  6.65k|{
 1905|  6.65k|    return std::unique_ptr<KeyMaterial>(new SlhdsaKeyMaterial(*this));
 1906|  6.65k|}
_ZNK3pgp17SlhdsaKeyMaterial11grip_updateERN3rnp4HashE:
 1910|  1.01k|{
 1911|  1.01k|    hash.add(pub().get_encoded());
 1912|  1.01k|}
_ZN3pgp17SlhdsaKeyMaterial12clear_secretEv:
 1922|  1.39k|{
 1923|  1.39k|    key_.priv.secure_clear();
 1924|  1.39k|    KeyMaterial::clear_secret();
 1925|  1.39k|}
_ZN3pgp17SlhdsaKeyMaterial5parseER17pgp_packet_body_t:
 1929|  1.89k|{
 1930|  1.89k|    secret_ = false;
 1931|  1.89k|    uint8_t bt = 0;
 1932|  1.89k|    if (!pkt.get(bt)) {
  ------------------
  |  Branch (1932:9): [True: 253, False: 1.63k]
  ------------------
 1933|    253|        RNP_LOG("failed to parse SLH-DSA public key data");
  ------------------
  |  |   76|    253|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    253|    do {                                                                                 \
  |  |  |  |   69|    253|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 253, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    253|            break;                                                                       \
  |  |  |  |   71|    253|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1934|    253|        return false;
 1935|    253|    }
 1936|  1.63k|    sphincsplus_parameter_t param = (sphincsplus_parameter_t) bt;
 1937|  1.63k|    auto                    size = sphincsplus_pubkey_size(param);
 1938|  1.63k|    if (!size) {
  ------------------
  |  Branch (1938:9): [True: 210, False: 1.42k]
  ------------------
 1939|    210|        RNP_LOG("invalid SLH-DSA param");
  ------------------
  |  |   76|    210|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    210|    do {                                                                                 \
  |  |  |  |   69|    210|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 210, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    210|            break;                                                                       \
  |  |  |  |   71|    210|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1940|    210|        return false;
 1941|    210|    }
 1942|  1.42k|    std::vector<uint8_t> buf(size);
 1943|  1.42k|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1943:9): [True: 80, False: 1.34k]
  ------------------
 1944|     80|        RNP_LOG("failed to parse SLH-DSA public key data");
  ------------------
  |  |   76|     80|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     80|    do {                                                                                 \
  |  |  |  |   69|     80|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 80, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     80|            break;                                                                       \
  |  |  |  |   71|     80|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1945|     80|        return false;
 1946|     80|    }
 1947|  1.34k|    key_.pub = pgp_sphincsplus_public_key_t(buf, param, alg());
 1948|  1.34k|    return true;
 1949|  1.42k|}
_ZN3pgp17SlhdsaKeyMaterial12parse_secretER17pgp_packet_body_t:
 1953|    667|{
 1954|    667|    uint8_t bt = 0;
 1955|    667|    if (!pkt.get(bt)) {
  ------------------
  |  Branch (1955:9): [True: 7, False: 660]
  ------------------
 1956|      7|        RNP_LOG("failed to parse SLH-DSA secret key data");
  ------------------
  |  |   76|      7|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      7|    do {                                                                                 \
  |  |  |  |   69|      7|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 7, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      7|            break;                                                                       \
  |  |  |  |   71|      7|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1957|      7|        return false;
 1958|      7|    }
 1959|    660|    sphincsplus_parameter_t param = (sphincsplus_parameter_t) bt;
 1960|    660|    std::vector<uint8_t>    buf(sphincsplus_privkey_size(param));
 1961|    660|    if (!pkt.get(buf.data(), buf.size())) {
  ------------------
  |  Branch (1961:9): [True: 24, False: 636]
  ------------------
 1962|     24|        RNP_LOG("failed to parse SLH-DSA secret key data");
  ------------------
  |  |   76|     24|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     24|    do {                                                                                 \
  |  |  |  |   69|     24|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 24, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     24|            break;                                                                       \
  |  |  |  |   71|     24|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1963|     24|        return false;
 1964|     24|    }
 1965|    636|    key_.priv = pgp_sphincsplus_private_key_t(buf, param, alg());
 1966|    636|    secret_ = true;
 1967|    636|    return true;
 1968|    660|}
_ZNK3pgp17SlhdsaKeyMaterial6verifyERKN3rnp15SecurityContextERKNS_11SigMaterialERKNSt3__16vectorIhN5Botan16secure_allocatorIhEEEE:
 1999|    543|{
 2000|    543|    auto slhdsa = dynamic_cast<const SlhdsaSigMaterial *>(&sig);
 2001|    543|    if (!slhdsa) {
  ------------------
  |  Branch (2001:9): [True: 543, False: 0]
  ------------------
 2002|    543|        return RNP_ERROR_BAD_PARAMETERS;
 2003|    543|    }
 2004|      0|    return key_.pub.verify(&slhdsa->sig, hash.data(), hash.size());
 2005|    543|}
_ZNK3pgp17SlhdsaKeyMaterial16sig_hash_allowedE14pgp_hash_alg_t:
 2027|    543|{
 2028|    543|    return key_.pub.validate_signature_hash_requirements(hash);
 2029|    543|}
_ZNK3pgp17SlhdsaKeyMaterial3pubEv:
 2039|  1.01k|{
 2040|  1.01k|    return key_.pub;
 2041|  1.01k|}
key_material.cpp:_ZN12_GLOBAL__N_113grip_hash_mpiERN3rnp4HashERKN3pgp3mpiEcb:
   37|   549k|{
   38|   549k|    size_t len = val.size();
   39|   549k|    size_t idx = 0;
   40|  2.14M|    for (idx = 0; (idx < len) && !val[idx]; idx++)
  ------------------
  |  Branch (40:19): [True: 2.09M, False: 49.3k]
  |  Branch (40:34): [True: 1.59M, False: 500k]
  ------------------
   41|  1.59M|        ;
   42|       |
   43|   549k|    if (name) {
  ------------------
  |  Branch (43:9): [True: 458k, False: 91.4k]
  ------------------
   44|   458k|        size_t hlen = idx >= len ? 0 : len - idx;
  ------------------
  |  Branch (44:23): [True: 43.1k, False: 414k]
  ------------------
   45|   458k|        if ((len > idx) && lzero && (val[idx] & 0x80)) {
  ------------------
  |  Branch (45:13): [True: 414k, False: 43.1k]
  |  Branch (45:28): [True: 32.9k, False: 381k]
  |  Branch (45:37): [True: 16.2k, False: 16.7k]
  ------------------
   46|  16.2k|            hlen++;
   47|  16.2k|        }
   48|       |
   49|   458k|        char buf[26] = {0};
   50|   458k|        snprintf(buf, sizeof(buf), "(1:%c%zu:", name, hlen);
   51|   458k|        hash.add(buf, strlen(buf));
   52|   458k|    }
   53|       |
   54|   549k|    if (idx < len) {
  ------------------
  |  Branch (54:9): [True: 500k, False: 49.3k]
  ------------------
   55|       |        /* gcrypt prepends mpis with zero if higher bit is set */
   56|   500k|        if (lzero && (val[idx] & 0x80)) {
  ------------------
  |  Branch (56:13): [True: 118k, False: 381k]
  |  Branch (56:22): [True: 34.6k, False: 83.5k]
  ------------------
   57|  34.6k|            uint8_t zero = 0;
   58|  34.6k|            hash.add(&zero, 1);
   59|  34.6k|        }
   60|   500k|        hash.add(val.data() + idx, len - idx);
   61|   500k|    }
   62|   549k|    if (name) {
  ------------------
  |  Branch (62:9): [True: 458k, False: 91.4k]
  ------------------
   63|   458k|        hash.add(")", 1);
   64|   458k|    }
   65|   549k|}
key_material.cpp:_ZN12_GLOBAL__N_112grip_hash_ecERN3rnp4HashERKN3pgp2ec3KeyE:
   85|  71.3k|{
   86|  71.3k|    auto desc = pgp::ec::Curve::get(key.curve);
   87|  71.3k|    if (!desc) {
  ------------------
  |  Branch (87:9): [True: 659, False: 70.7k]
  ------------------
   88|    659|        RNP_LOG("unknown curve %d", (int) key.curve);
  ------------------
  |  |   76|    659|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    659|    do {                                                                                 \
  |  |  |  |   69|    659|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 659, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    659|            break;                                                                       \
  |  |  |  |   71|    659|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|    659|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   90|    659|    }
   91|       |
   92|       |    /* build uncompressed point from gx and gy */
   93|  70.7k|    auto gxbin = rnp::hex_to_bin(desc->gx);
   94|  70.7k|    auto gybin = rnp::hex_to_bin(desc->gy);
   95|  70.7k|    assert(!gxbin.empty());
   96|  70.7k|    assert(!gybin.empty());
   97|  70.7k|    pgp::mpi g;
   98|  70.7k|    g.resize(1 + gxbin.size() + gybin.size());
   99|  70.7k|    g[0] = 0x04;
  100|  70.7k|    memcpy(g.data() + 1, gxbin.data(), gxbin.size());
  101|  70.7k|    memcpy(g.data() + 1 + gxbin.size(), gybin.data(), gybin.size());
  102|       |
  103|       |    /* p, a, b, g, n, q */
  104|  70.7k|    grip_hash_ecc_hex(hash, desc->p, 'p');
  105|  70.7k|    grip_hash_ecc_hex(hash, desc->a, 'a');
  106|  70.7k|    grip_hash_ecc_hex(hash, desc->b, 'b');
  107|  70.7k|    grip_hash_mpi(hash, g, 'g', false);
  108|  70.7k|    grip_hash_ecc_hex(hash, desc->n, 'n');
  109|       |
  110|  70.7k|    if ((key.curve == PGP_CURVE_ED25519) || (key.curve == PGP_CURVE_25519)) {
  ------------------
  |  Branch (110:9): [True: 22.4k, False: 48.2k]
  |  Branch (110:45): [True: 2.99k, False: 45.2k]
  ------------------
  111|  25.4k|        if (g.size() < 1) {
  ------------------
  |  Branch (111:13): [True: 0, False: 25.4k]
  ------------------
  112|      0|            RNP_LOG("wrong 25519 p");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  113|      0|            throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  114|      0|        }
  115|  25.4k|        g.resize(key.p.size() - 1);
  116|  25.4k|        memcpy(g.data(), key.p.data() + 1, g.size());
  117|  25.4k|        grip_hash_mpi(hash, g, 'q', false);
  118|  45.2k|    } else {
  119|  45.2k|        grip_hash_mpi(hash, key.p, 'q', false);
  120|  45.2k|    }
  121|  70.7k|}
key_material.cpp:_ZN12_GLOBAL__N_117grip_hash_ecc_hexERN3rnp4HashEPKcc:
   69|   282k|{
   70|   282k|    auto bin = rnp::hex_to_bin(hex);
   71|   282k|    if (bin.empty()) {
  ------------------
  |  Branch (71:9): [True: 0, False: 282k]
  ------------------
   72|      0|        RNP_LOG("wrong hex mpi");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
   74|      0|    }
   75|       |
   76|   282k|    pgp::mpi mpi;
   77|   282k|    mpi.assign(bin.data(), bin.size());
   78|       |
   79|       |    /* libgcrypt doesn't add leading zero when hashes ecc mpis */
   80|   282k|    return grip_hash_mpi(hash, mpi, name, false);
   81|   282k|}

_ZN3pgp11KeyMaterialC2E16pgp_pubkey_alg_tb:
  193|   312k|        : validity_({}), alg_(kalg), secret_(secret){};
_ZN3pgp14RSAKeyMaterialC2E16pgp_pubkey_alg_t:
  245|   135k|    RSAKeyMaterial(pgp_pubkey_alg_t kalg) : KeyMaterial(kalg), key_{} {};
_ZN3pgp14DSAKeyMaterialC2Ev:
  288|  10.5k|    DSAKeyMaterial() : KeyMaterial(PGP_PKA_DSA), key_{} {};
_ZN3pgp13EGKeyMaterialC2E16pgp_pubkey_alg_t:
  325|  7.70k|    EGKeyMaterial(pgp_pubkey_alg_t kalg) : KeyMaterial(kalg), key_{} {};
_ZN3pgp13ECKeyMaterialC2E16pgp_pubkey_alg_t:
  363|   139k|    ECKeyMaterial(pgp_pubkey_alg_t kalg) : KeyMaterial(kalg), key_{} {};
_ZN3pgp16ECDSAKeyMaterialC2Ev:
  386|  31.6k|    ECDSAKeyMaterial() : ECKeyMaterial(PGP_PKA_ECDSA){};
_ZN3pgp15ECDHKeyMaterialC2Ev:
  405|  63.0k|    ECDHKeyMaterial() : ECKeyMaterial(PGP_PKA_ECDH){};
_ZN3pgp16EDDSAKeyMaterialC2Ev:
  431|  37.4k|    EDDSAKeyMaterial() : ECKeyMaterial(PGP_PKA_EDDSA){};
_ZN3pgp14SM2KeyMaterialC2Ev:
  450|  7.71k|    SM2KeyMaterial() : ECKeyMaterial(PGP_PKA_SM2){};
_ZN3pgp18Ed25519KeyMaterialC2Ev:
  479|  7.29k|    Ed25519KeyMaterial() : KeyMaterial(PGP_PKA_ED25519), key_{} {};
_ZN3pgp17X25519KeyMaterialC2Ev:
  509|  2.87k|    X25519KeyMaterial() : KeyMaterial(PGP_PKA_X25519), key_{} {};
_ZN3pgp20MlkemEcdhKeyMaterialC2E16pgp_pubkey_alg_t:
  541|  5.89k|    MlkemEcdhKeyMaterial(pgp_pubkey_alg_t kalg) : KeyMaterial(kalg), key_{} {};
_ZN3pgp23DilithiumEccKeyMaterialC2E16pgp_pubkey_alg_t:
  570|  1.65k|    DilithiumEccKeyMaterial(pgp_pubkey_alg_t kalg) : KeyMaterial(kalg), key_{} {};
_ZN3pgp17SlhdsaKeyMaterialC2E16pgp_pubkey_alg_t:
  602|  1.89k|    SlhdsaKeyMaterial(pgp_pubkey_alg_t kalg) : KeyMaterial(kalg), key_{} {};

_Z14rnp_log_switchv:
   53|  1.46M|{
   54|  1.46M|    if (_rnp_log_switch < 0) {
  ------------------
  |  Branch (54:9): [True: 1, False: 1.46M]
  ------------------
   55|      1|        const char *var = getenv(RNP_LOG_CONSOLE);
   56|      1|        _rnp_log_switch = (var && strcmp(var, "0")) ? 1 : 0;
  ------------------
  |  Branch (56:28): [True: 0, False: 1]
  |  Branch (56:35): [True: 0, False: 0]
  ------------------
   57|      1|    }
   58|  1.46M|    return !_rnp_log_disable && !!_rnp_log_switch;
  ------------------
  |  Branch (58:12): [True: 1.46M, False: 0]
  |  Branch (58:33): [True: 0, False: 1.46M]
  ------------------
   59|  1.46M|}

_ZN23pgp_password_provider_tC2EPFbPK18pgp_password_ctx_tPcmPvES4_:
   52|  48.1k|        : callback(cb), userdata(ud){};

_ZN3rnp9RawPacketC2ERKN3pgp3pkt9SignatureE:
   41|   205k|{
   42|   205k|    data_ = sig.write();
   43|   205k|    tag_ = PGP_PKT_SIGNATURE;
   44|   205k|}
_ZN3rnp9RawPacketC2ER13pgp_key_pkt_t:
   47|   361k|{
   48|   361k|    rnp::MemoryDest dst;
   49|   361k|    key.write(dst.dst());
   50|   361k|    data_ = dst.to_vector();
   51|   361k|    tag_ = key.tag;
   52|   361k|}
_ZN3rnp9RawPacketC2ERK16pgp_userid_pkt_t:
   55|  4.67M|{
   56|  4.67M|    rnp::MemoryDest dst;
   57|  4.67M|    uid.write(dst.dst());
   58|  4.67M|    data_ = dst.to_vector();
   59|  4.67M|    tag_ = uid.tag;
   60|  4.67M|}

_ZN3rnp9RawPacketC2Ev:
   42|  5.50M|    RawPacket() : tag_(PGP_PKT_RESERVED){};

_ZN10rnp_ffi_stC2EN3rnp9KeyFormatES1_:
  609|  48.1k|{
  610|  48.1k|    errs = stderr;
  611|  48.1k|    pubring = new rnp::KeyStore("", context, pub_fmt);
  612|  48.1k|    secring = new rnp::KeyStore("", context, sec_fmt);
  613|  48.1k|    getkeycb = NULL;
  614|  48.1k|    getkeycb_ctx = NULL;
  615|  48.1k|    getpasscb = NULL;
  616|       |    getpasscb_ctx = NULL;
  617|  48.1k|    key_provider.callback = ffi_key_provider;
  618|  48.1k|    key_provider.userdata = this;
  619|  48.1k|    pass_provider.callback = rnp_password_cb_bounce;
  620|  48.1k|    pass_provider.userdata = this;
  621|  48.1k|}
rnp_ffi_create:
  637|  48.1k|try {
  638|       |    // checks
  639|  48.1k|    if (!ffi || !pub_format || !sec_format) {
  ------------------
  |  Branch (639:9): [True: 0, False: 48.1k]
  |  Branch (639:17): [True: 0, False: 48.1k]
  |  Branch (639:32): [True: 0, False: 48.1k]
  ------------------
  640|      0|        return RNP_ERROR_NULL_POINTER;
  641|      0|    }
  642|       |
  643|  48.1k|    auto pub_ks_format = rnp::KeyFormat::Unknown;
  644|  48.1k|    auto sec_ks_format = rnp::KeyFormat::Unknown;
  645|  48.1k|    if (!parse_ks_format(&pub_ks_format, pub_format) ||
  ------------------
  |  Branch (645:9): [True: 0, False: 48.1k]
  ------------------
  646|  48.1k|        !parse_ks_format(&sec_ks_format, sec_format)) {
  ------------------
  |  Branch (646:9): [True: 0, False: 48.1k]
  ------------------
  647|      0|        return RNP_ERROR_BAD_PARAMETERS;
  648|      0|    }
  649|       |
  650|  48.1k|    struct rnp_ffi_st *ob = new rnp_ffi_st(pub_ks_format, sec_ks_format);
  651|  48.1k|    *ffi = ob;
  652|  48.1k|    return RNP_SUCCESS;
  653|  48.1k|}
  654|  48.1k|FFI_GUARD
  ------------------
  |  |  606|  48.1k|#define FFI_GUARD FFI_GUARD_FP((stderr))
  |  |  ------------------
  |  |  |  |  589|  48.1k|    catch (rnp::rnp_exception & e)                                                  \
  |  |  |  |  590|  48.1k|    {                                                                               \
  |  |  |  |  591|      0|        return ffi_exception((fp), __func__, e.what(), e.code());                   \
  |  |  |  |  592|      0|    }                                                                               \
  |  |  |  |  593|  48.1k|    catch (std::bad_alloc &)                                                        \
  |  |  |  |  594|  48.1k|    {                                                                               \
  |  |  |  |  595|      0|        return ffi_exception((fp), __func__, "bad_alloc", RNP_ERROR_OUT_OF_MEMORY); \
  |  |  |  |  596|      0|    }                                                                               \
  |  |  |  |  597|  48.1k|    catch (std::exception & e)                                                      \
  |  |  |  |  598|  48.1k|    {                                                                               \
  |  |  |  |  599|      0|        return ffi_exception((fp), __func__, e.what());                             \
  |  |  |  |  600|      0|    }                                                                               \
  |  |  |  |  601|  48.1k|    catch (...)                                                                     \
  |  |  |  |  602|  48.1k|    {                                                                               \
  |  |  |  |  603|      0|        return ffi_exception((fp), __func__, "unknown exception");                  \
  |  |  |  |  604|      0|    }
  |  |  ------------------
  ------------------
_ZN10rnp_ffi_stD2Ev:
  672|  48.1k|{
  673|  48.1k|    close_io_file(&errs);
  674|  48.1k|    delete pubring;
  675|  48.1k|    delete secring;
  676|  48.1k|}
rnp_ffi_destroy:
  680|  48.1k|try {
  681|  48.1k|    if (ffi) {
  ------------------
  |  Branch (681:9): [True: 48.1k, False: 0]
  ------------------
  682|  48.1k|        delete ffi;
  683|  48.1k|    }
  684|  48.1k|    return RNP_SUCCESS;
  685|  48.1k|}
  686|  48.1k|FFI_GUARD
  ------------------
  |  |  606|  48.1k|#define FFI_GUARD FFI_GUARD_FP((stderr))
  |  |  ------------------
  |  |  |  |  589|  48.1k|    catch (rnp::rnp_exception & e)                                                  \
  |  |  |  |  590|  48.1k|    {                                                                               \
  |  |  |  |  591|      0|        return ffi_exception((fp), __func__, e.what(), e.code());                   \
  |  |  |  |  592|      0|    }                                                                               \
  |  |  |  |  593|  48.1k|    catch (std::bad_alloc &)                                                        \
  |  |  |  |  594|  48.1k|    {                                                                               \
  |  |  |  |  595|      0|        return ffi_exception((fp), __func__, "bad_alloc", RNP_ERROR_OUT_OF_MEMORY); \
  |  |  |  |  596|      0|    }                                                                               \
  |  |  |  |  597|  48.1k|    catch (std::exception & e)                                                      \
  |  |  |  |  598|  48.1k|    {                                                                               \
  |  |  |  |  599|      0|        return ffi_exception((fp), __func__, e.what());                             \
  |  |  |  |  600|      0|    }                                                                               \
  |  |  |  |  601|  48.1k|    catch (...)                                                                     \
  |  |  |  |  602|  48.1k|    {                                                                               \
  |  |  |  |  603|      0|        return ffi_exception((fp), __func__, "unknown exception");                  \
  |  |  |  |  604|      0|    }
  |  |  ------------------
  ------------------
rnp_import_keys:
 1690|   162k|try {
 1691|   162k|    if (!ffi || !input) {
  ------------------
  |  Branch (1691:9): [True: 0, False: 162k]
  |  Branch (1691:17): [True: 0, False: 162k]
  ------------------
 1692|      0|        return RNP_ERROR_NULL_POINTER;
 1693|      0|    }
 1694|   162k|    bool sec = extract_flag(flags, RNP_LOAD_SAVE_SECRET_KEYS);
  ------------------
  |  |   81|   162k|#define RNP_LOAD_SAVE_SECRET_KEYS (1U << 1)
  ------------------
 1695|   162k|    bool pub = extract_flag(flags, RNP_LOAD_SAVE_PUBLIC_KEYS);
  ------------------
  |  |   80|   162k|#define RNP_LOAD_SAVE_PUBLIC_KEYS (1U << 0)
  ------------------
 1696|   162k|    if (!pub && !sec) {
  ------------------
  |  Branch (1696:9): [True: 0, False: 162k]
  |  Branch (1696:17): [True: 0, False: 0]
  ------------------
 1697|      0|        FFI_LOG(ffi, "bad flags: need to specify public and/or secret keys");
  ------------------
  |  |   67|      0|    do {                             \
  |  |   68|      0|        FILE *fp = stderr;           \
  |  |   69|      0|        if (ffi && ffi->errs) {      \
  |  |  ------------------
  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  Branch (69:20): [True: 0, False: 0]
  |  |  ------------------
  |  |   70|      0|            fp = ffi->errs;          \
  |  |   71|      0|        }                            \
  |  |   72|      0|        RNP_LOG_FD(fp, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (73:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1698|      0|        return RNP_ERROR_BAD_PARAMETERS;
 1699|      0|    }
 1700|   162k|    bool skipbad = extract_flag(flags, RNP_LOAD_SAVE_PERMISSIVE);
  ------------------
  |  |   82|   162k|#define RNP_LOAD_SAVE_PERMISSIVE (1U << 8)
  ------------------
 1701|   162k|    bool single = extract_flag(flags, RNP_LOAD_SAVE_SINGLE);
  ------------------
  |  |   83|   162k|#define RNP_LOAD_SAVE_SINGLE (1U << 9)
  ------------------
 1702|   162k|    bool base64 = extract_flag(flags, RNP_LOAD_SAVE_BASE64);
  ------------------
  |  |   84|   162k|#define RNP_LOAD_SAVE_BASE64 (1U << 10)
  ------------------
 1703|   162k|    if (flags) {
  ------------------
  |  Branch (1703:9): [True: 0, False: 162k]
  ------------------
 1704|      0|        FFI_LOG(ffi, "unexpected flags remaining: 0x%X", flags);
  ------------------
  |  |   67|      0|    do {                             \
  |  |   68|      0|        FILE *fp = stderr;           \
  |  |   69|      0|        if (ffi && ffi->errs) {      \
  |  |  ------------------
  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  Branch (69:20): [True: 0, False: 0]
  |  |  ------------------
  |  |   70|      0|            fp = ffi->errs;          \
  |  |   71|      0|        }                            \
  |  |   72|      0|        RNP_LOG_FD(fp, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (73:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
 1705|      0|        return RNP_ERROR_BAD_PARAMETERS;
 1706|      0|    }
 1707|       |
 1708|   162k|    rnp_result_t  ret = RNP_ERROR_GENERIC;
 1709|   162k|    rnp::KeyStore tmp_store("", ffi->context);
 1710|       |
 1711|       |    /* check whether input is base64 */
 1712|   162k|    if (base64 && input->src.is_base64()) {
  ------------------
  |  Branch (1712:9): [True: 0, False: 162k]
  |  Branch (1712:19): [True: 0, False: 0]
  ------------------
 1713|      0|        ret = rnp_input_dearmor_if_needed(input, true);
 1714|      0|        if (ret) {
  ------------------
  |  Branch (1714:13): [True: 0, False: 0]
  ------------------
 1715|      0|            return ret;
 1716|      0|        }
 1717|      0|    }
 1718|       |
 1719|       |    // load keys to temporary keystore.
 1720|   162k|    if (single) {
  ------------------
  |  Branch (1720:9): [True: 138k, False: 24.0k]
  ------------------
 1721|       |        /* we need to init and handle dearmor on this layer since it may be used for the next
 1722|       |         * keys import */
 1723|   138k|        ret = rnp_input_dearmor_if_needed(input);
 1724|   138k|        if (ret == RNP_ERROR_EOF) {
  ------------------
  |  Branch (1724:13): [True: 9.62k, False: 128k]
  ------------------
 1725|  9.62k|            return ret;
 1726|  9.62k|        }
 1727|   128k|        if (ret) {
  ------------------
  |  Branch (1727:13): [True: 1.56k, False: 126k]
  ------------------
 1728|  1.56k|            FFI_LOG(ffi, "Failed to init/check dearmor.");
  ------------------
  |  |   67|  1.56k|    do {                             \
  |  |   68|  1.56k|        FILE *fp = stderr;           \
  |  |   69|  1.56k|        if (ffi && ffi->errs) {      \
  |  |  ------------------
  |  |  |  Branch (69:13): [True: 1.56k, False: 0]
  |  |  |  Branch (69:20): [True: 1.56k, False: 0]
  |  |  ------------------
  |  |   70|  1.56k|            fp = ffi->errs;          \
  |  |   71|  1.56k|        }                            \
  |  |   72|  1.56k|        RNP_LOG_FD(fp, __VA_ARGS__); \
  |  |  ------------------
  |  |  |  |   68|  1.56k|    do {                                                                                 \
  |  |  |  |   69|  1.56k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.56k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.56k|            break;                                                                       \
  |  |  |  |   71|  1.56k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  1.56k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (73:14): [Folded, False: 1.56k]
  |  |  ------------------
  ------------------
 1729|  1.56k|            return ret;
 1730|  1.56k|        }
 1731|   126k|        ret = tmp_store.load_pgp_key(input->src, skipbad);
 1732|   126k|        if (ret) {
  ------------------
  |  Branch (1732:13): [True: 12.7k, False: 114k]
  ------------------
 1733|  12.7k|            return ret;
 1734|  12.7k|        }
 1735|   126k|    } else {
 1736|  24.0k|        ret = tmp_store.load_pgp(input->src, skipbad);
 1737|  24.0k|        if (ret) {
  ------------------
  |  Branch (1737:13): [True: 14.2k, False: 9.85k]
  ------------------
 1738|  14.2k|            return ret;
 1739|  14.2k|        }
 1740|  24.0k|    }
 1741|       |
 1742|   124k|    json_object *jsores = json_object_new_object();
 1743|   124k|    if (!jsores) {
  ------------------
  |  Branch (1743:9): [True: 0, False: 124k]
  ------------------
 1744|      0|        return RNP_ERROR_OUT_OF_MEMORY; // LCOV_EXCL_LINE
 1745|      0|    }
 1746|   124k|    rnp::JSONObject jsowrap(jsores);
 1747|   124k|    json_object *   jsokeys = json_object_new_array();
 1748|   124k|    if (!json_add(jsores, "keys", jsokeys)) {
  ------------------
  |  Branch (1748:9): [True: 0, False: 124k]
  ------------------
 1749|      0|        return RNP_ERROR_OUT_OF_MEMORY; // LCOV_EXCL_LINE
 1750|      0|    }
 1751|       |
 1752|       |    // import keys to the main keystore.
 1753|   132k|    for (auto &key : tmp_store.keys) {
  ------------------
  |  Branch (1753:20): [True: 132k, False: 123k]
  ------------------
 1754|   132k|        pgp_key_import_status_t pub_status = PGP_KEY_IMPORT_STATUS_UNKNOWN;
 1755|   132k|        pgp_key_import_status_t sec_status = PGP_KEY_IMPORT_STATUS_UNKNOWN;
 1756|   132k|        if (!pub && key.is_public()) {
  ------------------
  |  Branch (1756:13): [True: 0, False: 132k]
  |  Branch (1756:21): [True: 0, False: 0]
  ------------------
 1757|      0|            continue;
 1758|      0|        }
 1759|       |        // if we got here then we add public key itself or public part of the secret key
 1760|   132k|        if (!ffi->pubring->import_key(key, true, &pub_status)) {
  ------------------
  |  Branch (1760:13): [True: 127, False: 132k]
  ------------------
 1761|    127|            return RNP_ERROR_BAD_PARAMETERS;
 1762|    127|        }
 1763|       |        // import secret key part if available and requested
 1764|   132k|        if (sec && key.is_secret()) {
  ------------------
  |  Branch (1764:13): [True: 132k, False: 0]
  |  Branch (1764:20): [True: 47.7k, False: 84.7k]
  ------------------
 1765|  47.7k|            if (!ffi->secring->import_key(key, false, &sec_status)) {
  ------------------
  |  Branch (1765:17): [True: 1, False: 47.7k]
  ------------------
 1766|      1|                return RNP_ERROR_BAD_PARAMETERS;
 1767|      1|            }
 1768|       |            // add uids, certifications and other stuff from the public key if any
 1769|  47.7k|            auto *expub = ffi->pubring->get_key(key.fp());
 1770|  47.7k|            if (expub && !ffi->secring->import_key(*expub, true)) {
  ------------------
  |  Branch (1770:17): [True: 47.7k, False: 0]
  |  Branch (1770:26): [True: 10, False: 47.7k]
  ------------------
 1771|     10|                return RNP_ERROR_BAD_PARAMETERS;
 1772|     10|            }
 1773|  47.7k|        }
 1774|       |        // now add key fingerprint to json based on statuses
 1775|   132k|        rnp_result_t tmpret = add_key_status(jsokeys, &key, pub_status, sec_status);
 1776|   132k|        if (tmpret) {
  ------------------
  |  Branch (1776:13): [True: 0, False: 132k]
  ------------------
 1777|      0|            return tmpret;
 1778|      0|        }
 1779|   132k|    }
 1780|   123k|    if (!results) {
  ------------------
  |  Branch (1780:9): [True: 0, False: 123k]
  ------------------
 1781|      0|        return RNP_SUCCESS;
 1782|      0|    }
 1783|   123k|    return ret_str_value(json_object_to_json_string_ext(jsores, JSON_C_TO_STRING_PRETTY),
 1784|   123k|                         results);
 1785|   123k|}
 1786|   162k|FFI_GUARD
  ------------------
  |  |  606|   162k|#define FFI_GUARD FFI_GUARD_FP((stderr))
  |  |  ------------------
  |  |  |  |  589|   162k|    catch (rnp::rnp_exception & e)                                                  \
  |  |  |  |  590|   162k|    {                                                                               \
  |  |  |  |  591|      0|        return ffi_exception((fp), __func__, e.what(), e.code());                   \
  |  |  |  |  592|      0|    }                                                                               \
  |  |  |  |  593|   162k|    catch (std::bad_alloc &)                                                        \
  |  |  |  |  594|   162k|    {                                                                               \
  |  |  |  |  595|      0|        return ffi_exception((fp), __func__, "bad_alloc", RNP_ERROR_OUT_OF_MEMORY); \
  |  |  |  |  596|      0|    }                                                                               \
  |  |  |  |  597|   162k|    catch (std::exception & e)                                                      \
  |  |  |  |  598|   162k|    {                                                                               \
  |  |  |  |  599|      0|        return ffi_exception((fp), __func__, e.what());                             \
  |  |  |  |  600|      0|    }                                                                               \
  |  |  |  |  601|   162k|    catch (...)                                                                     \
  |  |  |  |  602|   162k|    {                                                                               \
  |  |  |  |  603|      0|        return ffi_exception((fp), __func__, "unknown exception");                  \
  |  |  |  |  604|      0|    }
  |  |  ------------------
  ------------------
_ZN12rnp_input_stC2Ev:
 1994|  70.0k|rnp_input_st::rnp_input_st() : reader(NULL), closer(NULL), app_ctx(NULL)
 1995|  70.0k|{
 1996|  70.0k|    memset(&src, 0, sizeof(src));
 1997|  70.0k|}
_ZN12rnp_input_staSEOS_:
 2001|  42.3k|{
 2002|  42.3k|    src.close();
 2003|  42.3k|    src = std::move(input.src);
 2004|  42.3k|    memset(&input.src, 0, sizeof(input.src));
 2005|  42.3k|    reader = input.reader;
 2006|  42.3k|    input.reader = NULL;
 2007|  42.3k|    closer = input.closer;
 2008|  42.3k|    input.closer = NULL;
 2009|  42.3k|    app_ctx = input.app_ctx;
 2010|       |    input.app_ctx = NULL;
 2011|  42.3k|    src_directory = std::move(input.src_directory);
 2012|  42.3k|    return *this;
 2013|  42.3k|}
_ZN12rnp_input_stD2Ev:
 2016|  70.0k|{
 2017|  70.0k|    bool armored = src.type == PGP_STREAM_ARMORED;
 2018|  70.0k|    src.close();
 2019|  70.0k|    if (armored) {
  ------------------
  |  Branch (2019:9): [True: 1.39k, False: 68.6k]
  ------------------
 2020|  1.39k|        rnp_input_t armored = (rnp_input_t) app_ctx;
 2021|  1.39k|        delete armored;
 2022|       |        app_ctx = NULL;
 2023|  1.39k|    }
 2024|  70.0k|}
rnp_input_from_memory:
 2073|  48.1k|try {
 2074|  48.1k|    if (!input) {
  ------------------
  |  Branch (2074:9): [True: 0, False: 48.1k]
  ------------------
 2075|      0|        return RNP_ERROR_NULL_POINTER;
 2076|      0|    }
 2077|  48.1k|    if (!buf && buf_len) {
  ------------------
  |  Branch (2077:9): [True: 0, False: 48.1k]
  |  Branch (2077:17): [True: 0, False: 0]
  ------------------
 2078|      0|        return RNP_ERROR_NULL_POINTER;
 2079|      0|    }
 2080|  48.1k|    if (!buf_len) {
  ------------------
  |  Branch (2080:9): [True: 0, False: 48.1k]
  ------------------
 2081|       |        // prevent malloc(0)
 2082|      0|        do_copy = false;
 2083|      0|    }
 2084|  48.1k|    *input = new rnp_input_st();
 2085|  48.1k|    uint8_t *data = (uint8_t *) buf;
 2086|  48.1k|    if (do_copy) {
  ------------------
  |  Branch (2086:9): [True: 0, False: 48.1k]
  ------------------
 2087|      0|        data = (uint8_t *) malloc(buf_len);
 2088|      0|        if (!data) {
  ------------------
  |  Branch (2088:13): [True: 0, False: 0]
  ------------------
 2089|       |            /* LCOV_EXCL_START */
 2090|      0|            delete *input;
 2091|      0|            *input = NULL;
 2092|      0|            return RNP_ERROR_OUT_OF_MEMORY;
 2093|       |            /* LCOV_EXCL_END */
 2094|      0|        }
 2095|      0|        memcpy(data, buf, buf_len);
 2096|      0|    }
 2097|  48.1k|    rnp_result_t ret = init_mem_src(&(*input)->src, data, buf_len, do_copy);
 2098|  48.1k|    if (ret) {
  ------------------
  |  Branch (2098:9): [True: 0, False: 48.1k]
  ------------------
 2099|       |        /* LCOV_EXCL_START */
 2100|      0|        if (do_copy) {
  ------------------
  |  Branch (2100:13): [True: 0, False: 0]
  ------------------
 2101|      0|            free(data);
 2102|      0|        }
 2103|      0|        delete *input;
 2104|      0|        *input = NULL;
 2105|       |        /* LCOV_EXCL_END */
 2106|      0|    }
 2107|  48.1k|    return ret;
 2108|  48.1k|}
 2109|  48.1k|FFI_GUARD
  ------------------
  |  |  606|  48.1k|#define FFI_GUARD FFI_GUARD_FP((stderr))
  |  |  ------------------
  |  |  |  |  589|  48.1k|    catch (rnp::rnp_exception & e)                                                  \
  |  |  |  |  590|  48.1k|    {                                                                               \
  |  |  |  |  591|      0|        return ffi_exception((fp), __func__, e.what(), e.code());                   \
  |  |  |  |  592|      0|    }                                                                               \
  |  |  |  |  593|  48.1k|    catch (std::bad_alloc &)                                                        \
  |  |  |  |  594|  48.1k|    {                                                                               \
  |  |  |  |  595|      0|        return ffi_exception((fp), __func__, "bad_alloc", RNP_ERROR_OUT_OF_MEMORY); \
  |  |  |  |  596|      0|    }                                                                               \
  |  |  |  |  597|  48.1k|    catch (std::exception & e)                                                      \
  |  |  |  |  598|  48.1k|    {                                                                               \
  |  |  |  |  599|      0|        return ffi_exception((fp), __func__, e.what());                             \
  |  |  |  |  600|      0|    }                                                                               \
  |  |  |  |  601|  48.1k|    catch (...)                                                                     \
  |  |  |  |  602|  48.1k|    {                                                                               \
  |  |  |  |  603|      0|        return ffi_exception((fp), __func__, "unknown exception");                  \
  |  |  |  |  604|      0|    }
  |  |  ------------------
  ------------------
rnp_input_destroy:
 2162|  48.1k|try {
 2163|  48.1k|    delete input;
 2164|  48.1k|    return RNP_SUCCESS;
 2165|  48.1k|}
 2166|  48.1k|FFI_GUARD
  ------------------
  |  |  606|  48.1k|#define FFI_GUARD FFI_GUARD_FP((stderr))
  |  |  ------------------
  |  |  |  |  589|  48.1k|    catch (rnp::rnp_exception & e)                                                  \
  |  |  |  |  590|  48.1k|    {                                                                               \
  |  |  |  |  591|      0|        return ffi_exception((fp), __func__, e.what(), e.code());                   \
  |  |  |  |  592|      0|    }                                                                               \
  |  |  |  |  593|  48.1k|    catch (std::bad_alloc &)                                                        \
  |  |  |  |  594|  48.1k|    {                                                                               \
  |  |  |  |  595|      0|        return ffi_exception((fp), __func__, "bad_alloc", RNP_ERROR_OUT_OF_MEMORY); \
  |  |  |  |  596|      0|    }                                                                               \
  |  |  |  |  597|  48.1k|    catch (std::exception & e)                                                      \
  |  |  |  |  598|  48.1k|    {                                                                               \
  |  |  |  |  599|      0|        return ffi_exception((fp), __func__, e.what());                             \
  |  |  |  |  600|      0|    }                                                                               \
  |  |  |  |  601|  48.1k|    catch (...)                                                                     \
  |  |  |  |  602|  48.1k|    {                                                                               \
  |  |  |  |  603|      0|        return ffi_exception((fp), __func__, "unknown exception");                  \
  |  |  |  |  604|      0|    }
  |  |  ------------------
  ------------------
rnp_buffer_destroy:
 5605|   162k|{
 5606|   162k|    free(ptr);
 5607|   162k|}
rnp.cpp:_ZL15parse_ks_formatPN3rnp9KeyFormatEPKc:
  496|  96.3k|{
  497|  96.3k|    if (!strcmp(format, RNP_KEYSTORE_GPG)) {
  ------------------
  |  | 4176|  96.3k|#define RNP_KEYSTORE_GPG ("GPG")
  ------------------
  |  Branch (497:9): [True: 96.3k, False: 0]
  ------------------
  498|  96.3k|        *key_store_format = rnp::KeyFormat::GPG;
  499|  96.3k|    } else if (!strcmp(format, RNP_KEYSTORE_KBX)) {
  ------------------
  |  | 4177|      0|#define RNP_KEYSTORE_KBX ("KBX")
  ------------------
  |  Branch (499:16): [True: 0, False: 0]
  ------------------
  500|      0|        *key_store_format = rnp::KeyFormat::KBX;
  501|      0|    } else if (!strcmp(format, RNP_KEYSTORE_G10)) {
  ------------------
  |  | 4178|      0|#define RNP_KEYSTORE_G10 ("G10")
  ------------------
  |  Branch (501:16): [True: 0, False: 0]
  ------------------
  502|      0|        *key_store_format = rnp::KeyFormat::G10;
  503|      0|    } else {
  504|      0|        return false;
  505|      0|    }
  506|  96.3k|    return true;
  507|  96.3k|}
rnp.cpp:_ZL13close_io_filePP8_IO_FILE:
  664|  48.1k|{
  665|  48.1k|    if (*fp && !is_std_file(*fp)) {
  ------------------
  |  Branch (665:9): [True: 48.1k, False: 0]
  |  Branch (665:16): [True: 0, False: 48.1k]
  ------------------
  666|      0|        fclose(*fp);
  667|      0|    }
  668|       |    *fp = NULL;
  669|  48.1k|}
rnp.cpp:_ZL11is_std_fileP8_IO_FILE:
  658|  48.1k|{
  659|  48.1k|    return fp == stdout || fp == stderr;
  ------------------
  |  Branch (659:12): [True: 0, False: 48.1k]
  |  Branch (659:28): [True: 48.1k, False: 0]
  ------------------
  660|  48.1k|}
rnp.cpp:_ZL13ret_str_valuePKcPPc:
  529|   123k|{
  530|   123k|    if (!str) {
  ------------------
  |  Branch (530:9): [True: 0, False: 123k]
  ------------------
  531|      0|        return RNP_ERROR_BAD_PARAMETERS;
  532|      0|    }
  533|   123k|    char *strcp = strdup(str);
  534|   123k|    if (!strcp) {
  ------------------
  |  Branch (534:9): [True: 0, False: 123k]
  ------------------
  535|      0|        *res = NULL;                    // LCOV_EXCL_LINE
  536|      0|        return RNP_ERROR_OUT_OF_MEMORY; // LCOV_EXCL_LINE
  537|      0|    }
  538|   123k|    *res = strcp;
  539|   123k|    return RNP_SUCCESS;
  540|   123k|}
rnp.cpp:_ZL12extract_flagRjj:
 1209|   811k|{
 1210|   811k|    bool res = flags & flag;
 1211|   811k|    flags &= ~flag;
 1212|   811k|    return res;
 1213|   811k|}
rnp.cpp:_ZL27rnp_input_dearmor_if_neededP12rnp_input_stb:
 1609|   138k|{
 1610|   138k|    if (!input) {
  ------------------
  |  Branch (1610:9): [True: 0, False: 138k]
  ------------------
 1611|      0|        return RNP_ERROR_NULL_POINTER;
 1612|      0|    }
 1613|   138k|    if (!input->src_directory.empty()) {
  ------------------
  |  Branch (1613:9): [True: 0, False: 138k]
  ------------------
 1614|      0|        return RNP_ERROR_BAD_PARAMETERS;
 1615|      0|    }
 1616|   138k|    bool require_armor = false;
 1617|       |    /* check whether we already have armored stream */
 1618|   138k|    if (input->src.type == PGP_STREAM_ARMORED) {
  ------------------
  |  Branch (1618:9): [True: 25.2k, False: 112k]
  ------------------
 1619|  25.2k|        if (!input->src.eof()) {
  ------------------
  |  Branch (1619:13): [True: 6.08k, False: 19.2k]
  ------------------
 1620|       |            /* be ready for the case of damaged armoring */
 1621|  6.08k|            return input->src.error() ? RNP_ERROR_READ : RNP_SUCCESS;
  ------------------
  |  Branch (1621:20): [True: 0, False: 6.08k]
  ------------------
 1622|  6.08k|        }
 1623|       |        /* eof - probably next we have another armored message */
 1624|  19.2k|        input->src.close();
 1625|  19.2k|        rnp_input_st *base = (rnp_input_st *) input->app_ctx;
 1626|  19.2k|        *input = std::move(*base);
 1627|  19.2k|        delete base;
 1628|       |        /* we should not mix armored data with binary */
 1629|  19.2k|        require_armor = true;
 1630|       |        /* skip spaces before the next armored block or EOF */
 1631|  19.2k|        input->src.skip_chars("\r\n \t");
 1632|  19.2k|    }
 1633|   132k|    if (input->src.eof()) {
  ------------------
  |  Branch (1633:9): [True: 9.62k, False: 122k]
  ------------------
 1634|  9.62k|        return RNP_ERROR_EOF;
 1635|  9.62k|    }
 1636|       |    /* check whether input is armored only if base64 is not forced */
 1637|   122k|    if (!noheaders && !input->src.is_armored()) {
  ------------------
  |  Branch (1637:9): [True: 122k, False: 0]
  |  Branch (1637:23): [True: 100k, False: 21.8k]
  ------------------
 1638|   100k|        return require_armor ? RNP_ERROR_BAD_FORMAT : RNP_SUCCESS;
  ------------------
  |  Branch (1638:16): [True: 294, False: 100k]
  ------------------
 1639|   100k|    }
 1640|       |
 1641|       |    /* Store original input in app_ctx and replace src/app_ctx with armored data */
 1642|  21.8k|    rnp_input_t app_ctx = new rnp_input_st();
 1643|  21.8k|    *app_ctx = std::move(*input);
 1644|       |
 1645|  21.8k|    rnp_result_t ret = init_armored_src(&input->src, &app_ctx->src, noheaders);
 1646|  21.8k|    if (ret) {
  ------------------
  |  Branch (1646:9): [True: 1.27k, False: 20.6k]
  ------------------
 1647|       |        /* original src may be changed during init_armored_src call, so copy it back */
 1648|  1.27k|        *input = std::move(*app_ctx);
 1649|  1.27k|        delete app_ctx;
 1650|  1.27k|        return ret;
 1651|  1.27k|    }
 1652|  20.6k|    input->app_ctx = app_ctx;
 1653|  20.6k|    return RNP_SUCCESS;
 1654|  21.8k|}
rnp.cpp:_ZL14add_key_statusP11json_objectPKN3rnp3KeyE23pgp_key_import_status_tS5_:
 1670|   132k|{
 1671|   132k|    json_object *jsokey = json_object_new_object();
 1672|   132k|    if (!jsokey) {
  ------------------
  |  Branch (1672:9): [True: 0, False: 132k]
  ------------------
 1673|      0|        return RNP_ERROR_OUT_OF_MEMORY; // LCOV_EXCL_LINE
 1674|      0|    }
 1675|       |
 1676|   132k|    if (!json_add(jsokey, "public", key_status_to_str(pub)) ||
  ------------------
  |  Branch (1676:9): [True: 0, False: 132k]
  ------------------
 1677|   132k|        !json_add(jsokey, "secret", key_status_to_str(sec)) ||
  ------------------
  |  Branch (1677:9): [True: 0, False: 132k]
  ------------------
 1678|   132k|        !json_add(jsokey, "fingerprint", key->fp()) || !json_array_add(keys, jsokey)) {
  ------------------
  |  Branch (1678:9): [True: 0, False: 132k]
  |  Branch (1678:56): [True: 0, False: 132k]
  ------------------
 1679|       |        /* LCOV_EXCL_START */
 1680|      0|        json_object_put(jsokey);
 1681|      0|        return RNP_ERROR_OUT_OF_MEMORY;
 1682|       |        /* LCOV_EXCL_END */
 1683|      0|    }
 1684|       |
 1685|   132k|    return RNP_SUCCESS;
 1686|   132k|}
rnp.cpp:_ZL17key_status_to_str23pgp_key_import_status_t:
 1658|   265k|{
 1659|   265k|    if (status == PGP_KEY_IMPORT_STATUS_UNKNOWN) {
  ------------------
  |  Branch (1659:9): [True: 84.7k, False: 180k]
  ------------------
 1660|  84.7k|        return "none";
 1661|  84.7k|    }
 1662|   180k|    return id_str_pair::lookup(key_import_status_map, status, "none");
 1663|   265k|}

_ZNK3rnp12SecurityRule7matchesENS_11FeatureTypeEimNS_14SecurityActionE:
   52|   682k|{
   53|   682k|    if ((type != ftype) || (feature != fval) || (from > ftime)) {
  ------------------
  |  Branch (53:9): [True: 388k, False: 294k]
  |  Branch (53:28): [True: 273k, False: 21.2k]
  |  Branch (53:49): [True: 16.5k, False: 4.72k]
  ------------------
   54|   678k|        return false;
   55|   678k|    }
   56|  4.72k|    return (action == SecurityAction::Any) || (faction == SecurityAction::Any) ||
  ------------------
  |  Branch (56:12): [True: 1.53k, False: 3.18k]
  |  Branch (56:47): [True: 0, False: 3.18k]
  ------------------
   57|  3.18k|           (action == faction);
  ------------------
  |  Branch (57:12): [True: 1.17k, False: 2.01k]
  ------------------
   58|   682k|}
_ZN3rnp15SecurityProfile8add_ruleEONS_12SecurityRuleE:
   75|   337k|{
   76|   337k|    rules_.emplace_back(rule);
   77|   337k|    return rules_.back();
   78|   337k|}
_ZNK3rnp15SecurityProfile8has_ruleENS_11FeatureTypeEimNS_14SecurityActionE:
  123|  97.0k|{
  124|   673k|    for (auto &rule : rules_) {
  ------------------
  |  Branch (124:21): [True: 673k, False: 95.6k]
  ------------------
  125|   673k|        if (rule.matches(type, value, time, action)) {
  ------------------
  |  Branch (125:13): [True: 1.35k, False: 672k]
  ------------------
  126|  1.35k|            return true;
  127|  1.35k|        }
  128|   673k|    }
  129|  95.6k|    return false;
  130|  97.0k|}
_ZNK3rnp15SecurityProfile8get_ruleENS_11FeatureTypeEimNS_14SecurityActionE:
  137|  1.35k|{
  138|  1.35k|    const SecurityRule *res = nullptr;
  139|  9.47k|    for (auto &rule : rules_) {
  ------------------
  |  Branch (139:21): [True: 9.47k, False: 1.35k]
  ------------------
  140|  9.47k|        if (!rule.matches(type, value, time, action)) {
  ------------------
  |  Branch (140:13): [True: 8.11k, False: 1.35k]
  ------------------
  141|  8.11k|            continue;
  142|  8.11k|        }
  143|  1.35k|        if (rule.override) {
  ------------------
  |  Branch (143:13): [True: 0, False: 1.35k]
  ------------------
  144|      0|            return rule;
  145|      0|        }
  146|  1.35k|        if (!res || (res->from < rule.from)) {
  ------------------
  |  Branch (146:13): [True: 1.35k, False: 0]
  |  Branch (146:21): [True: 0, False: 0]
  ------------------
  147|  1.35k|            res = &rule;
  148|  1.35k|        }
  149|  1.35k|    }
  150|  1.35k|    if (!res) {
  ------------------
  |  Branch (150:9): [True: 0, False: 1.35k]
  ------------------
  151|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  152|      0|    }
  153|  1.35k|    return *res;
  154|  1.35k|}
_ZNK3rnp15SecurityProfile10hash_levelE14pgp_hash_alg_tmNS_14SecurityActionE:
  160|  97.0k|{
  161|  97.0k|    if (!has_rule(FeatureType::Hash, hash, time, action)) {
  ------------------
  |  Branch (161:9): [True: 95.6k, False: 1.35k]
  ------------------
  162|  95.6k|        return def_level();
  163|  95.6k|    }
  164|       |
  165|  1.35k|    try {
  166|  1.35k|        return get_rule(FeatureType::Hash, hash, time, action).level;
  167|  1.35k|    } catch (const std::exception &e) {
  168|       |        /* this should never happen however we need to satisfy noexcept specifier */
  169|      0|        return def_level();
  170|      0|    }
  171|  1.35k|}
_ZNK3rnp15SecurityProfile9def_levelEv:
  175|  95.6k|{
  176|  95.6k|    return SecurityLevel::Default;
  177|  95.6k|};
_ZN3rnp15SecurityContextC2Ev:
  179|  48.1k|SecurityContext::SecurityContext() : time_(0), prov_state_(NULL), rng(RNG::Type::DRBG)
  180|  48.1k|{
  181|       |    /* Initialize crypto provider if needed (currently only for OpenSSL 3.0) */
  182|  48.1k|    if (!rnp::backend_init(&prov_state_)) {
  ------------------
  |  Branch (182:9): [True: 0, False: 48.1k]
  ------------------
  183|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_STATE);
  184|      0|    }
  185|       |    /* Mark SHA-1 data signature insecure since 2019-01-19, as GnuPG does */
  186|  48.1k|    profile.add_rule({FeatureType::Hash,
  187|  48.1k|                      PGP_HASH_SHA1,
  188|  48.1k|                      SecurityLevel::Insecure,
  189|  48.1k|                      1547856000,
  190|  48.1k|                      SecurityAction::VerifyData});
  191|       |    /* Mark SHA-1 key signature insecure since 2024-01-19 by default */
  192|  48.1k|    profile.add_rule({FeatureType::Hash,
  193|  48.1k|                      PGP_HASH_SHA1,
  194|  48.1k|                      SecurityLevel::Insecure,
  195|  48.1k|                      1705629600,
  196|  48.1k|                      SecurityAction::VerifyKey});
  197|       |    /* Mark MD5 insecure since 2012-01-01 */
  198|  48.1k|    profile.add_rule({FeatureType::Hash, PGP_HASH_MD5, SecurityLevel::Insecure, 1325376000});
  199|       |    /* Mark CAST5, 3DES, IDEA, BLOWFISH insecure since 2024-10-01*/
  200|  48.1k|    profile.add_rule({FeatureType::Cipher, PGP_SA_CAST5, SecurityLevel::Insecure, 1727730000});
  201|  48.1k|    profile.add_rule(
  202|  48.1k|      {FeatureType::Cipher, PGP_SA_TRIPLEDES, SecurityLevel::Insecure, 1727730000});
  203|  48.1k|    profile.add_rule({FeatureType::Cipher, PGP_SA_IDEA, SecurityLevel::Insecure, 1727730000});
  204|  48.1k|    profile.add_rule(
  205|  48.1k|      {FeatureType::Cipher, PGP_SA_BLOWFISH, SecurityLevel::Insecure, 1727730000});
  206|  48.1k|}
_ZN3rnp15SecurityContextD2Ev:
  209|  48.1k|{
  210|  48.1k|    rnp::backend_finish(prov_state_);
  211|  48.1k|}
_ZNK3rnp15SecurityContext4timeEv:
  231|   447k|{
  232|   447k|    return time_ ? time_ : ::time(NULL);
  ------------------
  |  Branch (232:12): [True: 0, False: 447k]
  ------------------
  233|   447k|}

_ZN3rnp12SecurityRuleC2ENS_11FeatureTypeEiNS_13SecurityLevelEmNS_14SecurityActionE:
   54|   337k|        : type(ftype), feature(fval), level(flevel), from(ffrom), override(false),
   55|   337k|          action(faction){};

_ZN3pgp11SigMaterial6createE16pgp_pubkey_alg_t14pgp_hash_alg_t:
   35|   348k|{
   36|   348k|    switch (palg) {
   37|   113k|    case PGP_PKA_RSA:
  ------------------
  |  Branch (37:5): [True: 113k, False: 234k]
  ------------------
   38|   156k|    case PGP_PKA_RSA_SIGN_ONLY:
  ------------------
  |  Branch (38:5): [True: 43.2k, False: 305k]
  ------------------
   39|   156k|        return std::unique_ptr<SigMaterial>(new RSASigMaterial(halg));
   40|  21.0k|    case PGP_PKA_DSA:
  ------------------
  |  Branch (40:5): [True: 21.0k, False: 327k]
  ------------------
   41|  21.0k|        return std::unique_ptr<SigMaterial>(new DSASigMaterial(halg));
   42|  69.8k|    case PGP_PKA_EDDSA:
  ------------------
  |  Branch (42:5): [True: 69.8k, False: 278k]
  ------------------
   43|   140k|    case PGP_PKA_ECDSA:
  ------------------
  |  Branch (43:5): [True: 70.5k, False: 277k]
  ------------------
   44|   145k|    case PGP_PKA_SM2:
  ------------------
  |  Branch (44:5): [True: 5.24k, False: 343k]
  ------------------
   45|   148k|    case PGP_PKA_ECDH:
  ------------------
  |  Branch (45:5): [True: 3.09k, False: 345k]
  ------------------
   46|   148k|        return std::unique_ptr<SigMaterial>(new ECSigMaterial(halg));
   47|  1.28k|    case PGP_PKA_ELGAMAL: /* we support reading it but will not validate */
  ------------------
  |  Branch (47:5): [True: 1.28k, False: 347k]
  ------------------
   48|  1.83k|    case PGP_PKA_ELGAMAL_ENCRYPT_OR_SIGN:
  ------------------
  |  Branch (48:5): [True: 543, False: 347k]
  ------------------
   49|  1.83k|        return std::unique_ptr<SigMaterial>(new EGSigMaterial(halg));
   50|      0|#if defined(ENABLE_CRYPTO_REFRESH)
   51|  18.0k|    case PGP_PKA_ED25519: {
  ------------------
  |  Branch (51:5): [True: 18.0k, False: 330k]
  ------------------
   52|  18.0k|        return std::unique_ptr<SigMaterial>(new Ed25519SigMaterial(halg));
   53|  1.28k|    }
   54|      0|#endif
   55|      0|#if defined(ENABLE_PQC)
   56|     71|    case PGP_PKA_DILITHIUM3_ED25519:
  ------------------
  |  Branch (56:5): [True: 71, False: 348k]
  ------------------
   57|     71|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|     71|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
   58|       |    // TODO: Add case for PGP_PKA_DILITHIUM5_ED448 with FALLTHROUGH_STATEMENT;
   59|    295|    case PGP_PKA_DILITHIUM3_P256:
  ------------------
  |  Branch (59:5): [True: 224, False: 348k]
  ------------------
   60|    295|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    295|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
   61|    365|    case PGP_PKA_DILITHIUM5_P384:
  ------------------
  |  Branch (61:5): [True: 70, False: 348k]
  ------------------
   62|    365|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    365|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
   63|    440|    case PGP_PKA_DILITHIUM3_BP256:
  ------------------
  |  Branch (63:5): [True: 75, False: 348k]
  ------------------
   64|    440|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    440|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
   65|    510|    case PGP_PKA_DILITHIUM5_BP384:
  ------------------
  |  Branch (65:5): [True: 70, False: 348k]
  ------------------
   66|    510|        return std::unique_ptr<SigMaterial>(new DilithiumSigMaterial(palg, halg));
   67|    144|    case PGP_PKA_SPHINCSPLUS_SHA2:
  ------------------
  |  Branch (67:5): [True: 144, False: 348k]
  ------------------
   68|    144|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|    144|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
   69|    281|    case PGP_PKA_SPHINCSPLUS_SHAKE:
  ------------------
  |  Branch (69:5): [True: 137, False: 348k]
  ------------------
   70|    281|        return std::unique_ptr<SigMaterial>(new SlhdsaSigMaterial(halg));
   71|      0|#endif
   72|  1.06k|    default:
  ------------------
  |  Branch (72:5): [True: 1.06k, False: 347k]
  ------------------
   73|  1.06k|        RNP_LOG("Unknown pk algorithm : %d", (int) palg);
  ------------------
  |  |   76|  1.06k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.06k|    do {                                                                                 \
  |  |  |  |   69|  1.06k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.06k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.06k|            break;                                                                       \
  |  |  |  |   71|  1.06k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   74|  1.06k|        return nullptr;
   75|   348k|    }
   76|   348k|}
_ZN3pgp14RSASigMaterial5parseER17pgp_packet_body_t:
   80|   156k|{
   81|   156k|    return pkt.get(sig.s);
   82|   156k|}
_ZN3pgp14DSASigMaterial5parseER17pgp_packet_body_t:
   92|  21.0k|{
   93|  21.0k|    return pkt.get(sig.r) && pkt.get(sig.s);
  ------------------
  |  Branch (93:12): [True: 20.9k, False: 92]
  |  Branch (93:30): [True: 20.3k, False: 544]
  ------------------
   94|  21.0k|}
_ZN3pgp13EGSigMaterial5parseER17pgp_packet_body_t:
  105|  1.83k|{
  106|  1.83k|    return pkt.get(sig.r) && pkt.get(sig.s);
  ------------------
  |  Branch (106:12): [True: 1.74k, False: 84]
  |  Branch (106:30): [True: 1.72k, False: 26]
  ------------------
  107|  1.83k|}
_ZN3pgp13ECSigMaterial5parseER17pgp_packet_body_t:
  119|   148k|{
  120|   148k|    return pkt.get(sig.r) && pkt.get(sig.s);
  ------------------
  |  Branch (120:12): [True: 148k, False: 672]
  |  Branch (120:30): [True: 147k, False: 702]
  ------------------
  121|   148k|}
_ZN3pgp18Ed25519SigMaterial5parseER17pgp_packet_body_t:
  133|  18.0k|{
  134|  18.0k|    auto ec_desc = pgp::ec::Curve::get(PGP_CURVE_25519);
  135|  18.0k|    if (!pkt.get(sig.sig, 2 * ec_desc->bytes())) {
  ------------------
  |  Branch (135:9): [True: 34, False: 18.0k]
  ------------------
  136|     34|        RNP_LOG("failed to parse ED25519 signature data");
  ------------------
  |  |   76|     34|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     34|    do {                                                                                 \
  |  |  |  |   69|     34|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 34, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     34|            break;                                                                       \
  |  |  |  |   71|     34|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|     34|        return false;
  138|     34|    }
  139|  18.0k|    return true;
  140|  18.0k|}
_ZN3pgp20DilithiumSigMaterial5parseER17pgp_packet_body_t:
  152|    510|{
  153|    510|    if (!pkt.get(sig.sig, pgp_dilithium_exdsa_signature_t::composite_signature_size(palg))) {
  ------------------
  |  Branch (153:9): [True: 503, False: 7]
  ------------------
  154|    503|        RNP_LOG("failed to get mldsa-ecdsa/eddsa signature");
  ------------------
  |  |   76|    503|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    503|    do {                                                                                 \
  |  |  |  |   69|    503|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 503, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    503|            break;                                                                       \
  |  |  |  |   71|    503|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  155|    503|        return false;
  156|    503|    }
  157|      7|    return true;
  158|    510|}
_ZN3pgp17SlhdsaSigMaterial5parseER17pgp_packet_body_t:
  168|    281|{
  169|    281|    uint8_t param = 0;
  170|    281|    if (!pkt.get(param)) {
  ------------------
  |  Branch (170:9): [True: 75, False: 206]
  ------------------
  171|     75|        RNP_LOG("failed to parse SLH-DSA signature data");
  ------------------
  |  |   76|     75|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     75|    do {                                                                                 \
  |  |  |  |   69|     75|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 75, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     75|            break;                                                                       \
  |  |  |  |   71|     75|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  172|     75|        return false;
  173|     75|    }
  174|    206|    auto sig_size = sphincsplus_signature_size((sphincsplus_parameter_t) param);
  175|    206|    if (!sig_size) {
  ------------------
  |  Branch (175:9): [True: 50, False: 156]
  ------------------
  176|     50|        RNP_LOG("invalid SLH-DSA param value");
  ------------------
  |  |   76|     50|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     50|    do {                                                                                 \
  |  |  |  |   69|     50|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 50, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     50|            break;                                                                       \
  |  |  |  |   71|     50|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  177|     50|        return false;
  178|     50|    }
  179|    156|    sig.param = (sphincsplus_parameter_t) param;
  180|    156|    if (!pkt.get(sig.sig, sig_size)) {
  ------------------
  |  Branch (180:9): [True: 149, False: 7]
  ------------------
  181|    149|        RNP_LOG("failed to parse SLH-DSA signature data");
  ------------------
  |  |   76|    149|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    149|    do {                                                                                 \
  |  |  |  |   69|    149|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 149, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    149|            break;                                                                       \
  |  |  |  |   71|    149|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  182|    149|        return false;
  183|    149|    }
  184|      7|    return true;
  185|    156|}

_ZN3pgp11SigMaterialC2E14pgp_hash_alg_t:
   40|   347k|    SigMaterial(pgp_hash_alg_t ahalg) : halg(ahalg){};
_ZN3pgp11SigMaterialD2Ev:
   41|   347k|    virtual ~SigMaterial(){};
_ZN3pgp14RSASigMaterialC2E14pgp_hash_alg_t:
   52|   156k|    RSASigMaterial(pgp_hash_alg_t ahalg) : SigMaterial(ahalg){};
_ZN3pgp14DSASigMaterialC2E14pgp_hash_alg_t:
   61|  21.0k|    DSASigMaterial(pgp_hash_alg_t ahalg) : SigMaterial(ahalg){};
_ZN3pgp13EGSigMaterialC2E14pgp_hash_alg_t:
   70|  1.83k|    EGSigMaterial(pgp_hash_alg_t ahalg) : SigMaterial(ahalg){};
_ZN3pgp13ECSigMaterialC2E14pgp_hash_alg_t:
   79|   148k|    ECSigMaterial(pgp_hash_alg_t ahalg) : SigMaterial(ahalg){};
_ZN3pgp18Ed25519SigMaterialC2E14pgp_hash_alg_t:
   89|  18.0k|    Ed25519SigMaterial(pgp_hash_alg_t ahalg) : SigMaterial(ahalg){};
_ZN3pgp20DilithiumSigMaterialC2E16pgp_pubkey_alg_t14pgp_hash_alg_t:
  103|    510|        : SigMaterial(ahalg), palg(apalg){};
_ZN3pgp17SlhdsaSigMaterialC2E14pgp_hash_alg_t:
  112|    281|    SlhdsaSigMaterial(pgp_hash_alg_t ahalg) : SigMaterial(ahalg){};

_ZN3pgp3pkt6sigsub3RawC2Ehbb:
   43|  62.9k|    : hashed_(hashed), raw_type_(rawtype), critical_(critical), type_(Type::Unknown)
   44|  62.9k|{
   45|  62.9k|}
_ZN3pgp3pkt6sigsub3RawC2ENS1_4TypeEbb:
   48|   700k|    : hashed_(hashed), raw_type_(static_cast<uint8_t>(type)), critical_(critical), type_(type)
   49|   700k|{
   50|   700k|}
_ZN3pgp3pkt6sigsub3RawD2Ev:
   53|  5.60M|{
   54|  5.60M|}
_ZNK3pgp3pkt6sigsub3Raw10check_sizeEm:
   58|  66.3k|{
   59|  66.3k|    return true;
   60|  66.3k|};
_ZN3pgp3pkt6sigsub3Raw10parse_dataEPKhm:
   64|  59.8k|{
   65|  59.8k|    return true;
   66|  59.8k|};
_ZN3pgp3pkt6sigsub3Raw5parseEPKhm:
   70|   760k|{
   71|   760k|    if (!check_size(size)) {
  ------------------
  |  Branch (71:9): [True: 8.60k, False: 751k]
  ------------------
   72|  8.60k|        RNP_LOG("wrong len %zu of subpacket type %" PRIu8, size, raw_type_);
  ------------------
  |  |   76|  8.60k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  8.60k|    do {                                                                                 \
  |  |  |  |   69|  8.60k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 8.60k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  8.60k|            break;                                                                       \
  |  |  |  |   71|  8.60k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|  8.60k|        return false;
   74|  8.60k|    }
   75|   751k|    if (!parse_data(data, size)) {
  ------------------
  |  Branch (75:9): [True: 3.74k, False: 748k]
  ------------------
   76|  3.74k|        return false;
   77|  3.74k|    }
   78|   748k|    data_.assign(data, data + size);
   79|   748k|    return true;
   80|   751k|}
_ZN3pgp3pkt6sigsub3Raw6createEhbb:
  128|   763k|{
  129|   763k|    switch (type) {
  130|   108k|    case (uint8_t) Type::CreationTime:
  ------------------
  |  Branch (130:5): [True: 108k, False: 655k]
  ------------------
  131|   108k|        return RawPtr(new CreationTime(hashed, critical));
  132|  3.26k|    case (uint8_t) Type::ExpirationTime:
  ------------------
  |  Branch (132:5): [True: 3.26k, False: 760k]
  ------------------
  133|  3.26k|        return RawPtr(new ExpirationTime(hashed, critical));
  134|  1.79k|    case (uint8_t) Type::ExportableCert:
  ------------------
  |  Branch (134:5): [True: 1.79k, False: 761k]
  ------------------
  135|  1.79k|        return RawPtr(new ExportableCert(hashed, critical));
  136|    791|    case (uint8_t) Type::Trust:
  ------------------
  |  Branch (136:5): [True: 791, False: 762k]
  ------------------
  137|    791|        return RawPtr(new Trust(hashed, critical));
  138|  1.97k|    case (uint8_t) Type::RegExp:
  ------------------
  |  Branch (138:5): [True: 1.97k, False: 761k]
  ------------------
  139|  1.97k|        return RawPtr(new RegExp(hashed, critical));
  140|  5.34k|    case (uint8_t) Type::Revocable:
  ------------------
  |  Branch (140:5): [True: 5.34k, False: 758k]
  ------------------
  141|  5.34k|        return RawPtr(new Revocable(hashed, critical));
  142|  21.1k|    case (uint8_t) Type::KeyExpirationTime:
  ------------------
  |  Branch (142:5): [True: 21.1k, False: 742k]
  ------------------
  143|  21.1k|        return RawPtr(new KeyExpirationTime(hashed, critical));
  144|  51.6k|    case (uint8_t) Type::PreferredSymmetric:
  ------------------
  |  Branch (144:5): [True: 51.6k, False: 712k]
  ------------------
  145|  51.6k|        return RawPtr(new PreferredSymmetric(hashed, critical));
  146|  5.68k|    case (uint8_t) Type::RevocationKey:
  ------------------
  |  Branch (146:5): [True: 5.68k, False: 757k]
  ------------------
  147|  5.68k|        return RawPtr(new RevocationKey(hashed, critical));
  148|  86.1k|    case (uint8_t) Type::IssuerKeyID:
  ------------------
  |  Branch (148:5): [True: 86.1k, False: 677k]
  ------------------
  149|  86.1k|        return RawPtr(new IssuerKeyID(hashed, critical));
  150|  3.07k|    case (uint8_t) Type::NotationData:
  ------------------
  |  Branch (150:5): [True: 3.07k, False: 760k]
  ------------------
  151|  3.07k|        return RawPtr(new NotationData(hashed, critical));
  152|  48.9k|    case (uint8_t) Type::PreferredHash:
  ------------------
  |  Branch (152:5): [True: 48.9k, False: 714k]
  ------------------
  153|  48.9k|        return RawPtr(new PreferredHash(hashed, critical));
  154|  49.8k|    case (uint8_t) Type::PreferredCompress:
  ------------------
  |  Branch (154:5): [True: 49.8k, False: 713k]
  ------------------
  155|  49.8k|        return RawPtr(new PreferredCompress(hashed, critical));
  156|  36.7k|    case (uint8_t) Type::KeyserverPrefs:
  ------------------
  |  Branch (156:5): [True: 36.7k, False: 726k]
  ------------------
  157|  36.7k|        return RawPtr(new KeyserverPrefs(hashed, critical));
  158|  1.70k|    case (uint8_t) Type::PreferredKeyserver:
  ------------------
  |  Branch (158:5): [True: 1.70k, False: 761k]
  ------------------
  159|  1.70k|        return RawPtr(new PreferredKeyserver(hashed, critical));
  160|  9.67k|    case (uint8_t) Type::PrimaryUserID:
  ------------------
  |  Branch (160:5): [True: 9.67k, False: 753k]
  ------------------
  161|  9.67k|        return RawPtr(new PrimaryUserID(hashed, critical));
  162|  1.98k|    case (uint8_t) Type::PolicyURI:
  ------------------
  |  Branch (162:5): [True: 1.98k, False: 761k]
  ------------------
  163|  1.98k|        return RawPtr(new PolicyURI(hashed, critical));
  164|  79.1k|    case (uint8_t) Type::KeyFlags:
  ------------------
  |  Branch (164:5): [True: 79.1k, False: 684k]
  ------------------
  165|  79.1k|        return RawPtr(new KeyFlags(hashed, critical));
  166|    835|    case (uint8_t) Type::SignersUserID:
  ------------------
  |  Branch (166:5): [True: 835, False: 762k]
  ------------------
  167|    835|        return RawPtr(new SignersUserID(hashed, critical));
  168|  10.0k|    case (uint8_t) Type::RevocationReason:
  ------------------
  |  Branch (168:5): [True: 10.0k, False: 753k]
  ------------------
  169|  10.0k|        return RawPtr(new RevocationReason(hashed, critical));
  170|  40.2k|    case (uint8_t) Type::Features:
  ------------------
  |  Branch (170:5): [True: 40.2k, False: 723k]
  ------------------
  171|  40.2k|        return RawPtr(new Features(hashed, critical));
  172|  10.2k|    case (uint8_t) Type::EmbeddedSignature:
  ------------------
  |  Branch (172:5): [True: 10.2k, False: 753k]
  ------------------
  173|  10.2k|        return RawPtr(new EmbeddedSignature(hashed, critical));
  174|  92.8k|    case (uint8_t) Type::IssuerFingerprint:
  ------------------
  |  Branch (174:5): [True: 92.8k, False: 670k]
  ------------------
  175|  92.8k|        return RawPtr(new IssuerFingerprint(hashed, critical));
  176|  24.0k|    case (uint8_t) Type::PreferredAEAD:
  ------------------
  |  Branch (176:5): [True: 24.0k, False: 739k]
  ------------------
  177|  24.0k|        return RawPtr(new PreferredAEAD(hashed, critical));
  178|      0|#if defined(ENABLE_CRYPTO_REFRESH)
  179|  5.04k|    case (uint8_t) Type::PreferredAEADv6:
  ------------------
  |  Branch (179:5): [True: 5.04k, False: 758k]
  ------------------
  180|  5.04k|        return RawPtr(new PreferredAEADv6(hashed, critical));
  181|      0|#endif
  182|  62.9k|    default:
  ------------------
  |  Branch (182:5): [True: 62.9k, False: 700k]
  ------------------
  183|  62.9k|        report_unknown(type, critical);
  184|  62.9k|        return RawPtr(new Raw(type, hashed, critical));
  185|   763k|    }
  186|   763k|}
_ZN3pgp3pkt6sigsub3Raw6createEPKhmb:
  196|   763k|{
  197|   763k|    if (!size) {
  ------------------
  |  Branch (197:9): [True: 0, False: 763k]
  ------------------
  198|      0|        RNP_LOG("got subpacket with 0 length");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|      0|        return nullptr;
  200|      0|    }
  201|   763k|    bool    critical = data[0] & 0x80;
  202|   763k|    uint8_t type = data[0] & 0x7f;
  203|   763k|    auto    sub = create(type, hashed, critical);
  204|   763k|    if (!sub || ((sub->type() == Type::Unknown) && critical) ||
  ------------------
  |  Branch (204:9): [True: 0, False: 763k]
  |  Branch (204:18): [True: 62.9k, False: 700k]
  |  Branch (204:52): [True: 3.14k, False: 59.8k]
  ------------------
  205|   760k|        !sub->parse(data + 1, size - 1)) {
  ------------------
  |  Branch (205:9): [True: 12.3k, False: 748k]
  ------------------
  206|  15.4k|        return nullptr;
  207|  15.4k|    }
  208|   748k|    return sub;
  209|   763k|}
_ZNK3pgp3pkt6sigsub3Raw5cloneEv:
  213|   341k|{
  214|   341k|    return RawPtr(new Raw(*this));
  215|   341k|}
_ZNK3pgp3pkt6sigsub4Time10check_sizeEm:
  227|   132k|{
  228|   132k|    return size == 4;
  229|   132k|}
_ZN3pgp3pkt6sigsub4Time10parse_dataEPKhm:
  233|   130k|{
  234|   130k|    time_ = read_uint32(data);
  235|   130k|    return true;
  236|   130k|}
_ZNK3pgp3pkt6sigsub12CreationTime5cloneEv:
  241|   734k|{
  242|   734k|    return RawPtr(new CreationTime(*this));
  243|   734k|}
_ZNK3pgp3pkt6sigsub14ExpirationTime5cloneEv:
  248|  10.2k|{
  249|  10.2k|    return RawPtr(new ExpirationTime(*this));
  250|  10.2k|}
_ZNK3pgp3pkt6sigsub17KeyExpirationTime5cloneEv:
  255|   178k|{
  256|   178k|    return RawPtr(new KeyExpirationTime(*this));
  257|   178k|}
_ZNK3pgp3pkt6sigsub4Bool10check_sizeEm:
  269|  16.8k|{
  270|  16.8k|    return size == 1;
  271|  16.8k|}
_ZN3pgp3pkt6sigsub4Bool10parse_dataEPKhm:
  275|  14.5k|{
  276|  14.5k|    value_ = data[0];
  277|  14.5k|    return true;
  278|  14.5k|}
_ZNK3pgp3pkt6sigsub14ExportableCert5cloneEv:
  283|  3.15k|{
  284|  3.15k|    return RawPtr(new ExportableCert(*this));
  285|  3.15k|}
_ZNK3pgp3pkt6sigsub5Trust10check_sizeEm:
  298|    791|{
  299|    791|    return size == 2;
  300|    791|}
_ZN3pgp3pkt6sigsub5Trust10parse_dataEPKhm:
  304|    456|{
  305|    456|    level_ = data[0];
  306|    456|    amount_ = data[1];
  307|    456|    return true;
  308|    456|}
_ZNK3pgp3pkt6sigsub5Trust5cloneEv:
  312|  2.60k|{
  313|  2.60k|    return RawPtr(new Trust(*this));
  314|  2.60k|}
_ZN3pgp3pkt6sigsub6String10parse_dataEPKhm:
  325|  6.50k|{
  326|  6.50k|    value_.assign(data, data + size);
  327|  6.50k|    return true;
  328|  6.50k|}
_ZNK3pgp3pkt6sigsub6RegExp5cloneEv:
  333|  3.03k|{
  334|  3.03k|    return RawPtr(new RegExp(*this));
  335|  3.03k|}
_ZNK3pgp3pkt6sigsub9Revocable5cloneEv:
  340|  27.3k|{
  341|  27.3k|    return RawPtr(new Revocable(*this));
  342|  27.3k|}
_ZNK3pgp3pkt6sigsub9Preferred10check_sizeEm:
  353|   179k|{
  354|       |    /* No reason to have more then 256 bytes */
  355|   179k|    return size < 256;
  356|   179k|}
_ZN3pgp3pkt6sigsub9Preferred10parse_dataEPKhm:
  360|   179k|{
  361|   179k|    algs_.assign(data, data + size);
  362|   179k|    return true;
  363|   179k|}
_ZNK3pgp3pkt6sigsub18PreferredSymmetric5cloneEv:
  368|   309k|{
  369|   309k|    return RawPtr(new PreferredSymmetric(*this));
  370|   309k|}
_ZNK3pgp3pkt6sigsub13PreferredHash5cloneEv:
  375|   294k|{
  376|   294k|    return RawPtr(new PreferredHash(*this));
  377|   294k|}
_ZNK3pgp3pkt6sigsub17PreferredCompress5cloneEv:
  382|   302k|{
  383|   302k|    return RawPtr(new PreferredCompress(*this));
  384|   302k|}
_ZNK3pgp3pkt6sigsub13PreferredAEAD5cloneEv:
  389|   146k|{
  390|   146k|    return RawPtr(new PreferredAEAD(*this));
  391|   146k|}
_ZNK3pgp3pkt6sigsub15PreferredAEADv610check_sizeEm:
  397|  5.04k|{
  398|  5.04k|    if (size % 2) {
  ------------------
  |  Branch (398:9): [True: 303, False: 4.74k]
  ------------------
  399|    303|        RNP_LOG("v6 AEAD Ciphersuite Preferences must contain an even number of bytes");
  ------------------
  |  |   76|    303|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    303|    do {                                                                                 \
  |  |  |  |   69|    303|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 303, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    303|            break;                                                                       \
  |  |  |  |   71|    303|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|    303|        return false;
  401|    303|    }
  402|  4.74k|    return Preferred::check_size(size);
  403|  5.04k|}
_ZNK3pgp3pkt6sigsub15PreferredAEADv65cloneEv:
  407|  23.8k|{
  408|  23.8k|    return RawPtr(new PreferredAEADv6(*this));
  409|  23.8k|}
_ZNK3pgp3pkt6sigsub13RevocationKey10check_sizeEm:
  424|  5.68k|{
  425|  5.68k|    return (size == 2 + PGP_FINGERPRINT_V4_SIZE) || (size == 2 + PGP_FINGERPRINT_V5_SIZE);
  ------------------
  |  |   43|  5.68k|#define PGP_FINGERPRINT_V4_SIZE 20
  ------------------
                  return (size == 2 + PGP_FINGERPRINT_V4_SIZE) || (size == 2 + PGP_FINGERPRINT_V5_SIZE);
  ------------------
  |  |   44|  2.36k|#define PGP_FINGERPRINT_V5_SIZE 32
  ------------------
  |  Branch (425:12): [True: 3.31k, False: 2.36k]
  |  Branch (425:53): [True: 7, False: 2.35k]
  ------------------
  426|  5.68k|}
_ZN3pgp3pkt6sigsub13RevocationKey10parse_dataEPKhm:
  430|  3.32k|{
  431|  3.32k|    rev_class_ = data[0];
  432|  3.32k|    alg_ = static_cast<pgp_pubkey_alg_t>(data[1]);
  433|  3.32k|    fp_ = pgp::Fingerprint(data + 2, size - 2);
  434|  3.32k|    return true;
  435|  3.32k|}
_ZNK3pgp3pkt6sigsub13RevocationKey5cloneEv:
  439|  16.3k|{
  440|  16.3k|    return RawPtr(new RevocationKey(*this));
  441|  16.3k|}
_ZNK3pgp3pkt6sigsub11IssuerKeyID10check_sizeEm:
  452|  86.1k|{
  453|  86.1k|    return size == PGP_KEY_ID_SIZE;
  ------------------
  |  |   39|  86.1k|#define PGP_KEY_ID_SIZE 8
  ------------------
  454|  86.1k|}
_ZN3pgp3pkt6sigsub11IssuerKeyID10parse_dataEPKhm:
  458|  85.8k|{
  459|  85.8k|    memcpy(keyid_.data(), data, keyid_.size());
  460|  85.8k|    return true;
  461|  85.8k|}
_ZNK3pgp3pkt6sigsub11IssuerKeyID5cloneEv:
  465|   609k|{
  466|   609k|    return RawPtr(new IssuerKeyID(*this));
  467|   609k|}
_ZNK3pgp3pkt6sigsub12NotationData10check_sizeEm:
  487|  3.07k|{
  488|  3.07k|    return size >= 8;
  489|  3.07k|}
_ZN3pgp3pkt6sigsub12NotationData10parse_dataEPKhm:
  493|  2.99k|{
  494|  2.99k|    size_t nlen = read_uint16(data + 4);
  495|  2.99k|    size_t vlen = read_uint16(data + 6);
  496|  2.99k|    if (size != nlen + vlen + 8) {
  ------------------
  |  Branch (496:9): [True: 2.41k, False: 576]
  ------------------
  497|  2.41k|        return false;
  498|  2.41k|    }
  499|    576|    memcpy(flags_.data(), data, 4);
  500|    576|    name_.assign(data + 8, data + 8 + nlen);
  501|    576|    value_.assign(data + 8 + nlen, data + 8 + nlen + vlen);
  502|    576|    return true;
  503|  2.99k|}
_ZNK3pgp3pkt6sigsub12NotationData5cloneEv:
  537|  3.52k|{
  538|  3.52k|    return RawPtr(new NotationData(*this));
  539|  3.52k|}
_ZNK3pgp3pkt6sigsub5Flags10check_sizeEm:
  551|   156k|{
  552|   156k|    return size >= 1;
  553|   156k|}
_ZN3pgp3pkt6sigsub5Flags10parse_dataEPKhm:
  557|   155k|{
  558|   155k|    flags_ = data[0];
  559|   155k|    return true;
  560|   155k|}
_ZNK3pgp3pkt6sigsub14KeyserverPrefs5cloneEv:
  565|   229k|{
  566|   229k|    return RawPtr(new KeyserverPrefs(*this));
  567|   229k|}
_ZNK3pgp3pkt6sigsub18PreferredKeyserver5cloneEv:
  572|  9.97k|{
  573|  9.97k|    return RawPtr(new PreferredKeyserver(*this));
  574|  9.97k|}
_ZNK3pgp3pkt6sigsub13PrimaryUserID5cloneEv:
  579|  59.9k|{
  580|  59.9k|    return RawPtr(new PrimaryUserID(*this));
  581|  59.9k|}
_ZNK3pgp3pkt6sigsub9PolicyURI5cloneEv:
  586|  13.8k|{
  587|  13.8k|    return RawPtr(new PolicyURI(*this));
  588|  13.8k|}
_ZNK3pgp3pkt6sigsub8KeyFlags5cloneEv:
  593|   524k|{
  594|   524k|    return RawPtr(new KeyFlags(*this));
  595|   524k|}
_ZNK3pgp3pkt6sigsub13SignersUserID5cloneEv:
  600|  3.69k|{
  601|  3.69k|    return RawPtr(new SignersUserID(*this));
  602|  3.69k|}
_ZNK3pgp3pkt6sigsub16RevocationReason10check_sizeEm:
  615|  10.0k|{
  616|  10.0k|    return size >= 1;
  617|  10.0k|}
_ZN3pgp3pkt6sigsub16RevocationReason10parse_dataEPKhm:
  621|  10.0k|{
  622|  10.0k|    code_ = static_cast<pgp_revocation_type_t>(data[0]);
  623|  10.0k|    reason_.assign(data + 1, data + size);
  624|  10.0k|    return true;
  625|  10.0k|}
_ZNK3pgp3pkt6sigsub16RevocationReason5cloneEv:
  629|  70.9k|{
  630|  70.9k|    return RawPtr(new RevocationReason(*this));
  631|  70.9k|}
_ZNK3pgp3pkt6sigsub8Features5cloneEv:
  636|   241k|{
  637|   241k|    return RawPtr(new Features(*this));
  638|   241k|}
_ZN3pgp3pkt6sigsub17EmbeddedSignatureC2ERKS2_:
  641|  72.6k|EmbeddedSignature::EmbeddedSignature(const EmbeddedSignature &src) : Raw(src)
  642|  72.6k|{
  643|  72.6k|    signature_ = std::unique_ptr<Signature>(new Signature(*src.signature_));
  644|  72.6k|}
_ZN3pgp3pkt6sigsub17EmbeddedSignatureC2Ebb:
  647|  10.2k|    : Raw(Type::EmbeddedSignature, hashed, critical)
  648|  10.2k|{
  649|  10.2k|}
_ZNK3pgp3pkt6sigsub17EmbeddedSignature10check_sizeEm:
  666|  10.2k|{
  667|  10.2k|    return size > 6;
  668|  10.2k|}
_ZN3pgp3pkt6sigsub17EmbeddedSignature10parse_dataEPKhm:
  672|  10.1k|{
  673|  10.1k|    pgp_packet_body_t pkt(data, size);
  674|  10.1k|    Signature         sig;
  675|  10.1k|    if (sig.parse(pkt)) {
  ------------------
  |  Branch (675:9): [True: 1.32k, False: 8.86k]
  ------------------
  676|  1.32k|        return false;
  677|  1.32k|    }
  678|  8.86k|    signature_ = std::unique_ptr<Signature>(new Signature(std::move(sig)));
  679|  8.86k|    return true;
  680|  10.1k|}
_ZN3pgp3pkt6sigsub17EmbeddedSignature9signatureEv:
  690|  7.87k|{
  691|  7.87k|    return signature_.get();
  692|  7.87k|}
_ZNK3pgp3pkt6sigsub17EmbeddedSignature5cloneEv:
  703|  72.6k|{
  704|  72.6k|    return RawPtr(new EmbeddedSignature(*this));
  705|  72.6k|}
_ZNK3pgp3pkt6sigsub17IssuerFingerprint10check_sizeEm:
  718|  92.8k|{
  719|  92.8k|    return (size >= 21) && (size <= PGP_MAX_FINGERPRINT_SIZE + 1);
  ------------------
  |  |   45|  92.7k|#define PGP_MAX_FINGERPRINT_SIZE 32
  ------------------
  |  Branch (719:12): [True: 92.7k, False: 60]
  |  Branch (719:28): [True: 92.7k, False: 30]
  ------------------
  720|  92.8k|}
_ZN3pgp3pkt6sigsub17IssuerFingerprint10parse_dataEPKhm:
  724|  92.7k|{
  725|  92.7k|    version_ = data[0];
  726|  92.7k|    fp_ = pgp::Fingerprint(data + 1, size - 1);
  727|  92.7k|    return true;
  728|  92.7k|}
_ZNK3pgp3pkt6sigsub17IssuerFingerprint5cloneEv:
  732|   603k|{
  733|   603k|    return RawPtr(new IssuerFingerprint(*this));
  734|   603k|}
_ZN3pgp3pkt6sigsub4ListC2ERKS2_:
  737|  1.55M|{
  738|  1.55M|    items.reserve(src.items.size());
  739|  4.83M|    for (auto &item : src.items) {
  ------------------
  |  Branch (739:21): [True: 4.83M, False: 1.55M]
  ------------------
  740|  4.83M|        items.push_back(item->clone());
  741|  4.83M|    }
  742|  1.55M|}
sig_subpacket.cpp:_ZN3pgp3pkt6sigsubL14report_unknownEhb:
   93|  62.9k|{
   94|  62.9k|    switch (type) {
   95|    569|    case (uint8_t) Type::Private_100:
  ------------------
  |  Branch (95:5): [True: 569, False: 62.4k]
  ------------------
   96|    887|    case (uint8_t) Type::Private_101:
  ------------------
  |  Branch (96:5): [True: 318, False: 62.6k]
  ------------------
   97|  1.71k|    case (uint8_t) Type::Private_102:
  ------------------
  |  Branch (97:5): [True: 829, False: 62.1k]
  ------------------
   98|  2.98k|    case (uint8_t) Type::Private_103:
  ------------------
  |  Branch (98:5): [True: 1.26k, False: 61.7k]
  ------------------
   99|  4.26k|    case (uint8_t) Type::Private_104:
  ------------------
  |  Branch (99:5): [True: 1.27k, False: 61.7k]
  ------------------
  100|  4.88k|    case (uint8_t) Type::Private_105:
  ------------------
  |  Branch (100:5): [True: 623, False: 62.3k]
  ------------------
  101|  5.59k|    case (uint8_t) Type::Private_106:
  ------------------
  |  Branch (101:5): [True: 707, False: 62.2k]
  ------------------
  102|  6.31k|    case (uint8_t) Type::Private_107:
  ------------------
  |  Branch (102:5): [True: 720, False: 62.2k]
  ------------------
  103|  6.73k|    case (uint8_t) Type::Private_108:
  ------------------
  |  Branch (103:5): [True: 425, False: 62.5k]
  ------------------
  104|  7.29k|    case (uint8_t) Type::Private_109:
  ------------------
  |  Branch (104:5): [True: 562, False: 62.4k]
  ------------------
  105|  8.01k|    case (uint8_t) Type::Private_110:
  ------------------
  |  Branch (105:5): [True: 718, False: 62.2k]
  ------------------
  106|  8.01k|        if (critical) {
  ------------------
  |  Branch (106:13): [True: 706, False: 7.31k]
  ------------------
  107|    706|            RNP_LOG("unknown critical private subpacket %" PRIu8, type);
  ------------------
  |  |   76|    706|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    706|    do {                                                                                 \
  |  |  |  |   69|    706|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 706, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    706|            break;                                                                       \
  |  |  |  |   71|    706|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  108|    706|        }
  109|  8.01k|        return;
  110|  10.0k|    case (uint8_t) Type::Reserved_1:
  ------------------
  |  Branch (110:5): [True: 10.0k, False: 52.9k]
  ------------------
  111|  11.3k|    case (uint8_t) Type::Reserved_8:
  ------------------
  |  Branch (111:5): [True: 1.30k, False: 61.6k]
  ------------------
  112|  12.2k|    case (uint8_t) Type::Placeholder:
  ------------------
  |  Branch (112:5): [True: 835, False: 62.1k]
  ------------------
  113|  13.2k|    case (uint8_t) Type::Reserved_13:
  ------------------
  |  Branch (113:5): [True: 1.04k, False: 61.9k]
  ------------------
  114|  13.9k|    case (uint8_t) Type::Reserved_14:
  ------------------
  |  Branch (114:5): [True: 709, False: 62.2k]
  ------------------
  115|  14.5k|    case (uint8_t) Type::Reserved_15:
  ------------------
  |  Branch (115:5): [True: 611, False: 62.3k]
  ------------------
  116|  15.5k|    case (uint8_t) Type::Reserved_17:
  ------------------
  |  Branch (116:5): [True: 984, False: 62.0k]
  ------------------
  117|  16.5k|    case (uint8_t) Type::Reserved_18:
  ------------------
  |  Branch (117:5): [True: 940, False: 62.0k]
  ------------------
  118|  21.0k|    case (uint8_t) Type::Reserved_19:
  ------------------
  |  Branch (118:5): [True: 4.53k, False: 58.4k]
  ------------------
  119|       |        /* do not report reserved/placeholder subpacket */
  120|  21.0k|        return;
  121|  33.9k|    default:
  ------------------
  |  Branch (121:5): [True: 33.9k, False: 29.0k]
  ------------------
  122|  33.9k|        RNP_LOG("unknown subpacket : %" PRIu8, type);
  ------------------
  |  |   76|  33.9k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  33.9k|    do {                                                                                 \
  |  |  |  |   69|  33.9k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 33.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  33.9k|            break;                                                                       \
  |  |  |  |   71|  33.9k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  123|  62.9k|    }
  124|  62.9k|}

_ZNK3pgp3pkt6sigsub3Raw8raw_typeEv:
  125|  10.0M|    {
  126|  10.0M|        return raw_type_;
  127|  10.0M|    }
_ZNK3pgp3pkt6sigsub3Raw4dataEv:
  131|   296k|    {
  132|   296k|        return data_;
  133|   296k|    }
_ZNK3pgp3pkt6sigsub3Raw4typeEv:
  137|   771k|    {
  138|   771k|        return type_;
  139|   771k|    }
_ZNK3pgp3pkt6sigsub3Raw8criticalEv:
  143|   584k|    {
  144|   584k|        return critical_;
  145|   584k|    }
_ZNK3pgp3pkt6sigsub3Raw6hashedEv:
  155|  2.68M|    {
  156|  2.68M|        return hashed_;
  157|  2.68M|    }
_ZN3pgp3pkt6sigsub4TimeC2ENS1_4TypeEbb:
  183|   132k|    Time(Type type, bool hashed, bool critical) : Raw(type, hashed, critical), time_(0)
  184|   132k|    {
  185|   132k|    }
_ZNK3pgp3pkt6sigsub4Time4timeEv:
  189|   325k|    {
  190|   325k|        return time_;
  191|   325k|    }
_ZN3pgp3pkt6sigsub12CreationTimeC2Ebb:
  207|   108k|        : Time(Type::CreationTime, hashed, critical)
  208|   108k|    {
  209|   108k|    }
_ZN3pgp3pkt6sigsub14ExpirationTimeC2Ebb:
  218|  3.26k|        : Time(Type::ExpirationTime, hashed, critical)
  219|  3.26k|    {
  220|  3.26k|    }
_ZN3pgp3pkt6sigsub17KeyExpirationTimeC2Ebb:
  229|  21.1k|        : Time(Type::KeyExpirationTime, hashed, critical)
  230|  21.1k|    {
  231|  21.1k|    }
_ZN3pgp3pkt6sigsub4BoolC2ENS1_4TypeEbb:
  246|  16.8k|    Bool(Type type, bool hashed, bool critical) : Raw(type, hashed, critical), value_(false)
  247|  16.8k|    {
  248|  16.8k|    }
_ZN3pgp3pkt6sigsub14ExportableCertC2Ebb:
  257|  1.79k|        : Bool(Type::ExportableCert, hashed, critical)
  258|  1.79k|    {
  259|  1.79k|        value_ = true;
  260|  1.79k|    }
_ZN3pgp3pkt6sigsub5TrustC2Ebb:
  291|    791|        : Raw(Type::Trust, hashed, critical), level_(0), amount_(0)
  292|    791|    {
  293|    791|    }
_ZN3pgp3pkt6sigsub6StringC2ENS1_4TypeEbb:
  334|  6.50k|    String(Type type, bool hashed, bool critical) : Raw(type, hashed, critical)
  335|  6.50k|    {
  336|  6.50k|    }
_ZN3pgp3pkt6sigsub6RegExpC2Ebb:
  344|  1.97k|    RegExp(bool hashed = true, bool critical = false) : String(Type::RegExp, hashed, critical)
  345|  1.97k|    {
  346|  1.97k|    }
_ZN3pgp3pkt6sigsub9RevocableC2Ebb:
  361|  5.34k|        : Bool(Type::Revocable, hashed, critical)
  362|  5.34k|    {
  363|  5.34k|        value_ = true;
  364|  5.34k|    }
_ZN3pgp3pkt6sigsub9PreferredC2ENS1_4TypeEbb:
  393|   179k|    Preferred(Type type, bool hashed, bool critical) : Raw(type, hashed, critical){};
_ZN3pgp3pkt6sigsub18PreferredSymmetricC2Ebb:
  415|  51.6k|        : Preferred(Type::PreferredSymmetric, hashed, critical){};
_ZN3pgp3pkt6sigsub13PreferredHashC2Ebb:
  424|  48.9k|        : Preferred(Type::PreferredHash, hashed, critical){};
_ZN3pgp3pkt6sigsub17PreferredCompressC2Ebb:
  433|  49.8k|        : Preferred(Type::PreferredCompress, hashed, critical){};
_ZN3pgp3pkt6sigsub13PreferredAEADC2Ebb:
  442|  24.0k|        : Preferred(Type::PreferredAEAD, hashed, critical){};
_ZN3pgp3pkt6sigsub15PreferredAEADv6C2Ebb:
  455|  5.04k|        : Preferred(Type::PreferredAEADv6, hashed, critical){};
_ZN3pgp3pkt6sigsub13RevocationKeyC2Ebb:
  475|  5.68k|        : Raw(Type::RevocationKey, hashed, critical), rev_class_(0),
  476|  5.68k|          alg_(PGP_PKA_NOTHING), fp_{} {};
_ZNK3pgp3pkt6sigsub13RevocationKey2fpEv:
  506|  6.54k|    {
  507|  6.54k|        return fp_;
  508|  6.54k|    }
_ZN3pgp3pkt6sigsub11IssuerKeyIDC2Ebb:
  532|  86.1k|        : Raw(Type::IssuerKeyID, hashed, critical)
  533|  86.1k|    {
  534|  86.1k|    }
_ZNK3pgp3pkt6sigsub11IssuerKeyID5keyidEv:
  538|  67.2k|    {
  539|  67.2k|        return keyid_;
  540|  67.2k|    }
_ZN3pgp3pkt6sigsub12NotationDataC2Ebb:
  566|  3.07k|        : Raw(Type::NotationData, hashed, critical)
  567|  3.07k|    {
  568|  3.07k|    }
_ZN3pgp3pkt6sigsub5FlagsC2ENS1_4TypeEbb:
  608|   156k|        : Raw(type, hashed, critical), flags_(0)
  609|   156k|    {
  610|   156k|    }
_ZN3pgp3pkt6sigsub14KeyserverPrefsC2Ebb:
  619|  36.7k|        : Flags(Type::KeyserverPrefs, hashed, critical)
  620|  36.7k|    {
  621|  36.7k|    }
_ZN3pgp3pkt6sigsub18PreferredKeyserverC2Ebb:
  656|  1.70k|        : String(Type::PreferredKeyserver, hashed, critical)
  657|  1.70k|    {
  658|  1.70k|    }
_ZN3pgp3pkt6sigsub13PrimaryUserIDC2Ebb:
  680|  9.67k|        : Bool(Type::PrimaryUserID, hashed, critical)
  681|  9.67k|    {
  682|  9.67k|    }
_ZNK3pgp3pkt6sigsub13PrimaryUserID7primaryEv:
  686|  20.0k|    {
  687|  20.0k|        return value_;
  688|  20.0k|    }
_ZN3pgp3pkt6sigsub9PolicyURIC2Ebb:
  704|  1.98k|        : String(Type::PolicyURI, hashed, critical)
  705|  1.98k|    {
  706|  1.98k|    }
_ZN3pgp3pkt6sigsub8KeyFlagsC2Ebb:
  721|  79.1k|        : Flags(Type::KeyFlags, hashed, critical)
  722|  79.1k|    {
  723|  79.1k|    }
_ZNK3pgp3pkt6sigsub8KeyFlags5flagsEv:
  727|  39.9k|    {
  728|  39.9k|        return flags_;
  729|  39.9k|    }
_ZN3pgp3pkt6sigsub13SignersUserIDC2Ebb:
  745|    835|        : String(Type::SignersUserID, hashed, critical)
  746|    835|    {
  747|    835|    }
_ZN3pgp3pkt6sigsub16RevocationReasonC2Ebb:
  778|  10.0k|        : Raw(Type::RevocationReason, hashed, critical), code_(PGP_REVOCATION_NO_REASON)
  779|  10.0k|    {
  780|  10.0k|    }
_ZNK3pgp3pkt6sigsub16RevocationReason4codeEv:
  784|  8.08k|    {
  785|  8.08k|        return code_;
  786|  8.08k|    }
_ZNK3pgp3pkt6sigsub16RevocationReason6reasonEv:
  797|  8.08k|    {
  798|  8.08k|        return reason_;
  799|  8.08k|    }
_ZN3pgp3pkt6sigsub8FeaturesC2Ebb:
  815|  40.2k|        : Flags(Type::Features, hashed, critical)
  816|  40.2k|    {
  817|  40.2k|    }
_ZN3pgp3pkt6sigsub17IssuerFingerprintC2Ebb:
  871|  92.8k|        : Raw(Type::IssuerFingerprint, hashed, critical), version_(0), fp_{}
  872|  92.8k|    {
  873|  92.8k|    }
_ZNK3pgp3pkt6sigsub17IssuerFingerprint2fpEv:
  890|  1.53M|    {
  891|  1.53M|        return fp_;
  892|  1.53M|    }
_ZN3pgp3pkt6sigsub4ListC2Ev:
  909|   340k|    {
  910|   340k|    }
_ZN3pgp3pkt6sigsub4List5beginEv:
  916|  97.0k|    {
  917|  97.0k|        return items.begin();
  918|  97.0k|    }
_ZN3pgp3pkt6sigsub4List3endEv:
  922|  97.0k|    {
  923|  97.0k|        return items.end();
  924|  97.0k|    }
_ZNK3pgp3pkt6sigsub4List5beginEv:
  928|   173k|    {
  929|   173k|        return items.begin();
  930|   173k|    }
_ZNK3pgp3pkt6sigsub4List3endEv:
  934|   173k|    {
  935|   173k|        return items.end();
  936|   173k|    }
_ZNK3pgp3pkt6sigsub4List4sizeEv:
  940|  12.9M|    {
  941|  12.9M|        return items.size();
  942|  12.9M|    }
_ZN3pgp3pkt6sigsub4ListixEm:
  946|  21.8k|    {
  947|  21.8k|        return items[idx];
  948|  21.8k|    }
_ZNK3pgp3pkt6sigsub4ListixEm:
  952|  13.9M|    {
  953|  13.9M|        return items[idx];
  954|  13.9M|    }

_ZN3rnp9SignatureC2ERKN3pgp3pkt9SignatureE:
   32|   205k|    : sig(sigpkt), sigid(sig.get_id()), raw(sigpkt)
   33|   205k|{
   34|   205k|}
_ZNK3rnp9Signature7is_certEv:
   38|   383k|{
   39|   383k|    switch (sig.type()) {
   40|    274|    case PGP_CERT_CASUAL:
  ------------------
  |  Branch (40:5): [True: 274, False: 383k]
  ------------------
   41|  10.5k|    case PGP_CERT_GENERIC:
  ------------------
  |  Branch (41:5): [True: 10.3k, False: 373k]
  ------------------
   42|  10.8k|    case PGP_CERT_PERSONA:
  ------------------
  |  Branch (42:5): [True: 268, False: 383k]
  ------------------
   43|   214k|    case PGP_CERT_POSITIVE:
  ------------------
  |  Branch (43:5): [True: 203k, False: 179k]
  ------------------
   44|   214k|        return true;
   45|   169k|    default:
  ------------------
  |  Branch (45:5): [True: 169k, False: 214k]
  ------------------
   46|   169k|        return false;
   47|   383k|    }
   48|   383k|}
_ZNK3rnp9Signature13is_revocationEv:
   52|   104k|{
   53|   104k|    switch (sig.type()) {
   54|  24.0k|    case PGP_SIG_REV_KEY:
  ------------------
  |  Branch (54:5): [True: 24.0k, False: 80.5k]
  ------------------
   55|  25.4k|    case PGP_SIG_REV_SUBKEY:
  ------------------
  |  Branch (55:5): [True: 1.45k, False: 103k]
  ------------------
   56|  42.0k|    case PGP_SIG_REV_CERT:
  ------------------
  |  Branch (56:5): [True: 16.5k, False: 87.9k]
  ------------------
   57|  42.0k|        return true;
   58|  62.4k|    default:
  ------------------
  |  Branch (58:5): [True: 62.4k, False: 42.0k]
  ------------------
   59|  62.4k|        return false;
   60|   104k|    }
   61|   104k|}
_ZNK3rnp9Signature7expiredEm:
   65|  31.0k|{
   66|       |    /* sig expiration: absence of subpkt or 0 means it never expires */
   67|  31.0k|    uint64_t expiration = sig.expiration();
   68|  31.0k|    if (!expiration) {
  ------------------
  |  Branch (68:9): [True: 31.0k, False: 0]
  ------------------
   69|  31.0k|        return false;
   70|  31.0k|    }
   71|      0|    return expiration + sig.creation() < at;
   72|  31.0k|}
_ZN3rnp10RevocationC2ERNS_9SignatureE:
   83|  8.88k|Revocation::Revocation(Signature &sig) : uid(sig.uid), sigid(sig.sigid)
   84|  8.88k|{
   85|  8.88k|    if (!sig.sig.has_subpkt(PGP_SIG_SUBPKT_REVOCATION_REASON)) {
  ------------------
  |  Branch (85:9): [True: 796, False: 8.08k]
  ------------------
   86|    796|        RNP_LOG("Warning: no revocation reason in the revocation");
  ------------------
  |  |   76|    796|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    796|    do {                                                                                 \
  |  |  |  |   69|    796|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 796, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    796|            break;                                                                       \
  |  |  |  |   71|    796|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   87|    796|        code = PGP_REVOCATION_NO_REASON;
   88|  8.08k|    } else {
   89|  8.08k|        code = sig.sig.revocation_code();
   90|  8.08k|        reason = sig.sig.revocation_reason();
   91|  8.08k|    }
   92|  8.88k|    if (reason.empty()) {
  ------------------
  |  Branch (92:9): [True: 1.30k, False: 7.57k]
  ------------------
   93|  1.30k|        reason = id_str_pair::lookup(revocation_code_map, code);
   94|  1.30k|    }
   95|  8.88k|}

_ZN3rnp11SigValidityC2Ev:
   41|   408k|    SigValidity() : validated_(false){};
_ZNK3rnp11SigValidity6errorsEv:
   45|  97.3k|    {
   46|  97.3k|        return errors_;
   47|  97.3k|    }
_ZN3rnp11SigValidity9add_errorEi:
   51|   398k|    {
   52|   398k|        errors_.push_back(err);
   53|   398k|    }
_ZNK3rnp11SigValidity5validEv:
   58|  14.3M|    {
   59|  14.3M|        return validated_ && errors_.empty();
  ------------------
  |  Branch (59:16): [True: 8.60M, False: 5.72M]
  |  Branch (59:30): [True: 488k, False: 8.11M]
  ------------------
   60|  14.3M|    }
_ZNK3rnp11SigValidity9validatedEv:
   64|  3.66M|    {
   65|  3.66M|        return validated_;
   66|  3.66M|    }
_ZN3rnp11SigValidity14mark_validatedEj:
   70|   201k|    {
   71|   201k|        if (err) {
  ------------------
  |  Branch (71:13): [True: 0, False: 201k]
  ------------------
   72|      0|            errors_.push_back(err);
   73|      0|        }
   74|   201k|        validated_ = true;
   75|   201k|    }
_ZN3rnp11SigValidity5resetEb:
   79|   104k|    {
   80|   104k|        errors_.clear();
   81|   104k|        validated_ = mark_valid;
   82|   104k|    }
_ZN3rnp10RevocationC2Ev:
  145|  45.6M|    Revocation() : uid(0), code(PGP_REVOCATION_NO_REASON), sigid(){};

_ZN3rnp13rnp_exceptionC2Ej:
  101|  9.14k|    rnp_exception(rnp_result_t code = RNP_ERROR_GENERIC) : code_(code){};
_ZNKSt3__14hashINS_5arrayIhLm20EEEEclERKS2_:
   85|  38.0M|    {
   86|       |        /* since signature id value is hash itself, we may use its low bytes */
   87|  38.0M|        size_t res = 0;
   88|  38.0M|        static_assert(std::tuple_size<pgp::SigID>::value >= sizeof(res),
   89|  38.0M|                      "pgp::SigID size mismatch");
   90|  38.0M|        std::memcpy(&res, sigid.data(), sizeof(res));
   91|  38.0M|        return res;
   92|  38.0M|    }
_ZNK3rnp13rnp_exception4codeEv:
  109|  3.61k|    {
  110|  3.61k|        return code_;
  111|  3.61k|    };

_ZN3rnp6UserIDC2ERK16pgp_userid_pkt_t:
   33|  4.67M|UserID::UserID(const pgp_userid_pkt_t &uidpkt) : UserID()
   34|  4.67M|{
   35|       |    /* copy packet data */
   36|  4.67M|    pkt = uidpkt;
   37|  4.67M|    rawpkt = RawPacket(uidpkt);
   38|       |    /* populate uid string */
   39|  4.67M|    if (uidpkt.tag == PGP_PKT_USER_ID) {
  ------------------
  |  Branch (39:9): [True: 4.64M, False: 34.2k]
  ------------------
   40|  4.64M|        str.assign(uidpkt.uid.data(), uidpkt.uid.data() + uidpkt.uid.size());
   41|  4.64M|    } else {
   42|  34.2k|        str = "(photo)";
   43|  34.2k|    }
   44|  4.67M|}
_ZNK3rnp6UserID9sig_countEv:
   48|  20.9M|{
   49|  20.9M|    return sigs_.size();
   50|  20.9M|}
_ZNK3rnp6UserID7get_sigEm:
   54|   114k|{
   55|   114k|    return sigs_.at(idx);
   56|   114k|}
_ZN3rnp6UserID7add_sigERKNSt3__15arrayIhLm20EEEb:
   66|   120k|{
   67|   120k|    size_t idx = begin ? 0 : sigs_.size();
  ------------------
  |  Branch (67:18): [True: 0, False: 120k]
  ------------------
   68|   120k|    sigs_.insert(sigs_.begin() + idx, sig);
   69|   120k|}

_ZN3rnp6UserIDC2Ev:
   49|  4.67M|    UserID() : valid(false), revoked(false){};

_ZN11id_str_pair6lookupEPKS_iPKc:
   32|   322k|{
   33|  1.23M|    while (pair && pair->str) {
  ------------------
  |  Branch (33:12): [True: 1.23M, False: 0]
  |  Branch (33:20): [True: 1.23M, False: 1.80k]
  ------------------
   34|  1.23M|        if (pair->id == id) {
  ------------------
  |  Branch (34:13): [True: 320k, False: 914k]
  ------------------
   35|   320k|            return pair->str;
   36|   320k|        }
   37|   914k|        pair++;
   38|   914k|    }
   39|  1.80k|    return notfound;
   40|   322k|}

_Z11read_uint16PKh:
   61|  1.45M|{
   62|  1.45M|    return ((uint16_t) buf[0] << 8) | buf[1];
   63|  1.45M|}
_Z11read_uint32PKh:
   68|   543k|{
   69|   543k|    return ((uint32_t) buf[0] << 24) | ((uint32_t) buf[1] << 16) | ((uint32_t) buf[2] << 8) |
   70|   543k|           (uint32_t) buf[3];
   71|   543k|}
_Z12write_uint16Pht:
   76|   428k|{
   77|   428k|    buf[0] = val >> 8;
   78|   428k|    buf[1] = val & 0xff;
   79|   428k|}
_Z12write_uint32Phj:
   84|   169k|{
   85|   169k|    buf[0] = (uint8_t)(val >> 24) & 0xff;
   86|   169k|    buf[1] = (uint8_t)(val >> 16) & 0xff;
   87|   169k|    buf[2] = (uint8_t)(val >> 8) & 0xff;
   88|   169k|    buf[3] = (uint8_t)(val >> 0) & 0xff;
   89|   169k|}
_Z12write_uint64Phm:
   93|     33|{
   94|     33|    buf[0] = (uint8_t)(val >> 56) & 0xff;
   95|     33|    buf[1] = (uint8_t)(val >> 48) & 0xff;
   96|     33|    buf[2] = (uint8_t)(val >> 40) & 0xff;
   97|     33|    buf[3] = (uint8_t)(val >> 32) & 0xff;
   98|     33|    buf[4] = (uint8_t)(val >> 24) & 0xff;
   99|     33|    buf[5] = (uint8_t)(val >> 16) & 0xff;
  100|     33|    buf[6] = (uint8_t)(val >> 8) & 0xff;
  101|     33|    buf[7] = (uint8_t)(val >> 0) & 0xff;
  102|     33|}

_ZN3rnp8KeyStore13add_ts_subkeyERK25pgp_transferable_subkey_tPNS_3KeyE:
   43|  74.9k|{
   44|  74.9k|    try {
   45|       |        /* create subkey */
   46|  74.9k|        Key skey(tskey, pkey);
   47|       |        /* add it to the storage */
   48|  74.9k|        return add_key(skey);
   49|  74.9k|    } catch (const std::exception &e) {
   50|       |        /* LCOV_EXCL_START */
   51|  1.24k|        RNP_LOG("failed to create subkey: %s", e.what());
  ------------------
  |  |   76|  1.24k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.24k|    do {                                                                                 \
  |  |  |  |   69|  1.24k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.24k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.24k|            break;                                                                       \
  |  |  |  |   71|  1.24k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   52|  1.24k|        RNP_LOG_KEY("primary key is %s", pkey);
  ------------------
  |  |   79|  1.24k|    do {                                                                                \
  |  |   80|  1.24k|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 248, False: 1.00k]
  |  |  ------------------
  |  |   81|    248|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|    248|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|    248|    do {                                                                                 \
  |  |  |  |  |  |   69|    248|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 248, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|    248|            break;                                                                       \
  |  |  |  |  |  |   71|    248|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|    248|            break;                                                                      \
  |  |   83|    248|        }                                                                               \
  |  |   84|  1.24k|        auto keyid = (key)->keyid();                                                    \
  |  |   85|  1.00k|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|  1.00k|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|  1.00k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  1.00k|    do {                                                                                 \
  |  |  |  |  |  |   69|  1.00k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 1.00k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  1.00k|            break;                                                                       \
  |  |  |  |  |  |   71|  1.00k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  1.00k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 1.00k]
  |  |  ------------------
  ------------------
   53|  1.24k|        return false;
   54|       |        /* LCOV_EXCL_END */
   55|  1.24k|    }
   56|  74.9k|}
_ZN3rnp8KeyStore10add_ts_keyER22pgp_transferable_key_t:
   60|   108k|{
   61|   108k|    Key *addkey = nullptr;
   62|       |
   63|       |    /* create key from transferable key */
   64|   108k|    try {
   65|   108k|        Key key(tkey);
   66|       |        /* temporary disable key validation */
   67|   108k|        disable_validation = true;
   68|       |        /* add key to the storage before subkeys */
   69|   108k|        addkey = add_key(key);
   70|   108k|    } catch (const std::exception &e) {
   71|  1.27k|        disable_validation = false;
   72|  1.27k|        RNP_LOG("failed to add key: %s", e.what());
  ------------------
  |  |   76|  1.27k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.27k|    do {                                                                                 \
  |  |  |  |   69|  1.27k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.27k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.27k|            break;                                                                       \
  |  |  |  |   71|  1.27k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|  1.27k|        return false;
   74|  1.27k|    }
   75|       |
   76|   106k|    if (!addkey) {
  ------------------
  |  Branch (76:9): [True: 0, False: 106k]
  ------------------
   77|      0|        disable_validation = false;
   78|      0|        RNP_LOG("Failed to add key to key store.");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   79|      0|        return false;
   80|      0|    }
   81|       |
   82|       |    /* add subkeys */
   83|   106k|    for (auto &subkey : tkey.subkeys) {
  ------------------
  |  Branch (83:23): [True: 68.6k, False: 105k]
  ------------------
   84|  68.6k|        if (!add_ts_subkey(subkey, addkey)) {
  ------------------
  |  Branch (84:13): [True: 1.00k, False: 67.6k]
  ------------------
   85|  1.00k|            RNP_LOG("Failed to add subkey to key store.");
  ------------------
  |  |   76|  1.00k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.00k|    do {                                                                                 \
  |  |  |  |   69|  1.00k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.00k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.00k|            break;                                                                       \
  |  |  |  |   71|  1.00k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   86|  1.00k|            disable_validation = false;
   87|       |            /* during key addition all fields are copied so will be cleaned below */
   88|  1.00k|            remove_key(*addkey, false);
   89|  1.00k|            return false;
   90|  1.00k|        }
   91|  68.6k|    }
   92|       |
   93|       |    /* now validate/refresh the whole key with subkeys */
   94|   105k|    disable_validation = false;
   95|   105k|    addkey->revalidate(*this);
   96|   105k|    return true;
   97|   106k|}
_ZN3rnp8KeyStore12load_pgp_keyER12pgp_source_tb:
  101|   126k|{
  102|   126k|    pgp_transferable_key_t key;
  103|   126k|    rnp_result_t           ret = process_pgp_key_auto(src, key, true, skiperrors);
  104|       |
  105|   126k|    if (ret && (!skiperrors || (ret != RNP_ERROR_BAD_FORMAT))) {
  ------------------
  |  Branch (105:9): [True: 46.8k, False: 80.1k]
  |  Branch (105:17): [True: 7.60k, False: 39.2k]
  |  Branch (105:32): [True: 3.68k, False: 35.5k]
  ------------------
  106|  11.2k|        return ret;
  107|  11.2k|    }
  108|       |
  109|       |    /* check whether we have primary key */
  110|   115k|    if (key.key.tag != PGP_PKT_RESERVED) {
  ------------------
  |  Branch (110:9): [True: 75.9k, False: 39.6k]
  ------------------
  111|  75.9k|        return add_ts_key(key) ? RNP_SUCCESS : RNP_ERROR_BAD_STATE;
  ------------------
  |  Branch (111:16): [True: 74.6k, False: 1.34k]
  ------------------
  112|  75.9k|    }
  113|       |
  114|       |    /* we just skipped some unexpected packets and read nothing */
  115|  39.6k|    if (key.subkeys.empty()) {
  ------------------
  |  Branch (115:9): [True: 35.4k, False: 4.19k]
  ------------------
  116|  35.4k|        return RNP_SUCCESS;
  117|  35.4k|    }
  118|       |
  119|  4.19k|    return add_ts_subkey(key.subkeys.front()) ? RNP_SUCCESS : RNP_ERROR_BAD_STATE;
  ------------------
  |  Branch (119:12): [True: 4.06k, False: 128]
  ------------------
  120|  39.6k|}
_ZN3rnp8KeyStore8load_pgpER12pgp_source_tb:
  124|  24.0k|{
  125|       |    /* check whether we have transferable subkey in source */
  126|  24.0k|    if (is_subkey_pkt(stream_pkt_type(src))) {
  ------------------
  |  Branch (126:9): [True: 5.35k, False: 18.7k]
  ------------------
  127|  5.35k|        pgp_transferable_subkey_t tskey;
  128|  5.35k|        rnp_result_t              ret = process_pgp_subkey(src, tskey, skiperrors);
  129|  5.35k|        if (ret) {
  ------------------
  |  Branch (129:13): [True: 3.21k, False: 2.14k]
  ------------------
  130|  3.21k|            return ret;
  131|  3.21k|        }
  132|  2.14k|        return add_ts_subkey(tskey) ? RNP_SUCCESS : RNP_ERROR_BAD_STATE;
  ------------------
  |  Branch (132:16): [True: 2.02k, False: 120]
  ------------------
  133|  5.35k|    }
  134|       |
  135|       |    /* process armored or raw transferable key packets sequence(s) */
  136|  18.7k|    try {
  137|  18.7k|        pgp_key_sequence_t keys;
  138|  18.7k|        rnp_result_t       ret = process_pgp_keys(src, keys, skiperrors);
  139|  18.7k|        if (ret) {
  ------------------
  |  Branch (139:13): [True: 8.97k, False: 9.76k]
  ------------------
  140|  8.97k|            return ret;
  141|  8.97k|        }
  142|  32.2k|        for (auto &key : keys.keys) {
  ------------------
  |  Branch (142:24): [True: 32.2k, False: 8.83k]
  ------------------
  143|  32.2k|            if (!add_ts_key(key)) {
  ------------------
  |  Branch (143:17): [True: 928, False: 31.3k]
  ------------------
  144|    928|                return RNP_ERROR_BAD_STATE;
  145|    928|            }
  146|  32.2k|        }
  147|  8.83k|        return RNP_SUCCESS;
  148|  9.76k|    } catch (const std::exception &e) {
  149|       |        /* LCOV_EXCL_START */
  150|  1.00k|        RNP_LOG("%s", e.what());
  ------------------
  |  |   76|  1.00k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.00k|    do {                                                                                 \
  |  |  |  |   69|  1.00k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.00k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.00k|            break;                                                                       \
  |  |  |  |   71|  1.00k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  151|  1.00k|        return RNP_ERROR_BAD_PARAMETERS;
  152|       |        /* LCOV_EXCL_END */
  153|  1.00k|    }
  154|  18.7k|}

_ZN3rnp8KeyStore5clearEv:
  209|   258k|{
  210|   258k|    keybyfp.clear();
  211|   258k|    keys.clear();
  212|   258k|    blobs.clear();
  213|   258k|}
_ZN3rnp8KeyStore20refresh_subkey_gripsERNS_3KeyE:
  223|   138k|{
  224|   138k|    if (key.is_subkey()) {
  ------------------
  |  Branch (224:9): [True: 0, False: 138k]
  ------------------
  225|      0|        RNP_LOG("wrong argument");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  226|      0|        return false;
  227|      0|    }
  228|       |
  229|   388k|    for (auto &skey : keys) {
  ------------------
  |  Branch (229:21): [True: 388k, False: 138k]
  ------------------
  230|   388k|        bool found = false;
  231|       |
  232|       |        /* if we have primary_grip then we also added to subkey_grips */
  233|   388k|        if (!skey.is_subkey() || skey.has_primary_fp()) {
  ------------------
  |  Branch (233:13): [True: 322k, False: 65.9k]
  |  Branch (233:34): [True: 64.7k, False: 1.19k]
  ------------------
  234|   387k|            continue;
  235|   387k|        }
  236|       |
  237|  11.2k|        for (size_t i = 0; i < skey.sig_count(); i++) {
  ------------------
  |  Branch (237:28): [True: 10.2k, False: 996]
  ------------------
  238|  10.2k|            auto &subsig = skey.get_sig(i);
  239|       |
  240|  10.2k|            if (subsig.sig.type() != PGP_SIG_SUBKEY) {
  ------------------
  |  Branch (240:17): [True: 9.21k, False: 1.01k]
  ------------------
  241|  9.21k|                continue;
  242|  9.21k|            }
  243|  1.01k|            if (subsig.sig.has_keyfp() && (key.fp() == subsig.sig.keyfp())) {
  ------------------
  |  Branch (243:17): [True: 387, False: 628]
  |  Branch (243:17): [True: 98, False: 917]
  |  Branch (243:43): [True: 98, False: 289]
  ------------------
  244|     98|                found = true;
  245|     98|                break;
  246|     98|            }
  247|    917|            if (subsig.sig.has_keyid() && (key.keyid() == subsig.sig.keyid())) {
  ------------------
  |  Branch (247:17): [True: 587, False: 330]
  |  Branch (247:17): [True: 98, False: 819]
  |  Branch (247:43): [True: 98, False: 489]
  ------------------
  248|     98|                found = true;
  249|     98|                break;
  250|     98|            }
  251|    917|        }
  252|       |
  253|  1.19k|        if (found) {
  ------------------
  |  Branch (253:13): [True: 196, False: 996]
  ------------------
  254|    196|            try {
  255|    196|                key.link_subkey_fp(skey);
  256|    196|            } catch (const std::exception &e) {
  257|       |                /* LCOV_EXCL_START */
  258|      0|                RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  259|      0|                return false;
  260|       |                /* LCOV_EXCL_END */
  261|      0|            }
  262|    196|        }
  263|  1.19k|    }
  264|       |
  265|   138k|    return true;
  266|   138k|}
_ZN3rnp8KeyStore10add_subkeyERNS_3KeyEPS1_:
  270|   167k|{
  271|   167k|    Key *primary = NULL;
  272|   167k|    if (oldkey) {
  ------------------
  |  Branch (272:9): [True: 96.0k, False: 71.9k]
  ------------------
  273|  96.0k|        primary = primary_key(*oldkey);
  274|  96.0k|    }
  275|   167k|    if (!primary) {
  ------------------
  |  Branch (275:9): [True: 81.3k, False: 86.5k]
  ------------------
  276|  81.3k|        primary = primary_key(srckey);
  277|  81.3k|    }
  278|       |
  279|   167k|    if (oldkey) {
  ------------------
  |  Branch (279:9): [True: 96.0k, False: 71.9k]
  ------------------
  280|       |        /* check for the weird case when same subkey has different primary keys */
  281|  96.0k|        if (srckey.has_primary_fp() && oldkey->has_primary_fp() &&
  ------------------
  |  Branch (281:13): [True: 93.0k, False: 3.02k]
  |  Branch (281:40): [True: 91.6k, False: 1.31k]
  ------------------
  282|  91.6k|            (srckey.primary_fp() != oldkey->primary_fp())) {
  ------------------
  |  Branch (282:13): [True: 29.5k, False: 62.1k]
  ------------------
  283|  29.5k|            RNP_LOG_KEY("Warning: different primary keys for subkey %s", &srckey);
  ------------------
  |  |   79|  29.5k|    do {                                                                                \
  |  |   80|  29.5k|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 29.5k]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|  29.5k|        auto keyid = (key)->keyid();                                                    \
  |  |   85|  29.5k|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|  29.5k|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|  29.5k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  29.5k|    do {                                                                                 \
  |  |  |  |  |  |   69|  29.5k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 29.5k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  29.5k|            break;                                                                       \
  |  |  |  |  |  |   71|  29.5k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  29.5k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 29.5k]
  |  |  ------------------
  ------------------
  284|  29.5k|            auto *srcprim = get_key(srckey.primary_fp());
  285|  29.5k|            if (srcprim && (srcprim != primary)) {
  ------------------
  |  Branch (285:17): [True: 19.1k, False: 10.4k]
  |  Branch (285:28): [True: 19.0k, False: 145]
  ------------------
  286|  19.0k|                srcprim->remove_subkey_fp(srckey.fp());
  287|  19.0k|            }
  288|  29.5k|        }
  289|       |        /* in case we already have key let's merge it in */
  290|  96.0k|        if (!oldkey->merge(srckey, primary)) {
  ------------------
  |  Branch (290:13): [True: 0, False: 96.0k]
  ------------------
  291|      0|            RNP_LOG_KEY("failed to merge subkey %s", &srckey);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  292|      0|            RNP_LOG_KEY("primary key is %s", primary);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  293|      0|            return NULL;
  294|      0|        }
  295|  96.0k|    } else {
  296|  71.9k|        try {
  297|  71.9k|            keys.emplace_back();
  298|  71.9k|            oldkey = &keys.back();
  299|  71.9k|            keybyfp[srckey.fp()] = std::prev(keys.end());
  300|  71.9k|            *oldkey = Key(srckey);
  301|  71.9k|            if (primary) {
  ------------------
  |  Branch (301:17): [True: 58.0k, False: 13.8k]
  ------------------
  302|  58.0k|                primary->link_subkey_fp(*oldkey);
  303|  58.0k|            }
  304|  71.9k|        } catch (const std::exception &e) {
  305|       |            /* LCOV_EXCL_START */
  306|      0|            RNP_LOG_KEY("key %s copying failed", &srckey);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  307|      0|            RNP_LOG_KEY("primary key is %s", primary);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  308|      0|            RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  309|      0|            if (oldkey) {
  ------------------
  |  Branch (309:17): [True: 0, False: 0]
  ------------------
  310|      0|                keys.pop_back();
  311|      0|                keybyfp.erase(srckey.fp());
  312|      0|            }
  313|      0|            return nullptr;
  314|       |            /* LCOV_EXCL_END */
  315|      0|        }
  316|  71.9k|    }
  317|       |
  318|       |    /* validate all added keys if not disabled */
  319|   167k|    if (!disable_validation && !oldkey->validated()) {
  ------------------
  |  Branch (319:9): [True: 6.08k, False: 161k]
  |  Branch (319:32): [True: 6.08k, False: 0]
  ------------------
  320|  6.08k|        oldkey->validate_subkey(primary, secctx);
  321|  6.08k|    }
  322|   167k|    if (!oldkey->refresh_data(primary, secctx)) {
  ------------------
  |  Branch (322:9): [True: 0, False: 167k]
  ------------------
  323|      0|        RNP_LOG_KEY("Failed to refresh subkey %s data", &srckey);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  324|      0|        RNP_LOG_KEY("primary key is %s", primary);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  325|      0|    }
  326|   167k|    return oldkey;
  327|   167k|}
_ZN3rnp8KeyStore7add_keyERNS_3KeyE:
  332|   409k|{
  333|   409k|    assert(srckey.type() && srckey.version());
  334|   409k|    auto *added_key = get_key(srckey.fp());
  335|       |    /* we cannot merge G10 keys - so just return it */
  336|   409k|    if (added_key && (srckey.format == KeyFormat::G10)) {
  ------------------
  |  Branch (336:9): [True: 199k, False: 210k]
  |  Branch (336:22): [True: 0, False: 199k]
  ------------------
  337|      0|        return added_key;
  338|      0|    }
  339|       |    /* different processing for subkeys */
  340|   409k|    if (srckey.is_subkey()) {
  ------------------
  |  Branch (340:9): [True: 167k, False: 241k]
  ------------------
  341|   167k|        return add_subkey(srckey, added_key);
  342|   167k|    }
  343|       |
  344|   241k|    if (added_key) {
  ------------------
  |  Branch (344:9): [True: 103k, False: 138k]
  ------------------
  345|   103k|        if (!added_key->merge(srckey)) {
  ------------------
  |  Branch (345:13): [True: 0, False: 103k]
  ------------------
  346|      0|            RNP_LOG_KEY("failed to merge key %s", &srckey);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  347|      0|            return NULL;
  348|      0|        }
  349|   138k|    } else {
  350|   138k|        try {
  351|   138k|            keys.emplace_back();
  352|   138k|            added_key = &keys.back();
  353|   138k|            keybyfp[srckey.fp()] = std::prev(keys.end());
  354|   138k|            *added_key = Key(srckey);
  355|       |            /* primary key may be added after subkeys, so let's handle this case correctly */
  356|   138k|            if (!refresh_subkey_grips(*added_key)) {
  ------------------
  |  Branch (356:17): [True: 0, False: 138k]
  ------------------
  357|      0|                RNP_LOG_KEY("failed to refresh subkey grips for %s", added_key);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  358|      0|            }
  359|   138k|        } catch (const std::exception &e) {
  360|       |            /* LCOV_EXCL_START */
  361|      0|            RNP_LOG_KEY("key %s copying failed", &srckey);
  ------------------
  |  |   79|      0|    do {                                                                                \
  |  |   80|      0|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 0]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|      0|        auto keyid = (key)->keyid();                                                    \
  |  |   85|      0|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|      0|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 0]
  |  |  ------------------
  ------------------
  362|      0|            RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  363|      0|            if (added_key) {
  ------------------
  |  Branch (363:17): [True: 0, False: 0]
  ------------------
  364|      0|                keys.pop_back();
  365|      0|                keybyfp.erase(srckey.fp());
  366|      0|            }
  367|      0|            return NULL;
  368|       |            /* LCOV_EXCL_END */
  369|      0|        }
  370|   138k|    }
  371|       |
  372|       |    /* validate all added keys if not disabled or already validated */
  373|   241k|    if (!disable_validation && !added_key->validated()) {
  ------------------
  |  Branch (373:9): [True: 0, False: 241k]
  |  Branch (373:32): [True: 0, False: 0]
  ------------------
  374|      0|        added_key->revalidate(*this);
  375|   241k|    } else if (!added_key->refresh_data(secctx)) {
  ------------------
  |  Branch (375:16): [True: 1.24k, False: 240k]
  ------------------
  376|  1.24k|        RNP_LOG_KEY("Failed to refresh key %s data", &srckey);
  ------------------
  |  |   79|  1.24k|    do {                                                                                \
  |  |   80|  1.24k|        if (!(key)) {                                                                   \
  |  |  ------------------
  |  |  |  Branch (80:13): [True: 0, False: 1.24k]
  |  |  ------------------
  |  |   81|      0|            RNP_LOG(msg, "(null)");                                                     \
  |  |  ------------------
  |  |  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|      0|            break;                                                                      \
  |  |   83|      0|        }                                                                               \
  |  |   84|  1.24k|        auto keyid = (key)->keyid();                                                    \
  |  |   85|  1.24k|        auto idhex = bin_to_hex(keyid.data(), keyid.size(), rnp::HexFormat::Lowercase); \
  |  |   86|  1.24k|        RNP_LOG(msg, idhex.c_str());                                                    \
  |  |  ------------------
  |  |  |  |   76|  1.24k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   68|  1.24k|    do {                                                                                 \
  |  |  |  |  |  |   69|  1.24k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (69:13): [True: 1.24k, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   70|  1.24k|            break;                                                                       \
  |  |  |  |  |  |   71|  1.24k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  1.24k|    } while (0)
  |  |  ------------------
  |  |  |  Branch (87:14): [Folded, False: 1.24k]
  |  |  ------------------
  ------------------
  377|  1.24k|    }
  378|       |    /* Revalidate non-self revocations for all keys in keyring, as added_key key could be a
  379|       |     * revoker. Should not be time-consuming as `validate_desig_revokes()` has early exit. */
  380|  1.51M|    for (auto &key : keys) {
  ------------------
  |  Branch (380:20): [True: 1.51M, False: 241k]
  ------------------
  381|  1.51M|        if (&key == added_key) {
  ------------------
  |  Branch (381:13): [True: 241k, False: 1.27M]
  ------------------
  382|   241k|            continue;
  383|   241k|        }
  384|  1.27M|        if (key.validate_desig_revokes(*this)) {
  ------------------
  |  Branch (384:13): [True: 40, False: 1.27M]
  ------------------
  385|     40|            key.revalidate(*this);
  386|     40|        }
  387|  1.27M|    }
  388|   241k|    return added_key;
  389|   241k|}
_ZN3rnp8KeyStore10import_keyERNS_3KeyEbP23pgp_key_import_status_t:
  437|   228k|{
  438|       |    /* add public key */
  439|   228k|    auto * exkey = get_key(srckey.fp());
  440|   228k|    size_t expackets = exkey ? exkey->rawpkt_count() : 0;
  ------------------
  |  Branch (440:24): [True: 153k, False: 74.5k]
  ------------------
  441|   228k|    try {
  442|   228k|        Key keycp(srckey, pubkey);
  443|   228k|        disable_validation = true;
  444|   228k|        exkey = add_key(keycp);
  445|   228k|        disable_validation = false;
  446|   228k|        if (!exkey) {
  ------------------
  |  Branch (446:13): [True: 0, False: 228k]
  ------------------
  447|      0|            RNP_LOG("failed to add key to the keyring");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  448|      0|            return nullptr;
  449|      0|        }
  450|   228k|        bool changed = exkey->rawpkt_count() > expackets;
  451|   228k|        if (changed || !exkey->validated()) {
  ------------------
  |  Branch (451:13): [True: 89.5k, False: 138k]
  |  Branch (451:24): [True: 134k, False: 4.26k]
  ------------------
  452|       |            /* this will revalidate primary key with all of its subkeys */
  453|   223k|            exkey->revalidate(*this);
  454|   223k|        }
  455|   228k|        if (status) {
  ------------------
  |  Branch (455:13): [True: 180k, False: 47.8k]
  ------------------
  456|   180k|            *status = changed ? (expackets ? PGP_KEY_IMPORT_STATUS_UPDATED :
  ------------------
  |  Branch (456:23): [True: 88.9k, False: 91.3k]
  |  Branch (456:34): [True: 14.4k, False: 74.5k]
  ------------------
  457|  88.9k|                                             PGP_KEY_IMPORT_STATUS_NEW) :
  458|   180k|                                PGP_KEY_IMPORT_STATUS_UNCHANGED;
  459|   180k|        }
  460|   228k|        return exkey;
  461|   228k|    } catch (const std::exception &e) {
  462|       |        /* LCOV_EXCL_START */
  463|    138|        RNP_LOG("%s", e.what());
  ------------------
  |  |   76|    138|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    138|    do {                                                                                 \
  |  |  |  |   69|    138|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 138, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    138|            break;                                                                       \
  |  |  |  |   71|    138|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  464|    138|        disable_validation = false;
  465|    138|        return nullptr;
  466|       |        /* LCOV_EXCL_END */
  467|    138|    }
  468|   228k|}
_ZN3rnp8KeyStore10remove_keyERKNS_3KeyEb:
  570|  1.00k|{
  571|  1.00k|    auto it = keybyfp.find(key.fp());
  572|  1.00k|    if (it == keybyfp.end()) {
  ------------------
  |  Branch (572:9): [True: 0, False: 1.00k]
  ------------------
  573|      0|        return false;
  574|      0|    }
  575|       |
  576|       |    /* cleanup primary_grip (or subkey)/subkey_grips */
  577|  1.00k|    if (key.is_primary() && key.subkey_count()) {
  ------------------
  |  Branch (577:9): [True: 965, False: 35]
  |  Branch (577:29): [True: 767, False: 198]
  ------------------
  578|  2.35k|        for (size_t i = 0; i < key.subkey_count(); i++) {
  ------------------
  |  Branch (578:28): [True: 1.58k, False: 767]
  ------------------
  579|  1.58k|            auto its = keybyfp.find(key.get_subkey_fp(i));
  580|  1.58k|            if (its == keybyfp.end()) {
  ------------------
  |  Branch (580:17): [True: 0, False: 1.58k]
  ------------------
  581|      0|                continue;
  582|      0|            }
  583|       |            /* if subkeys are deleted then no need to update grips */
  584|  1.58k|            if (subkeys) {
  ------------------
  |  Branch (584:17): [True: 0, False: 1.58k]
  ------------------
  585|      0|                keys.erase(its->second);
  586|      0|                keybyfp.erase(its);
  587|      0|                continue;
  588|      0|            }
  589|  1.58k|            its->second->unset_primary_fp();
  590|  1.58k|        }
  591|    767|    }
  592|  1.00k|    if (key.is_subkey() && key.has_primary_fp()) {
  ------------------
  |  Branch (592:9): [True: 35, False: 965]
  |  Branch (592:28): [True: 22, False: 13]
  ------------------
  593|     22|        auto *primary = primary_key(key);
  594|     22|        if (primary) {
  ------------------
  |  Branch (594:13): [True: 22, False: 0]
  ------------------
  595|     22|            primary->remove_subkey_fp(key.fp());
  596|     22|        }
  597|     22|    }
  598|       |
  599|  1.00k|    keys.erase(it->second);
  600|  1.00k|    keybyfp.erase(it);
  601|  1.00k|    return true;
  602|  1.00k|}
_ZN3rnp8KeyStore7get_keyERKN3pgp11FingerprintE:
  616|  1.95M|{
  617|  1.95M|    auto it = keybyfp.find(fpr);
  618|  1.95M|    if (it == keybyfp.end()) {
  ------------------
  |  Branch (618:9): [True: 454k, False: 1.50M]
  ------------------
  619|   454k|        return nullptr;
  620|   454k|    }
  621|  1.50M|    return &*it->second;
  622|  1.95M|}
_ZN3rnp8KeyStore10get_subkeyERKNS_3KeyEm:
  626|   443k|{
  627|   443k|    if (idx >= key.subkey_count()) {
  ------------------
  |  Branch (627:9): [True: 0, False: 443k]
  ------------------
  628|      0|        return nullptr;
  629|      0|    }
  630|   443k|    return get_key(key.get_subkey_fp(idx));
  631|   443k|}
_ZN3rnp8KeyStore11primary_keyERKNS_3KeyE:
  635|   270k|{
  636|   270k|    if (!subkey.is_subkey()) {
  ------------------
  |  Branch (636:9): [True: 785, False: 270k]
  ------------------
  637|    785|        return nullptr;
  638|    785|    }
  639|       |
  640|   270k|    if (subkey.has_primary_fp()) {
  ------------------
  |  Branch (640:9): [True: 241k, False: 28.5k]
  ------------------
  641|   241k|        Key *primary = get_key(subkey.primary_fp());
  642|   241k|        return primary && primary->is_primary() ? primary : nullptr;
  ------------------
  |  Branch (642:16): [True: 223k, False: 18.5k]
  |  Branch (642:27): [True: 222k, False: 547]
  ------------------
  643|   241k|    }
  644|       |
  645|   216k|    for (size_t i = 0; i < subkey.sig_count(); i++) {
  ------------------
  |  Branch (645:24): [True: 187k, False: 28.5k]
  ------------------
  646|   187k|        auto &subsig = subkey.get_sig(i);
  647|   187k|        if (subsig.sig.type() != PGP_SIG_SUBKEY) {
  ------------------
  |  Branch (647:13): [True: 172k, False: 14.7k]
  ------------------
  648|   172k|            continue;
  649|   172k|        }
  650|       |
  651|  14.7k|        Key *primary = get_signer(subsig.sig);
  652|  14.7k|        if (primary && primary->is_primary()) {
  ------------------
  |  Branch (652:13): [True: 380, False: 14.4k]
  |  Branch (652:24): [True: 40, False: 340]
  ------------------
  653|     40|            return primary;
  654|     40|        }
  655|  14.7k|    }
  656|  28.5k|    return nullptr;
  657|  28.5k|}
_ZN3rnp8KeyStore6searchERKNS_9KeySearchEPNS_3KeyE:
  661|  27.4k|{
  662|       |    // since keys are distinguished by fingerprint then just do map lookup
  663|  27.4k|    if (search.type() == KeySearch::Type::Fingerprint) {
  ------------------
  |  Branch (663:9): [True: 22.2k, False: 5.25k]
  ------------------
  664|  22.2k|        auto fpsearch = dynamic_cast<const KeyFingerprintSearch *>(&search);
  665|  22.2k|        assert(fpsearch != nullptr);
  666|  22.2k|        auto key = get_key(fpsearch->get_fp());
  667|  22.2k|        if (after && (after != key)) {
  ------------------
  |  Branch (667:13): [True: 0, False: 22.2k]
  |  Branch (667:22): [True: 0, False: 0]
  ------------------
  668|      0|            RNP_LOG("searching with invalid after param");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  669|      0|            return nullptr;
  670|      0|        }
  671|       |        // return NULL if after is specified
  672|  22.2k|        return after ? nullptr : key;
  ------------------
  |  Branch (672:16): [True: 0, False: 22.2k]
  ------------------
  673|  22.2k|    }
  674|       |
  675|       |    // if after is provided, make sure it is a member of the appropriate list
  676|  5.25k|    auto it = std::find_if(
  677|  5.25k|      keys.begin(), keys.end(), [after](const Key &key) { return !after || (after == &key); });
  678|  5.25k|    if (after && (it == keys.end())) {
  ------------------
  |  Branch (678:9): [True: 0, False: 5.25k]
  |  Branch (678:9): [True: 0, False: 5.25k]
  |  Branch (678:18): [True: 0, False: 0]
  ------------------
  679|      0|        RNP_LOG("searching with non-keyrings after param");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  680|      0|        return nullptr;
  681|      0|    }
  682|  5.25k|    if (after) {
  ------------------
  |  Branch (682:9): [True: 0, False: 5.25k]
  ------------------
  683|      0|        it = std::next(it);
  684|      0|    }
  685|  5.25k|    it =
  686|  5.25k|      std::find_if(it, keys.end(), [&search](const Key &key) { return search.matches(key); });
  687|  5.25k|    return (it == keys.end()) ? nullptr : &(*it);
  ------------------
  |  Branch (687:12): [True: 4.97k, False: 280]
  ------------------
  688|  5.25k|}
_ZN3rnp8KeyStore10get_signerERKN3pgp3pkt9SignatureEPKNS_11KeyProviderE:
  692|  33.5k|{
  693|       |    /* if we have fingerprint let's check it */
  694|  33.5k|    std::unique_ptr<KeySearch> ks;
  695|  33.5k|    if (sig.has_keyfp()) {
  ------------------
  |  Branch (695:9): [True: 22.2k, False: 11.3k]
  ------------------
  696|  22.2k|        ks = KeySearch::create(sig.keyfp());
  697|  22.2k|    } else if (sig.has_keyid()) {
  ------------------
  |  Branch (697:16): [True: 5.25k, False: 6.08k]
  ------------------
  698|  5.25k|        ks = KeySearch::create(sig.keyid());
  699|  6.08k|    } else {
  700|  6.08k|        RNP_LOG("No way to search for the signer.");
  ------------------
  |  |   76|  6.08k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  6.08k|    do {                                                                                 \
  |  |  |  |   69|  6.08k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 6.08k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  6.08k|            break;                                                                       \
  |  |  |  |   71|  6.08k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  701|  6.08k|        return nullptr;
  702|  6.08k|    }
  703|       |
  704|  27.4k|    auto key = search(*ks);
  705|  27.4k|    if (key || !prov) {
  ------------------
  |  Branch (705:9): [True: 17.0k, False: 10.3k]
  |  Branch (705:16): [True: 10.3k, False: 0]
  ------------------
  706|  27.4k|        return key;
  707|  27.4k|    }
  708|      0|    return prov->request_key(*ks, PGP_OP_VERIFY);
  709|  27.4k|}
_ZN3rnp8KeyStoreC2ERKNSt3__112basic_stringIcNS1_11char_traitsIcEENS1_9allocatorIcEEEERNS_15SecurityContextENS_9KeyFormatE:
  712|   258k|    : secctx(ctx)
  713|   258k|{
  714|   258k|    if (_format == KeyFormat::Unknown) {
  ------------------
  |  Branch (714:9): [True: 0, False: 258k]
  ------------------
  715|      0|        RNP_LOG("Invalid key store format");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  716|      0|        throw std::invalid_argument("format");
  717|      0|    }
  718|   258k|    format = _format;
  719|   258k|    path = _path;
  720|   258k|}
_ZN3rnp8KeyStoreD2Ev:
  723|   258k|{
  724|   258k|    clear();
  725|   258k|}
rnp_key_store.cpp:_ZZN3rnp8KeyStore6searchERKNS_9KeySearchEPNS_3KeyEENK3$_0clERKS4_:
  677|  2.47k|      keys.begin(), keys.end(), [after](const Key &key) { return !after || (after == &key); });
  ------------------
  |  Branch (677:66): [True: 2.47k, False: 0]
  |  Branch (677:76): [True: 0, False: 0]
  ------------------
rnp_key_store.cpp:_ZZN3rnp8KeyStore6searchERKNS_9KeySearchEPNS_3KeyEENK3$_1clERKS4_:
  686|  3.14k|      std::find_if(it, keys.end(), [&search](const Key &key) { return search.matches(key); });

_Z16init_armored_srcP12pgp_source_tS0_b:
  705|  46.1k|{
  706|  46.1k|    if (!init_src_common(src, 0)) {
  ------------------
  |  Branch (706:9): [True: 0, False: 46.1k]
  ------------------
  707|      0|        return RNP_ERROR_OUT_OF_MEMORY;
  708|      0|    }
  709|  46.1k|    pgp_source_armored_param_t *param = new (std::nothrow) pgp_source_armored_param_t();
  710|  46.1k|    if (!param) {
  ------------------
  |  Branch (710:9): [True: 0, False: 46.1k]
  ------------------
  711|      0|        RNP_LOG("allocation failed");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  712|      0|        return RNP_ERROR_OUT_OF_MEMORY;
  713|      0|    }
  714|       |
  715|  46.1k|    param->readsrc = readsrc;
  716|  46.1k|    param->noheaders = noheaders;
  717|  46.1k|    src->param = param;
  718|  46.1k|    src->raw_read = armored_src_read;
  719|  46.1k|    src->raw_close = armored_src_close;
  720|  46.1k|    src->type = PGP_STREAM_ARMORED;
  721|       |
  722|       |    /* base64 data only */
  723|  46.1k|    if (noheaders) {
  ------------------
  |  Branch (723:9): [True: 0, False: 46.1k]
  ------------------
  724|      0|        return RNP_SUCCESS;
  725|      0|    }
  726|       |
  727|       |    /* initialize crc context */
  728|  46.1k|    param->crc_ctx = rnp::CRC24::create();
  729|       |    /* parsing armored header */
  730|  46.1k|    rnp_result_t errcode = RNP_ERROR_GENERIC;
  731|  46.1k|    if (!armor_parse_header(param)) {
  ------------------
  |  Branch (731:9): [True: 1.15k, False: 44.9k]
  ------------------
  732|  1.15k|        errcode = RNP_ERROR_BAD_FORMAT;
  733|  1.15k|        goto finish;
  734|  1.15k|    }
  735|       |    /* eol */
  736|  44.9k|    if (!param->readsrc->skip_eol()) {
  ------------------
  |  Branch (736:9): [True: 3.70k, False: 41.2k]
  ------------------
  737|  3.70k|        RNP_LOG("no eol after the armor header");
  ------------------
  |  |   76|  3.70k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  3.70k|    do {                                                                                 \
  |  |  |  |   69|  3.70k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 3.70k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  3.70k|            break;                                                                       \
  |  |  |  |   71|  3.70k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  738|  3.70k|        errcode = RNP_ERROR_BAD_FORMAT;
  739|  3.70k|        goto finish;
  740|  3.70k|    }
  741|       |    /* parsing headers */
  742|  41.2k|    if (!armor_parse_headers(param)) {
  ------------------
  |  Branch (742:9): [True: 1.03k, False: 40.2k]
  ------------------
  743|  1.03k|        RNP_LOG("failed to parse headers");
  ------------------
  |  |   76|  1.03k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.03k|    do {                                                                                 \
  |  |  |  |   69|  1.03k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.03k|            break;                                                                       \
  |  |  |  |   71|  1.03k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  744|  1.03k|        errcode = RNP_ERROR_BAD_FORMAT;
  745|  1.03k|        goto finish;
  746|  1.03k|    }
  747|       |
  748|       |    /* now we are good to go with base64-encoded data */
  749|  40.2k|    errcode = RNP_SUCCESS;
  750|  46.1k|finish:
  751|  46.1k|    if (errcode) {
  ------------------
  |  Branch (751:9): [True: 5.89k, False: 40.2k]
  ------------------
  752|  5.89k|        src->close();
  753|  5.89k|    }
  754|  46.1k|    return errcode;
  755|  40.2k|}
_ZN12pgp_source_t10is_armoredEv:
 1050|   320k|{
 1051|   320k|    char   buf[ARMORED_PEEK_BUF_SIZE] = {0};
 1052|   320k|    size_t read = 0;
 1053|       |
 1054|   320k|    if (!peek(buf, sizeof(buf) - 1, &read) || (read < strlen(ST_ARMOR_BEGIN) + 1)) {
  ------------------
  |  |   46|   320k|#define ST_ARMOR_BEGIN ("-----BEGIN PGP ")
  ------------------
  |  Branch (1054:9): [True: 0, False: 320k]
  |  Branch (1054:47): [True: 11.0k, False: 309k]
  ------------------
 1055|  11.0k|        return false;
 1056|  11.0k|    }
 1057|   309k|    buf[read] = 0;
 1058|   309k|    if (!!strstr(buf, ST_CLEAR_BEGIN)) {
  ------------------
  |  |   48|   309k|#define ST_CLEAR_BEGIN ("-----BEGIN PGP SIGNED MESSAGE-----")
  ------------------
  |  Branch (1058:9): [True: 879, False: 308k]
  ------------------
 1059|    879|        return false;
 1060|    879|    }
 1061|   308k|    return !!strstr(buf, ST_ARMOR_BEGIN);
  ------------------
  |  |   46|   308k|#define ST_ARMOR_BEGIN ("-----BEGIN PGP ")
  ------------------
 1062|   309k|}
_ZN3rnp13ArmoredSourceC2ER12pgp_source_tj:
 1135|   228k|    : Source(), readsrc_(readsrc), multiple_(false)
 1136|   228k|{
 1137|       |    /* Do not dearmor already armored stream */
 1138|   228k|    bool already = readsrc_.type == PGP_STREAM_ARMORED;
 1139|       |    /* Check for base64 source: no multiple streams allowed */
 1140|   228k|    if (!already && (flags & AllowBase64) && (readsrc.is_base64())) {
  ------------------
  |  Branch (1140:9): [True: 197k, False: 30.7k]
  |  Branch (1140:21): [True: 0, False: 197k]
  |  Branch (1140:46): [True: 0, False: 0]
  ------------------
 1141|      0|        auto res = init_armored_src(&src_, &readsrc_, true);
 1142|      0|        if (res) {
  ------------------
  |  Branch (1142:13): [True: 0, False: 0]
  ------------------
 1143|      0|            RNP_LOG("Failed to parse base64 data.");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1144|      0|            throw rnp::rnp_exception(res);
 1145|      0|        }
 1146|      0|        armored_ = true;
 1147|      0|        return;
 1148|      0|    }
 1149|       |    /* Check for armored source */
 1150|   228k|    if (!already && readsrc.is_armored()) {
  ------------------
  |  Branch (1150:9): [True: 197k, False: 30.7k]
  |  Branch (1150:21): [True: 9.58k, False: 188k]
  ------------------
 1151|  9.58k|        auto res = init_armored_src(&src_, &readsrc_);
 1152|  9.58k|        if (res) {
  ------------------
  |  Branch (1152:13): [True: 4.41k, False: 5.16k]
  ------------------
 1153|  4.41k|            RNP_LOG("Failed to parse armored data.");
  ------------------
  |  |   76|  4.41k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  4.41k|    do {                                                                                 \
  |  |  |  |   69|  4.41k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 4.41k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  4.41k|            break;                                                                       \
  |  |  |  |   71|  4.41k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1154|  4.41k|            throw rnp::rnp_exception(res);
 1155|  4.41k|        }
 1156|  5.16k|        armored_ = true;
 1157|  5.16k|        multiple_ = flags & AllowMultiple;
 1158|  5.16k|        return;
 1159|  9.58k|    }
 1160|       |    /* Use binary source if allowed */
 1161|   218k|    if (!(flags & AllowBinary)) {
  ------------------
  |  Branch (1161:9): [True: 0, False: 218k]
  ------------------
 1162|      0|        RNP_LOG("Non-armored data is not allowed here.");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1163|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
 1164|      0|    }
 1165|   218k|    armored_ = false;
 1166|   218k|}
_ZN3rnp13ArmoredSource7restartEv:
 1170|  14.8k|{
 1171|  14.8k|    if (!armored_ || readsrc_.eof() || readsrc_.error()) {
  ------------------
  |  Branch (1171:9): [True: 0, False: 14.8k]
  |  Branch (1171:22): [True: 175, False: 14.6k]
  |  Branch (1171:40): [True: 0, False: 14.6k]
  ------------------
 1172|    175|        return;
 1173|    175|    }
 1174|  14.6k|    src_.close();
 1175|  14.6k|    auto res = init_armored_src(&src_, &readsrc_);
 1176|  14.6k|    if (res) {
  ------------------
  |  Branch (1176:9): [True: 208, False: 14.4k]
  ------------------
 1177|    208|        throw rnp::rnp_exception(res);
 1178|    208|    }
 1179|  14.6k|}
_ZN3rnp13ArmoredSource3srcEv:
 1183|  17.9M|{
 1184|  17.9M|    return armored_ ? src_ : readsrc_;
  ------------------
  |  Branch (1184:12): [True: 74.1k, False: 17.8M]
  ------------------
 1185|  17.9M|}
stream-armor.cpp:_ZL22armor_str_to_data_typeRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE:
  481|  45.6k|{
  482|  45.6k|    if ((str == "MESSAGE") || (str == "ARMORED FILE")) {
  ------------------
  |  Branch (482:9): [True: 6.13k, False: 39.5k]
  |  Branch (482:31): [True: 79, False: 39.4k]
  ------------------
  483|  6.21k|        return PGP_ARMORED_MESSAGE;
  484|  6.21k|    }
  485|  39.4k|    if ((str == "PUBLIC KEY BLOCK") || (str == "PUBLIC KEY")) {
  ------------------
  |  Branch (485:9): [True: 24.6k, False: 14.8k]
  |  Branch (485:40): [True: 673, False: 14.1k]
  ------------------
  486|  25.3k|        return PGP_ARMORED_PUBLIC_KEY;
  487|  25.3k|    }
  488|  14.1k|    if ((str == "SECRET KEY BLOCK") || (str == "SECRET KEY") || (str == "PRIVATE KEY BLOCK") ||
  ------------------
  |  Branch (488:9): [True: 362, False: 13.7k]
  |  Branch (488:40): [True: 652, False: 13.1k]
  |  Branch (488:65): [True: 5.82k, False: 7.29k]
  ------------------
  489|  8.99k|        (str == "PRIVATE KEY")) {
  ------------------
  |  Branch (489:9): [True: 2.15k, False: 5.14k]
  ------------------
  490|  8.99k|        return PGP_ARMORED_SECRET_KEY;
  491|  8.99k|    }
  492|  5.14k|    if (str == "SIGNATURE") {
  ------------------
  |  Branch (492:9): [True: 4.42k, False: 721]
  ------------------
  493|  4.42k|        return PGP_ARMORED_SIGNATURE;
  494|  4.42k|    }
  495|    721|    return PGP_ARMORED_UNKNOWN;
  496|  5.14k|}
stream-armor.cpp:_ZL17peek_armor_headerR12pgp_source_tPmb:
  563|  46.1k|{
  564|  46.1k|    std::string hdr(ARMORED_PEEK_BUF_SIZE, '\0');
  ------------------
  |  |   46|  46.1k|#define ARMORED_PEEK_BUF_SIZE 1024
  ------------------
  565|  46.1k|    size_t      read = 0;
  566|  46.1k|    if (skip) {
  ------------------
  |  Branch (566:9): [True: 46.1k, False: 0]
  ------------------
  567|  46.1k|        *skip = 0;
  568|  46.1k|    }
  569|  46.1k|    if (!src.peek(&hdr.front(), hdr.size(), &read) || (read < 20)) {
  ------------------
  |  Branch (569:9): [True: 0, False: 46.1k]
  |  Branch (569:55): [True: 114, False: 45.9k]
  ------------------
  570|    114|        return "";
  571|    114|    }
  572|  45.9k|    hdr.resize(read);
  573|       |
  574|  45.9k|    std::string type;
  575|  45.9k|    size_t      armhdrlen = 0;
  576|  45.9k|    size_t      pos = find_armor_header(hdr, armhdrlen, type);
  577|  45.9k|    if (pos == std::string::npos) {
  ------------------
  |  Branch (577:9): [True: 263, False: 45.7k]
  ------------------
  578|    263|        return "";
  579|    263|    }
  580|       |
  581|       |    /* if there are non-whitespaces before the armor header then issue warning */
  582|  46.5k|    for (size_t idx = 0; check && (idx < pos); idx++) {
  ------------------
  |  Branch (582:26): [True: 46.5k, False: 0]
  |  Branch (582:35): [True: 33.5k, False: 13.0k]
  ------------------
  583|  33.5k|        if (B64DEC[(uint8_t) hdr[idx]] != 0xfd) {
  ------------------
  |  Branch (583:13): [True: 32.6k, False: 864]
  ------------------
  584|  32.6k|            RNP_LOG("extra data before the header line");
  ------------------
  |  |   76|  32.6k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  32.6k|    do {                                                                                 \
  |  |  |  |   69|  32.6k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 32.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  32.6k|            break;                                                                       \
  |  |  |  |   71|  32.6k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  585|  32.6k|            break;
  586|  32.6k|        }
  587|  33.5k|    }
  588|       |
  589|  45.7k|    if (skip) {
  ------------------
  |  Branch (589:9): [True: 45.7k, False: 0]
  ------------------
  590|  45.7k|        *skip = armhdrlen;
  591|  45.7k|    }
  592|  45.7k|    return type;
  593|  45.9k|}
stream-armor.cpp:_ZL17find_armor_headerRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEERmRS5_:
  464|  45.9k|{
  465|  45.9k|    size_t bg_len = strlen(ST_ARMOR_BEGIN);
  ------------------
  |  |   46|  45.9k|#define ST_ARMOR_BEGIN ("-----BEGIN PGP ")
  ------------------
  466|  45.9k|    size_t pos = str.find(ST_ARMOR_BEGIN);
  ------------------
  |  |   46|  45.9k|#define ST_ARMOR_BEGIN ("-----BEGIN PGP ")
  ------------------
  467|  45.9k|    if (pos == std::string::npos) {
  ------------------
  |  Branch (467:9): [True: 50, False: 45.9k]
  ------------------
  468|     50|        return pos;
  469|     50|    }
  470|  45.9k|    size_t end = str.find(ST_DASHES, pos + bg_len);
  ------------------
  |  |   45|  45.9k|#define ST_DASHES ("-----")
  ------------------
  471|  45.9k|    if (end == std::string::npos) {
  ------------------
  |  Branch (471:9): [True: 213, False: 45.7k]
  ------------------
  472|    213|        return end;
  473|    213|    }
  474|  45.7k|    hdrlen = end + 5;
  475|  45.7k|    type.assign(str.begin() + pos + bg_len, str.begin() + end);
  476|  45.7k|    return pos;
  477|  45.9k|}
stream-armor.cpp:_ZL16armored_src_readP12pgp_source_tPvmPm:
  242|   170k|{
  243|   170k|    pgp_source_armored_param_t *param = (pgp_source_armored_param_t *) src->param;
  244|   170k|    uint8_t  b64buf[ARMORED_BLOCK_SIZE];     /* input base64 data with spaces and so on */
  245|   170k|    uint8_t  decbuf[ARMORED_BLOCK_SIZE + 4]; /* decoded 6-bit values */
  246|   170k|    uint8_t *bufptr = (uint8_t *) buf;       /* for better readability below */
  247|   170k|    uint8_t *bptr, *bend;                    /* pointer to input data in b64buf */
  248|   170k|    uint8_t *dptr, *dend, *pend; /* pointers to decoded data in decbuf: working pointer, last
  249|       |                                    available byte, last byte to process */
  250|   170k|    uint8_t  bval;
  251|   170k|    uint32_t b24;
  252|   170k|    size_t   read = 0;
  253|   170k|    size_t   left = len;
  254|   170k|    size_t   eqcount = 0; /* number of '=' at the end of base64 stream */
  255|       |
  256|   170k|    if (!param) {
  ------------------
  |  Branch (256:9): [True: 0, False: 170k]
  ------------------
  257|      0|        return false;
  258|      0|    }
  259|       |
  260|       |    /* checking whether there are some decoded bytes */
  261|   170k|    if (param->restpos < param->restlen) {
  ------------------
  |  Branch (261:9): [True: 595, False: 169k]
  ------------------
  262|    595|        if (param->restlen - param->restpos >= len) {
  ------------------
  |  Branch (262:13): [True: 0, False: 595]
  ------------------
  263|      0|            memcpy(bufptr, &param->rest[param->restpos], len);
  264|      0|            param->restpos += len;
  265|      0|            try {
  266|      0|                param->crc_ctx->add(bufptr, len);
  267|      0|            } catch (const std::exception &e) {
  268|      0|                RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  269|      0|                return false;
  270|      0|            }
  271|      0|            *readres = len;
  272|      0|            return true;
  273|    595|        } else {
  274|    595|            left = len - (param->restlen - param->restpos);
  275|    595|            memcpy(bufptr, &param->rest[param->restpos], len - left);
  276|    595|            param->restpos = param->restlen = 0;
  277|    595|            bufptr += len - left;
  278|    595|        }
  279|    595|    }
  280|       |
  281|   170k|    if (param->eofb64) {
  ------------------
  |  Branch (281:9): [True: 129k, False: 40.7k]
  ------------------
  282|   129k|        *readres = len - left;
  283|   129k|        return true;
  284|   129k|    }
  285|       |
  286|  40.7k|    memcpy(decbuf, param->brest, param->brestlen);
  287|  40.7k|    dend = decbuf + param->brestlen;
  288|       |
  289|  53.3k|    do {
  290|  53.3k|        if (!param->readsrc->peek(b64buf, sizeof(b64buf), &read)) {
  ------------------
  |  Branch (290:13): [True: 0, False: 53.3k]
  ------------------
  291|      0|            return false;
  292|      0|        }
  293|  53.3k|        if (!read) {
  ------------------
  |  Branch (293:13): [True: 308, False: 53.0k]
  ------------------
  294|    308|            RNP_LOG("premature end of armored input");
  ------------------
  |  |   76|    308|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    308|    do {                                                                                 \
  |  |  |  |   69|    308|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 308, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    308|            break;                                                                       \
  |  |  |  |   71|    308|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  295|    308|            return false;
  296|    308|        }
  297|       |
  298|  53.0k|        dptr = dend;
  299|  53.0k|        bptr = b64buf;
  300|  53.0k|        bend = b64buf + read;
  301|       |        /* checking input data, stripping away whitespaces, checking for end of the b64 data */
  302|  80.1M|        while (bptr < bend) {
  ------------------
  |  Branch (302:16): [True: 80.1M, False: 13.1k]
  ------------------
  303|  80.1M|            if ((bval = B64DEC[*(bptr++)]) < 64) {
  ------------------
  |  Branch (303:17): [True: 79.6M, False: 485k]
  ------------------
  304|  79.6M|                *(dptr++) = bval;
  305|  79.6M|            } else if (bval == 0xfe) {
  ------------------
  |  Branch (305:24): [True: 31.8k, False: 453k]
  ------------------
  306|       |                /* '=' means the base64 padding or the beginning of checksum */
  307|  31.8k|                param->eofb64 = true;
  308|  31.8k|                break;
  309|   453k|            } else if (bval == 0xff) {
  ------------------
  |  Branch (309:24): [True: 7.96k, False: 445k]
  ------------------
  310|  7.96k|                auto ch = *(bptr - 1);
  311|       |                /* OpenPGP message headers without the crc and without trailing = */
  312|  7.96k|                if ((ch == CH_DASH) && !param->noheaders) {
  ------------------
  |  |   34|  7.96k|#define CH_DASH ('-')
  ------------------
  |  Branch (312:21): [True: 6.02k, False: 1.94k]
  |  Branch (312:40): [True: 6.02k, False: 0]
  ------------------
  313|  6.02k|                    param->eofb64 = true;
  314|  6.02k|                    break;
  315|  6.02k|                }
  316|  1.94k|                RNP_LOG("wrong base64 character 0x%02hhX", ch);
  ------------------
  |  |   76|  1.94k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.94k|    do {                                                                                 \
  |  |  |  |   69|  1.94k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.94k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.94k|            break;                                                                       \
  |  |  |  |   71|  1.94k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  317|  1.94k|                return false;
  318|  7.96k|            }
  319|  80.1M|        }
  320|       |
  321|  51.0k|        dend = dptr;
  322|  51.0k|        dptr = decbuf;
  323|       |        /* Processing full 4s which will go directly to the buf.
  324|       |           After this left < 3 or decbuf has < 4 bytes */
  325|  51.0k|        if ((size_t)(dend - dptr) / 4 * 3 < left) {
  ------------------
  |  Branch (325:13): [True: 50.4k, False: 647]
  ------------------
  326|  50.4k|            pend = decbuf + (dend - dptr) / 4 * 4;
  327|  50.4k|            left -= (dend - dptr) / 4 * 3;
  328|  50.4k|        } else {
  329|    647|            pend = decbuf + (left / 3) * 4;
  330|    647|            left -= left / 3 * 3;
  331|    647|        }
  332|       |
  333|       |        /* this one would the most performance-consuming part for large chunks */
  334|  19.6M|        while (dptr < pend) {
  ------------------
  |  Branch (334:16): [True: 19.5M, False: 51.0k]
  ------------------
  335|  19.5M|            b24 = *dptr++ << 18;
  336|  19.5M|            b24 |= *dptr++ << 12;
  337|  19.5M|            b24 |= *dptr++ << 6;
  338|  19.5M|            b24 |= *dptr++;
  339|  19.5M|            *bufptr++ = b24 >> 16;
  340|  19.5M|            *bufptr++ = b24 >> 8;
  341|  19.5M|            *bufptr++ = b24 & 0xff;
  342|  19.5M|        }
  343|       |
  344|       |        /* moving rest to the beginning of decbuf */
  345|  51.0k|        memmove(decbuf, dptr, dend - dptr);
  346|  51.0k|        dend = decbuf + (dend - dptr);
  347|       |
  348|       |        /* skip already processed data */
  349|  51.0k|        if (!param->eofb64) {
  ------------------
  |  Branch (349:13): [True: 13.1k, False: 37.8k]
  ------------------
  350|       |            /* all input is base64 data or eol/spaces, so skipping it */
  351|  13.1k|            param->readsrc->skip(read);
  352|       |            /* check for eof for base64-encoded data without headers */
  353|  13.1k|            if (param->noheaders && param->readsrc->eof()) {
  ------------------
  |  Branch (353:17): [True: 0, False: 13.1k]
  |  Branch (353:37): [True: 0, False: 0]
  ------------------
  354|      0|                param->readsrc->skip(read);
  355|      0|                param->eofb64 = true;
  356|  13.1k|            } else {
  357|  13.1k|                continue;
  358|  13.1k|            }
  359|  37.8k|        } else {
  360|       |            /* '=' reached, bptr points on it */
  361|  37.8k|            param->readsrc->skip(bptr - b64buf - 1);
  362|  37.8k|        }
  363|       |
  364|       |        /* end of base64 data */
  365|  37.8k|        if (param->noheaders) {
  ------------------
  |  Branch (365:13): [True: 0, False: 37.8k]
  ------------------
  366|      0|            if (!base64_read_padding(*param->readsrc, &eqcount)) {
  ------------------
  |  Branch (366:17): [True: 0, False: 0]
  ------------------
  367|      0|                return false;
  368|      0|            }
  369|      0|            break;
  370|      0|        }
  371|       |        /* reading b64 padding if any */
  372|  37.8k|        if (!armor_read_padding(*param->readsrc, &eqcount)) {
  ------------------
  |  Branch (372:13): [True: 181, False: 37.7k]
  ------------------
  373|    181|            RNP_LOG("wrong padding");
  ------------------
  |  |   76|    181|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    181|    do {                                                                                 \
  |  |  |  |   69|    181|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 181, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    181|            break;                                                                       \
  |  |  |  |   71|    181|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|    181|            return false;
  375|    181|        }
  376|       |        /* reading crc */
  377|  37.7k|        if (!armor_read_crc(param)) {
  ------------------
  |  Branch (377:13): [True: 18.8k, False: 18.8k]
  ------------------
  378|  18.8k|            RNP_LOG("Warning: missing or malformed CRC line");
  ------------------
  |  |   76|  18.8k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  18.8k|    do {                                                                                 \
  |  |  |  |   69|  18.8k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 18.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  18.8k|            break;                                                                       \
  |  |  |  |   71|  18.8k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  379|  18.8k|        }
  380|       |        /* reading armor trailing line */
  381|  37.7k|        if (!armor_read_trailer(param)) {
  ------------------
  |  Branch (381:13): [True: 1.61k, False: 36.1k]
  ------------------
  382|  1.61k|            RNP_LOG("wrong armor trailer");
  ------------------
  |  |   76|  1.61k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.61k|    do {                                                                                 \
  |  |  |  |   69|  1.61k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.61k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.61k|            break;                                                                       \
  |  |  |  |   71|  1.61k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|  1.61k|            return false;
  384|  1.61k|        }
  385|  36.1k|        break;
  386|  37.7k|    } while (left >= 3);
  ------------------
  |  Branch (386:14): [True: 12.5k, False: 635]
  ------------------
  387|       |
  388|       |    /* process bytes left in decbuf */
  389|       |
  390|  36.7k|    dptr = decbuf;
  391|  36.7k|    pend = decbuf + (dend - decbuf) / 4 * 4;
  392|  36.7k|    bptr = param->rest;
  393|   348k|    while (dptr < pend) {
  ------------------
  |  Branch (393:12): [True: 312k, False: 36.7k]
  ------------------
  394|   312k|        b24 = *dptr++ << 18;
  395|   312k|        b24 |= *dptr++ << 12;
  396|   312k|        b24 |= *dptr++ << 6;
  397|   312k|        b24 |= *dptr++;
  398|   312k|        *bptr++ = b24 >> 16;
  399|   312k|        *bptr++ = b24 >> 8;
  400|   312k|        *bptr++ = b24 & 0xff;
  401|   312k|    }
  402|       |
  403|  36.7k|    if (!armored_update_crc(param, buf, bufptr - (uint8_t *) buf)) {
  ------------------
  |  Branch (403:9): [True: 0, False: 36.7k]
  ------------------
  404|      0|        return false;
  405|      0|    }
  406|       |
  407|  36.7k|    if (param->eofb64) {
  ------------------
  |  Branch (407:9): [True: 36.1k, False: 635]
  ------------------
  408|  36.1k|        if ((dend - dptr + eqcount) % 4 != 0) {
  ------------------
  |  Branch (408:13): [True: 311, False: 35.7k]
  ------------------
  409|    311|            RNP_LOG("wrong b64 padding");
  ------------------
  |  |   76|    311|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    311|    do {                                                                                 \
  |  |  |  |   69|    311|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 311, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    311|            break;                                                                       \
  |  |  |  |   71|    311|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  410|    311|            return false;
  411|    311|        }
  412|       |
  413|  35.7k|        if (eqcount == 1) {
  ------------------
  |  Branch (413:13): [True: 12.0k, False: 23.7k]
  ------------------
  414|  12.0k|            b24 = (*dptr << 10) | (*(dptr + 1) << 4) | (*(dptr + 2) >> 2);
  415|  12.0k|            *bptr++ = b24 >> 8;
  416|  12.0k|            *bptr++ = b24 & 0xff;
  417|  23.7k|        } else if (eqcount == 2) {
  ------------------
  |  Branch (417:20): [True: 10.0k, False: 13.6k]
  ------------------
  418|  10.0k|            *bptr++ = (*dptr << 2) | (*(dptr + 1) >> 4);
  419|  10.0k|        }
  420|       |
  421|       |        /* Calculate CRC after reading whole input stream */
  422|  35.7k|        if (!armored_update_crc(param, param->rest, bptr - param->rest, true)) {
  ------------------
  |  Branch (422:13): [True: 0, False: 35.7k]
  ------------------
  423|      0|            return false;
  424|      0|        }
  425|  35.7k|    } else {
  426|       |        /* few bytes which do not fit to 4 boundary */
  427|  1.98k|        for (int i = 0; i < dend - dptr; i++) {
  ------------------
  |  Branch (427:25): [True: 1.34k, False: 635]
  ------------------
  428|  1.34k|            param->brest[i] = *(dptr + i);
  429|  1.34k|        }
  430|    635|        param->brestlen = dend - dptr;
  431|    635|    }
  432|       |
  433|  36.4k|    param->restlen = bptr - param->rest;
  434|       |
  435|       |    /* check whether we have some bytes to add */
  436|  36.4k|    if ((left > 0) && (param->restlen > 0)) {
  ------------------
  |  Branch (436:9): [True: 36.2k, False: 128]
  |  Branch (436:23): [True: 22.6k, False: 13.6k]
  ------------------
  437|  22.6k|        read = left > param->restlen ? param->restlen : left;
  ------------------
  |  Branch (437:16): [True: 22.1k, False: 519]
  ------------------
  438|  22.6k|        memcpy(bufptr, param->rest, read);
  439|  22.6k|        if (!param->eofb64 && !armored_update_crc(param, bufptr, read)) {
  ------------------
  |  Branch (439:13): [True: 493, False: 22.1k]
  |  Branch (439:31): [True: 0, False: 493]
  ------------------
  440|      0|            return false;
  441|      0|        }
  442|  22.6k|        left -= read;
  443|  22.6k|        param->restpos += read;
  444|  22.6k|    }
  445|       |
  446|  36.4k|    *readres = len - left;
  447|  36.4k|    return true;
  448|  36.4k|}
stream-armor.cpp:_ZL18armor_read_paddingR12pgp_source_tPm:
  106|  37.8k|{
  107|  37.8k|    char   st[64];
  108|  37.8k|    size_t stlen = 0;
  109|       |
  110|  37.8k|    if (!src.peek_line(st, 64, &stlen)) {
  ------------------
  |  Branch (110:9): [True: 35, False: 37.8k]
  ------------------
  111|     35|        return false;
  112|     35|    }
  113|       |
  114|  37.8k|    if ((stlen == 1) || (stlen == 2)) {
  ------------------
  |  Branch (114:9): [True: 13.7k, False: 24.1k]
  |  Branch (114:25): [True: 10.1k, False: 13.9k]
  ------------------
  115|  23.8k|        if ((st[0] != CH_EQ) || ((stlen == 2) && (st[1] != CH_EQ))) {
  ------------------
  |  |   33|  23.8k|#define CH_EQ ('=')
  ------------------
                      if ((st[0] != CH_EQ) || ((stlen == 2) && (st[1] != CH_EQ))) {
  ------------------
  |  |   33|  10.1k|#define CH_EQ ('=')
  ------------------
  |  Branch (115:13): [True: 24, False: 23.8k]
  |  Branch (115:34): [True: 10.1k, False: 13.7k]
  |  Branch (115:50): [True: 35, False: 10.1k]
  ------------------
  116|     59|            return false;
  117|     59|        }
  118|       |
  119|  23.8k|        *read = stlen;
  120|  23.8k|        src.skip(stlen);
  121|  23.8k|        return src.skip_eol();
  122|  23.8k|    } else if (stlen == 5) {
  ------------------
  |  Branch (122:16): [True: 7.98k, False: 5.99k]
  ------------------
  123|  7.98k|        *read = 0;
  124|  7.98k|        return true;
  125|  7.98k|    } else if ((stlen > 5) && !memcmp(st, ST_DASHES, 5)) {
  ------------------
  |  |   45|  5.97k|#define ST_DASHES ("-----")
  ------------------
  |  Branch (125:16): [True: 5.97k, False: 19]
  |  Branch (125:31): [True: 5.90k, False: 68]
  ------------------
  126|       |        /* case with absent crc and 3-byte last chunk */
  127|  5.90k|        *read = 0;
  128|  5.90k|        return true;
  129|  5.90k|    }
  130|     87|    return false;
  131|  37.8k|}
stream-armor.cpp:_ZL14armor_read_crcP26pgp_source_armored_param_t:
  167|  37.7k|{
  168|  37.7k|    uint8_t dec[4] = {0};
  169|  37.7k|    char    crc[8] = {0};
  170|  37.7k|    size_t  clen = 0;
  171|       |
  172|  37.7k|    if (!param->readsrc->peek_line(crc, sizeof(crc), &clen)) {
  ------------------
  |  Branch (172:9): [True: 17.8k, False: 19.8k]
  ------------------
  173|  17.8k|        return false;
  174|  17.8k|    }
  175|       |
  176|  19.8k|    if ((clen != 5) || (crc[0] != CH_EQ)) {
  ------------------
  |  |   33|  19.4k|#define CH_EQ ('=')
  ------------------
  |  Branch (176:9): [True: 459, False: 19.4k]
  |  Branch (176:24): [True: 508, False: 18.9k]
  ------------------
  177|    967|        return false;
  178|    967|    }
  179|       |
  180|  94.4k|    for (int i = 0; i < 4; i++) {
  ------------------
  |  Branch (180:21): [True: 75.5k, False: 18.8k]
  ------------------
  181|  75.5k|        if ((dec[i] = B64DEC[(uint8_t) crc[i + 1]]) >= 64) {
  ------------------
  |  Branch (181:13): [True: 72, False: 75.5k]
  ------------------
  182|     72|            return false;
  183|     72|        }
  184|  75.5k|    }
  185|       |
  186|  18.8k|    param->readcrc[0] = (dec[0] << 2) | ((dec[1] >> 4) & 0x0F);
  187|  18.8k|    param->readcrc[1] = (dec[1] << 4) | ((dec[2] >> 2) & 0x0F);
  188|  18.8k|    param->readcrc[2] = (dec[2] << 6) | dec[3];
  189|       |
  190|  18.8k|    param->has_crc = true;
  191|       |
  192|  18.8k|    param->readsrc->skip(5);
  193|  18.8k|    return param->readsrc->skip_eol();
  194|  18.9k|}
stream-armor.cpp:_ZL18armor_read_trailerP26pgp_source_armored_param_t:
  198|  37.7k|{
  199|       |    /* Space or tab could get between armor and trailer, see issue #2199 */
  200|  37.7k|    if (!param->readsrc->skip_chars("\r\n \t")) {
  ------------------
  |  Branch (200:9): [True: 0, False: 37.7k]
  ------------------
  201|      0|        return false;
  202|      0|    }
  203|       |
  204|  37.7k|    std::string st = ST_ARMOR_END + param->armorhdr + ST_DASHES;
  ------------------
  |  |   47|   113k|#define ST_ARMOR_END ("-----END PGP ")
  ------------------
                  std::string st = ST_ARMOR_END + param->armorhdr + ST_DASHES;
  ------------------
  |  |   45|  37.7k|#define ST_DASHES ("-----")
  ------------------
  205|  37.7k|    std::string str(st.size(), 0);
  206|  37.7k|    if (!param->readsrc->peek_eq(&str.front(), str.size()) || (st != str)) {
  ------------------
  |  Branch (206:9): [True: 198, False: 37.5k]
  |  Branch (206:63): [True: 1.41k, False: 36.1k]
  ------------------
  207|  1.61k|        return false;
  208|  1.61k|    }
  209|  36.1k|    param->readsrc->skip(st.size());
  210|  36.1k|    (void) param->readsrc->skip_chars("\t ");
  211|  36.1k|    (void) param->readsrc->skip_eol();
  212|  36.1k|    return true;
  213|  37.7k|}
stream-armor.cpp:_ZL18armored_update_crcP26pgp_source_armored_param_tPKvmb:
  220|  73.0k|{
  221|  73.0k|    if (param->noheaders) {
  ------------------
  |  Branch (221:9): [True: 0, False: 73.0k]
  ------------------
  222|      0|        return true;
  223|      0|    }
  224|  73.0k|    try {
  225|  73.0k|        param->crc_ctx->add(buf, len);
  226|  73.0k|        if (!finish) {
  ------------------
  |  Branch (226:13): [True: 37.2k, False: 35.7k]
  ------------------
  227|  37.2k|            return true;
  228|  37.2k|        }
  229|  35.7k|        auto crc = param->crc_ctx->finish();
  230|  35.7k|        if (param->has_crc && memcmp(param->readcrc, crc.data(), 3)) {
  ------------------
  |  Branch (230:13): [True: 18.7k, False: 17.0k]
  |  Branch (230:31): [True: 18.0k, False: 640]
  ------------------
  231|  18.0k|            RNP_LOG("Warning: CRC mismatch");
  ------------------
  |  |   76|  18.0k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  18.0k|    do {                                                                                 \
  |  |  |  |   69|  18.0k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 18.0k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  18.0k|            break;                                                                       \
  |  |  |  |   71|  18.0k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  232|  18.0k|        }
  233|  35.7k|        return true;
  234|  73.0k|    } catch (const std::exception &e) {
  235|      0|        RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  236|      0|        return false;
  237|      0|    }
  238|  73.0k|}
stream-armor.cpp:_ZL17armored_src_closeP12pgp_source_t:
  452|  71.2k|{
  453|  71.2k|    auto param = (pgp_source_armored_param_t *) src->param;
  454|  71.2k|    delete param;
  455|       |    src->param = NULL;
  456|  71.2k|}
stream-armor.cpp:_ZL18armor_parse_headerP26pgp_source_armored_param_t:
  607|  46.1k|{
  608|  46.1k|    size_t      skip = 0;
  609|  46.1k|    std::string hdr = peek_armor_header(*param->readsrc, &skip, true);
  610|  46.1k|    if (hdr.empty()) {
  ------------------
  |  Branch (610:9): [True: 438, False: 45.6k]
  ------------------
  611|    438|        RNP_LOG("no armor header");
  ------------------
  |  |   76|    438|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    438|    do {                                                                                 \
  |  |  |  |   69|    438|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 438, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    438|            break;                                                                       \
  |  |  |  |   71|    438|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|    438|        return false;
  613|    438|    }
  614|       |
  615|  45.6k|    param->type = armor_str_to_data_type(hdr);
  616|  45.6k|    if (param->type == PGP_ARMORED_UNKNOWN) {
  ------------------
  |  Branch (616:9): [True: 721, False: 44.9k]
  ------------------
  617|    721|        RNP_LOG("unknown armor header");
  ------------------
  |  |   76|    721|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    721|    do {                                                                                 \
  |  |  |  |   69|    721|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 721, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    721|            break;                                                                       \
  |  |  |  |   71|    721|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  618|    721|        return false;
  619|    721|    }
  620|       |
  621|  44.9k|    param->armorhdr = std::move(hdr);
  622|  44.9k|    param->readsrc->skip(skip);
  623|  44.9k|    param->readsrc->skip_chars("\t ");
  624|  44.9k|    return true;
  625|  45.6k|}
stream-armor.cpp:_ZL19armor_parse_headersP26pgp_source_armored_param_t:
  662|  41.2k|{
  663|  41.2k|    std::vector<char> header(ARMORED_PEEK_BUF_SIZE, '\0');
  ------------------
  |  |   46|  41.2k|#define ARMORED_PEEK_BUF_SIZE 1024
  ------------------
  664|       |
  665|   169k|    do {
  666|   169k|        size_t hdrlen = 0;
  667|   169k|        if (!param->readsrc->peek_line(header.data(), header.size(), &hdrlen)) {
  ------------------
  |  Branch (667:13): [True: 2.61k, False: 167k]
  ------------------
  668|       |            /* if line is too long let's cut it to the reasonable size */
  669|  2.61k|            param->readsrc->skip(hdrlen);
  670|  2.61k|            if ((hdrlen != header.size() - 1) || !armor_skip_line(*param->readsrc)) {
  ------------------
  |  Branch (670:17): [True: 974, False: 1.64k]
  |  Branch (670:50): [True: 57, False: 1.58k]
  ------------------
  671|  1.03k|                RNP_LOG("failed to peek line: unexpected end of data");
  ------------------
  |  |   76|  1.03k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.03k|    do {                                                                                 \
  |  |  |  |   69|  1.03k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.03k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.03k|            break;                                                                       \
  |  |  |  |   71|  1.03k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  672|  1.03k|                return false;
  673|  1.03k|            }
  674|  1.58k|            RNP_LOG("Too long armor header - truncated.");
  ------------------
  |  |   76|  1.58k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.58k|    do {                                                                                 \
  |  |  |  |   69|  1.58k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.58k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.58k|            break;                                                                       \
  |  |  |  |   71|  1.58k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  675|   167k|        } else if (hdrlen) {
  ------------------
  |  Branch (675:20): [True: 143k, False: 23.9k]
  ------------------
  676|   143k|            if (is_base64_line(header.data(), hdrlen)) {
  ------------------
  |  Branch (676:17): [True: 16.2k, False: 127k]
  ------------------
  677|  16.2k|                RNP_LOG("Warning: no empty line after the base64 headers");
  ------------------
  |  |   76|  16.2k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  16.2k|    do {                                                                                 \
  |  |  |  |   69|  16.2k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 16.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  16.2k|            break;                                                                       \
  |  |  |  |   71|  16.2k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  678|  16.2k|                return true;
  679|  16.2k|            }
  680|   127k|            param->readsrc->skip(hdrlen);
  681|   127k|            if (rnp::is_blank_line(header.data(), hdrlen)) {
  ------------------
  |  Branch (681:17): [True: 0, False: 127k]
  ------------------
  682|      0|                return param->readsrc->skip_eol();
  683|      0|            }
  684|   127k|        } else {
  685|       |            /* empty line - end of the headers */
  686|  23.9k|            return param->readsrc->skip_eol();
  687|  23.9k|        }
  688|       |
  689|   128k|        std::string hdrst(header.begin(), header.begin() + hdrlen);
  690|   128k|        size_t      pos = hdrst.find(": ");
  691|   128k|        if ((pos != std::string::npos) && armor_header_known(hdrst.substr(0, pos + 2))) {
  ------------------
  |  Branch (691:13): [True: 7.91k, False: 120k]
  |  Branch (691:13): [True: 2.95k, False: 125k]
  |  Branch (691:43): [True: 2.95k, False: 4.96k]
  ------------------
  692|       |            // do nothing at the moment, just check whether header is known
  693|   125k|        } else {
  694|   125k|            RNP_LOG("unknown header '%s'", hdrst.c_str());
  ------------------
  |  |   76|   125k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|   125k|    do {                                                                                 \
  |  |  |  |   69|   125k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 125k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|   125k|            break;                                                                       \
  |  |  |  |   71|   125k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  695|   125k|        }
  696|       |
  697|   128k|        if (!param->readsrc->skip_eol()) {
  ------------------
  |  Branch (697:13): [True: 0, False: 128k]
  ------------------
  698|      0|            return false;
  699|      0|        }
  700|   128k|    } while (1);
  ------------------
  |  Branch (700:14): [True: 128k, Folded]
  ------------------
  701|  41.2k|}
stream-armor.cpp:_ZL15armor_skip_lineR12pgp_source_t:
  629|  1.64k|{
  630|  1.64k|    char header[ARMORED_PEEK_BUF_SIZE] = {0};
  631|  13.3k|    do {
  632|  13.3k|        size_t hdrlen = 0;
  633|  13.3k|        bool   res = src.peek_line(header, sizeof(header), &hdrlen);
  634|  13.3k|        if (hdrlen) {
  ------------------
  |  Branch (634:13): [True: 12.7k, False: 675]
  ------------------
  635|  12.7k|            src.skip(hdrlen);
  636|  12.7k|        }
  637|  13.3k|        if (res || (hdrlen < sizeof(header) - 1)) {
  ------------------
  |  Branch (637:13): [True: 1.58k, False: 11.8k]
  |  Branch (637:20): [True: 57, False: 11.7k]
  ------------------
  638|  1.64k|            return res;
  639|  1.64k|        }
  640|  13.3k|    } while (1);
  ------------------
  |  Branch (640:14): [True: 11.7k, Folded]
  ------------------
  641|  1.64k|}
stream-armor.cpp:_ZL18armor_header_knownRKNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEE:
  655|  7.91k|{
  656|  7.91k|    return (name == ST_HEADER_VERSION) || (name == ST_HEADER_COMMENT) ||
  ------------------
  |  |   50|  7.91k|#define ST_HEADER_VERSION ("Version: ")
  ------------------
                  return (name == ST_HEADER_VERSION) || (name == ST_HEADER_COMMENT) ||
  ------------------
  |  |   51|  7.32k|#define ST_HEADER_COMMENT ("Comment: ")
  ------------------
  |  Branch (656:12): [True: 589, False: 7.32k]
  |  Branch (656:43): [True: 558, False: 6.77k]
  ------------------
  657|  6.77k|           (name == ST_HEADER_CHARSET) || (name == ST_HEADER_HASH);
  ------------------
  |  |   53|  6.77k|#define ST_HEADER_CHARSET ("Charset: ")
  ------------------
                         (name == ST_HEADER_CHARSET) || (name == ST_HEADER_HASH);
  ------------------
  |  |   52|  6.57k|#define ST_HEADER_HASH ("Hash: ")
  ------------------
  |  Branch (657:12): [True: 199, False: 6.57k]
  |  Branch (657:43): [True: 1.60k, False: 4.96k]
  ------------------
  658|  7.91k|}
stream-armor.cpp:_ZL14is_base64_linePKcm:
  645|   143k|{
  646|  7.12M|    for (size_t i = 0; i < len && line[i]; i++) {
  ------------------
  |  Branch (646:24): [True: 7.10M, False: 16.1k]
  |  Branch (646:35): [True: 7.10M, False: 76]
  ------------------
  647|  7.10M|        if (B64DEC[(uint8_t) line[i]] == 0xff)
  ------------------
  |  Branch (647:13): [True: 127k, False: 6.97M]
  ------------------
  648|   127k|            return false;
  649|  7.10M|    }
  650|  16.2k|    return true;
  651|   143k|}

_ZN3rnp13ArmoredSource8multipleEv:
  123|  23.3k|    {
  124|  23.3k|        return multiple_;
  125|  23.3k|    }

_ZN12pgp_source_t4readEPvmPm:
   57|  9.73M|{
   58|  9.73M|    size_t left = len;
   59|  9.73M|    size_t read;
   60|  9.73M|    bool   readahead = cache ? cache->readahead : false;
  ------------------
  |  Branch (60:24): [True: 9.73M, False: 0]
  ------------------
   61|       |
   62|  9.73M|    if (error_) {
  ------------------
  |  Branch (62:9): [True: 0, False: 9.73M]
  ------------------
   63|      0|        return false;
   64|      0|    }
   65|       |
   66|  9.73M|    if (eof_ || (len == 0)) {
  ------------------
  |  Branch (66:9): [True: 1.47k, False: 9.73M]
  |  Branch (66:17): [True: 0, False: 9.73M]
  ------------------
   67|  1.47k|        *readres = 0;
   68|  1.47k|        return true;
   69|  1.47k|    }
   70|       |
   71|       |    // Do not read more then available if source size is known
   72|  9.73M|    if (knownsize && (readb + len > size)) {
  ------------------
  |  Branch (72:9): [True: 9.41M, False: 322k]
  |  Branch (72:22): [True: 4.53k, False: 9.40M]
  ------------------
   73|  4.53k|        len = size - readb;
   74|  4.53k|        left = len;
   75|  4.53k|        readahead = false;
   76|  4.53k|    }
   77|       |
   78|       |    // Check whether we have cache and there is data inside
   79|  9.73M|    if (cache && (cache->len > cache->pos)) {
  ------------------
  |  Branch (79:9): [True: 9.73M, False: 0]
  |  Branch (79:18): [True: 9.73M, False: 299]
  ------------------
   80|  9.73M|        read = cache->len - cache->pos;
   81|  9.73M|        if (read >= len) {
  ------------------
  |  Branch (81:13): [True: 9.72M, False: 6.91k]
  ------------------
   82|  9.72M|            memcpy(buf, &cache->buf[cache->pos], len);
   83|  9.72M|            cache->pos += len;
   84|  9.72M|            goto finish;
   85|  9.72M|        } else {
   86|  6.91k|            memcpy(buf, &cache->buf[cache->pos], read);
   87|  6.91k|            cache->pos += read;
   88|  6.91k|            buf = (uint8_t *) buf + read;
   89|  6.91k|            left = len - read;
   90|  6.91k|        }
   91|  9.73M|    }
   92|       |
   93|       |    // If we got here then we have empty cache or no cache at all
   94|  7.35k|    while (left > 0) {
  ------------------
  |  Branch (94:12): [True: 7.25k, False: 94]
  ------------------
   95|  7.25k|        if (left > sizeof(cache->buf) || !readahead || !cache) {
  ------------------
  |  Branch (95:13): [True: 566, False: 6.69k]
  |  Branch (95:42): [True: 50, False: 6.64k]
  |  Branch (95:56): [True: 0, False: 6.64k]
  ------------------
   96|       |            // If there is no cache or chunk is larger then read directly
   97|    616|            if (!raw_read(this, buf, left, &read)) {
  ------------------
  |  Branch (97:17): [True: 41, False: 575]
  ------------------
   98|     41|                error_ = 1;
   99|     41|                return false;
  100|     41|            }
  101|    575|            if (!read) {
  ------------------
  |  Branch (101:17): [True: 442, False: 133]
  ------------------
  102|    442|                eof_ = true;
  103|    442|                len = len - left;
  104|    442|                goto finish;
  105|    442|            }
  106|    133|            left -= read;
  107|    133|            buf = (uint8_t *) buf + read;
  108|  6.64k|        } else {
  109|       |            // Try to fill the cache to avoid small reads
  110|  6.64k|            if (!raw_read(this, &cache->buf[0], sizeof(cache->buf), &read)) {
  ------------------
  |  Branch (110:17): [True: 105, False: 6.53k]
  ------------------
  111|    105|                error_ = true;
  112|    105|                return false;
  113|    105|            }
  114|  6.53k|            if (!read) {
  ------------------
  |  Branch (114:17): [True: 4.74k, False: 1.79k]
  ------------------
  115|  4.74k|                eof_ = true;
  116|  4.74k|                len = len - left;
  117|  4.74k|                goto finish;
  118|  4.74k|            } else if (read < left) {
  ------------------
  |  Branch (118:24): [True: 10, False: 1.78k]
  ------------------
  119|     10|                memcpy(buf, &cache->buf[0], read);
  120|     10|                left -= read;
  121|     10|                buf = (uint8_t *) buf + read;
  122|  1.78k|            } else {
  123|  1.78k|                memcpy(buf, &cache->buf[0], left);
  124|  1.78k|                cache->pos = left;
  125|  1.78k|                cache->len = read;
  126|  1.78k|                goto finish;
  127|  1.78k|            }
  128|  6.53k|        }
  129|  7.25k|    }
  130|       |
  131|  9.73M|finish:
  132|  9.73M|    readb += len;
  133|  9.73M|    if (knownsize && (readb == size)) {
  ------------------
  |  Branch (133:9): [True: 9.41M, False: 322k]
  |  Branch (133:22): [True: 25.0k, False: 9.38M]
  ------------------
  134|  25.0k|        eof_ = true;
  135|  25.0k|    }
  136|  9.73M|    *readres = len;
  137|  9.73M|    return true;
  138|  7.21k|}
_ZN12pgp_source_t7read_eqEPvm:
  142|  8.91M|{
  143|  8.91M|    size_t res = 0;
  144|  8.91M|    return read(buf, len, &res) && (res == len);
  ------------------
  |  Branch (144:12): [True: 8.91M, False: 76]
  |  Branch (144:36): [True: 8.91M, False: 328]
  ------------------
  145|  8.91M|}
_ZN12pgp_source_t4peekEPvmPm:
  149|   141M|{
  150|   141M|    if (error_) {
  ------------------
  |  Branch (150:9): [True: 6.22k, False: 141M]
  ------------------
  151|  6.22k|        return false;
  152|  6.22k|    }
  153|   141M|    if (!cache || (len > sizeof(cache->buf))) {
  ------------------
  |  Branch (153:9): [True: 0, False: 141M]
  |  Branch (153:19): [True: 0, False: 141M]
  ------------------
  154|      0|        return false;
  155|      0|    }
  156|   141M|    if (eof_) {
  ------------------
  |  Branch (156:9): [True: 0, False: 141M]
  ------------------
  157|      0|        *peeked = 0;
  158|      0|        return true;
  159|      0|    }
  160|       |
  161|   141M|    size_t read = 0;
  162|   141M|    bool   readahead = cache->readahead;
  163|       |    // Do not read more then available if source size is known
  164|   141M|    if (knownsize && (readb + len > size)) {
  ------------------
  |  Branch (164:9): [True: 139M, False: 2.31M]
  |  Branch (164:22): [True: 169k, False: 139M]
  ------------------
  165|   169k|        len = size - readb;
  166|   169k|        readahead = false;
  167|   169k|    }
  168|       |
  169|   141M|    if (cache->len - cache->pos >= len) {
  ------------------
  |  Branch (169:9): [True: 141M, False: 216k]
  ------------------
  170|   141M|        if (buf) {
  ------------------
  |  Branch (170:13): [True: 141M, False: 0]
  ------------------
  171|   141M|            memcpy(buf, &cache->buf[cache->pos], len);
  172|   141M|        }
  173|   141M|        *peeked = len;
  174|   141M|        return true;
  175|   141M|    }
  176|       |
  177|   216k|    if (cache->pos > 0) {
  ------------------
  |  Branch (177:9): [True: 32.9k, False: 183k]
  ------------------
  178|  32.9k|        memmove(&cache->buf[0], &cache->buf[cache->pos], cache->len - cache->pos);
  179|  32.9k|        cache->len -= cache->pos;
  180|  32.9k|        cache->pos = 0;
  181|  32.9k|    }
  182|       |
  183|   216k|    while (cache->len < len) {
  ------------------
  |  Branch (183:12): [True: 216k, False: 0]
  ------------------
  184|   216k|        read = readahead ? sizeof(cache->buf) - cache->len : len - cache->len;
  ------------------
  |  Branch (184:16): [True: 216k, False: 92]
  ------------------
  185|   216k|        if (knownsize && (readb + read > size)) {
  ------------------
  |  Branch (185:13): [True: 52.0k, False: 164k]
  |  Branch (185:26): [True: 46.8k, False: 5.16k]
  ------------------
  186|  46.8k|            read = size - readb;
  187|  46.8k|        }
  188|   216k|        if (!raw_read(this, &cache->buf[cache->len], read, &read)) {
  ------------------
  |  Branch (188:13): [True: 4.21k, False: 212k]
  ------------------
  189|  4.21k|            error_ = true;
  190|  4.21k|            return false;
  191|  4.21k|        }
  192|   212k|        if (!read) {
  ------------------
  |  Branch (192:13): [True: 124k, False: 87.8k]
  ------------------
  193|   124k|            if (buf) {
  ------------------
  |  Branch (193:17): [True: 124k, False: 0]
  ------------------
  194|   124k|                memcpy(buf, &cache->buf[0], cache->len);
  195|   124k|            }
  196|   124k|            *peeked = cache->len;
  197|   124k|            return true;
  198|   124k|        }
  199|  87.8k|        cache->len += read;
  200|  87.8k|        if (cache->len >= len) {
  ------------------
  |  Branch (200:13): [True: 87.8k, False: 0]
  ------------------
  201|  87.8k|            if (buf) {
  ------------------
  |  Branch (201:17): [True: 87.8k, False: 0]
  ------------------
  202|  87.8k|                memcpy(buf, cache->buf, len);
  203|  87.8k|            }
  204|  87.8k|            *peeked = len;
  205|  87.8k|            return true;
  206|  87.8k|        }
  207|  87.8k|    }
  208|      0|    return false;
  209|   216k|}
_ZN12pgp_source_t7peek_eqEPvm:
  213|   105M|{
  214|   105M|    size_t res = 0;
  215|   105M|    return peek(buf, len, &res) && (res == len);
  ------------------
  |  Branch (215:12): [True: 105M, False: 4.89k]
  |  Branch (215:36): [True: 105M, False: 1.11k]
  ------------------
  216|   105M|}
_ZN12pgp_source_t4skipEm:
  220|   573k|{
  221|   573k|    if (cache && (cache->len - cache->pos >= len)) {
  ------------------
  |  Branch (221:9): [True: 573k, False: 0]
  |  Branch (221:18): [True: 573k, False: 0]
  ------------------
  222|   573k|        readb += len;
  223|   573k|        cache->pos += len;
  224|   573k|        return;
  225|   573k|    }
  226|       |
  227|      0|    size_t  res = 0;
  228|      0|    uint8_t sbuf[16];
  229|      0|    if (len < sizeof(sbuf)) {
  ------------------
  |  Branch (229:9): [True: 0, False: 0]
  ------------------
  230|      0|        (void) read(sbuf, len, &res);
  231|      0|        return;
  232|      0|    }
  233|      0|    if (eof()) {
  ------------------
  |  Branch (233:9): [True: 0, False: 0]
  ------------------
  234|      0|        return;
  235|      0|    }
  236|       |
  237|      0|    void *buf = calloc(1, std::min((size_t) PGP_INPUT_CACHE_SIZE, len));
  ------------------
  |  |   35|      0|#define PGP_INPUT_CACHE_SIZE 32768
  ------------------
  238|      0|    if (!buf) {
  ------------------
  |  Branch (238:9): [True: 0, False: 0]
  ------------------
  239|      0|        error_ = true;
  240|      0|        return;
  241|      0|    }
  242|       |
  243|      0|    while (len && !eof()) {
  ------------------
  |  Branch (243:12): [True: 0, False: 0]
  |  Branch (243:19): [True: 0, False: 0]
  ------------------
  244|      0|        if (!read(buf, std::min((size_t) PGP_INPUT_CACHE_SIZE, len), &res)) {
  ------------------
  |  |   35|      0|#define PGP_INPUT_CACHE_SIZE 32768
  ------------------
  |  Branch (244:13): [True: 0, False: 0]
  ------------------
  245|      0|            break;
  246|      0|        }
  247|      0|        len -= res;
  248|      0|    }
  249|      0|    free(buf);
  250|      0|}
_ZNK12pgp_source_t5errorEv:
  263|   153k|{
  264|   153k|    return error_;
  265|   153k|}
_ZN12pgp_source_t3eofEv:
  269|  35.1M|{
  270|  35.1M|    if (eof_) {
  ------------------
  |  Branch (270:9): [True: 105k, False: 35.0M]
  ------------------
  271|   105k|        return true;
  272|   105k|    }
  273|       |    /* Error on stream read is NOT considered as eof. See error(). */
  274|  35.0M|    uint8_t check;
  275|  35.0M|    size_t  read = 0;
  276|  35.0M|    return peek(&check, 1, &read) && (read == 0);
  ------------------
  |  Branch (276:12): [True: 35.0M, False: 5.54k]
  |  Branch (276:38): [True: 124k, False: 34.9M]
  ------------------
  277|  35.1M|}
_ZN12pgp_source_t5closeEv:
  281|   380k|{
  282|   380k|    if (raw_close) {
  ------------------
  |  Branch (282:9): [True: 119k, False: 261k]
  ------------------
  283|   119k|        raw_close(this);
  284|   119k|    }
  285|       |
  286|   380k|    if (cache) {
  ------------------
  |  Branch (286:9): [True: 94.2k, False: 286k]
  ------------------
  287|  94.2k|        free(cache);
  288|       |        cache = NULL;
  289|  94.2k|    }
  290|   380k|}
_ZN12pgp_source_t8skip_eolEv:
  294|   276k|{
  295|   276k|    uint8_t eol[2];
  296|   276k|    size_t  read;
  297|       |
  298|   276k|    if (!peek(eol, 2, &read) || !read) {
  ------------------
  |  Branch (298:9): [True: 0, False: 276k]
  |  Branch (298:33): [True: 395, False: 275k]
  ------------------
  299|    395|        return false;
  300|    395|    }
  301|   275k|    if (eol[0] == '\n') {
  ------------------
  |  Branch (301:9): [True: 246k, False: 29.4k]
  ------------------
  302|   246k|        skip(1);
  303|   246k|        return true;
  304|   246k|    }
  305|  29.4k|    if ((read == 2) && (eol[0] == '\r') && (eol[1] == '\n')) {
  ------------------
  |  Branch (305:9): [True: 29.3k, False: 81]
  |  Branch (305:24): [True: 9.22k, False: 20.1k]
  |  Branch (305:44): [True: 8.22k, False: 1.00k]
  ------------------
  306|  8.22k|        skip(2);
  307|  8.22k|        return true;
  308|  8.22k|    }
  309|  21.2k|    return false;
  310|  29.4k|}
_ZN12pgp_source_t10skip_charsERKNSt3__112basic_stringIcNS0_11char_traitsIcEENS0_9allocatorIcEEEE:
  314|   137k|{
  315|   139k|    do {
  316|   139k|        char   ch = 0;
  317|   139k|        size_t read = 0;
  318|   139k|        if (!peek(&ch, 1, &read)) {
  ------------------
  |  Branch (318:13): [True: 0, False: 139k]
  ------------------
  319|      0|            return false;
  320|      0|        }
  321|   139k|        if (!read) {
  ------------------
  |  Branch (321:13): [True: 678, False: 138k]
  ------------------
  322|       |            /* return true only if there is no underlying read error */
  323|    678|            return true;
  324|    678|        }
  325|   138k|        if (chars.find(ch) == std::string::npos) {
  ------------------
  |  Branch (325:13): [True: 137k, False: 1.41k]
  ------------------
  326|   137k|            return true;
  327|   137k|        }
  328|  1.41k|        skip(1);
  329|  1.41k|    } while (1);
  ------------------
  |  Branch (329:14): [True: 1.41k, Folded]
  ------------------
  330|   137k|}
_ZN12pgp_source_t9peek_lineEPcmPm:
  334|   258k|{
  335|   258k|    size_t scan_pos = 0;
  336|   258k|    size_t inc = 64;
  337|   258k|    len = len - 1;
  338|       |
  339|   427k|    do {
  340|   427k|        size_t to_peek = scan_pos + inc;
  341|   427k|        to_peek = to_peek > len ? len : to_peek;
  ------------------
  |  Branch (341:19): [True: 89.3k, False: 338k]
  ------------------
  342|   427k|        inc = inc * 2;
  343|       |
  344|       |        /* inefficient, each time we again read from the beginning */
  345|   427k|        if (!peek(buf, to_peek, readres)) {
  ------------------
  |  Branch (345:13): [True: 0, False: 427k]
  ------------------
  346|      0|            return false;
  347|      0|        }
  348|       |
  349|       |        /* we continue scanning where we stopped previously */
  350|  32.7M|        for (; scan_pos < *readres; scan_pos++) {
  ------------------
  |  Branch (350:16): [True: 32.5M, False: 201k]
  ------------------
  351|  32.5M|            if (buf[scan_pos] == '\n') {
  ------------------
  |  Branch (351:17): [True: 226k, False: 32.3M]
  ------------------
  352|   226k|                if ((scan_pos > 0) && (buf[scan_pos - 1] == '\r')) {
  ------------------
  |  Branch (352:21): [True: 203k, False: 23.0k]
  |  Branch (352:39): [True: 7.66k, False: 195k]
  ------------------
  353|  7.66k|                    scan_pos--;
  354|  7.66k|                }
  355|   226k|                buf[scan_pos] = '\0';
  356|   226k|                *readres = scan_pos;
  357|   226k|                return true;
  358|   226k|            }
  359|  32.5M|        }
  360|   201k|        if (*readres < to_peek) {
  ------------------
  |  Branch (360:13): [True: 1.11k, False: 200k]
  ------------------
  361|  1.11k|            return false;
  362|  1.11k|        }
  363|   201k|    } while (scan_pos < len);
  ------------------
  |  Branch (363:14): [True: 168k, False: 31.1k]
  ------------------
  364|  31.1k|    return false;
  365|   258k|}
_Z15init_src_commonP12pgp_source_tm:
  369|  94.2k|{
  370|  94.2k|    memset(src, 0, sizeof(*src));
  371|  94.2k|    src->cache = (pgp_source_cache_t *) calloc(1, sizeof(*src->cache));
  372|  94.2k|    if (!src->cache) {
  ------------------
  |  Branch (372:9): [True: 0, False: 94.2k]
  ------------------
  373|      0|        RNP_LOG("cache allocation failed");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  374|      0|        return false;
  375|      0|    }
  376|  94.2k|    src->cache->readahead = true;
  377|  94.2k|    if (!paramsize) {
  ------------------
  |  Branch (377:9): [True: 46.1k, False: 48.1k]
  ------------------
  378|  46.1k|        return true;
  379|  46.1k|    }
  380|  48.1k|    src->param = calloc(1, paramsize);
  381|  48.1k|    if (!src->param) {
  ------------------
  |  Branch (381:9): [True: 0, False: 48.1k]
  ------------------
  382|      0|        RNP_LOG("param allocation failed");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  383|      0|        free(src->cache);
  384|      0|        src->cache = NULL;
  385|      0|        return false;
  386|      0|    }
  387|  48.1k|    return true;
  388|  48.1k|}
_Z12init_mem_srcP12pgp_source_tPKvmb:
  546|  48.1k|{
  547|  48.1k|    if (!mem && len) {
  ------------------
  |  Branch (547:9): [True: 0, False: 48.1k]
  |  Branch (547:17): [True: 0, False: 0]
  ------------------
  548|      0|        return RNP_ERROR_NULL_POINTER;
  549|      0|    }
  550|       |    /* this is actually double buffering, but then src_peek will fail */
  551|  48.1k|    if (!init_src_common(src, sizeof(pgp_source_mem_param_t))) {
  ------------------
  |  Branch (551:9): [True: 0, False: 48.1k]
  ------------------
  552|      0|        return RNP_ERROR_OUT_OF_MEMORY;
  553|      0|    }
  554|       |
  555|  48.1k|    pgp_source_mem_param_t *param = (pgp_source_mem_param_t *) src->param;
  556|  48.1k|    param->memory = mem;
  557|  48.1k|    param->len = len;
  558|  48.1k|    param->pos = 0;
  559|  48.1k|    param->free = free;
  560|  48.1k|    src->raw_read = mem_src_read;
  561|  48.1k|    src->raw_close = mem_src_close;
  562|  48.1k|    src->raw_finish = NULL;
  563|  48.1k|    src->size = len;
  564|  48.1k|    src->knownsize = 1;
  565|  48.1k|    src->type = PGP_STREAM_MEMORY;
  566|       |
  567|  48.1k|    return RNP_SUCCESS;
  568|  48.1k|}
_Z15init_dst_commonP10pgp_dest_tm:
  629|  5.24M|{
  630|  5.24M|    memset(dst, 0, sizeof(*dst));
  631|  5.24M|    dst->werr = RNP_SUCCESS;
  632|  5.24M|    if (!paramsize) {
  ------------------
  |  Branch (632:9): [True: 0, False: 5.24M]
  ------------------
  633|      0|        return true;
  634|      0|    }
  635|       |    /* allocate param */
  636|  5.24M|    dst->param = calloc(1, paramsize);
  637|  5.24M|    if (!dst->param) {
  ------------------
  |  Branch (637:9): [True: 0, False: 5.24M]
  ------------------
  638|      0|        RNP_LOG("allocation failed");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  639|      0|    }
  640|  5.24M|    return dst->param;
  641|  5.24M|}
_Z9dst_writeP10pgp_dest_tPKvm:
  645|  10.4M|{
  646|       |    /* we call write function only if all previous calls succeeded */
  647|  10.4M|    if ((len > 0) && (dst->write) && (dst->werr == RNP_SUCCESS)) {
  ------------------
  |  Branch (647:9): [True: 5.92M, False: 4.55M]
  |  Branch (647:22): [True: 5.92M, False: 0]
  |  Branch (647:38): [True: 5.92M, False: 0]
  ------------------
  648|       |        /* if cache non-empty and len will overflow it then fill it and write out */
  649|  5.92M|        if ((dst->clen > 0) && (dst->clen + len > sizeof(dst->cache))) {
  ------------------
  |  Branch (649:13): [True: 0, False: 5.92M]
  |  Branch (649:32): [True: 0, False: 0]
  ------------------
  650|      0|            memcpy(dst->cache + dst->clen, buf, sizeof(dst->cache) - dst->clen);
  651|      0|            buf = (uint8_t *) buf + sizeof(dst->cache) - dst->clen;
  652|      0|            len -= sizeof(dst->cache) - dst->clen;
  653|      0|            dst->werr = dst->write(dst, dst->cache, sizeof(dst->cache));
  654|      0|            dst->writeb += sizeof(dst->cache);
  655|      0|            dst->clen = 0;
  656|      0|            if (dst->werr != RNP_SUCCESS) {
  ------------------
  |  Branch (656:17): [True: 0, False: 0]
  ------------------
  657|      0|                return;
  658|      0|            }
  659|      0|        }
  660|       |
  661|       |        /* here everything will fit into the cache or cache is empty */
  662|  5.92M|        if (dst->no_cache || (len > sizeof(dst->cache))) {
  ------------------
  |  Branch (662:13): [True: 5.92M, False: 0]
  |  Branch (662:30): [True: 0, False: 0]
  ------------------
  663|  5.92M|            dst->werr = dst->write(dst, buf, len);
  664|  5.92M|            if (!dst->werr) {
  ------------------
  |  Branch (664:17): [True: 5.92M, False: 0]
  ------------------
  665|  5.92M|                dst->writeb += len;
  666|  5.92M|            }
  667|  5.92M|        } else {
  668|      0|            memcpy(dst->cache + dst->clen, buf, len);
  669|      0|            dst->clen += len;
  670|      0|        }
  671|  5.92M|    }
  672|  10.4M|}
_Z9dst_closeP10pgp_dest_tb:
  727|  5.24M|{
  728|  5.24M|    if (!discard && !dst->finished) {
  ------------------
  |  Branch (728:9): [True: 0, False: 5.24M]
  |  Branch (728:21): [True: 0, False: 0]
  ------------------
  729|      0|        dst_finish(dst);
  730|      0|    }
  731|       |
  732|  5.24M|    if (dst->close) {
  ------------------
  |  Branch (732:9): [True: 5.24M, False: 0]
  ------------------
  733|  5.24M|        dst->close(dst, discard);
  734|  5.24M|    }
  735|  5.24M|}
_Z13init_mem_destP10pgp_dest_tPvj:
 1035|  5.24M|{
 1036|  5.24M|    pgp_dest_mem_param_t *param;
 1037|       |
 1038|  5.24M|    if (!init_dst_common(dst, sizeof(*param))) {
  ------------------
  |  Branch (1038:9): [True: 0, False: 5.24M]
  ------------------
 1039|      0|        return RNP_ERROR_OUT_OF_MEMORY;
 1040|      0|    }
 1041|       |
 1042|  5.24M|    param = (pgp_dest_mem_param_t *) dst->param;
 1043|       |
 1044|  5.24M|    param->maxalloc = len;
 1045|  5.24M|    param->allocated = mem ? len : 0;
  ------------------
  |  Branch (1045:24): [True: 0, False: 5.24M]
  ------------------
 1046|  5.24M|    param->memory = mem;
 1047|  5.24M|    param->free = !mem;
 1048|  5.24M|    param->secure = false;
 1049|       |
 1050|  5.24M|    dst->write = mem_dst_write;
 1051|  5.24M|    dst->close = mem_dst_close;
 1052|  5.24M|    dst->type = PGP_STREAM_MEMORY;
 1053|  5.24M|    dst->werr = RNP_SUCCESS;
 1054|  5.24M|    dst->no_cache = true;
 1055|       |
 1056|  5.24M|    return RNP_SUCCESS;
 1057|  5.24M|}
_Z19mem_dest_get_memoryP10pgp_dest_t:
 1075|  5.24M|{
 1076|  5.24M|    if (dst->type != PGP_STREAM_MEMORY) {
  ------------------
  |  Branch (1076:9): [True: 0, False: 5.24M]
  ------------------
 1077|      0|        RNP_LOG("wrong function call");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1078|      0|        return NULL;
 1079|      0|    }
 1080|       |
 1081|  5.24M|    pgp_dest_mem_param_t *param = (pgp_dest_mem_param_t *) dst->param;
 1082|       |
 1083|  5.24M|    if (param) {
  ------------------
  |  Branch (1083:9): [True: 5.24M, False: 0]
  ------------------
 1084|  5.24M|        return param->memory;
 1085|  5.24M|    }
 1086|       |
 1087|      0|    return NULL;
 1088|  5.24M|}
_Z13dst_write_srcP12pgp_source_tP10pgp_dest_tm:
 1174|  5.07k|{
 1175|  5.07k|    const size_t bufsize = PGP_INPUT_CACHE_SIZE;
  ------------------
  |  |   35|  5.07k|#define PGP_INPUT_CACHE_SIZE 32768
  ------------------
 1176|  5.07k|    uint8_t *    readbuf = (uint8_t *) malloc(bufsize);
 1177|  5.07k|    if (!readbuf) {
  ------------------
  |  Branch (1177:9): [True: 0, False: 5.07k]
  ------------------
 1178|      0|        return RNP_ERROR_OUT_OF_MEMORY;
 1179|      0|    }
 1180|  5.07k|    rnp_result_t res = RNP_SUCCESS;
 1181|  5.07k|    try {
 1182|  5.07k|        size_t   read;
 1183|  5.07k|        uint64_t totalread = 0;
 1184|       |
 1185|  10.3k|        while (!src->eof_) {
  ------------------
  |  Branch (1185:16): [True: 5.34k, False: 5.05k]
  ------------------
 1186|  5.34k|            if (!src->read(readbuf, bufsize, &read)) {
  ------------------
  |  Branch (1186:17): [True: 22, False: 5.31k]
  ------------------
 1187|     22|                res = RNP_ERROR_GENERIC;
 1188|     22|                break;
 1189|     22|            }
 1190|  5.31k|            if (!read) {
  ------------------
  |  Branch (1190:17): [True: 6, False: 5.31k]
  ------------------
 1191|      6|                continue;
 1192|      6|            }
 1193|  5.31k|            totalread += read;
 1194|  5.31k|            if (limit && totalread > limit) {
  ------------------
  |  Branch (1194:17): [True: 5.31k, False: 0]
  |  Branch (1194:26): [True: 0, False: 5.31k]
  ------------------
 1195|      0|                res = RNP_ERROR_GENERIC;
 1196|      0|                break;
 1197|      0|            }
 1198|  5.31k|            if (dst) {
  ------------------
  |  Branch (1198:17): [True: 0, False: 5.31k]
  ------------------
 1199|      0|                dst_write(dst, readbuf, read);
 1200|      0|                if (dst->werr) {
  ------------------
  |  Branch (1200:21): [True: 0, False: 0]
  ------------------
 1201|      0|                    RNP_LOG("failed to output data");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1202|      0|                    res = RNP_ERROR_WRITE;
 1203|      0|                    break;
 1204|      0|                }
 1205|      0|            }
 1206|  5.31k|        }
 1207|  5.07k|    } catch (...) {
 1208|      0|        free(readbuf);
 1209|      0|        throw;
 1210|      0|    }
 1211|  5.07k|    free(readbuf);
 1212|  5.07k|    if (res || !dst) {
  ------------------
  |  Branch (1212:9): [True: 22, False: 5.05k]
  |  Branch (1212:16): [True: 5.05k, False: 0]
  ------------------
 1213|  5.07k|        return res;
 1214|  5.07k|    }
 1215|      0|    dst_flush(dst);
 1216|      0|    return dst->werr;
 1217|  5.07k|}
stream-common.cpp:_ZL12mem_src_readP12pgp_source_tPvmPm:
  516|  53.5k|{
  517|  53.5k|    pgp_source_mem_param_t *param = (pgp_source_mem_param_t *) src->param;
  518|  53.5k|    if (!param) {
  ------------------
  |  Branch (518:9): [True: 0, False: 53.5k]
  ------------------
  519|      0|        return false;
  520|      0|    }
  521|       |
  522|  53.5k|    if (len > param->len - param->pos) {
  ------------------
  |  Branch (522:9): [True: 826, False: 52.6k]
  ------------------
  523|    826|        len = param->len - param->pos;
  524|    826|    }
  525|  53.5k|    memcpy(buf, (uint8_t *) param->memory + param->pos, len);
  526|  53.5k|    param->pos += len;
  527|  53.5k|    *read = len;
  528|  53.5k|    return true;
  529|  53.5k|}
stream-common.cpp:_ZL13mem_src_closeP12pgp_source_t:
  533|  48.1k|{
  534|  48.1k|    pgp_source_mem_param_t *param = (pgp_source_mem_param_t *) src->param;
  535|  48.1k|    if (param) {
  ------------------
  |  Branch (535:9): [True: 48.1k, False: 0]
  ------------------
  536|  48.1k|        if (param->free) {
  ------------------
  |  Branch (536:13): [True: 0, False: 48.1k]
  ------------------
  537|      0|            free((void *) param->memory);
  538|      0|        }
  539|  48.1k|        free(src->param);
  540|       |        src->param = NULL;
  541|  48.1k|    }
  542|  48.1k|}
stream-common.cpp:_ZL13mem_dst_writeP10pgp_dest_tPKvm:
  972|  5.92M|{
  973|  5.92M|    pgp_dest_mem_param_t *param = (pgp_dest_mem_param_t *) dst->param;
  974|  5.92M|    if (!param) {
  ------------------
  |  Branch (974:9): [True: 0, False: 5.92M]
  ------------------
  975|      0|        return RNP_ERROR_BAD_PARAMETERS;
  976|      0|    }
  977|       |
  978|       |    /* checking whether we need to realloc or discard extra bytes */
  979|  5.92M|    if (param->discard_overflow && (dst->writeb >= param->allocated)) {
  ------------------
  |  Branch (979:9): [True: 0, False: 5.92M]
  |  Branch (979:36): [True: 0, False: 0]
  ------------------
  980|      0|        return RNP_SUCCESS;
  981|      0|    }
  982|  5.92M|    if (param->discard_overflow && (dst->writeb + len > param->allocated)) {
  ------------------
  |  Branch (982:9): [True: 0, False: 5.92M]
  |  Branch (982:36): [True: 0, False: 0]
  ------------------
  983|      0|        len = param->allocated - dst->writeb;
  984|      0|    }
  985|       |
  986|  5.92M|    if (dst->writeb + len > param->allocated) {
  ------------------
  |  Branch (986:9): [True: 5.24M, False: 682k]
  ------------------
  987|  5.24M|        if ((param->maxalloc > 0) && (dst->writeb + len > param->maxalloc)) {
  ------------------
  |  Branch (987:13): [True: 0, False: 5.24M]
  |  Branch (987:38): [True: 0, False: 0]
  ------------------
  988|      0|            RNP_LOG("attempt to alloc more then allowed");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  989|      0|            return RNP_ERROR_OUT_OF_MEMORY;
  990|      0|        }
  991|       |
  992|       |        /* round up to the page boundary and do it exponentially */
  993|  5.24M|        size_t alloc = ((dst->writeb + len) * 2 + 4095) / 4096 * 4096;
  994|  5.24M|        if ((param->maxalloc > 0) && (alloc > param->maxalloc)) {
  ------------------
  |  Branch (994:13): [True: 0, False: 5.24M]
  |  Branch (994:38): [True: 0, False: 0]
  ------------------
  995|      0|            alloc = param->maxalloc;
  996|      0|        }
  997|       |
  998|  5.24M|        void *newalloc = param->secure ? calloc(1, alloc) : realloc(param->memory, alloc);
  ------------------
  |  Branch (998:26): [True: 0, False: 5.24M]
  ------------------
  999|  5.24M|        if (!newalloc) {
  ------------------
  |  Branch (999:13): [True: 0, False: 5.24M]
  ------------------
 1000|      0|            return RNP_ERROR_OUT_OF_MEMORY;
 1001|      0|        }
 1002|  5.24M|        if (param->secure && param->memory) {
  ------------------
  |  Branch (1002:13): [True: 0, False: 5.24M]
  |  Branch (1002:30): [True: 0, False: 0]
  ------------------
 1003|      0|            memcpy(newalloc, param->memory, dst->writeb);
 1004|      0|            secure_clear(param->memory, dst->writeb);
 1005|      0|            free(param->memory);
 1006|      0|        }
 1007|  5.24M|        param->memory = newalloc;
 1008|  5.24M|        param->allocated = alloc;
 1009|  5.24M|    }
 1010|       |
 1011|  5.92M|    memcpy((uint8_t *) param->memory + dst->writeb, buf, len);
 1012|  5.92M|    return RNP_SUCCESS;
 1013|  5.92M|}
stream-common.cpp:_ZL13mem_dst_closeP10pgp_dest_tb:
 1017|  5.24M|{
 1018|  5.24M|    pgp_dest_mem_param_t *param = (pgp_dest_mem_param_t *) dst->param;
 1019|  5.24M|    if (!param) {
  ------------------
  |  Branch (1019:9): [True: 0, False: 5.24M]
  ------------------
 1020|      0|        return;
 1021|      0|    }
 1022|       |
 1023|  5.24M|    if (param->free) {
  ------------------
  |  Branch (1023:9): [True: 5.24M, False: 0]
  ------------------
 1024|  5.24M|        if (param->secure) {
  ------------------
  |  Branch (1024:13): [True: 0, False: 5.24M]
  ------------------
 1025|      0|            secure_clear(param->memory, param->allocated);
 1026|      0|        }
 1027|  5.24M|        free(param->memory);
 1028|  5.24M|    }
 1029|  5.24M|    free(param);
 1030|       |    dst->param = NULL;
 1031|  5.24M|}

_ZN3rnp6SourceC2Ev:
  399|   228k|    Source() : src_({})
  400|   228k|    {
  401|   228k|    }
_ZN3rnp6SourceD2Ev:
  404|   228k|    {
  405|   228k|        src_.close();
  406|   228k|    }
_ZN3rnp6Source5readbEv:
  422|   206k|    {
  423|   206k|        return src().readb;
  424|   206k|    }
_ZN3rnp6Source3eofEv:
  428|   248k|    {
  429|   248k|        return src().eof();
  430|   248k|    }
_ZN3rnp6Source5errorEv:
  434|   133k|    {
  435|   133k|        return src().error();
  436|   133k|    }
_ZN3rnp4DestC2Ev:
  493|  5.24M|    Dest() : dst_({}), discard_(false)
  494|  5.24M|    {
  495|  5.24M|    }
_ZN3rnp4DestD2Ev:
  498|  5.24M|    {
  499|  5.24M|        dst_close(&dst_, discard_);
  500|  5.24M|    }
_ZN3rnp4Dest3dstEv:
  516|  5.24M|    {
  517|  5.24M|        return dst_;
  518|  5.24M|    }
_ZN3rnp4Dest6writebEv:
  522|  5.24M|    {
  523|  5.24M|        return dst_.writeb;
  524|  5.24M|    }
_ZN3rnp10MemoryDestC2EPvm:
  538|  5.24M|    MemoryDest(void *mem = NULL, size_t len = 0) : Dest()
  539|  5.24M|    {
  540|  5.24M|        auto res = init_mem_dest(&dst_, mem, len);
  541|  5.24M|        if (res) {
  ------------------
  |  Branch (541:13): [True: 0, False: 5.24M]
  ------------------
  542|      0|            throw std::bad_alloc();
  543|      0|        }
  544|  5.24M|        discard_ = true;
  545|  5.24M|    }
_ZN3rnp10MemoryDest6memoryEv:
  549|  5.24M|    {
  550|  5.24M|        return mem_dest_get_memory(&dst_);
  551|  5.24M|    }
_ZN3rnp10MemoryDest9to_vectorEv:
  561|  5.24M|    {
  562|  5.24M|        uint8_t *mem = (uint8_t *) memory();
  563|  5.24M|        return std::vector<uint8_t>(mem, mem + writeb());
  564|  5.24M|    }

_Z18process_pgp_subkeyR12pgp_source_tR25pgp_transferable_subkey_tb:
  130|   231k|{
  131|   231k|    int ptag;
  132|   231k|    subkey = pgp_transferable_subkey_t();
  133|   231k|    uint64_t keypos = src.readb;
  134|   231k|    if (!is_subkey_pkt(ptag = stream_pkt_type(src))) {
  ------------------
  |  Branch (134:9): [True: 0, False: 231k]
  ------------------
  135|      0|        RNP_LOG("wrong subkey ptag: %d at %" PRIu64, ptag, keypos);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  136|      0|        return RNP_ERROR_BAD_FORMAT;
  137|      0|    }
  138|       |
  139|   231k|    rnp_result_t ret = RNP_ERROR_BAD_FORMAT;
  140|   231k|    try {
  141|   231k|        ret = subkey.subkey.parse(src);
  142|   231k|    } catch (const std::exception &e) {
  143|      0|        RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  144|      0|        ret = RNP_ERROR_GENERIC;
  145|      0|    }
  146|   231k|    if (ret) {
  ------------------
  |  Branch (146:9): [True: 113k, False: 118k]
  ------------------
  147|   113k|        RNP_LOG("failed to parse subkey at %" PRIu64, keypos);
  ------------------
  |  |   76|   113k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|   113k|    do {                                                                                 \
  |  |  |  |   69|   113k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 113k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|   113k|            break;                                                                       \
  |  |  |  |   71|   113k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  148|   113k|        subkey.subkey = {};
  149|   113k|        return ret;
  150|   113k|    }
  151|       |
  152|   118k|    if (!skip_pgp_packets(src, {PGP_PKT_TRUST})) {
  ------------------
  |  Branch (152:9): [True: 220, False: 117k]
  ------------------
  153|    220|        return RNP_ERROR_READ;
  154|    220|    }
  155|       |
  156|   117k|    return process_pgp_key_signatures(src, subkey.signatures, skiperrors);
  157|   118k|}
_Z20process_pgp_key_autoR12pgp_source_tR22pgp_transferable_key_tbb:
  164|   242k|{
  165|   242k|    key = {};
  166|   242k|    uint64_t srcpos = src.readb;
  167|   242k|    int      ptag = stream_pkt_type(src);
  168|   242k|    if (is_subkey_pkt(ptag) && allowsub) {
  ------------------
  |  Branch (168:9): [True: 18.0k, False: 224k]
  |  Branch (168:32): [True: 17.7k, False: 336]
  ------------------
  169|  17.7k|        pgp_transferable_subkey_t subkey;
  170|  17.7k|        rnp_result_t              ret = process_pgp_subkey(src, subkey, skiperrors);
  171|  17.7k|        if (subkey.subkey.tag != PGP_PKT_RESERVED) {
  ------------------
  |  Branch (171:13): [True: 4.84k, False: 12.8k]
  ------------------
  172|  4.84k|            try {
  173|  4.84k|                key.subkeys.push_back(std::move(subkey));
  174|  4.84k|            } catch (const std::exception &e) {
  175|      0|                RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  176|      0|                ret = RNP_ERROR_OUT_OF_MEMORY;
  177|      0|            }
  178|  4.84k|        }
  179|       |        /* change error code if we didn't process anything at all */
  180|  17.7k|        if (srcpos == src.readb) {
  ------------------
  |  Branch (180:13): [True: 0, False: 17.7k]
  ------------------
  181|      0|            ret = RNP_ERROR_BAD_STATE;
  182|      0|        }
  183|  17.7k|        return ret;
  184|  17.7k|    }
  185|       |
  186|   224k|    rnp_result_t ret = RNP_ERROR_BAD_FORMAT;
  187|   224k|    if (!is_primary_key_pkt(ptag)) {
  ------------------
  |  Branch (187:9): [True: 15.0k, False: 209k]
  ------------------
  188|  15.0k|        RNP_LOG("wrong key tag: %d at pos %" PRIu64, ptag, src.readb);
  ------------------
  |  |   76|  15.0k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  15.0k|    do {                                                                                 \
  |  |  |  |   69|  15.0k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 15.0k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  15.0k|            break;                                                                       \
  |  |  |  |   71|  15.0k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  189|   209k|    } else {
  190|   209k|        try {
  191|   209k|            ret = process_pgp_key(src, key, skiperrors);
  192|   209k|        } catch (const rnp::rnp_exception &e) {
  193|  3.61k|            RNP_LOG("%s", e.what());
  ------------------
  |  |   76|  3.61k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  3.61k|    do {                                                                                 \
  |  |  |  |   69|  3.61k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 3.61k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  3.61k|            break;                                                                       \
  |  |  |  |   71|  3.61k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  194|  3.61k|            ret = e.code();
  195|  3.61k|        } catch (const std::exception &e) {
  196|      0|            RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|      0|            ret = RNP_ERROR_GENERIC;
  198|      0|        }
  199|   209k|    }
  200|   224k|    if (skiperrors && (ret == RNP_ERROR_BAD_FORMAT) &&
  ------------------
  |  Branch (200:9): [True: 167k, False: 56.8k]
  |  Branch (200:9): [True: 1.93k, False: 222k]
  |  Branch (200:23): [True: 64.1k, False: 103k]
  ------------------
  201|  64.1k|        !skip_pgp_packets(src,
  ------------------
  |  Branch (201:9): [True: 1.93k, False: 62.2k]
  ------------------
  202|  64.1k|                          {PGP_PKT_TRUST,
  203|  64.1k|                           PGP_PKT_SIGNATURE,
  204|  64.1k|                           PGP_PKT_USER_ID,
  205|  64.1k|                           PGP_PKT_USER_ATTR,
  206|  64.1k|                           PGP_PKT_PUBLIC_SUBKEY,
  207|  64.1k|                           PGP_PKT_SECRET_SUBKEY})) {
  208|  1.93k|        ret = RNP_ERROR_READ;
  209|  1.93k|    }
  210|       |    /* change error code if we didn't process anything at all */
  211|   224k|    if (srcpos == src.readb) {
  ------------------
  |  Branch (211:9): [True: 5.96k, False: 218k]
  ------------------
  212|  5.96k|        ret = RNP_ERROR_BAD_STATE;
  213|  5.96k|    }
  214|   224k|    return ret;
  215|   224k|}
_Z16process_pgp_keysR12pgp_source_tR18pgp_key_sequence_tb:
  219|  18.7k|{
  220|  18.7k|    bool has_secret = false;
  221|  18.7k|    bool has_public = false;
  222|       |
  223|  18.7k|    keys.keys.clear();
  224|       |    /* create maybe-armored stream */
  225|  18.7k|    rnp::ArmoredSource armor(
  226|  18.7k|      src, rnp::ArmoredSource::AllowBinary | rnp::ArmoredSource::AllowMultiple);
  227|       |
  228|       |    /* read sequence of transferable OpenPGP keys as described in RFC 4880, 11.1 - 11.2 */
  229|   125k|    while (!armor.error()) {
  ------------------
  |  Branch (229:12): [True: 124k, False: 1.00k]
  ------------------
  230|       |        /* Allow multiple armored messages in a single stream */
  231|   124k|        if (armor.eof() && armor.multiple()) {
  ------------------
  |  Branch (231:13): [True: 23.3k, False: 101k]
  |  Branch (231:28): [True: 14.8k, False: 8.50k]
  ------------------
  232|  14.8k|            armor.restart();
  233|  14.8k|        }
  234|   124k|        if (armor.eof()) {
  ------------------
  |  Branch (234:13): [True: 8.75k, False: 115k]
  ------------------
  235|  8.75k|            break;
  236|  8.75k|        }
  237|       |        /* Attempt to read the next key */
  238|   115k|        pgp_transferable_key_t curkey;
  239|   115k|        rnp_result_t ret = process_pgp_key_auto(armor.src(), curkey, false, skiperrors);
  240|   115k|        if (ret && (!skiperrors || (ret != RNP_ERROR_BAD_FORMAT))) {
  ------------------
  |  Branch (240:13): [True: 44.4k, False: 71.2k]
  |  Branch (240:21): [True: 5.81k, False: 38.6k]
  |  Branch (240:36): [True: 3.16k, False: 35.4k]
  ------------------
  241|  8.97k|            keys.keys.clear();
  242|  8.97k|            return ret;
  243|  8.97k|        }
  244|       |        /* check whether we actually read any key or just skipped erroneous packets */
  245|   106k|        if (curkey.key.tag == PGP_PKT_RESERVED) {
  ------------------
  |  Branch (245:13): [True: 35.2k, False: 71.4k]
  ------------------
  246|  35.2k|            continue;
  247|  35.2k|        }
  248|  71.4k|        has_secret |= (curkey.key.tag == PGP_PKT_SECRET_KEY);
  249|  71.4k|        has_public |= (curkey.key.tag == PGP_PKT_PUBLIC_KEY);
  250|       |
  251|  71.4k|        keys.keys.emplace_back(std::move(curkey));
  252|  71.4k|    }
  253|       |
  254|  9.76k|    if (has_secret && has_public) {
  ------------------
  |  Branch (254:9): [True: 2.45k, False: 7.31k]
  |  Branch (254:23): [True: 398, False: 2.05k]
  ------------------
  255|    398|        RNP_LOG("warning! public keys are mixed together with secret ones!");
  ------------------
  |  |   76|    398|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    398|    do {                                                                                 \
  |  |  |  |   69|    398|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 398, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    398|            break;                                                                       \
  |  |  |  |   71|    398|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  256|    398|    }
  257|       |
  258|  9.76k|    if (armor.error()) {
  ------------------
  |  Branch (258:9): [True: 0, False: 9.76k]
  ------------------
  259|      0|        keys.keys.clear();
  260|      0|        return RNP_ERROR_READ;
  261|      0|    }
  262|  9.76k|    return RNP_SUCCESS;
  263|  9.76k|}
_Z15process_pgp_keyR12pgp_source_tR22pgp_transferable_key_tb:
  267|   209k|{
  268|   209k|    key = pgp_transferable_key_t();
  269|       |    /* create maybe-armored stream */
  270|   209k|    rnp::ArmoredSource armor(
  271|   209k|      src, rnp::ArmoredSource::AllowBinary | rnp::ArmoredSource::AllowMultiple);
  272|       |
  273|       |    /* main key packet */
  274|   209k|    uint64_t keypos = armor.readb();
  275|   209k|    int      ptag = stream_pkt_type(armor.src());
  276|   209k|    if ((ptag <= 0) || !is_primary_key_pkt(ptag)) {
  ------------------
  |  Branch (276:9): [True: 6.94k, False: 202k]
  |  Branch (276:24): [True: 395, False: 202k]
  ------------------
  277|  3.72k|        RNP_LOG("wrong key packet tag: %d at %" PRIu64, ptag, keypos);
  ------------------
  |  |   76|  3.72k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  3.72k|    do {                                                                                 \
  |  |  |  |   69|  3.72k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 3.72k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  3.72k|            break;                                                                       \
  |  |  |  |   71|  3.72k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  278|  3.72k|        return RNP_ERROR_BAD_FORMAT;
  279|  3.72k|    }
  280|       |
  281|   205k|    rnp_result_t ret = key.key.parse(armor.src());
  282|   205k|    if (ret) {
  ------------------
  |  Branch (282:9): [True: 49.0k, False: 156k]
  ------------------
  283|  49.0k|        RNP_LOG("failed to parse key pkt at %" PRIu64, keypos);
  ------------------
  |  |   76|  49.0k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  49.0k|    do {                                                                                 \
  |  |  |  |   69|  49.0k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 49.0k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  49.0k|            break;                                                                       \
  |  |  |  |   71|  49.0k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|  49.0k|        key.key = {};
  285|  49.0k|        return ret;
  286|  49.0k|    }
  287|       |
  288|   156k|    if (!skip_pgp_packets(armor.src(), {PGP_PKT_TRUST})) {
  ------------------
  |  Branch (288:9): [True: 169, False: 156k]
  ------------------
  289|    169|        return RNP_ERROR_READ;
  290|    169|    }
  291|       |
  292|       |    /* direct-key signatures */
  293|   156k|    if ((ret = process_pgp_key_signatures(armor.src(), key.signatures, skiperrors))) {
  ------------------
  |  Branch (293:9): [True: 2.29k, False: 154k]
  ------------------
  294|  2.29k|        return ret;
  295|  2.29k|    }
  296|       |
  297|       |    /* user ids/attrs with signatures */
  298|  8.01M|    while ((ptag = stream_pkt_type(armor.src())) > 0) {
  ------------------
  |  Branch (298:12): [True: 7.98M, False: 29.0k]
  ------------------
  299|  7.98M|        if ((ptag != PGP_PKT_USER_ID) && (ptag != PGP_PKT_USER_ATTR)) {
  ------------------
  |  Branch (299:13): [True: 188k, False: 7.80M]
  |  Branch (299:42): [True: 122k, False: 65.6k]
  ------------------
  300|   122k|            break;
  301|   122k|        }
  302|       |
  303|  7.86M|        pgp_transferable_userid_t uid;
  304|  7.86M|        ret = process_pgp_userid(armor.src(), uid, skiperrors);
  305|  7.86M|        if ((ret == RNP_ERROR_BAD_FORMAT) && skiperrors &&
  ------------------
  |  Branch (305:13): [True: 3.38k, False: 7.86M]
  |  Branch (305:13): [True: 1.76k, False: 7.86M]
  |  Branch (305:46): [True: 1.99k, False: 1.38k]
  ------------------
  306|  1.99k|            skip_pgp_packets(armor.src(), {PGP_PKT_TRUST, PGP_PKT_SIGNATURE})) {
  ------------------
  |  Branch (306:13): [True: 1.76k, False: 225]
  ------------------
  307|       |            /* skip malformed uid */
  308|  1.76k|            continue;
  309|  1.76k|        }
  310|  7.86M|        if (ret) {
  ------------------
  |  Branch (310:13): [True: 2.64k, False: 7.86M]
  ------------------
  311|  2.64k|            return ret;
  312|  2.64k|        }
  313|  7.86M|        key.userids.push_back(std::move(uid));
  314|  7.86M|    }
  315|       |
  316|       |    /* subkeys with signatures */
  317|   359k|    while ((ptag = stream_pkt_type(armor.src())) > 0) {
  ------------------
  |  Branch (317:12): [True: 310k, False: 48.4k]
  ------------------
  318|   310k|        if (!is_subkey_pkt(ptag)) {
  ------------------
  |  Branch (318:13): [True: 102k, False: 208k]
  ------------------
  319|   102k|            break;
  320|   102k|        }
  321|       |
  322|   208k|        pgp_transferable_subkey_t subkey;
  323|   208k|        ret = process_pgp_subkey(armor.src(), subkey, skiperrors);
  324|   208k|        if ((ret == RNP_ERROR_BAD_FORMAT) && skiperrors &&
  ------------------
  |  Branch (324:13): [True: 97.9k, False: 110k]
  |  Branch (324:13): [True: 97.0k, False: 111k]
  |  Branch (324:46): [True: 97.2k, False: 716]
  ------------------
  325|  97.2k|            skip_pgp_packets(armor.src(), {PGP_PKT_TRUST, PGP_PKT_SIGNATURE})) {
  ------------------
  |  Branch (325:13): [True: 97.0k, False: 139]
  ------------------
  326|       |            /* skip malformed subkey */
  327|  97.0k|            continue;
  328|  97.0k|        }
  329|   111k|        if (ret) {
  ------------------
  |  Branch (329:13): [True: 1.23k, False: 110k]
  ------------------
  330|  1.23k|            return ret;
  331|  1.23k|        }
  332|   110k|        key.subkeys.emplace_back(std::move(subkey));
  333|   110k|    }
  334|   150k|    return ptag >= 0 ? RNP_SUCCESS : RNP_ERROR_BAD_FORMAT;
  ------------------
  |  Branch (334:12): [True: 146k, False: 3.61k]
  ------------------
  335|   151k|}
_Z18decrypt_secret_keyP13pgp_key_pkt_tPKc:
  466|  14.2k|{
  467|  14.2k|    if (!key) {
  ------------------
  |  Branch (467:9): [True: 0, False: 14.2k]
  ------------------
  468|      0|        return RNP_ERROR_NULL_POINTER;
  469|      0|    }
  470|  14.2k|    if (!is_secret_key_pkt(key->tag)) {
  ------------------
  |  Branch (470:9): [True: 0, False: 14.2k]
  ------------------
  471|      0|        return RNP_ERROR_BAD_PARAMETERS;
  472|      0|    }
  473|       |    /* mark material as not validated as it may be valid for public part */
  474|  14.2k|    key->material->reset_validity();
  475|       |
  476|       |    /* check whether data is not encrypted */
  477|  14.2k|    if (!key->sec_protection.s2k.usage) {
  ------------------
  |  Branch (477:9): [True: 14.2k, False: 0]
  ------------------
  478|  14.2k|        return parse_secret_key_mpis(*key, key->sec_data.data(), key->sec_data.size());
  479|  14.2k|    }
  480|       |
  481|       |    /* check whether secret key data present */
  482|      0|    if (key->sec_data.empty()) {
  ------------------
  |  Branch (482:9): [True: 0, False: 0]
  ------------------
  483|      0|        RNP_LOG("No secret key data");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  484|      0|        return RNP_ERROR_BAD_PARAMETERS;
  485|      0|    }
  486|       |
  487|       |    /* data is encrypted */
  488|      0|    if (!password) {
  ------------------
  |  Branch (488:9): [True: 0, False: 0]
  ------------------
  489|      0|        return RNP_ERROR_NULL_POINTER;
  490|      0|    }
  491|       |
  492|      0|    if (key->sec_protection.cipher_mode != PGP_CIPHER_MODE_CFB) {
  ------------------
  |  Branch (492:9): [True: 0, False: 0]
  ------------------
  493|      0|        RNP_LOG("unsupported secret key encryption mode");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  494|      0|        return RNP_ERROR_BAD_PARAMETERS;
  495|      0|    }
  496|       |
  497|      0|    rnp::secure_array<uint8_t, PGP_MAX_KEY_SIZE> keybuf;
  498|      0|    size_t keysize = pgp_key_size(key->sec_protection.symm_alg);
  499|      0|    if (!keysize ||
  ------------------
  |  Branch (499:9): [True: 0, False: 0]
  ------------------
  500|      0|        !pgp_s2k_derive_key(&key->sec_protection.s2k, password, keybuf.data(), keysize)) {
  ------------------
  |  Branch (500:9): [True: 0, False: 0]
  ------------------
  501|      0|        RNP_LOG("failed to derive key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  502|      0|        return RNP_ERROR_BAD_PARAMETERS;
  503|      0|    }
  504|       |
  505|      0|    try {
  506|      0|        rnp::secure_bytes decdata(key->sec_data.size(), 0);
  507|      0|        pgp_crypt_t       crypt;
  508|      0|        if (!pgp_cipher_cfb_start(
  ------------------
  |  Branch (508:13): [True: 0, False: 0]
  ------------------
  509|      0|              &crypt, key->sec_protection.symm_alg, keybuf.data(), key->sec_protection.iv)) {
  510|      0|            RNP_LOG("failed to start cfb decryption");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  511|      0|            return RNP_ERROR_DECRYPT_FAILED;
  512|      0|        }
  513|       |
  514|      0|        rnp_result_t ret = RNP_ERROR_GENERIC;
  515|      0|        switch (key->version) {
  516|      0|        case PGP_V3:
  ------------------
  |  Branch (516:9): [True: 0, False: 0]
  ------------------
  517|      0|            if (!is_rsa_key_alg(key->alg)) {
  ------------------
  |  Branch (517:17): [True: 0, False: 0]
  ------------------
  518|      0|                RNP_LOG("non-RSA v3 key");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  519|      0|                ret = RNP_ERROR_BAD_PARAMETERS;
  520|      0|                break;
  521|      0|            }
  522|      0|            ret = decrypt_secret_key_v3(
  523|      0|              &crypt, decdata.data(), key->sec_data.data(), key->sec_data.size());
  524|      0|            break;
  525|      0|#if defined(ENABLE_CRYPTO_REFRESH)
  526|      0|        case PGP_V6:
  ------------------
  |  Branch (526:9): [True: 0, False: 0]
  ------------------
  527|      0|            FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|      0|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  528|      0|#endif
  529|      0|        case PGP_V4:
  ------------------
  |  Branch (529:9): [True: 0, False: 0]
  ------------------
  530|      0|        case PGP_V5:
  ------------------
  |  Branch (530:9): [True: 0, False: 0]
  ------------------
  531|      0|            pgp_cipher_cfb_decrypt(
  532|      0|              &crypt, decdata.data(), key->sec_data.data(), key->sec_data.size());
  533|      0|            ret = RNP_SUCCESS;
  534|      0|            break;
  535|      0|        default:
  ------------------
  |  Branch (535:9): [True: 0, False: 0]
  ------------------
  536|      0|            ret = RNP_ERROR_BAD_PARAMETERS;
  537|      0|        }
  538|       |
  539|      0|        pgp_cipher_cfb_finish(&crypt);
  540|      0|        if (ret) {
  ------------------
  |  Branch (540:13): [True: 0, False: 0]
  ------------------
  541|      0|            return ret;
  542|      0|        }
  543|       |
  544|      0|        return parse_secret_key_mpis(*key, decdata.data(), decdata.size());
  545|      0|    } catch (const std::exception &e) {
  546|      0|        RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  547|      0|        return RNP_ERROR_GENERIC;
  548|      0|    }
  549|      0|}
_ZNK16pgp_userid_pkt_teqERKS_:
  649|  65.8M|{
  650|  65.8M|    return (tag == src.tag) && (uid == src.uid);
  ------------------
  |  Branch (650:12): [True: 62.1M, False: 3.63M]
  |  Branch (650:32): [True: 2.69M, False: 59.4M]
  ------------------
  651|  65.8M|}
_ZNK16pgp_userid_pkt_t5writeER10pgp_dest_t:
  660|  4.67M|{
  661|  4.67M|    if ((tag != PGP_PKT_USER_ID) && (tag != PGP_PKT_USER_ATTR)) {
  ------------------
  |  Branch (661:9): [True: 34.2k, False: 4.64M]
  |  Branch (661:37): [True: 0, False: 34.2k]
  ------------------
  662|      0|        RNP_LOG("wrong userid tag");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  663|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  664|      0|    }
  665|       |
  666|  4.67M|    pgp_packet_body_t pktbody(tag);
  667|  4.67M|    pktbody.add(uid.data(), uid.size());
  668|  4.67M|    pktbody.write(dst);
  669|  4.67M|}
_ZN16pgp_userid_pkt_t5parseER12pgp_source_t:
  673|  7.86M|{
  674|       |    /* check the tag */
  675|  7.86M|    int stag = stream_pkt_type(src);
  676|  7.86M|    if ((stag != PGP_PKT_USER_ID) && (stag != PGP_PKT_USER_ATTR)) {
  ------------------
  |  Branch (676:9): [True: 65.6k, False: 7.80M]
  |  Branch (676:38): [True: 0, False: 65.6k]
  ------------------
  677|      0|        RNP_LOG("wrong userid tag: %d", stag);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  678|      0|        return RNP_ERROR_BAD_FORMAT;
  679|      0|    }
  680|       |
  681|  7.86M|    pgp_packet_body_t pkt(PGP_PKT_RESERVED);
  682|  7.86M|    rnp_result_t      res = pkt.read(src);
  683|  7.86M|    if (res) {
  ------------------
  |  Branch (683:9): [True: 2.26k, False: 7.86M]
  ------------------
  684|  2.26k|        return res;
  685|  2.26k|    }
  686|       |
  687|       |    /* userid type, i.e. tag */
  688|  7.86M|    tag = (pgp_pkt_type_t) stag;
  689|  7.86M|    uid.resize(pkt.size());
  690|  7.86M|    if (pkt.size()) {
  ------------------
  |  Branch (690:9): [True: 193k, False: 7.67M]
  ------------------
  691|   193k|        std::memcpy(uid.data(), pkt.data(), pkt.size());
  692|   193k|    }
  693|  7.86M|    return RNP_SUCCESS;
  694|  7.86M|}
_ZN13pgp_key_pkt_tC2ERKS_b:
  697|   808k|{
  698|   808k|    if (pubonly && is_secret_key_pkt(src.tag)) {
  ------------------
  |  Branch (698:9): [True: 180k, False: 627k]
  |  Branch (698:20): [True: 47.7k, False: 132k]
  ------------------
  699|  47.7k|        tag = (src.tag == PGP_PKT_SECRET_KEY) ? PGP_PKT_PUBLIC_KEY : PGP_PKT_PUBLIC_SUBKEY;
  ------------------
  |  Branch (699:15): [True: 23.6k, False: 24.1k]
  ------------------
  700|   760k|    } else {
  701|   760k|        tag = src.tag;
  702|   760k|    }
  703|   808k|    version = src.version;
  704|   808k|    creation_time = src.creation_time;
  705|   808k|    alg = src.alg;
  706|   808k|    v3_days = src.v3_days;
  707|   808k|    v5_pub_len = src.v5_pub_len;
  708|   808k|    pub_data = src.pub_data;
  709|   808k|    material = src.material ? src.material->clone() : nullptr;
  ------------------
  |  Branch (709:16): [True: 808k, False: 0]
  ------------------
  710|   808k|    if (pubonly) {
  ------------------
  |  Branch (710:9): [True: 180k, False: 627k]
  ------------------
  711|   180k|        if (material) {
  ------------------
  |  Branch (711:13): [True: 180k, False: 0]
  ------------------
  712|   180k|            material->clear_secret();
  713|   180k|        }
  714|   180k|        sec_data.resize(0);
  715|   180k|        v5_s2k_len = 0;
  716|   180k|        v5_sec_len = 0;
  717|   180k|        sec_protection = {};
  718|   180k|        return;
  719|   180k|    }
  720|   627k|    sec_data = src.sec_data;
  721|   627k|    v5_s2k_len = src.v5_s2k_len;
  722|   627k|    v5_sec_len = src.v5_sec_len;
  723|   627k|    sec_protection = src.sec_protection;
  724|   627k|}
_ZN13pgp_key_pkt_taSEOS_:
  744|   997k|{
  745|   997k|    if (this == &src) {
  ------------------
  |  Branch (745:9): [True: 0, False: 997k]
  ------------------
  746|      0|        return *this;
  747|      0|    }
  748|   997k|    tag = src.tag;
  749|   997k|    version = src.version;
  750|   997k|    creation_time = src.creation_time;
  751|   997k|    alg = src.alg;
  752|   997k|    v3_days = src.v3_days;
  753|   997k|    pub_data = std::move(src.pub_data);
  754|   997k|    material = std::move(src.material);
  755|   997k|    secure_clear(sec_data.data(), sec_data.size());
  756|   997k|    sec_data = std::move(src.sec_data);
  757|   997k|    sec_protection = src.sec_protection;
  758|   997k|    return *this;
  759|   997k|}
_ZN13pgp_key_pkt_taSERKS_:
  763|   941k|{
  764|   941k|    if (this == &src) {
  ------------------
  |  Branch (764:9): [True: 0, False: 941k]
  ------------------
  765|      0|        return *this;
  766|      0|    }
  767|   941k|    tag = src.tag;
  768|   941k|    version = src.version;
  769|   941k|    creation_time = src.creation_time;
  770|   941k|    alg = src.alg;
  771|   941k|    v3_days = src.v3_days;
  772|   941k|    pub_data = src.pub_data;
  773|   941k|    material = src.material ? src.material->clone() : nullptr;
  ------------------
  |  Branch (773:16): [True: 258k, False: 683k]
  ------------------
  774|   941k|    secure_clear(sec_data.data(), sec_data.size());
  775|   941k|    sec_data = std::move(src.sec_data);
  776|   941k|    sec_protection = src.sec_protection;
  777|   941k|    return *this;
  778|   941k|}
_ZN13pgp_key_pkt_tD2Ev:
  781|  3.22M|{
  782|  3.22M|    secure_clear(sec_data.data(), sec_data.size());
  783|  3.22M|}
_ZN13pgp_key_pkt_t17s2k_specifier_lenE19pgp_s2k_specifier_t:
  788|  1.85k|{
  789|  1.85k|    switch (specifier) {
  790|  1.04k|    case PGP_S2KS_SIMPLE:
  ------------------
  |  Branch (790:5): [True: 1.04k, False: 812]
  ------------------
  791|  1.04k|        return 2;
  792|    444|    case PGP_S2KS_SALTED:
  ------------------
  |  Branch (792:5): [True: 444, False: 1.41k]
  ------------------
  793|    444|        return 10;
  794|    352|    case PGP_S2KS_ITERATED_AND_SALTED:
  ------------------
  |  Branch (794:5): [True: 352, False: 1.50k]
  ------------------
  795|    352|        return 11;
  796|     16|    default:
  ------------------
  |  Branch (796:5): [True: 16, False: 1.84k]
  ------------------
  797|     16|        RNP_LOG("invalid specifier");
  ------------------
  |  |   76|     16|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     16|    do {                                                                                 \
  |  |  |  |   69|     16|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 16, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     16|            break;                                                                       \
  |  |  |  |   71|     16|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  798|     16|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  799|  1.85k|    }
  800|  1.85k|}
_ZN13pgp_key_pkt_t15make_s2k_paramsER17pgp_packet_body_t:
  805|  59.5k|{
  806|  59.5k|    switch (sec_protection.s2k.usage) {
  807|  12.8k|    case PGP_S2KU_NONE:
  ------------------
  |  Branch (807:5): [True: 12.8k, False: 46.6k]
  ------------------
  808|  12.8k|        break;
  809|  14.2k|    case PGP_S2KU_ENCRYPTED_AND_HASHED:
  ------------------
  |  Branch (809:5): [True: 14.2k, False: 45.2k]
  ------------------
  810|  46.6k|    case PGP_S2KU_ENCRYPTED: {
  ------------------
  |  Branch (810:5): [True: 32.3k, False: 27.1k]
  ------------------
  811|  46.6k|        hbody.add_byte(sec_protection.symm_alg);
  812|  46.6k|#if defined(ENABLE_CRYPTO_REFRESH)
  813|  46.6k|        if (version == PGP_V6) {
  ------------------
  |  Branch (813:13): [True: 1.85k, False: 44.7k]
  ------------------
  814|       |            // V6 packages contain length of the following field
  815|  1.85k|            hbody.add_byte(s2k_specifier_len(sec_protection.s2k.specifier));
  816|  1.85k|        }
  817|  46.6k|#endif
  818|  46.6k|        hbody.add(sec_protection.s2k);
  819|  46.6k|        if (sec_protection.s2k.specifier != PGP_S2KS_EXPERIMENTAL) {
  ------------------
  |  Branch (819:13): [True: 18.7k, False: 27.9k]
  ------------------
  820|  18.7k|            size_t blsize = pgp_block_size(sec_protection.symm_alg);
  821|  18.7k|            if (!blsize) {
  ------------------
  |  Branch (821:17): [True: 0, False: 18.7k]
  ------------------
  822|      0|                RNP_LOG("wrong block size");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  823|      0|                throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  824|      0|            }
  825|  18.7k|            hbody.add(sec_protection.iv, blsize);
  826|  18.7k|        }
  827|  46.6k|        break;
  828|  46.6k|    }
  829|  46.6k|    default:
  ------------------
  |  Branch (829:5): [True: 0, False: 59.5k]
  ------------------
  830|      0|        RNP_LOG("wrong s2k usage");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  831|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  832|  59.5k|    }
  833|  59.5k|}
_ZN13pgp_key_pkt_t5writeER10pgp_dest_t:
  837|   361k|{
  838|   361k|    if (!is_key_pkt(tag)) {
  ------------------
  |  Branch (838:9): [True: 0, False: 361k]
  ------------------
  839|      0|        RNP_LOG("wrong key tag");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  840|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  841|      0|    }
  842|   361k|    if (pub_data.empty()) {
  ------------------
  |  Branch (842:9): [True: 0, False: 361k]
  ------------------
  843|      0|        fill_hashed_data();
  844|      0|    }
  845|       |
  846|   361k|    pgp_packet_body_t pktbody(tag);
  847|       |    /* all public key data is written in hashed_data */
  848|   361k|    pktbody.add(pub_data);
  849|       |    /* if we have public key then we do not need further processing */
  850|   361k|    if (!is_secret_key_pkt(tag)) {
  ------------------
  |  Branch (850:9): [True: 302k, False: 59.5k]
  ------------------
  851|   302k|        pktbody.write(dst);
  852|   302k|        return;
  853|   302k|    }
  854|       |
  855|       |    /* secret key fields should be pre-populated in sec_data field */
  856|  59.5k|    if ((sec_protection.s2k.specifier != PGP_S2KS_EXPERIMENTAL) && sec_data.empty()) {
  ------------------
  |  Branch (856:9): [True: 31.6k, False: 27.9k]
  |  Branch (856:68): [True: 38, False: 31.6k]
  ------------------
  857|     38|        RNP_LOG("secret key data is not populated");
  ------------------
  |  |   76|     38|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     38|    do {                                                                                 \
  |  |  |  |   69|     38|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 38, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     38|            break;                                                                       \
  |  |  |  |   71|     38|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  858|     38|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  859|     38|    }
  860|  59.5k|    pktbody.add_byte(sec_protection.s2k.usage);
  861|  59.5k|    if (version == PGP_V5) {
  ------------------
  |  Branch (861:9): [True: 643, False: 58.8k]
  ------------------
  862|    643|        pktbody.add_byte(v5_s2k_len);
  863|    643|    }
  864|       |
  865|  59.5k|    pgp_packet_body_t s2k_params(tag);
  866|  59.5k|    make_s2k_params(s2k_params);
  867|  59.5k|#if defined(ENABLE_CRYPTO_REFRESH)
  868|  59.5k|    if ((version == PGP_V6) && (sec_protection.s2k.usage != PGP_S2KU_NONE)) {
  ------------------
  |  Branch (868:9): [True: 4.53k, False: 54.9k]
  |  Branch (868:32): [True: 1.84k, False: 2.68k]
  ------------------
  869|       |        // V6 packages contain the count of the optional 1-byte parameters
  870|  1.84k|        pktbody.add_byte(s2k_params.size());
  871|  1.84k|    }
  872|  59.5k|#endif
  873|  59.5k|    pktbody.add(s2k_params.data(), s2k_params.size());
  874|       |
  875|  59.5k|    if (version == PGP_V5) {
  ------------------
  |  Branch (875:9): [True: 643, False: 58.8k]
  ------------------
  876|    643|        pktbody.add_uint32(sec_data.size());
  877|    643|    }
  878|       |    /* if key is stored on card, or exported via gpg --export-secret-subkeys, then
  879|       |     * sec_data is empty */
  880|  59.5k|    pktbody.add(sec_data);
  881|  59.5k|    pktbody.write(dst);
  882|  59.5k|}
_ZN13pgp_key_pkt_t5parseER12pgp_source_t:
  886|   434k|{
  887|       |    /* check the key tag */
  888|   434k|    int atag = stream_pkt_type(src);
  889|   434k|    if (!is_key_pkt(atag)) {
  ------------------
  |  Branch (889:9): [True: 0, False: 434k]
  ------------------
  890|      0|        RNP_LOG("wrong key packet tag: %d", atag);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  891|      0|        return RNP_ERROR_BAD_FORMAT;
  892|      0|    }
  893|       |
  894|   434k|#if defined(ENABLE_CRYPTO_REFRESH) || defined(ENABLE_PQC)
  895|   434k|    std::vector<uint8_t> tmpbuf;
  896|   434k|#endif
  897|       |
  898|   434k|    pgp_packet_body_t pkt((pgp_pkt_type_t) atag);
  899|       |    /* Read the packet into memory */
  900|   434k|    rnp_result_t res = pkt.read(src);
  901|   434k|    if (res) {
  ------------------
  |  Branch (901:9): [True: 4.38k, False: 429k]
  ------------------
  902|  4.38k|        return res;
  903|  4.38k|    }
  904|       |    /* key type, i.e. tag */
  905|   429k|    tag = (pgp_pkt_type_t) atag;
  906|       |    /* version */
  907|   429k|    uint8_t ver = 0;
  908|   429k|    if (!pkt.get(ver)) {
  ------------------
  |  Branch (908:9): [True: 93.5k, False: 336k]
  ------------------
  909|  93.5k|        RNP_LOG("unable to retrieve key packet version");
  ------------------
  |  |   76|  93.5k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  93.5k|    do {                                                                                 \
  |  |  |  |   69|  93.5k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 93.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  93.5k|            break;                                                                       \
  |  |  |  |   71|  93.5k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  910|  93.5k|        return RNP_ERROR_BAD_FORMAT;
  911|  93.5k|    }
  912|   336k|    switch (ver) {
  913|  4.83k|    case PGP_V2:
  ------------------
  |  Branch (913:5): [True: 4.83k, False: 331k]
  ------------------
  914|  4.83k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  4.83k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  915|  19.3k|    case PGP_V3:
  ------------------
  |  Branch (915:5): [True: 14.5k, False: 321k]
  ------------------
  916|  19.3k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  19.3k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  917|   304k|    case PGP_V4:
  ------------------
  |  Branch (917:5): [True: 284k, False: 51.2k]
  ------------------
  918|   304k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|   304k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  919|   306k|    case PGP_V5:
  ------------------
  |  Branch (919:5): [True: 2.67k, False: 333k]
  ------------------
  920|   306k|        break;
  921|      0|#if defined(ENABLE_CRYPTO_REFRESH)
  922|  15.7k|    case PGP_V6:
  ------------------
  |  Branch (922:5): [True: 15.7k, False: 320k]
  ------------------
  923|  15.7k|        break;
  924|      0|#endif
  925|  13.4k|    default:
  ------------------
  |  Branch (925:5): [True: 13.4k, False: 322k]
  ------------------
  926|  13.4k|        RNP_LOG("wrong key packet version");
  ------------------
  |  |   76|  13.4k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  13.4k|    do {                                                                                 \
  |  |  |  |   69|  13.4k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 13.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  13.4k|            break;                                                                       \
  |  |  |  |   71|  13.4k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  927|  13.4k|        return RNP_ERROR_BAD_FORMAT;
  928|   336k|    }
  929|   322k|    version = (pgp_version_t) ver;
  930|       |    /* creation time */
  931|   322k|    if (!pkt.get(creation_time)) {
  ------------------
  |  Branch (931:9): [True: 170, False: 322k]
  ------------------
  932|    170|        return RNP_ERROR_BAD_FORMAT;
  933|    170|    }
  934|       |    /* v3: validity days */
  935|   322k|    if ((version < PGP_V4) && !pkt.get(v3_days)) {
  ------------------
  |  Branch (935:9): [True: 19.2k, False: 303k]
  |  Branch (935:31): [True: 235, False: 19.0k]
  ------------------
  936|    235|        return RNP_ERROR_BAD_FORMAT;
  937|    235|    }
  938|       |    /* key algorithm */
  939|   322k|    uint8_t analg = 0;
  940|   322k|    if (!pkt.get(analg)) {
  ------------------
  |  Branch (940:9): [True: 74, False: 322k]
  ------------------
  941|     74|        return RNP_ERROR_BAD_FORMAT;
  942|     74|    }
  943|   322k|    alg = (pgp_pubkey_alg_t) analg;
  944|   322k|    material = pgp::KeyMaterial::create(alg);
  945|   322k|    if (!material) {
  ------------------
  |  Branch (945:9): [True: 9.14k, False: 312k]
  ------------------
  946|  9.14k|        RNP_LOG("unknown key algorithm: %d", (int) alg);
  ------------------
  |  |   76|  9.14k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  9.14k|    do {                                                                                 \
  |  |  |  |   69|  9.14k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 9.14k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  9.14k|            break;                                                                       \
  |  |  |  |   71|  9.14k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  947|  9.14k|        return RNP_ERROR_BAD_FORMAT;
  948|  9.14k|    }
  949|   312k|    switch (version) {
  950|  4.20k|    case PGP_V2:
  ------------------
  |  Branch (950:5): [True: 4.20k, False: 308k]
  ------------------
  951|  18.2k|    case PGP_V3:
  ------------------
  |  Branch (951:5): [True: 14.0k, False: 298k]
  ------------------
  952|       |        /* v3 keys must be RSA-only */
  953|  18.2k|        if (!is_rsa_key_alg(alg)) {
  ------------------
  |  Branch (953:13): [True: 307, False: 17.9k]
  ------------------
  954|    307|            RNP_LOG("wrong v3 pk algorithm");
  ------------------
  |  |   76|    307|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    307|    do {                                                                                 \
  |  |  |  |   69|    307|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 307, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    307|            break;                                                                       \
  |  |  |  |   71|    307|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  955|    307|            return RNP_ERROR_BAD_FORMAT;
  956|    307|        }
  957|  17.9k|        break;
  958|  17.9k|    case PGP_V5:
  ------------------
  |  Branch (958:5): [True: 2.56k, False: 310k]
  ------------------
  959|  2.56k|#if defined(ENABLE_CRYPTO_REFRESH)
  960|  18.0k|    case PGP_V6:
  ------------------
  |  Branch (960:5): [True: 15.5k, False: 297k]
  ------------------
  961|  18.0k|#endif
  962|       |        /* v5-v6 public key material length  */
  963|  18.0k|        if (!pkt.get(v5_pub_len)) {
  ------------------
  |  Branch (963:13): [True: 235, False: 17.8k]
  ------------------
  964|    235|            RNP_LOG("failed to get v5 octet count field");
  ------------------
  |  |   76|    235|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    235|    do {                                                                                 \
  |  |  |  |   69|    235|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 235, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    235|            break;                                                                       \
  |  |  |  |   71|    235|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  965|    235|            return RNP_ERROR_BAD_FORMAT;
  966|    235|        }
  967|  17.8k|        if (is_public_key_pkt(atag) && (v5_pub_len != pkt.left())) {
  ------------------
  |  Branch (967:13): [True: 9.11k, False: 8.72k]
  |  Branch (967:40): [True: 538, False: 8.57k]
  ------------------
  968|    538|            RNP_LOG("v5 octet count mismatch");
  ------------------
  |  |   76|    538|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    538|    do {                                                                                 \
  |  |  |  |   69|    538|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 538, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    538|            break;                                                                       \
  |  |  |  |   71|    538|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  969|    538|            return RNP_ERROR_BAD_FORMAT;
  970|    538|        }
  971|  17.3k|        break;
  972|   276k|    default:;
  ------------------
  |  Branch (972:5): [True: 276k, False: 36.3k]
  ------------------
  973|   312k|    }
  974|       |
  975|       |    /* algorithm specific fields */
  976|   311k|    if (!material->parse(pkt)) {
  ------------------
  |  Branch (976:9): [True: 35.0k, False: 276k]
  ------------------
  977|  35.0k|        return RNP_ERROR_BAD_FORMAT;
  978|  35.0k|    }
  979|       |
  980|       |    /* fill hashed data used for signatures */
  981|   276k|    pub_data.assign(pkt.data(), pkt.data() + pkt.size() - pkt.left());
  982|       |
  983|       |    /* secret key fields if any */
  984|   276k|    if (is_secret_key_pkt(tag)) {
  ------------------
  |  Branch (984:9): [True: 94.6k, False: 182k]
  ------------------
  985|  94.6k|        uint8_t usage = 0;
  986|  94.6k|        if (!pkt.get(usage)) {
  ------------------
  |  Branch (986:13): [True: 135, False: 94.5k]
  ------------------
  987|    135|            RNP_LOG("failed to read key protection");
  ------------------
  |  |   76|    135|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    135|    do {                                                                                 \
  |  |  |  |   69|    135|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 135, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    135|            break;                                                                       \
  |  |  |  |   71|    135|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|    135|            return RNP_ERROR_BAD_FORMAT;
  989|    135|        }
  990|  94.5k|#if defined(ENABLE_CRYPTO_REFRESH)
  991|  94.5k|        if (version == PGP_V6 && usage == 255) {
  ------------------
  |  Branch (991:13): [True: 7.21k, False: 87.3k]
  |  Branch (991:34): [True: 90, False: 7.12k]
  ------------------
  992|     90|            RNP_LOG(
  ------------------
  |  |   76|     90|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     90|    do {                                                                                 \
  |  |  |  |   69|     90|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 90, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     90|            break;                                                                       \
  |  |  |  |   71|     90|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  993|     90|              "Error when parsing S2K usage: A version 6 packet MUST NOT use the value 255.");
  994|     90|            return RNP_ERROR_BAD_FORMAT;
  995|     90|        }
  996|  94.4k|#endif
  997|  94.4k|        sec_protection.s2k.usage = (pgp_s2k_usage_t) usage;
  998|  94.4k|        sec_protection.cipher_mode = PGP_CIPHER_MODE_CFB;
  999|       |
 1000|       |        /* v5 s2k length, ignored for now */
 1001|  94.4k|        if (version == PGP_V5) {
  ------------------
  |  Branch (1001:13): [True: 1.31k, False: 93.1k]
  ------------------
 1002|  1.31k|            if (!pkt.get(v5_s2k_len)) {
  ------------------
  |  Branch (1002:17): [True: 66, False: 1.24k]
  ------------------
 1003|     66|                RNP_LOG("failed to read v5 s2k len");
  ------------------
  |  |   76|     66|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     66|    do {                                                                                 \
  |  |  |  |   69|     66|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 66, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     66|            break;                                                                       \
  |  |  |  |   71|     66|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1004|     66|                return RNP_ERROR_BAD_FORMAT;
 1005|     66|            }
 1006|  1.31k|        }
 1007|  94.3k|#if defined(ENABLE_CRYPTO_REFRESH)
 1008|  94.3k|        if (version == PGP_V6 && sec_protection.s2k.usage != PGP_S2KU_NONE) {
  ------------------
  |  Branch (1008:13): [True: 7.12k, False: 87.2k]
  |  Branch (1008:34): [True: 3.10k, False: 4.02k]
  ------------------
 1009|       |            // V6 packages contain the count of the optional 1-byte parameters
 1010|  3.10k|            if (!pkt.get(v5_s2k_len)) {
  ------------------
  |  Branch (1010:17): [True: 78, False: 3.02k]
  ------------------
 1011|     78|                RNP_LOG("failed to read key protection");
  ------------------
  |  |   76|     78|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     78|    do {                                                                                 \
  |  |  |  |   69|     78|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 78, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     78|            break;                                                                       \
  |  |  |  |   71|     78|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1012|     78|                return RNP_ERROR_BAD_FORMAT;
 1013|     78|            }
 1014|  3.10k|        }
 1015|  94.2k|#endif
 1016|       |
 1017|  94.2k|        switch (sec_protection.s2k.usage) {
 1018|  23.4k|        case PGP_S2KU_NONE:
  ------------------
  |  Branch (1018:9): [True: 23.4k, False: 70.8k]
  ------------------
 1019|  23.4k|            break;
 1020|  34.2k|        case PGP_S2KU_ENCRYPTED:
  ------------------
  |  Branch (1020:9): [True: 34.2k, False: 60.0k]
  ------------------
 1021|  54.2k|        case PGP_S2KU_ENCRYPTED_AND_HASHED: {
  ------------------
  |  Branch (1021:9): [True: 20.0k, False: 74.2k]
  ------------------
 1022|       |            /* we have s2k */
 1023|  54.2k|            uint8_t salg = 0;
 1024|  54.2k|            if (!pkt.get(salg)) {
  ------------------
  |  Branch (1024:17): [True: 50, False: 54.2k]
  ------------------
 1025|     50|                RNP_LOG("failed to read key protection (symmetric alg)");
  ------------------
  |  |   76|     50|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     50|    do {                                                                                 \
  |  |  |  |   69|     50|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 50, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     50|            break;                                                                       \
  |  |  |  |   71|     50|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1026|     50|                return RNP_ERROR_BAD_FORMAT;
 1027|     50|            }
 1028|  54.2k|#if defined(ENABLE_CRYPTO_REFRESH)
 1029|  54.2k|            if (version == PGP_V6) {
  ------------------
  |  Branch (1029:17): [True: 1.03k, False: 53.2k]
  ------------------
 1030|       |                // V6 packages contain the length of the following field
 1031|  1.03k|                uint8_t s2k_specifier_len;
 1032|  1.03k|                if (!pkt.get(s2k_specifier_len)) {
  ------------------
  |  Branch (1032:21): [True: 40, False: 999]
  ------------------
 1033|     40|                    RNP_LOG("failed to read key protection (s2k specifier length)");
  ------------------
  |  |   76|     40|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     40|    do {                                                                                 \
  |  |  |  |   69|     40|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 40, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     40|            break;                                                                       \
  |  |  |  |   71|     40|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1034|     40|                }
 1035|  1.03k|            }
 1036|  54.2k|#endif
 1037|  54.2k|            if (!pkt.get(sec_protection.s2k)) {
  ------------------
  |  Branch (1037:17): [True: 1.86k, False: 52.3k]
  ------------------
 1038|  1.86k|                RNP_LOG("failed to read key protection (s2k)");
  ------------------
  |  |   76|  1.86k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.86k|    do {                                                                                 \
  |  |  |  |   69|  1.86k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.86k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.86k|            break;                                                                       \
  |  |  |  |   71|  1.86k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1039|  1.86k|                return RNP_ERROR_BAD_FORMAT;
 1040|  1.86k|            }
 1041|  52.3k|            sec_protection.symm_alg = (pgp_symm_alg_t) salg;
 1042|  52.3k|            break;
 1043|  54.2k|        }
 1044|  16.5k|        default:
  ------------------
  |  Branch (1044:9): [True: 16.5k, False: 77.7k]
  ------------------
 1045|       |            /* old-style: usage is symmetric algorithm identifier */
 1046|  16.5k|            sec_protection.symm_alg = (pgp_symm_alg_t) usage;
 1047|  16.5k|            sec_protection.s2k.usage = PGP_S2KU_ENCRYPTED;
 1048|  16.5k|            sec_protection.s2k.specifier = PGP_S2KS_SIMPLE;
 1049|  16.5k|            sec_protection.s2k.hash_alg = PGP_HASH_MD5;
 1050|  16.5k|            break;
 1051|  94.2k|        }
 1052|       |
 1053|       |        /* iv */
 1054|  92.3k|        if (sec_protection.s2k.usage &&
  ------------------
  |  Branch (1054:13): [True: 68.9k, False: 23.4k]
  ------------------
 1055|  68.9k|            (sec_protection.s2k.specifier != PGP_S2KS_EXPERIMENTAL)) {
  ------------------
  |  Branch (1055:13): [True: 29.0k, False: 39.8k]
  ------------------
 1056|  29.0k|            size_t bl_size = pgp_block_size(sec_protection.symm_alg);
 1057|  29.0k|            if (!bl_size || !pkt.get(sec_protection.iv, bl_size)) {
  ------------------
  |  Branch (1057:17): [True: 1.61k, False: 27.4k]
  |  Branch (1057:29): [True: 602, False: 26.8k]
  ------------------
 1058|  2.21k|                RNP_LOG("failed to read iv");
  ------------------
  |  |   76|  2.21k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  2.21k|    do {                                                                                 \
  |  |  |  |   69|  2.21k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 2.21k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  2.21k|            break;                                                                       \
  |  |  |  |   71|  2.21k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|  2.21k|                return RNP_ERROR_BAD_FORMAT;
 1060|  2.21k|            }
 1061|  29.0k|        }
 1062|       |
 1063|       |        /* v5 secret key fields length */
 1064|  90.1k|        if (version == PGP_V5) {
  ------------------
  |  Branch (1064:13): [True: 1.23k, False: 88.9k]
  ------------------
 1065|  1.23k|            if (!pkt.get(v5_sec_len)) {
  ------------------
  |  Branch (1065:17): [True: 75, False: 1.16k]
  ------------------
 1066|     75|                RNP_LOG("failed to read v5 secret fields length");
  ------------------
  |  |   76|     75|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     75|    do {                                                                                 \
  |  |  |  |   69|     75|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 75, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     75|            break;                                                                       \
  |  |  |  |   71|     75|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1067|     75|                return RNP_ERROR_BAD_FORMAT;
 1068|     75|            }
 1069|  1.16k|            if (v5_sec_len != pkt.left()) {
  ------------------
  |  Branch (1069:17): [True: 362, False: 802]
  ------------------
 1070|    362|                RNP_LOG("v5 secret fields length mismatch");
  ------------------
  |  |   76|    362|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    362|    do {                                                                                 \
  |  |  |  |   69|    362|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 362, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    362|            break;                                                                       \
  |  |  |  |   71|    362|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1071|    362|                return RNP_ERROR_BAD_FORMAT;
 1072|    362|            }
 1073|  1.16k|        }
 1074|       |
 1075|       |        /* encrypted/cleartext secret MPIs are left */
 1076|  89.7k|        size_t sec_len = pkt.left();
 1077|  89.7k|        sec_data.resize(sec_len);
 1078|  89.7k|        if (sec_len && !pkt.get(sec_data.data(), sec_len)) {
  ------------------
  |  Branch (1078:13): [True: 50.2k, False: 39.4k]
  |  Branch (1078:24): [True: 0, False: 50.2k]
  ------------------
 1079|      0|            return RNP_ERROR_BAD_STATE;
 1080|      0|        }
 1081|  89.7k|    }
 1082|       |
 1083|   271k|    if (pkt.left()) {
  ------------------
  |  Branch (1083:9): [True: 389, False: 271k]
  ------------------
 1084|    389|        RNP_LOG("extra %zu bytes in key packet", pkt.left());
  ------------------
  |  |   76|    389|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    389|    do {                                                                                 \
  |  |  |  |   69|    389|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 389, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    389|            break;                                                                       \
  |  |  |  |   71|    389|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1085|    389|        return RNP_ERROR_BAD_FORMAT;
 1086|    389|    }
 1087|   271k|    return RNP_SUCCESS;
 1088|   271k|}
_ZN25pgp_transferable_subkey_tC2ERKS_b:
 1125|   287k|{
 1126|   287k|    subkey = pgp_key_pkt_t(src.subkey, pubonly);
 1127|   287k|    signatures = src.signatures;
 1128|   287k|}
_ZN22pgp_transferable_key_tC2ERKS_b:
 1131|   156k|{
 1132|   156k|    key = pgp_key_pkt_t(src.key, pubonly);
 1133|   156k|    userids = src.userids;
 1134|   156k|    subkeys = src.subkeys;
 1135|   156k|    signatures = src.signatures;
 1136|   156k|}
stream-key.cpp:_ZL16skip_pgp_packetsR12pgp_source_tRKNSt3__13setI14pgp_pkt_type_tNS1_4lessIS3_EENS1_9allocatorIS3_EEEE:
   58|  8.62M|{
   59|  8.90M|    do {
   60|  8.90M|        int pkt = stream_pkt_type(src);
   61|  8.90M|        if (!pkt) {
  ------------------
  |  Branch (61:13): [True: 53.0k, False: 8.85M]
  ------------------
   62|  53.0k|            break;
   63|  53.0k|        }
   64|  8.85M|        if (pkt < 0) {
  ------------------
  |  Branch (64:13): [True: 2.66k, False: 8.85M]
  ------------------
   65|  2.66k|            return false;
   66|  2.66k|        }
   67|  8.85M|        if (pkts.find((pgp_pkt_type_t) pkt) == pkts.end()) {
  ------------------
  |  Branch (67:13): [True: 8.56M, False: 284k]
  ------------------
   68|  8.56M|            return true;
   69|  8.56M|        }
   70|   284k|        uint64_t ppos = src.readb;
   71|   284k|        if (stream_skip_packet(&src)) {
  ------------------
  |  Branch (71:13): [True: 957, False: 283k]
  ------------------
   72|    957|            RNP_LOG("failed to skip packet at %" PRIu64, ppos);
  ------------------
  |  |   76|    957|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    957|    do {                                                                                 \
  |  |  |  |   69|    957|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 957, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    957|            break;                                                                       \
  |  |  |  |   71|    957|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   73|    957|            return false;
   74|    957|        }
   75|   284k|    } while (1);
  ------------------
  |  Branch (75:14): [True: 283k, Folded]
  ------------------
   76|       |
   77|  53.0k|    return true;
   78|  8.62M|}
stream-key.cpp:_ZL26process_pgp_key_signaturesR12pgp_source_tRNSt3__16vectorIN3pgp3pkt9SignatureENS1_9allocatorIS5_EEEEb:
   82|  8.13M|{
   83|  8.13M|    int ptag;
   84|  8.45M|    while ((ptag = stream_pkt_type(src)) == PGP_PKT_SIGNATURE) {
  ------------------
  |  Branch (84:12): [True: 330k, False: 8.12M]
  ------------------
   85|   330k|        uint64_t sigpos = src.readb;
   86|   330k|        try {
   87|   330k|            pgp::pkt::Signature sig;
   88|   330k|            rnp_result_t        ret = sig.parse(src);
   89|   330k|            if (ret) {
  ------------------
  |  Branch (89:17): [True: 93.2k, False: 237k]
  ------------------
   90|  93.2k|                RNP_LOG("failed to parse signature at %" PRIu64, sigpos);
  ------------------
  |  |   76|  93.2k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  93.2k|    do {                                                                                 \
  |  |  |  |   69|  93.2k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 93.2k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  93.2k|            break;                                                                       \
  |  |  |  |   71|  93.2k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   91|  93.2k|                if (!skiperrors) {
  ------------------
  |  Branch (91:21): [True: 4.83k, False: 88.4k]
  ------------------
   92|  4.83k|                    return ret;
   93|  4.83k|                }
   94|   237k|            } else {
   95|   237k|                sigs.emplace_back(std::move(sig));
   96|   237k|            }
   97|   330k|        } catch (const std::exception &e) {
   98|      0|            RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   99|      0|            return RNP_ERROR_OUT_OF_MEMORY;
  100|      0|        }
  101|   325k|        if (!skip_pgp_packets(src, {PGP_PKT_TRUST})) {
  ------------------
  |  Branch (101:13): [True: 825, False: 324k]
  ------------------
  102|    825|            return RNP_ERROR_READ;
  103|    825|        }
  104|   325k|    }
  105|  8.12M|    return ptag < 0 ? RNP_ERROR_BAD_FORMAT : RNP_SUCCESS;
  ------------------
  |  Branch (105:12): [True: 0, False: 8.12M]
  ------------------
  106|  8.13M|}
stream-key.cpp:_ZL18process_pgp_useridR12pgp_source_tR25pgp_transferable_userid_tb:
  110|  7.86M|{
  111|  7.86M|    rnp_result_t ret;
  112|  7.86M|    uint64_t     uidpos = src.readb;
  113|  7.86M|    try {
  114|  7.86M|        ret = uid.uid.parse(src);
  115|  7.86M|    } catch (const std::exception &e) {
  116|      0|        ret = RNP_ERROR_GENERIC;
  117|      0|    }
  118|  7.86M|    if (ret) {
  ------------------
  |  Branch (118:9): [True: 2.26k, False: 7.86M]
  ------------------
  119|  2.26k|        RNP_LOG("failed to parse userid at %" PRIu64, uidpos);
  ------------------
  |  |   76|  2.26k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  2.26k|    do {                                                                                 \
  |  |  |  |   69|  2.26k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 2.26k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  2.26k|            break;                                                                       \
  |  |  |  |   71|  2.26k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  120|  2.26k|        return ret;
  121|  2.26k|    }
  122|  7.86M|    if (!skip_pgp_packets(src, {PGP_PKT_TRUST})) {
  ------------------
  |  Branch (122:9): [True: 101, False: 7.86M]
  ------------------
  123|    101|        return RNP_ERROR_READ;
  124|    101|    }
  125|  7.86M|    return process_pgp_key_signatures(src, uid.signatures, skiperrors);
  126|  7.86M|}
stream-key.cpp:_ZL21parse_secret_key_mpisR13pgp_key_pkt_tPKhm:
  382|  14.2k|{
  383|  14.2k|    if (!mpis) {
  ------------------
  |  Branch (383:9): [True: 95, False: 14.1k]
  ------------------
  384|     95|        return RNP_ERROR_NULL_POINTER;
  385|     95|    }
  386|       |
  387|       |    /* check the cleartext data */
  388|  14.1k|    switch (key.sec_protection.s2k.usage) {
  389|  14.1k|    case PGP_S2KU_NONE:
  ------------------
  |  Branch (389:5): [True: 14.1k, False: 0]
  ------------------
  390|  14.1k|#if defined(ENABLE_CRYPTO_REFRESH)
  391|  14.1k|        if (key.version == PGP_V6) {
  ------------------
  |  Branch (391:13): [True: 3.07k, False: 11.0k]
  ------------------
  392|  3.07k|            break; /* checksum removed for v6 and usage byte zero */
  393|  3.07k|        }
  394|  11.0k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  11.0k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  395|  11.0k|#endif
  396|  11.0k|    case PGP_S2KU_ENCRYPTED: {
  ------------------
  |  Branch (396:5): [True: 0, False: 14.1k]
  ------------------
  397|       |        /* calculate and check sum16 of the cleartext */
  398|  11.0k|        if (len < 2) {
  ------------------
  |  Branch (398:13): [True: 52, False: 11.0k]
  ------------------
  399|     52|            RNP_LOG("No space for checksum.");
  ------------------
  |  |   76|     52|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     52|    do {                                                                                 \
  |  |  |  |   69|     52|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 52, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     52|            break;                                                                       \
  |  |  |  |   71|     52|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  400|     52|            return RNP_ERROR_BAD_FORMAT;
  401|     52|        }
  402|  11.0k|        uint16_t sum = 0;
  403|  11.0k|        len -= 2;
  404|   346k|        for (size_t idx = 0; idx < len; idx++) {
  ------------------
  |  Branch (404:30): [True: 335k, False: 11.0k]
  ------------------
  405|   335k|            sum += mpis[idx];
  406|   335k|        }
  407|  11.0k|        uint16_t expsum = read_uint16(mpis + len);
  408|  11.0k|        if (sum != expsum) {
  ------------------
  |  Branch (408:13): [True: 668, False: 10.3k]
  ------------------
  409|    668|            RNP_LOG("Wrong key checksum, got 0x%X instead of 0x%X.", (int) sum, (int) expsum);
  ------------------
  |  |   76|    668|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    668|    do {                                                                                 \
  |  |  |  |   69|    668|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 668, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    668|            break;                                                                       \
  |  |  |  |   71|    668|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  410|    668|            return RNP_ERROR_DECRYPT_FAILED;
  411|    668|        }
  412|  10.3k|        break;
  413|  11.0k|    }
  414|  10.3k|    case PGP_S2KU_ENCRYPTED_AND_HASHED: {
  ------------------
  |  Branch (414:5): [True: 0, False: 14.1k]
  ------------------
  415|      0|        if (len < PGP_SHA1_HASH_SIZE) {
  ------------------
  |  |   42|      0|#define PGP_SHA1_HASH_SIZE 20
  ------------------
  |  Branch (415:13): [True: 0, False: 0]
  ------------------
  416|      0|            RNP_LOG("No space for hash");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  417|      0|            return RNP_ERROR_BAD_FORMAT;
  418|      0|        }
  419|       |        /* calculate and check sha1 hash of the cleartext */
  420|      0|        uint8_t hval[PGP_SHA1_HASH_SIZE];
  421|      0|        try {
  422|      0|            auto hash = rnp::Hash::create(PGP_HASH_SHA1);
  423|      0|            assert(hash->size() == sizeof(hval));
  424|      0|            len -= PGP_SHA1_HASH_SIZE;
  ------------------
  |  |   42|      0|#define PGP_SHA1_HASH_SIZE 20
  ------------------
  425|      0|            hash->add(mpis, len);
  426|      0|            hash->finish(hval);
  427|      0|        } catch (const std::exception &e) {
  428|      0|            RNP_LOG("hash calculation failed: %s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  429|      0|            return RNP_ERROR_BAD_STATE;
  430|      0|        }
  431|      0|        if (memcmp(hval, mpis + len, PGP_SHA1_HASH_SIZE)) {
  ------------------
  |  |   42|      0|#define PGP_SHA1_HASH_SIZE 20
  ------------------
  |  Branch (431:13): [True: 0, False: 0]
  ------------------
  432|      0|            return RNP_ERROR_DECRYPT_FAILED;
  433|      0|        }
  434|      0|        break;
  435|      0|    }
  436|      0|    default:
  ------------------
  |  Branch (436:5): [True: 0, False: 14.1k]
  ------------------
  437|      0|        RNP_LOG("unknown s2k usage: %d", (int) key.sec_protection.s2k.usage);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  438|      0|        return RNP_ERROR_BAD_PARAMETERS;
  439|  14.1k|    }
  440|       |
  441|  13.4k|    try {
  442|       |        /* parse mpis depending on algorithm */
  443|  13.4k|        pgp_packet_body_t body(mpis, len);
  444|       |
  445|  13.4k|        if (!key.material) {
  ------------------
  |  Branch (445:13): [True: 0, False: 13.4k]
  ------------------
  446|      0|            RNP_LOG("unknown pk alg : %d", (int) key.alg);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  447|      0|            return RNP_ERROR_BAD_PARAMETERS;
  448|      0|        }
  449|  13.4k|        if (!key.material->parse_secret(body)) {
  ------------------
  |  Branch (449:13): [True: 332, False: 13.0k]
  ------------------
  450|    332|            return RNP_ERROR_BAD_FORMAT;
  451|    332|        }
  452|       |
  453|  13.0k|        if (body.left()) {
  ------------------
  |  Branch (453:13): [True: 183, False: 12.8k]
  ------------------
  454|    183|            RNP_LOG("extra data in sec key");
  ------------------
  |  |   76|    183|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    183|    do {                                                                                 \
  |  |  |  |   69|    183|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 183, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    183|            break;                                                                       \
  |  |  |  |   71|    183|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  455|    183|            return RNP_ERROR_BAD_FORMAT;
  456|    183|        }
  457|  12.8k|        return RNP_SUCCESS;
  458|  13.0k|    } catch (const std::exception &e) {
  459|      0|        RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|      0|        return RNP_ERROR_GENERIC;
  461|      0|    }
  462|  13.4k|}

_ZN13pgp_key_pkt_tC2Ev:
   59|  2.41M|        : tag(PGP_PKT_RESERVED), version(PGP_VUNKNOWN), creation_time(0), alg(PGP_PKA_NOTHING),
   60|  2.41M|          v3_days(0), v5_pub_len(0), material(nullptr), sec_protection({}), v5_s2k_len(0),
   61|  2.41M|          v5_sec_len(0){};
_ZN25pgp_transferable_subkey_tC2Ev:
   93|   463k|    pgp_transferable_subkey_t() = default;
_ZN25pgp_transferable_subkey_taSERKS_:
   95|   231k|    pgp_transferable_subkey_t &operator=(const pgp_transferable_subkey_t &) = default;
_ZN22pgp_transferable_key_tC2Ev:
  105|   694k|    pgp_transferable_key_t() = default;
_ZN22pgp_transferable_key_taSERKS_:
  107|   452k|    pgp_transferable_key_t &operator=(const pgp_transferable_key_t &) = default;

_Z16write_packet_lenPhm:
   50|  5.34M|{
   51|  5.34M|    if (len < 192) {
  ------------------
  |  Branch (51:9): [True: 5.30M, False: 41.3k]
  ------------------
   52|  5.30M|        buf[0] = len;
   53|  5.30M|        return 1;
   54|  5.30M|    } else if (len < 8192 + 192) {
  ------------------
  |  Branch (54:16): [True: 41.2k, False: 70]
  ------------------
   55|  41.2k|        buf[0] = ((len - 192) >> 8) + 192;
   56|  41.2k|        buf[1] = (len - 192) & 0xff;
   57|  41.2k|        return 2;
   58|  41.2k|    } else {
   59|     70|        buf[0] = 0xff;
   60|     70|        write_uint32(&buf[1], len);
   61|     70|        return 5;
   62|     70|    }
   63|  5.34M|}
_Z15get_packet_typeh:
   67|  43.4M|{
   68|  43.4M|    if (!(ptag & PGP_PTAG_ALWAYS_SET)) {
  ------------------
  |  |   47|  43.4M|#define PGP_PTAG_ALWAYS_SET 0x80
  ------------------
  |  Branch (68:9): [True: 0, False: 43.4M]
  ------------------
   69|      0|        return -1;
   70|      0|    }
   71|       |
   72|  43.4M|    if (ptag & PGP_PTAG_NEW_FORMAT) {
  ------------------
  |  |   56|  43.4M|#define PGP_PTAG_NEW_FORMAT 0x40
  ------------------
  |  Branch (72:9): [True: 40.1M, False: 3.34M]
  ------------------
   73|  40.1M|        return (int) (ptag & PGP_PTAG_NF_CONTENT_TAG_MASK);
  ------------------
  |  |  137|  40.1M|#define PGP_PTAG_NF_CONTENT_TAG_MASK 0x3f
  ------------------
   74|  40.1M|    } else {
   75|  3.34M|        return (int) ((ptag & PGP_PTAG_OF_CONTENT_TAG_MASK) >> PGP_PTAG_OF_CONTENT_TAG_SHIFT);
  ------------------
  |  |   66|  3.34M|#define PGP_PTAG_OF_CONTENT_TAG_MASK 0x3c
  ------------------
                      return (int) ((ptag & PGP_PTAG_OF_CONTENT_TAG_MASK) >> PGP_PTAG_OF_CONTENT_TAG_SHIFT);
  ------------------
  |  |   74|  3.34M|#define PGP_PTAG_OF_CONTENT_TAG_SHIFT 2
  ------------------
   76|  3.34M|    }
   77|  43.4M|}
_Z15stream_pkt_typeR12pgp_source_t:
   81|  34.7M|{
   82|  34.7M|    if (src.eof()) {
  ------------------
  |  Branch (82:9): [True: 168k, False: 34.5M]
  ------------------
   83|   168k|        return 0;
   84|   168k|    }
   85|  34.5M|    size_t hdrneed = 0;
   86|  34.5M|    if (!stream_pkt_hdr_len(src, hdrneed)) {
  ------------------
  |  Branch (86:9): [True: 8.74k, False: 34.5M]
  ------------------
   87|  8.74k|        return -1;
   88|  8.74k|    }
   89|  34.5M|    uint8_t hdr[PGP_MAX_HEADER_SIZE];
   90|  34.5M|    if (!src.peek_eq(hdr, hdrneed)) {
  ------------------
  |  Branch (90:9): [True: 319, False: 34.5M]
  ------------------
   91|    319|        return -1;
   92|    319|    }
   93|  34.5M|    return get_packet_type(hdr[0]);
   94|  34.5M|}
_Z18stream_pkt_hdr_lenR12pgp_source_tRm:
   98|  52.3M|{
   99|  52.3M|    uint8_t buf[2];
  100|       |
  101|  52.3M|    if (!src.peek_eq(buf, 2) || !(buf[0] & PGP_PTAG_ALWAYS_SET)) {
  ------------------
  |  |   47|  52.3M|#define PGP_PTAG_ALWAYS_SET 0x80
  ------------------
  |  Branch (101:9): [True: 5.49k, False: 52.3M]
  |  Branch (101:33): [True: 3.24k, False: 52.3M]
  ------------------
  102|  8.74k|        return false;
  103|  8.74k|    }
  104|       |
  105|  52.3M|    if (buf[0] & PGP_PTAG_NEW_FORMAT) {
  ------------------
  |  |   56|  52.3M|#define PGP_PTAG_NEW_FORMAT 0x40
  ------------------
  |  Branch (105:9): [True: 48.3M, False: 4.04M]
  ------------------
  106|  48.3M|        if (buf[1] < 192) {
  ------------------
  |  Branch (106:13): [True: 48.1M, False: 141k]
  ------------------
  107|  48.1M|            hdrlen = 2;
  108|  48.1M|        } else if (buf[1] < 224) {
  ------------------
  |  Branch (108:20): [True: 86.0k, False: 55.3k]
  ------------------
  109|  86.0k|            hdrlen = 3;
  110|  86.0k|        } else if (buf[1] < 255) {
  ------------------
  |  Branch (110:20): [True: 6.49k, False: 48.8k]
  ------------------
  111|  6.49k|            hdrlen = 2;
  112|  48.8k|        } else {
  113|  48.8k|            hdrlen = 6;
  114|  48.8k|        }
  115|  48.3M|        return true;
  116|  48.3M|    }
  117|       |
  118|  4.04M|    switch (buf[0] & PGP_PTAG_OF_LENGTH_TYPE_MASK) {
  ------------------
  |  |   83|  4.04M|#define PGP_PTAG_OF_LENGTH_TYPE_MASK 0x03
  ------------------
  119|  3.44M|    case PGP_PTAG_OLD_LEN_1:
  ------------------
  |  Branch (119:5): [True: 3.44M, False: 595k]
  ------------------
  120|  3.44M|        hdrlen = 2;
  121|  3.44M|        return true;
  122|   258k|    case PGP_PTAG_OLD_LEN_2:
  ------------------
  |  Branch (122:5): [True: 258k, False: 3.78M]
  ------------------
  123|   258k|        hdrlen = 3;
  124|   258k|        return true;
  125|  22.9k|    case PGP_PTAG_OLD_LEN_4:
  ------------------
  |  Branch (125:5): [True: 22.9k, False: 4.01M]
  ------------------
  126|  22.9k|        hdrlen = 5;
  127|  22.9k|        return true;
  128|   314k|    case PGP_PTAG_OLD_LEN_INDETERMINATE:
  ------------------
  |  Branch (128:5): [True: 314k, False: 3.72M]
  ------------------
  129|   314k|        hdrlen = 1;
  130|   314k|        return true;
  131|      0|    default:
  ------------------
  |  Branch (131:5): [True: 0, False: 4.04M]
  ------------------
  132|      0|        return false;
  133|  4.04M|    }
  134|  4.04M|}
_Z19stream_read_pkt_lenR12pgp_source_tPm:
  176|  8.90M|{
  177|  8.90M|    uint8_t buf[6] = {};
  178|  8.90M|    size_t  read = 0;
  179|       |
  180|  8.90M|    if (!stream_pkt_hdr_len(src, read)) {
  ------------------
  |  Branch (180:9): [True: 0, False: 8.90M]
  ------------------
  181|      0|        return false;
  182|      0|    }
  183|       |
  184|  8.90M|    if (!src.read_eq(buf, read)) {
  ------------------
  |  Branch (184:9): [True: 0, False: 8.90M]
  ------------------
  185|      0|        return false;
  186|      0|    }
  187|       |
  188|  8.90M|    return get_pkt_len(buf, pktlen);
  189|  8.90M|}
_Z29stream_read_partial_chunk_lenP12pgp_source_tPmPb:
  193|  3.87k|{
  194|  3.87k|    uint8_t hdr[5] = {};
  195|  3.87k|    size_t  read = 0;
  196|       |
  197|  3.87k|    if (!src->read(hdr, 1, &read)) {
  ------------------
  |  Branch (197:9): [True: 0, False: 3.87k]
  ------------------
  198|      0|        RNP_LOG("failed to read header");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  199|      0|        return false;
  200|      0|    }
  201|  3.87k|    if (read < 1) {
  ------------------
  |  Branch (201:9): [True: 25, False: 3.85k]
  ------------------
  202|     25|        RNP_LOG("wrong eof");
  ------------------
  |  |   76|     25|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     25|    do {                                                                                 \
  |  |  |  |   69|     25|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 25, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     25|            break;                                                                       \
  |  |  |  |   71|     25|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  203|     25|        return false;
  204|     25|    }
  205|       |
  206|  3.85k|    *last = true;
  207|       |    // partial length
  208|  3.85k|    if ((hdr[0] >= 224) && (hdr[0] < 255)) {
  ------------------
  |  Branch (208:9): [True: 2.95k, False: 903]
  |  Branch (208:28): [True: 2.46k, False: 489]
  ------------------
  209|  2.46k|        *last = false;
  210|  2.46k|        *clen = get_partial_pkt_len(hdr[0]);
  211|  2.46k|        return true;
  212|  2.46k|    }
  213|       |    // 1-byte length
  214|  1.39k|    if (hdr[0] < 192) {
  ------------------
  |  Branch (214:9): [True: 871, False: 521]
  ------------------
  215|    871|        *clen = hdr[0];
  216|    871|        return true;
  217|    871|    }
  218|       |    // 2-byte length
  219|    521|    if (hdr[0] < 224) {
  ------------------
  |  Branch (219:9): [True: 32, False: 489]
  ------------------
  220|     32|        if (!src->read_eq(&hdr[1], 1)) {
  ------------------
  |  Branch (220:13): [True: 13, False: 19]
  ------------------
  221|     13|            RNP_LOG("wrong 2-byte length");
  ------------------
  |  |   76|     13|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     13|    do {                                                                                 \
  |  |  |  |   69|     13|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 13, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     13|            break;                                                                       \
  |  |  |  |   71|     13|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  222|     13|            return false;
  223|     13|        }
  224|     19|        *clen = ((size_t)(hdr[0] - 192) << 8) + (size_t) hdr[1] + 192;
  225|     19|        return true;
  226|     32|    }
  227|       |    // 4-byte length
  228|    489|    if (!src->read_eq(&hdr[1], 4)) {
  ------------------
  |  Branch (228:9): [True: 15, False: 474]
  ------------------
  229|     15|        RNP_LOG("wrong 4-byte length");
  ------------------
  |  |   76|     15|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     15|    do {                                                                                 \
  |  |  |  |   69|     15|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 15, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     15|            break;                                                                       \
  |  |  |  |   71|     15|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  230|     15|        return false;
  231|     15|    }
  232|    474|    *clen = ((size_t) hdr[1] << 24) | ((size_t) hdr[2] << 16) | ((size_t) hdr[3] << 8) |
  233|    474|            (size_t) hdr[4];
  234|    474|    return true;
  235|    489|}
_Z32stream_old_indeterminate_pkt_lenP12pgp_source_t:
  239|   284k|{
  240|   284k|    uint8_t ptag = 0;
  241|   284k|    if (!src->peek_eq(&ptag, 1)) {
  ------------------
  |  Branch (241:9): [True: 0, False: 284k]
  ------------------
  242|      0|        return false;
  243|      0|    }
  244|   284k|    return !(ptag & PGP_PTAG_NEW_FORMAT) &&
  ------------------
  |  |   56|   284k|#define PGP_PTAG_NEW_FORMAT 0x40
  ------------------
  |  Branch (244:12): [True: 21.2k, False: 262k]
  ------------------
  245|  21.2k|           ((ptag & PGP_PTAG_OF_LENGTH_TYPE_MASK) == PGP_PTAG_OLD_LEN_INDETERMINATE);
  ------------------
  |  |   83|  21.2k|#define PGP_PTAG_OF_LENGTH_TYPE_MASK 0x03
  ------------------
  |  Branch (245:12): [True: 5.07k, False: 16.2k]
  ------------------
  246|   284k|}
_Z22stream_partial_pkt_lenP12pgp_source_t:
  250|   279k|{
  251|   279k|    uint8_t hdr[2] = {};
  252|   279k|    if (!src->peek_eq(hdr, 2)) {
  ------------------
  |  Branch (252:9): [True: 0, False: 279k]
  ------------------
  253|      0|        return false;
  254|      0|    }
  255|   279k|    return (hdr[0] & PGP_PTAG_NEW_FORMAT) && (hdr[1] >= 224) && (hdr[1] < 255);
  ------------------
  |  |   56|   279k|#define PGP_PTAG_NEW_FORMAT 0x40
  ------------------
  |  Branch (255:12): [True: 262k, False: 16.2k]
  |  Branch (255:46): [True: 2.48k, False: 260k]
  |  Branch (255:65): [True: 1.57k, False: 905]
  ------------------
  256|   279k|}
_Z19get_partial_pkt_lenh:
  260|  2.46k|{
  261|  2.46k|    return 1 << (blen & 0x1f);
  262|  2.46k|}
_Z18stream_read_packetP12pgp_source_tP10pgp_dest_t:
  345|   284k|{
  346|   284k|    if (stream_old_indeterminate_pkt_len(src)) {
  ------------------
  |  Branch (346:9): [True: 5.07k, False: 279k]
  ------------------
  347|  5.07k|        return dst_write_src(src, dst, PGP_MAX_OLD_LEN_INDETERMINATE_PKT_SIZE);
  ------------------
  |  |   42|  5.07k|#define PGP_MAX_OLD_LEN_INDETERMINATE_PKT_SIZE 0x40000000
  ------------------
  348|  5.07k|    }
  349|       |
  350|   279k|    if (stream_partial_pkt_len(src)) {
  ------------------
  |  Branch (350:9): [True: 1.57k, False: 277k]
  ------------------
  351|  1.57k|        return stream_read_packet_partial(src, dst);
  352|  1.57k|    }
  353|       |
  354|   277k|    try {
  355|   277k|        pgp_packet_body_t body(PGP_PKT_RESERVED);
  356|   277k|        rnp_result_t      ret = body.read(*src);
  357|   277k|        if (dst) {
  ------------------
  |  Branch (357:13): [True: 0, False: 277k]
  ------------------
  358|      0|            body.write(*dst, false);
  359|      0|        }
  360|   277k|        return ret;
  361|   277k|    } catch (const std::exception &e) {
  362|      0|        RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  363|      0|        return RNP_ERROR_GENERIC;
  364|      0|    }
  365|   277k|}
_Z18stream_skip_packetP12pgp_source_t:
  369|   284k|{
  370|       |    return stream_read_packet(src, NULL);
  371|   284k|}
_Z10is_key_pkti:
  395|   978k|{
  396|   978k|    switch (tag) {
  397|   411k|    case PGP_PKT_PUBLIC_KEY:
  ------------------
  |  Branch (397:5): [True: 411k, False: 566k]
  ------------------
  398|   743k|    case PGP_PKT_PUBLIC_SUBKEY:
  ------------------
  |  Branch (398:5): [True: 331k, False: 646k]
  ------------------
  399|   860k|    case PGP_PKT_SECRET_KEY:
  ------------------
  |  Branch (399:5): [True: 116k, False: 862k]
  ------------------
  400|   978k|    case PGP_PKT_SECRET_SUBKEY:
  ------------------
  |  Branch (400:5): [True: 118k, False: 860k]
  ------------------
  401|   978k|        return true;
  402|      0|    default:
  ------------------
  |  Branch (402:5): [True: 0, False: 978k]
  ------------------
  403|      0|        return false;
  404|   978k|    }
  405|   978k|}
_Z13is_subkey_pkti:
  409|  3.20M|{
  410|  3.20M|    return (tag == PGP_PKT_PUBLIC_SUBKEY) || (tag == PGP_PKT_SECRET_SUBKEY);
  ------------------
  |  Branch (410:12): [True: 940k, False: 2.26M]
  |  Branch (410:46): [True: 544k, False: 1.72M]
  ------------------
  411|  3.20M|}
_Z18is_primary_key_pkti:
  415|  2.25M|{
  416|  2.25M|    return (tag == PGP_PKT_PUBLIC_KEY) || (tag == PGP_PKT_SECRET_KEY);
  ------------------
  |  Branch (416:12): [True: 1.49M, False: 764k]
  |  Branch (416:43): [True: 685k, False: 79.3k]
  ------------------
  417|  2.25M|}
_Z17is_public_key_pkti:
  421|  17.8k|{
  422|  17.8k|    switch (tag) {
  423|  4.84k|    case PGP_PKT_PUBLIC_KEY:
  ------------------
  |  Branch (423:5): [True: 4.84k, False: 12.9k]
  ------------------
  424|  9.11k|    case PGP_PKT_PUBLIC_SUBKEY:
  ------------------
  |  Branch (424:5): [True: 4.26k, False: 13.5k]
  ------------------
  425|  9.11k|        return true;
  426|  8.72k|    default:
  ------------------
  |  Branch (426:5): [True: 8.72k, False: 9.11k]
  ------------------
  427|  8.72k|        return false;
  428|  17.8k|    }
  429|  17.8k|}
_Z17is_secret_key_pkti:
  433|  16.0M|{
  434|  16.0M|    switch (tag) {
  435|   386k|    case PGP_PKT_SECRET_KEY:
  ------------------
  |  Branch (435:5): [True: 386k, False: 15.6M]
  ------------------
  436|   792k|    case PGP_PKT_SECRET_SUBKEY:
  ------------------
  |  Branch (436:5): [True: 406k, False: 15.6M]
  ------------------
  437|   792k|        return true;
  438|  15.2M|    default:
  ------------------
  |  Branch (438:5): [True: 15.2M, False: 792k]
  ------------------
  439|  15.2M|        return false;
  440|  16.0M|    }
  441|  16.0M|}
_Z14is_rsa_key_alg16pgp_pubkey_alg_t:
  445|  31.0k|{
  446|  31.0k|    switch (alg) {
  447|  17.6k|    case PGP_PKA_RSA:
  ------------------
  |  Branch (447:5): [True: 17.6k, False: 13.4k]
  ------------------
  448|  21.0k|    case PGP_PKA_RSA_ENCRYPT_ONLY:
  ------------------
  |  Branch (448:5): [True: 3.39k, False: 27.6k]
  ------------------
  449|  30.7k|    case PGP_PKA_RSA_SIGN_ONLY:
  ------------------
  |  Branch (449:5): [True: 9.70k, False: 21.3k]
  ------------------
  450|  30.7k|        return true;
  451|    307|    default:
  ------------------
  |  Branch (451:5): [True: 307, False: 30.7k]
  ------------------
  452|    307|        return false;
  453|  31.0k|    }
  454|  31.0k|}
_ZN17pgp_packet_body_tC2E14pgp_pkt_type_t:
  457|  14.3M|{
  458|  14.3M|    data_.reserve(16);
  459|  14.3M|    tag_ = tag;
  460|  14.3M|    secure_ = is_secret_key_pkt(tag);
  461|  14.3M|}
_ZN17pgp_packet_body_tC2EPKhm:
  464|   370k|{
  465|   370k|    data_.assign(data, data + len);
  466|   370k|    tag_ = PGP_PKT_RESERVED;
  467|   370k|    secure_ = false;
  468|   370k|}
_ZN17pgp_packet_body_tC2ERKNSt3__16vectorIhNS0_9allocatorIhEEEE:
  471|   347k|    : pgp_packet_body_t(data.data(), data.size())
  472|   347k|{
  473|   347k|}
_ZN17pgp_packet_body_tD2Ev:
  476|  14.7M|{
  477|  14.7M|    if (secure_) {
  ------------------
  |  Branch (477:9): [True: 233k, False: 14.5M]
  ------------------
  478|   233k|        secure_clear(data_.data(), data_.size());
  479|   233k|    }
  480|  14.7M|}
_ZN17pgp_packet_body_t4dataEv:
  484|   806k|{
  485|   806k|    return data_.data();
  486|   806k|}
_ZN17pgp_packet_body_t3curEv:
  490|   674k|{
  491|   674k|    return data_.data() + pos_;
  492|   674k|}
_ZNK17pgp_packet_body_t4sizeEv:
  496|  16.2M|{
  497|  16.2M|    return data_.size();
  498|  16.2M|}
_ZNK17pgp_packet_body_t4leftEv:
  502|  1.70M|{
  503|  1.70M|    return data_.size() - pos_;
  504|  1.70M|}
_ZN17pgp_packet_body_t4skipEm:
  508|   218k|{
  509|   218k|    pos_ += bt;
  510|   218k|}
_ZN17pgp_packet_body_t9skip_backEm:
  514|   225k|{
  515|   225k|    pos_ = bt > pos_ ? 0 : pos_ - bt;
  ------------------
  |  Branch (515:12): [True: 0, False: 225k]
  ------------------
  516|   225k|}
_ZN17pgp_packet_body_t3getERh:
  520|  1.62M|{
  521|  1.62M|    if (pos_ >= data_.size()) {
  ------------------
  |  Branch (521:9): [True: 96.1k, False: 1.52M]
  ------------------
  522|  96.1k|        return false;
  523|  96.1k|    }
  524|  1.52M|    val = data_[pos_++];
  525|  1.52M|    return true;
  526|  1.62M|}
_ZN17pgp_packet_body_t3getERt:
  530|  1.39M|{
  531|  1.39M|    if (pos_ + 2 > data_.size()) {
  ------------------
  |  Branch (531:9): [True: 730, False: 1.39M]
  ------------------
  532|    730|        return false;
  533|    730|    }
  534|  1.39M|    val = read_uint16(data_.data() + pos_);
  535|  1.39M|    pos_ += 2;
  536|  1.39M|    return true;
  537|  1.39M|}
_ZN17pgp_packet_body_t3getERj:
  541|   369k|{
  542|   369k|    if (pos_ + 4 > data_.size()) {
  ------------------
  |  Branch (542:9): [True: 786, False: 368k]
  ------------------
  543|    786|        return false;
  544|    786|    }
  545|   368k|    val = read_uint32(data_.data() + pos_);
  546|   368k|    pos_ += 4;
  547|   368k|    return true;
  548|   369k|}
_ZN17pgp_packet_body_t3getEPhm:
  552|  1.84M|{
  553|  1.84M|    if (pos_ + len > data_.size()) {
  ------------------
  |  Branch (553:9): [True: 46.2k, False: 1.79M]
  ------------------
  554|  46.2k|        return false;
  555|  46.2k|    }
  556|  1.79M|    memcpy(val, data_.data() + pos_, len);
  557|  1.79M|    pos_ += len;
  558|  1.79M|    return true;
  559|  1.84M|}
_ZN17pgp_packet_body_t3getERNSt3__16vectorIhNS0_9allocatorIhEEEEm:
  563|   422k|{
  564|   422k|    if (pos_ + len > data_.size()) {
  ------------------
  |  Branch (564:9): [True: 1.89k, False: 420k]
  ------------------
  565|  1.89k|        return false;
  566|  1.89k|    }
  567|   420k|    val.assign(data_.data() + pos_, data_.data() + pos_ + len);
  568|   420k|    pos_ += len;
  569|   420k|    return true;
  570|   422k|}
_ZN17pgp_packet_body_t3getERN3pgp3mpiE:
  582|   958k|{
  583|   958k|    uint16_t bits = 0;
  584|   958k|    if (!get(bits)) {
  ------------------
  |  Branch (584:9): [True: 422, False: 958k]
  ------------------
  585|    422|        return false;
  586|    422|    }
  587|   958k|    size_t len = (bits + 7) >> 3;
  588|   958k|    if (len > PGP_MPINT_SIZE) {
  ------------------
  |  |   36|   958k|#define PGP_MPINT_SIZE (PGP_MPINT_BITS >> 3)
  |  |  ------------------
  |  |  |  |   35|   958k|#define PGP_MPINT_BITS (16384)
  |  |  ------------------
  ------------------
  |  Branch (588:9): [True: 6.81k, False: 951k]
  ------------------
  589|  6.81k|        RNP_LOG("too large mpi");
  ------------------
  |  |   76|  6.81k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  6.81k|    do {                                                                                 \
  |  |  |  |   69|  6.81k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 6.81k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  6.81k|            break;                                                                       \
  |  |  |  |   71|  6.81k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  590|  6.81k|        return false;
  591|  6.81k|    }
  592|   951k|    if (!len) {
  ------------------
  |  Branch (592:9): [True: 762, False: 950k]
  ------------------
  593|    762|        RNP_LOG("0 mpi");
  ------------------
  |  |   76|    762|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    762|    do {                                                                                 \
  |  |  |  |   69|    762|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 762, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    762|            break;                                                                       \
  |  |  |  |   71|    762|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  594|    762|        return false;
  595|    762|    }
  596|   950k|    val.resize(len);
  597|   950k|    if (!get(val.data(), len)) {
  ------------------
  |  Branch (597:9): [True: 5.99k, False: 944k]
  ------------------
  598|  5.99k|        RNP_LOG("failed to read mpi body");
  ------------------
  |  |   76|  5.99k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  5.99k|    do {                                                                                 \
  |  |  |  |   69|  5.99k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 5.99k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  5.99k|            break;                                                                       \
  |  |  |  |   71|  5.99k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  599|  5.99k|        return false;
  600|  5.99k|    }
  601|       |    /* check the mpi bit count */
  602|   944k|    size_t mbits = val.bits();
  603|   944k|    if (mbits != bits) {
  ------------------
  |  Branch (603:9): [True: 484k, False: 460k]
  ------------------
  604|   484k|        RNP_LOG(
  ------------------
  |  |   76|   484k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|   484k|    do {                                                                                 \
  |  |  |  |   69|   484k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 484k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|   484k|            break;                                                                       \
  |  |  |  |   71|   484k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  605|   484k|          "Warning! Wrong mpi bit count: got %" PRIu16 ", but actual is %zu", bits, mbits);
  606|   484k|    }
  607|   944k|    return true;
  608|   950k|}
_ZN17pgp_packet_body_t3getER11pgp_curve_t:
  612|   139k|{
  613|   139k|    uint8_t oidlen = 0;
  614|   139k|    if (!get(oidlen)) {
  ------------------
  |  Branch (614:9): [True: 82, False: 139k]
  ------------------
  615|     82|        return false;
  616|     82|    }
  617|   139k|    if (!oidlen || (oidlen == 0xff)) {
  ------------------
  |  Branch (617:9): [True: 111, False: 139k]
  |  Branch (617:20): [True: 433, False: 138k]
  ------------------
  618|    544|        RNP_LOG("unsupported curve oid len: %" PRIu8, oidlen);
  ------------------
  |  |   76|    544|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    544|    do {                                                                                 \
  |  |  |  |   69|    544|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 544, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    544|            break;                                                                       \
  |  |  |  |   71|    544|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  619|    544|        return false;
  620|    544|    }
  621|   138k|    std::vector<uint8_t> oid(oidlen, 0);
  622|   138k|    if (!get(oid, oidlen)) {
  ------------------
  |  Branch (622:9): [True: 1.19k, False: 137k]
  ------------------
  623|  1.19k|        return false;
  624|  1.19k|    }
  625|   137k|    pgp_curve_t res = pgp::ec::Curve::by_OID(oid);
  626|   137k|    if (res == PGP_CURVE_MAX) {
  ------------------
  |  Branch (626:9): [True: 14.7k, False: 122k]
  ------------------
  627|  14.7k|        RNP_LOG("unsupported curve");
  ------------------
  |  |   76|  14.7k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  14.7k|    do {                                                                                 \
  |  |  |  |   69|  14.7k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 14.7k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  14.7k|            break;                                                                       \
  |  |  |  |   71|  14.7k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  628|  14.7k|        return false;
  629|  14.7k|    }
  630|   122k|    val = res;
  631|   122k|    return true;
  632|   137k|}
_ZN17pgp_packet_body_t3getER9pgp_s2k_t:
  636|  54.2k|{
  637|  54.2k|    uint8_t spec = 0, halg = 0;
  638|  54.2k|    if (!get(spec) || !get(halg)) {
  ------------------
  |  Branch (638:9): [True: 51, False: 54.1k]
  |  Branch (638:23): [True: 74, False: 54.1k]
  ------------------
  639|    125|        return false;
  640|    125|    }
  641|  54.1k|    s2k.specifier = (pgp_s2k_specifier_t) spec;
  642|  54.1k|    s2k.hash_alg = (pgp_hash_alg_t) halg;
  643|       |
  644|  54.1k|    switch (s2k.specifier) {
  645|    507|    case PGP_S2KS_SIMPLE:
  ------------------
  |  Branch (645:5): [True: 507, False: 53.6k]
  ------------------
  646|    507|        return true;
  647|    909|    case PGP_S2KS_SALTED:
  ------------------
  |  Branch (647:5): [True: 909, False: 53.2k]
  ------------------
  648|    909|        return get(s2k.salt, PGP_SALT_SIZE);
  ------------------
  |  |   92|    909|#define PGP_SALT_SIZE 8
  ------------------
  649|  11.7k|    case PGP_S2KS_ITERATED_AND_SALTED: {
  ------------------
  |  Branch (649:5): [True: 11.7k, False: 42.3k]
  ------------------
  650|  11.7k|        uint8_t iter = 0;
  651|  11.7k|        if (!get(s2k.salt, PGP_SALT_SIZE) || !get(iter)) {
  ------------------
  |  |   92|  11.7k|#define PGP_SALT_SIZE 8
  ------------------
  |  Branch (651:13): [True: 90, False: 11.6k]
  |  Branch (651:46): [True: 336, False: 11.3k]
  ------------------
  652|    426|            return false;
  653|    426|        }
  654|  11.3k|        s2k.iterations = iter;
  655|  11.3k|        return true;
  656|  11.7k|    }
  657|  40.4k|    case PGP_S2KS_EXPERIMENTAL: {
  ------------------
  |  Branch (657:5): [True: 40.4k, False: 13.6k]
  ------------------
  658|  40.4k|        try {
  659|  40.4k|            s2k.experimental = {data_.begin() + pos_, data_.end()};
  660|  40.4k|        } catch (const std::exception &e) {
  661|      0|            RNP_LOG("%s", e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  662|      0|            return false;
  663|      0|        }
  664|  40.4k|        uint8_t gnu[3] = {0};
  665|  40.4k|        if (!get(gnu, 3) || memcmp(gnu, "GNU", 3)) {
  ------------------
  |  Branch (665:13): [True: 36.6k, False: 3.83k]
  |  Branch (665:29): [True: 1.83k, False: 1.99k]
  ------------------
  666|  38.4k|            RNP_LOG("Unknown experimental s2k. Skipping.");
  ------------------
  |  |   76|  38.4k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  38.4k|    do {                                                                                 \
  |  |  |  |   69|  38.4k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 38.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  38.4k|            break;                                                                       \
  |  |  |  |   71|  38.4k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  667|  38.4k|            pos_ = data_.size();
  668|  38.4k|            s2k.gpg_ext_num = PGP_S2K_GPG_NONE;
  669|  38.4k|            return true;
  670|  38.4k|        }
  671|  1.99k|        uint8_t ext_num = 0;
  672|  1.99k|        if (!get(ext_num)) {
  ------------------
  |  Branch (672:13): [True: 31, False: 1.96k]
  ------------------
  673|     31|            return false;
  674|     31|        }
  675|  1.96k|        if ((ext_num != PGP_S2K_GPG_NO_SECRET) && (ext_num != PGP_S2K_GPG_SMARTCARD)) {
  ------------------
  |  Branch (675:13): [True: 1.72k, False: 236]
  |  Branch (675:51): [True: 620, False: 1.10k]
  ------------------
  676|    620|            RNP_LOG("Unsupported gpg extension num: %" PRIu8 ", skipping", ext_num);
  ------------------
  |  |   76|    620|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    620|    do {                                                                                 \
  |  |  |  |   69|    620|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 620, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    620|            break;                                                                       \
  |  |  |  |   71|    620|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  677|    620|            pos_ = data_.size();
  678|    620|            s2k.gpg_ext_num = PGP_S2K_GPG_NONE;
  679|    620|            return true;
  680|    620|        }
  681|  1.34k|        s2k.gpg_ext_num = (pgp_s2k_gpg_extension_t) ext_num;
  682|  1.34k|        if (s2k.gpg_ext_num == PGP_S2K_GPG_NO_SECRET) {
  ------------------
  |  Branch (682:13): [True: 236, False: 1.10k]
  ------------------
  683|    236|            return true;
  684|    236|        }
  685|  1.10k|        if (!get(s2k.gpg_serial_len)) {
  ------------------
  |  Branch (685:13): [True: 34, False: 1.07k]
  ------------------
  686|     34|            RNP_LOG("Failed to get GPG serial len");
  ------------------
  |  |   76|     34|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     34|    do {                                                                                 \
  |  |  |  |   69|     34|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 34, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     34|            break;                                                                       \
  |  |  |  |   71|     34|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  687|     34|            return false;
  688|     34|        }
  689|  1.07k|        size_t len = s2k.gpg_serial_len;
  690|  1.07k|        if (s2k.gpg_serial_len > 16) {
  ------------------
  |  Branch (690:13): [True: 665, False: 410]
  ------------------
  691|    665|            RNP_LOG("Warning: gpg_serial_len is %d", (int) len);
  ------------------
  |  |   76|    665|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    665|    do {                                                                                 \
  |  |  |  |   69|    665|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 665, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    665|            break;                                                                       \
  |  |  |  |   71|    665|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  692|    665|            len = 16;
  693|    665|        }
  694|  1.07k|        if (!get(s2k.gpg_serial, len)) {
  ------------------
  |  Branch (694:13): [True: 582, False: 493]
  ------------------
  695|    582|            RNP_LOG("Failed to get GPG serial");
  ------------------
  |  |   76|    582|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    582|    do {                                                                                 \
  |  |  |  |   69|    582|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 582, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    582|            break;                                                                       \
  |  |  |  |   71|    582|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  696|    582|            return false;
  697|    582|        }
  698|    493|        return true;
  699|  1.07k|    }
  700|    466|    default:
  ------------------
  |  Branch (700:5): [True: 466, False: 53.6k]
  ------------------
  701|    466|        RNP_LOG("unknown s2k specifier: %d", (int) s2k.specifier);
  ------------------
  |  |   76|    466|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    466|    do {                                                                                 \
  |  |  |  |   69|    466|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 466, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    466|            break;                                                                       \
  |  |  |  |   71|    466|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  702|    466|        return false;
  703|  54.1k|    }
  704|  54.1k|}
_ZN17pgp_packet_body_t3addEPKvm:
  708|  6.41M|{
  709|  6.41M|    data_.insert(data_.end(), (uint8_t *) data, (uint8_t *) data + len);
  710|  6.41M|}
_ZN17pgp_packet_body_t3addERKNSt3__16vectorIhNS0_9allocatorIhEEEE:
  714|   841k|{
  715|   841k|    add(data.data(), data.size());
  716|   841k|}
_ZN17pgp_packet_body_t8add_byteEh:
  720|   449k|{
  721|   449k|    data_.push_back(bt);
  722|   449k|}
_ZN17pgp_packet_body_t10add_uint16Et:
  726|   164k|{
  727|   164k|    uint8_t bytes[2];
  728|   164k|    write_uint16(bytes, val);
  729|   164k|    add(bytes, 2);
  730|   164k|}
_ZN17pgp_packet_body_t10add_uint32Ej:
  734|  10.1k|{
  735|  10.1k|    uint8_t bytes[4];
  736|  10.1k|    write_uint32(bytes, val);
  737|  10.1k|    add(bytes, 4);
  738|  10.1k|}
_ZN17pgp_packet_body_t3addERKNSt3__15arrayIhLm8EEE:
  742|  32.1k|{
  743|  32.1k|    add(val.data(), val.size());
  744|  32.1k|}
_ZN17pgp_packet_body_t14add_subpacketsERKN3pgp3pkt9SignatureEb:
  772|   173k|{
  773|   173k|    pgp_packet_body_t spbody(PGP_PKT_RESERVED);
  774|       |
  775|   665k|    for (auto &subpkt : sig.subpkts) {
  ------------------
  |  Branch (775:23): [True: 665k, False: 173k]
  ------------------
  776|   665k|        if (subpkt->hashed() != hashed) {
  ------------------
  |  Branch (776:13): [True: 566k, False: 98.9k]
  ------------------
  777|   566k|            continue;
  778|   566k|        }
  779|       |
  780|  98.9k|        uint8_t splen[6];
  781|  98.9k|        size_t  lenlen = write_packet_len(splen, subpkt->data().size() + 1);
  782|  98.9k|        spbody.add(splen, lenlen);
  783|  98.9k|        spbody.add_byte(subpkt->raw_type() | (subpkt->critical() << 7));
  784|  98.9k|        spbody.add(subpkt->data().data(), subpkt->data().size());
  785|  98.9k|    }
  786|       |
  787|   173k|    if (spbody.data_.size() > 0xffff) {
  ------------------
  |  Branch (787:9): [True: 0, False: 173k]
  ------------------
  788|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  789|      0|    }
  790|   173k|    switch (sig.version) {
  791|   162k|    case PGP_V4:
  ------------------
  |  Branch (791:5): [True: 162k, False: 11.3k]
  ------------------
  792|   164k|    case PGP_V5:
  ------------------
  |  Branch (792:5): [True: 1.92k, False: 171k]
  ------------------
  793|   164k|        add_uint16(spbody.data_.size());
  794|   164k|        break;
  795|      0|#if defined(ENABLE_CRYPTO_REFRESH)
  796|  9.45k|    case PGP_V6:
  ------------------
  |  Branch (796:5): [True: 9.45k, False: 164k]
  ------------------
  797|  9.45k|        add_uint32(spbody.data_.size());
  798|  9.45k|        break;
  799|      0|#endif
  800|      0|    default:
  ------------------
  |  Branch (800:5): [True: 0, False: 173k]
  ------------------
  801|      0|        RNP_LOG("should not reach this code");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  802|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_STATE);
  803|   173k|    }
  804|   173k|    add(spbody.data_.data(), spbody.data_.size());
  805|   173k|}
_ZN17pgp_packet_body_t3addERK9pgp_s2k_t:
  820|  46.6k|{
  821|  46.6k|    add_byte(s2k.specifier);
  822|  46.6k|    add_byte(s2k.hash_alg);
  823|       |
  824|  46.6k|    switch (s2k.specifier) {
  825|  10.2k|    case PGP_S2KS_SIMPLE:
  ------------------
  |  Branch (825:5): [True: 10.2k, False: 36.3k]
  ------------------
  826|  10.2k|        return;
  827|    588|    case PGP_S2KS_SALTED:
  ------------------
  |  Branch (827:5): [True: 588, False: 46.0k]
  ------------------
  828|    588|        add(s2k.salt, PGP_SALT_SIZE);
  ------------------
  |  |   92|    588|#define PGP_SALT_SIZE 8
  ------------------
  829|    588|        return;
  830|  7.89k|    case PGP_S2KS_ITERATED_AND_SALTED: {
  ------------------
  |  Branch (830:5): [True: 7.89k, False: 38.7k]
  ------------------
  831|  7.89k|        unsigned iter = s2k.iterations;
  832|  7.89k|        if (iter > 255) {
  ------------------
  |  Branch (832:13): [True: 0, False: 7.89k]
  ------------------
  833|      0|            iter = pgp_s2k_encode_iterations(iter);
  834|      0|        }
  835|  7.89k|        add(s2k.salt, PGP_SALT_SIZE);
  ------------------
  |  |   92|  7.89k|#define PGP_SALT_SIZE 8
  ------------------
  836|  7.89k|        add_byte(iter);
  837|  7.89k|        return;
  838|      0|    }
  839|  27.8k|    case PGP_S2KS_EXPERIMENTAL: {
  ------------------
  |  Branch (839:5): [True: 27.8k, False: 18.7k]
  ------------------
  840|  27.8k|        if ((s2k.gpg_ext_num != PGP_S2K_GPG_NO_SECRET) &&
  ------------------
  |  Branch (840:13): [True: 27.6k, False: 232]
  ------------------
  841|  27.6k|            (s2k.gpg_ext_num != PGP_S2K_GPG_SMARTCARD)) {
  ------------------
  |  Branch (841:13): [True: 27.3k, False: 287]
  ------------------
  842|  27.3k|            RNP_LOG("Unknown experimental s2k.");
  ------------------
  |  |   76|  27.3k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  27.3k|    do {                                                                                 \
  |  |  |  |   69|  27.3k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 27.3k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  27.3k|            break;                                                                       \
  |  |  |  |   71|  27.3k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  843|  27.3k|            add(s2k.experimental.data(), s2k.experimental.size());
  844|  27.3k|            return;
  845|  27.3k|        }
  846|    519|        add("GNU", 3);
  847|    519|        add_byte(s2k.gpg_ext_num);
  848|    519|        if (s2k.gpg_ext_num == PGP_S2K_GPG_SMARTCARD) {
  ------------------
  |  Branch (848:13): [True: 287, False: 232]
  ------------------
  849|    287|            static_assert(sizeof(s2k.gpg_serial) == 16, "invalid gpg serial length");
  850|    287|            size_t slen = s2k.gpg_serial_len > 16 ? 16 : s2k.gpg_serial_len;
  ------------------
  |  Branch (850:27): [True: 89, False: 198]
  ------------------
  851|    287|            add_byte(s2k.gpg_serial_len);
  852|    287|            add(s2k.gpg_serial, slen);
  853|    287|        }
  854|    519|        return;
  855|  27.8k|    }
  856|      0|    default:
  ------------------
  |  Branch (856:5): [True: 0, False: 46.6k]
  ------------------
  857|      0|        RNP_LOG("unknown s2k specifier");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  858|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  859|  46.6k|    }
  860|  46.6k|}
_ZN17pgp_packet_body_t4readER12pgp_source_t:
  864|  8.90M|{
  865|       |    /* Make sure we have enough data for packet header */
  866|  8.90M|    if (!src.peek_eq(hdr_, 2)) {
  ------------------
  |  Branch (866:9): [True: 0, False: 8.90M]
  ------------------
  867|      0|        return RNP_ERROR_READ;
  868|      0|    }
  869|       |
  870|       |    /* Read the packet header and length */
  871|  8.90M|    size_t len = 0;
  872|  8.90M|    if (!stream_pkt_hdr_len(src, len)) {
  ------------------
  |  Branch (872:9): [True: 0, False: 8.90M]
  ------------------
  873|      0|        return RNP_ERROR_BAD_FORMAT;
  874|      0|    }
  875|  8.90M|    if (!src.peek_eq(hdr_, len)) {
  ------------------
  |  Branch (875:9): [True: 0, False: 8.90M]
  ------------------
  876|      0|        return RNP_ERROR_READ;
  877|      0|    }
  878|  8.90M|    hdr_len_ = len;
  879|       |
  880|  8.90M|    int ptag = get_packet_type(hdr_[0]);
  881|  8.90M|    if ((ptag < 0) || ((tag_ != PGP_PKT_RESERVED) && (tag_ != ptag))) {
  ------------------
  |  Branch (881:9): [True: 0, False: 8.90M]
  |  Branch (881:24): [True: 764k, False: 8.14M]
  |  Branch (881:54): [True: 0, False: 764k]
  ------------------
  882|      0|        RNP_LOG("tag mismatch: %d vs %d", (int) tag_, ptag);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  883|      0|        return RNP_ERROR_BAD_FORMAT;
  884|      0|    }
  885|  8.90M|    tag_ = (pgp_pkt_type_t) ptag;
  886|       |
  887|  8.90M|    if (!stream_read_pkt_len(src, &len)) {
  ------------------
  |  Branch (887:9): [True: 74.9k, False: 8.83M]
  ------------------
  888|  74.9k|        return RNP_ERROR_READ;
  889|  74.9k|    }
  890|       |
  891|       |    /* early exit for the empty packet */
  892|  8.83M|    if (!len) {
  ------------------
  |  Branch (892:9): [True: 8.01M, False: 816k]
  ------------------
  893|  8.01M|        return RNP_SUCCESS;
  894|  8.01M|    }
  895|       |
  896|   816k|    if (len > PGP_MAX_PKT_SIZE) {
  ------------------
  |  |   39|   816k|#define PGP_MAX_PKT_SIZE 0x100000
  ------------------
  |  Branch (896:9): [True: 4.54k, False: 812k]
  ------------------
  897|  4.54k|        RNP_LOG("too large packet");
  ------------------
  |  |   76|  4.54k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  4.54k|    do {                                                                                 \
  |  |  |  |   69|  4.54k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 4.54k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  4.54k|            break;                                                                       \
  |  |  |  |   71|  4.54k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  898|  4.54k|        return RNP_ERROR_BAD_FORMAT;
  899|  4.54k|    }
  900|       |
  901|       |    /* Read the packet contents */
  902|   812k|    try {
  903|   812k|        data_.resize(len);
  904|   812k|    } catch (const std::exception &e) {
  905|      0|        RNP_LOG("malloc of %d bytes failed, %s", (int) len, e.what());
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  906|      0|        return RNP_ERROR_OUT_OF_MEMORY;
  907|      0|    }
  908|       |
  909|   812k|    size_t read = 0;
  910|   812k|    if (!src.read(data_.data(), len, &read) || (read != len)) {
  ------------------
  |  Branch (910:9): [True: 48, False: 812k]
  |  Branch (910:48): [True: 5.79k, False: 806k]
  ------------------
  911|  5.83k|        RNP_LOG("read %d instead of %d", (int) read, (int) len);
  ------------------
  |  |   76|  5.83k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  5.83k|    do {                                                                                 \
  |  |  |  |   69|  5.83k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 5.83k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  5.83k|            break;                                                                       \
  |  |  |  |   71|  5.83k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  912|  5.83k|        return RNP_ERROR_READ;
  913|  5.83k|    }
  914|   806k|    pos_ = 0;
  915|   806k|    return RNP_SUCCESS;
  916|   812k|}
_ZN17pgp_packet_body_t5writeER10pgp_dest_tb:
  920|  5.24M|{
  921|  5.24M|    if (hdr) {
  ------------------
  |  Branch (921:9): [True: 5.24M, False: 0]
  ------------------
  922|  5.24M|        uint8_t hdrbt[6] = {
  923|  5.24M|          (uint8_t)(tag_ | PGP_PTAG_ALWAYS_SET | PGP_PTAG_NEW_FORMAT), 0, 0, 0, 0, 0};
  ------------------
  |  |   47|  5.24M|#define PGP_PTAG_ALWAYS_SET 0x80
  ------------------
                        (uint8_t)(tag_ | PGP_PTAG_ALWAYS_SET | PGP_PTAG_NEW_FORMAT), 0, 0, 0, 0, 0};
  ------------------
  |  |   56|  5.24M|#define PGP_PTAG_NEW_FORMAT 0x40
  ------------------
  924|  5.24M|        size_t hlen = 1 + write_packet_len(&hdrbt[1], data_.size());
  925|  5.24M|        dst_write(&dst, hdrbt, hlen);
  926|  5.24M|    }
  927|  5.24M|    dst_write(&dst, data_.data(), data_.size());
  928|  5.24M|}
stream-packet.cpp:_ZL11get_pkt_lenPhPm:
  138|  8.90M|{
  139|  8.90M|    if (hdr[0] & PGP_PTAG_NEW_FORMAT) {
  ------------------
  |  |   56|  8.90M|#define PGP_PTAG_NEW_FORMAT 0x40
  ------------------
  |  Branch (139:9): [True: 8.20M, False: 701k]
  ------------------
  140|       |        // 1-byte length
  141|  8.20M|        if (hdr[1] < 192) {
  ------------------
  |  Branch (141:13): [True: 8.18M, False: 24.9k]
  ------------------
  142|  8.18M|            *pktlen = hdr[1];
  143|  8.18M|            return true;
  144|  8.18M|        }
  145|       |        // 2-byte length
  146|  24.9k|        if (hdr[1] < 224) {
  ------------------
  |  Branch (146:13): [True: 15.9k, False: 9.01k]
  ------------------
  147|  15.9k|            *pktlen = ((size_t)(hdr[1] - 192) << 8) + (size_t) hdr[2] + 192;
  148|  15.9k|            return true;
  149|  15.9k|        }
  150|       |        // partial length - we do not allow it here
  151|  9.01k|        if (hdr[1] < 255) {
  ------------------
  |  Branch (151:13): [True: 759, False: 8.25k]
  ------------------
  152|    759|            return false;
  153|    759|        }
  154|       |        // 4-byte length
  155|  8.25k|        *pktlen = read_uint32(&hdr[2]);
  156|  8.25k|        return true;
  157|  9.01k|    }
  158|       |
  159|   701k|    switch (hdr[0] & PGP_PTAG_OF_LENGTH_TYPE_MASK) {
  ------------------
  |  |   83|   701k|#define PGP_PTAG_OF_LENGTH_TYPE_MASK 0x03
  ------------------
  160|   585k|    case PGP_PTAG_OLD_LEN_1:
  ------------------
  |  Branch (160:5): [True: 585k, False: 116k]
  ------------------
  161|   585k|        *pktlen = hdr[1];
  162|   585k|        return true;
  163|  39.0k|    case PGP_PTAG_OLD_LEN_2:
  ------------------
  |  Branch (163:5): [True: 39.0k, False: 662k]
  ------------------
  164|  39.0k|        *pktlen = read_uint16(&hdr[1]);
  165|  39.0k|        return true;
  166|  2.91k|    case PGP_PTAG_OLD_LEN_4:
  ------------------
  |  Branch (166:5): [True: 2.91k, False: 698k]
  ------------------
  167|  2.91k|        *pktlen = read_uint32(&hdr[1]);
  168|  2.91k|        return true;
  169|  74.1k|    default:
  ------------------
  |  Branch (169:5): [True: 74.1k, False: 627k]
  ------------------
  170|  74.1k|        return false;
  171|   701k|    }
  172|   701k|}
stream-packet.cpp:_ZL26stream_read_packet_partialP12pgp_source_tP10pgp_dest_t:
  301|  1.57k|{
  302|  1.57k|    uint8_t hdr = 0;
  303|  1.57k|    if (!src->read_eq(&hdr, 1)) {
  ------------------
  |  Branch (303:9): [True: 0, False: 1.57k]
  ------------------
  304|      0|        return RNP_ERROR_READ;
  305|      0|    }
  306|       |
  307|  1.57k|    bool   last = false;
  308|  1.57k|    size_t partlen = 0;
  309|  1.57k|    if (!stream_read_partial_chunk_len(src, &partlen, &last)) {
  ------------------
  |  Branch (309:9): [True: 0, False: 1.57k]
  ------------------
  310|      0|        return RNP_ERROR_BAD_FORMAT;
  311|      0|    }
  312|       |
  313|  1.57k|    uint8_t *buf = (uint8_t *) malloc(PGP_INPUT_CACHE_SIZE);
  ------------------
  |  |   35|  1.57k|#define PGP_INPUT_CACHE_SIZE 32768
  ------------------
  314|  1.57k|    if (!buf) {
  ------------------
  |  Branch (314:9): [True: 0, False: 1.57k]
  ------------------
  315|      0|        return RNP_ERROR_OUT_OF_MEMORY;
  316|      0|    }
  317|       |
  318|  4.86k|    while (partlen > 0) {
  ------------------
  |  Branch (318:12): [True: 4.20k, False: 663]
  ------------------
  319|  4.20k|        size_t read = std::min(partlen, (size_t) PGP_INPUT_CACHE_SIZE);
  ------------------
  |  |   35|  4.20k|#define PGP_INPUT_CACHE_SIZE 32768
  ------------------
  320|  4.20k|        if (!src->read_eq(buf, read)) {
  ------------------
  |  Branch (320:13): [True: 376, False: 3.83k]
  ------------------
  321|    376|            free(buf);
  322|    376|            return RNP_ERROR_READ;
  323|    376|        }
  324|  3.83k|        if (dst) {
  ------------------
  |  Branch (324:13): [True: 0, False: 3.83k]
  ------------------
  325|      0|            dst_write(dst, buf, read);
  326|      0|        }
  327|  3.83k|        partlen -= read;
  328|  3.83k|        if (partlen > 0) {
  ------------------
  |  Branch (328:13): [True: 1.04k, False: 2.78k]
  ------------------
  329|  1.04k|            continue;
  330|  1.04k|        }
  331|  2.78k|        if (last) {
  ------------------
  |  Branch (331:13): [True: 483, False: 2.30k]
  ------------------
  332|    483|            break;
  333|    483|        }
  334|  2.30k|        if (!stream_read_partial_chunk_len(src, &partlen, &last)) {
  ------------------
  |  Branch (334:13): [True: 53, False: 2.25k]
  ------------------
  335|     53|            free(buf);
  336|     53|            return RNP_ERROR_BAD_FORMAT;
  337|     53|        }
  338|  2.30k|    }
  339|  1.14k|    free(buf);
  340|  1.14k|    return RNP_SUCCESS;
  341|  1.57k|}

_ZN16pgp_userid_pkt_tC2Ev:
  239|  12.5M|    pgp_userid_pkt_t() : tag(PGP_PKT_RESERVED){};

_Z18signature_hash_keyRK13pgp_key_pkt_tRN3rnp4HashE13pgp_version_t:
   53|   283k|{
   54|   283k|    if (key.pub_data.empty()) {
  ------------------
  |  Branch (54:9): [True: 0, False: 283k]
  ------------------
   55|       |        /* call self recursively if hashed data is not filled, to overcome const restriction */
   56|      0|        pgp_key_pkt_t keycp(key, true);
   57|      0|        keycp.fill_hashed_data();
   58|      0|        signature_hash_key(keycp, hash, pgpver);
   59|      0|        return;
   60|      0|    }
   61|       |
   62|   283k|    switch (pgpver) {
   63|  5.14k|    case PGP_V2:
  ------------------
  |  Branch (63:5): [True: 5.14k, False: 278k]
  ------------------
   64|  5.14k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  5.14k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
   65|  20.8k|    case PGP_V3:
  ------------------
  |  Branch (65:5): [True: 15.7k, False: 267k]
  ------------------
   66|  20.8k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  20.8k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
   67|   264k|    case PGP_V4: {
  ------------------
  |  Branch (67:5): [True: 243k, False: 39.8k]
  ------------------
   68|   264k|        assert(key.pub_data.size() <= ((size_t) 0xffffu));
   69|   264k|        uint8_t hdr[3] = {0x99, 0x00, 0x00};
   70|   264k|        write_uint16(hdr + 1, key.pub_data.size());
   71|   264k|        hash.add(hdr, 3);
   72|   264k|        hash.add(key.pub_data);
   73|   264k|        break;
   74|  20.8k|    }
   75|  1.31k|    case PGP_V5: {
  ------------------
  |  Branch (75:5): [True: 1.31k, False: 281k]
  ------------------
   76|  1.31k|        assert(key.pub_data.size() <= (size_t) 0xffffffffu);
   77|  1.31k|        uint8_t hdr[5] = {0x9A, 0x00, 0x00, 0x00, 0x00};
   78|  1.31k|        write_uint32(hdr + 1, key.pub_data.size());
   79|  1.31k|        hash.add(&hdr, 5);
   80|  1.31k|        hash.add(key.pub_data);
   81|  1.31k|        break;
   82|  20.8k|    }
   83|      0|#if defined(ENABLE_CRYPTO_REFRESH)
   84|  17.6k|    case PGP_V6: {
  ------------------
  |  Branch (84:5): [True: 17.6k, False: 265k]
  ------------------
   85|  17.6k|        assert(key.pub_data.size() <= (size_t) 0xffffffffu);
   86|  17.6k|        uint8_t hdr[5] = {0x9b, 0x00, 0x00, 0x00, 0x00};
   87|  17.6k|        write_uint32(hdr + 1, key.pub_data.size());
   88|  17.6k|        hash.add(hdr, sizeof(hdr));
   89|  17.6k|        hash.add(key.pub_data);
   90|  17.6k|        break;
   91|  20.8k|    }
   92|      0|#endif
   93|      0|    default:
  ------------------
  |  Branch (93:5): [True: 0, False: 283k]
  ------------------
   94|      0|        RNP_LOG("unknown key/sig version: %d", (int) pgpver);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   95|      0|        throw rnp::rnp_exception(RNP_ERROR_OUT_OF_MEMORY);
   96|   283k|    }
   97|   283k|}
_Z21signature_hash_useridRK16pgp_userid_pkt_tRN3rnp4HashE13pgp_version_t:
  101|  53.6k|{
  102|  53.6k|    if (sigver < PGP_V4) {
  ------------------
  |  Branch (102:9): [True: 14.8k, False: 38.8k]
  ------------------
  103|  14.8k|        hash.add(uid.uid.data(), uid.uid.size());
  104|  14.8k|        return;
  105|  14.8k|    }
  106|       |
  107|  38.8k|    uint8_t hdr[5] = {0};
  108|  38.8k|    switch (uid.tag) {
  109|  38.6k|    case PGP_PKT_USER_ID:
  ------------------
  |  Branch (109:5): [True: 38.6k, False: 252]
  ------------------
  110|  38.6k|        hdr[0] = 0xB4;
  111|  38.6k|        break;
  112|    252|    case PGP_PKT_USER_ATTR:
  ------------------
  |  Branch (112:5): [True: 252, False: 38.6k]
  ------------------
  113|    252|        hdr[0] = 0xD1;
  114|    252|        break;
  115|      0|    default:
  ------------------
  |  Branch (115:5): [True: 0, False: 38.8k]
  ------------------
  116|      0|        RNP_LOG("wrong uid");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  117|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
  118|  38.8k|    }
  119|  38.8k|    write_uint32(hdr + 1, uid.uid.size());
  120|  38.8k|    hash.add(hdr, 5);
  121|  38.8k|    hash.add(uid.uid.data(), uid.uid.size());
  122|  38.8k|}
_Z28signature_hash_certificationRKN3pgp3pkt9SignatureERK13pgp_key_pkt_tRK16pgp_userid_pkt_t:
  128|  53.9k|{
  129|  53.9k|    auto hash = signature_init(key, sig);
  130|  53.9k|    signature_hash_key(key, *hash, sig.version);
  131|  53.9k|    signature_hash_userid(userid, *hash, sig.version);
  132|  53.9k|    return hash;
  133|  53.9k|}
_Z22signature_hash_bindingRKN3pgp3pkt9SignatureERK13pgp_key_pkt_tS6_:
  139|  15.7k|{
  140|  15.7k|    auto hash = signature_init(key, sig);
  141|  15.7k|    signature_hash_key(key, *hash, sig.version);
  142|  15.7k|    signature_hash_key(subkey, *hash, sig.version);
  143|  15.7k|    return hash;
  144|  15.7k|}
_Z21signature_hash_directRKN3pgp3pkt9SignatureERK13pgp_key_pkt_t:
  148|  29.2k|{
  149|  29.2k|    auto hash = signature_init(key, sig);
  150|  29.2k|    signature_hash_key(key, *hash, sig.version);
  151|  29.2k|    return hash;
  152|  29.2k|}
_ZNK3pgp3pkt9Signature6get_idEv:
  209|   411k|{
  210|   411k|    auto hash = rnp::Hash::create(PGP_HASH_SHA1);
  211|   411k|    hash->add(hashed_data);
  212|   411k|    hash->add(material_buf);
  213|   411k|    SigID res = {0};
  214|   411k|    static_assert(std::tuple_size<decltype(res)>::value == PGP_SHA1_HASH_SIZE,
  215|   411k|                  "SigID size mismatch");
  216|   411k|    hash->finish(res.data());
  217|   411k|    return res;
  218|   411k|}
_ZN3pgp3pkt9Signature10get_subpktEhb:
  222|  50.3k|{
  223|  50.3k|    size_t idx = find_subpkt(stype, hashed);
  224|  50.3k|    return idx == SIZE_MAX ? nullptr : subpkts[idx].get();
  ------------------
  |  Branch (224:12): [True: 28.5k, False: 21.8k]
  ------------------
  225|  50.3k|}
_ZNK3pgp3pkt9Signature10get_subpktEhb:
  229|  3.73M|{
  230|  3.73M|    size_t idx = find_subpkt(stype, hashed);
  231|  3.73M|    return idx == SIZE_MAX ? nullptr : subpkts[idx].get();
  ------------------
  |  Branch (231:12): [True: 1.71M, False: 2.01M]
  ------------------
  232|  3.73M|}
_ZN3pgp3pkt9Signature10get_subpktENS0_6sigsub4TypeEb:
  236|  50.3k|{
  237|  50.3k|    return get_subpkt(static_cast<uint8_t>(type), hashed);
  238|  50.3k|}
_ZNK3pgp3pkt9Signature10get_subpktENS0_6sigsub4TypeEb:
  242|  3.73M|{
  243|  3.73M|    return get_subpkt(static_cast<uint8_t>(type), hashed);
  244|  3.73M|}
_ZNK3pgp3pkt9Signature10has_subpktEhb:
  248|   791k|{
  249|       |    return find_subpkt(stype, hashed) != SIZE_MAX;
  250|   791k|}
_ZNK3pgp3pkt9Signature9has_keyidEv:
  254|   807k|{
  255|   807k|    return (version < PGP_V4) || has_subpkt(PGP_SIG_SUBPKT_ISSUER_KEY_ID, false) ||
  ------------------
  |  Branch (255:12): [True: 86.4k, False: 721k]
  |  Branch (255:34): [True: 68.8k, False: 652k]
  ------------------
  256|   652k|           has_keyfp();
  ------------------
  |  Branch (256:12): [True: 214, False: 652k]
  ------------------
  257|   807k|}
_ZNK3pgp3pkt9Signature5keyidEv:
  261|   155k|{
  262|       |    /* version 3 uses signature field */
  263|   155k|    if (version < PGP_V4) {
  ------------------
  |  Branch (263:9): [True: 86.4k, False: 69.0k]
  ------------------
  264|  86.4k|        return signer;
  265|  86.4k|    }
  266|       |
  267|       |    /* version 4 and up use subpackets */
  268|  69.0k|    if (version == PGP_V4) {
  ------------------
  |  Branch (268:9): [True: 67.4k, False: 1.53k]
  ------------------
  269|  67.4k|        auto sub = dynamic_cast<const sigsub::IssuerKeyID *>(
  270|  67.4k|          get_subpkt(sigsub::Type::IssuerKeyID, false));
  271|  67.4k|        if (sub) {
  ------------------
  |  Branch (271:13): [True: 67.2k, False: 214]
  ------------------
  272|  67.2k|            return sub->keyid();
  273|  67.2k|        }
  274|  67.4k|    }
  275|       |    /* v5 and up must have fingerprint, from which keyid would be extracted */
  276|  1.74k|    return keyfp().keyid();
  277|  69.0k|}
_ZNK3pgp3pkt9Signature9has_keyfpEv:
  294|  2.25M|{
  295|  2.25M|    auto sub = dynamic_cast<const sigsub::IssuerFingerprint *>(
  296|  2.25M|      get_subpkt(sigsub::Type::IssuerFingerprint));
  297|  2.25M|    if (!sub) {
  ------------------
  |  Branch (297:9): [True: 1.48M, False: 766k]
  ------------------
  298|  1.48M|        return false;
  299|  1.48M|    }
  300|   766k|    switch (version) {
  301|   648k|    case PGP_V4:
  ------------------
  |  Branch (301:5): [True: 648k, False: 117k]
  ------------------
  302|   648k|        return sub->fp().size() == PGP_FINGERPRINT_V4_SIZE;
  ------------------
  |  |   43|   648k|#define PGP_FINGERPRINT_V4_SIZE 20
  ------------------
  303|  2.54k|    case PGP_V5:
  ------------------
  |  Branch (303:5): [True: 2.54k, False: 763k]
  ------------------
  304|  2.54k|#if defined(ENABLE_CRYPTO_REFRESH)
  305|   117k|    case PGP_V6:
  ------------------
  |  Branch (305:5): [True: 115k, False: 651k]
  ------------------
  306|   117k|#endif
  307|   117k|        return sub->fp().size() == PGP_FINGERPRINT_V5_SIZE;
  ------------------
  |  |   44|   117k|#define PGP_FINGERPRINT_V5_SIZE 32
  ------------------
  308|      0|    default:
  ------------------
  |  Branch (308:5): [True: 0, False: 766k]
  ------------------
  309|      0|        return false;
  310|   766k|    }
  311|   766k|}
_ZNK3pgp3pkt9Signature5keyfpEv:
  315|   765k|{
  316|   765k|    auto sub = dynamic_cast<const sigsub::IssuerFingerprint *>(
  317|   765k|      get_subpkt(sigsub::Type::IssuerFingerprint));
  318|   765k|    return sub ? sub->fp() : Fingerprint{};
  ------------------
  |  Branch (318:12): [True: 765k, False: 412]
  ------------------
  319|   765k|}
_ZNK3pgp3pkt9Signature8creationEv:
  336|   368k|{
  337|   368k|    if (version < PGP_V4) {
  ------------------
  |  Branch (337:9): [True: 44.2k, False: 324k]
  ------------------
  338|  44.2k|        return creation_time;
  339|  44.2k|    }
  340|   324k|    auto sub =
  341|   324k|      dynamic_cast<const sigsub::CreationTime *>(get_subpkt(sigsub::Type::CreationTime));
  342|   324k|    return sub ? sub->time() : 0;
  ------------------
  |  Branch (342:12): [True: 299k, False: 24.3k]
  ------------------
  343|   368k|}
_ZNK3pgp3pkt9Signature10expirationEv:
  359|   128k|{
  360|   128k|    auto sub =
  361|   128k|      dynamic_cast<const sigsub::ExpirationTime *>(get_subpkt(sigsub::Type::ExpirationTime));
  362|   128k|    return sub ? sub->time() : 0;
  ------------------
  |  Branch (362:12): [True: 3.11k, False: 124k]
  ------------------
  363|   128k|}
_ZNK3pgp3pkt9Signature14key_expirationEv:
  375|  93.8k|{
  376|  93.8k|    auto sub = dynamic_cast<const sigsub::KeyExpirationTime *>(
  377|  93.8k|      get_subpkt(sigsub::Type::KeyExpirationTime));
  378|  93.8k|    return sub ? sub->time() : 0;
  ------------------
  |  Branch (378:12): [True: 22.3k, False: 71.4k]
  ------------------
  379|  93.8k|}
_ZNK3pgp3pkt9Signature9key_flagsEv:
  391|  39.9k|{
  392|  39.9k|    auto sub = dynamic_cast<const sigsub::KeyFlags *>(get_subpkt(sigsub::Type::KeyFlags));
  393|  39.9k|    return sub ? sub->flags() : 0;
  ------------------
  |  Branch (393:12): [True: 39.9k, False: 0]
  ------------------
  394|  39.9k|}
_ZNK3pgp3pkt9Signature11primary_uidEv:
  406|  20.0k|{
  407|  20.0k|    auto sub =
  408|  20.0k|      dynamic_cast<const sigsub::PrimaryUserID *>(get_subpkt(sigsub::Type::PrimaryUserID));
  409|  20.0k|    return sub ? sub->primary() : 0;
  ------------------
  |  Branch (409:12): [True: 20.0k, False: 0]
  ------------------
  410|  20.0k|}
_ZNK3pgp3pkt9Signature17revocation_reasonEv:
  574|  8.08k|{
  575|  8.08k|    auto sub = dynamic_cast<const sigsub::RevocationReason *>(
  576|  8.08k|      get_subpkt(sigsub::Type::RevocationReason));
  577|  8.08k|    return sub ? sub->reason() : "";
  ------------------
  |  Branch (577:12): [True: 8.08k, False: 0]
  ------------------
  578|  8.08k|}
_ZNK3pgp3pkt9Signature15revocation_codeEv:
  582|  8.08k|{
  583|  8.08k|    auto sub = dynamic_cast<const sigsub::RevocationReason *>(
  584|  8.08k|      get_subpkt(sigsub::Type::RevocationReason));
  585|  8.08k|    return sub ? sub->code() : PGP_REVOCATION_NO_REASON;
  ------------------
  |  Branch (585:12): [True: 8.08k, False: 0]
  ------------------
  586|  8.08k|}
_ZNK3pgp3pkt9Signature14revoker_subpktEv:
  676|  21.8k|{
  677|  21.8k|    return dynamic_cast<const sigsub::RevocationKey *>(
  678|  21.8k|      get_subpkt(sigsub::Type::RevocationKey));
  679|  21.8k|}
_ZNK3pgp3pkt9Signature11has_revokerEv:
  683|  15.2k|{
  684|  15.2k|    return revoker_subpkt();
  685|  15.2k|}
_ZNK3pgp3pkt9Signature7revokerEv:
  689|  6.54k|{
  690|  6.54k|    auto sub = revoker_subpkt();
  691|  6.54k|    return sub ? sub->fp() : Fingerprint();
  ------------------
  |  Branch (691:12): [True: 6.54k, False: 0]
  ------------------
  692|  6.54k|}
_ZN3pgp3pkt9Signature17version_supportedE13pgp_version_t:
  743|   205k|{
  744|   205k|    if ((version >= PGP_V2) && (version <= PGP_V5)) {
  ------------------
  |  Branch (744:9): [True: 205k, False: 0]
  |  Branch (744:32): [True: 196k, False: 9.45k]
  ------------------
  745|   196k|        return true;
  746|   196k|    }
  747|  9.45k|#if defined(ENABLE_CRYPTO_REFRESH)
  748|  9.45k|    return version == PGP_V6;
  749|       |#else
  750|       |    return false;
  751|       |#endif
  752|   205k|}
_ZN3pgp3pkt9Signature10parse_v2v3ER17pgp_packet_body_t:
  756|  33.1k|{
  757|       |    /* parse v2/v3-specific fields, not the whole signature */
  758|  33.1k|    uint8_t buf[16] = {};
  759|  33.1k|    if (!pkt.get(buf, 16)) {
  ------------------
  |  Branch (759:9): [True: 94, False: 33.0k]
  ------------------
  760|     94|        RNP_LOG("cannot get enough bytes");
  ------------------
  |  |   76|     94|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     94|    do {                                                                                 \
  |  |  |  |   69|     94|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 94, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     94|            break;                                                                       \
  |  |  |  |   71|     94|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  761|     94|        return RNP_ERROR_BAD_FORMAT;
  762|     94|    }
  763|       |    /* length of hashed data, 5 */
  764|  33.0k|    if (buf[0] != 5) {
  ------------------
  |  Branch (764:9): [True: 149, False: 32.8k]
  ------------------
  765|    149|        RNP_LOG("wrong length of hashed data");
  ------------------
  |  |   76|    149|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    149|    do {                                                                                 \
  |  |  |  |   69|    149|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 149, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    149|            break;                                                                       \
  |  |  |  |   71|    149|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  766|    149|        return RNP_ERROR_BAD_FORMAT;
  767|    149|    }
  768|       |    /* hashed data */
  769|  32.8k|    hashed_data.assign(buf + 1, buf + 6);
  770|       |    /* signature type */
  771|  32.8k|    type_ = (pgp_sig_type_t) buf[1];
  772|       |    /* creation time */
  773|  32.8k|    creation_time = read_uint32(&buf[2]);
  774|       |    /* signer's key id */
  775|  32.8k|    static_assert(std::tuple_size<decltype(signer)>::value == PGP_KEY_ID_SIZE,
  776|  32.8k|                  "v3 signer field size mismatch");
  777|  32.8k|    memcpy(signer.data(), &buf[6], PGP_KEY_ID_SIZE);
  ------------------
  |  |   39|  32.8k|#define PGP_KEY_ID_SIZE 8
  ------------------
  778|       |    /* public key algorithm */
  779|  32.8k|    palg = (pgp_pubkey_alg_t) buf[14];
  780|       |    /* hash algorithm */
  781|  32.8k|    halg = (pgp_hash_alg_t) buf[15];
  782|  32.8k|    return RNP_SUCCESS;
  783|  33.0k|}
_ZN3pgp3pkt9Signature16parse_subpacketsEPhmb:
  789|   445k|{
  790|   445k|    bool res = true;
  791|       |
  792|  1.20M|    while (len) {
  ------------------
  |  Branch (792:12): [True: 768k, False: 440k]
  ------------------
  793|   768k|        if (subpkts.size() >= MAX_SUBPACKETS) {
  ------------------
  |  |  785|   768k|#define MAX_SUBPACKETS 64
  ------------------
  |  Branch (793:13): [True: 80, False: 768k]
  ------------------
  794|     80|            RNP_LOG("too many signature subpackets");
  ------------------
  |  |   76|     80|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     80|    do {                                                                                 \
  |  |  |  |   69|     80|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 80, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     80|            break;                                                                       \
  |  |  |  |   71|     80|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  795|     80|            return false;
  796|     80|        }
  797|   768k|        if (len < 2) {
  ------------------
  |  Branch (797:13): [True: 506, False: 768k]
  ------------------
  798|    506|            RNP_LOG("got single byte %" PRIu8, *buf);
  ------------------
  |  |   76|    506|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    506|    do {                                                                                 \
  |  |  |  |   69|    506|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 506, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    506|            break;                                                                       \
  |  |  |  |   71|    506|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  799|    506|            return false;
  800|    506|        }
  801|       |
  802|       |        /* subpacket length */
  803|   768k|        size_t splen = *buf++;
  804|   768k|        len--;
  805|   768k|        if ((splen >= 192) && (splen < 255)) {
  ------------------
  |  Branch (805:13): [True: 1.80k, False: 766k]
  |  Branch (805:31): [True: 1.42k, False: 380]
  ------------------
  806|  1.42k|            splen = ((splen - 192) << 8) + *buf++ + 192;
  807|  1.42k|            len--;
  808|   766k|        } else if (splen == 255) {
  ------------------
  |  Branch (808:20): [True: 380, False: 766k]
  ------------------
  809|    380|            if (len < 4) {
  ------------------
  |  Branch (809:17): [True: 62, False: 318]
  ------------------
  810|     62|                RNP_LOG("got 4-byte len but only %zu bytes in buffer", len);
  ------------------
  |  |   76|     62|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     62|    do {                                                                                 \
  |  |  |  |   69|     62|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 62, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     62|            break;                                                                       \
  |  |  |  |   71|     62|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  811|     62|                return false;
  812|     62|            }
  813|    318|            splen = read_uint32(buf);
  814|    318|            buf += 4;
  815|    318|            len -= 4;
  816|    318|        }
  817|       |
  818|   767k|        if (!splen) {
  ------------------
  |  Branch (818:13): [True: 1.13k, False: 766k]
  ------------------
  819|  1.13k|            RNP_LOG("got subpacket with 0 length");
  ------------------
  |  |   76|  1.13k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.13k|    do {                                                                                 \
  |  |  |  |   69|  1.13k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.13k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.13k|            break;                                                                       \
  |  |  |  |   71|  1.13k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  820|  1.13k|            return false;
  821|  1.13k|        }
  822|       |
  823|       |        /* subpacket data */
  824|   766k|        if (len < splen) {
  ------------------
  |  Branch (824:13): [True: 3.17k, False: 763k]
  ------------------
  825|  3.17k|            RNP_LOG("got subpacket len %zu, while only %zu bytes left", splen, len);
  ------------------
  |  |   76|  3.17k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  3.17k|    do {                                                                                 \
  |  |  |  |   69|  3.17k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 3.17k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  3.17k|            break;                                                                       \
  |  |  |  |   71|  3.17k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  826|  3.17k|            return false;
  827|  3.17k|        }
  828|       |
  829|   763k|        auto subpkt = sigsub::Raw::create(buf, splen, hashed);
  830|   763k|        if (!subpkt) {
  ------------------
  |  Branch (830:13): [True: 15.4k, False: 748k]
  ------------------
  831|  15.4k|            res = false;
  832|   748k|        } else {
  833|   748k|            subpkts.items.push_back(std::move(subpkt));
  834|   748k|        }
  835|   763k|        len -= splen;
  836|   763k|        buf += splen;
  837|   763k|    }
  838|   440k|    return res;
  839|   445k|}
_ZN3pgp3pkt9Signature14get_subpkt_lenER17pgp_packet_body_tRm:
  843|   449k|{
  844|   449k|    switch (version) {
  845|   416k|    case PGP_V4:
  ------------------
  |  Branch (845:5): [True: 416k, False: 32.3k]
  ------------------
  846|   421k|    case PGP_V5: {
  ------------------
  |  Branch (846:5): [True: 4.79k, False: 444k]
  ------------------
  847|   421k|        uint16_t len = 0;
  848|   421k|        if (!pkt.get(len)) {
  ------------------
  |  Branch (848:13): [True: 73, False: 421k]
  ------------------
  849|     73|            return false;
  850|     73|        }
  851|   421k|        splen = len;
  852|   421k|        return true;
  853|   421k|    }
  854|      0|#if defined(ENABLE_CRYPTO_REFRESH)
  855|  27.6k|    case PGP_V6: {
  ------------------
  |  Branch (855:5): [True: 27.6k, False: 421k]
  ------------------
  856|  27.6k|        uint32_t len = 0;
  857|  27.6k|        if (!pkt.get(len)) {
  ------------------
  |  Branch (857:13): [True: 306, False: 27.3k]
  ------------------
  858|    306|            return false;
  859|    306|        }
  860|  27.3k|        splen = len;
  861|  27.3k|        return true;
  862|  27.6k|    }
  863|      0|#endif
  864|      0|    default:
  ------------------
  |  Branch (864:5): [True: 0, False: 449k]
  ------------------
  865|      0|        RNP_LOG("unsupported signature version: %d", (int) version);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  866|      0|        return false;
  867|   449k|    }
  868|   449k|}
_ZNK3pgp3pkt9Signature11find_subpktEhbm:
  872|  4.57M|{
  873|  4.57M|    if (version < PGP_V4) {
  ------------------
  |  Branch (873:9): [True: 131k, False: 4.44M]
  ------------------
  874|   131k|        return SIZE_MAX;
  875|   131k|    }
  876|  12.2M|    for (size_t idx = 0; idx < subpkts.size(); idx++) {
  ------------------
  |  Branch (876:26): [True: 9.93M, False: 2.29M]
  ------------------
  877|  9.93M|        if ((subpkts[idx]->raw_type() != stype) || (hashed && !subpkts[idx]->hashed())) {
  ------------------
  |  Branch (877:13): [True: 7.77M, False: 2.15M]
  |  Branch (877:53): [True: 2.01M, False: 137k]
  |  Branch (877:63): [True: 5.08k, False: 2.01M]
  ------------------
  878|  7.78M|            continue;
  879|  7.78M|        }
  880|  2.14M|        if (!skip) {
  ------------------
  |  Branch (880:13): [True: 2.14M, False: 0]
  ------------------
  881|  2.14M|            return idx;
  882|  2.14M|        }
  883|      0|        skip--;
  884|      0|    }
  885|  2.29M|    return SIZE_MAX;
  886|  4.44M|}
_ZN3pgp3pkt9Signature10parse_v4upER17pgp_packet_body_t:
  896|   227k|{
  897|       |    /* parse v4 (and up) specific fields, not the whole signature */
  898|   227k|    uint8_t buf[3];
  899|   227k|    if (!pkt.get(buf, 3)) {
  ------------------
  |  Branch (899:9): [True: 92, False: 227k]
  ------------------
  900|     92|        RNP_LOG("cannot get first 3 bytes");
  ------------------
  |  |   76|     92|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     92|    do {                                                                                 \
  |  |  |  |   69|     92|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 92, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     92|            break;                                                                       \
  |  |  |  |   71|     92|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  901|     92|        return RNP_ERROR_BAD_FORMAT;
  902|     92|    }
  903|       |
  904|       |    /* signature type */
  905|   227k|    type_ = (pgp_sig_type_t) buf[0];
  906|       |    /* public key algorithm */
  907|   227k|    palg = (pgp_pubkey_alg_t) buf[1];
  908|       |    /* hash algorithm */
  909|   227k|    halg = (pgp_hash_alg_t) buf[2];
  910|       |    /* hashed subpackets length */
  911|       |
  912|   227k|    size_t splen = 0;
  913|   227k|    auto   hash_begin = pkt.cur();
  914|   227k|    if (!get_subpkt_len(pkt, splen)) {
  ------------------
  |  Branch (914:9): [True: 379, False: 227k]
  ------------------
  915|    379|        RNP_LOG("cannot get hashed len");
  ------------------
  |  |   76|    379|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    379|    do {                                                                                 \
  |  |  |  |   69|    379|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 379, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    379|            break;                                                                       \
  |  |  |  |   71|    379|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  916|    379|        return RNP_ERROR_BAD_FORMAT;
  917|    379|    }
  918|   227k|    size_t splen_size = pkt.cur() - hash_begin;
  919|       |    /* hashed subpackets length + splen_size bytes of length of unhashed subpackets */
  920|   227k|    if (pkt.left() < splen + splen_size) {
  ------------------
  |  Branch (920:9): [True: 1.50k, False: 225k]
  ------------------
  921|  1.50k|        RNP_LOG("wrong packet or hashed subpackets length");
  ------------------
  |  |   76|  1.50k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.50k|    do {                                                                                 \
  |  |  |  |   69|  1.50k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.50k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.50k|            break;                                                                       \
  |  |  |  |   71|  1.50k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  922|  1.50k|        return RNP_ERROR_BAD_FORMAT;
  923|  1.50k|    }
  924|       |    /* building hashed data */
  925|   225k|    size_t hlen = 4 + splen + splen_size;
  926|   225k|    hashed_data.resize(hlen);
  927|   225k|    hashed_data[0] = version;
  928|   225k|    static_assert(sizeof(buf) == 3, "Wrong signature header size.");
  929|   225k|    pkt.skip_back(3 + splen_size);
  930|       |
  931|   225k|    if (!pkt.get(hashed_data.data() + 1, hlen - 1)) {
  ------------------
  |  Branch (931:9): [True: 0, False: 225k]
  ------------------
  932|      0|        RNP_LOG("cannot get hashed subpackets data");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  933|      0|        return RNP_ERROR_BAD_FORMAT;
  934|      0|    }
  935|       |    /* parsing hashed subpackets */
  936|   225k|    if (!parse_subpackets(hashed_data.data() + 4 + splen_size, splen, true)) {
  ------------------
  |  Branch (936:9): [True: 4.32k, False: 221k]
  ------------------
  937|  4.32k|        RNP_LOG("failed to parse hashed subpackets");
  ------------------
  |  |   76|  4.32k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  4.32k|    do {                                                                                 \
  |  |  |  |   69|  4.32k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 4.32k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  4.32k|            break;                                                                       \
  |  |  |  |   71|  4.32k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  938|  4.32k|        return RNP_ERROR_BAD_FORMAT;
  939|  4.32k|    }
  940|       |
  941|       |    /* reading unhashed subpackets */
  942|   221k|    if (!get_subpkt_len(pkt, splen)) {
  ------------------
  |  Branch (942:9): [True: 0, False: 221k]
  ------------------
  943|      0|        RNP_LOG("cannot get unhashed len");
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|      0|        return RNP_ERROR_BAD_FORMAT;
  945|      0|    }
  946|   221k|    if (pkt.left() < splen) {
  ------------------
  |  Branch (946:9): [True: 1.53k, False: 219k]
  ------------------
  947|  1.53k|        RNP_LOG("not enough data for unhashed subpackets");
  ------------------
  |  |   76|  1.53k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.53k|    do {                                                                                 \
  |  |  |  |   69|  1.53k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.53k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.53k|            break;                                                                       \
  |  |  |  |   71|  1.53k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  948|  1.53k|        return RNP_ERROR_BAD_FORMAT;
  949|  1.53k|    }
  950|   219k|    if (!parse_subpackets(pkt.cur(), splen, false)) {
  ------------------
  |  Branch (950:9): [True: 1.08k, False: 218k]
  ------------------
  951|  1.08k|        RNP_LOG("failed to parse unhashed subpackets");
  ------------------
  |  |   76|  1.08k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.08k|    do {                                                                                 \
  |  |  |  |   69|  1.08k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.08k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.08k|            break;                                                                       \
  |  |  |  |   71|  1.08k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  952|  1.08k|        return RNP_ERROR_BAD_FORMAT;
  953|  1.08k|    }
  954|   218k|    pkt.skip(splen);
  955|   218k|    return RNP_SUCCESS;
  956|   219k|}
_ZN3pgp3pkt9Signature5parseER17pgp_packet_body_t:
  960|   262k|{
  961|   262k|    uint8_t ver = 0;
  962|   262k|    if (!pkt.get(ver)) {
  ------------------
  |  Branch (962:9): [True: 474, False: 262k]
  ------------------
  963|    474|        return RNP_ERROR_BAD_FORMAT;
  964|    474|    }
  965|   262k|    version = (pgp_version_t) ver;
  966|       |
  967|       |    /* v3 or v4 or v6 signature body */
  968|   262k|    rnp_result_t res;
  969|   262k|    switch (ver) {
  970|  8.97k|    case PGP_V2:
  ------------------
  |  Branch (970:5): [True: 8.97k, False: 253k]
  ------------------
  971|  8.97k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|  8.97k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  972|  33.1k|    case PGP_V3:
  ------------------
  |  Branch (972:5): [True: 24.1k, False: 237k]
  ------------------
  973|  33.1k|        res = parse_v2v3(pkt);
  974|  33.1k|        break;
  975|   211k|    case PGP_V4:
  ------------------
  |  Branch (975:5): [True: 211k, False: 50.9k]
  ------------------
  976|   211k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|   211k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  977|   213k|    case PGP_V5:
  ------------------
  |  Branch (977:5): [True: 2.60k, False: 259k]
  ------------------
  978|   213k|#if defined(ENABLE_CRYPTO_REFRESH)
  979|   213k|        FALLTHROUGH_STATEMENT;
  ------------------
  |  |   81|   213k|# define FALLTHROUGH_STATEMENT [[fallthrough]]
  ------------------
  980|   227k|    case PGP_V6:
  ------------------
  |  Branch (980:5): [True: 14.0k, False: 247k]
  ------------------
  981|   227k|#endif
  982|   227k|        res = parse_v4up(pkt);
  983|   227k|        break;
  984|  1.09k|    default:
  ------------------
  |  Branch (984:5): [True: 1.09k, False: 260k]
  ------------------
  985|  1.09k|        RNP_LOG("unknown signature version: %d", (int) ver);
  ------------------
  |  |   76|  1.09k|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|  1.09k|    do {                                                                                 \
  |  |  |  |   69|  1.09k|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 1.09k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|  1.09k|            break;                                                                       \
  |  |  |  |   71|  1.09k|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  986|  1.09k|        res = RNP_ERROR_BAD_FORMAT;
  987|   262k|    }
  988|       |
  989|   262k|    if (res) {
  ------------------
  |  Branch (989:9): [True: 10.2k, False: 251k]
  ------------------
  990|  10.2k|        return res;
  991|  10.2k|    }
  992|       |
  993|       |    /* left 16 bits of the hash */
  994|   251k|    if (!pkt.get(lbits.data(), 2)) {
  ------------------
  |  Branch (994:9): [True: 63, False: 251k]
  ------------------
  995|     63|        RNP_LOG("not enough data for hash left bits");
  ------------------
  |  |   76|     63|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     63|    do {                                                                                 \
  |  |  |  |   69|     63|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 63, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     63|            break;                                                                       \
  |  |  |  |   71|     63|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  996|     63|        return RNP_ERROR_BAD_FORMAT;
  997|     63|    }
  998|       |
  999|   251k|#if defined(ENABLE_CRYPTO_REFRESH)
 1000|   251k|    if (ver == PGP_V6) {
  ------------------
  |  Branch (1000:9): [True: 13.4k, False: 238k]
  ------------------
 1001|  13.4k|        uint8_t salt_size = 0;
 1002|  13.4k|        if (!pkt.get(salt_size)) {
  ------------------
  |  Branch (1002:13): [True: 67, False: 13.3k]
  ------------------
 1003|     67|            RNP_LOG("not enough data for v6 salt size octet");
  ------------------
  |  |   76|     67|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     67|    do {                                                                                 \
  |  |  |  |   69|     67|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 67, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     67|            break;                                                                       \
  |  |  |  |   71|     67|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1004|     67|            return RNP_ERROR_BAD_FORMAT;
 1005|     67|        }
 1006|  13.3k|        if (salt_size != rnp::Hash::size(halg) / 2) {
  ------------------
  |  Branch (1006:13): [True: 233, False: 13.1k]
  ------------------
 1007|    233|            RNP_LOG("invalid salt size");
  ------------------
  |  |   76|    233|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    233|    do {                                                                                 \
  |  |  |  |   69|    233|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 233, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    233|            break;                                                                       \
  |  |  |  |   71|    233|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1008|    233|            return RNP_ERROR_BAD_FORMAT;
 1009|    233|        }
 1010|  13.1k|        if (!pkt.get(salt, salt_size)) {
  ------------------
  |  Branch (1010:13): [True: 15, False: 13.0k]
  ------------------
 1011|     15|            RNP_LOG("not enough data for v6 signature salt");
  ------------------
  |  |   76|     15|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|     15|    do {                                                                                 \
  |  |  |  |   69|     15|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 15, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|     15|            break;                                                                       \
  |  |  |  |   71|     15|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1012|     15|            return RNP_ERROR_BAD_FORMAT;
 1013|     15|        }
 1014|  13.1k|    }
 1015|   251k|#endif
 1016|       |
 1017|       |    /* raw signature material */
 1018|       |    /* we cannot fail here */
 1019|   251k|    pkt.get(material_buf, pkt.left());
 1020|       |    /* check whether it can be parsed */
 1021|   251k|    if (!parse_material()) {
  ------------------
  |  Branch (1021:9): [True: 5.36k, False: 246k]
  ------------------
 1022|  5.36k|        return RNP_ERROR_BAD_FORMAT;
 1023|  5.36k|    }
 1024|   246k|    return RNP_SUCCESS;
 1025|   251k|}
_ZN3pgp3pkt9Signature5parseER12pgp_source_t:
 1029|   330k|{
 1030|   330k|    pgp_packet_body_t pkt(PGP_PKT_SIGNATURE);
 1031|   330k|    rnp_result_t      res = pkt.read(src);
 1032|   330k|    if (res) {
  ------------------
  |  Branch (1032:9): [True: 78.1k, False: 252k]
  ------------------
 1033|  78.1k|        return res;
 1034|  78.1k|    }
 1035|   252k|    return parse(pkt);
 1036|   330k|}
_ZNK3pgp3pkt9Signature14parse_materialEv:
 1040|   348k|{
 1041|   348k|    auto sig = SigMaterial::create(palg, halg);
 1042|   348k|    if (!sig) {
  ------------------
  |  Branch (1042:9): [True: 1.06k, False: 347k]
  ------------------
 1043|  1.06k|        return nullptr;
 1044|  1.06k|    }
 1045|   347k|    pgp_packet_body_t pkt(material_buf);
 1046|   347k|    if (!sig->parse(pkt)) {
  ------------------
  |  Branch (1046:9): [True: 3.97k, False: 343k]
  ------------------
 1047|  3.97k|        return nullptr;
 1048|  3.97k|    }
 1049|   343k|    if (pkt.left()) {
  ------------------
  |  Branch (1049:9): [True: 335, False: 343k]
  ------------------
 1050|    335|        RNP_LOG("extra %zu bytes in pk packet", pkt.left());
  ------------------
  |  |   76|    335|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|    335|    do {                                                                                 \
  |  |  |  |   69|    335|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 335, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|    335|            break;                                                                       \
  |  |  |  |   71|    335|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1051|    335|        return nullptr;
 1052|    335|    }
 1053|   343k|    return sig;
 1054|   343k|}
_ZNK3pgp3pkt9Signature5writeER10pgp_dest_tb:
 1058|   205k|{
 1059|   205k|    if (!Signature::version_supported(version)) {
  ------------------
  |  Branch (1059:9): [True: 0, False: 205k]
  ------------------
 1060|      0|        RNP_LOG("don't know version %d", (int) version);
  ------------------
  |  |   76|      0|#define RNP_LOG(...) RNP_LOG_FD(stderr, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |   68|      0|    do {                                                                                 \
  |  |  |  |   69|      0|        if (!rnp_log_switch())                                                           \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (69:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |   70|      0|            break;                                                                       \
  |  |  |  |   71|      0|        (void) fprintf((fd), "[%s() %s:%d] ", __func__, __SOURCE_PATH_FILE__, __LINE__); \
  |  |  |  |  ------------------
  |  |  |  |  |  |   65|      0|#define __SOURCE_PATH_FILE__ (&(__FILE__[SOURCE_PATH_SIZE + 3]))
  |  |  |  |  ------------------
  |  |  |  |   72|      0|        (void) fprintf((fd), __VA_ARGS__);                                               \
  |  |  |  |   73|      0|        (void) fprintf((fd), "\n");                                                      \
  |  |  |  |   74|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (74:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1061|      0|        throw rnp::rnp_exception(RNP_ERROR_BAD_PARAMETERS);
 1062|      0|    }
 1063|       |
 1064|   205k|    pgp_packet_body_t pktbody(PGP_PKT_SIGNATURE);
 1065|       |
 1066|   205k|    if (version < PGP_V4) {
  ------------------
  |  Branch (1066:9): [True: 32.1k, False: 173k]
  ------------------
 1067|       |        /* for v3 signatures hashed data includes only type + creation_time */
 1068|  32.1k|        pktbody.add_byte(version);
 1069|  32.1k|        pktbody.add_byte(hashed_data.size());
 1070|  32.1k|        pktbody.add(hashed_data);
 1071|  32.1k|        pktbody.add(signer);
 1072|  32.1k|        pktbody.add_byte(palg);
 1073|  32.1k|        pktbody.add_byte(halg);
 1074|   173k|    } else {
 1075|       |        /* for v4 sig->hashed_data must contain most of signature fields */
 1076|   173k|        pktbody.add(hashed_data);
 1077|   173k|        pktbody.add_subpackets(*this, false);
 1078|   173k|    }
 1079|   205k|    pktbody.add(lbits.data(), 2);
 1080|   205k|#if defined(ENABLE_CRYPTO_REFRESH)
 1081|   205k|    if (version == PGP_V6) {
  ------------------
  |  Branch (1081:9): [True: 9.45k, False: 196k]
  ------------------
 1082|  9.45k|        pktbody.add_byte(salt.size());
 1083|  9.45k|        pktbody.add(salt);
 1084|  9.45k|    }
 1085|   205k|#endif
 1086|       |    /* write mpis */
 1087|   205k|    pktbody.add(material_buf);
 1088|   205k|    pktbody.write(dst, hdr);
 1089|   205k|}
_ZNK3pgp3pkt9Signature5writeEb:
 1093|   205k|{
 1094|   205k|    rnp::MemoryDest dst;
 1095|   205k|    write(dst.dst(), hdr);
 1096|   205k|    return dst.to_vector();
 1097|   205k|}

_ZN3pgp3pkt9SignatureC2Ev:
   77|   340k|        : type_(PGP_SIG_BINARY), version(PGP_VUNKNOWN), palg(PGP_PKA_NOTHING),
   78|   340k|          halg(PGP_HASH_UNKNOWN), creation_time(0){};
_ZNK3pgp3pkt9Signature4typeEv:
   85|  1.46M|    {
   86|  1.46M|        return type_;
   87|  1.46M|    };
_ZNK3pgp3pkt9Signature11is_documentEv:
   96|  97.0k|    {
   97|  97.0k|        return (type_ == PGP_SIG_BINARY) || (type_ == PGP_SIG_TEXT);
  ------------------
  |  Branch (97:16): [True: 0, False: 97.0k]
  |  Branch (97:45): [True: 0, False: 97.0k]
  ------------------
   98|  97.0k|    };

