Merge pull request #273 from svost/includes
author0xDEADFACE <masmfan@gmail.com>
Sat, 13 Feb 2016 22:52:49 +0000 (01:52 +0300)
committer0xDEADFACE <masmfan@gmail.com>
Sat, 13 Feb 2016 22:52:49 +0000 (01:52 +0300)
Reorganize includes a bit.

1  2 
src/key.cpp

diff --combined src/key.cpp
@@@ -6,12 -6,9 +6,9 @@@
  
  #include <openssl/ecdsa.h>
  #include <openssl/obj_mac.h>
  
  #include "key.h"
  #include "base58.h"
- #include "ies.h"
  
  // Generate a private key from just the secret parameter
  int EC_KEY_regenerate_key(EC_KEY *eckey, BIGNUM *priv_key)
@@@ -592,12 -589,6 +589,12 @@@ bool CPoint::setBytes(const std::vector
      return true;
  }
  
 +// Initialize from octets stream
 +bool CPoint::setPubKey(const CPubKey &vchPubKey)
 +{
 +    return setBytes(vchPubKey.Raw());
 +}
 +
  // Serialize to octets stream
  bool CPoint::getBytes(std::vector<unsigned char> &vchBytes)
  {
@@@ -672,7 -663,7 +669,7 @@@ void CMalleablePubKey::GetVariant(CPubK
      EC_KEY_free(eckey);
  
      CPoint point;
 -    if (!point.setBytes(pubKeyL.Raw())) {
 +    if (!point.setPubKey(pubKeyL)) {
          throw key_error("CMalleablePubKey::GetVariant() : Unable to decode L value");
      }
  
      bnHash.setuint160(Hash160(vchLr));
  
      CPoint pointH;
 -    pointH.setBytes(pubKeyH.Raw());
 +    pointH.setPubKey(pubKeyH);
  
      CPoint P;
      // Calculate P = Hash(L*r)*G + H
      vchPubKeyVariant = CPubKey(vchResult);
  }
  
 -std::string CMalleablePubKey::ToString()
 +std::string CMalleablePubKey::ToString() const
  {
      CDataStream ssKey(SER_NETWORK, PROTOCOL_VERSION);
      ssKey << *this;
@@@ -795,7 -786,7 +792,7 @@@ bool CMalleableKey::SetSecrets(const CS
      Reset();
      CKey L, H;
  
 -    if (!L.SetSecret(pvchSecretL, true) || !H.SetSecret(pvchSecretH, true))
 +    if (pvchSecretL.size() != 32 || !pvchSecretH.size() != 32 || !L.SetSecret(pvchSecretL, true) || !H.SetSecret(pvchSecretH, true))
      {
          nVersion = 0;
          return false;
@@@ -827,7 -818,7 +824,7 @@@ CMalleablePubKey CMalleableKey::GetMall
  }
  
  // Check ownership
 -bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant)
 +bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant) const
  {
      if (IsNull()) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Attempting to run on NULL key object.");
      }
  
      CPoint point_R;
 -    if (!point_R.setBytes(R.Raw())) {
 +    if (!point_R.setPubKey(R)) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode R value");
      }
  
      std::vector<unsigned char> vchPubKeyH = H.GetPubKey().Raw();
  
      CPoint point_H;
 -    if (!point_H.setBytes(vchPubKeyH)) {
 +    if (!point_H.setPubKey(vchPubKeyH)) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode H value");
      }
  
      CPoint point_P;
 -    if (!point_P.setBytes(vchPubKeyVariant.Raw())) {
 +    if (!point_P.setPubKey(vchPubKeyVariant)) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode P value");
      }
  
  }
  
  // Check ownership and restore private key
 -bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant, CKey &privKeyVariant)
 +bool CMalleableKey::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant, CKey &privKeyVariant) const
  {
      if (IsNull()) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Attempting to run on NULL key object.");
      }
  
      CPoint point_R;
 -    if (!point_R.setBytes(R.Raw())) {
 +    if (!point_R.setPubKey(R)) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode R value");
      }
  
      std::vector<unsigned char> vchPubKeyH = H.GetPubKey().Raw();
  
      CPoint point_H;
 -    if (!point_H.setBytes(vchPubKeyH)) {
 +    if (!point_H.setPubKey(vchPubKeyH)) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode H value");
      }
  
      CPoint point_P;
 -    if (!point_P.setBytes(vchPubKeyVariant.Raw())) {
 +    if (!point_P.setPubKey(vchPubKeyVariant)) {
          throw key_error("CMalleableKey::CheckKeyVariant() : Unable to decode P value");
      }
  
      return true;
  }
  
 -std::string CMalleableKey::ToString()
 +std::string CMalleableKey::ToString() const
  {
      CDataStream ssKey(SER_NETWORK, PROTOCOL_VERSION);
      ssKey << *this;
@@@ -1002,43 -993,28 +999,43 @@@ bool CMalleableKey::SetString(const std
  
  CMalleableKeyView::CMalleableKeyView(const CMalleableKey &b)
  {
 -    assert(b.nVersion == CURRENT_VERSION);
 +    if (b.vchSecretL.size() != 32)
 +        throw key_error("CMalleableKeyView::CMalleableKeyView() : L size must be 32 bytes");
 +
 +    if (b.vchSecretH.size() != 32)
 +        throw key_error("CMalleableKeyView::CMalleableKeyView() : L size must be 32 bytes");
 +
      vchSecretL = b.vchSecretL;
  
      CKey H;
      H.SetSecret(b.vchSecretH, true);
 +
      vchPubKeyH = H.GetPubKey().Raw();
 +    nVersion = b.nVersion;
 +}
 +
 +CMalleableKeyView::CMalleableKeyView(const CMalleableKeyView &b)
 +{
 +    vchSecretL = b.vchSecretL;
 +    vchPubKeyH = b.vchPubKeyH;
 +    nVersion = CURRENT_VERSION;
  }
  
  CMalleableKeyView::CMalleableKeyView(const CSecret &L, const CPubKey &pvchPubKeyH)
  {
      vchSecretL = L;
      vchPubKeyH = pvchPubKeyH.Raw();
 +    nVersion = CURRENT_VERSION;
  }
  
  CMalleableKeyView& CMalleableKeyView::operator=(const CMalleableKey &b)
  {
 -    assert(b.nVersion == CURRENT_VERSION);
      vchSecretL = b.vchSecretL;
  
      CKey H;
      H.SetSecret(b.vchSecretH, true);
      vchPubKeyH = H.GetPubKey().Raw();
 +    nVersion = b.nVersion;
  
      return (*this);
  }
@@@ -1055,7 -1031,7 +1052,7 @@@ CMalleablePubKey CMalleableKeyView::Get
  }
  
  // Check ownership
 -bool CMalleableKeyView::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant)
 +bool CMalleableKeyView::CheckKeyVariant(const CPubKey &R, const CPubKey &vchPubKeyVariant) const
  {
      if (!R.IsValid()) {
          throw key_error("CMalleableKeyView::CheckKeyVariant() : R is invalid");
      }
  
      CPoint point_R;
 -    if (!point_R.setBytes(R.Raw())) {
 +    if (!point_R.setPubKey(R)) {
          throw key_error("CMalleableKeyView::CheckKeyVariant() : Unable to decode R value");
      }
  
      CPoint point_H;
 -    if (!point_H.setBytes(vchPubKeyH)) {
 +    if (!point_H.setPubKey(vchPubKeyH)) {
          throw key_error("CMalleableKeyView::CheckKeyVariant() : Unable to decode H value");
      }
  
      CPoint point_P;
 -    if (!point_P.setBytes(vchPubKeyVariant.Raw())) {
 +    if (!point_P.setPubKey(vchPubKeyVariant)) {
          throw key_error("CMalleableKeyView::CheckKeyVariant() : Unable to decode P value");
      }
  
      return true;
  }
  
 +std::string CMalleableKeyView::ToString() const
 +{
 +    CDataStream ssKey(SER_NETWORK, PROTOCOL_VERSION);
 +    ssKey << *this;
 +    std::vector<unsigned char> vch(ssKey.begin(), ssKey.end());
 +
 +    return EncodeBase58Check(vch);
 +}
 +
 +bool CMalleableKeyView::SetString(const std::string& strMutableKey)
 +{
 +    std::vector<unsigned char> vchTemp;
 +    if (!DecodeBase58Check(strMutableKey, vchTemp)) {
 +        throw key_error("CMalleableKeyView::SetString() : Provided key data seems corrupted.");
 +    }
 +
 +    CDataStream ssKey(vchTemp, SER_NETWORK, PROTOCOL_VERSION);
 +    ssKey >> *this;
 +
 +    return IsNull();
 +}
 +
 +bool CMalleableKeyView::IsNull() const
 +{
 +    return nVersion != CURRENT_VERSION;
 +}
 +
  //// Asymmetric encryption
  
  void CPubKey::EncryptData(const std::vector<unsigned char>& data, std::vector<unsigned char>& encrypted)