Exemple #1
0
        static public byte[] Decrypt(Ep M1, Ep M2)
        {
            //平文に対応する点の計算
            Ep M = M2 - (ECC._Kp * M1);

            //楕円曲線上の点から平文への変換
            byte[] m = ECC.EpToMsg(M);
            return(m);
        }
Exemple #2
0
        static public void Encrypt(byte[] m, out Ep M1, out Ep M2)
        {
            //平文mをEpに対応付ける
            Ep M = ECC.MsgToEp(new BigInteger(m));

            //Mに掛ける回数kを設定
            BigInteger k = IntegerCalclator.RandamBigInteger(Program.KEYLENGTH);

            //暗号文の生成
            M1 = k * ECC.P;
            Ep temp = k * ECC.B;

            M2 = temp + M;
        }
Exemple #3
0
        //復号
        public void DecryptMode(string arg)
        {
            //暗号文の読み込み
            FileManager.LoadEncryption(string.Concat(arg, "_enc"),
                                       out Ep M1, out Ep M2);

            //秘密鍵の読み込み
            BigInteger Kp = FileManager.LoadPrivateKey("PrivateKey.bin");

            ECC.SetPrivateKey(Kp);

            //復号の実行
            byte[] m = ECC.Decrypt(M1, M2);

            //復号文の出力
            FileManager.OutputDecryptedMsg(m, string.Concat(arg, "_dec"));
        }
Exemple #4
0
        //復号
        public void DecryptMode(string arg)
        {
            //暗号文の読み込み
            FileManager.LoadEncryption(string.Concat(arg),
                                       out Ep M1, out Ep M2);

            //秘密鍵の読み込み
            BigInteger Kp = FileManager.LoadPrivateKey("PrivateKey.bin");

            ECC.SetPrivateKey(Kp);

            //復号の実行
            byte[] m = ECC.Decrypt(M1, M2);

            //復号文の出力
            FileManager.OutputDecryptedMsg(m, string.Concat(arg, "_dec"));

            Console.WriteLine("出力が完了しました.");
            Console.WriteLine("出力ファイル名_decの生成を確認してください.");
        }
Exemple #5
0
        public void EncryptMode(string pathin)
        {
            //公開鍵の読み取り
            Ep P, B;

            FileManager.LoadEncryption("PublicKey.bin", out P, out B);
            ECC.SetPublicKey(B, P);

            //バイナリファイルの読み取り
            byte[] m = FileManager.LoadBinaryFile(pathin);

            //暗号文の生成
            Ep M1, M2;

            ECC.Encrypt(m, out M1, out M2);

            //点の位置のチェック

            //暗号文の出力
            FileManager.OutputEncryptFile(M1, M2, string.Concat(pathin, "_enc"));
        }
Exemple #6
0
        //Main関数からどの処理に進むのかを分岐
        static void Main(string[] args)
        {
            //初期設定
            Program program = new Program();

            Console.WriteLine("楕円曲線のパラメータをセット…");
            ECC.SetECCParams();            //楕円曲線のパラメータ初期設定

            //デバッグの分岐
            if (ISDEBUGMODE)
            {
                //モードの入力
                Console.WriteLine("モードを入力してください");
                Console.WriteLine("1:ファイル読み取りのテスト");
                Console.WriteLine("2:BigInteger乱数生成テスト");
                Console.WriteLine("3:楕円曲線上の有理点生成テスト");
                Console.WriteLine("4.平方剰余の計算テスト");
                byte mode = byte.Parse(Console.ReadLine());

                //モードによる分岐
                switch ((EDebugMode)mode)
                {
                //ファイル読み取りテスト
                case EDebugMode.FileReadTest:
                    program.FileReadTest(args[0]);
                    break;

                case EDebugMode.RandomBintTest:
                    program.RandomBIntTest();
                    break;

                case EDebugMode.MakeEpTest:
                    program.MakeEpTest();
                    break;

                case EDebugMode.SqrtModTest:
                    program.SqrtModTest();
                    break;
                }
            }
            else
            {
                //モードによる分岐
                switch (MODE)
                {
                case EExcuteMode.MakeKey:
                    Console.WriteLine("鍵生成プログラムを起動...");
                    program.MakeKey();
                    break;

                case EExcuteMode.Encrypt:
                    Console.WriteLine("暗号化プログラムを起動...");
                    program.EncryptMode(args[0]);
                    break;

                case EExcuteMode.Decrypt:
                    Console.WriteLine("復号プログラムを起動...");
                    program.DecryptMode(args[0]);
                    break;
                }
            }
        }