forked from I2P_Developers/i2p.i2p
add caching of EdDSA keys
This commit is contained in:
@@ -51,8 +51,10 @@ import net.i2p.util.NativeBigInteger;
|
|||||||
*/
|
*/
|
||||||
public class SigUtil {
|
public class SigUtil {
|
||||||
|
|
||||||
private static final Map<SigningPublicKey, ECPublicKey> _pubkeyCache = new LHMCache<SigningPublicKey, ECPublicKey>(64);
|
private static final Map<SigningPublicKey, ECPublicKey> _ECPubkeyCache = new LHMCache<SigningPublicKey, ECPublicKey>(64);
|
||||||
private static final Map<SigningPrivateKey, ECPrivateKey> _privkeyCache = new LHMCache<SigningPrivateKey, ECPrivateKey>(16);
|
private static final Map<SigningPrivateKey, ECPrivateKey> _ECPrivkeyCache = new LHMCache<SigningPrivateKey, ECPrivateKey>(16);
|
||||||
|
private static final Map<SigningPublicKey, EdDSAPublicKey> _EdPubkeyCache = new LHMCache<SigningPublicKey, EdDSAPublicKey>(64);
|
||||||
|
private static final Map<SigningPrivateKey, EdDSAPrivateKey> _EdPrivkeyCache = new LHMCache<SigningPrivateKey, EdDSAPrivateKey>(16);
|
||||||
|
|
||||||
private SigUtil() {}
|
private SigUtil() {}
|
||||||
|
|
||||||
@@ -138,14 +140,14 @@ public class SigUtil {
|
|||||||
public static ECPublicKey toJavaECKey(SigningPublicKey pk)
|
public static ECPublicKey toJavaECKey(SigningPublicKey pk)
|
||||||
throws GeneralSecurityException {
|
throws GeneralSecurityException {
|
||||||
ECPublicKey rv;
|
ECPublicKey rv;
|
||||||
synchronized (_pubkeyCache) {
|
synchronized (_ECPubkeyCache) {
|
||||||
rv = _pubkeyCache.get(pk);
|
rv = _ECPubkeyCache.get(pk);
|
||||||
}
|
}
|
||||||
if (rv != null)
|
if (rv != null)
|
||||||
return rv;
|
return rv;
|
||||||
rv = cvtToJavaECKey(pk);
|
rv = cvtToJavaECKey(pk);
|
||||||
synchronized (_pubkeyCache) {
|
synchronized (_ECPubkeyCache) {
|
||||||
_pubkeyCache.put(pk, rv);
|
_ECPubkeyCache.put(pk, rv);
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@@ -156,14 +158,14 @@ public class SigUtil {
|
|||||||
public static ECPrivateKey toJavaECKey(SigningPrivateKey pk)
|
public static ECPrivateKey toJavaECKey(SigningPrivateKey pk)
|
||||||
throws GeneralSecurityException {
|
throws GeneralSecurityException {
|
||||||
ECPrivateKey rv;
|
ECPrivateKey rv;
|
||||||
synchronized (_privkeyCache) {
|
synchronized (_ECPrivkeyCache) {
|
||||||
rv = _privkeyCache.get(pk);
|
rv = _ECPrivkeyCache.get(pk);
|
||||||
}
|
}
|
||||||
if (rv != null)
|
if (rv != null)
|
||||||
return rv;
|
return rv;
|
||||||
rv = cvtToJavaECKey(pk);
|
rv = cvtToJavaECKey(pk);
|
||||||
synchronized (_privkeyCache) {
|
synchronized (_ECPrivkeyCache) {
|
||||||
_privkeyCache.put(pk, rv);
|
_ECPrivkeyCache.put(pk, rv);
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
@@ -213,8 +215,17 @@ public class SigUtil {
|
|||||||
*/
|
*/
|
||||||
public static EdDSAPublicKey toJavaEdDSAKey(SigningPublicKey pk)
|
public static EdDSAPublicKey toJavaEdDSAKey(SigningPublicKey pk)
|
||||||
throws GeneralSecurityException {
|
throws GeneralSecurityException {
|
||||||
return new EdDSAPublicKey(new EdDSAPublicKeySpec(
|
EdDSAPublicKey rv;
|
||||||
pk.getData(), (EdDSAParameterSpec) pk.getType().getParams()));
|
synchronized (_EdPubkeyCache) {
|
||||||
|
rv = _EdPubkeyCache.get(pk);
|
||||||
|
}
|
||||||
|
if (rv != null)
|
||||||
|
return rv;
|
||||||
|
rv = cvtToJavaEdDSAKey(pk);
|
||||||
|
synchronized (_EdPubkeyCache) {
|
||||||
|
_EdPubkeyCache.put(pk, rv);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -222,6 +233,27 @@ public class SigUtil {
|
|||||||
*/
|
*/
|
||||||
public static EdDSAPrivateKey toJavaEdDSAKey(SigningPrivateKey pk)
|
public static EdDSAPrivateKey toJavaEdDSAKey(SigningPrivateKey pk)
|
||||||
throws GeneralSecurityException {
|
throws GeneralSecurityException {
|
||||||
|
EdDSAPrivateKey rv;
|
||||||
|
synchronized (_EdPrivkeyCache) {
|
||||||
|
rv = _EdPrivkeyCache.get(pk);
|
||||||
|
}
|
||||||
|
if (rv != null)
|
||||||
|
return rv;
|
||||||
|
rv = cvtToJavaEdDSAKey(pk);
|
||||||
|
synchronized (_EdPrivkeyCache) {
|
||||||
|
_EdPrivkeyCache.put(pk, rv);
|
||||||
|
}
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static EdDSAPublicKey cvtToJavaEdDSAKey(SigningPublicKey pk)
|
||||||
|
throws GeneralSecurityException {
|
||||||
|
return new EdDSAPublicKey(new EdDSAPublicKeySpec(
|
||||||
|
pk.getData(), (EdDSAParameterSpec) pk.getType().getParams()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static EdDSAPrivateKey cvtToJavaEdDSAKey(SigningPrivateKey pk)
|
||||||
|
throws GeneralSecurityException {
|
||||||
return new EdDSAPrivateKey(new EdDSAPrivateKeySpec(
|
return new EdDSAPrivateKey(new EdDSAPrivateKeySpec(
|
||||||
pk.getData(), (EdDSAParameterSpec) pk.getType().getParams()));
|
pk.getData(), (EdDSAParameterSpec) pk.getType().getParams()));
|
||||||
}
|
}
|
||||||
@@ -570,11 +602,17 @@ public class SigUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static void clearCaches() {
|
public static void clearCaches() {
|
||||||
synchronized(_pubkeyCache) {
|
synchronized(_ECPubkeyCache) {
|
||||||
_pubkeyCache.clear();
|
_ECPubkeyCache.clear();
|
||||||
}
|
}
|
||||||
synchronized(_privkeyCache) {
|
synchronized(_ECPrivkeyCache) {
|
||||||
_privkeyCache.clear();
|
_ECPrivkeyCache.clear();
|
||||||
|
}
|
||||||
|
synchronized(_EdPubkeyCache) {
|
||||||
|
_EdPubkeyCache.clear();
|
||||||
|
}
|
||||||
|
synchronized(_EdPrivkeyCache) {
|
||||||
|
_EdPrivkeyCache.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user