Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2019
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.89 KB | None | 0 0
  1. bool CCipher::SetUp(bool bPolarity)
  2. {
  3. const CryptoPP::SecByteBlock& kShared = m_pkKeyAgreement->GetShared();
  4.  
  5. if (kShared.size() < 2)
  6. {
  7. return false;
  8. }
  9.  
  10. int32_t iHint0 = kShared.BytePtr()[*(kShared.BytePtr()) % kShared.size()];
  11. int32_t iHint1 = kShared.BytePtr()[*(kShared.BytePtr() + 1) % kShared.size()];
  12. BlockCipherAlgorithm* pkDetail0 = BlockCipherAlgorithm::Pick(iHint0);
  13. BlockCipherAlgorithm* pkDetail1 = BlockCipherAlgorithm::Pick(iHint1);
  14.  
  15.  
  16. uint32_t uKeyLength0 = pkDetail0->GetDefaultKeyLength();
  17. uint32_t uIvLength0 = pkDetail0->GetBlockSize();
  18. if (kShared.size() < uKeyLength0 || kShared.size() < uIvLength0)
  19. {
  20. delete pkDetail0;
  21. delete pkDetail1;
  22. return false;
  23. }
  24.  
  25. uint32_t uKeyLength1 = pkDetail1->GetDefaultKeyLength();
  26. uint32_t uIvLength1 = pkDetail1->GetBlockSize();
  27. if (kShared.size() < uKeyLength1 || kShared.size() < uIvLength1)
  28. {
  29. delete pkDetail0;
  30. delete pkDetail1;
  31. return false;
  32. }
  33.  
  34. CryptoPP::SecByteBlock kKey0(uKeyLength0), kIv0(uIvLength0);
  35. CryptoPP::SecByteBlock kKey1(uKeyLength1), kIv1(uIvLength1);
  36.  
  37. uint32_t uOffset = 0;
  38. kKey0.Assign(kShared, uKeyLength0);
  39. uOffset = uKeyLength0;
  40. uOffset = std::min<uint32_t>(uKeyLength0, kShared.size() - uKeyLength1);
  41. kKey1.Assign(kShared.BytePtr() + uOffset, uKeyLength1);
  42.  
  43. uOffset = kShared.size() - uIvLength0;
  44. kIv0.Assign(kShared.BytePtr() + uOffset, uIvLength0);
  45. uOffset = (uOffset < uIvLength1 ? 0 : uOffset - uIvLength1);
  46. kIv1.Assign(kShared.BytePtr() + uOffset, uIvLength1);
  47.  
  48. if (bPolarity)
  49. {
  50. m_pkEncoder = pkDetail1->CreateEncoder(kKey1, kKey1.size(), kIv1);
  51. m_pkDecoder = pkDetail0->CreateDecoder(kKey0, kKey0.size(), kIv0);
  52. }
  53. else
  54. {
  55. m_pkEncoder = pkDetail0->CreateEncoder(kKey0, kKey0.size(), kIv0);
  56. m_pkDecoder = pkDetail1->CreateDecoder(kKey1, kKey1.size(), kIv1);
  57. }
  58.  
  59. delete pkDetail0;
  60. delete pkDetail1;
  61.  
  62. set_activated(true);
  63.  
  64. return true;
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement