~vcs-imports/libtasn1/trunk

« back to all changes in this revision

Viewing changes to tests/Test_strings.c

  • Committer: Nikos Mavrogiannopoulos
  • Date: 2018-01-21 09:50:55 UTC
  • Revision ID: git-v1:73fa8255ac65985b2a7b5596191892b6027e0c4d
development moved to gitlab

Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*
2
 
 * Copyright (C) 2012-2014 Free Software Foundation, Inc.
3
 
 *
4
 
 * This file is part of LIBTASN1.
5
 
 *
6
 
 * This program is free software: you can redistribute it and/or modify
7
 
 * it under the terms of the GNU General Public License as published by
8
 
 * the Free Software Foundation, either version 3 of the License, or
9
 
 * (at your option) any later version.
10
 
 *
11
 
 * This program is distributed in the hope that it will be useful,
12
 
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 
 * GNU General Public License for more details.
15
 
 *
16
 
 * You should have received a copy of the GNU General Public License
17
 
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
18
 
 *
19
 
 * Written by Simon Josefsson
20
 
 *
21
 
 */
22
 
 
23
 
#include <stdio.h>
24
 
#include <string.h>
25
 
#include <stdlib.h>
26
 
 
27
 
#include "libtasn1.h"
28
 
 
29
 
struct tv
30
 
{
31
 
  unsigned int etype;
32
 
  unsigned int str_len;
33
 
  const void *str;
34
 
  unsigned int der_len;
35
 
  const void *der;
36
 
};
37
 
 
38
 
static const struct tv tv[] = {
39
 
  {ASN1_ETYPE_IA5_STRING, 20,
40
 
   "\x63\x73\x63\x61\x40\x70\x61\x73\x73\x70\x6f\x72\x74\x2e\x67\x6f\x76\x2e\x67\x72",
41
 
   22,
42
 
   "\x16\x14\x63\x73\x63\x61\x40\x70\x61\x73\x73\x70\x6f\x72\x74\x2e\x67\x6f\x76\x2e\x67\x72"},
43
 
  {ASN1_ETYPE_PRINTABLE_STRING, 5, "\x4e\x69\x6b\x6f\x73",
44
 
   7, "\x13\x05\x4e\x69\x6b\x6f\x73"},
45
 
  {ASN1_ETYPE_UTF8_STRING, 12, "Αττική",
46
 
   14, "\x0c\x0c\xce\x91\xcf\x84\xcf\x84\xce\xb9\xce\xba\xce\xae"},
47
 
  {ASN1_ETYPE_TELETEX_STRING, 15,
48
 
   "\x53\x69\x6d\x6f\x6e\x20\x4a\x6f\x73\x65\x66\x73\x73\x6f\x6e",
49
 
   17,
50
 
   "\x14\x0f\x53\x69\x6d\x6f\x6e\x20\x4a\x6f\x73\x65\x66\x73\x73\x6f\x6e"},
51
 
  {ASN1_ETYPE_OCTET_STRING, 36,
52
 
   "\x30\x22\x80\x0F\x32\x30\x31\x31\x30\x38\x32\x31\x30\x38\x30\x30\x30\x36\x5A\x81\x0F\x32\x30\x31\x31\x30\x38\x32\x33\x32\x30\x35\x39\x35\x39\x5A",
53
 
   38,
54
 
   "\x04\x24\x30\x22\x80\x0F\x32\x30\x31\x31\x30\x38\x32\x31\x30\x38\x30\x30\x30\x36\x5A\x81\x0F\x32\x30\x31\x31\x30\x38\x32\x33\x32\x30\x35\x39\x35\x39\x5A"}
55
 
};
56
 
 
57
 
#define SSTR(x) sizeof(x)-1,x
58
 
static const struct tv ber[] = {
59
 
  {ASN1_ETYPE_OCTET_STRING, 
60
 
   SSTR("\xa0\xa0"),
61
 
   SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x00\x00")},
62
 
  {ASN1_ETYPE_OCTET_STRING,
63
 
   SSTR("\xa0\xa0\xb0\xb0\xb0"),
64
 
   SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x00\x00")},
65
 
  {ASN1_ETYPE_OCTET_STRING,
66
 
   SSTR("\xa0\xa0\xb0\xb0\xb0\xa1\xa1"),
67
 
   SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x24\x80\x04\x82\x00\x02\xa1\xa1\x00\x00\x00\x00")},
68
 
  {ASN1_ETYPE_OCTET_STRING,
69
 
   SSTR("\xa0\xa0\xb0\xb0\xb0\xa1\xa1\xc1"),
70
 
   SSTR("\x24\x80\x04\x82\x00\x02\xa0\xa0\x04\x82\x00\x03\xb0\xb0\xb0\x24\x80\x04\x82\x00\x02\xa1\xa1\x04\x82\x00\x01\xc1\x00\x00\x00\x00")},
71
 
};
72
 
 
73
 
int
74
 
main (int argc, char *argv[])
75
 
{
76
 
  int ret;
77
 
  unsigned char tl[ASN1_MAX_TL_SIZE];
78
 
  unsigned int tl_len, der_len, str_len;
79
 
  const unsigned char *str;
80
 
  unsigned char *b;
81
 
  unsigned int i;
82
 
 
83
 
  /* Dummy test */
84
 
 
85
 
  for (i = 0; i < sizeof (tv) / sizeof (tv[0]); i++)
86
 
    {
87
 
      /* Encode */
88
 
      tl_len = sizeof (tl);
89
 
      ret = asn1_encode_simple_der (tv[i].etype, tv[i].str, tv[i].str_len,
90
 
                                    tl, &tl_len);
91
 
      if (ret != ASN1_SUCCESS)
92
 
        {
93
 
          fprintf (stderr, "Encoding error in %u: %s\n", i,
94
 
                   asn1_strerror (ret));
95
 
          return 1;
96
 
        }
97
 
      der_len = tl_len + tv[i].str_len;
98
 
 
99
 
      if (der_len != tv[i].der_len || memcmp (tl, tv[i].der, tl_len) != 0)
100
 
        {
101
 
          fprintf (stderr,
102
 
                   "DER encoding differs in %u! (size: %u, expected: %u)\n",
103
 
                   i, der_len, tv[i].der_len);
104
 
          return 1;
105
 
        }
106
 
 
107
 
      /* decoding */
108
 
      ret =
109
 
        asn1_decode_simple_der (tv[i].etype, tv[i].der, tv[i].der_len, &str,
110
 
                                &str_len);
111
 
      if (ret != ASN1_SUCCESS)
112
 
        {
113
 
          fprintf (stderr, "Decoding error in %u: %s\n", i,
114
 
                   asn1_strerror (ret));
115
 
          return 1;
116
 
        }
117
 
 
118
 
      if (str_len != tv[i].str_len || memcmp (str, tv[i].str, str_len) != 0)
119
 
        {
120
 
          fprintf (stderr,
121
 
                   "DER decoded data differ in %u! (size: %u, expected: %u)\n",
122
 
                   i, der_len, tv[i].str_len);
123
 
          return 1;
124
 
        }
125
 
    }
126
 
 
127
 
  /* BER decoding */
128
 
  for (i = 0; i < sizeof (ber) / sizeof (ber[0]); i++)
129
 
    {
130
 
      /* decoding */
131
 
      ret =
132
 
        asn1_decode_simple_ber (ber[i].etype, ber[i].der, ber[i].der_len, &b,
133
 
                                &str_len, NULL);
134
 
      if (ret != ASN1_SUCCESS)
135
 
        {
136
 
          fprintf (stderr, "BER decoding error in %u: %s\n", i,
137
 
                   asn1_strerror (ret));
138
 
          return 1;
139
 
        }
140
 
 
141
 
      if (str_len != ber[i].str_len || memcmp (b, ber[i].str, str_len) != 0)
142
 
        {
143
 
          fprintf (stderr,
144
 
                   "BER decoded data differ in %u! (size: %u, expected: %u)\n",
145
 
                   i, str_len, ber[i].str_len);
146
 
          return 1;
147
 
        }
148
 
      free(b);
149
 
    }
150
 
 
151
 
 
152
 
  return 0;
153
 
}