2015-07-08 4 views
3

Я хочу отправить открытый ключ пары открытого и открытого ключей (ECDSA), сгенерированный в моем апплете, на хост-приложение/терминал.Создание открытого ключа ECDSA на стороне хозяина из параметра W

В RSA обычно я бы послал модуль и экспоненту и сгенерировал открытый ключ на стороне хоста.

В ECDSA я читал по ссылке, что мы можем сделать то же самое, если вы берете байты параметра W вне карты Click here: Stackoverflow Answer: encode public key on Java

У меня есть байты W с карты в настоящее время. может кто-нибудь предложить, как создать открытый ключ из этого?

ответ

2

Я написал этот метод для преобразования открытого ключа ЕС в java.security.interfaces.ECPublicKey ключевой объект. Для этого я использую провайдера Bouncy Castle (bcprov-ext-jdk16-1.46.jar). Вы можете скачать последнюю версию с here.

/** 
* This method converts the EC public key (ECPublicKey#getW()) into ECPublicKey 
* @param cardPublicKey as W 
* @param curveName (for example "P-224") 
* @return java.security.interfaces.ECPublicKey 
*/ 
public ECPublicKey ucPublicKeyToPublicKey(byte[] cardPublicKey, String curveName) { 
    //for example curveName = "P-224"; 
    java.security.interfaces.ECPublicKey ecPublicKey = null; // java.security.interfaces.ECPublicKey 
    java.security.KeyFactory kf = null; 

    org.bouncycastle.jce.spec.ECNamedCurveParameterSpec ecNamedCurveParameterSpec = ECNamedCurveTable.getParameterSpec(curveName); 
    org.bouncycastle.math.ec.ECCurve curve = ecNamedCurveParameterSpec.getCurve(); 
    java.security.spec.EllipticCurve ellipticCurve = EC5Util.convertCurve(curve, ecNamedCurveParameterSpec.getSeed()); 
    java.security.spec.ECPoint ecPoint = ECPointUtil.decodePoint(ellipticCurve, cardPublicKey); 
    java.security.spec.ECParameterSpec ecParameterSpec = EC5Util.convertSpec(ellipticCurve, ecNamedCurveParameterSpec); 
    java.security.spec.ECPublicKeySpec publicKeySpec = new java.security.spec.ECPublicKeySpec(ecPoint, ecParameterSpec); 

    try { 
     kf = java.security.KeyFactory.getInstance("EC", "BC"); 
    } catch (Exception e) { 
     System.out.println("Caught Exception kf : " + e.toString()); 
    } 

    try { 
     ecPublicKey = (ECPublicKey) kf.generatePublic(publicKeySpec); 
    } catch (Exception e) { 
     System.out.println("Caught Exception public key: " + e.toString()); 
    } 

    return ecPublicKey; 
}