public static ISigner GetSigner(AsymmetricSigningAlgorithm asymmetricSigningAlgorithm, IDigest hash, Error error) { if (error == null) { return(null); } if (hash == null) { error.setError("AE008", "Hash digest is null"); return(null); } ISigner sig = null; switch (asymmetricSigningAlgorithm) { case AsymmetricSigningAlgorithm.RSA: sig = new RsaDigestSigner(hash); break; case AsymmetricSigningAlgorithm.ECDSA: ECDsaSigner dsaSigner = new ECDsaSigner(); sig = new DsaDigestSigner(dsaSigner, hash); break; } return(sig); }
/********EXTERNAL OBJECT PUBLIC METHODS - END ********/ private String Sign(PrivateKey key, string hashAlgorithm, Stream input) { PrivateKeyManager keyMan = (PrivateKeyManager)key; if (keyMan.HasError()) { this.error = keyMan.GetError(); return(""); } AsymmetricSigningAlgorithm asymmetricSigningAlgorithm = AsymmetricSigningAlgorithmUtils .GetAsymmetricSigningAlgorithm(keyMan.getPrivateKeyAlgorithm(), this.error); if (this.HasError()) { return(""); } ISigner signer = AsymmetricSigningAlgorithmUtils.GetSigner(asymmetricSigningAlgorithm, GetHash(hashAlgorithm), this.error); if (this.HasError()) { return(""); } SetUpSigner(signer, input, keyMan.getPrivateKeyParameterForSigning(), true); if (this.HasError()) { return(""); } byte[] outputBytes = null; try { outputBytes = signer.GenerateSignature(); } catch (Exception e) { error.setError("AE01", e.Message); return(""); } String result = ""; try { result = Base64.ToBase64String(outputBytes); } catch (Exception e) { error.setError("AE018", e.Message); return(""); } return(result); }
/// <summary> /// Mapping between AsymmetricSigningAlgorithm enum representation and string name /// </summary> /// <param name="asymmetricSigningAlgorithm">AsymmetricSigningAlgorithm enum, algorithm name</param> /// <param name="error">Error type for error management</param> /// <returns>string value of the algorithm</returns> public static string ValueOf(AsymmetricSigningAlgorithm asymmetricSigningAlgorithm, Error error) { switch (asymmetricSigningAlgorithm) { case AsymmetricSigningAlgorithm.RSA: return("RSA"); case AsymmetricSigningAlgorithm.ECDSA: return("ECDSA"); default: error.setError("AE005", "Unrecognized AsymmetricSigningAlgorithm"); return(""); } }
private bool Verify(Certificate certificate, Stream input, string signature) { CertificateX509 cert = (CertificateX509)certificate; if (cert.HasError()) { this.error = cert.GetError(); return(false); } string hashAlgorithm = ""; if (SecurityUtils.compareStrings(cert.getPublicKeyHash(), "ECDSA")) { hashAlgorithm = "SHA1"; } else { hashAlgorithm = cert.getPublicKeyHash(); } AsymmetricSigningAlgorithm asymmetricSigningAlgorithm = AsymmetricSigningAlgorithmUtils .GetAsymmetricSigningAlgorithm(cert.getPublicKeyAlgorithm(), this.error); if (this.HasError()) { return(false); } ISigner signer = AsymmetricSigningAlgorithmUtils.GetSigner(asymmetricSigningAlgorithm, GetHash(hashAlgorithm), this.error); if (this.HasError()) { return(false); } SetUpSigner(signer, input, cert.getPublicKeyParameterForSigning(), false); if (this.HasError()) { return(false); } byte[] signatureBytes = null; try { signatureBytes = Base64.Decode(signature); } catch (Exception e) { error.setError("AE019", e.Message); return(false); } if (signatureBytes == null || signatureBytes.Length == 0) { this.error.setError("AE020", "Error reading signature"); return(false); } bool result = false; try { result = signer.VerifySignature(signatureBytes); } catch (Exception e) { error.setError("AE021", e.Message); return(false); } return(result); }