How to sign a message with only "n" and "d" fields of RSA-1024 bit private key?

55 views
Skip to first unread message

Gary

unread,
Feb 28, 2009, 3:23:10 PM2/28/09
to Crypto++ Users

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

Wei Dai

unread,
Feb 28, 2009, 4:23:39 PM2/28/09
to Gary, Crypto++ Users
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" <b.rost...@gmail.com>
Sent: Saturday, February 28, 2009 12:23 PM
To: "Crypto++ Users" <cryptop...@googlegroups.com>
Subject: How to sign a message with only "n" and "d" fields of RSA-1024 bit
private key?
Reply all
Reply to author
Forward
0 new messages