internal EcdsaCertificate(EVP_PKEY privateKey, X509 certificate, byte[] derCertData, string altNameString, byte[][] chain) { _certData = derCertData; _key = privateKey; _certificate = certificate; _altNameString = altNameString; _chain = chain ?? new byte[0][]; _ecKey = EVP_PKEY_get0_EC_KEY(_key); var group = EC_KEY_get0_group(_ecKey); var curveName = EC_GROUP_get_curve_name(group); _curveName = OBJ_nid2ln(curveName); switch (_curveName) { case "secp256r1": _scheme = SignatureScheme.ecdsa_secp256r1_sha256; _hashType = HashType.SHA256; break; case "secp384r1": _scheme = SignatureScheme.ecdsa_secp384r1_sha384; _hashType = HashType.SHA384; break; case "secp521r1": _scheme = SignatureScheme.ecdsa_secp521r1_sha512; _hashType = HashType.SHA512; break; default: ExceptionHelper.ThrowException(new ArgumentException()); break; } }
internal static extern int ECDSA_size(EC_KEY eckey);
private static extern int EVP_PKEY_assign(EVP_PKEY pkey, EVP_PKEY_type keyType, EC_KEY key);
public static void EVP_PKEY_assign_EC_KEY(EVP_PKEY pkey, EC_KEY key) { var result = EVP_PKEY_assign(pkey, EVP_PKEY_type.EVP_PKEY_EC, key); ThrowOnErrorReturnCode(result); }
internal static extern int EC_KEY_set_public_key(EC_KEY key, EC_POINT point);
internal static extern EC_GROUP EC_KEY_get0_group(EC_KEY group);
public static extern EC_GROUP EC_KEY_get0_group(EC_KEY group);
internal static extern int EVP_PKEY_set1_EC_KEY(EVP_PKEY pkey, EC_KEY key);
internal static extern unsafe int ECDSA_sign(int type, void *dgst, int dgstlen, void *sig, ref int siglen, EC_KEY eckey);
internal static int EVP_PKEY_assign_EC_KEY(EVP_PKEY pkey, EC_KEY key) => EVP_PKEY_assign(pkey, EVP_PKEY_type.EVP_PKEY_EC, key.Ptr);
internal static extern EC_POINT EC_KEY_get0_public_key(EC_KEY key);
public static void EC_KEY_set_public_key(EC_KEY key, EC_POINT point) { var result = Internal_EC_KEY_set_public_key(key, point); ThrowOnErrorReturnCode(result); }
private static extern int Internal_EC_KEY_set_public_key(EC_KEY key, EC_POINT point);