Problem with zeroing "n" and "e" parts of a pulick key? (Please help,I've tried so much!!)

View: New views
4 Messages — Rating Filter:   Alert me  

Problem with zeroing "n" and "e" parts of a pulick key? (Please help,I've tried so much!!)

by bahareh rostamiyan :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Hello guys!

I have a "RSA_verify_Signature" code,
When I give the public key with below sequence,it works fine:

byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,
                0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,
                0x30,0x46,0x02,0x41,0x00,0xD1,0x8A,0x48,0xC0,0x60,0x56,0x27,
                0x32,0x98,0xE4,0x3F,0xB4,0x43,0xF2,0xB9,0xF6,0xA2,0x75,0xF0,
                0x42,0x17,0x07,0xD8,0x4E,0x9C,0x62,0x29,0x19,0xF6,0xE5,0xFB,
                0xDA,0x49,0x6E,0x42,0x85,0xB1,0x1A,0xE3,0x1A,0x1B,0x24,0x7B,
                0x0F,0xCD,0x5F,0x9E,0x3D,0xC1,0x1C,0x7C,0x26,0x06,0xA7,0x28,
                0x88,0xED,0x87,0x2D,0xC7,0xB5,0x2A,0xDB,0x0F,0x02,0x01,0x11};


But I need to zero "n" & "e" parts in one section of my program (my
program needs Public key to be zero in a
section)
So, I decode it's sequence with "DumpASN.1" program available in
"http://lapo.it/asn1js/"!

and the result is as following:

305A300D06092A864886F70D01010105000349003046024100D18A48C06056273298E43FB443F2B9F6A275F0421707D84E9C622919F6E5FBDA496E4285B11AE31A1B247B0FCD5F9E3DC11C7C2606A72888ED872DC7B52ADB0F020111


SEQUENCE
Offset: 0
Length: 2+90
(constructed)

SEQUENCE
Offset: 2
Length: 2+13
(constructed)

OBJECT_IDENTIFIER
Offset: 4
Length: 2+9
Value:
1.2.840.113549.1.1.1

NULL
Offset: 15
Length: 2+0

BIT_STRING
Offset: 17
Length: 2+73
(encapsulates)

SEQUENCE
Offset: 20
Length: 2+70
(constructed)

INTEGER
Offset: 22
Length: 2+65

INTEGER
Offset: 89
Length: 2+1
Value:
17


Regarding this result,I found that should zero "n" and "e" in this
way:

For "n":

INTEGER
Offset: 22
Length: 2+65

For "e":

INTEGER
Offset: 89
Length: 2+1
Value:
17


byte pubkey[] =

{0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,
0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,0x30,0x46,
0x02,0x41,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,
                0x02,0x01,0x00};

But when I run my program,I see "run_time" error which is thrown to
this line of "cryptlib.h" file:


virtual void ThrowIfInvalid(RandomNumberGenerator &rng, unsigned int
level) const
{if (!Validate(rng, level)) throw InvalidMaterial("CryptoMaterial:
this object contains invalid values");}

Related to this line of the code:

StringSource( message, true, new Redirector(*verifierFilter));



Here is the code:

#include "stdafx.h"

#include "rsa.h"
#include "osrng.h"   // PRNG
#include "hex.h"     // Hex Encoder/Decoder
#include "files.h"   // File Source and Sink
using namespace std;
using namespace CryptoPP;
int main(int argc, char* argv[])
{
      /*byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,
                0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,
                0x30,0x46,0x02,0x41,0x00,0xD1,0x8A,0x48,0xC0,0x60,0x56,0x27,
                0x32,0x98,0xE4,0x3F,0xB4,0x43,0xF2,0xB9,0xF6,0xA2,0x75,0xF0,
                0x42,0x17,0x07,0xD8,0x4E,0x9C,0x62,0x29,0x19,0xF6,0xE5,0xFB,
                0xDA,0x49,0x6E,0x42,0x85,0xB1,0x1A,0xE3,0x1A,0x1B,0x24,0x7B,
                0x0F,0xCD,0x5F,0x9E,0x3D,0xC1,0x1C,0x7C,0x26,0x06,0xA7,0x28,
                0x88,0xED,0x87,0x2D,0xC7,0xB5,0x2A,0xDB,0x0F,0x02,0x01,0x11};*/

        byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,
                0x48,0x86,0xF7,0x0D,
0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,0x30,0x46,
                0x02,0x41,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
       
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
                0x00,
                0x02,0x01,0x00};

           byte pbSignature[]= {0x17,0x26,0xA8,0x4F,0x87,0x9D,0x9D,0x3F,0x60,
                0x98,0x92,0x75,0x3E,0xB2,0xF4,0x8B,0xA6,0xF6,0x47,0x09,0x71,
                0xBD,0x5D,0x87,0x9E,0x52,0xED,0xB0,0x23,0x2D,0xA3,0xCE,0x43,
                0xEE,0xD2,0xEC,0xD3,0x17,0x55,0x3A,0x37,0xCA,0x17,0xF7,0x2B,
                0xB5,0x41,0x0C,0xA9,0x48,0x69,0x89,0xA6,0x72,0xB5,0x4F,0xB7,
                0xD0,0x20,0xCC,0x2C,0x0E,0x1E,0x39};


// Message M
string message = "Yoda said, Do or Do Not. There is not try.";

//Verify signature
StringSource pubArray(pubkey,sizeof(pubkey), true,NULL);

StringSource SignatureArray( pbSignature,sizeof
(pbSignature),true,NULL);

// Verifier Object
RSASSA_PKCS1v15_SHA_Verifier pub(pubArray);

// Sanity Check
if (SignatureArray.MaxRetrievable() != pub.SignatureLength())
   printf("error length:%d",(int)pub.SignatureLength());

SecByteBlock Signature( pub.SignatureLength() );
SignatureArray.Get( Signature, Signature.size());

// Prepare Verifier
VerifierFilter *verifierFilter =new VerifierFilter(pub);
verifierFilter->Put(Signature, pub.SignatureLength());

// Invoke Verifier
StringSource( message, true, new Redirector(*verifierFilter));

// Paydirt
if( false == verifierFilter->GetLastResult() )
       printf("Signature Verification Failed");
else
       printf("Signature Verified");

   return 0;
}



And also when running, the value of "pub.SignatureLength()" is "1" !!!


Please help me about this problem?!!

How Could I zero the "n" & "e" parts as works?

And How about zeroing the Private Key? ("n" & "e" & "d" & "p" &
"q" ,...)


Thanks in Advance.
Gary
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---


Re: Problem with zeroing "n" and "e" parts of a pulick key? (Please help,I've tried so much!!)

by rajkosto-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


Create your RSA::PublicKey manually, then use it to make your verifier
object
the PublicKey object supports creation from DER data (like you are
doing), but you can also manually specify its parts too (exponent,
etc)

On Jun 25, 3:27 pm, Gary <b.rostami...@...> wrote:

> Hello guys!
>
> I have a "RSA_verify_Signature" code,
> When I give the public key with below sequence,it works fine:
>
> byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,
>                 0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,
>                 0x30,0x46,0x02,0x41,0x00,0xD1,0x8A,0x48,0xC0,0x60,0x56,0x27,
>                 0x32,0x98,0xE4,0x3F,0xB4,0x43,0xF2,0xB9,0xF6,0xA2,0x75,0xF0,
>                 0x42,0x17,0x07,0xD8,0x4E,0x9C,0x62,0x29,0x19,0xF6,0xE5,0xFB,
>                 0xDA,0x49,0x6E,0x42,0x85,0xB1,0x1A,0xE3,0x1A,0x1B,0x24,0x7B,
>                 0x0F,0xCD,0x5F,0x9E,0x3D,0xC1,0x1C,0x7C,0x26,0x06,0xA7,0x28,
>                 0x88,0xED,0x87,0x2D,0xC7,0xB5,0x2A,0xDB,0x0F,0x02,0x01,0x11};
>
> But I need to zero "n" & "e" parts in one section of my program (my
> program needs Public key to be zero in a
> section)
> So, I decode it's sequence with "DumpASN.1" program available in
> "http://lapo.it/asn1js/"!
>
> and the result is as following:
>
> 305A300D06092A864886F70D01010105000349003046024100D18A48C06056273298E43FB443F2B9F6A275F0421707D84E9C622919F6E5FBDA496E4285B11AE31A1B247B0FCD5F9E3DC11C7C2606A72888ED872DC7B52ADB0F020111
>
> SEQUENCE
> Offset: 0
> Length: 2+90
> (constructed)
>
> SEQUENCE
> Offset: 2
> Length: 2+13
> (constructed)
>
> OBJECT_IDENTIFIER
> Offset: 4
> Length: 2+9
> Value:
> 1.2.840.113549.1.1.1
>
> NULL
> Offset: 15
> Length: 2+0
>
> BIT_STRING
> Offset: 17
> Length: 2+73
> (encapsulates)
>
> SEQUENCE
> Offset: 20
> Length: 2+70
> (constructed)
>
> INTEGER
> Offset: 22
> Length: 2+65
>
> INTEGER
> Offset: 89
> Length: 2+1
> Value:
> 17
>
> Regarding this result,I found that should zero "n" and "e" in this
> way:
>
> For "n":
>
> INTEGER
> Offset: 22
> Length: 2+65
>
> For "e":
>
> INTEGER
> Offset: 89
> Length: 2+1
> Value:
> 17
>
> byte pubkey[] =
>
> {0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,
> 0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,0x30,0x46,
> 0x02,0x41,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>                 0x00,
>                 0x02,0x01,0x00};
>
> But when I run my program,I see "run_time" error which is thrown to
> this line of "cryptlib.h" file:
>
> virtual void ThrowIfInvalid(RandomNumberGenerator &rng, unsigned int
> level) const
> {if (!Validate(rng, level)) throw InvalidMaterial("CryptoMaterial:
> this object contains invalid values");}
>
> Related to this line of the code:
>
> StringSource( message, true, new Redirector(*verifierFilter));
>
> Here is the code:
>
> #include "stdafx.h"
>
> #include "rsa.h"
> #include "osrng.h"   // PRNG
> #include "hex.h"     // Hex Encoder/Decoder
> #include "files.h"   // File Source and Sink
> using namespace std;
> using namespace CryptoPP;
> int main(int argc, char* argv[])
> {
>       /*byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,
>                 0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,
>                 0x30,0x46,0x02,0x41,0x00,0xD1,0x8A,0x48,0xC0,0x60,0x56,0x27,
>                 0x32,0x98,0xE4,0x3F,0xB4,0x43,0xF2,0xB9,0xF6,0xA2,0x75,0xF0,
>                 0x42,0x17,0x07,0xD8,0x4E,0x9C,0x62,0x29,0x19,0xF6,0xE5,0xFB,
>                 0xDA,0x49,0x6E,0x42,0x85,0xB1,0x1A,0xE3,0x1A,0x1B,0x24,0x7B,
>                 0x0F,0xCD,0x5F,0x9E,0x3D,0xC1,0x1C,0x7C,0x26,0x06,0xA7,0x28,
>                 0x88,0xED,0x87,0x2D,0xC7,0xB5,0x2A,0xDB,0x0F,0x02,0x01,0x11};*/
>
>         byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,
>                 0x48,0x86,0xF7,0x0D,
> 0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,0x30,0x46,
>                 0x02,0x41,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>                 0x00,
>                 0x02,0x01,0x00};
>
>            byte pbSignature[]= {0x17,0x26,0xA8,0x4F,0x87,0x9D,0x9D,0x3F,0x60,
>                 0x98,0x92,0x75,0x3E,0xB2,0xF4,0x8B,0xA6,0xF6,0x47,0x09,0x71,
>                 0xBD,0x5D,0x87,0x9E,0x52,0xED,0xB0,0x23,0x2D,0xA3,0xCE,0x43,
>                 0xEE,0xD2,0xEC,0xD3,0x17,0x55,0x3A,0x37,0xCA,0x17,0xF7,0x2B,
>                 0xB5,0x41,0x0C,0xA9,0x48,0x69,0x89,0xA6,0x72,0xB5,0x4F,0xB7,
>                 0xD0,0x20,0xCC,0x2C,0x0E,0x1E,0x39};
>
> // Message M
> string message = "Yoda said, Do or Do Not. There is not try.";
>
> //Verify signature
> StringSource pubArray(pubkey,sizeof(pubkey), true,NULL);
>
> StringSource SignatureArray( pbSignature,sizeof
> (pbSignature),true,NULL);
>
> // Verifier Object
> RSASSA_PKCS1v15_SHA_Verifier pub(pubArray);
>
> // Sanity Check
> if (SignatureArray.MaxRetrievable() != pub.SignatureLength())
>    printf("error length:%d",(int)pub.SignatureLength());
>
> SecByteBlock Signature( pub.SignatureLength() );
> SignatureArray.Get( Signature, Signature.size());
>
> // Prepare Verifier
> VerifierFilter *verifierFilter =new VerifierFilter(pub);
> verifierFilter->Put(Signature, pub.SignatureLength());
>
> // Invoke Verifier
> StringSource( message, true, new Redirector(*verifierFilter));
>
> // Paydirt
> if( false == verifierFilter->GetLastResult() )
>        printf("Signature Verification Failed");
> else
>        printf("Signature Verified");
>
>    return 0;
>
> }
>
> And also when running, the value of "pub.SignatureLength()" is "1" !!!
>
> Please help me about this problem?!!
>
> How Could I zero the "n" & "e" parts as works?
>
> And How about zeroing the Private Key? ("n" & "e" & "d" & "p" &
> "q" ,...)
>
> Thanks in Advance.
> Gary
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---


Re: Problem with zeroing "n" and "e" parts of a pulick key? (Please help,I've tried so much!!)

by bahareh rostamiyan :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message

Hi and Thank you very much of your reply!
 
As you mentained, I change the public key manually like below:
 
byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,
0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,0x30,0x46,
 0x02,0x41,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, 0x00,
0x02,0x01,
0x00};
 
I don't change required headers,but only change "n" and "e" parts to 0x00;
But I don't know why do I get the error showed in my previous post after that?!!
 
Would you help me again?!!
 
Best Regards.

On Fri, Jul 3, 2009 at 9:43 PM, rajkosto <rajko@...> wrote:

Create your RSA::PublicKey manually, then use it to make your verifier
object
the PublicKey object supports creation from DER data (like you are
doing), but you can also manually specify its parts too (exponent,
etc)

 

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---


Re: Problem with zeroing "n" and "e" parts of a pulick key? (Please help,I've tried so much!!)

by rajkosto-2 :: Rate this Message:

Reply to Author | View Threaded | Show Only this Message


well obviously dont do that, do it programmatically

On Jul 4, 8:32 am, bahareh rostamiyan <b.rostami...@...> wrote:

> Hi and Thank you very much of your reply!
>
> As you mentained, I change the public key manually like below:
>
> byte pubkey[] ={0x30,0x5A,0x30,0x0D,0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,
> 0x01,0x01,0x01,0x05,0x00,0x03,0x49,0x00,0x30,0x46,
>  0x02,0x41,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
>
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
> 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
> 0x00,
> 0x02,0x01,
> 0x00};
>
> I don't change required headers,but only change "n" and "e" parts to 0x00;
> But I don't know why do I get the error showed in my previous post after
> that?!!
>
> Would you help me again?!!
>
> Best Regards.
>
> On Fri, Jul 3, 2009 at 9:43 PM, rajkosto <ra...@...> wrote:
>
> > Create your RSA::PublicKey manually, then use it to make your verifier
> > object
> > the PublicKey object supports creation from DER data (like you are
> > doing), but you can also manually specify its parts too (exponent,
> > etc)
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users" Google Group.
To unsubscribe, send an email to cryptopp-users-unsubscribe@....
More information about Crypto++ and this group is available at http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---