8281388: Change wrapping of EncryptedPrivateKeyInfo
Reviewed-by: mbaesken
Backport-of: 405381ce9b44c8b122a06e590e4d8240fd9ba996
diff --git a/src/java.base/share/classes/javax/crypto/EncryptedPrivateKeyInfo.java b/src/java.base/share/classes/javax/crypto/EncryptedPrivateKeyInfo.java
index 09c6974..90b38d9 100644
--- a/src/java.base/share/classes/javax/crypto/EncryptedPrivateKeyInfo.java
+++ b/src/java.base/share/classes/javax/crypto/EncryptedPrivateKeyInfo.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2001, 2017, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2001, 2022, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@@ -83,12 +83,12 @@
"must be non-null");
}
- DerValue val = new DerValue(encoded);
+ this.encoded = encoded.clone();
+ DerValue val = DerValue.wrap(this.encoded);
if (val.tag != DerValue.tag_Sequence) {
throw new IOException("DER header error: no SEQ tag");
}
- this.encoded = encoded.clone();
DerValue[] seq = new DerValue[2];
seq[0] = val.data.getDerValue();
diff --git a/src/java.base/share/classes/sun/security/util/DerValue.java b/src/java.base/share/classes/sun/security/util/DerValue.java
index 4756da5..64dcf2c 100644
--- a/src/java.base/share/classes/sun/security/util/DerValue.java
+++ b/src/java.base/share/classes/sun/security/util/DerValue.java
@@ -306,6 +306,34 @@
}
/**
+ * Wraps a byte array as a single DerValue.
+ *
+ * Attention: no cloning is made.
+ *
+ * @param buf the byte array containing the DER-encoded datum
+ * @returns a new DerValue
+ */
+ public static DerValue wrap(byte[] buf)
+ throws IOException {
+ return wrap(buf, 0, buf.length);
+ }
+
+ /**
+ * Wraps a byte array as a single DerValue.
+ *
+ * Attention: no cloning is made.
+ *
+ * @param buf the byte array containing the DER-encoded datum
+ * @param offset where the encoded datum starts inside {@code buf}
+ * @param len length of bytes to parse inside {@code buf}
+ * @returns a new DerValue
+ */
+ public static DerValue wrap(byte[] buf, int offset, int len)
+ throws IOException {
+ return new DerValue(buf, offset, len);
+ }
+
+ /**
* Get an ASN.1/DER encoded datum from part of a buffer.
* That part of the buffer must hold exactly one datum, including
* its tag and length.