栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何从ECPublicKey查找匹配的曲线名称

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何从ECPublicKey查找匹配的曲线名称

我认为我已经使用针对jre类型规范的EC5Util类找到了有效的解决方案。所有具有相同名称的双精度类实例都使它有些混乱,但是现在可以使用这些函数了。

public static final String deriveCurveName(org.bouncycastle.jce.spec.ECParameterSpec ecParameterSpec) throws GeneralSecurityException{    for (@SuppressWarnings("rawtypes")Enumeration names = ECNamedCurveTable.getNames(); names.hasMoreElements();){        final String name = (String)names.nextElement();        final X9ECParameters params = ECNamedCurveTable.getByName(name);        if (params.getN().equals(ecParameterSpec.getN()) && params.getH().equals(ecParameterSpec.getH()) && params.getCurve().equals(ecParameterSpec.getCurve()) && params.getG().equals(ecParameterSpec.getG())){ return name;        }    }    throw new GeneralSecurityException("Could not find name for curve");}public static final String deriveCurveName(PublicKey publicKey) throws GeneralSecurityException{    if(publicKey instanceof java.security.interfaces.ECPublicKey){        final java.security.interfaces.ECPublicKey pk = (java.security.interfaces.ECPublicKey) publicKey;        final ECParameterSpec params = pk.getParams();        return deriveCurveName(EC5Util.convertSpec(params, false));    } else if(publicKey instanceof org.bouncycastle.jce.interfaces.ECPublicKey){        final org.bouncycastle.jce.interfaces.ECPublicKey pk = (org.bouncycastle.jce.interfaces.ECPublicKey) publicKey;        return deriveCurveName(pk.getParameters());    } else throw new IllegalArgumentException("Can only be used with instances of ECPublicKey (either jce or bc implementation)");}public static final String deriveCurveName(PrivateKey privateKey) throws GeneralSecurityException{    if(privateKey instanceof java.security.interfaces.ECPrivateKey){        final java.security.interfaces.ECPrivateKey pk = (java.security.interfaces.ECPrivateKey) privateKey;        final ECParameterSpec params = pk.getParams();        return deriveCurveName(EC5Util.convertSpec(params, false));    } else if(privateKey instanceof org.bouncycastle.jce.interfaces.ECPrivateKey){        final org.bouncycastle.jce.interfaces.ECPrivateKey pk = (org.bouncycastle.jce.interfaces.ECPrivateKey) privateKey;        return deriveCurveName(pk.getParameters());    } else throw new IllegalArgumentException("Can only be used with instances of ECPrivateKey (either jce or bc implementation)");}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/464380.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号