aboutsummaryrefslogtreecommitdiffstats
path: root/g10/seskey.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>1998-06-15 15:41:04 +0000
committerWerner Koch <[email protected]>1998-06-15 15:41:04 +0000
commit6e1ca6b80fb50ff5e1c065b7ac12635487b4a6d2 (patch)
tree7c4a888893a91b59753b3d89e59832f8c24ba039 /g10/seskey.c
parentgnupg extension are now working (diff)
downloadgnupg-6e1ca6b80fb50ff5e1c065b7ac12635487b4a6d2.tar.gz
gnupg-6e1ca6b80fb50ff5e1c065b7ac12635487b4a6d2.zip
extensions are now working and fixed a lot of bugs
Diffstat (limited to '')
-rw-r--r--g10/seskey.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/g10/seskey.c b/g10/seskey.c
index 25819909c..5b271a2d4 100644
--- a/g10/seskey.c
+++ b/g10/seskey.c
@@ -144,13 +144,25 @@ do_encode_md( MD_HANDLE md, int algo, size_t len, unsigned nbits,
MPI
-encode_md_value( MD_HANDLE md, int hash_algo, unsigned nbits )
+encode_md_value( int pubkey_algo, MD_HANDLE md, int hash_algo, unsigned nbits )
{
int algo = hash_algo? hash_algo : md_get_algo(md);
const byte *asn;
size_t asnlen, mdlen;
-
- asn = md_asn_oid( algo, &asnlen, &mdlen );
- return do_encode_md( md, algo, mdlen, nbits, asn, asnlen );
+ MPI frame;
+
+ if( pubkey_algo == PUBKEY_ALGO_DSA ) {
+ frame = md_is_secure(md)? mpi_alloc_secure((md_digest_length(hash_algo)
+ +BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB )
+ : mpi_alloc((md_digest_length(hash_algo)
+ +BYTES_PER_MPI_LIMB-1) / BYTES_PER_MPI_LIMB );
+ mpi_set_buffer( frame, md_read(md, hash_algo),
+ md_digest_length(hash_algo), 0 );
+ }
+ else {
+ asn = md_asn_oid( algo, &asnlen, &mdlen );
+ frame = do_encode_md( md, algo, mdlen, nbits, asn, asnlen );
+ }
+ return frame;
}