Esempio n. 1
0
        private void AmpliarFirma(SignatureFormat formato)
        {
            try
            {
                UpgradeParameters parametros = new UpgradeParameters();

                parametros.TimeStampClient = new TimeStampClient(txtURLSellado.Text);
                parametros.OCSPServers.Add(new OcspServer(txtOCSP.Text));

                // test con @firma

                /* parametros.GetOcspUrlFromCertificate = false;
                 * OcspServer ocspServer = new OcspServer("https://afirma.redsara.es/servidorOcsp/servidorOCSP");
                 * ocspServer.SetRequestorName(OcspServer.Rfc822Name, "idAplicacion");
                 * ocspServer.SignCertificate = CertUtil.SelectCertificate();
                 *
                 * parametros.OCSPServers.Add(ocspServer); */

                XadesUpgraderService upgrader = new XadesUpgraderService();
                upgrader.Upgrade(_signatureDocument, formato, parametros);

                MessageBox.Show("Firma ampliada correctamente", "Test firma XADES",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error ampliando la firma: " + ex.Message);
            }
        }
Esempio n. 2
0
        private static bool NextArgType(Tokenizer tokenizer, SignatureFormat signatureFormat, TokenType endBracket, out string argType)
        {
            var next = tokenizer.Peek();

            argType = null;
            if (next.HasValue && next.Value.Kind == endBracket)
            {
                return(false);
            }
            tokenizer.Eat(TokenType.WhiteSpace);
            argType = ParseType(tokenizer, signatureFormat);

            int lastDot = Math.Max(argType.LastIndexOf('.'), argType.LastIndexOf('/'));

            if (lastDot > 0)
            {
                argType = argType.Substring(lastDot + 1);
            }

            if (signatureFormat.Has(SignatureFormat.ParameterNames))
            {
                tokenizer.Expect(TokenType.WhiteSpace);
                tokenizer.Expect(TokenType.Identifier);
            }
            return(true);
        }
Esempio n. 3
0
        private static Signature ParseSignature(string input, SignatureFormat signatureFormat, string methodName = null)
        {
            Tokenizer tokenizer = new Tokenizer(input);

            tokenizer.Eat(TokenType.WhiteSpace);
            if (signatureFormat.Has(SignatureFormat.AtPrefix))
            {
                tokenizer.Expect(TokenType.Identifier); // "at" or "à" or similar, depending on language
                tokenizer.Expect(TokenType.WhiteSpace);
            }

            if (signatureFormat.Has(SignatureFormat.ReturnType))
            {
                ParseType(tokenizer, signatureFormat); // Ignore return type.
            }
            if (signatureFormat.Has(SignatureFormat.MethodName))
            {
                if (methodName != null)
                {
                    throw new ArgumentException("Don't pass method name");
                }

                methodName = ParseQualifiedMethodName(tokenizer, signatureFormat);
            }
            tokenizer.Expect(TokenType.LeftParen);
            var args = ParseArgumentList(tokenizer, TokenType.RightParen, signatureFormat);

            tokenizer.Expect(TokenType.RightParen);
            return(new Signature(methodName, args));
        }
        public static SignatureByte SignMessage(this PrivateKey key, byte[] hash, Network network)
        {
            // TODO add a prefix to prevent cross protocol signature
            var data = SignatureEngine.FormatMessageForSigning(hash, network);
            // TODO NBitcoin.Key.SignCompact
            var signature = key.Sign(data);

            Debug.Assert(key.Verify(data, signature));
            return(SignatureFormat.ToBytes(signature));
        }
Esempio n. 5
0
        /// <summary>
        /// Método para la verificación de firmas
        /// </summary>
        /// <param name="signature"></param>
        /// <param name="signatureFormat"></param>
        public void VerifySignature(byte[] signature, SignatureFormat signatureFormat)
        {
            object signatureObject = GetSignatureObject(signature, signatureFormat);

            VerifyResponse response = SendRequest(signatureObject);

            if (response.Result.ResultMajor != "urn:afirma:dss:1.0:profile:XSS:resultmajor:ValidSignature")
            {
                throw new Exception(response.Result.ResultMessage.Value);
            }
        }
Esempio n. 6
0
        private SignatureExtension GetExtensionProfile(SignatureParameters parameters)
        {
            //jbonilla
            SignatureFormat signFormat = parameters.SignatureFormat;

            if (signFormat.Equals(SignatureFormat.XAdES_BES) || signFormat.Equals(SignatureFormat
                                                                                  .XAdES_EPES))
            {
                return(null);
            }
            else if (signFormat.Equals(SignatureFormat.XAdES_T))
            {
                XAdESProfileT extensionT = new XAdESProfileT();
                extensionT.SetTspSource(TspSource);
                return(extensionT);
            }
            else if (signFormat.Equals(SignatureFormat.XAdES_C))
            {
                XAdESProfileC extensionC = new XAdESProfileC();
                extensionC.SetTspSource(TspSource);
                extensionC.SetCertificateVerifier(Verifier);
                return(extensionC);
            }
            else if (signFormat.Equals(SignatureFormat.XAdES_X))
            {
                XAdESProfileX extensionX = new XAdESProfileX();
                extensionX.SetTspSource(TspSource);
                extensionX.SetCertificateVerifier(Verifier);
                return(extensionX);
            }
            else if (signFormat.Equals(SignatureFormat.XAdES_XL))
            {
                XAdESProfileXL extensionXL = new XAdESProfileXL();
                extensionXL.SetTspSource(TspSource);
                extensionXL.SetCertificateVerifier(Verifier);
                return(extensionXL);
            }
            //                else
            //                {
            //                    if (signFormat.Equals(SignatureFormat.XAdES_A))
            //                    {
            //                        throw new NotImplementedException();
            //                        //XAdESProfileA extensionA = new XAdESProfileA();
            //                        //extensionA.SetTspSource(tspSource);
            //                        //extensionA.SetCertificateVerifier(certificateVerifier);
            //                        //return extensionA;
            //                    }
            //                }
            //            }
            //        }
            //    }
            //}
            throw new ArgumentException("Unsupported signature format " + parameters.SignatureFormat);
        }
Esempio n. 7
0
        /// <summary>
        /// Método para realizar la ampliación de firmas
        /// </summary>
        /// <param name="signature"></param>
        /// <param name="signatureFormat"></param>
        /// <param name="returnUpdatedSignatureType"></param>
        /// <returns></returns>
        public byte[] UpgradeSignature(byte[] signature, SignatureFormat signatureFormat, string returnUpdatedSignatureType)
        {
            object signatureObject = GetSignatureObject(signature, signatureFormat);

            VerifyResponse response = SendRequest(signatureObject, returnUpdatedSignatureType);

            if (response.Result.ResultMajor == "urn:oasis:names:tc:dss:1.0:resultmajor:Success")
            {
                XmlElement           updatedSignatureXmlElement = response.OptionalOutputs.Any.Single(e => e.LocalName == "UpdatedSignature");
                UpdatedSignatureType updatedSignatureType       = DeserializeXml <UpdatedSignatureType>(updatedSignatureXmlElement.OuterXml);

                if (updatedSignatureType.SignatureObject.Item.GetType() == typeof(SignaturePtr))
                {
                    SignaturePtr signaturePtr = updatedSignatureType.SignatureObject.Item as SignaturePtr;

                    DocumentWithSignature    docWithSignature = null;
                    IEnumerable <XmlElement> documentWithSignatureXmlElements = response.OptionalOutputs.Any.Where(e => e.LocalName == "DocumentWithSignature");
                    foreach (var item in documentWithSignatureXmlElements)
                    {
                        docWithSignature = DeserializeXml <DocumentWithSignature>(item.OuterXml);

                        if (docWithSignature.Document.ID == signaturePtr.WhichDocument)
                        {
                            break;
                        }
                    }

                    if (docWithSignature == null)
                    {
                        throw new Exception("No se ha encontrado el documento de firma");
                    }
                    else
                    {
                        return(docWithSignature.Document.Item as byte[]);
                    }
                }
                else if (updatedSignatureType.SignatureObject.Item.GetType() == typeof(Base64Signature))
                {
                    Base64Signature b64Signature = updatedSignatureType.SignatureObject.Item as Base64Signature;

                    return(b64Signature.Value);
                }
                else
                {
                    throw new Exception("Tipo de resultado no soportado");
                }
            }
            else
            {
                throw new Exception(response.Result.ResultMessage.Value);
            }
        }
Esempio n. 8
0
        private CAdESSignatureExtension GetExtensionProfile(SignatureParameters parameters
                                                            )
        {
            //jbonilla
            SignatureFormat signFormat = parameters.SignatureFormat;

            if (signFormat.Equals(SignatureFormat.CAdES_BES) || signFormat.Equals(SignatureFormat
                                                                                  .CAdES_EPES))
            {
                return(null);
            }
            else if (signFormat.Equals(SignatureFormat.CAdES_T))
            {
                CAdESProfileT extensionT = new CAdESProfileT();
                extensionT.SetSignatureTsa(TspSource);
                return(extensionT);
            }
            else if (signFormat.Equals(SignatureFormat.CAdES_C))
            {
                CAdESProfileC extensionC = new CAdESProfileC();
                extensionC.SetSignatureTsa(TspSource);
                extensionC.SetCertificateVerifier(Verifier);
                return(extensionC);
            }
            else if (signFormat.Equals(SignatureFormat.CAdES_X))
            {
                CAdESProfileX extensionX = new CAdESProfileX();
                extensionX.SetSignatureTsa(TspSource);
                extensionX.SetExtendedValidationType(1);
                extensionX.SetCertificateVerifier(Verifier);
                return(extensionX);
            }
            else if (signFormat.Equals(SignatureFormat.CAdES_XL))
            {
                CAdESProfileXL extensionXL = new CAdESProfileXL();
                extensionXL.SetSignatureTsa(TspSource);
                extensionXL.SetExtendedValidationType(1);
                extensionXL.SetCertificateVerifier(Verifier);
                return(extensionXL);
            }
            else if (signFormat.Equals(SignatureFormat.CAdES_A))
            {
                CAdESProfileA extensionA = new CAdESProfileA();
                extensionA.SetSignatureTsa(TspSource);
                extensionA.SetCertificateVerifier(Verifier);
                extensionA.SetExtendedValidationType(1);
                return(extensionA);
            }

            throw new ArgumentException("Unsupported signature format " + parameters.SignatureFormat);
        }
Esempio n. 9
0
            public HydraSignatureEnhanced(byte[] signatureData)
            {
                Contract.Assert(signatureData != null);

                this.signatureType = SignatureFormat.Unknown;
                this.id            = InvalidId; // Start with an invalid ID

                if ((signatureData != null) && (signatureData.Length >= 1))
                {   // Must have at least 1 byte to be a valid signature
                    byte[] reverseSignatureData = new byte[signatureData.Length];
                    for (int i = 0; i < signatureData.Length; i++)
                    {   // Reverse all bits to match "endian"
                        reverseSignatureData[i] = ReverseByte(signatureData[i]);
                    }

                    this.data      = new BitArray(reverseSignatureData);
                    this.bitOffset = 0;

                    if (this.data[0] == true)
                    {                            // Legacy signature always with "Move" instruction (e.g., first bit is 1)
                        this.signatureType  = SignatureFormat.Legacy;
                        this.startBitOffset = 0; // Start with bit(0) - "Move"
                    }
                    else if ((reverseSignatureData[0] == 0) && (signatureData.Length >= SignatureHeaderLength))
                    {   // Enhanced format signature (first 8 bits must alwasy be 0)
                        this.signatureType = SignatureFormat.Enhanced;

                        // Signature Header:
                        // 8: ID (all bits 0)
                        // 8: HeaderDataLengths (MSB first, = 8)
                        // 16: X-Axis scaled resolution (hor full-scale range up to 2048, MSB first)
                        // 16: Y-Axis scaled resolution (vert full-scale range up to 1024, MSB fist)
                        // 16: X-Axis physical size (withd of pad in 0.01 mm units, for the ICE5500 this is 6717 which corresponding to 67.17mm, MSB first)
                        // 16: Y-Axis phy size (hight of pad in 0.01 mm units, MSB first)
                        this.id             = this.ReadByte(8); // Enhanced Signature first 8 bits should alwasy be zero(0)
                        this.headerLength   = this.ReadByte(8);
                        this.startBitOffset = (2 /* this.id + len */ + this.headerLength) * 8 /* 8 bits in byte */;

                        this.axisScaleX = this.ReadInt(16, false);
                        this.axisScaleY = this.ReadInt(16, false);
                        this.phySizeX   = this.ReadInt(16, false);
                        this.phySizeY   = this.ReadInt(16, false);
                    }
                }
                else
                {
                    NetTracer.Warning("L5300Terminal - L5300SignatureEnhanced - null or invalid signature header");
                }
            }
Esempio n. 10
0
        private object GetSignatureObject(byte[] signature, SignatureFormat signatureFormat)
        {
            if (signatureFormat == SignatureFormat.PAdES)
            {
                Base64Data b64Data = new Base64Data();
                b64Data.MimeType = "application/pdf";
                b64Data.Value    = signature;

                return(b64Data);
            }
            else
            {
                return(signature);
            }
        }
Esempio n. 11
0
        /// <summary>Because some information are stored in the profile, a profile is not Thread-safe.
        ///     </summary>
        /// <remarks>
        /// Because some information are stored in the profile, a profile is not Thread-safe. The software must create one
        /// for each request.
        /// </remarks>
        /// <returns>A new instance of signatureProfile corresponding to the parameters.</returns>
        private CAdESProfileBES GetSigningProfile(SignatureParameters parameters)
        {
            //jbonilla
            SignatureFormat signFormat = parameters.SignatureFormat;

            if (signFormat.Equals(SignatureFormat.CAdES_BES))
            {
                return(new CAdESProfileBES());
            }
            else
            {
                if (signFormat.Equals(SignatureFormat.CAdES_EPES))
                {
                    return(new CAdESProfileEPES());
                }
            }
            return(new CAdESProfileEPES());
        }
Esempio n. 12
0
        private XAdESProfileBES GetSigningProfile(SignatureParameters parameters)
        {
            //jbonilla
            SignatureFormat signFormat = parameters.SignatureFormat;

            if (signFormat.Equals(SignatureFormat.XAdES_BES))
            {
                return(new XAdESProfileBES());
            }
            //else
            //{
            //    if (signFormat.Equals(SignatureFormat.XAdES_EPES))
            //    {
            //        return new XAdESProfileEPES();
            //    }
            //}
            //TODO jbonilla EPES?
            return(new XAdESProfileBES());
        }
Esempio n. 13
0
        private void AmpliarFirma(SignatureFormat formato)
        {
            try
            {
                UpgradeParameters parametros = new UpgradeParameters();

                parametros.TimeStampClient = new TimeStampClient(txtURLSellado.Text);
                parametros.OCSPServers.Add(txtOCSP.Text);

                XadesUpgraderService upgrader = new XadesUpgraderService();
                upgrader.Upgrade(_signatureDocument, formato, parametros);

                MessageBox.Show("Firma ampliada correctamente", "Test firma XADES",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ha ocurrido un error ampliando la firma: " + ex.Message);
            }
        }
Esempio n. 14
0
        private void AmpliarFirma(SignatureFormat formato)
        {
            try
            {
                UpgradeParameters parametros = new UpgradeParameters
                {
                    TimeStampClient = new TimeStampClient(txtURLSellado.Text)
                };
                parametros.OCSPServers.Add(new OcspServer(txtOCSP.Text));

                XadesUpgraderService upgrader = new XadesUpgraderService();
                upgrader.Upgrade(_signatureDocument, formato, parametros);

                MessageBox.Show("Signature extended correctly", $"Extend to {formato.ToString()}",
                                MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show("An error has occurred extending the signature: " + ex.Message);
            }
        }
Esempio n. 15
0
        private static string ParseQualifiedMethodName(Tokenizer tokenizer, SignatureFormat signatureFormat)
        {
            StringBuilder result = new StringBuilder();
            Token?        next;

            do
            {
                next = tokenizer.Peek();
                if (!next.HasValue)
                {
                    tokenizer.Fail("Expected qualified method name, found EOF");
                }
                if (next.Value.Kind != TokenType.LeftParen)
                {
                    tokenizer.Next();
                    result.Append(next.Value.ToString(tokenizer.Input));
                }
            } while (next.Value.Kind != TokenType.LeftParen);

            return(result.ToString());
        }
Esempio n. 16
0
        public void Upgrade(SignatureDocument sigDocument, SignatureFormat toFormat, UpgradeParameters parameters)
        {
            XadesTUpgrader  xadesTUpgrader  = null;
            XadesXLUpgrader xadesXLUpgrader = null;

            SignatureDocument.CheckSignatureDocument(sigDocument);
            if (toFormat == SignatureFormat.XAdES_T)
            {
                xadesTUpgrader = new XadesTUpgrader();
                xadesTUpgrader.Upgrade(sigDocument, parameters);
            }
            else
            {
                if (sigDocument.XadesSignature.UnsignedProperties.UnsignedSignatureProperties.SignatureTimeStampCollection.Count == 0)
                {
                    xadesTUpgrader = new XadesTUpgrader();
                    xadesTUpgrader.Upgrade(sigDocument, parameters);
                }
                xadesXLUpgrader = new XadesXLUpgrader();
                xadesXLUpgrader.Upgrade(sigDocument, parameters);
            }
        }
Esempio n. 17
0
        private object GetDocument(byte[] signature, SignatureFormat signatureFormat)
        {
            if (signatureFormat == SignatureFormat.XAdES)
            {
                return(signature);
            }

            Base64Data b64Data = new Base64Data();

            if (signatureFormat == SignatureFormat.PAdES)
            {
                b64Data.MimeType = "application/pdf";
            }
            else
            {
                b64Data.MimeType = "application/octet-stream";
            }

            b64Data.Value = signature;

            return(b64Data);
        }
Esempio n. 18
0
        /// <summary>
        ///     Sets the signature format based on the item selected from the dropdown.
        /// </summary>
        /// <param name="formatInput">
        ///     The signature format.
        /// </param>
        public void SetFormat(string formatInput)
        {
            this.format = formatInput;

            switch (this.format)
            {
            case "Ascii3Byte":
                this.signatureFormat = SignatureFormat.Ascii3Byte;
                break;

            case "PointsBigEndian":
                this.signatureFormat = SignatureFormat.PointsBigEndian;
                break;

            case "PointsLittleEndian":
                this.signatureFormat = SignatureFormat.PointsLittleEndian;
                break;

            default:
                this.signaturePoints = null;
                break;
            }
        }
Esempio n. 19
0
        string SignDocument(X509Certificate2 signCertificate, System.IO.Stream inputStream, SignatureProductionPlace signatureProductionPlace, string timeStampUrl = "https://freetsa.org/tsr", SignatureFormat format = SignatureFormat.XAdES_T)
        {
            FirmaXadesNet.XadesService svc = new FirmaXadesNet.XadesService();

            var parameters = new SignatureParameters()
            {
                SignatureMethod          = SignatureMethod.RSAwithSHA256,
                SigningDate              = DateTime.Now,
                SignaturePackaging       = SignaturePackaging.ENVELOPED,
                InputMimeType            = "text/xml",
                SignatureProductionPlace = signatureProductionPlace
            };

            parameters.SignatureCommitments.Add(new SignatureCommitment(SignatureCommitmentType.ProofOfOrigin));

            using (parameters.Signer = new Signer(signCertificate))
            {
                var signedDocument = svc.Sign(inputStream, parameters);
                signedDocument.Document.PreserveWhitespace = true;
                UpgradeParameters xadesTparameters = new UpgradeParameters()
                {
                    TimeStampClient = new TimeStampClient(timeStampUrl)
                };
                if (format == SignatureFormat.XAdES_XL)
                {
                    xadesTparameters.OCSPServers.Add(new OcspServer("http://srvdc06.crossroad.ltd/ocsp"));
                }
                XadesUpgraderService upgrader = new XadesUpgraderService();
                upgrader.Upgrade(signedDocument, format, xadesTparameters);

                return(signedDocument.Document.OuterXml);
            }
        }
Esempio n. 20
0
 public static bool Has(this SignatureFormat f, SignatureFormat flag)
 {
     return((f & flag) == flag);
 }
Esempio n. 21
0
        private static string ParseType(Tokenizer tokenizer, SignatureFormat signatureFormat, bool allowArray = true)
        {
            var    t        = tokenizer.Expect(TokenType.Identifier);
            string typeName = t.ToString(tokenizer.Input);//.Replace("/", ".").Replace("+", ".");

            if (typeName == "native")
            {
                throw new NotSupportedException("Native int");
            }
            if (typeName == "unsigned")
            {
                tokenizer.Expect(TokenType.WhiteSpace);
                typeName = tokenizer.Expect(TokenType.Identifier).ToString(tokenizer.Input);
                typeName = ResolveUnsignedPrimitive(typeName);
            }
            else
            {
                typeName = ResolvePrimitive(typeName);
            }

            var arrayOrGenericInfo = tokenizer.Peek();

            if (arrayOrGenericInfo.HasValue && signatureFormat.Has(SignatureFormat.GenericArity) && arrayOrGenericInfo.Value.Kind == TokenType.BackTick)
            {
                tokenizer.Next();
                string arity = tokenizer.Expect(TokenType.Number).ToString(tokenizer.Input);
                typeName           = string.Format("{0}`{1}", typeName, arity);
                arrayOrGenericInfo = tokenizer.Peek();
            }

            if (arrayOrGenericInfo.HasValue && signatureFormat.Has(SignatureFormat.GenericTypes) && arrayOrGenericInfo.Value.Kind == TokenType.LeftAngleBracket)
            {
                tokenizer.Next();
                // Comma separated list of types.
                var genericArgs = ParseArgumentList(tokenizer, TokenType.RightAngleBracket, signatureFormat);
                tokenizer.Expect(TokenType.RightAngleBracket);
                if (!signatureFormat.Has(SignatureFormat.GenericArity))
                {
                    typeName = string.Format("{0}`{1}", typeName, genericArgs.Count);
                }
            }

            if (arrayOrGenericInfo.HasValue && arrayOrGenericInfo.Value.Kind == TokenType.Slash)
            {
                // Nested type
                tokenizer.Next();
                string nestedType = ParseType(tokenizer, signatureFormat);
                typeName = string.Format("{0}+{1}", typeName, nestedType);
            }

            if (allowArray)
            {
                typeName = typeName + ParseArraySuffix(tokenizer);
            }

            if (tokenizer.Eat(TokenType.Ampersand))
            {
                typeName += "&";
            }

            return(typeName);
        }
Esempio n. 22
0
 /// <summary>
 /// 修改用户资料
 /// </summary>
 public abstract bool UpdateUserProfile(int usrID, Gender gender, Int16 birthYear, Int16 birthMonth, Int16 birthday, string signature, SignatureFormat signatureFormat, float timeZone, UserExtendedValueCollection extendedFields);
Esempio n. 23
0
        public static byte[] Sign(byte[] message, byte[] prikey, byte[] pubkey, Phantasma.Cryptography.ECC.ECDsaCurve phaCurve = Phantasma.Cryptography.ECC.ECDsaCurve.Secp256r1, SignatureFormat signatureFormat = SignatureFormat.Concatenated)
        {
            var signer = SignerUtilities.GetSigner("SHA256withECDSA");

            Org.BouncyCastle.Asn1.X9.X9ECParameters curve;
            switch (phaCurve)
            {
            case Phantasma.Cryptography.ECC.ECDsaCurve.Secp256k1:
                curve = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256k1");
                break;

            default:
                curve = NistNamedCurves.GetByName("P-256");
                break;
            }
            var             dom = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);
            ECKeyParameters privateKeyParameters = new ECPrivateKeyParameters(new BigInteger(1, prikey), dom);

            signer.Init(true, privateKeyParameters);
            signer.BlockUpdate(message, 0, message.Length);
            var sig = signer.GenerateSignature();

            switch (signatureFormat)
            {
            case SignatureFormat.Concatenated:
                // We convert from default DER format that Bouncy Castle uses to concatenated "raw" R + S format.
                return(TranscodeSignatureToConcat(sig, 64));

            case SignatureFormat.DEREncoded:
                // Return DER-encoded signature unchanged.
                return(sig);

            default:
                throw new Exception("Unknown signature format");
            }
        }
Esempio n. 24
0
        public static bool Verify(byte[] message, byte[] signature, byte[] pubkey, Phantasma.Cryptography.ECC.ECDsaCurve phaCurve = Phantasma.Cryptography.ECC.ECDsaCurve.Secp256r1, SignatureFormat signatureFormat = SignatureFormat.Concatenated)
        {
            var signer = SignerUtilities.GetSigner("SHA256withECDSA");

            Org.BouncyCastle.Asn1.X9.X9ECParameters curve;
            switch (phaCurve)
            {
            case Phantasma.Cryptography.ECC.ECDsaCurve.Secp256k1:
                curve = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256k1");
                break;

            default:
                curve = NistNamedCurves.GetByName("P-256");
                break;
            }
            var dom = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H);

            var point = dom.Curve.DecodePoint(pubkey);
            var publicKeyParameters = new ECPublicKeyParameters(point, dom);

            signer.Init(false, publicKeyParameters);
            signer.BlockUpdate(message, 0, message.Length);

            switch (signatureFormat)
            {
            case SignatureFormat.Concatenated:
                // We convert from concatenated "raw" R + S format to DER format that Bouncy Castle uses.
                signature = new Org.BouncyCastle.Asn1.DerSequence(
                    // first 32 bytes is "r" number
                    new Org.BouncyCastle.Asn1.DerInteger(new BigInteger(1, signature.Take(32).ToArray())),
                    // last 32 bytes is "s" number
                    new Org.BouncyCastle.Asn1.DerInteger(new BigInteger(1, signature.Skip(32).ToArray())))
                            .GetDerEncoded();
                break;

            case SignatureFormat.DEREncoded:
                // Do nothing, signature already DER-encoded.
                break;

            default:
                throw new Exception("Unknown signature format");
            }

            return(signer.VerifySignature(signature));
        }
Esempio n. 25
0
        public byte[] UpgradeSignature(byte[] signature, SignatureFormat signatureFormat, ReturnUpdatedSignatureType returnUpdateSignatureType,
                                       byte[] targetSignerCert = null, IEnumerable <DocumentBaseType> otherInputDocuments = null)
        {
            if (signature == null)
            {
                throw new ArgumentNullException("signature", "El valor no puede ser nulo.");
            }

            if (returnUpdateSignatureType == null)
            {
                throw new ArgumentNullException("returnUpdateSignatureType", "El valor no puede ser nulo.");
            }

            object document = GetDocument(signature, signatureFormat);

            ReturnUpdatedSignature returnUpdated = new ReturnUpdatedSignature();

            returnUpdated.Type = returnUpdateSignatureType.ResourceName;

            IgnoreGracePeriod igp = new IgnoreGracePeriod();

            DocumentType doc = new DocumentType();

            doc.ID   = "ID_DOCUMENTO";
            doc.Item = document;

            SignatureObject signatureObject = new SignatureObject();

            signatureObject.Item = new SignaturePtr()
            {
                WhichDocument = "ID_DOCUMENTO"
            };

            List <DocumentBaseType> documents = new List <DocumentBaseType>();

            documents.Add(doc);

            if (otherInputDocuments != null)
            {
                foreach (var inputDocument in otherInputDocuments)
                {
                    documents.Add(inputDocument);
                }
            }

            List <XmlElement> optionalInputs = new List <XmlElement>();

            optionalInputs.Add(GetXmlElement(igp));
            optionalInputs.Add(GetXmlElement(returnUpdated));

            if (targetSignerCert != null)
            {
                TargetSigner targetSigner = new TargetSigner();
                targetSigner.Value = targetSignerCert;

                optionalInputs.Add(GetXmlElement(targetSigner));
            }

            VerifyRequest request = BuildRequest(documents, signatureObject, optionalInputs);

            DSSAfirmaVerifyService ds = new DSSAfirmaVerifyService(_identity, _serverCert);

            string result = ds.verify(GetXmlElement(request).OuterXml);

            VerifyResponse response = DeserializeXml <VerifyResponse>(result);

            if (ResultType.Success.Equals(response.Result.ResultMajor))
            {
                XmlElement           updatedSignatureXmlElement = response.OptionalOutputs.Any.Single(e => e.LocalName == "UpdatedSignature");
                UpdatedSignatureType updatedSignatureType       = DeserializeXml <UpdatedSignatureType>(updatedSignatureXmlElement.OuterXml);

                if (updatedSignatureType.SignatureObject.Item.GetType() == typeof(SignaturePtr))
                {
                    SignaturePtr             signaturePtr     = updatedSignatureType.SignatureObject.Item as SignaturePtr;
                    DocumentWithSignature    docWithSignature = null;
                    IEnumerable <XmlElement> documentWithSignatureXmlElements = response.OptionalOutputs.Any.Where(e => e.LocalName == "DocumentWithSignature");
                    foreach (var item in documentWithSignatureXmlElements)
                    {
                        docWithSignature = DeserializeXml <DocumentWithSignature>(item.OuterXml);

                        if (docWithSignature.Document.ID == signaturePtr.WhichDocument)
                        {
                            return(docWithSignature.Document.Item as byte[]);
                        }
                    }

                    throw new Exception("No se ha encontrado el documento de firma");
                }
                else if (updatedSignatureType.SignatureObject.Item.GetType() == typeof(Base64Signature))
                {
                    Base64Signature b64Signature = updatedSignatureType.SignatureObject.Item as Base64Signature;

                    return(b64Signature.Value);
                }
                else
                {
                    throw new Exception("Tipo de resultado no soportado");
                }
            }
            else
            {
                throw new AfirmaResultException(response.Result.ResultMajor, response.Result.ResultMinor, response.Result.ResultMessage.Value);
            }
        }
Esempio n. 26
0
        public VerifyResponse VerifySignature(byte[] signature, SignatureFormat signatureFormat, bool includeDetails,
                                              IEnumerable <DocumentBaseType> otherInputDocuments = null)
        {
            if (signature == null)
            {
                throw new ArgumentNullException("signature", "El valor no puede ser nulo.");
            }

            object document = GetDocument(signature, signatureFormat);

            DocumentType doc = new DocumentType();

            doc.ID   = "ID_DOCUMENTO";
            doc.Item = document;

            SignatureObject signatureObject = new SignatureObject();

            signatureObject.Item = new SignaturePtr()
            {
                WhichDocument = "ID_DOCUMENTO"
            };

            List <DocumentBaseType> documents = new List <DocumentBaseType>();

            documents.Add(doc);

            if (otherInputDocuments != null)
            {
                foreach (var inputDocument in otherInputDocuments)
                {
                    documents.Add(inputDocument);
                }
            }

            IgnoreGracePeriod igp = new IgnoreGracePeriod();

            ReturnVerificationReport verificationReport = new ReturnVerificationReport();

            verificationReport.ReportOptions = new ReportOptionsType();
            if (includeDetails)
            {
                verificationReport.ReportOptions.ReportDetailLevel = "urn:oasis:names:tc:dss:1.0:reportdetail:allDetails";
            }
            else
            {
                verificationReport.ReportOptions.ReportDetailLevel = "urn:oasis:names:tc:dss:1.0:reportdetail:noDetails";
            }

            VerifyRequest request = BuildRequest(documents, signatureObject, new XmlElement[] { GetXmlElement(igp), GetXmlElement(verificationReport) });

            DSSAfirmaVerifyService ds = new DSSAfirmaVerifyService(_identity, _serverCert);

            string result = ds.verify(GetXmlElement(request).OuterXml);

            VerifyResponse response = DeserializeXml <VerifyResponse>(result);

            if (ResultType.RequesterError.Equals(response.Result.ResultMajor) ||
                ResultType.ResponderError.Equals(response.Result.ResultMajor))
            {
                throw new AfirmaResultException(response.Result.ResultMajor, response.Result.ResultMinor, response.Result.ResultMessage.Value);
            }

            return(response);
        }
Esempio n. 27
0
 /// <summary>
 /// 修改用户资料, (管理员接口)
 /// </summary>
 /// <returns></returns>
 public abstract bool AdminUpdateUserProfile(int userID, string realname, string email, Gender gender, DateTime birthday, bool isActive, bool emailValidated, string signature, SignatureFormat signatureFormat, UserExtendedValueCollection extendedFields);
Esempio n. 28
0
        private static IReadOnlyList <string> ParseArgumentList(Tokenizer tokenizer, TokenType endToken, SignatureFormat signatureFormat)
        {
            List <string> args = new List <string>();

            do
            {
                bool hasArg = NextArgType(tokenizer, signatureFormat, endToken, out var argType);
                if (hasArg)
                {
                    args.Add(argType);
                    var t = tokenizer.Peek();

                    if (!t.HasValue)
                    {
                        throw new FormatException("Expected ')' found EOF");
                    }
                    if (t.Value.Kind == endToken)
                    {
                        return(args);
                    }
                    tokenizer.Expect(TokenType.Comma);
                }
                else
                {
                    return(args);
                }
            } while (true);
        }
Esempio n. 29
0
        public bool Verify(Hash256 hash, SignatureByte signature, Network network)
        {
            var data = SignatureEngine.FormatMessageForSigning(hash.Bytes, network);

            return(ECDSAKey.Verify(data, SignatureFormat.FromBytes(signature)));
        }