Skip to content

Commit

Permalink
Refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
stevetodd committed Apr 28, 2021
1 parent 164bdef commit e231570
Show file tree
Hide file tree
Showing 76 changed files with 1,706 additions and 1,471 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,14 +20,13 @@
import foundation.identity.keri.controller.spec.RotationSpec;
import foundation.identity.keri.crypto.SignatureOperations;
import foundation.identity.keri.internal.event.ImmutableEventSignature;
import foundation.identity.keri.internal.event.ImmutableEventSignatureCoordinates;
import foundation.identity.keri.internal.event.ImmutableKeyEventCoordinates;
import foundation.identity.keri.internal.event.ImmutableKeyCoordinates;

import java.security.KeyPair;
import java.security.SecureRandom;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

import static foundation.identity.keri.SigningThresholds.unweighted;

Expand Down Expand Up @@ -113,12 +112,12 @@ public ControllableIdentifier newDelegatedIdentifier(Identifier delegator) {
return null;
}

public ControllableIdentifier rotate(Identifier identifier) {
return rotate(identifier, List.of());
public KeyState rotate(Identifier identifier) {
return this.rotate(identifier, List.of());
}

public ControllableIdentifier rotate(Identifier identifier, List<Seal> seals) {
var state = getIdentifierState(identifier);
public KeyState rotate(Identifier identifier, List<Seal> seals) {
var state = this.getIdentifierState(identifier);

if (state == null) {
throw new IllegalArgumentException("identifier state not found in event store");
Expand Down Expand Up @@ -157,13 +156,11 @@ public ControllableIdentifier rotate(Identifier identifier, List<Seal> seals) {
this.keyStore.removeKey(currentKeyCoordinates);
this.keyStore.removeNextKey(currentKeyCoordinates);

var newState = KeyStateProcessor.apply(state, event);

return new DefaultControllableIdentifier(this, newState);
return KeyStateProcessor.apply(state, event);
}

public ControllableIdentifier seal(Identifier identifier, List<Seal> seals) {
var state = getIdentifierState(identifier);
public KeyState seal(Identifier identifier, List<Seal> seals) {
var state = this.getIdentifierState(identifier);

if (state == null) {
throw new IllegalArgumentException("identifier not found in event store");
Expand All @@ -185,16 +182,14 @@ public ControllableIdentifier seal(Identifier identifier, List<Seal> seals) {
this.keyEventValidator.validate(state, event);
this.keyEventStore.append(event);

var newState = KeyStateProcessor.apply(state, event);

return new DefaultControllableIdentifier(this, newState);
return KeyStateProcessor.apply(state, event);
}

public EventSignature sign(Identifier identifier, KeyEvent event) {
var state = getIdentifierState(identifier);
var state = this.getIdentifierState(identifier);

if (state == null) {
throw new IllegalArgumentException("prefix not found in event store");
throw new IllegalArgumentException("identifier not found in event store");
}

var keyCoords = ImmutableKeyCoordinates.of(state.lastEstablishmentEvent(), 0);
Expand All @@ -204,9 +199,10 @@ public EventSignature sign(Identifier identifier, KeyEvent event) {
var ops = SignatureOperations.lookup(keyPair.getPrivate());
var signature = ops.sign(event.bytes(), keyPair.getPrivate());

var eventCoordinates = ImmutableKeyEventCoordinates.of(event);
var eventSigCoords = ImmutableEventSignatureCoordinates.of(eventCoordinates, keyCoords);
return new ImmutableEventSignature(eventSigCoords, keyCoords, signature);
return new ImmutableEventSignature(
event.coordinates(),
state.lastEstablishmentEvent().coordinates(),
Map.of(0, signature));
}

// TODO should be private
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
import foundation.identity.keri.api.event.ConfigurationTrait;
import foundation.identity.keri.api.event.EstablishmentEvent;
import foundation.identity.keri.api.event.EventSignature;
import foundation.identity.keri.api.event.KeyEvent;
import foundation.identity.keri.api.event.KeyConfigurationDigest;
import foundation.identity.keri.api.event.KeyEvent;
import foundation.identity.keri.api.event.KeyEventCoordinates;
import foundation.identity.keri.api.event.SigningThreshold;
import foundation.identity.keri.api.identifier.BasicIdentifier;
import foundation.identity.keri.api.identifier.Identifier;
Expand All @@ -19,16 +20,16 @@
public class DefaultControllableIdentifier implements ControllableIdentifier {

public final Controller controller;
private final KeyState state;
private KeyState state;

public DefaultControllableIdentifier(Controller controller, KeyState initialState) {
this.controller = controller;
this.state = initialState;
}

@Override
public Identifier identifier() {
return this.state.identifier();
public KeyEventCoordinates coordinates() {
return this.state.coordinates();
}

@Override
Expand Down Expand Up @@ -78,17 +79,17 @@ public Optional<Identifier> delegatingIdentifier() {

@Override
public void rotate() {
this.controller.rotate(this.identifier());
this.state = this.controller.rotate(this.identifier());
}

@Override
public void rotate(List<Seal> seals) {
this.controller.rotate(this.identifier(), seals);
this.state = this.controller.rotate(this.identifier(), seals);
}

@Override
public void seal(List<Seal> seals) {
this.controller.seal(this.identifier(), seals);
this.state = this.controller.seal(this.identifier(), seals);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,47 +1,31 @@
package foundation.identity.keri.controller;

import foundation.identity.keri.api.Version;
import foundation.identity.keri.api.event.AttachedEventSignature;
import foundation.identity.keri.api.crypto.Signature;
import foundation.identity.keri.api.event.InceptionEvent;
import foundation.identity.keri.api.event.InteractionEvent;
import foundation.identity.keri.api.event.ReceiptFromBasicIdentifierEvent;
import foundation.identity.keri.api.event.ReceiptFromTransferableIdentifierEvent;
import foundation.identity.keri.api.event.RotationEvent;
import foundation.identity.keri.controller.spec.IdentifierSpec;
import foundation.identity.keri.controller.spec.InteractionSpec;
import foundation.identity.keri.controller.spec.ReceiptFromTransferableIdentifierSpec;
import foundation.identity.keri.controller.spec.ReceiptSpec;
import foundation.identity.keri.controller.spec.RotationSpec;
import foundation.identity.keri.crypto.DigestOperations;
import foundation.identity.keri.internal.event.ImmutableAttachedEventSignature;
import foundation.identity.keri.internal.event.ImmutableKeyEventCoordinates;
import foundation.identity.keri.internal.event.ImmutableInceptionEvent;
import foundation.identity.keri.internal.event.ImmutableInteractionEvent;
import foundation.identity.keri.internal.event.ImmutableReceiptFromBasicIdentifierEvent;
import foundation.identity.keri.internal.event.ImmutableReceiptFromTransferableIdentifierEvent;
import foundation.identity.keri.internal.event.ImmutableRotationEvent;

import java.util.HashSet;
import java.util.Set;

import static java.util.stream.Collectors.toSet;
import java.util.Map;

/**
* @author stephen
*/
public final class EventFactory {

private final EventSerializer eventSerializer = new EventSerializer();
private final KeyEventSerializer eventSerializer = new KeyEventSerializer();

public InceptionEvent inception(IdentifierSpec spec) {
var inceptionStatement = this.eventSerializer.inceptionStatement(spec);
var prefix = IdentifierFactory.identifier(spec, inceptionStatement);
var bytes = this.eventSerializer.serialize(prefix, spec);

var digest = DigestOperations.BLAKE3_256.digest(bytes);
var event = new ImmutableKeyEventCoordinates(prefix, 0, digest);
var signature = spec.signer().sign(bytes);
var eventSignature = new ImmutableAttachedEventSignature(event, 0, signature);

return new ImmutableInceptionEvent(
bytes,
Expand All @@ -55,19 +39,18 @@ public InceptionEvent inception(IdentifierSpec spec) {
spec.witnessThreshold(),
spec.witnesses(),
spec.configurationTraits(),
Set.of(eventSignature));
Map.of(0, signature),
Map.of(),
Map.of());
}

public RotationEvent rotation(RotationSpec spec) {
var bytes = this.eventSerializer.serialize(spec);
var signatures = new HashSet<AttachedEventSignature>();
Map<Integer, Signature> signatures = Map.of();

if (spec.signer() != null) {
var digest = DigestOperations.BLAKE3_256.digest(bytes);
var event = new ImmutableKeyEventCoordinates(spec.identifier(), spec.sequenceNumber(), digest);
var signature = spec.signer().sign(bytes);
var eventSignature = new ImmutableAttachedEventSignature(event, spec.signer().keyIndex(), signature);
signatures.add(eventSignature);
signatures = Map.of(0, signature);
}

return new ImmutableRotationEvent(
Expand All @@ -84,19 +67,18 @@ public RotationEvent rotation(RotationSpec spec) {
spec.addedWitnesses(),
spec.seals(),
bytes,
signatures);
signatures,
Map.of(),
Map.of());
}

public InteractionEvent interaction(InteractionSpec spec) {
var bytes = this.eventSerializer.serialize(spec);
var signatures = new HashSet<AttachedEventSignature>();
Map<Integer, Signature> signatures = Map.of();

if (spec.signer() != null) {
var digest = DigestOperations.BLAKE3_256.digest(bytes);
var event = new ImmutableKeyEventCoordinates(spec.identifier(), spec.sequenceNumber(), digest);
var signature = spec.signer().sign(bytes);
var eventSignature = new ImmutableAttachedEventSignature(event, spec.signer().keyIndex(), signature);
signatures.add(eventSignature);
signatures = Map.of(0, signature);
}

return new ImmutableInteractionEvent(
Expand All @@ -107,40 +89,9 @@ public InteractionEvent interaction(InteractionSpec spec) {
spec.previous(),
spec.seals(),
bytes,
signatures);
}

public ReceiptFromBasicIdentifierEvent receipt(ReceiptSpec spec) {
var bytes = this.eventSerializer.serialize(spec);

return new ImmutableReceiptFromBasicIdentifierEvent(
bytes,
Version.CURRENT,
spec.format(),
spec.receipts()
);
}

public ReceiptFromTransferableIdentifierEvent receipt(ReceiptFromTransferableIdentifierSpec spec) {
if (spec.signatures().isEmpty()) {
throw new IllegalArgumentException("spec signatures are required");
}

var bytes = this.eventSerializer.serialize(spec);
var keyEstablishmentEvent = spec.signatures().iterator().next().key().establishmentEvent();
var attachedSignatures = spec.signatures().stream()
.map(ImmutableAttachedEventSignature::convert)
.map(as -> (AttachedEventSignature) as)
.collect(toSet());

return new ImmutableReceiptFromTransferableIdentifierEvent(
bytes,
Version.CURRENT,
spec.format(),
spec.event(),
keyEstablishmentEvent,
attachedSignatures
);
signatures,
Map.of(),
Map.of());
}

}
Loading

0 comments on commit e231570

Please sign in to comment.