示例#1
0
        private IDigest GetShaDigest()
        {
            IDigest shaDigest = null;

            if (_shaBits == 1)
            {
                shaDigest = new Sha1Digest();
            }
            else if (_shaBits == 3)
            {
                shaDigest = new Sha3Digest();
            }
            else if (_shaBits == 224)
            {
                shaDigest = new Sha224Digest();
            }
            else if (_shaBits == 256)
            {
                shaDigest = new Sha256Digest();
            }
            else if (_shaBits == 384)
            {
                shaDigest = new Sha384Digest();
            }
            else
            {
                shaDigest = new Sha512Digest();
            }

            return(shaDigest);
        }
示例#2
0
        private void btnFirmaMasiva_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog fbd     = new FolderBrowserDialog();
            DialogResult        dresult = fbd.ShowDialog();

            if (dresult == DialogResult.OK)
            {
                foreach (string file in Directory.GetFiles(fbd.SelectedPath))
                {
                    FileInfo fInfo             = new FileInfo(file);
                    AsymmetricKeyParameter akp = ReadPrivateKey(lblFirma.Text);
                    Sha1Digest             dig = new Sha1Digest();
                    byte[] msgBytes            = File.ReadAllBytes(file);
                    dig.BlockUpdate(msgBytes, 0, msgBytes.Length);
                    byte[] result = new byte[dig.GetDigestSize()];
                    dig.DoFinal(result, 0);
                    Org.BouncyCastle.Crypto.Signers.RsaDigestSigner signer = new Org.BouncyCastle.Crypto.Signers.RsaDigestSigner(dig);
                    signer.Init(true, akp);
                    signer.BlockUpdate(result, 0, result.Length);
                    byte[] sig        = signer.GenerateSignature();
                    string signString = Convert.ToBase64String(sig);
                    string signPath   = string.Format("{0}{1}", fInfo.FullName, "sgn");
                    File.WriteAllText(signPath, signString, System.Text.Encoding.UTF8);
                }

                MessageBox.Show("Firma finalizada.");
            }
        }
示例#3
0
        public byte[] getLoadFileDataHash(String hash, bool includeDebug)
        {
            try
            {
                GeneralDigest digester;
                if (hash == "SHA-256")
                {
                    digester = new Sha256Digest();
                }
                if (hash == "SHA-1")
                {
                    digester = new Sha1Digest();
                }
                else
                {
                    throw new Exception("Unknown hash algorithm");
                }

                byte[] retValue = new byte[digester.GetDigestSize()];
                byte[] inpuVal  = getRawCode(includeDebug);
                digester.BlockUpdate(inpuVal, 0, inpuVal.Length);
                digester.DoFinal(retValue, 0);
                return(retValue);
            }
            catch (Exception e)
            {
                throw new Exception("Not possible", e);
            }
        }
示例#4
0
        public static SecureRandom GetInstance(
            string algorithm)
        {
            // TODO Compared to JDK, we don't auto-seed if the client forgets - problem?

            // TODO Support all digests more generally, by stripping PRNG and calling DigestUtilities?
            IDigest digest = null;

            switch (algorithm.ToUpper(CultureInfo.InvariantCulture))
            {
            case "SHA1PRNG":
                digest = new Sha1Digest();
                break;

            case "SHA256PRNG":
                digest = new Sha256Digest();
                break;
            }

            if (digest != null)
            {
                return(new SecureRandom(new DigestRandomGenerator(digest)));
            }

            throw new ArgumentException("Unrecognised PRNG algorithm: " + algorithm, "algorithm");
        }
 private static byte[] GetDigestInByteArray(
     FileInfo file,
     CancellationToken cancellationToken)
 {
     using (var readStream = file.OpenRead())
     {
         var digest = new Sha1Digest();
         var output = new byte[digest.GetDigestSize()];
         var buffer = new byte[BufferSizeInByte];
         int read;
         while ((read = readStream.Read(
                     buffer,
                     0,
                     buffer.Length)) > 0)
         {
             cancellationToken.ThrowIfCancellationRequested();
             digest.BlockUpdate(
                 buffer,
                 0,
                 read
                 );
         }
         digest.DoFinal(
             output,
             0
             );
         return(output);
     }
 }
示例#6
0
        public static bool DoVerifyDsaSha1(IEnumerable <BufLen> bufs, I2PSigningPublicKey key, I2PSignature signed)
        {
            if (!SupportedSignatureType(signed.Certificate.SignatureType))
            {
                throw new NotImplementedException();
            }

            var sha = new Sha1Digest();

            foreach (var buf in bufs)
            {
                sha.BlockUpdate(buf.BaseArray, buf.BaseArrayOffset, buf.Length);
            }
            var hash = new byte[sha.GetDigestSize()];

            sha.DoFinal(hash, 0);

            var dsa = new Org.BouncyCastle.Crypto.Signers.DsaSigner();

            var sigsize = signed.Certificate.SignatureLength;
            var r       = new BigInteger(1, signed.Sig.BaseArray, signed.Sig.BaseArrayOffset + 0, sigsize / 2);
            var s       = new BigInteger(1, signed.Sig.BaseArray, signed.Sig.BaseArrayOffset + sigsize / 2, sigsize / 2);

            var dsaparams =
                new DsaPublicKeyParameters(
                    key.ToBigInteger(),
                    new DsaParameters(
                        I2PConstants.DsaP,
                        I2PConstants.DsaQ,
                        I2PConstants.DsaG));

            dsa.Init(false, dsaparams);
            return(dsa.VerifySignature(hash, r, s));
        }
示例#7
0
        internal override ISigner GetSigner()
        {
            IDigest digest;

            if (Digest == Sha224Digest)
            {
                digest = new Sha224Digest();
            }
            else if (Digest == Sha256Digest)
            {
                digest = new Sha256Digest();
            }
            else if (Digest == Sha384Digest)
            {
                digest = new Sha384Digest();
            }
            else if (Digest == Sha512Digest)
            {
                digest = new Sha512Digest();
            }
            else if (Digest == Sha1Digest)
            {
                digest = new Sha1Digest();
            }
            else
            {
                throw new InvalidKeyTypeException(string.Format("Unknown digest type :{0}", Digest));
            }
            if (Padding == PssPadding)
            {
                return(new PssSigner(new RsaBlindedEngine(), digest));
            }
            throw new InvalidKeyTypeException(string.Format("Unknown padding type :{0}", Padding));
        }
示例#8
0
        public byte[] GetHash(Version version)
        {
            if (version == null)
            {
                throw new ArgumentNullException(nameof(version));
            }

            byte[] handshakeHash;
            if (version < DTLSRecord.Version1_2)
            {
                IDigest sha1 = new Sha1Digest(this._VerifyHandshakeSHA1);
                IDigest md5  = new MD5Digest(this._VerifyHandshakeMD5);
                handshakeHash = new byte[sha1.GetDigestSize() + md5.GetDigestSize()];
                md5.DoFinal(handshakeHash, 0);
                sha1.DoFinal(handshakeHash, md5.GetDigestSize());
            }
            else
            {
                IDigest hash = new Sha256Digest((Sha256Digest)this._VerifyHandshake);
                handshakeHash = new byte[hash.GetDigestSize()];
                hash.DoFinal(handshakeHash, 0);
            }

            return(handshakeHash);
        }
        /// <summary>
        /// Calculate the restore code for an authenticator. This is taken from the last 10 bytes of a digest of the serial and secret key,
        /// which is then specially encoded to alphanumerics.
        /// </summary>
        /// <returns>restore code for authenticator (always 10 chars)</returns>
        protected string BuildRestoreCode()
        {
            // return if not set
            if (string.IsNullOrEmpty(Serial) == true || SecretKey == null)
            {
                return(string.Empty);
            }

            // get byte array of serial
            byte[] serialdata = Encoding.UTF8.GetBytes(Serial.ToUpper().Replace("-", string.Empty));
            byte[] secretdata = SecretKey;

            // combine serial data and secret data
            byte[] combined = new byte[serialdata.Length + secretdata.Length];
            Array.Copy(serialdata, 0, combined, 0, serialdata.Length);
            Array.Copy(secretdata, 0, combined, serialdata.Length, secretdata.Length);

            // create digest of combined data
            IDigest digest = new Sha1Digest();

            digest.BlockUpdate(combined, 0, combined.Length);
            byte[] digestdata = new byte[digest.GetDigestSize()];
            digest.DoFinal(digestdata, 0);

            // take last 10 chars of hash and convert each byte to our encoded string that doesn't use I,L,O,S
            StringBuilder code     = new StringBuilder();
            int           startpos = digestdata.Length - 10;

            for (int i = 0; i < 10; i++)
            {
                code.Append(ConvertRestoreCodeByteToChar(digestdata[startpos + i]));
            }

            return(code.ToString());
        }
示例#10
0
        public override void PerformTest()
        {
            IDigest         d  = new Sha1Digest();
            ShortenedDigest sd = new ShortenedDigest(new Sha1Digest(), 10);

            if (sd.GetDigestSize() != 10)
            {
                Fail("size check wrong for SHA-1");
            }

            if (sd.GetByteLength() != d.GetByteLength())
            {
                Fail("byte length check wrong for SHA-1");
            }

            //
            // check output fits
            //
            sd.DoFinal(new byte[10], 0);

            d  = new Sha512Digest();
            sd = new ShortenedDigest(new Sha512Digest(), 20);

            if (sd.GetDigestSize() != 20)
            {
                Fail("size check wrong for SHA-512");
            }

            if (sd.GetByteLength() != d.GetByteLength())
            {
                Fail("byte length check wrong for SHA-512");
            }

            //
            // check output fits
            //
            sd.DoFinal(new byte[20], 0);

            try
            {
                new ShortenedDigest(null, 20);

                Fail("null parameter not caught");
            }
            catch (ArgumentException)
            {
                // expected
            }

            try
            {
                new ShortenedDigest(new Sha1Digest(), 50);

                Fail("short digest not caught");
            }
            catch (ArgumentException)
            {
                // expected
            }
        }
示例#11
0
        private static string FromStream_BOUNCY(Stream stream)
        {
            int BUFFER_SIZE = 5 * 1024 * 1024;

            byte[] buffer = new byte[BUFFER_SIZE];

            int        total_read = 0;
            int        num_read   = 0;
            Sha1Digest sha1       = new Sha1Digest();

            while (0 < (num_read = stream.Read(buffer, 0, BUFFER_SIZE)))
            {
                total_read += num_read;
                sha1.BlockUpdate(buffer, 0, num_read);
            }

            byte[] hash = new byte[sha1.GetDigestSize()];
            sha1.DoFinal(hash, 0);

            // Convert to string
            StringBuilder buff = new StringBuilder();

            foreach (byte hash_byte in hash)
            {
                buff.Append(String.Format("{0:X1}", hash_byte));
            }

            return(buff.ToString());
        }
示例#12
0
 private static async Task <byte[]> GetDigestInByteArrayAsync(
     FileInfo file,
     CancellationToken cancellationToken)
 {
     using (var readStream = file.OpenRead())
     {
         var digest = new Sha1Digest();
         var output = new byte[digest.GetDigestSize()];
         var buffer = new byte[BufferSizeInByte];
         int read;
         while ((read = await readStream.ReadAsync(
                     buffer,
                     0,
                     buffer.Length,
                     cancellationToken).ConfigureAwait(false)) > 0)
         {
             cancellationToken.ThrowIfCancellationRequested();
             digest.BlockUpdate(
                 buffer,
                 0,
                 read
                 );
         }
         digest.DoFinal(
             output,
             0
             );
         return(output);
     }
 }
示例#13
0
        /// <summary>
        /// Returns implementation of specified digest algorithm
        /// </summary>
        /// <param name="algorithm">Digest algorithm</param>
        /// <returns>Implementation of specified digest algorithm</returns>
        private static IDigest GetHashGenerator(DigestAlgorithm algorithm)
        {
            IDigest digest;

            switch (algorithm)
            {
            default:
                throw new NotSupportedException("Unsupported hash algorithm");

            case DigestAlgorithm.SHA1:
                digest = new Sha1Digest();
                break;

            case DigestAlgorithm.SHA256:
                digest = new Sha256Digest();
                break;

            case DigestAlgorithm.SHA384:
                digest = new Sha384Digest();
                break;

            case DigestAlgorithm.SHA512:
                digest = new Sha512Digest(); break;
            }

            return(digest);
        }
示例#14
0
        internal byte[] GetNSec3Hash(NSec3HashAlgorithm algorithm, int iterations, byte[] salt)
        {
            IDigest digest;

            switch (algorithm)
            {
            case NSec3HashAlgorithm.Sha1:
                digest = new Sha1Digest();
                break;

            default:
                throw new NotSupportedException();
            }

            byte[] buffer = new byte[Math.Max(MaximumRecordDataLength + 1, digest.GetDigestSize()) + salt.Length];

            int length = 0;

            DnsMessageBase.EncodeDomainName(buffer, 0, ref length, this, null, true);

            for (int i = 0; i <= iterations; i++)
            {
                DnsMessageBase.EncodeByteArray(buffer, ref length, salt);

                digest.BlockUpdate(buffer, 0, length);

                digest.DoFinal(buffer, 0);
                length = digest.GetDigestSize();
            }

            byte[] res = new byte[length];
            Buffer.BlockCopy(buffer, 0, res, 0, length);

            return(res);
        }
示例#15
0
        public static string CreateAccept(string key)
        {
            var challenge        = Encoding.ASCII.GetBytes(key + Consts.ServerMagicGuid);
            var hash             = Sha1Digest.ComputeHash(challenge);
            var calculatedAccept = Convert.ToBase64String(hash);

            return(calculatedAccept);
        }
        public static byte[] SHA1(byte[] data, int offset, int count)
        {
            var sha1 = new Sha1Digest();

            sha1.BlockUpdate(data, offset, count);
            byte[] rv = new byte[20];
            sha1.DoFinal(rv, 0);
            return(rv);
        }
示例#17
0
        private byte[] ComputeHash(byte[] input)
        {
            var sha = new Sha1Digest();

            sha.BlockUpdate(input, 0, input.Length);
            byte[] result = new byte[sha.GetDigestSize()];
            sha.DoFinal(result, 0);
            return(result);
        }
示例#18
0
        static byte[] Sha1(byte[] dat)
        {
            Sha1Digest digester = new Sha1Digest();

            byte[] retValue = new byte[digester.GetDigestSize()];
            digester.BlockUpdate(dat, 0, dat.Length);
            digester.DoFinal(retValue, 0);
            return(retValue);
        }
示例#19
0
        private string ExecuteHash()
        {
            IDigest hash;

            switch (this.HashFunctionComboBox.Text)
            {
            case "Blake2b - 256 bit":
                hash = new Blake2bDigest(256);
                break;

            case "Blake2b - 512 bit":
                hash = new Blake2bDigest(512);
                break;

            case "SHA-1":
                hash = new Sha1Digest();
                break;

            case "SHA-2 256 bit":
                hash = new Sha256Digest();
                break;

            case "SHA-2 512 bit":
                hash = new Sha512Digest();
                break;

            case "SHA-3 256 bit":
                hash = new Sha3Digest(256);
                break;

            case "SHA-3 512 bit":
                hash = new Sha3Digest(512);
                break;

            default:
                hash = new Sha1Digest();
                break;
            }

            byte[] result = new byte[hash.GetDigestSize()];

            using (Stream source = File.OpenRead(this.LocationTextBox.Text))
            {
                int BytesRead;
                while ((BytesRead = source.Read(this._Data, 0, this._Data.Length)) > 0)
                {
                    hash.BlockUpdate(this._Data, 0, BytesRead);
                }
            }

            hash.DoFinal(result, 0);

            Array.Clear(this._Data, 0, this._Data.Length);

            return(Entities.HashFunctionList.ByteArrayToHexString(result));
        }
示例#20
0
        public virtual void DoTest12()
        {
            BigInteger       mod            = new BigInteger("B3ABE6D91A4020920F8B3847764ECB34C4EB64151A96FDE7B614DC986C810FF2FD73575BDF8532C06004C8B4C8B64F700A50AEC68C0701ED10E8D211A4EA554D", 16);
            BigInteger       pubExp         = new BigInteger("65537", 10);
            BigInteger       priExp         = new BigInteger("AEE76AE4716F77C5782838F328327012C097BD67E5E892E75C1356E372CCF8EE1AA2D2CBDFB4DA19F703743F7C0BA42B2D69202BA7338C294D1F8B6A5771FF41", 16);
            RsaKeyParameters pubParameters  = new RsaKeyParameters(false, mod, pubExp);
            RsaKeyParameters privParameters = new RsaKeyParameters(true, mod, priExp);
            RsaEngine        rsa            = new RsaEngine();

            byte[] data;
            byte[] m1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
            byte[] m2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
            byte[] m3 = { 1, 2, 3, 4, 5, 6, 7, 8 };

            //
            // ISO 9796-2 - Regular Signing
            //
            IDigest         dig = new Sha1Digest();
            Iso9796d2Signer eng = new Iso9796d2Signer(rsa, dig);

            //
            // check message bounds
            //
            eng.Init(true, privParameters);

            eng.BlockUpdate(m1, 0, m1.Length);

            data = eng.GenerateSignature();

            eng.Init(false, pubParameters);

            eng.BlockUpdate(m2, 0, m2.Length);

            if (eng.VerifySignature(data))
            {
                Fail("failed ISO9796-2 m2 verify Test 12");
            }

            eng.Init(false, pubParameters);

            eng.BlockUpdate(m3, 0, m3.Length);

            if (eng.VerifySignature(data))
            {
                Fail("failed ISO9796-2 m3 verify Test 12");
            }

            eng.Init(false, pubParameters);

            eng.BlockUpdate(m1, 0, m1.Length);

            if (!eng.VerifySignature(data))
            {
                Fail("failed ISO9796-2 verify Test 12");
            }
        }
示例#21
0
        private void btnDigest_Click2(object sender, EventArgs e)
        {
            Sha1Digest dig = new Sha1Digest();

            byte[] msgBytes = File.ReadAllBytes(lblDocument.Text);
            dig.BlockUpdate(msgBytes, 0, msgBytes.Length);
            byte[] result = new byte[dig.GetDigestSize()];
            dig.DoFinal(result, 0);
            textBox1.Text = Convert.ToBase64String(result);
        }
示例#22
0
        public static string ComputeHash(string input)
        {
            var        data = Encoding.UTF8.GetBytes(input);
            Sha1Digest hash = new Sha1Digest();

            hash.BlockUpdate(data, 0, data.Length);
            byte[] result = new byte[hash.GetDigestSize()];
            hash.DoFinal(result, 0);
            return(Convert.ToBase64String(result));
        }
示例#23
0
        /// <summary>
        /// Compute the Hash of <paramref name="data"/> using the SHA-1 algorithm.
        /// </summary>
        /// <remarks>The approved algorithm for hashing is SHA-1 as specified in ISO/IEC 10118-3 [5].</remarks>
        /// <param name="data">Data to hash.</param>
        /// <returns>Hash value.</returns>
        public static byte[] ComputeHashSha1(this byte[] data)
        {
            IDigest sha1 = new Sha1Digest();
            var     h    = new byte[sha1.GetDigestSize()];

            sha1.BlockUpdate(data, 0, data.Length);
            sha1.DoFinal(h, 0);

            return(h);
        }
示例#24
0
        static Asn1OctetString CreateDigestFromBytes(byte[] bytes)
        {
            var digest = new Sha1Digest();

            digest.BlockUpdate(bytes, 0, bytes.Length);
            var digestBytes = new byte[digest.GetDigestSize()];

            digest.DoFinal(digestBytes, 0);
            return(new DerOctetString(digestBytes));
        }
示例#25
0
        public AuthorityKeyIdentifier(SubjectPublicKeyInfo spki)
        {
            IDigest digest = new Sha1Digest();

            byte[] array = new byte[digest.GetDigestSize()];
            byte[] bytes = spki.PublicKeyData.GetBytes();
            digest.BlockUpdate(bytes, 0, bytes.Length);
            digest.DoFinal(array, 0);
            keyidentifier = new DerOctetString(array);
        }
        private static byte[] GetDigest(SubjectPublicKeyInfo spki)
        {
            IDigest digest = new Sha1Digest();

            byte[] array = new byte[digest.GetDigestSize()];
            byte[] bytes = spki.PublicKeyData.GetBytes();
            digest.BlockUpdate(bytes, 0, bytes.Length);
            digest.DoFinal(array, 0);
            return(array);
        }
示例#27
0
        /// <summary>
        /// sha1算签名, 代付回调验签
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string ComputeSha1(string text)
        {
            Sha1Digest sha1Digest = new Sha1Digest();
            var        retValue   = new byte[sha1Digest.GetDigestSize()];
            var        bs         = Encoding.UTF8.GetBytes(text);

            sha1Digest.BlockUpdate(bs, 0, bs.Length);
            sha1Digest.DoFinal(retValue, 0);
            return(BitConverter.ToString(retValue).Replace("-", ""));
        }
        public static string Sha1(string input)
        {
            var        data = System.Text.Encoding.UTF8.GetBytes(input);
            Sha1Digest hash = new Sha1Digest();

            hash.BlockUpdate(data, 0, data.Length);
            byte[] result = new byte[hash.GetDigestSize()];
            hash.DoFinal(result, 0);
            return(Hex.ToHexString(result));
        }
            public override void HandlePacket(WorldClient client, ServerPacket packet)
            {
                var reader = packet.Reader;

                int returnCode = reader.ReadInt32();

                if (returnCode != 0)
                {
                    Log.Error($"WS2GC_ANS_DISTRICT_ENTER response had invalid return code {returnCode}");
                    client.OnDistrictEnterFailed(client, returnCode);
                    return;
                }

                var data = new DistrictEnterInfo()
                {
                    ReturnCode = returnCode,
                    DistrictServerIpAddress = new IPAddress(reader.ReadBytes(4)),
                    DistrictServerPort      = reader.ReadUInt16(),
                    Timestamp = reader.ReadUInt64(),
                };

                // Calculate the hash used in the UDP handshake
                var timestampBytes = BitConverter.GetBytes(data.Timestamp);
                var sha1           = new Sha1Digest();

                sha1.BlockUpdate(client._encryptionKey, 0, client._encryptionKey.Length);
                sha1.BlockUpdate(timestampBytes, 0, timestampBytes.Length);
                var handshakeHash = new byte[sha1.GetDigestSize()];

                sha1.DoFinal(handshakeHash, 0);

                data.HandshakeHash = handshakeHash;

                // Calculate the encryption key used for UDP packets
                sha1 = new Sha1Digest();
                sha1.BlockUpdate(client._encryptionKey, 0, client._encryptionKey.Length);
                sha1.BlockUpdate(handshakeHash, 0, handshakeHash.Length);
                var encryptionHash = new byte[sha1.GetDigestSize()];

                sha1.DoFinal(encryptionHash, 0);
                var encryptionKey = new byte[16];

                Buffer.BlockCopy(encryptionHash, 0, encryptionKey, 0, 16);

                data.XXTEAKey = encryptionKey;

                Log.Debug($"m_nReturnCode = {returnCode}");
                Log.Debug($"m_nDistrictServerIPAddress = {data.DistrictServerIpAddress}");
                Log.Debug($"m_nDistrictServerPort = {data.DistrictServerPort}");
                Log.Debug($"m_nTimestamp = {data.Timestamp}");
                Log.Debug($"m_bHandshakeHash = {Util.ByteToHexBitFiddle(data.HandshakeHash)}");
                Log.Debug($"m_bXXTEAKey = {Util.ByteToHexBitFiddle(data.XXTEAKey)}");

                client.OnDistrictEnterSuccess(client, data);
            }
        // currently useless, just keep api same, again
        public static Span <byte> HKDF(int keylen, Span <byte> master, Span <byte> salt, Span <byte> info)
        {
            byte[]             ret        = new byte[keylen];
            IDigest            degist     = new Sha1Digest();
            HkdfParameters     parameters = new HkdfParameters(master.ToArray(), salt.ToArray(), info.ToArray());
            HkdfBytesGenerator hkdf       = new HkdfBytesGenerator(degist);

            hkdf.Init(parameters);
            hkdf.GenerateBytes(ret, 0, keylen);
            return(ret.AsSpan());
        }