Beispiel #1
0
        private void sbEncrypt_Click(object sender, EventArgs e)
        {
            var _type_code = String.Format("{0:00}{1:00}", (cbKind1.SelectedIndex + 1), (cbKind2.SelectedIndex + 1));

            var _load_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\6-{_type_code}.xml");
            {
                tbSourceXml.Text = File.ReadAllText(_load_file, Encoding.UTF8);
                WriteLine("plain data read from " + _load_file);
            }

            var _plain_xml = File.ReadAllBytes(_load_file);
            var _rvalue    = UCertHelper.SNG.UserSignCert.RandomNumber;

            ArrayList _taxinvoice = new ArrayList();
            {
                TaxInvoiceStruct _s = new TaxInvoiceStruct
                {
                    SignerRValue = _rvalue,
                    TaxInvoice   = _plain_xml
                };

                _taxinvoice.Add(_s);
            }

            var _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\7-{_type_code}.ber");
            {
                File.WriteAllBytes(_save_file, GetTaxInvoicePackage(_taxinvoice));
                WriteLine("tax invoice package write on the " + _save_file);
            }

            var _nipaCert2 = UCertHelper.SNG.NtsPublicKey;
            var _encoded   = CmsManager.SNG.GetContentInfo(_nipaCert2, _taxinvoice);

            _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\7-{_type_code}.asn");
            {
                File.WriteAllBytes(_save_file, _encoded);

                tbSourceXml.Text = Convert.ToBase64String(_encoded);
                WriteLine("encrypted result write on the " + _save_file);
            }

            MessageBox.Show(String.Format("암호화된 형식의 전자세금계산서\n\r{0} 파일을\n\r업로드 하여 검증을 실시 하세요.", _save_file));
        }
Beispiel #2
0
        /// <summary>
        /// 2048비트 인증서로 서명된 일반 전자세금계산서(1건)와 당초승인번호가 기입된 수정 전자세금계산서(1건)
        /// 그리고 2048비트 인증서로 서명된 일반 계산서(1건)와 당초승인번호가 기입된 수정 계산서(1건)는 반드시 첨부해야 합니다.(총 4건)
        /// </summary>
        /// <returns></returns>
        private bool CreateInvoce()
        {
            var _ntsCert2 = UCertHelper.SNG.NtsPublicKey;

            //-------------------------------------------------------------------------------------------------------------------//
            // 세금계산서 작성
            //-------------------------------------------------------------------------------------------------------------------//

            // 2048_전자세금계산서
            var _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0101.xml");

            var _c_0101 = new XmlDocument();

            _c_0101.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd());
            var _t_0101 = Convertor.SNG.CanonicalizationToDocument(_c_0101, "\t");

            // 2048_전자계산서
            _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0301.xml");

            var _c_0301 = new XmlDocument();

            _c_0301.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd());
            var _t_0301 = Convertor.SNG.CanonicalizationToDocument(_c_0301, "\t");

            // 2048_수정전자세금계산서
            _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0201.xml");

            var _c_0201 = new XmlDocument();

            _c_0201.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd());
            var _t_0201 = Convertor.SNG.CanonicalizationToDocument(_c_0201, "\t");

            // 2048_수정전자계산서
            _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0401.xml");

            var _c_0401 = new XmlDocument();

            _c_0401.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd());
            var _t_0401 = Convertor.SNG.CanonicalizationToDocument(_c_0401, "\t");

            //-------------------------------------------------------------------------------------------------------------------//
            // 전자서명
            //-------------------------------------------------------------------------------------------------------------------//
            var _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0101.OuterXml));
            var _p_0101      = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2);

            _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0301.OuterXml));
            var _p_0301 = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2);

            _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0201.OuterXml));
            var _p_0201 = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2);

            _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0401.OuterXml));
            var _p_0401 = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2);

            var _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, @"interop\12.전자세금계산서.xml");
            {
                string _xmltxt = (new StreamReader(_p_0101)).ReadToEnd() + "\n";
                _p_0101.Seek(0, SeekOrigin.Begin);

                _xmltxt += (new StreamReader(_p_0301)).ReadToEnd() + "\n";
                _p_0301.Seek(0, SeekOrigin.Begin);

                _xmltxt += (new StreamReader(_p_0201)).ReadToEnd() + "\n";
                _p_0201.Seek(0, SeekOrigin.Begin);

                _xmltxt += (new StreamReader(_p_0401)).ReadToEnd() + "\n";
                _p_0401.Seek(0, SeekOrigin.Begin);

                File.WriteAllText(_save_file, _xmltxt);
                WriteLine("write invoice document on the " + _save_file);
            }

            //-------------------------------------------------------------------------------------------------------------------//
            // 암호화
            //-------------------------------------------------------------------------------------------------------------------//
            var _rvalue = UCertHelper.SNG.UserSignCert.RandomNumber;

            var _taxinvoice = new ArrayList();
            {
                var _s_0301 = new TaxInvoiceStruct
                {
                    SignerRValue = _rvalue,
                    TaxInvoice   = _p_0301.ToArray()
                };
                _taxinvoice.Add(_s_0301);

                var _s_0101 = new TaxInvoiceStruct
                {
                    SignerRValue = _rvalue,
                    TaxInvoice   = _p_0101.ToArray()
                };
                _taxinvoice.Add(_s_0101);

                var _s_0401 = new TaxInvoiceStruct
                {
                    SignerRValue = _rvalue,
                    TaxInvoice   = _p_0401.ToArray()
                };
                _taxinvoice.Add(_s_0401);

                var _s_0201 = new TaxInvoiceStruct
                {
                    SignerRValue = _rvalue,
                    TaxInvoice   = _p_0201.ToArray()
                };
                _taxinvoice.Add(_s_0201);
            }

            var _encrypted = CmsManager.SNG.GetContentInfo(_ntsCert2, _taxinvoice);

            _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, @"interop\14.두번째ReferenceTarget.asn");
            {
                File.WriteAllBytes(_save_file, _encrypted);
                WriteLine("write encrypted on the " + _save_file);
            }

            //-------------------------------------------------------------------------------------------------------------------//
            // SOAP Envelope
            //-------------------------------------------------------------------------------------------------------------------//
            var _time_stamp = DateTime.Now;

            var _soap_header = new Header()
            {
                ToAddress = tbTaxInvoiceSubmitUrl.Text.Trim(),

                Action  = Request.eTaxInvoiceSubmit,
                Version = UCfgHelper.SNG.eTaxVersion,

                FromParty = new Party(UCfgHelper.SNG.SenderBizNo, UCfgHelper.SNG.SenderBizName),
                ToParty   = new Party(UCfgHelper.SNG.ReceiverBizNo, UCfgHelper.SNG.ReceiverBizName),

                ReplyTo       = UCfgHelper.SNG.ReplyAddress,
                OperationType = Request.OperationType_InvoiceSubmit,
                MessageType   = Request.MessageType_Request,

                TimeStamp = _time_stamp,
                MessageId = Packing.SNG.GetMessageId(_time_stamp)
            };

            var _soap_body = new Body()
            {
                SubmitID    = Packing.SNG.GetSubmitID(_soap_header.TimeStamp, UCfgHelper.SNG.RegisterId),
                ReferenceID = Guid.NewGuid().ToString(),

                TotalCount = 4   // 전자세금계산서의 총 개수
            };

            //-------------------------------------------------------------------------------------------------------------------//
            // SOAP Signature
            //-------------------------------------------------------------------------------------------------------------------//
            var _signed_xml = Packing.SNG.GetSignedSoapEnvelope(_encrypted, UCertHelper.SNG.AspSignCert.X509Cert2, _soap_header, _soap_body);

            _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, @"interop\17.전자서명후.txt");
            {
                File.WriteAllText(_save_file, _signed_xml.OuterXml, Encoding.UTF8);

                tbSourceXml.Text = File.ReadAllText(_save_file, Encoding.UTF8);
                WriteLine("transforms write on the " + _save_file);
            }

            return(true);
        }
Beispiel #3
0
        private MimeContent DoSendReport(DataRowCollection p_workingRows, DateTime p_reportTime)
        {
            //-------------------------------------------------------------------------------------------------------------------//
            // 암호화
            //-------------------------------------------------------------------------------------------------------------------//
            X509Certificate2 _ntsCert2 = UCertHelper.NtsPublicKey;

            ArrayList _invoices = new ArrayList();

            for (int i = 0; i < p_workingRows.Count; i++)
            {
                string _document = Convert.ToString(p_workingRows[i]["document"]);
                string _rvalue   = Convert.ToString(p_workingRows[i]["rvalue"]);

                TaxInvoiceStruct _taxStruct = new TaxInvoiceStruct
                {
                    SignerRValue = Convert.FromBase64String(_rvalue),
                    TaxInvoice   = Encoding.UTF8.GetBytes(_document)
                };
                _invoices.Add(_taxStruct);
            }

            byte[] _encrypted = CmsManager.SNG.GetContentInfo(_ntsCert2, _invoices);

            //-------------------------------------------------------------------------------------------------------------------//
            // SOAP Envelope
            //-------------------------------------------------------------------------------------------------------------------//
            Header _soapHeader = new Header();
            {
                _soapHeader.ToAddress = UAppHelper.TaxInvoiceSubmitUrl;
                _soapHeader.Action    = Request.eTaxInvoiceSubmit;
                _soapHeader.Version   = UAppHelper.eTaxVersion;

                _soapHeader.FromParty = new Party(UAppHelper.SenderBizNo, UAppHelper.SenderBizName);
                _soapHeader.ToParty   = new Party(UAppHelper.ReceiverBizNo, UAppHelper.ReceiverBizName);

                _soapHeader.ReplyTo       = UAppHelper.ReplyAddress;
                _soapHeader.OperationType = Request.OperationType_InvoiceSubmit;
                _soapHeader.MessageType   = Request.MessageType_Request;

                _soapHeader.TimeStamp = p_reportTime;
                _soapHeader.MessageId = Packing.SNG.GetMessageId(_soapHeader.TimeStamp);
            }

            Body _soapBody = new Body();
            {
                _soapBody.SubmitID    = Packing.SNG.GetSubmitID(_soapHeader.TimeStamp, UAppHelper.RegisterId);
                _soapBody.ReferenceID = Guid.NewGuid().ToString();

                _soapBody.TotalCount = p_workingRows.Count;
            }

            //-------------------------------------------------------------------------------------------------------------------//
            // SOAP Signature
            //-------------------------------------------------------------------------------------------------------------------//
            XmlDocument _signedXml = Packing.SNG.GetSignedSoapEnvelope(_encrypted, UCertHelper.AspSignCert.X509Cert2, _soapHeader, _soapBody);

            //-------------------------------------------------------------------------------------------------------------------//
            // Request
            //-------------------------------------------------------------------------------------------------------------------//
            return(Request.SNG.TaxInvoiceSubmit(
                       Encoding.UTF8.GetBytes(_signedXml.OuterXml),
                       _encrypted,
                       _soapBody.ReferenceID,
                       UAppHelper.TaxInvoiceSubmitUrl
                       ));
        }