mirror of
https://github.com/openjdk/jdk.git
synced 2025-08-28 15:24:43 +02:00
8258915: Temporary buffer cleanup
Reviewed-by: valeriep
This commit is contained in:
parent
31d8a19e47
commit
f834557ae0
79 changed files with 1517 additions and 1039 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 1996, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 1996, 2021, 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
|
||||
|
@ -169,6 +169,17 @@ extends ByteArrayOutputStream implements DerEncoder {
|
|||
write(buf, 0, buf.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Marshals a DER integer on the output stream.
|
||||
*
|
||||
* @param i the integer in bytes, equivalent to BigInteger::toByteArray.
|
||||
*/
|
||||
public void putInteger(byte[] buf) throws IOException {
|
||||
write(DerValue.tag_Integer);
|
||||
putLength(buf.length);
|
||||
write(buf, 0, buf.length);
|
||||
}
|
||||
|
||||
/**
|
||||
* Marshals a DER integer on the output stream.
|
||||
* @param i the integer in the form of an Integer.
|
||||
|
@ -575,4 +586,8 @@ extends ByteArrayOutputStream implements DerEncoder {
|
|||
public void derEncode(OutputStream out) throws IOException {
|
||||
out.write(toByteArray());
|
||||
}
|
||||
|
||||
byte[] buf() {
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -286,6 +286,22 @@ public class DerValue {
|
|||
this(tag, buffer.clone(), true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps an DerOutputStream. All bytes currently written
|
||||
* into the stream will become the content of the newly
|
||||
* created DerValue.
|
||||
*
|
||||
* Attention: do not reset the DerOutputStream after this call.
|
||||
* No array copying is made.
|
||||
*
|
||||
* @param tag the tag
|
||||
* @param out the DerOutputStream
|
||||
* @returns a new DerValue using out as its content
|
||||
*/
|
||||
public static DerValue wrap(byte tag, DerOutputStream out) {
|
||||
return new DerValue(tag, out.buf(), 0, out.size(), false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse an ASN.1/BER encoded datum. The entire encoding must hold exactly
|
||||
* one datum, including its tag and length.
|
||||
|
@ -1072,10 +1088,15 @@ public class DerValue {
|
|||
* @return DER-encoded value, including tag and length.
|
||||
*/
|
||||
public byte[] toByteArray() throws IOException {
|
||||
data.pos = data.start; // Compatibility. At head.
|
||||
// Minimize content duplication by writing out tag and length only
|
||||
DerOutputStream out = new DerOutputStream();
|
||||
encode(out);
|
||||
data.pos = data.start; // encode go last, should go back
|
||||
return out.toByteArray();
|
||||
out.write(tag);
|
||||
out.putLength(end - start);
|
||||
int headLen = out.size();
|
||||
byte[] result = Arrays.copyOf(out.buf(), end - start + headLen);
|
||||
System.arraycopy(buffer, start, result, headLen, end - start);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1216,4 +1237,8 @@ public class DerValue {
|
|||
}
|
||||
return result.toArray(new DerValue[0]);
|
||||
}
|
||||
|
||||
public void clear() {
|
||||
Arrays.fill(buffer, start, end, (byte)0);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2006, 2020, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2006, 2021, 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
|
||||
|
@ -25,6 +25,8 @@
|
|||
|
||||
package sun.security.util;
|
||||
|
||||
import jdk.internal.access.SharedSecrets;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.math.BigInteger;
|
||||
import java.security.*;
|
||||
|
@ -122,8 +124,11 @@ public final class ECUtil {
|
|||
throws InvalidKeySpecException {
|
||||
KeyFactory keyFactory = getKeyFactory();
|
||||
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
|
||||
|
||||
return (ECPrivateKey)keyFactory.generatePrivate(keySpec);
|
||||
try {
|
||||
return (ECPrivateKey) keyFactory.generatePrivate(keySpec);
|
||||
} finally {
|
||||
SharedSecrets.getJavaSecuritySpecAccess().clearEncodedKeySpec(keySpec);
|
||||
}
|
||||
}
|
||||
|
||||
public static ECPrivateKey generateECPrivateKey(BigInteger s,
|
||||
|
|
|
@ -47,6 +47,7 @@ import javax.crypto.spec.DHParameterSpec;
|
|||
import javax.crypto.spec.DHPublicKeySpec;
|
||||
import java.math.BigInteger;
|
||||
import java.security.spec.NamedParameterSpec;
|
||||
import java.util.Arrays;
|
||||
|
||||
import sun.security.jca.JCAUtil;
|
||||
|
||||
|
@ -82,8 +83,12 @@ public final class KeyUtil {
|
|||
if (key instanceof SecretKey) {
|
||||
SecretKey sk = (SecretKey)key;
|
||||
String format = sk.getFormat();
|
||||
if ("RAW".equals(format) && sk.getEncoded() != null) {
|
||||
size = (sk.getEncoded().length * 8);
|
||||
if ("RAW".equals(format)) {
|
||||
byte[] encoded = sk.getEncoded();
|
||||
if (encoded != null) {
|
||||
size = (encoded.length * 8);
|
||||
Arrays.fill(encoded, (byte)0);
|
||||
}
|
||||
} // Otherwise, it may be a unextractable key of PKCS#11, or
|
||||
// a key we are not able to handle.
|
||||
} else if (key instanceof RSAKey) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue