It's possible, but you have to know "e" as well. You can use this member 
function in InvertibleRSAFunction:

//! factor n given private exponent
void Initialize(const Integer &n, const Integer &e, const Integer &d);

to initialize the private key, then sign the message normally.

--------------------------------------------------
From: "Gary" <[email protected]>
Sent: Saturday, February 28, 2009 12:23 PM
To: "Crypto++ Users" <[email protected]>
Subject: How to sign a message with only "n" and "d" fields of RSA-1024 bit 
private key?

>
>
> Hi there!
> I've built the below code(RSASign) successfully and it works fine:
>
> #include "stdafx.h"
>
> #include "rsa.h"
> #include "osrng.h"   // PRNG
> #include "hex.h"     // Hex Encoder/Decoder
> #include "filters.h" // String Source and Sink
> //std
> #include <iostream>
> #include <conio.h>
> using namespace std;
> using namespace CryptoPP;
> int main()
> {
>
>      AutoSeededRandomPool rng;
>      string message = "Yoda said, Do or Do Not. There is not try.";
>
>      // Input: Private Key
>   byte PrivateKeyArray[]=
> {0x30,0x82,0x01,0x52,0x02,0x01,0x00,0x30,0x0D,
>   0x06,0x09,0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x01,0x05,0x00,
>   0x04,0x82,0x01,0x3C,0x30,0x82,0x01,0x38,0x02,0x01,0x00,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,0x02,0x40,0x49,0xF4,0x92,0x25,0xC7,0xA5,0xEF,0xB7,
>   0x81,0x41,0x7F,0xE5,0x45,0x28,0x7D,0xDE,0x93,0xB1,0x27,0x9E,0xDA,
>   0xF3,0xB5,0xC1,0x64,0x5E,0xE1,0x54,0x75,0x42,0x1C,0xA6,0xC1,0x5D,
>   0x3B,0xCE,0xED,0x85,0x1F,0xE6,0x6B,0xEA,0xB8,0x47,0x5B,0x2C,0x38,
>   0x06,0xEE,0xC9,0x92,0x9D,0xB3,0x24,0x43,0xD1,0x85,0x6E,0x11,0x9D,
>   0xF2,0x01,0x68,0x31,0x02,0x21,0x00,0xF7,0x77,0x08,0xF8,0xCE,0xF8,
>   0x9E,0x98,0x32,0x6C,0x9C,0x7C,0x9B,0x41,0x5F,0xB8,0xEC,0x63,0x8A,
>   0xEE,0xAC,0xD0,0xA5,0xFC,0x60,0xEC,0x43,0x72,0x80,0xFC,0xE9,0x1F,
>   0x02,0x21,0x00,0xD8,0xC4,0x65,0x6D,0x41,0x29,0x14,0xCA,0x61,0x9E,
>   0xD4,0x73,0xAF,0xCB,0x9F,0xC6,0x85,0x7D,0xD1,0xCD,0xDE,0x45,0x17,
>   0xBA,0xE7,0xE3,0x0D,0xC0,0x5B,0xD4,0xA0,0x11,0x02,0x21,0x00,0xCB,
>   0xCB,0x70,0xCC,0xE6,0xAE,0xA0,0xB9,0x92,0xF0,0x08,0x66,0x9D,0xF9,
>   0x9A,0x1F,0xD1,0xBB,0x63,0x5B,0x24,0xE8,0x10,0x39,0x40,0xC2,0x91,
>   0xE5,0xD3,0xA3,0x1A,0x55,0x02,0x20,0x19,0x80,0x84,0x67,0x34,0xD7,
>   0xA8,0x17,0xCF,0x3F,0xDC,0xC2,0x50,0xEA,0xC7,0x80,0xC4,0x69,0x27,
>   0xBD,0xDD,0xEA,0x02,0xCA,0xB1,0xDE,0x7A,0x16,0xA1,0x64,0x4F,0x11,
>   0x02,0x20,0x1B,0x29,0x5C,0x2F,0x54,0x61,0xED,0x90,0xCA,0x8A,0xB6,
>   0xE2,0x8E,0x27,0x0C,0x8F,0x00,0x40,0x90,0x78,0xF8,0xDD,0xF1,0xED,
>   0x9F,0x1B,0x3E,0x46,0x86,0xD3,0x93,0xB6};
>
>
>      // Output: Signed Message M
>   byte signature[256];
>
>
>      StringSource privArray(PrivateKeyArray,sizeof(PrivateKeyArray),
> true,NULL);
>      RSASSA_PKCS1v15_SHA_Signer priv(privArray);
>
>      // Sign Away...
>       StringSource( message, true,
>         new SignerFilter( rng, priv,
>            new HexEncoder(
>               new ArraySink(signature,sizeof(signature))
>            ) // HexEncoder
>         ) // SignerFilter
>      ); // StringSource
>
> cout<<"signature is:"<<endl;
> for(int i=0;i<sizeof(signature);i++)
> cout<<signature[i]<<" | ";
> _getch();
>
>   return 0;
> }
>
>
>
> It's private key value is in a RSAPrivateKey structure format,as
> defined by PKCS#1,
> And is of type a DER-encoded PKCS#8 PrivateKeyInfo structure.
>
>
>
> I need to sign a message by only "n"(modulus) and "d"(private
> exponent),
> I've read "RSADumpKeys" example to parse key fields,but I don't know
> how can I sign a message with only "n" and "d" parts?
> And with which function?
>
> I want to store "n" and "d" parts of generated Private key into a byte
> array(with length 256 bytes) and sign a message with this array,
>
> Is this job possible with the above "CryptoPP" functions? or their
> input private key should be only in DER-encoded format?
>
> Because now I need to store only 256 bytes(128 bytes for "n" and 128
> bytes for "d")!
>
> What is your suggesstion?
>
> Hope you help me!
> Thanks in Advance.
> Gary
> > 

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

Reply via email to