fips_des_selftest.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. /* ====================================================================
  2. * Copyright (c) 2003 The OpenSSL Project. All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms, with or without
  5. * modification, are permitted provided that the following conditions
  6. * are met:
  7. *
  8. * 1. Redistributions of source code must retain the above copyright
  9. * notice, this list of conditions and the following disclaimer.
  10. *
  11. * 2. Redistributions in binary form must reproduce the above copyright
  12. * notice, this list of conditions and the following disclaimer in
  13. * the documentation and/or other materials provided with the
  14. * distribution.
  15. *
  16. * 3. All advertising materials mentioning features or use of this
  17. * software must display the following acknowledgment:
  18. * "This product includes software developed by the OpenSSL Project
  19. * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
  20. *
  21. * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  22. * endorse or promote products derived from this software without
  23. * prior written permission. For written permission, please contact
  24. * openssl-core@openssl.org.
  25. *
  26. * 5. Products derived from this software may not be called "OpenSSL"
  27. * nor may "OpenSSL" appear in their names without prior written
  28. * permission of the OpenSSL Project.
  29. *
  30. * 6. Redistributions of any form whatsoever must retain the following
  31. * acknowledgment:
  32. * "This product includes software developed by the OpenSSL Project
  33. * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
  34. *
  35. * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  36. * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  37. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  38. * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
  39. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  41. * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  42. * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  43. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  44. * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  45. * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  46. * OF THE POSSIBILITY OF SUCH DAMAGE.
  47. *
  48. */
  49. #define OPENSSL_FIPSAPI
  50. #include <string.h>
  51. #include <openssl/err.h>
  52. #include <openssl/fips.h>
  53. #include <openssl/evp.h>
  54. #include <openssl/opensslconf.h>
  55. #ifdef OPENSSL_FIPS
  56. static struct
  57. {
  58. const unsigned char key[24];
  59. const unsigned char plaintext[8];
  60. const unsigned char ciphertext[8];
  61. } tests3[]=
  62. {
  63. {
  64. { 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  65. 0xFE,0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,
  66. 0x12,0x34,0x56,0x78,0x9a,0xbc,0xde,0xf0 },
  67. { 0x8f,0x8f,0xbf,0x9b,0x5d,0x48,0xb4,0x1c },
  68. { 0x59,0x8c,0xe5,0xd3,0x6c,0xa2,0xea,0x1b },
  69. },
  70. {
  71. { 0xDC,0xBA,0x98,0x76,0x54,0x32,0x10,0xFE,
  72. 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF,
  73. 0xED,0x39,0xD9,0x50,0xFA,0x74,0xBC,0xC4 },
  74. { 0x01,0x23,0x45,0x67,0x89,0xAB,0xCD,0xEF },
  75. { 0x11,0x25,0xb0,0x35,0xbe,0xa0,0x82,0x86 },
  76. },
  77. };
  78. int FIPS_selftest_des()
  79. {
  80. int n, ret = 0;
  81. EVP_CIPHER_CTX ctx;
  82. FIPS_cipher_ctx_init(&ctx);
  83. /* Encrypt/decrypt with 3DES and compare to known answers */
  84. for(n=0 ; n < 2 ; ++n)
  85. {
  86. if (!fips_cipher_test(FIPS_TEST_CIPHER, &ctx, EVP_des_ede3_ecb(),
  87. tests3[n].key, NULL,
  88. tests3[n].plaintext, tests3[n].ciphertext, 8))
  89. goto err;
  90. }
  91. ret = 1;
  92. err:
  93. FIPS_cipher_ctx_cleanup(&ctx);
  94. if (ret == 0)
  95. FIPSerr(FIPS_F_FIPS_SELFTEST_DES,FIPS_R_SELFTEST_FAILED);
  96. return ret;
  97. }
  98. #endif