| 1755 | } |
| 1756 | |
| 1757 | private Group successor() |
| 1758 | throws IOException |
| 1759 | { |
| 1760 | Group next = new Group(); |
| 1761 | next.externalPSKs = new HashMap<Secret, byte[]>(externalPSKs); |
| 1762 | next.resumptionPSKs = new HashMap<EpochRef, byte[]>(); |
| 1763 | next.resumptionPSKs.putAll(resumptionPSKs); |
| 1764 | next.epoch = epoch; |
| 1765 | next.groupID = groupID.clone(); |
| 1766 | next.transcriptHash = transcriptHash.copy(); |
| 1767 | next.extensions = new ArrayList<Extension>(); |
| 1768 | next.extensions.addAll(extensions); |
| 1769 | next.keySchedule = keySchedule; |
| 1770 | next.tree = TreeKEMPublicKey.clone(tree); |
| 1771 | next.treePriv = treePriv.copy(); |
| 1772 | next.keys = keys; |
| 1773 | next.suite = suite; |
| 1774 | next.index = index; |
| 1775 | next.identitySk = identitySk.clone(); |
| 1776 | next.pendingProposals = new ArrayList<CachedProposal>(); |
| 1777 | next.cachedUpdate = cachedUpdate; |
| 1778 | |
| 1779 | next.resumptionPSKs.put(new EpochRef(groupID, epoch), keySchedule.resumptionPSK.value().clone()); |
| 1780 | |
| 1781 | return next; |
| 1782 | } |
| 1783 | |
| 1784 | |
| 1785 | private boolean pathRequired(List<CachedProposal> proposals) |