tor-browser

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

der_getint_unittest.cc (3361B)


      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 "secder.h"
      8 #include "secerr.h"
      9 
     10 #include <climits>
     11 #include <memory>
     12 
     13 #include "gtest/gtest.h"
     14 
     15 namespace nss_test {
     16 
     17 class DERIntegerDecodingTest : public ::testing::Test {
     18 public:
     19  void TestGetInteger(long number, unsigned char *der_number,
     20                      unsigned int len) {
     21    SECItem input = {siBuffer, der_number, len};
     22    EXPECT_EQ(number, DER_GetInteger(&input));
     23  }
     24 
     25  void GetDerLongMax(unsigned char *der_number, unsigned int len) {
     26    der_number[0] = 0x7F;
     27    for (unsigned int i = 1; i < len; ++i) {
     28      der_number[i] = 0xFF;
     29    }
     30  }
     31 
     32  void GetDerLongMin(unsigned char *der_number, unsigned int len) {
     33    der_number[0] = 0x80;
     34    for (unsigned int i = 1; i < len; ++i) {
     35      der_number[i] = 0x00;
     36    }
     37  }
     38 };
     39 
     40 TEST_F(DERIntegerDecodingTest, DecodeLongMinus126) {
     41  unsigned char der[] = {0x82};
     42  TestGetInteger(-126, der, sizeof(der));
     43 }
     44 
     45 TEST_F(DERIntegerDecodingTest, DecodeLong130) {
     46  unsigned char der[] = {0x00, 0x82};
     47  TestGetInteger(130, der, sizeof(der));
     48 }
     49 
     50 TEST_F(DERIntegerDecodingTest, DecodeLong130Padded) {
     51  unsigned char der[sizeof(long) * 2] = {0};
     52  der[sizeof(der) - 1] = {0x82};
     53  TestGetInteger(130, der, sizeof(der));
     54 }
     55 
     56 TEST_F(DERIntegerDecodingTest, DecodeLong0) {
     57  unsigned char der[] = {0x00};
     58  TestGetInteger(0, der, sizeof(der));
     59 }
     60 
     61 TEST_F(DERIntegerDecodingTest, DecodeLong1) {
     62  unsigned char der[] = {0x01};
     63  TestGetInteger(1, der, sizeof(der));
     64 }
     65 
     66 TEST_F(DERIntegerDecodingTest, DecodeLongMinus1) {
     67  unsigned char der[] = {0xFF};
     68  TestGetInteger(-1, der, sizeof(der));
     69 }
     70 
     71 TEST_F(DERIntegerDecodingTest, DecodeLongMinus1Padded) {
     72  unsigned char der[sizeof(long) * 2];
     73  memset(der, 0xFF, sizeof(der));
     74  TestGetInteger(-1, der, sizeof(der));
     75 }
     76 
     77 TEST_F(DERIntegerDecodingTest, DecodeLongMax) {
     78  unsigned char der[sizeof(long)];
     79  GetDerLongMax(der, sizeof(long));
     80  TestGetInteger(LONG_MAX, der, sizeof(der));
     81 }
     82 
     83 TEST_F(DERIntegerDecodingTest, DecodeLongMin) {
     84  unsigned char der[sizeof(long)];
     85  GetDerLongMin(der, sizeof(long));
     86  TestGetInteger(LONG_MIN, der, sizeof(der));
     87 }
     88 
     89 TEST_F(DERIntegerDecodingTest, DecodeLongMaxMinus1) {
     90  unsigned char der[sizeof(long)];
     91  GetDerLongMax(der, sizeof(long));
     92  der[sizeof(long) - 1] = 0xFE;
     93  TestGetInteger(LONG_MAX - 1, der, sizeof(der));
     94 }
     95 
     96 TEST_F(DERIntegerDecodingTest, DecodeLongMinPlus1) {
     97  unsigned char der[sizeof(long)];
     98  GetDerLongMin(der, sizeof(long));
     99  der[sizeof(long) - 1] = 0x01;
    100  TestGetInteger(LONG_MIN + 1, der, sizeof(der));
    101 }
    102 
    103 TEST_F(DERIntegerDecodingTest, DecodeLongMinMinus1) {
    104  unsigned char der[sizeof(long) + 1];
    105  GetDerLongMax(der, sizeof(long) + 1);
    106  der[0] = 0xFF;
    107  der[1] = 0x7F;
    108  TestGetInteger(LONG_MIN, der, sizeof(der));
    109  EXPECT_EQ(SEC_ERROR_BAD_DER, PORT_GetError());
    110 }
    111 
    112 TEST_F(DERIntegerDecodingTest, DecodeLongMaxPlus1) {
    113  unsigned char der[sizeof(long) + 1];
    114  GetDerLongMin(der, sizeof(long) + 1);
    115  der[0] = 0x00;
    116  der[1] = 0x80;
    117  TestGetInteger(LONG_MAX, der, sizeof(der));
    118  EXPECT_EQ(SEC_ERROR_BAD_DER, PORT_GetError());
    119 }
    120 
    121 }  // namespace nss_test