< prev index next >
src/share/classes/sun/security/x509/AlgorithmId.java
Print this page
rev 1454 : 6871847: AlgorithmId.get("SHA256withECDSA") not available
Reviewed-by: vinnie
rev 1455 : 6870812: enhance security tools to use ECC algorithms
Reviewed-by: vinnie, mullan
rev 1514 : 8049480: Current versions of Java can't verify jars signed and timestamped with Java 9
Reviewed-by: xuelei, mullan
@@ -542,10 +542,22 @@
}
if (name.equalsIgnoreCase("SHA1withECDSA")
|| name.equalsIgnoreCase("ECDSA")) {
return AlgorithmId.sha1WithECDSA_oid;
}
+ if (name.equalsIgnoreCase("SHA224withECDSA")) {
+ return AlgorithmId.sha224WithECDSA_oid;
+ }
+ if (name.equalsIgnoreCase("SHA256withECDSA")) {
+ return AlgorithmId.sha256WithECDSA_oid;
+ }
+ if (name.equalsIgnoreCase("SHA384withECDSA")) {
+ return AlgorithmId.sha384WithECDSA_oid;
+ }
+ if (name.equalsIgnoreCase("SHA512withECDSA")) {
+ return AlgorithmId.sha512WithECDSA_oid;
+ }
// See if any of the installed providers supply a mapping from
// the given algorithm name to an OID string
String oidString;
if (!initOidTable) {
@@ -914,6 +926,72 @@
nameTable.put(pbeWithSHA1AndDES_oid, "PBEWithSHA1AndDES");
nameTable.put(pbeWithSHA1AndRC2_oid, "PBEWithSHA1AndRC2");
nameTable.put(pbeWithSHA1AndDESede_oid, "PBEWithSHA1AndDESede");
nameTable.put(pbeWithSHA1AndRC2_40_oid, "PBEWithSHA1AndRC2_40");
}
+
+ /**
+ * Creates a signature algorithm name from a digest algorithm
+ * name and a encryption algorithm name.
+ */
+ public static String makeSigAlg(String digAlg, String encAlg) {
+ digAlg = digAlg.replace("-", "").toUpperCase(Locale.ENGLISH);
+ if (digAlg.equalsIgnoreCase("SHA")) digAlg = "SHA1";
+
+ encAlg = encAlg.toUpperCase(Locale.ENGLISH);
+ if (encAlg.equals("EC")) encAlg = "ECDSA";
+
+ return digAlg + "with" + encAlg;
+ }
+
+ /**
+ * Extracts the encryption algorithm name from a signature
+ * algorithm name.
+ */
+ public static String getEncAlgFromSigAlg(String signatureAlgorithm) {
+ signatureAlgorithm = signatureAlgorithm.toUpperCase(Locale.ENGLISH);
+ int with = signatureAlgorithm.indexOf("WITH");
+ String keyAlgorithm = null;
+ if (with > 0) {
+ int and = signatureAlgorithm.indexOf("AND", with + 4);
+ if (and > 0) {
+ keyAlgorithm = signatureAlgorithm.substring(with + 4, and);
+ } else {
+ keyAlgorithm = signatureAlgorithm.substring(with + 4);
+ }
+ if (keyAlgorithm.equalsIgnoreCase("ECDSA")) {
+ keyAlgorithm = "EC";
+ }
+ }
+ return keyAlgorithm;
+ }
+
+ /**
+ * Extracts the digest algorithm name from a signature
+ * algorithm name.
+ */
+ public static String getDigAlgFromSigAlg(String signatureAlgorithm) {
+ signatureAlgorithm = signatureAlgorithm.toUpperCase(Locale.ENGLISH);
+ int with = signatureAlgorithm.indexOf("WITH");
+ if (with > 0) {
+ return signatureAlgorithm.substring(0, with);
+ }
+ return null;
+ }
+
+ // Copied from com.sun.crypto.provider.OAEPParameters.convertToStandardName()
+ public static String getStandardDigestName(String internalName) {
+ if (internalName.equals("SHA")) {
+ return "SHA-1";
+ } else if (internalName.equals("SHA224")) {
+ return "SHA-224";
+ } else if (internalName.equals("SHA256")) {
+ return "SHA-256";
+ } else if (internalName.equals("SHA384")) {
+ return "SHA-384";
+ } else if (internalName.equals("SHA512")) {
+ return "SHA-512";
+ } else {
+ return internalName;
+ }
+ }
}
< prev index next >