diff options
Diffstat (limited to 'g10/free-packet.c')
-rw-r--r-- | g10/free-packet.c | 171 |
1 files changed, 40 insertions, 131 deletions
diff --git a/g10/free-packet.c b/g10/free-packet.c index 3cf82c8ac..12382b4db 100644 --- a/g10/free-packet.c +++ b/g10/free-packet.c @@ -40,28 +40,20 @@ free_symkey_enc( PKT_symkey_enc *enc ) void free_pubkey_enc( PKT_pubkey_enc *enc ) { - if( is_ELGAMAL(enc->pubkey_algo) ) { - mpi_free( enc->d.elg.a ); - mpi_free( enc->d.elg.b ); - } - else if( is_RSA(enc->pubkey_algo) ) - mpi_free( enc->d.rsa.rsa_integer ); + int n, i; + n = pubkey_get_nenc( enc->pubkey_algo ); + for(i=0; i < n; i++ ) + mpi_free( enc->data[i] ); m_free(enc); } void free_seckey_enc( PKT_signature *sig ) { - if( is_ELGAMAL(sig->pubkey_algo) ) { - mpi_free( sig->d.elg.a ); - mpi_free( sig->d.elg.b ); - } - else if( sig->pubkey_algo == PUBKEY_ALGO_DSA ) { - mpi_free( sig->d.dsa.r ); - mpi_free( sig->d.dsa.s ); - } - else if( is_RSA(sig->pubkey_algo) ) - mpi_free( sig->d.rsa.rsa_integer ); + int n, i; + n = pubkey_get_nenc( sig->pubkey_algo ); + for(i=0; i < n; i++ ) + mpi_free( sig->data[i] ); m_free(sig->hashed_data); m_free(sig->unhashed_data); m_free(sig); @@ -72,23 +64,15 @@ free_seckey_enc( PKT_signature *sig ) void release_public_cert_parts( PKT_public_cert *cert ) { - if( is_ELGAMAL(cert->pubkey_algo) ) { - mpi_free( cert->d.elg.p ); cert->d.elg.p = NULL; - mpi_free( cert->d.elg.g ); cert->d.elg.g = NULL; - mpi_free( cert->d.elg.y ); cert->d.elg.y = NULL; - } - else if( cert->pubkey_algo == PUBKEY_ALGO_DSA ) { - mpi_free( cert->d.dsa.p ); cert->d.dsa.p = NULL; - mpi_free( cert->d.dsa.q ); cert->d.dsa.q = NULL; - mpi_free( cert->d.dsa.g ); cert->d.dsa.g = NULL; - mpi_free( cert->d.dsa.y ); cert->d.dsa.y = NULL; - } - else if( is_RSA(cert->pubkey_algo) ) { - mpi_free( cert->d.rsa.n ); cert->d.rsa.n = NULL; - mpi_free( cert->d.rsa.e ); cert->d.rsa.e = NULL; + int n, i; + n = pubkey_get_npkey( cert->pubkey_algo ); + for(i=0; i < n; i++ ) { + mpi_free( cert->pkey[i] ); + cert->pkey[i] = NULL; } } + void free_public_cert( PKT_public_cert *cert ) { @@ -99,50 +83,26 @@ free_public_cert( PKT_public_cert *cert ) PKT_public_cert * copy_public_cert( PKT_public_cert *d, PKT_public_cert *s ) { + int n, i; + if( !d ) d = m_alloc(sizeof *d); memcpy( d, s, sizeof *d ); - if( is_ELGAMAL(s->pubkey_algo) ) { - d->d.elg.p = mpi_copy( s->d.elg.p ); - d->d.elg.g = mpi_copy( s->d.elg.g ); - d->d.elg.y = mpi_copy( s->d.elg.y ); - } - else if( s->pubkey_algo == PUBKEY_ALGO_DSA ) { - d->d.dsa.p = mpi_copy( s->d.dsa.p ); - d->d.dsa.q = mpi_copy( s->d.dsa.q ); - d->d.dsa.g = mpi_copy( s->d.dsa.g ); - d->d.dsa.y = mpi_copy( s->d.dsa.y ); - } - else if( is_RSA(s->pubkey_algo) ) { - d->d.rsa.n = mpi_copy( s->d.rsa.n ); - d->d.rsa.e = mpi_copy( s->d.rsa.e ); - } + n = pubkey_get_npkey( s->pubkey_algo ); + for(i=0; i < n; i++ ) + d->pkey[i] = mpi_copy( s->pkey[i] ); return d; } void release_secret_cert_parts( PKT_secret_cert *cert ) { - if( is_ELGAMAL(cert->pubkey_algo) ) { - mpi_free( cert->d.elg.p ); cert->d.elg.p = NULL; - mpi_free( cert->d.elg.g ); cert->d.elg.g = NULL; - mpi_free( cert->d.elg.y ); cert->d.elg.y = NULL; - mpi_free( cert->d.elg.x ); cert->d.elg.x = NULL; - } - else if( cert->pubkey_algo == PUBKEY_ALGO_DSA ) { - mpi_free( cert->d.dsa.p ); cert->d.dsa.p = NULL; - mpi_free( cert->d.dsa.q ); cert->d.dsa.q = NULL; - mpi_free( cert->d.dsa.g ); cert->d.dsa.g = NULL; - mpi_free( cert->d.dsa.y ); cert->d.dsa.y = NULL; - mpi_free( cert->d.dsa.x ); cert->d.dsa.x = NULL; - } - else if( is_RSA(cert->pubkey_algo) ) { - mpi_free( cert->d.rsa.n ); cert->d.rsa.n = NULL; - mpi_free( cert->d.rsa.e ); cert->d.rsa.e = NULL; - mpi_free( cert->d.rsa.d ); cert->d.rsa.d = NULL; - mpi_free( cert->d.rsa.p ); cert->d.rsa.p = NULL; - mpi_free( cert->d.rsa.q ); cert->d.rsa.q = NULL; - mpi_free( cert->d.rsa.u ); cert->d.rsa.u = NULL; + int n, i; + + n = pubkey_get_nskey( cert->pubkey_algo ); + for(i=0; i < n; i++ ) { + mpi_free( cert->skey[i] ); + cert->skey[i] = NULL; } } @@ -156,30 +116,14 @@ free_secret_cert( PKT_secret_cert *cert ) PKT_secret_cert * copy_secret_cert( PKT_secret_cert *d, PKT_secret_cert *s ) { + int n, i; + if( !d ) d = m_alloc(sizeof *d); memcpy( d, s, sizeof *d ); - if( is_ELGAMAL(s->pubkey_algo) ) { - d->d.elg.p = mpi_copy( s->d.elg.p ); - d->d.elg.g = mpi_copy( s->d.elg.g ); - d->d.elg.y = mpi_copy( s->d.elg.y ); - d->d.elg.x = mpi_copy( s->d.elg.x ); - } - else if( s->pubkey_algo == PUBKEY_ALGO_DSA ) { - d->d.dsa.p = mpi_copy( s->d.dsa.p ); - d->d.dsa.q = mpi_copy( s->d.dsa.q ); - d->d.dsa.g = mpi_copy( s->d.dsa.g ); - d->d.dsa.y = mpi_copy( s->d.dsa.y ); - d->d.dsa.x = mpi_copy( s->d.dsa.x ); - } - else if( is_RSA(s->pubkey_algo) ) { - d->d.rsa.n = mpi_copy( s->d.rsa.n ); - d->d.rsa.e = mpi_copy( s->d.rsa.e ); - d->d.rsa.d = mpi_copy( s->d.rsa.d ); - d->d.rsa.p = mpi_copy( s->d.rsa.p ); - d->d.rsa.q = mpi_copy( s->d.rsa.q ); - d->d.rsa.u = mpi_copy( s->d.rsa.u ); - } + n = pubkey_get_nskey( s->pubkey_algo ); + for(i=0; i < n; i++ ) + d->skey[i] = mpi_copy( s->skey[i] ); return d; } @@ -298,6 +242,8 @@ free_packet( PACKET *pkt ) int cmp_public_certs( PKT_public_cert *a, PKT_public_cert *b ) { + int n, i; + if( a->timestamp != b->timestamp ) return -1; if( a->valid_days != b->valid_days ) @@ -305,28 +251,9 @@ cmp_public_certs( PKT_public_cert *a, PKT_public_cert *b ) if( a->pubkey_algo != b->pubkey_algo ) return -1; - if( is_ELGAMAL(a->pubkey_algo) ) { - if( mpi_cmp( a->d.elg.p , b->d.elg.p ) ) - return -1; - if( mpi_cmp( a->d.elg.g , b->d.elg.g ) ) - return -1; - if( mpi_cmp( a->d.elg.y , b->d.elg.y ) ) - return -1; - } - else if( a->pubkey_algo == PUBKEY_ALGO_DSA ) { - if( mpi_cmp( a->d.dsa.p , b->d.dsa.p ) ) - return -1; - if( mpi_cmp( a->d.dsa.q , b->d.dsa.q ) ) - return -1; - if( mpi_cmp( a->d.dsa.g , b->d.dsa.g ) ) - return -1; - if( mpi_cmp( a->d.dsa.y , b->d.dsa.y ) ) - return -1; - } - else if( is_RSA(a->pubkey_algo) ) { - if( mpi_cmp( a->d.rsa.n , b->d.rsa.n ) ) - return -1; - if( mpi_cmp( a->d.rsa.e , b->d.rsa.e ) ) + n = pubkey_get_npkey( b->pubkey_algo ); + for(i=0; i < n; i++ ) { + if( mpi_cmp( a->pkey[i], b->pkey[i] ) ) return -1; } @@ -339,6 +266,8 @@ cmp_public_certs( PKT_public_cert *a, PKT_public_cert *b ) int cmp_public_secret_cert( PKT_public_cert *pkc, PKT_secret_cert *skc ) { + int n, i; + if( pkc->timestamp != skc->timestamp ) return -1; if( pkc->valid_days != skc->valid_days ) @@ -346,31 +275,11 @@ cmp_public_secret_cert( PKT_public_cert *pkc, PKT_secret_cert *skc ) if( pkc->pubkey_algo != skc->pubkey_algo ) return -1; - if( is_ELGAMAL(pkc->pubkey_algo) ) { - if( mpi_cmp( pkc->d.elg.p , skc->d.elg.p ) ) - return -1; - if( mpi_cmp( pkc->d.elg.g , skc->d.elg.g ) ) - return -1; - if( mpi_cmp( pkc->d.elg.y , skc->d.elg.y ) ) - return -1; - } - else if( pkc->pubkey_algo == PUBKEY_ALGO_DSA ) { - if( mpi_cmp( pkc->d.dsa.p , skc->d.dsa.p ) ) - return -1; - if( mpi_cmp( pkc->d.dsa.q , skc->d.dsa.q ) ) - return -1; - if( mpi_cmp( pkc->d.dsa.g , skc->d.dsa.g ) ) - return -1; - if( mpi_cmp( pkc->d.dsa.y , skc->d.dsa.y ) ) + n = pubkey_get_npkey( pkc->pubkey_algo ); + for(i=0; i < n; i++ ) { + if( mpi_cmp( pkc->pkey[i] , skc->skey[i] ) ) return -1; } - else if( is_RSA(pkc->pubkey_algo) ) { - if( mpi_cmp( pkc->d.rsa.n , skc->d.rsa.n ) ) - return -1; - if( mpi_cmp( pkc->d.rsa.e , skc->d.rsa.e ) ) - return -1; - } - return 0; } |