From: <iro...@us...> - 2004-02-13 23:32:28
|
Update of /cvsroot/perl-openssl/Crypt/OpenSSL/RSA In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv2904 Modified Files: RSA.xs Log Message: *) Whitespace normalization *) rename CHECK_OPEN_SSL_CALL macro to CHECK_OPEN_SSL, call as appropriate Index: RSA.xs =================================================================== RCS file: /cvsroot/perl-openssl/Crypt/OpenSSL/RSA/RSA.xs,v retrieving revision 1.29 retrieving revision 1.30 diff -C2 -d -r1.29 -r1.30 *** RSA.xs 13 Feb 2004 23:10:49 -0000 1.29 --- RSA.xs 13 Feb 2004 23:26:24 -0000 1.30 *************** *** 14,19 **** #define PACKAGE_NAME "Crypt::OpenSSL::RSA" ! #define CHECK_OPEN_SSL_CALL( result ) if( ! ( result ) ) \ ! croak( "OpenSSL error: %s", ERR_reason_error_string( ERR_get_error() ) ); /* convenience hv routines - I'm lazy */ --- 14,19 ---- #define PACKAGE_NAME "Crypt::OpenSSL::RSA" ! #define CHECK_OPEN_SSL(p_result) if (!(p_result)) \ ! croak("OpenSSL error: %s", ERR_reason_error_string(ERR_get_error())); /* convenience hv routines - I'm lazy */ *************** *** 23,27 **** hv_delete(hv, key, strlen(key), G_DISCARD); ! if( hv_store(hv, key, strlen(key), value, 0) != NULL) { SvREFCNT_inc(value); --- 23,27 ---- hv_delete(hv, key, strlen(key), G_DISCARD); ! if (hv_store(hv, key, strlen(key), value, 0) != NULL) { SvREFCNT_inc(value); *************** *** 41,47 **** rsa_ptr_SV_ptr = hvFetch(rsa_HV, KEY_KEY); ! if( rsa_ptr_SV_ptr != NULL ) { ! RSA_free ((RSA*) SvIV (*rsa_ptr_SV_ptr)); hv_delete(rsa_HV, KEY_KEY, strlen(KEY_KEY), G_DISCARD); } --- 41,47 ---- rsa_ptr_SV_ptr = hvFetch(rsa_HV, KEY_KEY); ! if (rsa_ptr_SV_ptr != NULL) { ! RSA_free((RSA*) SvIV (*rsa_ptr_SV_ptr)); hv_delete(rsa_HV, KEY_KEY, strlen(KEY_KEY), G_DISCARD); } *************** *** 54,60 **** rsa_ptr_SV_ptr = hvFetch(rsa_HV, KEY_KEY); ! if( rsa_ptr_SV_ptr == NULL ) { ! croak( "There is no key set" ); } else --- 54,60 ---- rsa_ptr_SV_ptr = hvFetch(rsa_HV, KEY_KEY); ! if (rsa_ptr_SV_ptr == NULL) { ! croak("There is no key set"); } else *************** *** 66,70 **** void set_RSA_key(HV* rsa_HV, RSA* rsa) { ! hvStore( rsa_HV, KEY_KEY, sv_2mortal( newSViv( (IV)rsa ) ) ); } --- 66,70 ---- void set_RSA_key(HV* rsa_HV, RSA* rsa) { ! hvStore(rsa_HV, KEY_KEY, sv_2mortal(newSViv((IV)rsa))); } *************** *** 79,85 **** void set_padding(HV* rsa_HV, int padding) { ! hvStore( rsa_HV, ! PADDING_KEY, ! sv_2mortal( newSViv( (IV) padding ) ) ); } --- 79,83 ---- void set_padding(HV* rsa_HV, int padding) { ! hvStore(rsa_HV, PADDING_KEY, sv_2mortal(newSViv((IV) padding))); } *************** *** 94,103 **** void set_hash(HV* rsa_HV, int hash) { ! hvStore( rsa_HV, HASH_KEY, sv_2mortal( newSViv( (IV) hash ) ) ); } char is_private(HV* rsa_HV) { ! return( get_RSA_key(rsa_HV)->d != NULL ); } --- 92,101 ---- void set_hash(HV* rsa_HV, int hash) { ! hvStore(rsa_HV, HASH_KEY, sv_2mortal(newSViv((IV) hash))); } char is_private(HV* rsa_HV) { ! return(get_RSA_key(rsa_HV)->d != NULL); } *************** *** 107,122 **** HV* rsa_HV; rsa_HV = newHV(); ! hvStore( rsa_HV, KEY_KEY, sv_2mortal( newSViv( (IV) p_rsa ) ) ); ! set_hash( rsa_HV, NID_sha1 ); ! set_padding( rsa_HV, RSA_PKCS1_OAEP_PADDING ); ! return sv_bless( newRV_noinc( (SV*) rsa_HV ), ! ( SvROK( p_proto ) ! ? SvSTASH( SvRV( p_proto ) ) ! : gv_stashsv( p_proto, 1 ) ) ); } ! int get_digest_length( int hash_method ) { ! switch( hash_method ) { case NID_md5: --- 105,120 ---- HV* rsa_HV; rsa_HV = newHV(); ! hvStore(rsa_HV, KEY_KEY, sv_2mortal(newSViv((IV) p_rsa ))); ! set_hash(rsa_HV, NID_sha1); ! set_padding(rsa_HV, RSA_PKCS1_OAEP_PADDING); ! return sv_bless(newRV_noinc((SV*) rsa_HV), ! (SvROK(p_proto) ! ? SvSTASH(SvRV(p_proto)) ! : gv_stashsv(p_proto, 1))); } ! int get_digest_length(int hash_method) { ! switch(hash_method) { case NID_md5: *************** *** 128,137 **** break; default: ! croak( "Unknown digest hash code" ); break; } } ! char* get_message_digest( SV* text_SV, int hash_method ) { int text_length; --- 126,135 ---- break; default: ! croak("Unknown digest hash code"); break; } } ! char* get_message_digest(SV* text_SV, int hash_method) { int text_length; *************** *** 141,158 **** text = SvPV(text_SV, text_length); ! if( New(0, message_digest, get_digest_length(hash_method), char) == NULL ) { ! croak ( "unable to allocate buffer for message digest in package " ! PACKAGE_NAME ); } ! switch( hash_method ) { case NID_md5: { ! if( MD5(text, text_length, message_digest) == NULL ) { ! croak( "failed to compute the MD5 message digest in package " ! PACKAGE_NAME ); } break; --- 139,156 ---- text = SvPV(text_SV, text_length); ! if (New(0, message_digest, get_digest_length(hash_method), char) == NULL) { ! croak("unable to allocate buffer for message digest in package " ! PACKAGE_NAME); } ! switch(hash_method) { case NID_md5: { ! if (MD5(text, text_length, message_digest) == NULL) { ! croak("failed to compute the MD5 message digest in package " ! PACKAGE_NAME); } break; *************** *** 161,168 **** case NID_sha1: { ! if( SHA1( text, text_length, message_digest ) == NULL ) { ! croak( "failed to compute the SHA1 message digest in package " ! PACKAGE_NAME ); } break; --- 159,166 ---- case NID_sha1: { ! if (SHA1(text, text_length, message_digest) == NULL) { ! croak("failed to compute the SHA1 message digest in package " ! PACKAGE_NAME); } break; *************** *** 170,177 **** case NID_ripemd160: { ! if( RIPEMD160( text, text_length, message_digest ) == NULL ) { ! croak( "failed to compute the SHA1 message digest in package " ! PACKAGE_NAME ); } break; --- 168,175 ---- case NID_ripemd160: { ! if (RIPEMD160(text, text_length, message_digest) == NULL) { ! croak("failed to compute the SHA1 message digest in package " ! PACKAGE_NAME); } break; *************** *** 179,183 **** default: { ! croak( "Unknown digest hash code" ); break; } --- 177,181 ---- default: { ! croak("Unknown digest hash code"); break; } *************** *** 220,225 **** keyString = SvPV(p_keyStringSv, keyStringLength); ! CHECK_OPEN_SSL_CALL( ! stringBIO = BIO_new_mem_buf(keyString, keyStringLength)) rsa = p_loader(stringBIO, NULL, NULL, NULL); --- 218,222 ---- keyString = SvPV(p_keyStringSv, keyStringLength); ! CHECK_OPEN_SSL(stringBIO = BIO_new_mem_buf(keyString, keyStringLength)) rsa = p_loader(stringBIO, NULL, NULL, NULL); *************** *** 228,235 **** BIO_free(stringBIO); ! if (rsa == NULL) ! { ! croak("OpenSSL error: %s", ERR_reason_error_string(ERR_get_error())); ! } set_RSA_key(p_rsaHv, rsa); } --- 225,229 ---- BIO_free(stringBIO); ! CHECK_OPEN_SSL(rsa) set_RSA_key(p_rsaHv, rsa); } *************** *** 266,270 **** HV* rsa_HV; CODE: ! free_RSA_key( rsa_HV ); SV* --- 260,264 ---- HV* rsa_HV; CODE: ! free_RSA_key(rsa_HV); SV* *************** *** 275,279 **** RSA* rsa; CODE: ! CHECK_OPEN_SSL_CALL(stringBIO = BIO_new(BIO_s_mem())) rsa = get_RSA_key(rsa_HV); PEM_write_bio_RSAPrivateKey(stringBIO, rsa, NULL, NULL, 0, NULL, NULL); --- 269,273 ---- RSA* rsa; CODE: ! CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())) rsa = get_RSA_key(rsa_HV); PEM_write_bio_RSAPrivateKey(stringBIO, rsa, NULL, NULL, 0, NULL, NULL); *************** *** 289,293 **** BIO* stringBIO; CODE: ! CHECK_OPEN_SSL_CALL(stringBIO = BIO_new(BIO_s_mem())) PEM_write_bio_RSAPublicKey(stringBIO, get_RSA_key(rsa_HV)); RETVAL = extractBioString(stringBIO); --- 283,287 ---- BIO* stringBIO; CODE: ! CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())) PEM_write_bio_RSAPublicKey(stringBIO, get_RSA_key(rsa_HV)); RETVAL = extractBioString(stringBIO); *************** *** 302,306 **** BIO* stringBIO; CODE: ! CHECK_OPEN_SSL_CALL(stringBIO = BIO_new(BIO_s_mem())) PEM_write_bio_RSA_PUBKEY(stringBIO, get_RSA_key(rsa_HV)); RETVAL = extractBioString(stringBIO); --- 296,300 ---- BIO* stringBIO; CODE: ! CHECK_OPEN_SSL(stringBIO = BIO_new(BIO_s_mem())) PEM_write_bio_RSA_PUBKEY(stringBIO, get_RSA_key(rsa_HV)); RETVAL = extractBioString(stringBIO); *************** *** 324,338 **** if (items > 3) { ! croak( "Usage: rsa->generate_key($bits [, $exponent])" ); } ! exponent = ( items == 3 ) ? SvIV(ST(2)) : 65535; ! rsa = RSA_generate_key( SvIV(bitsSV), exponent, NULL, NULL ); ! if(rsa == NULL) ! { ! croak( "OpenSSL error: %s", ! ERR_reason_error_string( ERR_get_error() ) ); ! } set_RSA_key(rsa_HV, rsa); --- 318,328 ---- if (items > 3) { ! croak("Usage: rsa->generate_key($bits [, $exponent])"); } ! exponent = (items == 3) ? SvIV(ST(2)) : 65535; ! rsa = RSA_generate_key(SvIV(bitsSV), exponent, NULL, NULL); ! CHECK_OPEN_SSL(rsa) set_RSA_key(rsa_HV, rsa); *************** *** 354,358 **** CODE: { ! if( !( n && e ) ) { croak("At least a modulous and public key must be provided"); --- 344,348 ---- CODE: { ! if (!(n && e)) { croak("At least a modulous and public key must be provided"); *************** *** 361,382 **** rsa->n = n; rsa->e = e; ! if( p || q ) { bn = BN_new(); ctx = BN_CTX_new(); ! if( ! p ) { p = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_div( p, bn, n, q, ctx ) ) ! if( ! BN_is_zero( bn ) ) { croak("q does not divide n"); } } ! else if( ! q ) { q = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_div( q, bn, n, p, ctx ) ) ! if( ! BN_is_zero( bn ) ) { croak("p does not divide n"); --- 351,372 ---- rsa->n = n; rsa->e = e; ! if (p || q) { bn = BN_new(); ctx = BN_CTX_new(); ! if (!p) { p = BN_new(); ! CHECK_OPEN_SSL(BN_div(p, bn, n, q, ctx)) ! if (! BN_is_zero(bn)) { croak("q does not divide n"); } } ! else if (! q) { q = BN_new(); ! CHECK_OPEN_SSL(BN_div(q, bn, n, p, ctx)) ! if (! BN_is_zero(bn)) { croak("p does not divide n"); *************** *** 386,405 **** rsa->q = q; p_minus_1 = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_sub( p_minus_1, p, BN_value_one() ) ) q_minus_1 = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_sub( q_minus_1, q, BN_value_one() ) ) ! if( ! d ) { d = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_mul( bn, p_minus_1, q_minus_1, ctx ) ) ! CHECK_OPEN_SSL_CALL( BN_mod_inverse( d, e, bn, ctx ) ) } rsa->d = d; rsa->dmp1 = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_mod( rsa->dmp1, d, p_minus_1, ctx ) ) rsa->dmq1 = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_mod( rsa->dmq1, d, q_minus_1, ctx ) ) rsa->iqmp = BN_new(); ! CHECK_OPEN_SSL_CALL( BN_mod_inverse( rsa->iqmp, q, p, ctx ) ) BN_clear_free(bn); BN_clear_free(p_minus_1); --- 376,395 ---- rsa->q = q; p_minus_1 = BN_new(); ! CHECK_OPEN_SSL(BN_sub(p_minus_1, p, BN_value_one())) q_minus_1 = BN_new(); ! CHECK_OPEN_SSL(BN_sub(q_minus_1, q, BN_value_one())) ! if (!d) { d = BN_new(); ! CHECK_OPEN_SSL(BN_mul(bn, p_minus_1, q_minus_1, ctx)) ! CHECK_OPEN_SSL(BN_mod_inverse(d, e, bn, ctx)) } rsa->d = d; rsa->dmp1 = BN_new(); ! CHECK_OPEN_SSL(BN_mod(rsa->dmp1, d, p_minus_1, ctx)) rsa->dmq1 = BN_new(); ! CHECK_OPEN_SSL(BN_mod(rsa->dmq1, d, q_minus_1, ctx)) rsa->iqmp = BN_new(); ! CHECK_OPEN_SSL(BN_mod_inverse(rsa->iqmp, q, p, ctx)) BN_clear_free(bn); BN_clear_free(p_minus_1); *************** *** 421,433 **** { RSA* rsa; ! rsa = get_RSA_key( rsa_HV ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->n) ) ) ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->e) ) ) ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->d) ) ) ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->p) ) ) ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->q) ) ) ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->dmp1) ) ) ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->dmq1) ) ) ); ! XPUSHs( sv_2mortal( newSViv( (IV) maybe_BN_dup(rsa->iqmp) ) ) ); } --- 411,423 ---- { RSA* rsa; ! rsa = get_RSA_key(rsa_HV); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->n)))); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->e)))); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->d)))); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->p)))); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->q)))); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->dmp1)))); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->dmq1)))); ! XPUSHs(sv_2mortal(newSViv((IV) maybe_BN_dup(rsa->iqmp)))); } *************** *** 451,474 **** size = RSA_size(rsa); ! if( New( 0,ciphertext, size, char ) == NULL ) { ! croak ( "unable to allocate buffer for ciphertext in package " ! PACKAGE_NAME ); } ! ciphertext_length = RSA_public_encrypt( plaintext_length, ! plaintext, ! ciphertext, ! rsa, ! get_padding(rsa_HV) ); if (ciphertext_length < 0) { Safefree(ciphertext); ! croak( "OpenSSL error: %s", ! ERR_reason_error_string( ERR_get_error() ) ); } ! RETVAL = newSVpv( ciphertext, size ); OUTPUT: RETVAL --- 441,460 ---- size = RSA_size(rsa); ! if (New(0,ciphertext, size, char) == NULL) { ! croak("unable to allocate buffer for ciphertext in package " ! PACKAGE_NAME); } ! ciphertext_length = RSA_public_encrypt( ! plaintext_length, plaintext, ciphertext, rsa, get_padding(rsa_HV)); if (ciphertext_length < 0) { Safefree(ciphertext); ! CHECK_OPEN_SSL(0) } ! RETVAL = newSVpv(ciphertext, size); OUTPUT: RETVAL *************** *** 488,492 **** RSA* rsa; CODE: ! if( ! is_private( rsa_HV ) ) { croak("Public keys cannot decrypt messages."); --- 474,478 ---- RSA* rsa; CODE: ! if (! is_private(rsa_HV)) { croak("Public keys cannot decrypt messages."); *************** *** 497,519 **** rsa = get_RSA_key(rsa_HV); size = RSA_size(rsa); ! if( New( 0, plaintext, size, char ) == NULL ) { ! croak( "unable to allocate buffer for plaintext in package " ! PACKAGE_NAME ); } ! plaintext_length = RSA_private_decrypt(size, ! ciphertext, ! plaintext, ! rsa, ! get_padding(rsa_HV) ); ! if( plaintext_length < 0 ) { Safefree(plaintext); ! croak( "OpenSSL error: %s", ! ERR_reason_error_string( ERR_get_error() ) ); } ! RETVAL = newSVpv( plaintext, plaintext_length ); Safefree(plaintext); OUTPUT: --- 483,502 ---- rsa = get_RSA_key(rsa_HV); size = RSA_size(rsa); ! if (New(0, plaintext, size, char) == NULL) { ! croak("unable to allocate buffer for plaintext in package " ! PACKAGE_NAME); } ! plaintext_length = RSA_private_decrypt( ! size, ciphertext, plaintext, rsa, get_padding(rsa_HV)); ! ! if (plaintext_length < 0) { Safefree(plaintext); ! CHECK_OPEN_SSL(0) } ! RETVAL = newSVpv(plaintext, plaintext_length); Safefree(plaintext); OUTPUT: *************** *** 524,528 **** HV* rsa_HV; CODE: ! RETVAL = RSA_size( get_RSA_key( rsa_HV ) ); OUTPUT: RETVAL --- 507,511 ---- HV* rsa_HV; CODE: ! RETVAL = RSA_size(get_RSA_key(rsa_HV)); OUTPUT: RETVAL *************** *** 532,536 **** HV* rsa_HV; CODE: ! RETVAL = RSA_check_key( get_RSA_key( rsa_HV ) ); OUTPUT: RETVAL --- 515,519 ---- HV* rsa_HV; CODE: ! RETVAL = RSA_check_key(get_RSA_key(rsa_HV)); OUTPUT: RETVAL *************** *** 567,571 **** HV* rsa_HV; CODE: ! set_hash( rsa_HV, NID_md5 ); void --- 550,554 ---- HV* rsa_HV; CODE: ! set_hash(rsa_HV, NID_md5); void *************** *** 573,577 **** HV* rsa_HV; CODE: ! set_hash( rsa_HV, NID_sha1 ); void --- 556,560 ---- HV* rsa_HV; CODE: ! set_hash(rsa_HV, NID_sha1); void *************** *** 579,583 **** HV* rsa_HV; CODE: ! set_hash( rsa_HV, NID_ripemd160 ); void --- 562,566 ---- HV* rsa_HV; CODE: ! set_hash(rsa_HV, NID_ripemd160); void *************** *** 616,647 **** RSA* rsa; CODE: ! if( ! is_private( rsa_HV ) ) { croak("Public keys cannot sign messages."); } ! rsa = get_RSA_key( rsa_HV ); ! if( New( 0, signature, RSA_size(rsa), char ) == NULL) { ! croak( "unable to allocate buffer for ciphertext in package " ! PACKAGE_NAME ); } ! hash = get_hash( rsa_HV ); ! digest = get_message_digest( text_SV, hash ); ! if ( ! RSA_sign( hash, ! digest, ! get_digest_length( hash ), ! signature, ! &signature_length, ! rsa ) ) { ! croak( "OpenSSL error: %s", ! ERR_reason_error_string( ERR_get_error() ) ); } Safefree(digest); ! RETVAL = newSVpvn( signature, signature_length ); ! Safefree( signature ); OUTPUT: RETVAL --- 599,629 ---- RSA* rsa; CODE: ! if (! is_private(rsa_HV)) { croak("Public keys cannot sign messages."); } ! rsa = get_RSA_key(rsa_HV); ! if (New(0, signature, RSA_size(rsa), char) == NULL) { ! croak("unable to allocate buffer for ciphertext in package " ! PACKAGE_NAME); } ! hash = get_hash(rsa_HV); ! digest = get_message_digest(text_SV, hash); ! if (! RSA_sign(hash, ! digest, ! get_digest_length(hash), ! signature, ! &signature_length, ! rsa)) { ! CHECK_OPEN_SSL(0) } Safefree(digest); ! RETVAL = newSVpvn(signature, signature_length); ! Safefree(signature); OUTPUT: RETVAL *************** *** 663,688 **** int result; ! if( is_private( rsa_HV ) ) { croak("Secret keys should not check signatures."); } ! sig = SvPV( sig_SV, sig_length ); rsa = get_RSA_key(rsa_HV); if (RSA_size(rsa) < sig_length) { ! croak( "Signature longer than key" ); } ! hash = get_hash( rsa_HV ); ! digest = get_message_digest( text_SV, hash ); ! result = RSA_verify( hash, ! digest, ! get_digest_length( hash ), ! sig, ! sig_length, ! rsa ); ! Safefree( digest ); ! switch( result ) { case 0: /* FIXME - could there be an error in this case? */ --- 645,666 ---- int result; ! if (is_private(rsa_HV)) { croak("Secret keys should not check signatures."); } ! sig = SvPV(sig_SV, sig_length); rsa = get_RSA_key(rsa_HV); if (RSA_size(rsa) < sig_length) { ! croak("Signature longer than key"); } ! hash = get_hash(rsa_HV); ! digest = get_message_digest(text_SV, hash); ! result = RSA_verify( ! hash, digest, get_digest_length(hash), sig, sig_length, rsa); ! Safefree(digest); ! switch(result) { case 0: /* FIXME - could there be an error in this case? */ *************** *** 693,697 **** break; default: ! croak ( "something went wrong in " PACKAGE_NAME ); break; } --- 671,675 ---- break; default: ! CHECK_OPEN_SSL(0) break; } |