aboutsummaryrefslogtreecommitdiffstats
path: root/g10/build-packet.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1998-05-03 15:42:08 +0000
committerWerner Koch <[email protected]>1998-05-03 15:42:08 +0000
commit823d39fd5552d69de03bc74e9cb460c523828606 (patch)
tree0d03d13cac14266966ce00d34e2f11fcd1d52bc6 /g10/build-packet.c
parentxxx (diff)
downloadgnupg-823d39fd5552d69de03bc74e9cb460c523828606.tar.gz
gnupg-823d39fd5552d69de03bc74e9cb460c523828606.zip
Aenderungen in der Eifel
Diffstat (limited to 'g10/build-packet.c')
-rw-r--r--g10/build-packet.c51
1 files changed, 43 insertions, 8 deletions
diff --git a/g10/build-packet.c b/g10/build-packet.c
index 8d897ca88..384957515 100644
--- a/g10/build-packet.c
+++ b/g10/build-packet.c
@@ -38,6 +38,7 @@ static int do_comment( IOBUF out, int ctb, PKT_comment *rem );
static int do_user_id( IOBUF out, int ctb, PKT_user_id *uid );
static int do_public_cert( IOBUF out, int ctb, PKT_public_cert *pk );
static int do_secret_cert( IOBUF out, int ctb, PKT_secret_cert *pk );
+static int do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc );
static int do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc );
static u32 calc_plaintext( PKT_plaintext *pt );
static int do_plaintext( IOBUF out, int ctb, PKT_plaintext *pt );
@@ -85,6 +86,9 @@ build_packet( IOBUF out, PACKET *pkt )
case PKT_SECRET_CERT:
rc = do_secret_cert( out, ctb, pkt->pkt.secret_cert );
break;
+ case PKT_SYMKEY_ENC:
+ rc = do_symkey_enc( out, ctb, pkt->pkt.symkey_enc );
+ break;
case PKT_PUBKEY_ENC:
rc = do_pubkey_enc( out, ctb, pkt->pkt.pubkey_enc );
break;
@@ -129,6 +133,7 @@ calc_packet_length( PACKET *pkt )
case PKT_COMMENT:
case PKT_PUBLIC_CERT:
case PKT_SECRET_CERT:
+ case PKT_SYMKEY_ENC:
case PKT_PUBKEY_ENC:
case PKT_ENCRYPTED:
case PKT_SIGNATURE:
@@ -270,13 +275,13 @@ do_secret_cert( IOBUF out, int ctb, PKT_secret_cert *skc )
if( skc->is_protected ) {
iobuf_put(a, 0xff );
iobuf_put(a, skc->protect.algo );
- iobuf_put(a, skc->protect.s2k );
- iobuf_put(a, skc->protect.hash );
- if( skc->protect.s2k == 1
- || skc->protect.s2k == 3 )
- iobuf_write(a, skc->protect.salt, 8 );
- if( skc->protect.s2k == 3 )
- iobuf_put(a, skc->protect.count );
+ iobuf_put(a, skc->protect.s2k.mode );
+ iobuf_put(a, skc->protect.s2k.hash_algo );
+ if( skc->protect.s2k.mode == 1
+ || skc->protect.s2k.mode == 4 )
+ iobuf_write(a, skc->protect.s2k.salt, 8 );
+ if( skc->protect.s2k.mode == 4 )
+ write_32(a, skc->protect.s2k.count );
iobuf_write(a, skc->protect.iv, 8 );
}
else
@@ -315,6 +320,37 @@ do_secret_cert( IOBUF out, int ctb, PKT_secret_cert *skc )
}
static int
+do_symkey_enc( IOBUF out, int ctb, PKT_symkey_enc *enc )
+{
+ int rc = 0;
+ IOBUF a = iobuf_temp();
+
+ assert( enc->version == 4 );
+ switch( enc->s2k.mode ) {
+ case 0: case 1: case 4: break;
+ default: log_bug("do_symkey_enc: s2k=%d\n", enc->s2k.mode );
+ }
+ iobuf_put( a, enc->version );
+ iobuf_put( a, enc->cipher_algo );
+ iobuf_put( a, enc->s2k.mode );
+ iobuf_put( a, enc->s2k.hash_algo );
+ if( enc->s2k.mode == 1 || enc->s2k.mode == 4 ) {
+ iobuf_write(a, enc->s2k.salt, 8 );
+ if( enc->s2k.mode == 4 )
+ write_32(a, enc->s2k.count);
+ }
+ if( enc->seskeylen )
+ iobuf_write(a, enc->seskey, enc->seskeylen );
+
+ write_header(out, ctb, iobuf_get_temp_length(a) );
+ if( iobuf_write_temp( out, a ) )
+ rc = G10ERR_WRITE_FILE;
+
+ iobuf_close(a);
+ return rc;
+}
+
+static int
do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc )
{
int rc = 0;
@@ -348,7 +384,6 @@ do_pubkey_enc( IOBUF out, int ctb, PKT_pubkey_enc *enc )
-
static u32
calc_plaintext( PKT_plaintext *pt )
{