Loading ccsrc/Protocols/Security/security_ecc.cc +14 −13 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ security_ecc::security_ecc(const ec_elliptic_curves p_elliptic_curve, const OCTE loggers::get_instance().log(">>> security_ecc::security_ecc (1): %d", static_cast<int>(p_elliptic_curve)); loggers::get_instance().log(">>> security_ecc::security_ecc (1): %d", static_cast<int>(p_elliptic_curve)); // Sanity checks // Sanity checks int fsize; if ((_elliptic_curve == ec_elliptic_curves::nist_p_256) || (_elliptic_curve == ec_elliptic_curves::brainpool_p_256_r1) || (_elliptic_curve == ec_elliptic_curves::sm2_p_256)) { if ((_elliptic_curve == ec_elliptic_curves::nist_p_256) || (_elliptic_curve == ec_elliptic_curves::brainpool_p_256_r1) || (_elliptic_curve == ec_elliptic_curves::sm2_p_256)) { if (p_private_key.lengthof() != 32) { if (p_private_key.lengthof() != 32) { loggers::get_instance().error("security_ecc::security_ecc (1): Invalid public keys size"); loggers::get_instance().error("security_ecc::security_ecc (1): Invalid public keys size"); Loading Loading @@ -88,13 +89,8 @@ security_ecc::security_ecc(const ec_elliptic_curves p_elliptic_curve, const OCTE loggers::get_instance().error("security_ecc::security_ecc (1): Failed to generate xy coordinates, check algorithms"); loggers::get_instance().error("security_ecc::security_ecc (1): Failed to generate xy coordinates, check algorithms"); } } loggers::get_instance().log("security_ecc::security_ecc (1): xy length: %d", BN_num_bytes(xy)); loggers::get_instance().log("security_ecc::security_ecc (1): xy length: %d", BN_num_bytes(xy)); OCTETSTRING v = int2oct(0, BN_num_bytes(xy)); OCTETSTRING v = int2oct(0, _pri_key.lengthof()); ::BN_bn2bin(xy, (unsigned char *)static_cast<const unsigned char *>(v)); ::BN_bn2binpad(xy, (unsigned char *)static_cast<const unsigned char *>(v), _pri_key.lengthof()); if ((v.lengthof() % 2) != 0) { // Remove first byte loggers::get_instance().log_msg("security_ecc::security_ecc (1): Complete xy=", v); v = OCTETSTRING(v.lengthof() - 1, 1 + static_cast<const unsigned char *>(v)); } ::BN_clear_free(xy); ::BN_clear_free(xy); xy = nullptr; xy = nullptr; Loading Loading @@ -832,6 +828,13 @@ int security_ecc::sign(const OCTETSTRING &p_data, OCTETSTRING &p_r_sig, OCTETSTR loggers::get_instance().log_msg(">>> security_ecc::sign: p_data: ", p_data); loggers::get_instance().log_msg(">>> security_ecc::sign: p_data: ", p_data); // Sanity checks // Sanity checks const EC_GROUP * g = ::EC_KEY_get0_group(_ec_key); if(g == nullptr) { loggers::get_instance().warning("security_ecc::sign: Uninitialized key"); return -1; } int fsize = (EC_GROUP_get_degree(g) + 7) / 8; if (_pri_key.lengthof() == 0) { // No private key if (_pri_key.lengthof() == 0) { // No private key return -1; return -1; } } Loading @@ -855,13 +858,11 @@ int security_ecc::sign(const OCTETSTRING &p_data, OCTETSTRING &p_r_sig, OCTETSTR const BIGNUM *r = nullptr; const BIGNUM *r = nullptr; const BIGNUM *s = nullptr; const BIGNUM *s = nullptr; ::ECDSA_SIG_get0(signature, &r, &s); ::ECDSA_SIG_get0(signature, &r, &s); loggers::get_instance().log("security_ecc::sign: r size: %d", BN_num_bytes(r)); p_r_sig = int2oct(0, fsize); p_r_sig = int2oct(0, BN_num_bytes(r)); ::BN_bn2binpad(r, (unsigned char *)static_cast<const unsigned char *>(p_r_sig), fsize); ::BN_bn2bin(r, (unsigned char *)static_cast<const unsigned char *>(p_r_sig)); loggers::get_instance().log_msg("security_ecc::sign: r=", p_r_sig); loggers::get_instance().log_msg("security_ecc::sign: r=", p_r_sig); loggers::get_instance().log("security_ecc::sign: s size: %d", BN_num_bytes(s)); p_s_sig = int2oct(0, fsize); p_s_sig = int2oct(0, BN_num_bytes(s)); ::BN_bn2binpad(s, (unsigned char *)static_cast<const unsigned char *>(p_s_sig), fsize); ::BN_bn2bin(s, (unsigned char *)static_cast<const unsigned char *>(p_s_sig)); loggers::get_instance().log_msg("security_ecc::sign: s=", p_s_sig); loggers::get_instance().log_msg("security_ecc::sign: s=", p_s_sig); ::ECDSA_SIG_free(signature); ::ECDSA_SIG_free(signature); Loading Loading
ccsrc/Protocols/Security/security_ecc.cc +14 −13 Original line number Original line Diff line number Diff line Loading @@ -48,6 +48,7 @@ security_ecc::security_ecc(const ec_elliptic_curves p_elliptic_curve, const OCTE loggers::get_instance().log(">>> security_ecc::security_ecc (1): %d", static_cast<int>(p_elliptic_curve)); loggers::get_instance().log(">>> security_ecc::security_ecc (1): %d", static_cast<int>(p_elliptic_curve)); // Sanity checks // Sanity checks int fsize; if ((_elliptic_curve == ec_elliptic_curves::nist_p_256) || (_elliptic_curve == ec_elliptic_curves::brainpool_p_256_r1) || (_elliptic_curve == ec_elliptic_curves::sm2_p_256)) { if ((_elliptic_curve == ec_elliptic_curves::nist_p_256) || (_elliptic_curve == ec_elliptic_curves::brainpool_p_256_r1) || (_elliptic_curve == ec_elliptic_curves::sm2_p_256)) { if (p_private_key.lengthof() != 32) { if (p_private_key.lengthof() != 32) { loggers::get_instance().error("security_ecc::security_ecc (1): Invalid public keys size"); loggers::get_instance().error("security_ecc::security_ecc (1): Invalid public keys size"); Loading Loading @@ -88,13 +89,8 @@ security_ecc::security_ecc(const ec_elliptic_curves p_elliptic_curve, const OCTE loggers::get_instance().error("security_ecc::security_ecc (1): Failed to generate xy coordinates, check algorithms"); loggers::get_instance().error("security_ecc::security_ecc (1): Failed to generate xy coordinates, check algorithms"); } } loggers::get_instance().log("security_ecc::security_ecc (1): xy length: %d", BN_num_bytes(xy)); loggers::get_instance().log("security_ecc::security_ecc (1): xy length: %d", BN_num_bytes(xy)); OCTETSTRING v = int2oct(0, BN_num_bytes(xy)); OCTETSTRING v = int2oct(0, _pri_key.lengthof()); ::BN_bn2bin(xy, (unsigned char *)static_cast<const unsigned char *>(v)); ::BN_bn2binpad(xy, (unsigned char *)static_cast<const unsigned char *>(v), _pri_key.lengthof()); if ((v.lengthof() % 2) != 0) { // Remove first byte loggers::get_instance().log_msg("security_ecc::security_ecc (1): Complete xy=", v); v = OCTETSTRING(v.lengthof() - 1, 1 + static_cast<const unsigned char *>(v)); } ::BN_clear_free(xy); ::BN_clear_free(xy); xy = nullptr; xy = nullptr; Loading Loading @@ -832,6 +828,13 @@ int security_ecc::sign(const OCTETSTRING &p_data, OCTETSTRING &p_r_sig, OCTETSTR loggers::get_instance().log_msg(">>> security_ecc::sign: p_data: ", p_data); loggers::get_instance().log_msg(">>> security_ecc::sign: p_data: ", p_data); // Sanity checks // Sanity checks const EC_GROUP * g = ::EC_KEY_get0_group(_ec_key); if(g == nullptr) { loggers::get_instance().warning("security_ecc::sign: Uninitialized key"); return -1; } int fsize = (EC_GROUP_get_degree(g) + 7) / 8; if (_pri_key.lengthof() == 0) { // No private key if (_pri_key.lengthof() == 0) { // No private key return -1; return -1; } } Loading @@ -855,13 +858,11 @@ int security_ecc::sign(const OCTETSTRING &p_data, OCTETSTRING &p_r_sig, OCTETSTR const BIGNUM *r = nullptr; const BIGNUM *r = nullptr; const BIGNUM *s = nullptr; const BIGNUM *s = nullptr; ::ECDSA_SIG_get0(signature, &r, &s); ::ECDSA_SIG_get0(signature, &r, &s); loggers::get_instance().log("security_ecc::sign: r size: %d", BN_num_bytes(r)); p_r_sig = int2oct(0, fsize); p_r_sig = int2oct(0, BN_num_bytes(r)); ::BN_bn2binpad(r, (unsigned char *)static_cast<const unsigned char *>(p_r_sig), fsize); ::BN_bn2bin(r, (unsigned char *)static_cast<const unsigned char *>(p_r_sig)); loggers::get_instance().log_msg("security_ecc::sign: r=", p_r_sig); loggers::get_instance().log_msg("security_ecc::sign: r=", p_r_sig); loggers::get_instance().log("security_ecc::sign: s size: %d", BN_num_bytes(s)); p_s_sig = int2oct(0, fsize); p_s_sig = int2oct(0, BN_num_bytes(s)); ::BN_bn2binpad(s, (unsigned char *)static_cast<const unsigned char *>(p_s_sig), fsize); ::BN_bn2bin(s, (unsigned char *)static_cast<const unsigned char *>(p_s_sig)); loggers::get_instance().log_msg("security_ecc::sign: s=", p_s_sig); loggers::get_instance().log_msg("security_ecc::sign: s=", p_s_sig); ::ECDSA_SIG_free(signature); ::ECDSA_SIG_free(signature); Loading