@@ -613,13 +613,13 @@ PHP_FUNCTION(hkdf)
613
613
return ;
614
614
}
615
615
616
- ops = php_hash_fetch_ops (algo -> val , algo -> len );
616
+ ops = php_hash_fetch_ops (ZSTR_VAL ( algo ), ZSTR_LEN ( algo ) );
617
617
if (!ops ) {
618
- php_error_docref (NULL , E_WARNING , "Unknown hashing algorithm: %s" , algo -> val , algo -> len );
618
+ php_error_docref (NULL , E_WARNING , "Unknown hashing algorithm: %s" , ZSTR_VAL ( algo ), ZSTR_LEN ( algo ) );
619
619
RETURN_FALSE ;
620
620
}
621
621
622
- if (ikm -> len < = 0 ) {
622
+ if (ZSTR_LEN ( ikm ) = = 0 ) {
623
623
php_error_docref (NULL , E_WARNING , "Input keying material cannot be empty" );
624
624
RETURN_FALSE ;
625
625
}
@@ -636,26 +636,23 @@ PHP_FUNCTION(hkdf)
636
636
RETURN_FALSE ;
637
637
}
638
638
639
- if (salt != NULL && salt -> len > 0 ) {
640
- computed_salt = emalloc (salt -> len );
641
- memcpy (computed_salt , salt -> val , salt -> len );
639
+ if (salt != NULL && ZSTR_LEN ( salt ) > 0 ) {
640
+ computed_salt = emalloc (ZSTR_LEN ( salt ) );
641
+ memcpy (computed_salt , ZSTR_VAL ( salt ), ZSTR_LEN ( salt ) );
642
642
}
643
643
else {
644
644
computed_salt = emalloc (ops -> digest_size );
645
- for (i = 0 ; i < ops -> digest_size ; i ++ )
646
- {
647
- computed_salt [i ] = 0x00 ;
648
- }
645
+ memset (computed_salt , 0x00 , ops -> digest_size );
649
646
}
650
647
651
648
context = emalloc (ops -> context_size );
652
649
653
650
// Extract
654
651
ops -> hash_init (context );
655
652
K = emalloc (ops -> block_size );
656
- php_hash_hmac_prep_key (K , ops , context , computed_salt , (salt != NULL && salt -> len ? salt -> len : ops -> digest_size ));
657
- prk = safe_emalloc (ops -> digest_size , ops -> digest_size , 0 );
658
- php_hash_hmac_round (prk , ops , context , K , ikm -> val , ikm -> len );
653
+ php_hash_hmac_prep_key (K , ops , context , computed_salt , (salt != NULL && ZSTR_LEN ( salt ) ? ZSTR_LEN ( salt ) : ops -> digest_size ));
654
+ prk = safe_emalloc (ops -> block_size , 1 , 0 );
655
+ php_hash_hmac_round (prk , ops , context , K , ZSTR_VAL ( ikm ), ZSTR_LEN ( ikm ) );
659
656
php_hash_string_xor_char (K , K , 0x6A , ops -> block_size );
660
657
php_hash_hmac_round (prk , ops , context , K , prk , ops -> digest_size );
661
658
ZEND_SECURE_ZERO (K , ops -> block_size );
@@ -664,7 +661,7 @@ PHP_FUNCTION(hkdf)
664
661
// Expand
665
662
returnval = zend_string_alloc (length , 0 );
666
663
digest = emalloc (ops -> digest_size );
667
- for (i = 1 , rounds = ceil (( float ) length / ( float ) ops -> digest_size ) ; i <= rounds ; i ++ ) {
664
+ for (i = 1 , rounds = ( length - 1 ) / ops -> digest_size + 1 ; i <= rounds ; i ++ ) {
668
665
// chr(i)
669
666
unsigned char c [1 ];
670
667
c [0 ] = (i & 0xFF );
@@ -677,8 +674,8 @@ PHP_FUNCTION(hkdf)
677
674
ops -> hash_update (context , digest , ops -> digest_size );
678
675
}
679
676
680
- if (info != NULL && info -> len > 0 ) {
681
- ops -> hash_update (context , info -> val , info -> len );
677
+ if (info != NULL && ZSTR_LEN ( info ) > 0 ) {
678
+ ops -> hash_update (context , ZSTR_VAL ( info ), ZSTR_LEN ( info ) );
682
679
}
683
680
684
681
ops -> hash_update (context , c , 1 );
0 commit comments