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}"); }
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); }
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); } }
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; } }
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); } } }
/// <summary> /// Creates a new PublicIdentity from the given information. /// </summary> public PublicIdentity(byte[] publicIdentityInfo) { publicKey.ImportSubjectPublicKeyInfo(publicIdentityInfo, out _); ID = IDFromPublicInformation(publicIdentityInfo); }