VerifyData (в Finished) всегда использует TLS-определенный PRF, который для TLS1.2 (и DTLS1.2) является удвоенным HMAC, использующим хеш, который может зависеть от набора шифров.Для всех существующих ранее наборов шифров DF TLS1.2 PRF использует SHA256, а новый набор TLS1.2, который вы определили, также использует SHA256.(Фактически он использует SHA256 только для PRF, потому что в наборах GCM не используется HMAC для данных.) В некоторых других новых в TLS1.2 наборах используется SHA384.Кроме того, длина VerifyData в 1.2 формально зависит от набора шифров, но все комплекты до 1.2 должны использовать размер протокола до 1.2, равный 12, и все наборы новичка в 1.2 также используют 12,так что на практике нет никакой разницы.
Однако, следуя вашей сути , ваша проблема в том, что вы включили начальный ClientHello и HelloVerifyRequest , чего не следует делать.См. Предпоследнее (от второго к последнему слово, которое я не часто использую!) В разделе 4.2.1, в верхней части стр. 18 в rfc6347 и в разделе 4.2.6., который также отмечает, хотя это не проблема в вашем примере, что, если для передачи используется фрагментация, вы все равно должны хешировать нефрагментированные сообщения.