Estoy intentando obtener un secreto compartido utilizando los métodos ECDH de BouncyCastle en C #, sin embargo, estoy recibiendo una clave compartida que es mucho más corta que los 48 bytes que espero que sean.
Tengo una fuente externa de confianza que me proporciona (Lado A) una clave pública y una clave privada, que se generaron para P192, y tienen una longitud de 48 para el público y 24 para el privado.
Además, estoy recibiendo una clave pública para que el lado B calcule el acuerdo con.
Espero que la clave compartida tenga una longitud de 48, pero que termine con la longitud 24.
string P192publicA = ""; // 48 length key
string P192privateA = ""; // 24 length key
string P192publicB = ""; // 48 length key
DerObjectIdentifier p192Der = Org.BouncyCastle.Asn1.Sec.SecObjectIdentifiers.SecP192r1;
ECKeyGenerationParameters ecparams = new ECKeyGenerationParameters(p192Der, new SecureRandom());
ECCurve curveP192 = ecparams.DomainParameters.Curve;
ECPrivateKeyParameters ecPrivateA = new ECPrivateKeyParameters("ECDSA", new BigInteger(P192privateA, 16), p192Der);
ECPublicKeyParameters ecPublicA = new ECPublicKeyParameters("ECDSA", curveP192.DecodePoint(Hex.Decode("04" + P192publicA)), p192Der);
ECPublicKeyParameters ecPublicB = new ECPublicKeyParameters("ECDSA", curveP192.DecodePoint(Hex.Decode("04" + P192publicB)), p192Der);
IBasicAgreement aKeyAgreeBasic = AgreementUtilities.GetBasicAgreement("ECDHC");
aKeyAgreeBasic.Init(ecPrivateA);
BigInteger k = aKeyAgreeBasic.CalculateAgreement(ecPublicB);
Mi resultado en hexadecimal solo tiene una longitud de 24, mientras que yo esperaba 48.
¿Hay algún error con mi comprensión del mecanismo de acuerdo clave? No estaba seguro de la decodificación de un punto, vi en los ejemplos inflables que agregaron "04" antes de decodificar un punto, y todos los demás prefijos que intenté arrojaron una excepción.
¡Cualquier consejo será muy apreciado!