コード例 #1
0
ファイル: KzRipeMD160.cs プロジェクト: TagsRocks/KzBsv
            protected void CopyIn(GeneralDigest t)
            {
                Array.Copy(t.xBuf, 0, xBuf, 0, t.xBuf.Length);

                xBufOff   = t.xBufOff;
                byteCount = t.byteCount;
            }
コード例 #2
0
ファイル: SesV4Container.cs プロジェクト: fendaq/OfdSharp
        /// <summary>
        /// 对待签名数据签名
        /// </summary>
        /// <param name="inData">在操作过程中请勿对流进行关闭</param>
        /// <param name="propertyInfo">签章属性信息</param>
        /// <returns></returns>
        public override byte[] Sign(Stream inData, string propertyInfo)
        {
            GeneralDigest md = GetDigest();

            byte[] input = inData.ToArray();
            md.BlockUpdate(input, 0, input.Length);
            byte[] output = new byte[32];
            md.DoFinal(output, 0);

            TbsSign tbsSign = new TbsSign
            {
                Version      = SesHeader.V4,
                EsSeal       = _seal,
                TimeInfo     = new DerGeneralizedTime(DateTime.Now),
                DataHash     = new DerBitString(output),
                PropertyInfo = new DerIA5String(propertyInfo)
            };
            ISigner signer = SignerUtilities.GetSigner(GMObjectIdentifiers.sm2sign_with_sm3);

            signer.Init(true, _privateKey);
            byte[] toSign = tbsSign.GetDerEncoded();
            signer.BlockUpdate(toSign, 0, toSign.Length);
            byte[] signed = signer.GenerateSignature();

            SesSignature sesSignature = new SesSignature(tbsSign, new DerOctetString(_certificate.GetEncoded()), GMObjectIdentifiers.sm2sign_with_sm3, new DerBitString(signed));

            return(sesSignature.GetDerEncoded());
        }
コード例 #3
0
        /// <summary>
        /// 对待签名数据签名
        /// </summary>
        /// <param name="inData">在操作过程中请勿对流进行关闭</param>
        /// <param name="propertyInfo">签章属性信息</param>
        /// <returns></returns>
        public override byte[] Sign(Stream inData, string propertyInfo)
        {
            //原文杂凑值计算
            GeneralDigest digest = GetDigest();

            byte[] block = inData.ToArray();
            digest.BlockUpdate(block, 0, block.Length);
            byte[] outBytes = new byte[32];
            digest.DoFinal(outBytes, 0);

            //计算杂凑值
            DerUtcTime signTime = new DerUtcTime(DateTime.Now);
            TbsSign    tbsSign  = new TbsSign
            {
                Version            = new DerInteger(1),
                EsSeal             = _seal,
                TimeInfo           = new DerBitString(signTime),
                DataHash           = new DerBitString(outBytes),
                PropertyInfo       = new DerIA5String(propertyInfo),
                Cert               = new DerOctetString(_certificate.GetEncoded()),
                SignatureAlgorithm = GetSignAlgOId()
            };
            ISigner signer = SignerUtilities.GetSigner(GMObjectIdentifiers.sm2sign_with_sm3);

            signer.Init(true, _privateKey);
            byte[] signBytes = tbsSign.GetDerEncoded();
            signer.BlockUpdate(signBytes, 0, signBytes.Length);
            byte[]       sign         = signer.GenerateSignature();
            SesSignature sesSignature = new SesSignature(tbsSign, new DerBitString(sign));

            return(sesSignature.GetDerEncoded());
        }
コード例 #4
0
ファイル: AddressUtil.cs プロジェクト: wtcoin/dotblock
        private static byte[] ComputeDigest(GeneralDigest digest, byte[] input)
        {
            digest.BlockUpdate(input, 0, input.Length);
            var output = new byte[digest.GetDigestSize()];

            digest.DoFinal(output, 0);
            return(output);
        }
コード例 #5
0
    internal GeneralDigest(GeneralDigest t)
    {
        xBuf = new byte[t.xBuf.Length];
        Array.Copy(t.xBuf, 0, xBuf, 0, t.xBuf.Length);

        xBufOff   = t.xBufOff;
        byteCount = t.byteCount;
    }
コード例 #6
0
 /// <summary>
 /// Hash email address using SHA-256 hashing algorithm.
 /// </summary>
 /// <param name="digest">Provides the algorithm for SHA-256.</param>
 /// <param name="email">The email address to hash.</param>
 /// <returns>Hash email address using SHA-256 hashing algorithm.</returns>
 private static String ToSha256String(GeneralDigest digest, String email)
 {
     byte[] data        = Encoding.UTF8.GetBytes(email);
     byte[] digestBytes = new byte[digest.GetDigestSize()];
     digest.BlockUpdate(data, 0, data.Length);
     digest.DoFinal(digestBytes, 0);
     return(BitConverter.ToString(digestBytes).Replace("-", string.Empty));
 }
コード例 #7
0
        private string GetDigestValue(GeneralDigest digest)
        {
            var buffer = new byte[digest.GetDigestSize()];

            digest.DoFinal(buffer, 0);

            return(Convert.ToBase64String(buffer));
        }
コード例 #8
0
        static public byte[] Digest(byte[] data, GeneralDigest digest)
        {
            var hashed = new byte[digest.GetDigestSize()];

            digest.BlockUpdate(data, 0, data.Length);
            digest.DoFinal(hashed, 0);
            return(hashed);
        }
コード例 #9
0
        /// <summary>
        /// Creates a human readable fingerprint for this certificate. This fingerprint may be
        /// compared by a user with an other certificate's fingerprint to proof their equality.
        /// </summary>
        protected static string CreateFingerprint(GeneralDigest a_digestGenerator, byte[] a_data)
        {
            var digestData = new byte[a_digestGenerator.GetDigestSize()];

            a_digestGenerator.BlockUpdate(a_data, 0, a_data.Length);
            a_digestGenerator.DoFinal(digestData, 0);
            return(string.Join(":", digestData.Select(x => x.ToString("X2"))));
        }
コード例 #10
0
        /// <summary>
        /// Hash a string value using SHA-256 hashing algorithm.
        /// </summary>
        /// <param name="digest">Provides the algorithm for SHA-256.</param>
        /// <param name="value">The string value (e.g. an email address) to hash.</param>
        /// <returns>The hashed value.</returns>
        private static String ToSha256String(GeneralDigest digest, String value)
        {
            byte[] data        = Encoding.UTF8.GetBytes(value);
            byte[] digestBytes = new byte[digest.GetDigestSize()];
            digest.BlockUpdate(data, 0, data.Length);
            digest.DoFinal(digestBytes, 0);

            // Convert the byte array into an unhyphenated hexadecimal string.
            return(BitConverter.ToString(digestBytes).Replace("-", string.Empty));
        }
コード例 #11
0
 private static byte[] HashIt(GeneralDigest hashAlgo, byte[] data, int offset = 0, int len = 0)
 {
     byte[] result;
     lock (hashAlgo)
     {
         hashAlgo.Reset();
         hashAlgo.BlockUpdate(data, offset, len == 0 ? data.Length - offset : len);
         result = new byte[hashAlgo.GetDigestSize()];
         hashAlgo.DoFinal(result, 0);
     }
     return(result);
 }
コード例 #12
0
        /// <summary>
        /// Initializes a new instance of the <see cref="HashingStreamEx"/> class.
        /// </summary>
        /// <param name="sBaseStream">
        /// The s base stream.
        /// </param>
        /// <param name="bWriting">
        /// The b writing.
        /// </param>
        /// <param name="hashAlgorithm">
        /// The hash algorithm.
        /// </param>
        /// <exception cref="ArgumentNullException">
        /// </exception>
        public HashingStreamEx(Stream sBaseStream, bool bWriting, GeneralDigest hashAlgorithm)
        {
            if (sBaseStream == null)
            {
                throw new ArgumentNullException("sBaseStream");
            }

            this.m_sBaseStream = sBaseStream;
            this.m_bWriting    = bWriting;

            this.m_hash = hashAlgorithm ?? new Sha256Digest();

            if (this.m_hash == null)
            {
                Debug.Assert(false);
            }
        }
コード例 #13
0
        /// <summary>
        /// The dispose.
        /// </summary>
        /// <param name="disposing">
        /// The disposing.
        /// </param>
        protected override void Dispose(bool disposing)
        {
            if (!disposing)
            {
                return;
            }

            if (this.m_hash != null)
            {
                try
                {
                    this.m_hash.DoFinal(this.m_pbFinalHash, 0);
                }
                catch (Exception e)
                {
                    //Debug.Assert(false);
                }

                this.m_hash = null;
            }

            this.m_sBaseStream.Dispose();
        }
コード例 #14
0
ファイル: KzRipeMD160.cs プロジェクト: TagsRocks/KzBsv
 internal GeneralDigest(GeneralDigest t)
 {
     xBuf = new byte[t.xBuf.Length];
     CopyIn(t);
 }
コード例 #15
0
 public void Set(GeneralDigest flag, byte[] value)
 {
     Buffer.BlockCopy(value, 0, Digests[flag], 0, 32);
     set_digests |= flag;
 }