Hi,

I noticed that the DTLS record layer MAC is computed using wrong input.
* Instead of using DTLS version , it's using TLS version.
* DTLS record layer epoch is also missing.

Please find patch file attached.

I am looking forward to 0.9.8f as it is closing the non-RFC compliance gap.
When will it be released?

Thanks,
Alex.
Index: t1_enc.c
===================================================================
RCS file: /data1/Repository/openssl/ssl/t1_enc.c,v
retrieving revision 1.35.2.3
diff -r1.35.2.3 t1_enc.c
721a722
>     unsigned char dtls_sequence[8];
723,736c724,737
< 	if (send)
< 		{
< 		rec= &(ssl->s3->wrec);
< 		mac_sec= &(ssl->s3->write_mac_secret[0]);
< 		seq= &(ssl->s3->write_sequence[0]);
< 		hash=ssl->write_hash;
< 		}
< 	else
< 		{
< 		rec= &(ssl->s3->rrec);
< 		mac_sec= &(ssl->s3->read_mac_secret[0]);
< 		seq= &(ssl->s3->read_sequence[0]);
< 		hash=ssl->read_hash;
< 		}
---
>     if (send)
>         {
>             rec= &(ssl->s3->wrec);
>             mac_sec= &(ssl->s3->write_mac_secret[0]);
>             seq= &(ssl->s3->write_sequence[0]);
>             hash=ssl->write_hash;
>         }
>     else
>         {
>             rec= &(ssl->s3->rrec);
>             mac_sec= &(ssl->s3->read_mac_secret[0]);
>             seq= &(ssl->s3->read_sequence[0]);
>             hash=ssl->read_hash;
>         }
741,742c742,743
< 	buf[1]=TLS1_VERSION_MAJOR;
< 	buf[2]=TLS1_VERSION_MINOR;
---
>     buf[1]=SSL_version(ssl) >> 8;
>     buf[2]=SSL_version(ssl) & 0xff;
749c750,768
< 	HMAC_Update(&hmac,seq,8);
---
> 
>     if(SSL_version(ssl) == DTLS1_VERSION)
>         {
>             bzero(dtls_sequence, 8);
>             seq = dtls_sequence;
>             if (send) 
>                 {
>                     s2n(ssl->d1->w_epoch, seq);
>                     memcpy(seq, &(ssl->s3->write_sequence[2]), 6);
>                 }
>             else
>                 {
>                     s2n(ssl->d1->r_epoch, seq);
>                     memcpy(seq, &(ssl->s3->read_sequence[2]), 6);
>                 }
>             seq = dtls_sequence;
>         }
> 
>     HMAC_Update(&hmac,seq,8);
763c782
< {unsigned int z; for (z=0; z<rec->length; z++) printf("%02X ",buf[z]); printf("\n"); }
---
> {unsigned int z; for (z=0; z<rec->length; z++) printf("%02X ",rec->input[z]); printf("\n"); }

Reply via email to