public static Set<PublicKey> extractKeys(Role role) { if(role instanceof SimpleRole) { return ((SimpleRole) role).getSimpleKeys(); } else if(role instanceof RoleLink) { return extractKeys(role.resolve()); } else if(role instanceof ListRole) { Set<PublicKey> result = new HashSet<>(); ((ListRole) role).getRoles().forEach(r -> result.addAll(extractKeys(r))); return result; } return null; }
@Override public boolean isU(Set<KeyAddress> issuerKeys, String issuerName) { Role issuer = getIssuer(); if(!(issuer instanceof SimpleRole)) return false; Set<KeyAddress> thisIssuerAddresses = new HashSet<>(((SimpleRole)issuer).getSimpleKeyAddresses()); for (PublicKey publicKey : ((SimpleRole)issuer).getSimpleKeys()) thisIssuerAddresses.add(publicKey.getShortAddress()); if (Collections.disjoint(issuerKeys, thisIssuerAddresses)) return false; if ( !issuerName.equals(getDefinition().getData().get("issuerName"))) return false; return true; }
@Test public void serializeMany() throws Exception { SimpleRole sr = new SimpleRole("tr1"); keys.forEach(k-> sr.addKeyRecord(new KeyRecord(k.getPublicKey()))); Binder serialized = DefaultBiMapper.serialize(sr); Role r1 = DefaultBiMapper.deserialize(serialized); assertEquals(sr, r1); Set<PublicKey> kk = ((SimpleRole)r1).getSimpleKeys(); keys.forEach(k->assertTrue(kk.contains(k.getPublicKey()))); }
} else { Set<KeyAddress> thisIssuerAddresses = new HashSet<>(((SimpleRole) issuer).getSimpleKeyAddresses()); for (PublicKey publicKey : ((SimpleRole) issuer).getSimpleKeys()) thisIssuerAddresses.add(publicKey.getShortAddress());