Commit 69b69ba3 authored by garciay's avatar garciay
Browse files

Major security bugs fixed for signature. Encryption to do.

parent b1af9628
Loading
Loading
Loading
Loading
+51 −42
Original line number Diff line number Diff line
@@ -64,8 +64,8 @@ namespace LibItsSecurity__Functions
                                                  const OCTETSTRING& p__privateKey
                                                  ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__signWithEcdsaNistp256WithSha256: Wrong parameters");
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__signWithEcdsaNistp256WithSha256: Wrong parameters");
      return OCTETSTRING();
    }
    
@@ -75,8 +75,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbs(static_cast<const unsigned char *>(p__toBeSignedSecuredMessage), p__toBeSignedSecuredMessage.lengthof() + static_cast<const unsigned char *>(p__toBeSignedSecuredMessage));
    hash.generate(tbs, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Calculate the signature
    std::vector<unsigned char> p_key(static_cast<const unsigned char *>(p__privateKey), static_cast<const unsigned char *>(p__privateKey) + p__privateKey.lengthof());
@@ -109,8 +110,8 @@ namespace LibItsSecurity__Functions
                                                       const OCTETSTRING& p__privateKey
                                                       ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__signWithEcdsaBrainpoolp256WithSha256: Wrong parameters");
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__signWithEcdsaBrainpoolp256WithSha256: Wrong parameters");
      return OCTETSTRING();
    }
    
@@ -120,8 +121,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbs(static_cast<const unsigned char *>(p__toBeSignedSecuredMessage), p__toBeSignedSecuredMessage.lengthof() + static_cast<const unsigned char *>(p__toBeSignedSecuredMessage));
    hash.generate(tbs, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Calculate the signature
    std::vector<unsigned char> p_key(static_cast<const unsigned char *>(p__privateKey), static_cast<const unsigned char *>(p__privateKey) + p__privateKey.lengthof());
@@ -154,8 +156,8 @@ namespace LibItsSecurity__Functions
                                                       const OCTETSTRING& p__privateKey
                                                       ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__signWithEcdsaBrainpoolp384WithSha384: Wrong parameters");
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__signWithEcdsaBrainpoolp384WithSha384: Wrong parameters");
      return OCTETSTRING();
    }
    
@@ -165,8 +167,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbs(static_cast<const unsigned char *>(p__toBeSignedSecuredMessage), p__toBeSignedSecuredMessage.lengthof() + static_cast<const unsigned char *>(p__toBeSignedSecuredMessage));
    hash.generate(tbs, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Calculate the signature
    std::vector<unsigned char> p_key(static_cast<const unsigned char *>(p__privateKey), static_cast<const unsigned char *>(p__privateKey) + p__privateKey.lengthof());
@@ -202,9 +205,9 @@ namespace LibItsSecurity__Functions
                                                const INTEGER& p__compressedMode
                                                ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__verifyWithEcdsaNistp256WithSha256: Wrong parameters");
      return OCTETSTRING();
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__verifyWithEcdsaNistp256WithSha256: Wrong parameters");
      return FALSE;
    }

    // Calculate the hash
@@ -213,8 +216,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbh(static_cast<const unsigned char *>(p__toBeVerifiedData), static_cast<const unsigned char *>(p__toBeVerifiedData) + p__toBeVerifiedData.lengthof());
    hash.generate(tbh, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Check the signature
    std::vector<unsigned char> signature(static_cast<const unsigned char *>(p__signature), static_cast<const unsigned char *>(p__signature) + p__signature.lengthof());
@@ -245,9 +249,9 @@ namespace LibItsSecurity__Functions
                                                   const OCTETSTRING& p__ecdsaNistp256PublicKeyY
                                                   ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__verifyWithEcdsaNistp256WithSha256__1: Wrong parameters");
      return OCTETSTRING();
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__verifyWithEcdsaNistp256WithSha256__1: Wrong parameters");
      return FALSE;
    }

    // Calculate the hash
@@ -256,8 +260,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbh(static_cast<const unsigned char *>(p__toBeVerifiedData), static_cast<const unsigned char *>(p__toBeVerifiedData) + p__toBeVerifiedData.lengthof());
    hash.generate(tbh, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Check the signature
    std::vector<unsigned char> signature(static_cast<const unsigned char *>(p__signature), static_cast<const unsigned char *>(p__signature) + p__signature.lengthof());
@@ -289,9 +294,9 @@ namespace LibItsSecurity__Functions
                                                     const INTEGER& p__compressedMode
                                                     ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__verifyWithEcdsaBrainpoolp256WithSha256: Wrong parameters");
      return OCTETSTRING();
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__verifyWithEcdsaBrainpoolp256WithSha256: Wrong parameters");
      return FALSE;
    }

    // Calculate the hash
@@ -300,8 +305,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbh(static_cast<const unsigned char *>(p__toBeVerifiedData), static_cast<const unsigned char *>(p__toBeVerifiedData) + p__toBeVerifiedData.lengthof());
    hash.generate(tbh, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Check the signature
    std::vector<unsigned char> signature(static_cast<const unsigned char *>(p__signature), static_cast<const unsigned char *>(p__signature) + p__signature.lengthof());
@@ -332,9 +338,9 @@ namespace LibItsSecurity__Functions
                                                        const OCTETSTRING& p__ecdsaBrainpoolp256PublicKeyY
                                                        ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__verifyWithEcdsaBrainpoolp256WithSha256__1: Wrong parameters");
      return OCTETSTRING();
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__verifyWithEcdsaBrainpoolp256WithSha256__1: Wrong parameters");
      return FALSE;
    }

    // Calculate the hash
@@ -343,8 +349,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbh(static_cast<const unsigned char *>(p__toBeVerifiedData), static_cast<const unsigned char *>(p__toBeVerifiedData) + p__toBeVerifiedData.lengthof());
    hash.generate(tbh, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Check the signature
    std::vector<unsigned char> signature(static_cast<const unsigned char *>(p__signature), static_cast<const unsigned char *>(p__signature) + p__signature.lengthof());
@@ -375,9 +382,9 @@ namespace LibItsSecurity__Functions
                                                     const INTEGER& p__compressedMode
                                                     ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__verifyWithEcdsaBrainpoolp384WithSha384: Wrong parameters");
      return OCTETSTRING();
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__verifyWithEcdsaBrainpoolp384WithSha384: Wrong parameters");
      return FALSE;
    }

    // Calculate the hash
@@ -386,8 +393,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbh(static_cast<const unsigned char *>(p__toBeVerifiedData), static_cast<const unsigned char *>(p__toBeVerifiedData) + p__toBeVerifiedData.lengthof());
    hash.generate(tbh, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Check the signature
    std::vector<unsigned char> signature(static_cast<const unsigned char *>(p__signature), static_cast<const unsigned char *>(p__signature) + p__signature.lengthof());
@@ -418,9 +426,9 @@ namespace LibItsSecurity__Functions
                                                        const OCTETSTRING& p__ecdsaBrainpoolp384PublicKeyY
                                                        ) {
    // Sanity checks
    if (p__certificateIssuer.lenthof() != 8) {
      log("fx__verifyWithEcdsaBrainpoolp384WithSha384__1: Wrong parameters");
      return OCTETSTRING();
    if (p__certificateIssuer.lengthof() != 8) {
      loggers::get_instance().log("fx__verifyWithEcdsaBrainpoolp384WithSha384__1: Wrong parameters");
      return FALSE;
    }

    // Calculate the hash
@@ -429,8 +437,9 @@ namespace LibItsSecurity__Functions
    // TODO Create SHX interface and add generate method with std::vector
    std::vector<unsigned char> tbh(static_cast<const unsigned char *>(p__toBeVerifiedData), static_cast<const unsigned char *>(p__toBeVerifiedData) + p__toBeVerifiedData.lengthof());
    hash.generate(tbh, hashData);
    if (p__certificateIssuer == '0000000000000000'O) {
      hashData += p__certificateIssuer;
    if (p__certificateIssuer == int2oct(0, 8)) {
      std::vector<unsigned char> issuer = std::vector<unsigned char>(static_cast<const unsigned char*>(p__certificateIssuer), p__certificateIssuer.lengthof() + static_cast<const unsigned char*>(p__certificateIssuer));
      hashData.insert(hashData.end(), issuer.cbegin(), issuer.cend());
    }
    // Check the signature
    std::vector<unsigned char> signature(static_cast<const unsigned char *>(p__signature), static_cast<const unsigned char *>(p__signature) + p__signature.lengthof());