Android Conscrypt не создает исключение InvalidKeyException - PullRequest
0 голосов
/ 21 февраля 2019

При генерации ключей ключей разных размеров (без указания провайдера и с выбранным по умолчанию Conscrypt ), а затем с использованием KeyAgreement для генерации общего секрета, я ожидаю, что будет выдано InvalidKeyException.

После тестирования на 3 устройствах Android я заметил, что на устройстве под управлением Android 9 InvalidKeyException правильно выброшен .

Однако на устройствах под управлением Android 6 и Android7, InvalidKeyException не выброшено .

Вот тест и код, выполняемый в инструментальном тесте:

Тест :

@Test
public void generateECDHSharedSecret_returnsNull_ifKeySizesDifferent() throws NoSuchAlgorithmException {
    KeyPairGenerator deviceKeyGenerator = KeyPairGenerator.getInstance("EC");
    deviceKeyGenerator.initialize(224);
    KeyPairGenerator serverKeyGenerator = KeyPairGenerator.getInstance("EC");
    serverKeyGenerator.initialize(256);
    PublicKey serverPublicKey = deviceKeyGenerator.generateKeyPair().getPublic();
    PrivateKey devicePrivateKey = serverKeyGenerator.generateKeyPair().getPrivate();
    byte[] sharedSecret = ServerKeyAgreement.generateECDHSharedSecret(devicePrivateKey, serverPublicKey);

    Assert.assertNull(sharedSecret);
}

Реализация :

package com.bla.bla;

import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;

import javax.crypto.KeyAgreement;

class ServerKeyAgreement {
    static byte[] generateECDHSharedSecret(PrivateKey privateKey, PublicKey publicKey) {
        try {
            KeyAgreement keyAgreement = KeyAgreement.getInstance("ECDH");
            keyAgreement.init(privateKey);
            keyAgreement.doPhase(publicKey, true);
            return keyAgreement.generateSecret();
        } catch (NoSuchAlgorithmException |
                InvalidKeyException |
                RuntimeException e) {
            return null;
        }
    }
}

Почему InvalidKeyException не выдается на Android 6 и 7, и является ли сгенерированный общий секрет действительно действительным

...