Asn1DerEncodeBuffer encBuf = new Asn1DerEncodeBuffer();
etbsCertificate.getObject().encode(encBuf);
byte[] prefix = {0x00};
byte[] version = {0x00}; //V1
byte[] leafType = {0x00}; //TIMESTAMPED_ENTRY_VALUE
byte[] timestamp = Longs.toByteArray(sctTimestamp);
byte[] entryType = {0x00, 0x01}; //PRECERT_ENTRY_VALUE
byte[] issuerPublicKeyHash = Util.getSHA256Hash(subRootCertificate.getSubjectPublicKeyInfo().getEncoded());
byte[] tbsCertificate = encBuf.getMsgCopy();
byte[] tbsCertificateLength = {Util.intToBytes(tbsCertificate.length)[1], Util.intToBytes(tbsCertificate.length)[2], Util.intToBytes(tbsCertificate.length)[3]};
byte[] extensions = {0x00, 0x00};
List<byte[]> byteList = new ArrayList<byte[]>();
byteList.add(prefix);
byteList.add(version);
byteList.add(leafType);
byteList.add(timestamp);
byteList.add(entryType);
byteList.add(issuerPublicKeyHash);
byteList.add(tbsCertificateLength);
byteList.add(tbsCertificate);
byteList.add(extensions);
byte[] leafHash = Util.getSHA256Hash(Util.concat(byteList));
Erdinc.