[Mono-list] How to set parameters for RSACryptoServiceProvider
   
    Goran Milenkovic
     
    GMilenkovic@mindport.com
       
    Mon, 3 Nov 2003 14:56:13 +0100
    
    
  
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_001_01C3A212.3E834BA8
Content-Type: text/plain
The following VB.NET example should generate the new key pair, store
generated values localy, then encrypt the test string using public key and
decrypt it using private key. However, it works only if all parameters
(P,Q,DP,DQ,InverseQ & D) are given for the decryption, but not if only D is
given. That means that for simple decryption private key is not enough, but
also all of the other parameters ?? 
If you change boolean value OnlyD to True, assuming that only D should be
enough for decryption, then it works. Otherwise, an exception occurs ("Bad
Key"). Is there any solution for this ?
 
'-----------------------------
Dim OnlyD As Boolean = False
Dim TestResult1() As Byte
Dim TestResult2() As Byte
'---Generate the key pair and export all of it's parameters into the
RSAParams1
Dim RSAParams1 As RSAParameters = New RSAParameters
Dim RSAObj1 As RSACryptoServiceProvider = New RSACryptoServiceProvider
RSAParams1 = RSAObj1.ExportParameters(True)
'---Get all parameters into local variables
Dim myModulus As Byte() = RSAParams1.Modulus
Dim myExponent As Byte() = RSAParams1.Exponent
Dim myPrivateKey As Byte() = RSAParams1.D
Dim myP As Byte() = RSAParams1.P
Dim myQ As Byte() = RSAParams1.Q
Dim myDP As Byte() = RSAParams1.DP
Dim myDQ As Byte() = RSAParams1.DQ
Dim myIQ As Byte() = RSAParams1.InverseQ
'---Create new RSACryproProvider
Dim RSAParams2 As RSAParameters = New RSAParameters
Dim RSAObj2 As RSACryptoServiceProvider = New RSACryptoServiceProvider
'---Set the public key
RSAParams2.Modulus = myModulus
RSAParams2.Exponent = myExponent
RSAObj2.ImportParameters(RSAParams2)
'---Encrypt with public key
TestResult1 = RSAObj2.Encrypt(Encoding.ASCII.GetBytes("TEST"), False)
MsgBox("Encrypted")
'---Now set the private key
RSAParams2.D = myPrivateKey
If (Not OnlyD) Then
    RSAParams2.P = myP
    RSAParams2.Q = myQ
    RSAParams2.DP = myDP
    RSAParams2.DQ = myDQ
    RSAParams2.InverseQ = myIQ
End If
RSAObj2.ImportParameters(RSAParams2)
'---Decrypt with private key
TestResult2 = RSAObj2.Decrypt(TestResult1, False)
MsgBox("Decrypted. Original string is: " &
Encoding.ASCII.GetString(TestResult2))
'-----------------------------
 
Many Thanks,
Goran
gmilenkovic@irdetoaccess.com <mailto:gmilenkovic@irdetoaccess.com> 
 
This e-mail and any attachments are CONFIDENTIAL and intended solely for the
use of the individual(s) to whom it is addressed. It can contain proprietary
confidential information and/or be subject to legal privilege and/or subject
to a non-disclosure Agreement. Unauthorized use, disclosure or copying is
strictly prohibited. If you are not the/an addressee and are in possession
of this e-mail, please notify us immediately.
 
 
------_=_NextPart_001_01C3A212.3E834BA8
Content-Type: text/html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<TITLE>Message</TITLE>
<META content="MSHTML 6.00.3790.59" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="mso-spacerun: yes"><SPAN class=910164013-03112003>The following 
VB.NET example should generate the new key pair, store generated values 
localy, then encrypt the test string using public key and decrypt it using 
private key. However, it works only if all parameters (P,Q,DP,DQ,InverseQ & 
D) are given for the decryption, but not if only D is given. That means that for 
simple decryption private key is not enough, but also all of the other 
parameters ?? </SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="mso-spacerun: yes"><SPAN class=910164013-03112003>If you change boolean 
value OnlyD to True, assuming that only D should be enough for decryption, then 
it works. Otherwise, an exception occurs ("Bad Key"). Is there any solution for 
this ?</SPAN></SPAN></SPAN><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="mso-spacerun: yes"><SPAN 
class=910164013-03112003></SPAN></SPAN></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="mso-spacerun: yes"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN></SPAN></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
style="mso-spacerun: yes"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN><SPAN 
class=910164013-03112003>--------------------------</SPAN></SPAN></P></SPAN></SPAN>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim OnlyD As Boolean = 
False<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" 
/><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim TestResult1() As 
Byte<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim TestResult2() As 
Byte<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN>Generate the key pair and export all of it's 
parameters into the RSAParams1<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAParams1 As 
RSAParameters = New RSAParameters<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAObj1 As 
RSACryptoServiceProvider = New RSACryptoServiceProvider<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams1 = 
RSAObj1.ExportParameters(True)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN>Get all parameters into local 
variables<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myModulus As Byte() = 
RSAParams1.Modulus<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myExponent As Byte() = 
RSAParams1.Exponent<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myPrivateKey As Byte() = 
RSAParams1.D<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myP As Byte() = 
RSAParams1.P<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myQ As Byte() = 
RSAParams1.Q<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myDP As Byte() = 
RSAParams1.DP<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myDQ As Byte() = 
RSAParams1.DQ<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim myIQ As Byte() = 
RSAParams1.InverseQ<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN>Create new 
RSACryproProvider<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAParams2 As 
RSAParameters = New RSAParameters<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">Dim RSAObj2 As 
RSACryptoServiceProvider = New RSACryptoServiceProvider<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN>Set the public key<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams2.Modulus = 
myModulus<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams2.Exponent = 
myExponent<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAObj2.ImportParameters(RSAParams2)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN>Encrypt with public key<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">TestResult1 = 
RSAObj2.Encrypt(Encoding.ASCII.GetBytes("TEST"), False)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MsgBox("Encrypted")<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN>Now set the private key<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAParams2.D = 
myPrivateKey<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">If (Not OnlyD) 
Then<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
class=910164013-03112003>    </SPAN>RSAParams2.P = 
myP<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
class=910164013-03112003>    </SPAN>RSAParams2.Q = 
myQ<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
class=910164013-03112003>    </SPAN>RSAParams2.DP = 
myDP<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
class=910164013-03112003>    </SPAN>RSAParams2.DQ = 
myDQ<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
class=910164013-03112003>    </SPAN>RSAParams2.InverseQ = 
myIQ<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">End If<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">RSAObj2.ImportParameters(RSAParams2)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN>Decrypt with private 
key<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">TestResult2 = 
RSAObj2.Decrypt(TestResult1, False)<o:p></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">MsgBox("Decrypted. Original 
string is: " & Encoding.ASCII.GetString(TestResult2))</SPAN></P><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'">'<SPAN 
class=910164013-03112003>---</SPAN><SPAN 
class=910164013-03112003>--------------------------</SPAN></SPAN></P></SPAN>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><SPAN 
class=910164013-03112003><FONT face=Arial></FONT></SPAN></SPAN><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"></SPAN> </P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN 
class=910164013-03112003>Many Thanks,</SPAN></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN 
class=910164013-03112003>Goran</SPAN></o:p></SPAN></P>
<P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN 
style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"><o:p><SPAN 
class=910164013-03112003><A 
href="mailto:gmilenkovic@irdetoaccess.com">gmilenkovic@irdetoaccess.com</A></SPAN></o:p></SPAN></P></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV align=left><SPAN 
style="FONT-SIZE: 7pt; COLOR: blue; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana">
<P class=MsoNormal 
style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none; tab-stops: 62.35pt 85.05pt 153.1pt 175.75pt 243.8pt 266.5pt 334.55pt 357.2pt 425.25pt"><SPAN 
style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana">This 
e-mail and any attachments are CONFIDENTIAL and intended solely for the use of 
the individual(s) to whom it</SPAN><SPAN 
style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial"> i</SPAN><SPAN 
style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana">s 
addressed. It can contain proprietary confidential information and/or be subject 
to legal privilege and/or subject to a non-disclosure Agreement. Unauthorized 
use, disclosure or copying is strictly prohibited. If you are not the/an 
addressee and are in possession of this e-mail, please notify us 
immediately.<o:p></o:p></SPAN></P>
<P class=MsoNormal 
style="MARGIN: 0in 0in 0pt; mso-pagination: none; mso-layout-grid-align: none"><FONT 
face=Arial color=#000000 size=2></FONT></SPAN><SPAN 
style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: Verdana; mso-bidi-font-family: Verdana"><FONT 
face=Verdana color=#ff0000 size=1><FONT face=Arial color=#000000 
size=2></FONT> </P></FONT></SPAN></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV></BODY></HTML>
------_=_NextPart_001_01C3A212.3E834BA8--