tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

tls_parser.cc (1650B)


      1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this file,
      5 * You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include "tls_parser.h"
      8 
      9 namespace nss_test {
     10 
     11 bool TlsParser::Read(uint8_t* val) {
     12  if (remaining() < 1) {
     13    return false;
     14  }
     15  *val = *ptr();
     16  consume(1);
     17  return true;
     18 }
     19 
     20 bool TlsParser::Read(uint32_t* val, size_t size) {
     21  if (size > sizeof(uint32_t)) {
     22    return false;
     23  }
     24 
     25  uint32_t v = 0;
     26  for (size_t i = 0; i < size; ++i) {
     27    uint8_t tmp;
     28    if (!Read(&tmp)) {
     29      return false;
     30    }
     31 
     32    v = (v << 8) | tmp;
     33  }
     34 
     35  *val = v;
     36  return true;
     37 }
     38 
     39 bool TlsParser::Read(DataBuffer* val, size_t len) {
     40  if (remaining() < len) {
     41    return false;
     42  }
     43 
     44  val->Assign(ptr(), len);
     45  consume(len);
     46  return true;
     47 }
     48 
     49 bool TlsParser::ReadFromMark(DataBuffer* val, size_t len, size_t mark) {
     50  auto saved = offset_;
     51  offset_ = mark;
     52 
     53  if (remaining() < len) {
     54    offset_ = saved;
     55    return false;
     56  }
     57 
     58  val->Assign(ptr(), len);
     59 
     60  offset_ = saved;
     61  return true;
     62 }
     63 
     64 bool TlsParser::ReadVariable(DataBuffer* val, size_t len_size) {
     65  uint32_t len;
     66  if (!Read(&len, len_size)) {
     67    return false;
     68  }
     69  return Read(val, len);
     70 }
     71 
     72 bool TlsParser::Skip(size_t len) {
     73  if (len > remaining()) {
     74    return false;
     75  }
     76  consume(len);
     77  return true;
     78 }
     79 
     80 bool TlsParser::SkipVariable(size_t len_size) {
     81  uint32_t len;
     82  if (!Read(&len, len_size)) {
     83    return false;
     84  }
     85  return Skip(len);
     86 }
     87 
     88 }  // namespace nss_test