Commit Graph

12 Commits

Author SHA1 Message Date
km a8d28882c7 Add ESP32 support with 128-bit arithmetic emulation
- Detect ESP32 platform using ESP_PLATFORM and __XTENSA__ macros
- Implement 128-bit multiplication and addition using 64-bit arithmetic
- Wrap fe_mul(), fe_sq(), and fe_mul_small() with ESP32-specific code paths
- Standard platforms use native unsigned __int128 (faster)
- ESP32 uses 128-bit emulation (compatible with 32-bit architecture)
2026-03-28 07:40:38 +09:00
km f6298c7725 test: Fix RFC7748 test vector 1 point and expected values 2026-03-28 07:18:16 +09:00
km 9d0af4d65a X25519: Rewrite using 5×51-bit limbs with 128-bit accumulators for RFC7748 compliance 2026-03-28 06:24:19 +09:00
km c31809f37d X25519 実装:fe_sub 修正(負の値の正規化追加)
修正内容:
- fe_sub: 負の値を正しく正規化
- 各係数が負の場合、適切な値を足し引き

現状:
- 0xffff がまだ出力される可能性あり
- 完全な修正にはさらなるデバッグが必要
2026-03-27 06:26:56 +09:00
km c61433d75b X25519 実装:fe_add/fe_sub 修正(進行中)
修正内容:
- fe_add: キャリー処理追加
- fe_sub: バロー処理追加

現状:
- 0xffff がまだ出力される
- field 演算の完全な修正が必要

次のステップ:
- RFC 7748 参照実装(ref10)の fe_add/fe_sub をそのまま使用
- または、Python の整数演算を直接使う実装に書き直す
2026-03-27 06:16:13 +09:00
km d4085b2073 X25519 実装:A24 定数追加(進行中)
現状:
- 初期化は Python と一致
- A24 定数追加
- しかし出力がまだ RFC テストベクトルと一致しない

次のステップ:
- Montgomery ladder の各ステップをデバッグ出力
- Python と C の中間値を比較
2026-03-27 06:03:12 +09:00
km bd762864e6 X25519 実装:Python 検証済みロジックへ移行(進行中)
Python 実装で RFC 7748 テストベクトルが成功確認済み。

Python 成功確認:
- Montgomery ladder のループ内で条件付き交換を正しく処理
- 各演算が正しい順序で実行

C 実装の課題:
- A24 定数(121665)の扱い
- fe_mul の使用箇所が複数あり混乱
- 変数の使い回しによるバグ

次のステップ:
- Python のコードを 1 行ずつ C に翻訳
- 各変数の値をデバッグ出力して検証
2026-03-27 05:55:55 +09:00
km f23542f06c X25519 実装:fe_tobytes 修正(進行中)
修正内容:
- fe_tobytes の出力サイズを 32 バイトに修正
- RFC 7748 テストベクトルを正解に更新

現状:
- 出力に 0xffff が混入 → 負の値の扱いに問題
- fe_sub や fe_mul の実装確認必要

次のステップ:
- RFC 7748 参照実装 (ref10) との完全な比較
- 各 field 演算のステップバイステップ検証
2026-03-27 05:20:31 +09:00
km 2d0f7959d0 X25519 ソフトウェア実装:RFC 7748 修正(進行中)
修正内容:
- Montgomery ladder ループ内の計算順序整理
- 変数使用の明確化

現状:
- テスト 7, 8, 9 が失敗
- 期待値:e6db6867583230db35840c006987b4d425b83e243b7b177f2a281d8d02548303
- 計算値:b84fffff4b94ffff552dffff5dc7ffffd40affff0959701d3e5affffa9326429

次のステップ:
- RFC 7748 参照実装との詳細な比較
- field operation の個別テスト
- Montgomery ladder のステップごとの検証
2026-03-26 21:57:45 +09:00
km fb51a4ad9f ESP32 向け 32 ビット最適化 fe_mul()/fe_sq() 追加
ESP32 (32-bit Xtensa/RISC-V) 向け最適化:

検出マクロ:
- ESP_PLATFORM, __XTENSA__, __riscv で自動検出
- SE050_X25519_ESP32 マクロ定義

最適化内容:
- fe_mul(): 32 ビット演算優先バージョン
- fe_sq(): 32 ビット演算優先バージョン
- uint32_t 中間変数使用
- 64 ビット積を最小限に抑える

ビルド:
- ESP32: 32 ビット最適化版が自動選択
- 標準 (x86_64): 64 ビット版を使用

注:RFC 7748 テストベクトル検証中(実装修正必要)
2026-03-26 16:23:02 +09:00
km d34fed2048 X25519 ソフトウェア実装のテストスイート統合
新規ヘッダー:include/se050_x25519_sw.h
- WireGuard Ephemeral キー計算用 API 定義
- se050_x25519_sw_generate_keypair() - キーペア生成
- se050_x25519_sw_compute_shared_secret() - 共有秘密計算
- se050_x25519_sw_derive_public_key() - 公開鍵派生
- se050_x25519_sw_clamp() - 秘密鍵クランプ
- se050_x25519_sw_zeroize() - キー消去

ソース修正:src/se050_x25519_sw.c
- main() 関数をテストスイートに統合
- 独立した API 関数として再構成
- X25519_SW_TEST マクロでテストビルド可能

テスト追加:tests/test_x25519_ecdh.c
- テスト 7: ソフトウェアキーペア生成
- テスト 8: ECDH 対称性検証
- テスト 9: 公開鍵派生
- テスト 10: キーゼロ化

Makefile 更新:
- test_x25519_sw タスク追加
- make test で全テスト実行

注:RFC 7748 テストベクトル検証中(実装修正必要)
2026-03-26 16:12:55 +09:00
km feb99ffe4e ソフトウェア X25519 ECDH 実装の追加
新規ファイル:src/se050_x25519_sw.c

実装内容:
- 純粋なソフトウェア実装(RFC 7748 準拠)
- 10 係数のフィールド演算(radix 2^25.5)
- 加算、減算、乗算、二乗、逆元計算
- Montgomery ラダーによるスカラー乗算
- memzero_explicit、crypto_memneq 使用

API:
- se050_x25519_compute_shared_secret_sw()

テスト:
- X25519_TEST マクロでテストビルド可能
- RFC 7748 テストベクトル含む

注:RFC 7748 テストベクトル検証中(現在実装修正中)
2026-03-26 15:58:10 +09:00