EnvelopeTest.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. //
  2. // EnvelopeTest.cpp
  3. //
  4. // Copyright (c) 2012, Applied Informatics Software Engineering GmbH.
  5. // and Contributors.
  6. //
  7. // SPDX-License-Identifier: BSL-1.0
  8. //
  9. #include "EnvelopeTest.h"
  10. #include "CppUnit/TestCaller.h"
  11. #include "CppUnit/TestSuite.h"
  12. #include "Poco/Crypto/Envelope.h"
  13. #include "Poco/Crypto/EVPPKey.h"
  14. #include <iostream>
  15. using Poco::Crypto::Envelope;
  16. using Poco::Crypto::EVPPKey;
  17. EnvelopeTest::EnvelopeTest(const std::string& name): CppUnit::TestCase(name)
  18. {
  19. }
  20. EnvelopeTest::~EnvelopeTest()
  21. {
  22. }
  23. void EnvelopeTest::testOneKeyRSA()
  24. {
  25. try
  26. {
  27. EVPPKey key(EVP_PKEY_RSA, 1024);
  28. Envelope env(key, NID_aes_256_cbc);
  29. assertEqual(env.cipherNID(), NID_aes_256_cbc);
  30. std::string dec = "let's encrypt some text";
  31. env.seal(dec);
  32. assertTrue(env.openAsString(key, env.keys()[0]) == dec);
  33. }
  34. catch(const Poco::Exception& e)
  35. {
  36. std::cerr << e.displayText() << '\n';
  37. throw;
  38. }
  39. }
  40. void EnvelopeTest::testMultiKeyRSA()
  41. {
  42. try
  43. {
  44. Envelope::EVPPKeyVec keyVec;
  45. keyVec.emplace_back(EVP_PKEY_RSA, 1024);
  46. keyVec.emplace_back(EVP_PKEY_RSA, 2048);
  47. keyVec.emplace_back(EVP_PKEY_RSA, 1024);
  48. Envelope env(keyVec, NID_aes_256_cbc);
  49. assertEqual(env.cipherNID(), NID_aes_256_cbc);
  50. std::string dec = "let's encrypt some text";
  51. env.seal(dec);
  52. int i = 0;
  53. for (const auto& key : keyVec)
  54. {
  55. assertTrue(env.openAsString(key, env.keys()[i++]) == dec);
  56. }
  57. }
  58. catch(const Poco::Exception& e)
  59. {
  60. std::cerr << e.displayText() << '\n';
  61. throw;
  62. }
  63. }
  64. void EnvelopeTest::testRSATransfer()
  65. {
  66. try
  67. {
  68. EVPPKey key(EVP_PKEY_RSA, 1024);
  69. Envelope env1(key, NID_aes_256_cbc);
  70. std::string dec = "let's encrypt some text";
  71. Envelope env2(key, NID_aes_256_cbc);
  72. env2.setContent(env1.seal(dec));
  73. assertTrue(env2.openAsString(key, env1.keys()[0], env1.iv()) == dec);
  74. }
  75. catch(const Poco::Exception& e)
  76. {
  77. std::cerr << e.displayText() << '\n';
  78. throw;
  79. }
  80. }
  81. void EnvelopeTest::testRSAMultiTransfer()
  82. {
  83. try
  84. {
  85. Envelope::EVPPKeyVec keyVec;
  86. keyVec.emplace_back(EVP_PKEY_RSA, 1024);
  87. keyVec.emplace_back(EVP_PKEY_RSA, 2048);
  88. keyVec.emplace_back(EVP_PKEY_RSA, 1024);
  89. Envelope env0(keyVec, NID_aes_256_cbc);
  90. std::string dec = "let's encrypt some text";
  91. const Envelope::ByteVec enc = env0.seal(dec);
  92. int i = 0;
  93. for (const auto& key : keyVec)
  94. {
  95. Envelope env(key, NID_aes_256_cbc);
  96. env.setContent(enc);
  97. assertTrue(env.openAsString(key, env0.keys()[i++], env0.iv()) == dec);
  98. }
  99. }
  100. catch(const Poco::Exception& e)
  101. {
  102. std::cerr << e.displayText() << '\n';
  103. throw;
  104. }
  105. }
  106. void EnvelopeTest::setUp()
  107. {
  108. }
  109. void EnvelopeTest::tearDown()
  110. {
  111. }
  112. CppUnit::Test* EnvelopeTest::suite()
  113. {
  114. CppUnit::TestSuite* pSuite = new CppUnit::TestSuite("EnvelopeTest");
  115. CppUnit_addTest(pSuite, EnvelopeTest, testOneKeyRSA);
  116. CppUnit_addTest(pSuite, EnvelopeTest, testMultiKeyRSA);
  117. CppUnit_addTest(pSuite, EnvelopeTest, testRSATransfer);
  118. CppUnit_addTest(pSuite, EnvelopeTest, testRSAMultiTransfer);
  119. return pSuite;
  120. }