~ubuntu-branches/ubuntu/wily/sflphone/wily

« back to all changes in this revision

Viewing changes to daemon/libs/pjproject-2.1.0/third_party/srtp/crypto/test/datatypes_driver.c

  • Committer: Package Import Robot
  • Author(s): Mark Purcell
  • Date: 2014-01-28 18:23:36 UTC
  • mfrom: (1.1.11)
  • mto: This revision was merged to the branch mainline in revision 24.
  • Revision ID: package-import@ubuntu.com-20140128182336-3xenud1kbnwmf3mz
* New upstream release 
  - Fixes "New Upstream Release" (Closes: #735846)
  - Fixes "Ringtone does not stop" (Closes: #727164)
  - Fixes "[sflphone-kde] crash on startup" (Closes: #718178)
  - Fixes "sflphone GUI crashes when call is hung up" (Closes: #736583)
* Build-Depends: ensure GnuTLS 2.6
  - libucommon-dev (>= 6.0.7-1.1), libccrtp-dev (>= 2.0.6-3)
  - Fixes "FTBFS Build-Depends libgnutls{26,28}-dev" (Closes: #722040)
* Fix "boost 1.49 is going away" unversioned Build-Depends: (Closes: #736746)
* Add Build-Depends: libsndfile-dev, nepomuk-core-dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * datatypes_driver.c
 
3
 *
 
4
 * a test driver for crypto/math datatypes
 
5
 *
 
6
 * David A. McGrew
 
7
 * Cisco Systems, Inc.
 
8
 */
 
9
 
 
10
/*
 
11
 *      
 
12
 * Copyright (c) 2001-2006, Cisco Systems, Inc.
 
13
 * All rights reserved.
 
14
 * 
 
15
 * Redistribution and use in source and binary forms, with or without
 
16
 * modification, are permitted provided that the following conditions
 
17
 * are met:
 
18
 * 
 
19
 *   Redistributions of source code must retain the above copyright
 
20
 *   notice, this list of conditions and the following disclaimer.
 
21
 * 
 
22
 *   Redistributions in binary form must reproduce the above
 
23
 *   copyright notice, this list of conditions and the following
 
24
 *   disclaimer in the documentation and/or other materials provided
 
25
 *   with the distribution.
 
26
 * 
 
27
 *   Neither the name of the Cisco Systems, Inc. nor the names of its
 
28
 *   contributors may be used to endorse or promote products derived
 
29
 *   from this software without specific prior written permission.
 
30
 * 
 
31
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 
32
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 
33
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
 
34
 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 
35
 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
 
36
 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 
37
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 
38
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 
39
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 
40
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 
41
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 
42
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 
43
 *
 
44
 */
 
45
 
 
46
 
 
47
#include <stdio.h>            /* for printf() */
 
48
#include <string.h>           /* for strlen() */
 
49
#include "datatypes.h"
 
50
 
 
51
void
 
52
byte_order(void);
 
53
 
 
54
void
 
55
test_hex_string_funcs(void);
 
56
 
 
57
void
 
58
print_string(char *s);
 
59
 
 
60
void
 
61
test_bswap(void);
 
62
 
 
63
int
 
64
main (void) {
 
65
  
 
66
  /*
 
67
   * this program includes various and sundry tests for fundamental
 
68
   * datatypes.  it's a grab-bag of throwaway code, retained only in
 
69
   * case of future problems
 
70
   */
 
71
 
 
72
  int i, j;
 
73
  v128_t x;
 
74
  char *r = 
 
75
    "The Moving Finger writes; and, having writ,\n"
 
76
    "Moves on: nor all thy Piety nor Wit\n"
 
77
    "Shall lure it back to cancel half a Line,\n"
 
78
    "Nor all thy Tears wash out a Word of it.";
 
79
  char *s = "incomplet"; 
 
80
 
 
81
  print_string(r);
 
82
  print_string(s);
 
83
 
 
84
  byte_order();
 
85
  test_hex_string_funcs();
 
86
 
 
87
  for (j=0; j < 128; j++) {
 
88
    v128_set_to_zero(&x);
 
89
    /*      x.v32[0] = (1 << j); */
 
90
    v128_set_bit(&x, j);
 
91
    printf("%s\n", v128_bit_string(&x)); 
 
92
    v128_clear_bit(&x, j);
 
93
    printf("%s\n", v128_bit_string(&x)); 
 
94
    
 
95
  }
 
96
 
 
97
  printf("----------------------------------------------\n");
 
98
  v128_set_to_zero(&x);
 
99
  for (i=0; i < 128; i++) {
 
100
    v128_set_bit(&x, i);
 
101
  }
 
102
  printf("%s\n", v128_bit_string(&x)); 
 
103
 
 
104
  printf("----------------------------------------------\n");
 
105
  v128_set_to_zero(&x);
 
106
  v128_set_bit(&x, 0);
 
107
  for (i=0; i < 128; i++) {
 
108
      printf("%s\n", v128_bit_string(&x)); 
 
109
    v128_right_shift(&x, 1);
 
110
  }
 
111
  printf("----------------------------------------------\n");
 
112
  v128_set_to_zero(&x);
 
113
  v128_set_bit(&x, 127);
 
114
  for (i=0; i < 128; i++) {
 
115
      printf("%s\n", v128_bit_string(&x)); 
 
116
    v128_left_shift(&x, 1);
 
117
  }
 
118
  printf("----------------------------------------------\n");
 
119
  for (i=0; i < 128; i++) {
 
120
    v128_set_to_zero(&x);
 
121
    v128_set_bit(&x, 127);
 
122
    v128_left_shift(&x, i);
 
123
      printf("%s\n", v128_bit_string(&x)); 
 
124
  }
 
125
  printf("----------------------------------------------\n");
 
126
  v128_set_to_zero(&x);
 
127
  for (i=0; i < 128; i+=2) {
 
128
    v128_set_bit(&x, i);
 
129
  }
 
130
  printf("bit_string: { %s }\n", v128_bit_string(&x)); 
 
131
  printf("get_bit:    { ");   
 
132
  for (i=0; i < 128; i++) {
 
133
    if (v128_get_bit(&x, i) == 1)
 
134
      printf("1");
 
135
    else
 
136
      printf("0");
 
137
  }
 
138
  printf(" } \n");
 
139
 
 
140
  test_bswap();
 
141
 
 
142
  return 0;
 
143
}
 
144
 
 
145
 
 
146
/* byte_order() prints out byte ordering of datatypes */
 
147
 
 
148
void
 
149
byte_order(void) {
 
150
  int i;
 
151
  v128_t e;
 
152
#if 0
 
153
  v16_t b;
 
154
  v32_t c;
 
155
  v64_t d;
 
156
 
 
157
  for (i=0; i < sizeof(b); i++)
 
158
    b.octet[i] = i;
 
159
  for (i=0; i < sizeof(c); i++)
 
160
    c.octet[i] = i;
 
161
  for (i=0; i < sizeof(d); i++)
 
162
    d.octet[i] = i;
 
163
  
 
164
  printf("v128_t:\t%s\n", v128_hex_string(&e));
 
165
  printf("v64_t:\t%s\n", v64_hex_string(&d));
 
166
  printf("v32_t:\t%s\n", v32_hex_string(c));
 
167
  printf("v16_t:\t%s\n", v16_hex_string(b));
 
168
 
 
169
  c.value = 0x01020304;
 
170
  printf("v32_t:\t%s\n", v32_hex_string(c));
 
171
  b.value = 0x0102;
 
172
  printf("v16_t:\t%s\n", v16_hex_string(b));
 
173
 
 
174
  printf("uint16_t ordering:\n");
 
175
 
 
176
  c.value = 0x00010002;
 
177
  printf("v32_t:\t%x%x\n", c.v16[0], c.v16[1]);
 
178
#endif 
 
179
 
 
180
  printf("byte ordering of crypto/math datatypes:\n");
 
181
  for (i=0; i < sizeof(e); i++)
 
182
    e.v8[i] = i;
 
183
  printf("v128_t: %s\n", v128_hex_string(&e));
 
184
  
 
185
}
 
186
 
 
187
void
 
188
test_hex_string_funcs(void) {
 
189
  char hex1[] = "abadcafe";
 
190
  char hex2[] = "0123456789abcdefqqqqq";
 
191
  char raw[10];
 
192
  int len;
 
193
 
 
194
  len = hex_string_to_octet_string(raw, hex1, strlen(hex1));
 
195
  printf("computed length: %d\tstring: %s\n", len,
 
196
         octet_string_hex_string(raw, len/2));
 
197
  printf("expected length: %u\tstring: %s\n", (unsigned)strlen(hex1), hex1);
 
198
 
 
199
  len = hex_string_to_octet_string(raw, hex2, strlen(hex2));
 
200
  printf("computed length: %d\tstring: %s\n", len,
 
201
         octet_string_hex_string(raw, len/2));
 
202
  printf("expected length: %d\tstring: %s\n", 16, "0123456789abcdef");
 
203
 
 
204
}
 
205
 
 
206
void
 
207
print_string(char *s) {
 
208
  int i;  
 
209
  printf("%s\n", s);
 
210
  printf("strlen(s) = %u\n", (unsigned)strlen(s));
 
211
  printf("{ ");
 
212
  for (i=0; i < strlen(s); i++) {
 
213
    printf("0x%x, ", s[i]);
 
214
    if (((i+1) % 8) == 0)
 
215
      printf("\n   ");
 
216
  }
 
217
  printf("}\n");
 
218
}
 
219
 
 
220
void
 
221
test_bswap(void) {
 
222
  uint32_t x = 0x11223344;
 
223
  uint64_t y = 0x1122334455667788LL;
 
224
 
 
225
  printf("before: %0x\nafter:  %0x\n", x, be32_to_cpu(x));
 
226
  printf("before: %0llx\nafter:  %0llx\n", (unsigned long long)y,
 
227
         (unsigned long long)be64_to_cpu(y));
 
228
 
 
229
  y = 1234;
 
230
 
 
231
  printf("1234: %0llx\n", (unsigned long long)y);
 
232
  printf("as octet string: %s\n", 
 
233
         octet_string_hex_string((uint8_t *) &y, 8));
 
234
  y = be64_to_cpu(y);
 
235
  printf("bswapped octet string: %s\n", 
 
236
         octet_string_hex_string((uint8_t *) &y, 8));
 
237
}