Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
e397f9e
pull requestに大変感謝しながら、定数計算できないとされた部分を修正
barrier15300 Dec 17, 2025
0147285
曖昧なコンストラクタを使ってた部分を修正
barrier15300 Dec 17, 2025
33b5c59
キャスト抜けを修正
barrier15300 Dec 17, 2025
b802bc9
RORマクロと自作関数を消去
barrier15300 Dec 17, 2025
a0f1938
使用例のソースコードを簡易的に追加
barrier15300 Dec 21, 2025
3310348
カラツバ法を実装...多分使わないけど
barrier15300 Dec 21, 2025
64703a6
とりあえずよくわからないけどこの現状をコミット
barrier15300 Feb 10, 2026
83491e0
代入周りがdelete指定なのかdefault指定なのか曖昧であった部分を修正
barrier15300 Feb 10, 2026
cd0770b
バッファの操作関係を調整
barrier15300 Feb 10, 2026
639d95c
暗号化関連の軽微なバグ修正と書き換え
barrier15300 Feb 10, 2026
6795d2a
動作テスト完了
barrier15300 Feb 10, 2026
69f0ae7
名前空間関連の変更
barrier15300 Feb 10, 2026
84ca501
Poll関数にタイムアウトを指定できるようにした(今更)
barrier15300 Feb 10, 2026
d1492bb
Merge branch 'main' into alpha-develop
barrier15300 Feb 10, 2026
5e314ab
Update include/Packet.h
barrier15300 Feb 10, 2026
5928253
正しいデータを読み出さない状態になってたので修正
barrier15300 Feb 10, 2026
563cb70
Merge branch 'alpha-develop' of https://github.com/barrier15300/Socke…
barrier15300 Feb 10, 2026
e2ce841
ダングリングが発生する部分を修正
barrier15300 Feb 10, 2026
65b2197
バッファ範囲外を参照する可能性を修正
barrier15300 Feb 10, 2026
b597a91
可変長版を作成するメリットが今のところ存在しないため無効化
barrier15300 Feb 10, 2026
d51c3d0
多倍長整数の軽微なお手入れ
barrier15300 Feb 10, 2026
346652a
他環境のコンパイルエラー修正
barrier15300 Feb 10, 2026
37baadf
受信したバイト列を受け取ってPacketオブジェクトを生成する関数を追加
barrier15300 Feb 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 3 additions & 16 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,23 +14,10 @@ project ("Socket")
# ソースをこのプロジェクトの実行可能ファイルに追加します。
add_executable (Socket
"Socket.cpp"
)

# include
"include/common.h"
"include/Packet.h"
"include/Socket.h"

# include/Cryptgraphy
"include/Cryptgraphy/AES128.h"
"include/Cryptgraphy/common.h"
"include/Cryptgraphy/ECDSA.h"
"include/Cryptgraphy/ECPoint.h"
"include/Cryptgraphy/KeyManager.h"
"include/Cryptgraphy/ModInt.h"
"include/Cryptgraphy/MultiWordInt.h"
"include/Cryptgraphy/NumberSet.h"
"include/Cryptgraphy/RandomGenerator.h"
"include/Cryptgraphy/SHAKE256.h"
include_directories(
${PROJECT_SOURCE_DIR}/include
)

if (CMAKE_VERSION VERSION_GREATER 3.12)
Expand Down
185 changes: 20 additions & 165 deletions Socket.cpp
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
#include <deque>
#include <iomanip>
#include <chrono>
#include "include/Socket.h"
#include <map>

#include "include/Socket.h"

void Server();
void Client();

AES128::cbytearray<16> sharedkey = {'0', 'x', '7', '4', '0', 'x', '6', '5', '0', 'x', '7', '3', '0', 'x', '7', '4', };
AES128::cbytearray<16> sharedkey = {'0', 'x', '7', '4', '0', 'x', '6', '5', '0', 'x', '7', '3', '0', 'x', '7', '4',};

struct ClientData {

Expand All @@ -21,173 +17,33 @@ struct ClientData {
Packet::StoreBytes(ret, Name);
return ret;
}

Packet::byte_view FromBytes(Packet::byte_view view) {
Packet::LoadBytes(view, Level);
Packet::LoadBytes(view, Name);
return view;
}
};

struct ContainerInContainer {
int main(int argc, char* argv[]) {

std::vector<std::string> names;
// arg[1]{ 0 = server, 1 = client }

Packet::bytearray ToBytes() const {
Packet::bytearray ret;
Packet::StoreBytes(ret, names);
return ret;
}
std::vector<std::string> args;
args.insert(args.end(), argv, argv + argc);

Packet::byte_view FromBytes(Packet::byte_view view) {
Packet::LoadBytes(view, names);
return view;
if (args.size() <= 1) {
return -1;
}
};

struct ContainerInVariable {
std::vector<ContainerInContainer> container;

Packet::bytearray ToBytes() const {
Packet::bytearray ret;
Packet::StoreBytes(ret, container);
return ret;
if (std::stoi(args[1]) == 0) {
Server();
}

Packet::byte_view FromBytes(Packet::byte_view view) {
Packet::LoadBytes(view, container);
return view;
}
};
#include "include/Cryptgraphy/KeyManager.h"

int main(int argc, char* argv[]) {

//KeyManager Keya;
//KeyManager Keyb;
//
//auto tp = std::chrono::high_resolution_clock::now();
//
//auto kE = Keya.MakeQKey();
//auto kF = Keyb.MakeQKey();
//
//auto Ga = Keya.MakeSharedKey(kF);
//auto Gb = Keyb.MakeSharedKey(kE);
//
//auto ns = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - tp).count();
//
//bool same = Ga == Gb;
//
//std::cout << (double)ns / 1000 / 1000 / 1000 << "s" << std::endl;
//std::cout << std::boolalpha << "shared key same: " << same << std::endl;
//
//for (auto&& b : Ga) {
// std::cout << std::hex << std::setw(2) << std::setfill('0') << std::right << (int)b;
//}
//std::cout << std::endl;
//
//for (auto&& b : Gb) {
// std::cout << std::hex << std::setw(2) << std::setfill('0') << std::right << (int)b;
//}
//std::cout << std::endl;

KeyManager key;
std::string message = "I have skill is write low level programing language.";

auto q = ECDSA::MakePublicKey(key.GetSecretKey());

auto v = ECDSA::Sign(key.GetSecretKey(), {message.begin(), message.end()});

bool ret = ECDSA::Verify(q, v, {message.begin(), message.end()});

std::cout << "message: \"" << message << "\"" << std::endl;
std::cout << "Q: {" << q.x.value.ToString(16) << ", " << q.y.value.ToString(16) << "}" << std::endl;
std::cout << "(r, s)(bytes): ";
for (auto&& b : v) {
std::cout << std::hex << std::setw(2) << std::setfill('0') << std::right << (int)b;
else {
Client();
}
std::cout << std::endl;

std::cout << std::boolalpha << ret;

//std::string message = "0123456789abcdef";
//Cryptgraphy::bytearray data{message.begin(), message.end()};
//
//auto tp = std::chrono::high_resolution_clock::now();
//
//auto ret = SHAKE256::HasherN(data, 64);
//
//auto ns = std::chrono::duration_cast<std::chrono::nanoseconds>(std::chrono::high_resolution_clock::now() - tp).count();
//
//std::cout << (double)ns / 1000 / 1000 << "ms" << std::endl;
//std::cout << std::boolalpha << "hash: ";
//
//for (auto&& c : ret) {
// std::cout << std::hex << std::right << std::setw(2) << std::setfill('0') << (int)c;
//}

//using int_t = bigint<8>;
//using modint_t = ModInt<int_t>;
//using projective_t = ECProjective<modint_t>;
//
//modint_t::Factory xmodp = "ffffffff00000001000000000000000000000000ffffffffffffffffffffffff";
//projective_t::Factory projective = WeierstrassParameter<modint_t>(
// xmodp("ffffffff00000001000000000000000000000000fffffffffffffffffffffffc"),
// xmodp("5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b")
//);
//
//auto G = projective(
// xmodp("6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296"),
// xmodp("4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5"),
// xmodp(1)
//);
//
//auto view = [](const std::string& name, const projective_t& p) {
// std::cout << name << ": {"
// << p.x.value.ToString(16) << ", "
// << p.y.value.ToString(16) << ", "
// << p.z.value.ToString(16) << "}"
// << std::endl;
//};
//auto check = [](const projective_t& p) {
// auto a = p.ToAfinPoint();
// std::cout << "Check: " << std::boolalpha
// << a.GetParam().CheckPoint(a.x, a.y)
// << std::endl;
//};
//
//auto d = G.Double();
//
//view("double", d);
//check(d);
//
//auto add = G.Add(d);
//
//view("add", add);
//check(add);
//
//auto scaler = G.Scaler(xmodp(100));
//
//view("scaler", scaler);
//check(scaler);

// arg[1]{ 0 = server, 1 = client }

//std::vector<std::string> args;
//args.insert(args.end(), argv, argv + argc);
//
//if (args.size() <= 1) {
// return -1;
//}
//
//if (std::stoi(args[1]) == 0) {
// Server();
//}
//else {
// Client();
//}
//
//return 0;
return 0;
}
Comment on lines +28 to 47
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major

std::stoi が例外をスローする可能性がある

args[1] が数値でない文字列の場合、std::stoistd::invalid_argument をスローし、非常に大きい数値の場合は std::out_of_range をスローします。try-catch で囲むか、事前にバリデーションを行ってください。

🛡️ 修正案
-	if (std::stoi(args[1]) == 0) {
-		Server();
-	}
-	else {
-		Client();
-	}
+	try {
+		if (std::stoi(args[1]) == 0) {
+			Server();
+		}
+		else {
+			Client();
+		}
+	}
+	catch (const std::exception& e) {
+		std::cerr << "invalid argument: " << e.what() << std::endl;
+		return -1;
+	}
🤖 Prompt for AI Agents
In `@Socket.cpp` around lines 28 - 47, The main function currently calls
std::stoi(args[1]) without validation which can throw std::invalid_argument or
std::out_of_range; wrap the conversion in a try-catch or pre-validate the string
(e.g., check digits and optional sign or use std::from_chars) and handle errors
by printing a usage/error message and returning non-zero; specifically update
main to guard the std::stoi call (or replace it) and only call Server() or
Client() when the parsed value is valid, otherwise return an error code and
avoid uncaught exceptions.


void Server() {
Expand Down Expand Up @@ -276,7 +132,7 @@ void Server() {
if (oc == c) {
continue;
}
oc.EncryptionSend(send);
oc.EncryptionSend(Packet(send));
}
}
}
Expand Down Expand Up @@ -312,7 +168,7 @@ void Client() {
server.CryptEngine.Init(sharedkey);

ClientData _data;

std::cout << "input your Level\n";
std::cin >> _data.Level;
std::cout << "input your Name\n";
Expand All @@ -331,16 +187,15 @@ void Client() {
while (!stopflag) {
std::string sendval;
std::cin >> sendval;

if (sendval == "/exit") {
stopflag = true;
break;
}

std::lock_guard<std::mutex> lock(mtx);

Packet pak = Packet(sendval);
server.EncryptionSend(sendval);
server.EncryptionSend(Packet(sendval));
}
}
};
Expand All @@ -350,13 +205,13 @@ void Client() {
if (server.LostConnection()) {
break;
}

if (server.Available() <= 0) {
continue;
}

auto pak = server.EncryptionRecv();

if (!pak) {
continue;
}
Expand Down
84 changes: 84 additions & 0 deletions example/BytesConvert/BytesConvert.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
#include "include/Socket.h"

struct ContainerInContainer {

std::vector<std::string> names;

Packet::bytearray ToBytes() const {
Packet::bytearray ret;
Packet::StoreBytes(ret, names);
return ret;
}

Packet::byte_view FromBytes(Packet::byte_view view) {
Packet::LoadBytes(view, names);
return view;
}
};

struct ContainerInVariable {
std::vector<ContainerInContainer> container;

Packet::bytearray ToBytes() const {
Packet::bytearray ret;
Packet::StoreBytes(ret, container);
return ret;
}

Packet::byte_view FromBytes(Packet::byte_view view) {
Packet::LoadBytes(view, container);
return view;
}
};

int main(int argc, char* argv[]) {

ContainerInVariable data{};
ContainerInContainer cic{};

std::string str = "test";

cic.names.push_back(str); str += "t";
cic.names.push_back(str); str += "t";
cic.names.push_back(str); str += "t";
cic.names.push_back(str); str += "t";

data.container.push_back(cic);

str = "test2";

cic.names.push_back(str); str += "b";
cic.names.push_back(str); str += "b";
cic.names.push_back(str); str += "b";
cic.names.push_back(str); str += "b";

data.container.push_back(cic);

str = "magic";

cic.names.push_back(str); str += "m";
cic.names.push_back(str); str += "m";
cic.names.push_back(str); str += "m";
cic.names.push_back(str); str += "m";

data.container.push_back(cic);

str = "test";

cic.names.push_back(str); str += "z";
cic.names.push_back(str); str += "z";
cic.names.push_back(str); str += "z";
cic.names.push_back(str); str += "z";

data.container.push_back(cic);

Packet pak = Packet(data);

auto& buf = pak.GetBuffer();

for (auto&& c : buf) {
std::cout << std::uppercase << std::setfill('0') << std::setw(2) << std::hex << std::right << static_cast<int>(c);
}

return 0;
}
27 changes: 27 additions & 0 deletions example/EC_Signature/EC_Signature.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#include "include/Socket.h"

int main(int argc, char* argv[]) {

KeyManager key;
std::string message = "I have skill is write low level programing language.";

auto q = ECDSA::MakePublicKey(key.GetSecretKey());

auto v = ECDSA::Sign(key.GetSecretKey(), {message.begin(), message.end()});

bool ret = ECDSA::Verify(q, v, {message.begin(), message.end()});

std::cout << "message: \"" << message << "\"" << std::endl;
std::cout << "Q: {" << q.x.value.ToString(16) << ", " << q.y.value.ToString(16) << "}" << std::endl;
std::cout << "(r, s)(bytes): ";
for (auto&& b : v) {
std::cout << std::hex << std::setw(2) << std::setfill('0') << std::right << (int)b;
}
std::cout << std::endl;

std::cout << std::boolalpha << ret;

assert(ret);

return 0;
}
Loading