SQL Server
SQL Server
Duplicate Java Verify RSA Signature
See more RSA Examples
Demonstrates how to duplicate a snippet of Java code that verifies an RSA signature.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This requires the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
-- This example duplicates the following Java code:
-- import com.sun.org.apache.xml.internal.security.utils.Base64;
-- import java.io.ByteArrayInputStream;
-- import java.security.PublicKey;
-- import java.security.Signature;
-- import java.security.cert.CertificateFactory;
-- import java.security.cert.X509Certificate;
-- public class validateSazetak {
-- public static void main(String[] args) {
-- String signatureAlgorithm = "SHA256withRSA";
-- String base64DataToBeSigned = "Hlp...LE4=";
-- String base64Certificate = "MII...TlQ==";
-- String base64Signature = "I00...pZA==";
-- try {
-- CertificateFactory cf;
-- X509Certificate certificate = null;
-- cf = CertificateFactory.getInstance("X.509");
-- certificate = (X509Certificate) cf.generateCertificate(new
-- ByteArrayInputStream(Base64.decode(base64Certificate)));
--
-- Signature signature = Signature.getInstance(signatureAlgorithm, "SunRsaSign");
-- PublicKey pk = (PublicKey) certificate.getPublicKey();
-- signature.initVerify(pk);
--
-- byte[] hashBytes = Base64.decode(base64DataToBeSigned);
-- signature.update(hashBytes);
--
-- byte[] sigBytes = Base64.decode(base64Signature);
-- boolean validity = signature.verify(sigBytes);
-- System.out.println("Is valid signature:" + validity);
-- } catch (Exception e) {
-- System.out.println(e);
-- }
-- }
DECLARE @base64DataToBeSigned nvarchar(4000)
SELECT @base64DataToBeSigned = 'Hlp...LE4='
DECLARE @base64Certificate nvarchar(4000)
SELECT @base64Certificate = 'MII...TlQ=='
DECLARE @base64Signature nvarchar(4000)
SELECT @base64Signature = 'I00...pZA=='
DECLARE @cert int
EXEC @hr = sp_OACreate 'Chilkat.Cert', @cert OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
EXEC sp_OAMethod @cert, 'LoadFromBase64', @success OUT, @base64Certificate
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @cert, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @cert
RETURN
END
DECLARE @rsa int
EXEC @hr = sp_OACreate 'Chilkat.Rsa', @rsa OUT
EXEC sp_OAMethod @rsa, 'SetX509Cert', @success OUT, @cert, 0
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @cert
EXEC @hr = sp_OADestroy @rsa
RETURN
END
EXEC sp_OASetProperty @rsa, 'EncodingMode', 'base64'
EXEC sp_OAMethod @rsa, 'VerifyStringENC', @success OUT, @base64DataToBeSigned, 'sha256', @base64Signature
IF @success = 0
BEGIN
EXEC sp_OAGetProperty @rsa, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @cert
EXEC @hr = sp_OADestroy @rsa
RETURN
END
PRINT 'Signature verified.'
EXEC @hr = sp_OADestroy @cert
EXEC @hr = sp_OADestroy @rsa
END
GO