/crypto/heimdal/lib/roken/hex-test.c

https://bitbucket.org/freebsd/freebsd-head/ · C · 106 lines · 67 code · 7 blank · 32 comment · 14 complexity · 43398f80ea205182d43102cd418ce69a MD5 · raw file

  1. /*
  2. * Copyright (c) 1999 - 2001, 2005 Kungliga Tekniska Hรถgskolan
  3. * (Royal Institute of Technology, Stockholm, Sweden).
  4. * All rights reserved.
  5. *
  6. * Redistribution and use in source and binary forms, with or without
  7. * modification, are permitted provided that the following conditions
  8. * are met:
  9. *
  10. * 1. Redistributions of source code must retain the above copyright
  11. * notice, this list of conditions and the following disclaimer.
  12. *
  13. * 2. Redistributions in binary form must reproduce the above copyright
  14. * notice, this list of conditions and the following disclaimer in the
  15. * documentation and/or other materials provided with the distribution.
  16. *
  17. * 3. Neither the name of the Institute nor the names of its contributors
  18. * may be used to endorse or promote products derived from this software
  19. * without specific prior written permission.
  20. *
  21. * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND
  22. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  23. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  24. * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE
  25. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  26. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  27. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  28. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  29. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  30. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  31. * SUCH DAMAGE.
  32. */
  33. #include <config.h>
  34. #include "roken.h"
  35. #include <hex.h>
  36. int
  37. main(int argc, char **argv)
  38. {
  39. int numerr = 0;
  40. int numtest = 1;
  41. struct test {
  42. void *data;
  43. size_t len;
  44. const char *result;
  45. } *t, tests[] = {
  46. { "", 0 , "" },
  47. { "a", 1, "61" },
  48. { "ab", 2, "6162" },
  49. { "abc", 3, "616263" },
  50. { "abcd", 4, "61626364" },
  51. { "abcde", 5, "6162636465" },
  52. { "abcdef", 6, "616263646566" },
  53. { "abcdefg", 7, "61626364656667" },
  54. { "=", 1, "3D" },
  55. { NULL }
  56. };
  57. for(t = tests; t->data; t++) {
  58. char *str;
  59. int len;
  60. len = hex_encode(t->data, t->len, &str);
  61. if(strcmp(str, t->result) != 0) {
  62. fprintf(stderr, "failed test %d: %s != %s\n", numtest,
  63. str, t->result);
  64. numerr++;
  65. }
  66. free(str);
  67. str = strdup(t->result);
  68. len = strlen(str);
  69. len = hex_decode(t->result, str, len);
  70. if(len != t->len) {
  71. fprintf(stderr, "failed test %d: len %lu != %lu\n", numtest,
  72. (unsigned long)len, (unsigned long)t->len);
  73. numerr++;
  74. } else if(memcmp(str, t->data, t->len) != 0) {
  75. fprintf(stderr, "failed test %d: data\n", numtest);
  76. numerr++;
  77. }
  78. free(str);
  79. numtest++;
  80. }
  81. {
  82. unsigned char buf[2] = { 0, 0xff } ;
  83. int len;
  84. len = hex_decode("A", buf, 1);
  85. if (len != 1) {
  86. fprintf(stderr, "len != 1");
  87. numerr++;
  88. }
  89. if (buf[0] != 10) {
  90. fprintf(stderr, "buf != 10");
  91. numerr++;
  92. }
  93. if (buf[1] != 0xff) {
  94. fprintf(stderr, "buf != 0xff");
  95. numerr++;
  96. }
  97. }
  98. return numerr;
  99. }