@@ -1695,12 +1695,14 @@ static bool _cjose_jwk_evp_key_from_ec_key(const cjose_jwk_t *jwk, EVP_PKEY **ke
1695
1695
return false;
1696
1696
}
1697
1697
1698
- cjose_jwk_t * cjose_jwk_derive_ecdh_secret (const cjose_jwk_t * jwk_self , const cjose_jwk_t * jwk_peer , cjose_err * err )
1698
+ cjose_jwk_t * cjose_jwk_derive_ecdh_secret (
1699
+ const cjose_jwk_t * jwk_self , const cjose_jwk_t * jwk_peer , const uint8_t * salt , size_t salt_len , cjose_err * err )
1699
1700
{
1700
- return cjose_jwk_derive_ecdh_ephemeral_key (jwk_self , jwk_peer , err );
1701
+ return cjose_jwk_derive_ecdh_ephemeral_key (jwk_self , jwk_peer , salt , salt_len , err );
1701
1702
}
1702
1703
1703
- cjose_jwk_t * cjose_jwk_derive_ecdh_ephemeral_key (const cjose_jwk_t * jwk_self , const cjose_jwk_t * jwk_peer , cjose_err * err )
1704
+ cjose_jwk_t * cjose_jwk_derive_ecdh_ephemeral_key (
1705
+ const cjose_jwk_t * jwk_self , const cjose_jwk_t * jwk_peer , const uint8_t * salt , size_t salt_len , cjose_err * err )
1704
1706
{
1705
1707
uint8_t * secret = NULL ;
1706
1708
size_t secret_len = 0 ;
@@ -1713,11 +1715,10 @@ cjose_jwk_t *cjose_jwk_derive_ecdh_ephemeral_key(const cjose_jwk_t *jwk_self, co
1713
1715
goto _cjose_jwk_derive_shared_secret_fail ;
1714
1716
}
1715
1717
1716
- // HKDF of the DH shared secret (SHA256, no salt, no info, 256 bit expand)
1718
+ // HKDF of the DH shared secret (SHA256, no info, 256 bit expand)
1717
1719
ephemeral_key_len = 32 ;
1718
1720
ephemeral_key = (uint8_t * )cjose_get_alloc ()(ephemeral_key_len );
1719
- if (!cjose_jwk_hkdf (EVP_sha256 (), (uint8_t * )"" , 0 , (uint8_t * )"" , 0 , secret , secret_len , ephemeral_key , ephemeral_key_len ,
1720
- err ))
1721
+ if (!cjose_jwk_hkdf (EVP_sha256 (), salt , salt_len , (uint8_t * )"" , 0 , secret , secret_len , ephemeral_key , ephemeral_key_len , err ))
1721
1722
{
1722
1723
goto _cjose_jwk_derive_shared_secret_fail ;
1723
1724
}
@@ -1747,11 +1748,8 @@ cjose_jwk_t *cjose_jwk_derive_ecdh_ephemeral_key(const cjose_jwk_t *jwk_self, co
1747
1748
return NULL ;
1748
1749
}
1749
1750
1750
- bool cjose_jwk_derive_ecdh_bits (const cjose_jwk_t * jwk_self ,
1751
- const cjose_jwk_t * jwk_peer ,
1752
- uint8_t * * output ,
1753
- size_t * output_len ,
1754
- cjose_err * err )
1751
+ bool cjose_jwk_derive_ecdh_bits (
1752
+ const cjose_jwk_t * jwk_self , const cjose_jwk_t * jwk_peer , uint8_t * * output , size_t * output_len , cjose_err * err )
1755
1753
{
1756
1754
EVP_PKEY_CTX * ctx = NULL ;
1757
1755
EVP_PKEY * pkey_self = NULL ;
@@ -1865,11 +1863,19 @@ bool cjose_jwk_hkdf(const EVP_MD *md,
1865
1863
// HKDF-Extract, HMAC-SHA256(salt, IKM) -> PRK
1866
1864
unsigned int prk_len ;
1867
1865
unsigned char prk [EVP_MAX_MD_SIZE ];
1868
- HMAC (md , salt , salt_len , ikm , ikm_len , prk , & prk_len );
1866
+ if (NULL == HMAC (md , salt , salt_len , ikm , ikm_len , prk , & prk_len ))
1867
+ {
1868
+ CJOSE_ERROR (err , CJOSE_ERR_CRYPTO );
1869
+ return false;
1870
+ }
1869
1871
1870
1872
// HKDF-Expand, HMAC-SHA256(PRK,0x01) -> OKM
1871
1873
const unsigned char t [] = { 0x01 };
1872
- HMAC (md , prk , prk_len , t , sizeof (t ), okm , NULL );
1874
+ if (NULL == HMAC (md , prk , prk_len , t , sizeof (t ), okm , NULL ))
1875
+ {
1876
+ CJOSE_ERROR (err , CJOSE_ERR_CRYPTO );
1877
+ return false;
1878
+ }
1873
1879
1874
1880
return true;
1875
1881
}
0 commit comments