Transforms raw data using an RSA public key.
VB6/VBA
Debug.Print "Testing RSA_RawPublic ..." Dim sEncDataHex As String Dim abData() As Byte Dim nDataLen As Long Dim strCertFile As String Dim nKeyLen As Long Dim strPublicKey As String Dim nRet As Long ' Cut and paste from DUMPASN1 output sEncDataHex = "2F 23 82 D2 F3 09 5F B8 0C 58 EB 4E" & _ "9D BF 89 9A 81 E5 75 C4 91 3D D3 D0" & _ "D5 7B B6 D5 FE 94 A1 8A AC E3 C4 84" & _ "F5 CD 60 4E 27 95 F6 CF 00 86 76 75" & _ "3F 2B F0 E7 D4 02 67 A7 F5 C7 8D 16" & _ "04 A5 B3 B5 E7 D9 32 F0 24 EF E7 20" & _ "44 D5 9F 07 C5 53 24 FA CE 01 1D 0F" & _ "17 13 A7 2A 95 9D 2B E4 03 95 14 0B" & _ "E9 39 0D BA CE 6E 9C 9E 0C E8 98 E6" & _ "55 13 D4 68 6F D0 07 D7 A2 B1 62 4C" & _ "E3 8F AF FD E0 D5 5D C7" ' Convert to bytes abData = cnvBytesFromHexStr(sEncDataHex) ' Check Debug.Print cnvHexStrFromBytes(abData) strCertFile = "AliceRSASignByCarl.cer" ' Read in PublicKey as base64 string - pre-dimension first nKeyLen = RSA_GetPublicKeyFromCert("", 0, strCertFile, 0) Debug.Print "KeyLen = " & nKeyLen If nKeyLen <= 0 Then Debug.Print pkiGetLastError() MsgBox "Unable to retrieve private key" Exit Sub End If ' Pre-dimension the string to receive data strPublicKey = String(nKeyLen, " ") ' Read in the Key nRet = RSA_GetPublicKeyFromCert(strPublicKey, nKeyLen, strCertFile, 0) Debug.Print "PubKey length= " & RSA_KeyBits(strPublicKey) & " bits" ' Verify using the public key nDataLen = UBound(abData) + 1 Debug.Print "Input: " & cnvHexStrFromBytes(abData) nRet = RSA_RawPublic(abData(0), nDataLen, strPublicKey, 0) Debug.Print "Output: " & cnvHexStrFromBytes(abData)
Output
Testing RSA_RawPublic ... 2F2382D2F3095FB80C58EB4E9DBF899A81E575C4913DD3D0D57BB6D5FE94A18AACE3C484F5CD604E2795F6CF008676753F2BF0E7D40267A7F5C78D1604A5B3B5E7D932F024EFE72044D59F07C55324FACE011D0F1713A72A959D2BE40395140BE9390DBACE6E9C9E0CE898E65513D4686FD007D7A2B1624CE38FAFFDE0D55DC7 KeyLen = 220 PubKey length= 1024 bits Input: 2F2382D2F3095FB80C58EB4E9DBF899A81E575C4913DD3D0D57BB6D5FE94A18AACE3C484F5CD604E2795F6CF008676753F2BF0E7D40267A7F5C78D1604A5B3B5E7D932F024EFE72044D59F07C55324FACE011D0F1713A72A959D2BE40395140BE9390DBACE6E9C9E0CE898E65513D4686FD007D7A2B1624CE38FAFFDE0D55DC7 Output: 0001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF003021300906052B0E03021A05000414406AEC085279BA6E16022D9E0629C0229687DD48
VB.NET
Console.WriteLine("Testing RSA_RawPublic ...")
Dim sEncDataHex As String
Dim abData() As Byte
Dim strCertFile As String
Dim sbPublicKey As StringBuilder
' Cut and paste from DUMPASN1 output
sEncDataHex = "2F 23 82 D2 F3 09 5F B8 0C 58 EB 4E" & _
"9D BF 89 9A 81 E5 75 C4 91 3D D3 D0" & _
"D5 7B B6 D5 FE 94 A1 8A AC E3 C4 84" & _
"F5 CD 60 4E 27 95 F6 CF 00 86 76 75" & _
"3F 2B F0 E7 D4 02 67 A7 F5 C7 8D 16" & _
"04 A5 B3 B5 E7 D9 32 F0 24 EF E7 20" & _
"44 D5 9F 07 C5 53 24 FA CE 01 1D 0F" & _
"17 13 A7 2A 95 9D 2B E4 03 95 14 0B" & _
"E9 39 0D BA CE 6E 9C 9E 0C E8 98 E6" & _
"55 13 D4 68 6F D0 07 D7 A2 B1 62 4C" & _
"E3 8F AF FD E0 D5 5D C7"
' Convert to bytes
abData = Cnv.FromHex(sEncDataHex)
' Check
Console.WriteLine(Cnv.ToHex(abData))
strCertFile = "AliceRSASignByCarl.cer"
' Read in PublicKey as base64 string - pre-dimension first
sbPublicKey = Rsa.GetPublicKeyFromCert(strCertFile)
Console.WriteLine("IntKeyLen = " & sbPublicKey.Length)
If sbPublicKey.Length = 0 Then
Console.WriteLine(General.LastError())
Console.WriteLine("Unable to retrieve private key")
Exit Sub
End If
Console.WriteLine("PubKey length= " & Rsa.KeyBits(sbPublicKey.ToString()) & " bits")
' Verify using the public key
Console.WriteLine("Input: " & Cnv.ToHex(abData))
abData = Rsa.RawPublic(abData, sbPublicKey.ToString())
Console.WriteLine("Output: " & Cnv.ToHex(abData))
[Contents]