16ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
26ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * datatypes_driver.c
36ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
46ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * a test driver for crypto/math datatypes
56ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
66ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * David A. McGrew
76ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Cisco Systems, Inc.
86ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
96ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Copyright (c) 2001-2006, Cisco Systems, Inc.
136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * All rights reserved.
146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Redistribution and use in source and binary forms, with or without
166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * modification, are permitted provided that the following conditions
176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * are met:
186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Redistributions of source code must retain the above copyright
206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   notice, this list of conditions and the following disclaimer.
216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Redistributions in binary form must reproduce the above
236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   copyright notice, this list of conditions and the following
246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   disclaimer in the documentation and/or other materials provided
256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   with the distribution.
266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Neither the name of the Cisco Systems, Inc. nor the names of its
286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   contributors may be used to endorse or promote products derived
296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   from this software without specific prior written permission.
306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * OF THE POSSIBILITY OF SUCH DAMAGE.
436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include <stdio.h>            /* for printf() */
486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include <string.h>           /* for strlen() */
496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include "datatypes.h"
506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgbyte_order(void);
536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtest_hex_string_funcs(void);
566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgprint_string(char *s);
596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtest_bswap(void);
626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgint
646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgmain (void) {
656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  /*
676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org   * this program includes various and sundry tests for fundamental
686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org   * datatypes.  it's a grab-bag of throwaway code, retained only in
696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org   * case of future problems
706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org   */
716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  int i, j;
736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_t x;
746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  char *r =
756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    "The Moving Finger writes; and, having writ,\n"
766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    "Moves on: nor all thy Piety nor Wit\n"
776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    "Shall lure it back to cancel half a Line,\n"
786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    "Nor all thy Tears wash out a Word of it.";
796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  char *s = "incomplet";
806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  print_string(r);
826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  print_string(s);
836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
846ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  byte_order();
856ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  test_hex_string_funcs();
866ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
876ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (j=0; j < 128; j++) {
886ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_set_to_zero(&x);
896ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    /*      x.v32[0] = (1 << j); */
906ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_set_bit(&x, j);
916ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    printf("%s\n", v128_bit_string(&x));
926ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_clear_bit(&x, j);
936ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    printf("%s\n", v128_bit_string(&x));
946ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
956ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
966ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
976ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("----------------------------------------------\n");
986ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_set_to_zero(&x);
996ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < 128; i++) {
1006ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_set_bit(&x, i);
1016ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
1026ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("%s\n", v128_bit_string(&x));
1036ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1046ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("----------------------------------------------\n");
1056ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_set_to_zero(&x);
1066ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_set_bit(&x, 0);
1076ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < 128; i++) {
1086ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org      printf("%s\n", v128_bit_string(&x));
1096ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_right_shift(&x, 1);
1106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
1116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("----------------------------------------------\n");
1126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_set_to_zero(&x);
1136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_set_bit(&x, 127);
1146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < 128; i++) {
1156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org      printf("%s\n", v128_bit_string(&x));
1166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_left_shift(&x, 1);
1176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
1186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("----------------------------------------------\n");
1196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < 128; i++) {
1206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_set_to_zero(&x);
1216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_set_bit(&x, 127);
1226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_left_shift(&x, i);
1236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org      printf("%s\n", v128_bit_string(&x));
1246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
1256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("----------------------------------------------\n");
1266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_set_to_zero(&x);
1276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < 128; i+=2) {
1286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    v128_set_bit(&x, i);
1296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
1306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("bit_string: { %s }\n", v128_bit_string(&x));
1316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("get_bit:    { ");
1326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < 128; i++) {
1336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    if (v128_get_bit(&x, i) == 1)
1346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org      printf("1");
1356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    else
1366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org      printf("0");
1376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
1386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf(" } \n");
1396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  test_bswap();
1416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  return 0;
1436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org}
1446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* byte_order() prints out byte ordering of datatypes */
1476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgbyte_order(void) {
1506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  int i;
1516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_t e;
1526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#if 0
1536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v16_t b;
1546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v32_t c;
1556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v64_t d;
1566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < sizeof(b); i++)
1586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    b.octet[i] = i;
1596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < sizeof(c); i++)
1606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    c.octet[i] = i;
1616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < sizeof(d); i++)
1626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    d.octet[i] = i;
1636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v128_t:\t%s\n", v128_hex_string(&e));
1656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v64_t:\t%s\n", v64_hex_string(&d));
1666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v32_t:\t%s\n", v32_hex_string(c));
1676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v16_t:\t%s\n", v16_hex_string(b));
1686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  c.value = 0x01020304;
1706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v32_t:\t%s\n", v32_hex_string(c));
1716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  b.value = 0x0102;
1726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v16_t:\t%s\n", v16_hex_string(b));
1736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("uint16_t ordering:\n");
1756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  c.value = 0x00010002;
1776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v32_t:\t%x%x\n", c.v16[0], c.v16[1]);
1786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif
1796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("byte ordering of crypto/math datatypes:\n");
1816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < sizeof(e); i++)
1826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    e.v8[i] = i;
1836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("v128_t: %s\n", v128_hex_string(&e));
1846ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1856ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org}
1866ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1876ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
1886ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtest_hex_string_funcs(void) {
1896ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  char hex1[] = "abadcafe";
1906ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  char hex2[] = "0123456789abcdefqqqqq";
1916ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  char raw[10];
1926ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  int len;
1936ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1946ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  len = hex_string_to_octet_string(raw, hex1, strlen(hex1));
1956ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("computed length: %d\tstring: %s\n", len,
1966ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org	 octet_string_hex_string(raw, len/2));
1976ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("expected length: %u\tstring: %s\n", (unsigned)strlen(hex1), hex1);
1986ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
1996ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  len = hex_string_to_octet_string(raw, hex2, strlen(hex2));
2006ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("computed length: %d\tstring: %s\n", len,
2016ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org	 octet_string_hex_string(raw, len/2));
2026ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("expected length: %d\tstring: %s\n", 16, "0123456789abcdef");
2036ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2046ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org}
2056ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2066ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2076ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgprint_string(char *s) {
2086ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  int i;
2096ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("%s\n", s);
2106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("strlen(s) = %u\n", (unsigned)strlen(s));
2116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("{ ");
2126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  for (i=0; i < strlen(s); i++) {
2136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    printf("0x%x, ", s[i]);
2146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org    if (((i+1) % 8) == 0)
2156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org      printf("\n   ");
2166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  }
2176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("}\n");
2186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org}
2196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
2216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtest_bswap(void) {
2226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  uint32_t x = 0x11223344;
2236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  uint64_t y = 0x1122334455667788LL;
2246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("before: %0x\nafter:  %0x\n", x, be32_to_cpu(x));
2266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("before: %0llx\nafter:  %0llx\n", (unsigned long long)y,
2276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org	 (unsigned long long)be64_to_cpu(y));
2286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  y = 1234;
2306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
2316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("1234: %0llx\n", (unsigned long long)y);
2326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("as octet string: %s\n",
2336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org	 octet_string_hex_string((uint8_t *) &y, 8));
2346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  y = be64_to_cpu(y);
2356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  printf("bswapped octet string: %s\n",
2366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org	 octet_string_hex_string((uint8_t *) &y, 8));
2376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org}
238