Ejemplo n.º 1
0
    public void VerifySignature(byte[] data, byte[] signature, byte[] pubKey)
    {
        _signAlgorithm.ImportSubjectPublicKeyInfo(pubKey.AsSpan(), out int bytesRead);
        bool success = _signAlgorithm.VerifyData(data, signature, HashAlgorithmName.SHA512);

        _logger.LogInformation($"Signature is ok: {success}");
    }
Ejemplo n.º 2
0
        private bool Verify_Message(pbft_message Message)
        {
            bool Signature_Match = false;
            var  data            = Encoding.UTF8.GetBytes(Message.ToString());

            using (ECDsa Ecc = ECDsa.Create())
            {
                int bytes2;
                Ecc.ImportSubjectPublicKeyInfo(Message.id, out bytes2);
                Signature_Match = Ecc.VerifyData(data, Message.digest, HashAlgorithmName.SHA256);
            }
            return(Signature_Match);
        }
Ejemplo n.º 3
0
        public static X509Certificate2 generateSelfSignedCertificate(string keyId, string subjectDN, Func <List <string>, string> selector)
        {
            string signingAlgorithm = null;

            using (var kmsClient = new AmazonKeyManagementServiceClient())
            {
                GetPublicKeyRequest getPublicKeyRequest = new GetPublicKeyRequest()
                {
                    KeyId = keyId
                };
                GetPublicKeyResponse getPublicKeyResponse = kmsClient.GetPublicKeyAsync(getPublicKeyRequest).Result;
                List <string>        signingAlgorithms    = getPublicKeyResponse.SigningAlgorithms;
                signingAlgorithm = selector.Invoke(signingAlgorithms);
                byte[] spkiBytes = getPublicKeyResponse.PublicKey.ToArray();

                CertificateRequest     certificateRequest = null;
                X509SignatureGenerator simpleGenerator    = null;
                string keySpecString = getPublicKeyResponse.CustomerMasterKeySpec.ToString();
                if (keySpecString.StartsWith("ECC"))
                {
                    ECDsa ecdsa     = ECDsa.Create();
                    int   bytesRead = 0;
                    ecdsa.ImportSubjectPublicKeyInfo(new ReadOnlySpan <byte>(spkiBytes), out bytesRead);
                    certificateRequest = new CertificateRequest(subjectDN, ecdsa, getHashAlgorithmName(signingAlgorithm));
                    simpleGenerator    = X509SignatureGenerator.CreateForECDsa(ecdsa);
                }
                else if (keySpecString.StartsWith("RSA"))
                {
                    RSA rsa       = RSA.Create();
                    int bytesRead = 0;
                    rsa.ImportSubjectPublicKeyInfo(new ReadOnlySpan <byte>(spkiBytes), out bytesRead);
                    RSASignaturePadding rsaSignaturePadding = getSignaturePadding(signingAlgorithm);
                    certificateRequest = new CertificateRequest(subjectDN, rsa, getHashAlgorithmName(signingAlgorithm), rsaSignaturePadding);
                    simpleGenerator    = X509SignatureGenerator.CreateForRSA(rsa, rsaSignaturePadding);
                }
                else
                {
                    throw new ArgumentException("Cannot determine encryption algorithm for " + keySpecString, nameof(keyId));
                }

                X509SignatureGenerator generator   = new SignatureGenerator(keyId, signingAlgorithm, simpleGenerator);
                X509Certificate2       certificate = certificateRequest.Create(new X500DistinguishedName(subjectDN), generator, System.DateTimeOffset.Now, System.DateTimeOffset.Now.AddYears(2), new byte[] { 17 });
                return(certificate);
            }
        }
Ejemplo n.º 4
0
        public ECDsa?GetECDsaPublicKey()
        {
            if (_oid.Value != Oids.EcPublicKey)
            {
                return(null);
            }

            ECDsa ecdsa = ECDsa.Create();

            try
            {
                ecdsa.ImportSubjectPublicKeyInfo(ExportSubjectPublicKeyInfo(), out _);
                return(ecdsa);
            }
            catch
            {
                ecdsa.Dispose();
                throw;
            }
        }
Ejemplo n.º 5
0
        public void Initialize_key_Pair()
        {
            if (File.Exists("Keys/PUBkey.txt"))
            {
                Console.WriteLine("retreiving keys");
                using (FileStream fspub = File.OpenRead("Keys/PUBkey.txt"))
                    using (FileStream fsprv = File.OpenRead("Keys/PRVkey.txt"))
                    {
                        PublicKey   = new byte[fspub.Length];
                        private_key = new byte[fsprv.Length];

                        fspub.Read(PublicKey, 0, PublicKey.Length);
                        fsprv.Read(PrivateKey, 0, PrivateKey.Length);

                        //import the keys to the current ECDSA object
                        int         bytes, bytes2 = 0;
                        Span <byte> imported_prv_key = new Span <byte>(PrivateKey);
                        Span <byte> imported_pub_key = new Span <byte>(PublicKey);

                        Ecc.ImportECPrivateKey(imported_prv_key, out bytes);
                        Ecc.ImportSubjectPublicKeyInfo(imported_pub_key, out bytes2);
                    }
            }
            else
            {
                Console.WriteLine("creating new keys");

                using (FileStream fspub = File.Create("Keys/PUBkey.txt"))
                    using (FileStream fsprv = File.Create("Keys/PRVkey.txt"))
                    {
                        PublicKey   = Ecc.ExportSubjectPublicKeyInfo();
                        private_key = Ecc.ExportECPrivateKey();
                        fspub.Write(PublicKey, 0, PublicKey.Length);
                        fsprv.Write(PrivateKey, 0, PrivateKey.Length);
                    }
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Creates a new PublicIdentity from the given information.
 /// </summary>
 public PublicIdentity(byte[] publicIdentityInfo)
 {
     publicKey.ImportSubjectPublicKeyInfo(publicIdentityInfo, out _);
     ID = IDFromPublicInformation(publicIdentityInfo);
 }