Example #1
0
        public void InvalidStreamArrayArguments_Throws()
        {
            using (DSA dsa = DSAFactory.Create(1024))
            {
                AssertExtensions.Throws <ArgumentNullException>("rgbHash", () => dsa.CreateSignature(null));

                AssertExtensions.Throws <ArgumentNullException>("data", () => dsa.SignData((byte[])null, HashAlgorithmName.SHA1));
                AssertExtensions.Throws <ArgumentNullException>("data", () => dsa.SignData(null, 0, 0, HashAlgorithmName.SHA1));

                AssertExtensions.Throws <ArgumentOutOfRangeException>("offset", () => dsa.SignData(new byte[1], -1, 0, HashAlgorithmName.SHA1));
                AssertExtensions.Throws <ArgumentOutOfRangeException>("offset", () => dsa.SignData(new byte[1], 2, 0, HashAlgorithmName.SHA1));

                AssertExtensions.Throws <ArgumentOutOfRangeException>("count", () => dsa.SignData(new byte[1], 0, -1, HashAlgorithmName.SHA1));
                AssertExtensions.Throws <ArgumentOutOfRangeException>("count", () => dsa.SignData(new byte[1], 0, 2, HashAlgorithmName.SHA1));

                AssertExtensions.Throws <ArgumentNullException>("data", () => dsa.VerifyData((byte[])null, null, HashAlgorithmName.SHA1));
                AssertExtensions.Throws <ArgumentNullException>("data", () => dsa.VerifyData(null, 0, 0, null, HashAlgorithmName.SHA1));

                AssertExtensions.Throws <ArgumentNullException>("signature", () => dsa.VerifyData(new byte[1], null, HashAlgorithmName.SHA1));

                AssertExtensions.Throws <ArgumentOutOfRangeException>("offset", () => dsa.VerifyData(new byte[1], -1, 0, new byte[1], HashAlgorithmName.SHA1));
                AssertExtensions.Throws <ArgumentOutOfRangeException>("offset", () => dsa.VerifyData(new byte[1], 2, 0, new byte[1], HashAlgorithmName.SHA1));

                AssertExtensions.Throws <ArgumentOutOfRangeException>("count", () => dsa.VerifyData(new byte[1], 0, -1, new byte[1], HashAlgorithmName.SHA1));
                AssertExtensions.Throws <ArgumentOutOfRangeException>("count", () => dsa.VerifyData(new byte[1], 0, 2, new byte[1], HashAlgorithmName.SHA1));
            }
        }
Example #2
0
        /// <summary>デジタル署名を作成する</summary>
        /// <param name="data">デジタル署名を行なう対象データ</param>
        /// <returns>対象データに対してデジタル署名したデジタル署名部分のデータ</returns>
        public virtual byte[] Sign(byte[] data)
        {
            AsymmetricAlgorithm aa = this.AsymmetricAlgorithm;

            // デジタル署名
            byte[] signedByte = null;

            if (aa is RSA)
            {
                // RSA
                RSA rsa = (RSA)aa;
#if NET45
                if (rsa is RSACryptoServiceProvider)
                {
                    signedByte = ((RSACryptoServiceProvider)rsa).SignData(data, this.HashAlgorithmString);
                }
                // NET45にRSACng、RSAOpenSsl等は無し。
#else
                signedByte = rsa.SignData(data, this.HashAlgorithmName, this.Padding);
#endif
            }
            else if (aa is DSA)
            {
                // DSA
                DSA dsa = (DSA)aa;
                signedByte = dsa.CreateSignature(data);
            }
            else
            {
                throw new NotImplementedException(PublicExceptionMessage.NOT_IMPLEMENTED);
            }

            return(signedByte);
        }
Example #3
0
        protected override void UseAfterDispose(DSA dsa, byte[] data, byte[] sig)
        {
            base.UseAfterDispose(dsa, data, sig);
            byte[] hash = new byte[20];

            Assert.Throws <ObjectDisposedException>(() => dsa.CreateSignature(hash));
            Assert.Throws <ObjectDisposedException>(() => dsa.VerifySignature(hash, sig));
        }
Example #4
0
        public override byte[] CreateSignature(byte[] rgbHash)
        {
            if (dsa == null)
            {
                throw new CryptographicUnexpectedOperationException(Locale.GetText("missing key"));
            }

            return(dsa.CreateSignature(rgbHash));
        }
Example #5
0
        public byte[] CreateSignature(ReadOnlySpan <byte> rgbHash, PgpHashAlgorithm hashAlgorithm)
        {
            byte[] ieeeSignature = dsa.CreateSignature(rgbHash.ToArray(), DSASignatureFormat.IeeeP1363FixedFieldConcatenation);
            var    r             = ieeeSignature.AsSpan(0, ieeeSignature.Length / 2);
            var    s             = ieeeSignature.AsSpan(ieeeSignature.Length / 2);

            byte[] pgpSignature = new byte[MPInteger.GetMPEncodedLength(r) + MPInteger.GetMPEncodedLength(s)];
            MPInteger.TryWriteInteger(r, pgpSignature, out int rWritten);
            MPInteger.TryWriteInteger(s, pgpSignature.AsSpan(rWritten), out int _);
            return(pgpSignature);
        }
Example #6
0
        public static string EnDSA(this string data, string publickey)
        {
            DSA dsa = DSA.Create();

            Byte[] result;
            dsa.FromXmlString(publickey);
            SHA1 sha1 = System.Security.Cryptography.SHA1.Create();

            result = dsa.CreateSignature(sha1.ComputeHash(Convert.FromBase64String(data)));
            return(Convert.ToBase64String(result));
        }
Example #7
0
        public static void DSADemo()
        {
            string keyString = "This is important...This is important...This is important..This is important";
            DSA    dsa       = DSA.Create();

            byte[] rgbHash = new byte[] { 59, 4, 248, 102, 77, 97, 142, 201, 210, 12, 224, 93, 25, 41, 100, 197, 213, 134, 130, 135 };

            byte[] rgbSignature = dsa.CreateSignature(rgbHash);

            bool result = dsa.VerifySignature(rgbHash, rgbSignature);

            byte[] data = Encoding.UTF8.GetBytes(keyString);
        }
        private void MakeDSA()
        {
            var hash = SHA1.Create().ComputeHash(this._message);
            DSA dsa  = DSACryptoServiceProvider.Create();

            this._stopwatch.Start();
            for (int i = 0; i < runs; i++)
            {
                _aux = dsa.CreateSignature(hash);
            }
            this._stopwatch.Stop();
            prettyPrint("DSA sign");

            this._stopwatch.Start();
            for (int i = 0; i < runs; i++)
            {
                dsa.VerifySignature(hash, _aux);
            }
            this._stopwatch.Stop();
            prettyPrint("DSA verify");
        }
Example #9
0
        public static void ExportAfterDispose(bool importKey)
        {
            DSA key = importKey ? DSAFactory.Create(DSATestData.GetDSA1024Params()) : DSAFactory.Create(1024);

            byte[] hash = new byte[20];

            // Ensure that the key got created, and then Dispose it.
            using (key)
            {
                try
                {
                    key.CreateSignature(hash);
                }
                catch (PlatformNotSupportedException) when(!SupportsKeyGeneration)
                {
                }
            }

            Assert.Throws <ObjectDisposedException>(() => key.ExportParameters(false));
            Assert.Throws <ObjectDisposedException>(() => key.ExportParameters(true));
            Assert.Throws <ObjectDisposedException>(() => key.ImportParameters(DSATestData.GetDSA1024Params()));
        }
Example #10
0
 public override byte[] CreateSignature(byte[] rgbHash) => _impl.CreateSignature(rgbHash);