Ejemplo n.º 1
0
        private async void ButtonSignature_Click(object sender, RoutedEventArgs e)
        {
            // input
            string file_in_target = textTargetFile.Text;

            addLog("Read-Start ...", true);

            string pin = "";

            if (checkPIN.IsChecked.Value)
            {
                pin = textPIN.Text;
            }
            var readData = await readRecs(GeboSigCommon.Common.RPID, pin);

            textLog.Text = textLog.Text + string.Format($"...{readData.msg}") + "\r\n";

            if (readData.isSuccess == false)
            {
                return;
            }

            Debug.WriteLine($"DER(Encrypted) {readData.data.Length}:{gebo.CTAP2.Common.BytesToHexString(readData.data)}");

            // Decrypt
            var decData = BouncyCastleRijndael.Decrypt(readData.data);

            Debug.WriteLine($"DER(Decrypted) {decData.Length}:{gebo.CTAP2.Common.BytesToHexString(decData)}");

            // パディングデータを除去する
            var decPrivateKey = getPrivateKey(decData);

            Debug.WriteLine($"PrivateKey     {decPrivateKey.Length}:{gebo.CTAP2.Common.BytesToHexString(decPrivateKey)}");

            // DER to PEM
            var pemPrivateKey = GeboSigCommon.Common.ConvertPrivateKeyDERtoPEM(decPrivateKey);

            // 署名作成
            var sig = createSign(pemPrivateKey, file_in_target);

            // ターゲットファイルと署名をzipしてデスクトップに作成
            createZip(file_in_target, sig);

            addLog("Signature ... Success!", true);

            MessageBox.Show("署名付きファイルをデスクトップに作成しました");

            return;
        }
Ejemplo n.º 2
0
        private async void ButtonRegister_Click(object sender, RoutedEventArgs e)
        {
            // 入力チェック
            if (await checkInput(true) == false)
            {
                return;
            }

            // キーペアを作成
            var keyPair = createKeyPair(1024);

            // PrivateKeyをGET
            var pemPrivateKey = getPrivatekyPEM(keyPair);

            // PrivateKeyをDERにする
            var derPrivatekey = GeboSigCommon.Common.ConvertPEMtoDER(pemPrivateKey);

            Debug.WriteLine($"DER            {derPrivatekey.Length}:{gebo.CTAP2.Common.BytesToHexString(derPrivatekey)}");

            // AES(256)
            var encPrivatekey = BouncyCastleRijndael.Encrypt(derPrivatekey);

            Debug.WriteLine($"DER(Encrypted) {encPrivatekey.Length}:{gebo.CTAP2.Common.BytesToHexString(encPrivatekey)}");

            // 証明書を作成
            var cert = createCertificate(keyPair, textUserName.Text);

            // PINを設定
            if (await setNewPIN(textPIN.Text) == false)
            {
                return;
            }

            // Authenticatorに書き込み
            {
                var writeDataList = createWriteDataList(encPrivatekey);

                addLog(string.Format($"Write-Start {writeDataList.Count}"));
                foreach (var rec in writeDataList)
                {
                    textLog.Text = textLog.Text + string.Format($"WrittengData...{rec.recno}");

                    var msg = await writeRec(GeboSigCommon.Common.RPID, textPIN.Text, rec);

                    msg          = string.Format($"...{msg}") + "\r\n";
                    textLog.Text = textLog.Text + msg;
                }
                addLog(string.Format($"Write-End"));
            }

            // 証明書をエクスポート
            {
                string file = string.Format($@"{textCert.Text}{textUserName.Text}.crt");
                File.WriteAllText(file, cert);
            }

            addLog(string.Format($"Register-Success"));

            MessageBox.Show("登録が完了しました");

            return;
        }