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. -~----------~----~----~----~------~----~------~--~---
