I suspect there may be a discrepancy of the meaning of RSA_Size() on the 
two implementations, possibly arising from ASN.1 encoding considerations.

When your number is converted into hex representation, it has 128 bytes:

DD626D4C5DA0D9296ED31044F9568D7E6EB37F30D548225041D158DB
012B6ED13394E2F993ED4F481DC49D8458C5BB2C1A443430594E3C0B
CF59AE904D2D7C7C20150A6A6DB6686BF5CF8173C5AD2A2C2E317BB
339659CD1D6C04170854B5262FB39F16AF25FEA972B624C480E153E55
AB2D31D62296ECE8A4A1D674410AA2A9

However, as a 128-bit ASN.1 integer, this is a negative value (leftmost bit is 
set), and all RSA integers must be represented as positive values; for this 
reason, the ASN.1 value must include a leading 00 byte, making it a 129 
byte representation of a 128-byte positive value.

The online documentation for RSA_Size() suggest that the size is for an 
'RSA encrypted value', which for this key would be 128 bytes - although if 
that velue were then to be ASN.1 encoded, it may require an additional byte.

I realise this comment doesn't really solve your problem, but I'm hoping that 
it will help someone to decide the canonical interpretation of RSA_size() so 
that the broken implementation can be determined and fixed.

David Boyce

On 11 Jan 2014 at 12:09, Som M via RT wrote:

> Hi,
> We are facing some issue with rsa key size while porting our application
> from montavista to RHEL 6.4.
> 
> The RSA key size(RSA_size) for montavista is returning 128 bytes but on
> RHEL its returning 129 bytes.
> 
> #include <openssl/bn.h>
> 
> #include <stdlib.h>
> #include <time.h>
> #include <openssl/ssl.h>
> #include <openssl/rsa.h>
> #include <openssl/md5.h>
> #include <openssl/evp.h>
> 
> 
> /*using namespace std; */
> int main()
> {
> 
> RSA *rsa_pb = 0;
> unsigned int authMsgLen = 0;
> rsa_pb = RSA_new();
> static char evc41_lg_n[] =
> "155461468878137924780952081903031227576222509385846279319048916001752025100615237943340425486157346876604219223131643357452911097864741470169369275270067558869064161833650298945491423162034462611882047283976121790220680041467155931440845770244995083344133190925465159949456383958641405933050126040553008833193";*
> // evc41 lg public exponent
> static char evc41_lg_e[] = "65537";
> 
> BN_dec2bn( &(rsa_pb->n), evc40_lg_n);
> BN_dec2bn( &(rsa_pb->e), evc40_lg_e);
> 
> authMsgLen = RSA_size(rsa_pb);
> printf("Msg Length:z %d:%d",authMsgLen,z);
> 
> return 0;
> }
> 
> authMsgLen in montavista is 128 and for rhel 6.4 it is 129.
> 
> There is a check in our code which checks authMsgLen against 128 and this
> fails in rhel. We commented the same but later RSA_verify also failed.
> 
> Montavista openssl version : 0.98
> RHEL openssl version : 1.0.0
> 
> Can anyone please let me know what is the issue?
> 
> Thanks,
> Som
> 
> ______________________________________________________________________
> OpenSSL Project                                 http://www.openssl.org
> Development Mailing List                       [email protected]
> Automated List Manager                           [email protected]

-- 
[email protected]


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [email protected]
Automated List Manager                           [email protected]

Reply via email to