Estoy tratando de refactorizar algún código del lado del cliente de BouncyCastle a Microsoft Cng. Descubrí cómo convertir formato de clave (blobs de ECC) entre ellos, pero no pude calcular el mismo secreto.
Actualmente, el cliente usa Org.BouncyCastle.Crypto.Agreement.ECDHBasicAgreement.CalculateAgreement()
para calcular el secreto compartido. La longitud del secreto compartido depende de la curva (por ejemplo, la longitud de los secretos compartidos para SecP224k1
es 28 bytes).
Microsoft Cng ( System.Security.Cryptography.ECDiffieHellman
) proporciona varios métodos: DeriveKeyMaterial
, DeriveKeyFromHash
. Sin embargo, ninguno de ellos devuelve un resultado de 28 bytes. DeriveKeyFromHash devuelve bytes de 16/20/32/48/64 depende de HashAlgorithm, y DeriveKeyMaterial devuelve los mismos 32 bytes que DeriveKeyFromHash (SHA256).
Editar: DeriveKey de Microsoft Cng devuelve el secreto Hash
¿Cómo calcular el mismo secreto usando Microsoft Cng?