コード例 #1
0
        public async Task <object> SignCMSAsync(string accessToken, string base_URL, InputSignatureAdvanced inputSignatureAdvanced)
        {
            SBUtils.Unit.SetLicenseKey("03D250F599AFD170E8A7410AFE3EAAC635E687187762F9936518B7FA6AEDDB215DF3177560DD647433BEE43711D31EC2B6818C0797C464E7F077467EABB466DE8F21CE77A054C9D3B04B0BA859B4BE8E8B7FCD50D07E2A4CD96240FA1468D8F03CBDE4EB1D2070A4294D2426881EEFBDFFAA7A76747B30A2E0564CA06CD673089318BFBA530E88A26F6FF76E46FE2A5A65C0FBAACB09F9804BC287412E49EE832058643D8A59B8398C7637C3EDE91660E6B696F32AD416F606DB215A2FFF214B5DF58DE27687362740B591D7F3D2D33CE6A3D1601521408511476FA81D374CA32D0443BD710D4D732A8C398A953047EEAB4A62237813DA11FC5E0EBFF1E69A9D");
            pin = inputSignatureAdvanced.PIN; otp = inputSignatureAdvanced.OTP; credentialsID = inputSignatureAdvanced.credentialsID; access_token = accessToken; baseURL = base_URL; hashAlgo = inputSignatureAdvanced.hashAlgo; signAlgo = inputSignatureAdvanced.signAlgo;

            OutputError error = new OutputError()
            {
                error             = "error_pades_signature",
                error_description = "error"
            };

            var filePath = Path.GetTempFileName();

            if (inputSignatureAdvanced.documentStream.Length > 0)
            {
                using (Stream stream = new FileStream(filePath, FileMode.Create))
                {
                    Stream memoryStream = new MemoryStream(inputSignatureAdvanced.documentStream);

                    await memoryStream.CopyToAsync(stream);

                    var msg = new TElSignedCMSMessage();
                    msg.CreateNew(stream, 0, stream.Length);
                    int sigIndex = msg.AddSignature();

                    SBPKCS7Utils.TElPKCS7Attributes pKCS7Attributes = new SBPKCS7Utils.TElPKCS7Attributes();

                    TElCMSSignature signature = msg.get_Signatures(sigIndex);

                    TElX509Certificate certificate = LoadCertificate(credentialsID, access_token);

                    if (hashAlgo == "2.16.840.1.101.3.4.2.1")
                    {
                        signature.DigestAlgorithm = SBConstants.Unit.SB_ALGORITHM_DGST_SHA256;
                    }
                    else
                    {
                        signature.DigestAlgorithm = SBConstants.Unit.SB_ALGORITHM_DGST_SHA1;
                    }

                    signature.SigningOptions = SBCMS.__Global.csoInsertMessageDigests |
                                               SBCMS.__Global.csoIncludeCertToAttributes |
                                               SBCMS.__Global.csoIncludeCertToMessage |
                                               SBCMS.__Global.csoInsertContentType |
                                               SBCMS.__Global.csoInsertSigningTime |
                                               SBCMS.__Global.csoUsePlainContentForTimestampHashes;


                    signature.SigningTime = DateTime.Now;

                    int cID = signature.SigningCertificate.AddCertID();
                    TElCMSSignerIdentifier signerIdentifier = signature.SigningCertificate.get_CertIDs(cID);
                    signerIdentifier.Import(certificate, SBConstants.Unit.SB_ALGORITHM_DGST_SHA1);

                    signature.SigningCertificate.SigningCertificateType = TSBCMSSigningCertificateType.sctESSSigningCertificateV2;
                    signature.SigningCertificate.Included = true;


                    TElCAdESSignatureProcessor processor = new TElCAdESSignatureProcessor();
                    processor.RemoteSigningMode            = true;
                    processor.AllowPartialValidationInfo   = true;
                    processor.ForceCompleteChainValidation = false;
                    processor.ForceSigningCertificateV2    = false;
                    processor.IgnoreChainValidationErrors  = true;
                    processor.OfflineMode = false;
                    processor.SkipValidationTimestampedSignatures = true;


                    processor.Signature     = signature;
                    processor.OnRemoteSign += new TSBCAdESRemoteSignEvent(CAdES_Handler);
                    processor.CreateBES(certificate);



                    var result = new MemoryStream();
                    msg.Save(result);

                    OutputAdvancedSignature output = new OutputAdvancedSignature()
                    {
                        signedDocument = result.GetBuffer()
                    };
                    return(output);
                }
            }
            else
            {
                return(error);
            }
        }
コード例 #2
0
 private void BeforeSign_Handler(object Sender, TElCMSSignature Signature, TElX509Certificate Certificate, TElCustomCertStorage Chain)
 {
     var test = Certificate.SubjectName;
 }