rc2test.c 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. /*
  2. * Copyright 1995-2016 The OpenSSL Project Authors. All Rights Reserved.
  3. *
  4. * Licensed under the OpenSSL license (the "License"). You may not use
  5. * this file except in compliance with the License. You can obtain a copy
  6. * in the file LICENSE in the source distribution or at
  7. * https://www.openssl.org/source/license.html
  8. */
  9. /*
  10. * This has been a quickly hacked 'ideatest.c'. When I add tests for other
  11. * RC2 modes, more of the code will be uncommented.
  12. */
  13. #include <stdio.h>
  14. #include <string.h>
  15. #include <stdlib.h>
  16. #include "../e_os.h"
  17. #ifdef OPENSSL_NO_RC2
  18. int main(int argc, char *argv[])
  19. {
  20. printf("No RC2 support\n");
  21. return (0);
  22. }
  23. #else
  24. # include <openssl/rc2.h>
  25. static unsigned char RC2key[4][16] = {
  26. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  27. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  28. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  29. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
  30. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
  31. 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  32. {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  33. 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F},
  34. };
  35. static unsigned char RC2plain[4][8] = {
  36. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  37. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  38. {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF},
  39. {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
  40. };
  41. static unsigned char RC2cipher[4][8] = {
  42. {0x1C, 0x19, 0x8A, 0x83, 0x8D, 0xF0, 0x28, 0xB7},
  43. {0x21, 0x82, 0x9C, 0x78, 0xA9, 0xF9, 0xC0, 0x74},
  44. {0x13, 0xDB, 0x35, 0x17, 0xD3, 0x21, 0x86, 0x9E},
  45. {0x50, 0xDC, 0x01, 0x62, 0xBD, 0x75, 0x7F, 0x31},
  46. };
  47. int main(int argc, char *argv[])
  48. {
  49. int i, n, err = 0;
  50. RC2_KEY key;
  51. unsigned char buf[8], buf2[8];
  52. for (n = 0; n < 4; n++) {
  53. RC2_set_key(&key, 16, &(RC2key[n][0]), 0 /* or 1024 */ );
  54. RC2_ecb_encrypt(&(RC2plain[n][0]), buf, &key, RC2_ENCRYPT);
  55. if (memcmp(&(RC2cipher[n][0]), buf, 8) != 0) {
  56. printf("ecb rc2 error encrypting\n");
  57. printf("got :");
  58. for (i = 0; i < 8; i++)
  59. printf("%02X ", buf[i]);
  60. printf("\n");
  61. printf("expected:");
  62. for (i = 0; i < 8; i++)
  63. printf("%02X ", RC2cipher[n][i]);
  64. err = 20;
  65. printf("\n");
  66. }
  67. RC2_ecb_encrypt(buf, buf2, &key, RC2_DECRYPT);
  68. if (memcmp(&(RC2plain[n][0]), buf2, 8) != 0) {
  69. printf("ecb RC2 error decrypting\n");
  70. printf("got :");
  71. for (i = 0; i < 8; i++)
  72. printf("%02X ", buf[i]);
  73. printf("\n");
  74. printf("expected:");
  75. for (i = 0; i < 8; i++)
  76. printf("%02X ", RC2plain[n][i]);
  77. printf("\n");
  78. err = 3;
  79. }
  80. }
  81. if (err == 0)
  82. printf("ecb RC2 ok\n");
  83. EXIT(err);
  84. }
  85. #endif