From f46272ff6b39786dd005048186e53f58f4760d1c Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:16:31 -0500 Subject: [PATCH 001/169] Updates inputs, outputs and add two new classes --- .../sul/mapper/symbols/outputs/EdhocOutputBuilder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java index cc32871b..7571e2cd 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java @@ -2,9 +2,9 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; -public class EdhocOutputBuilder extends OutputBuilder { +public class EdhocOutputBuilder implements OutputBuilder { @Override - public EdhocOutput buildOutputExact(String name) { + public EdhocOutput buildOutput(String name) { return new EdhocOutput(name); } } From 63296f9cb502558f8c7760aa0a32140223435fda Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:18:30 -0500 Subject: [PATCH 002/169] Update mapper related classes --- .../components/sul/mapper/context/EdhocMapperState.java | 6 ++++++ .../components/sul/mapper/mappers/EdhocInputMapper.java | 8 +++----- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java index 81e23031..256e7e67 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java @@ -27,6 +27,12 @@ /** Adapted from test files EdhocClient / EdhocServer from edhoc repo */ public abstract class EdhocMapperState { + // The protocol version of edhoc used for the session of this state + protected ProtocolVersion protocolVersion; + + // The combined message (EDHOC+OSCORE) version used for the session of this state + protected CombinedMessageVersion combinedMessageVersion; + // The authentication method to include in EDHOC message_1 (relevant only when Initiator) protected int authenticationMethod; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java index 27c8ab36..0bb9a9b4 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java @@ -6,7 +6,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; import org.eclipse.californium.core.coap.MediaTypeRegistry; @@ -14,7 +14,7 @@ public class EdhocInputMapper extends InputMapper { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapper(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + public EdhocInputMapper(MapperConfig mapperConfig, OutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } @@ -27,9 +27,7 @@ protected void sendMessage(EdhocProtocolMessage message, EdhocExecutionContext c // enable or disable content format EdhocMapperConfig edhocMapperConfig = (EdhocMapperConfig) mapperConfig; - int contentFormat = edhocMapperConfig.useContentFormat() ? - message.getContentFormat(edhocMapperConfig.useOldContentFormat()) : - MediaTypeRegistry.UNDEFINED; + int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat() : MediaTypeRegistry.UNDEFINED; edhocMapperConnector.send(message.getPayload(), message.getPayloadType(), message.getMessageCode(), contentFormat); } From da28243d7af947b53966351873a18fcde8c72b04 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:19:06 -0500 Subject: [PATCH 003/169] Update sul related classes --- .../components/sul/core/EdhocSul.java | 71 ++++++++----------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java index 002690ea..a04af1bf 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java @@ -1,6 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ClientMapperConnector; @@ -21,7 +22,11 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.Mapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -30,14 +35,10 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSul implements AbstractSul { +public class EdhocSul extends AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); - - protected SulConfig sulConfig; - protected CleanupTasks cleanupTasks; - protected EdhocMapperConfig edhocMapperConfig; - protected EdhocMapperComposer edhocMapperComposer; protected EdhocExecutionContext edhocExecutionContext; + protected ProtocolVersion protocolVersion; protected Long originalTimeout; protected EdhocMapperState edhocMapperState; protected EdhocMapperConnector edhocMapperConnector; @@ -90,34 +91,11 @@ public EdhocSul initialize() { return this; } - @Override - public SulConfig getSulConfig() { - return sulConfig; - } - - @Override - public CleanupTasks getCleanupTasks() { - return cleanupTasks; - } - - @Override - public EdhocMapperComposer getMapper() { - return edhocMapperComposer; - } - - @Override - public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) { - throw new RuntimeException("No dynamic port provider available"); - } - - @Override - public DynamicPortProvider getDynamicPortProvider() { - throw new RuntimeException("No dynamic port provider available"); - } - - @Override - public SulAdapter getSulAdapter() { - throw new RuntimeException("No sul adapter available"); + protected Mapper buildMapper(MapperConfig mapperConfig, EdhocMapperConnector edhocMapperConnector) { + return new EdhocMapperComposer ( + new EdhocInputMapper(mapperConfig, new EdhocOutputChecker(), edhocMapperConnector), + new EdhocOutputMapper(mapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), edhocMapperConnector) + ); } @Override @@ -175,12 +153,12 @@ public EdhocOutput step(EdhocInput abstractInput) { edhocExecutionContext.addStepContext(); if (!edhocExecutionContext.isExecutionEnabled()) { - return edhocMapperComposer.getOutputMapper().disabled(); + return ((EdhocMapperComposer) mapper).getOutputMapper().disabled(); } - EdhocOutput abstractOutput = executeInput(abstractInput); + EdhocOutput abstractOutput = executeInput(abstractInput, mapper); - if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { + if (mapper.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { // this should lead to a disabled sink state edhocExecutionContext.disableExecution(); } @@ -190,7 +168,7 @@ public EdhocOutput step(EdhocInput abstractInput) { return abstractOutput; } - protected EdhocOutput executeInput(EdhocInput abstractInput) { + protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper mapper) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse @@ -203,7 +181,7 @@ protected EdhocOutput executeInput(EdhocInput abstractInput) { timeoutChanged = true; } - EdhocOutput abstractOutput = edhocMapperComposer.execute(abstractInput, edhocExecutionContext); + EdhocOutput abstractOutput = mapper.execute(abstractInput, edhocExecutionContext); // reset timeout if (timeoutChanged) { @@ -223,11 +201,12 @@ protected void serverWaitForInitialMessage() { return; } + EdhocMapperComposer mapperComposer = (EdhocMapperComposer) mapper; ServerMapperConnector serverMapperConnector = (ServerMapperConnector) edhocMapperConnector; - EdhocOutputChecker edhocOutputChecker = edhocMapperComposer.getOutputChecker(); + EdhocOutputChecker edhocOutputChecker = (EdhocOutputChecker) mapperComposer.getOutputChecker(); serverMapperConnector.waitForClientMessage(); - EdhocOutput abstractOutput = edhocMapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); + EdhocOutput abstractOutput = mapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); boolean isExpectedMessage = edhocOutputChecker.isMessage(abstractOutput, expectedMessageType); if (!isExpectedMessage) { @@ -239,4 +218,12 @@ protected void serverWaitForInitialMessage() { serverWaitForInitialMessageDone = true; } + + protected static class EdhocMapperComposer extends MapperComposer { + public EdhocMapperComposer( + InputMapper inputMapper, + OutputMapper outputMapper) { + super(inputMapper, outputMapper); + } + } } From 844d3d9ef17555a07ba4630606d2794a66bdd932 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:20:09 -0500 Subject: [PATCH 004/169] Update outer classes --- .../protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java | 6 +----- .../java/com/github/protocolfuzzing/edhocfuzzer/Main.java | 4 +++- .../github/protocolfuzzing/edhocfuzzer/MultiBuilder.java | 8 ++------ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java index a1557619..d7e19672 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java @@ -14,11 +14,7 @@ public class EdhocDotProcessor { private static final Logger LOGGER = LogManager.getLogger(); - public static void beautify(LearnerResult learnerResult) { - if (learnerResult.isFromTest()) { - return; - } - + public static void beautify(LearnerResult learnerResult) { if (learnerResult.isEmpty()) { LOGGER.warn("Provided empty LearnerResult"); return; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index 62e97580..417adcff 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -1,5 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser; import java.util.List; @@ -9,7 +11,7 @@ public static void main(String[] args) { MultiBuilder mb = new MultiBuilder(); String[] parentLoggers = {Main.class.getPackageName()}; - CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); + CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); commandLineParser.setExternalParentLoggers(parentLoggers); commandLineParser.parse(args, true, List.of(EdhocDotProcessor::beautify)); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java index 07e70c31..d57a3224 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java @@ -35,11 +35,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; -public class MultiBuilder implements - StateFuzzerConfigBuilder, - StateFuzzerBuilder>, - TestRunnerBuilder, - TimingProbeBuilder { +public class MultiBuilder implements StateFuzzerConfigBuilder, StateFuzzerBuilder, TestRunnerBuilder, TimingProbeBuilder { protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) @@ -68,7 +64,7 @@ public StateFuzzerServerConfig buildServerConfig() { } @Override - public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { + public StateFuzzer build(StateFuzzerEnabler stateFuzzerEnabler) { return new StateFuzzerStandard<>( new StateFuzzerComposerStandard<>(stateFuzzerEnabler, alphabetBuilder, sulBuilder).initialize() ); From 0032ca7e344f82b051bacc8c0f9c124db3e65e16 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:20:26 -0500 Subject: [PATCH 005/169] Update setup_fuzzer pointing to generics branch --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 3d75fd70..cd55d848 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,7 +8,7 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="42392348464ab4cebb3a4c7b149c21caf6ee9c4e" + CHECKOUT="generics" set -e cd "${BASE_DIR}" From 4ddf75d6d9ab95031260b7dcd1eebd79fa7f12d8 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 23:28:00 -0500 Subject: [PATCH 006/169] Update according to generic machine model --- .../protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java | 6 +++++- .../java/com/github/protocolfuzzing/edhocfuzzer/Main.java | 4 +--- .../github/protocolfuzzing/edhocfuzzer/MultiBuilder.java | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java index d7e19672..a1557619 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java @@ -14,7 +14,11 @@ public class EdhocDotProcessor { private static final Logger LOGGER = LogManager.getLogger(); - public static void beautify(LearnerResult learnerResult) { + public static void beautify(LearnerResult learnerResult) { + if (learnerResult.isFromTest()) { + return; + } + if (learnerResult.isEmpty()) { LOGGER.warn("Provided empty LearnerResult"); return; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index 417adcff..62e97580 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -1,7 +1,5 @@ package com.github.protocolfuzzing.edhocfuzzer; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser; import java.util.List; @@ -11,7 +9,7 @@ public static void main(String[] args) { MultiBuilder mb = new MultiBuilder(); String[] parentLoggers = {Main.class.getPackageName()}; - CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); + CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); commandLineParser.setExternalParentLoggers(parentLoggers); commandLineParser.parse(args, true, List.of(EdhocDotProcessor::beautify)); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java index d57a3224..07e70c31 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java @@ -35,7 +35,11 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; -public class MultiBuilder implements StateFuzzerConfigBuilder, StateFuzzerBuilder, TestRunnerBuilder, TimingProbeBuilder { +public class MultiBuilder implements + StateFuzzerConfigBuilder, + StateFuzzerBuilder>, + TestRunnerBuilder, + TimingProbeBuilder { protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) @@ -64,7 +68,7 @@ public StateFuzzerServerConfig buildServerConfig() { } @Override - public StateFuzzer build(StateFuzzerEnabler stateFuzzerEnabler) { + public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { return new StateFuzzerStandard<>( new StateFuzzerComposerStandard<>(stateFuzzerEnabler, alphabetBuilder, sulBuilder).initialize() ); From 4bcecc605f2c61e68a3949f0bd28b4483ac61bfa Mon Sep 17 00:00:00 2001 From: actyp Date: Fri, 16 Feb 2024 21:19:23 -0500 Subject: [PATCH 007/169] Introduce EdhocMapperComposer and simplify some things --- .../components/sul/mapper/context/EdhocMapperState.java | 6 ------ .../components/sul/mapper/mappers/EdhocInputMapper.java | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java index 256e7e67..81e23031 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java @@ -27,12 +27,6 @@ /** Adapted from test files EdhocClient / EdhocServer from edhoc repo */ public abstract class EdhocMapperState { - // The protocol version of edhoc used for the session of this state - protected ProtocolVersion protocolVersion; - - // The combined message (EDHOC+OSCORE) version used for the session of this state - protected CombinedMessageVersion combinedMessageVersion; - // The authentication method to include in EDHOC message_1 (relevant only when Initiator) protected int authenticationMethod; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java index 0bb9a9b4..c9ad2889 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java @@ -6,7 +6,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; import org.eclipse.californium.core.coap.MediaTypeRegistry; @@ -14,7 +14,7 @@ public class EdhocInputMapper extends InputMapper { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapper(MapperConfig mapperConfig, OutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + public EdhocInputMapper(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } From 9f2a49412a3deae83ea8fb9f5406892734f031c4 Mon Sep 17 00:00:00 2001 From: actyp Date: Fri, 16 Feb 2024 21:19:55 -0500 Subject: [PATCH 008/169] Simplify EdhocSul --- .../components/sul/core/EdhocSul.java | 71 +++++++++++-------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java index a04af1bf..002690ea 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java @@ -1,7 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ClientMapperConnector; @@ -22,11 +21,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.Mapper; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -35,10 +30,14 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSul extends AbstractSul { +public class EdhocSul implements AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); + + protected SulConfig sulConfig; + protected CleanupTasks cleanupTasks; + protected EdhocMapperConfig edhocMapperConfig; + protected EdhocMapperComposer edhocMapperComposer; protected EdhocExecutionContext edhocExecutionContext; - protected ProtocolVersion protocolVersion; protected Long originalTimeout; protected EdhocMapperState edhocMapperState; protected EdhocMapperConnector edhocMapperConnector; @@ -91,11 +90,34 @@ public EdhocSul initialize() { return this; } - protected Mapper buildMapper(MapperConfig mapperConfig, EdhocMapperConnector edhocMapperConnector) { - return new EdhocMapperComposer ( - new EdhocInputMapper(mapperConfig, new EdhocOutputChecker(), edhocMapperConnector), - new EdhocOutputMapper(mapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), edhocMapperConnector) - ); + @Override + public SulConfig getSulConfig() { + return sulConfig; + } + + @Override + public CleanupTasks getCleanupTasks() { + return cleanupTasks; + } + + @Override + public EdhocMapperComposer getMapper() { + return edhocMapperComposer; + } + + @Override + public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public DynamicPortProvider getDynamicPortProvider() { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public SulAdapter getSulAdapter() { + throw new RuntimeException("No sul adapter available"); } @Override @@ -153,12 +175,12 @@ public EdhocOutput step(EdhocInput abstractInput) { edhocExecutionContext.addStepContext(); if (!edhocExecutionContext.isExecutionEnabled()) { - return ((EdhocMapperComposer) mapper).getOutputMapper().disabled(); + return edhocMapperComposer.getOutputMapper().disabled(); } - EdhocOutput abstractOutput = executeInput(abstractInput, mapper); + EdhocOutput abstractOutput = executeInput(abstractInput); - if (mapper.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { + if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { // this should lead to a disabled sink state edhocExecutionContext.disableExecution(); } @@ -168,7 +190,7 @@ public EdhocOutput step(EdhocInput abstractInput) { return abstractOutput; } - protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper mapper) { + protected EdhocOutput executeInput(EdhocInput abstractInput) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse @@ -181,7 +203,7 @@ protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper { - public EdhocMapperComposer( - InputMapper inputMapper, - OutputMapper outputMapper) { - super(inputMapper, outputMapper); - } - } } From f4a5ce6f03968c44a97777ed9aa1e48ab93be86c Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:18:30 -0500 Subject: [PATCH 009/169] Update mapper related classes --- .../components/sul/mapper/context/EdhocMapperState.java | 6 ++++++ .../components/sul/mapper/mappers/EdhocInputMapper.java | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java index 81e23031..256e7e67 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java @@ -27,6 +27,12 @@ /** Adapted from test files EdhocClient / EdhocServer from edhoc repo */ public abstract class EdhocMapperState { + // The protocol version of edhoc used for the session of this state + protected ProtocolVersion protocolVersion; + + // The combined message (EDHOC+OSCORE) version used for the session of this state + protected CombinedMessageVersion combinedMessageVersion; + // The authentication method to include in EDHOC message_1 (relevant only when Initiator) protected int authenticationMethod; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java index c9ad2889..0bb9a9b4 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java @@ -6,7 +6,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; import org.eclipse.californium.core.coap.MediaTypeRegistry; @@ -14,7 +14,7 @@ public class EdhocInputMapper extends InputMapper { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapper(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + public EdhocInputMapper(MapperConfig mapperConfig, OutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } From f02ff7363237cf1ac02888f480c2e5389b642504 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:19:06 -0500 Subject: [PATCH 010/169] Update sul related classes --- .../components/sul/core/EdhocSul.java | 71 ++++++++----------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java index 002690ea..a04af1bf 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java @@ -1,6 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ClientMapperConnector; @@ -21,7 +22,11 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.Mapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -30,14 +35,10 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSul implements AbstractSul { +public class EdhocSul extends AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); - - protected SulConfig sulConfig; - protected CleanupTasks cleanupTasks; - protected EdhocMapperConfig edhocMapperConfig; - protected EdhocMapperComposer edhocMapperComposer; protected EdhocExecutionContext edhocExecutionContext; + protected ProtocolVersion protocolVersion; protected Long originalTimeout; protected EdhocMapperState edhocMapperState; protected EdhocMapperConnector edhocMapperConnector; @@ -90,34 +91,11 @@ public EdhocSul initialize() { return this; } - @Override - public SulConfig getSulConfig() { - return sulConfig; - } - - @Override - public CleanupTasks getCleanupTasks() { - return cleanupTasks; - } - - @Override - public EdhocMapperComposer getMapper() { - return edhocMapperComposer; - } - - @Override - public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) { - throw new RuntimeException("No dynamic port provider available"); - } - - @Override - public DynamicPortProvider getDynamicPortProvider() { - throw new RuntimeException("No dynamic port provider available"); - } - - @Override - public SulAdapter getSulAdapter() { - throw new RuntimeException("No sul adapter available"); + protected Mapper buildMapper(MapperConfig mapperConfig, EdhocMapperConnector edhocMapperConnector) { + return new EdhocMapperComposer ( + new EdhocInputMapper(mapperConfig, new EdhocOutputChecker(), edhocMapperConnector), + new EdhocOutputMapper(mapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), edhocMapperConnector) + ); } @Override @@ -175,12 +153,12 @@ public EdhocOutput step(EdhocInput abstractInput) { edhocExecutionContext.addStepContext(); if (!edhocExecutionContext.isExecutionEnabled()) { - return edhocMapperComposer.getOutputMapper().disabled(); + return ((EdhocMapperComposer) mapper).getOutputMapper().disabled(); } - EdhocOutput abstractOutput = executeInput(abstractInput); + EdhocOutput abstractOutput = executeInput(abstractInput, mapper); - if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { + if (mapper.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { // this should lead to a disabled sink state edhocExecutionContext.disableExecution(); } @@ -190,7 +168,7 @@ public EdhocOutput step(EdhocInput abstractInput) { return abstractOutput; } - protected EdhocOutput executeInput(EdhocInput abstractInput) { + protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper mapper) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse @@ -203,7 +181,7 @@ protected EdhocOutput executeInput(EdhocInput abstractInput) { timeoutChanged = true; } - EdhocOutput abstractOutput = edhocMapperComposer.execute(abstractInput, edhocExecutionContext); + EdhocOutput abstractOutput = mapper.execute(abstractInput, edhocExecutionContext); // reset timeout if (timeoutChanged) { @@ -223,11 +201,12 @@ protected void serverWaitForInitialMessage() { return; } + EdhocMapperComposer mapperComposer = (EdhocMapperComposer) mapper; ServerMapperConnector serverMapperConnector = (ServerMapperConnector) edhocMapperConnector; - EdhocOutputChecker edhocOutputChecker = edhocMapperComposer.getOutputChecker(); + EdhocOutputChecker edhocOutputChecker = (EdhocOutputChecker) mapperComposer.getOutputChecker(); serverMapperConnector.waitForClientMessage(); - EdhocOutput abstractOutput = edhocMapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); + EdhocOutput abstractOutput = mapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); boolean isExpectedMessage = edhocOutputChecker.isMessage(abstractOutput, expectedMessageType); if (!isExpectedMessage) { @@ -239,4 +218,12 @@ protected void serverWaitForInitialMessage() { serverWaitForInitialMessageDone = true; } + + protected static class EdhocMapperComposer extends MapperComposer { + public EdhocMapperComposer( + InputMapper inputMapper, + OutputMapper outputMapper) { + super(inputMapper, outputMapper); + } + } } From 7547838331605771f2fcfffe4762a7b6cc8301e7 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:20:09 -0500 Subject: [PATCH 011/169] Update outer classes --- .../protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java | 6 +----- .../java/com/github/protocolfuzzing/edhocfuzzer/Main.java | 4 +++- .../github/protocolfuzzing/edhocfuzzer/MultiBuilder.java | 8 ++------ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java index a1557619..d7e19672 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java @@ -14,11 +14,7 @@ public class EdhocDotProcessor { private static final Logger LOGGER = LogManager.getLogger(); - public static void beautify(LearnerResult learnerResult) { - if (learnerResult.isFromTest()) { - return; - } - + public static void beautify(LearnerResult learnerResult) { if (learnerResult.isEmpty()) { LOGGER.warn("Provided empty LearnerResult"); return; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index 62e97580..417adcff 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -1,5 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser; import java.util.List; @@ -9,7 +11,7 @@ public static void main(String[] args) { MultiBuilder mb = new MultiBuilder(); String[] parentLoggers = {Main.class.getPackageName()}; - CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); + CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); commandLineParser.setExternalParentLoggers(parentLoggers); commandLineParser.parse(args, true, List.of(EdhocDotProcessor::beautify)); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java index 07e70c31..d57a3224 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java @@ -35,11 +35,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; -public class MultiBuilder implements - StateFuzzerConfigBuilder, - StateFuzzerBuilder>, - TestRunnerBuilder, - TimingProbeBuilder { +public class MultiBuilder implements StateFuzzerConfigBuilder, StateFuzzerBuilder, TestRunnerBuilder, TimingProbeBuilder { protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) @@ -68,7 +64,7 @@ public StateFuzzerServerConfig buildServerConfig() { } @Override - public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { + public StateFuzzer build(StateFuzzerEnabler stateFuzzerEnabler) { return new StateFuzzerStandard<>( new StateFuzzerComposerStandard<>(stateFuzzerEnabler, alphabetBuilder, sulBuilder).initialize() ); From 1311bb30d2f72d8efb45f72764ca62b551e70955 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 23:28:00 -0500 Subject: [PATCH 012/169] Update according to generic machine model --- .../protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java | 6 +++++- .../java/com/github/protocolfuzzing/edhocfuzzer/Main.java | 4 +--- .../github/protocolfuzzing/edhocfuzzer/MultiBuilder.java | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java index d7e19672..a1557619 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java @@ -14,7 +14,11 @@ public class EdhocDotProcessor { private static final Logger LOGGER = LogManager.getLogger(); - public static void beautify(LearnerResult learnerResult) { + public static void beautify(LearnerResult learnerResult) { + if (learnerResult.isFromTest()) { + return; + } + if (learnerResult.isEmpty()) { LOGGER.warn("Provided empty LearnerResult"); return; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index 417adcff..62e97580 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -1,7 +1,5 @@ package com.github.protocolfuzzing.edhocfuzzer; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser; import java.util.List; @@ -11,7 +9,7 @@ public static void main(String[] args) { MultiBuilder mb = new MultiBuilder(); String[] parentLoggers = {Main.class.getPackageName()}; - CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); + CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); commandLineParser.setExternalParentLoggers(parentLoggers); commandLineParser.parse(args, true, List.of(EdhocDotProcessor::beautify)); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java index d57a3224..07e70c31 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java @@ -35,7 +35,11 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; -public class MultiBuilder implements StateFuzzerConfigBuilder, StateFuzzerBuilder, TestRunnerBuilder, TimingProbeBuilder { +public class MultiBuilder implements + StateFuzzerConfigBuilder, + StateFuzzerBuilder>, + TestRunnerBuilder, + TimingProbeBuilder { protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) @@ -64,7 +68,7 @@ public StateFuzzerServerConfig buildServerConfig() { } @Override - public StateFuzzer build(StateFuzzerEnabler stateFuzzerEnabler) { + public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { return new StateFuzzerStandard<>( new StateFuzzerComposerStandard<>(stateFuzzerEnabler, alphabetBuilder, sulBuilder).initialize() ); From ce02ac9c6f897092ebeed65de49ac2daa9532e2b Mon Sep 17 00:00:00 2001 From: actyp Date: Fri, 16 Feb 2024 21:19:23 -0500 Subject: [PATCH 013/169] Introduce EdhocMapperComposer and simplify some things --- .../components/sul/mapper/context/EdhocMapperState.java | 6 ------ .../components/sul/mapper/mappers/EdhocInputMapper.java | 4 ++-- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java index 256e7e67..81e23031 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java @@ -27,12 +27,6 @@ /** Adapted from test files EdhocClient / EdhocServer from edhoc repo */ public abstract class EdhocMapperState { - // The protocol version of edhoc used for the session of this state - protected ProtocolVersion protocolVersion; - - // The combined message (EDHOC+OSCORE) version used for the session of this state - protected CombinedMessageVersion combinedMessageVersion; - // The authentication method to include in EDHOC message_1 (relevant only when Initiator) protected int authenticationMethod; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java index 0bb9a9b4..c9ad2889 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java @@ -6,7 +6,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; import org.eclipse.californium.core.coap.MediaTypeRegistry; @@ -14,7 +14,7 @@ public class EdhocInputMapper extends InputMapper { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapper(MapperConfig mapperConfig, OutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + public EdhocInputMapper(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } From 89aca2d1cb07b42daea6432a495e5152c5da95fb Mon Sep 17 00:00:00 2001 From: actyp Date: Fri, 16 Feb 2024 21:19:55 -0500 Subject: [PATCH 014/169] Simplify EdhocSul --- .../components/sul/core/EdhocSul.java | 71 +++++++++++-------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java index a04af1bf..002690ea 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java @@ -1,7 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ClientMapperConnector; @@ -22,11 +21,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.Mapper; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -35,10 +30,14 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSul extends AbstractSul { +public class EdhocSul implements AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); + + protected SulConfig sulConfig; + protected CleanupTasks cleanupTasks; + protected EdhocMapperConfig edhocMapperConfig; + protected EdhocMapperComposer edhocMapperComposer; protected EdhocExecutionContext edhocExecutionContext; - protected ProtocolVersion protocolVersion; protected Long originalTimeout; protected EdhocMapperState edhocMapperState; protected EdhocMapperConnector edhocMapperConnector; @@ -91,11 +90,34 @@ public EdhocSul initialize() { return this; } - protected Mapper buildMapper(MapperConfig mapperConfig, EdhocMapperConnector edhocMapperConnector) { - return new EdhocMapperComposer ( - new EdhocInputMapper(mapperConfig, new EdhocOutputChecker(), edhocMapperConnector), - new EdhocOutputMapper(mapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), edhocMapperConnector) - ); + @Override + public SulConfig getSulConfig() { + return sulConfig; + } + + @Override + public CleanupTasks getCleanupTasks() { + return cleanupTasks; + } + + @Override + public EdhocMapperComposer getMapper() { + return edhocMapperComposer; + } + + @Override + public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public DynamicPortProvider getDynamicPortProvider() { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public SulAdapter getSulAdapter() { + throw new RuntimeException("No sul adapter available"); } @Override @@ -153,12 +175,12 @@ public EdhocOutput step(EdhocInput abstractInput) { edhocExecutionContext.addStepContext(); if (!edhocExecutionContext.isExecutionEnabled()) { - return ((EdhocMapperComposer) mapper).getOutputMapper().disabled(); + return edhocMapperComposer.getOutputMapper().disabled(); } - EdhocOutput abstractOutput = executeInput(abstractInput, mapper); + EdhocOutput abstractOutput = executeInput(abstractInput); - if (mapper.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { + if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { // this should lead to a disabled sink state edhocExecutionContext.disableExecution(); } @@ -168,7 +190,7 @@ public EdhocOutput step(EdhocInput abstractInput) { return abstractOutput; } - protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper mapper) { + protected EdhocOutput executeInput(EdhocInput abstractInput) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse @@ -181,7 +203,7 @@ protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper { - public EdhocMapperComposer( - InputMapper inputMapper, - OutputMapper outputMapper) { - super(inputMapper, outputMapper); - } - } } From b0106e8c71c1381259a95309064a387cb245b433 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Fri, 23 Feb 2024 12:58:44 +0100 Subject: [PATCH 015/169] First draft of using RA components Co-authored-by: Linus Olofsson --- .../edhocfuzzer/MultiBuilderRA.java | 95 +++++++ .../components/sul/core/EdhocSulRA.java | 243 ++++++++++++++++++ .../context/EdhocExecutionContextRA.java | 19 ++ .../mapper/mappers/EdhocInputMapperRA.java | 36 +++ .../mapper/mappers/EdhocMapperComposerRA.java | 31 +++ .../mapper/mappers/EdhocOutputMapperRA.java | 237 +++++++++++++++++ .../mapper/symbols/inputs/EdhocInputRA.java | 36 +++ .../symbols/outputs/EdhocOutputBuilderRA.java | 10 + .../symbols/outputs/EdhocOutputCheckerRA.java | 37 +++ .../mapper/symbols/outputs/EdhocOutputRA.java | 95 +++++++ 10 files changed, 839 insertions(+) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java new file mode 100644 index 00000000..04b75d95 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -0,0 +1,95 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +import com.github.protocolfuzzing.edhocfuzzer.components.learner.EdhocAlphabetPojoXml; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.EdhocSulBuilder; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulServerConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.xml.AlphabetSerializerXml; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.statistics.MealyMachineWrapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.statistics.RegisterAutomatonWrapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulWrapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulWrapperStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzer; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerComposerRA; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerComposerStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerRA; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerClientConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerClientConfigStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerConfigBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerEnabler; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerServerConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerServerConfigStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.TestRunner; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.TestRunnerBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.TestRunnerStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.config.TestRunnerConfigStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.config.TestRunnerEnabler; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbe; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbeBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbeStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; + +public class MultiBuilderRA implements + StateFuzzerConfigBuilder, + StateFuzzerBuilder>, + TestRunnerBuilder, + TimingProbeBuilder { + + protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( + new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) + ); + + protected SulBuilder sulBuilder = new EdhocSulBuilder(); + protected SulWrapper sulWrapper = new SulWrapperStandard<>(); + + @Override + public StateFuzzerClientConfig buildClientConfig() { + return new StateFuzzerClientConfigStandard( + new LearnerConfigRA(), + new EdhocSulClientConfig(new EdhocMapperConfig()), + new TestRunnerConfigStandard(), + new TimingProbeConfigStandard() + ); + } + + @Override + public StateFuzzerServerConfig buildServerConfig() { + return new StateFuzzerServerConfigStandard( + new LearnerConfigStandard(), + new EdhocSulServerConfig(new EdhocMapperConfig()), + new TestRunnerConfigStandard(), + new TimingProbeConfigStandard() + ); + } + + @Override + public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { + return new StateFuzzerRA<>( + new StateFuzzerComposerRA(stateFuzzerEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize() + ); + } + + @Override + public TestRunner build(TestRunnerEnabler testRunnerEnabler) { + return new TestRunnerStandard(testRunnerEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize(); + } + + @Override + public TimingProbe build(TimingProbeEnabler timingProbeEnabler) { + return new TimingProbeStandard<>(timingProbeEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize(); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java new file mode 100644 index 00000000..cc181fa0 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java @@ -0,0 +1,243 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ClientMapperConnector; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ServerMapperConnector; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.ClientMapperState; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.ServerMapperState; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocInputMapper; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocMapperComposer; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocMapperComposerRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocOutputMapper; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilder; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; +import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.eclipse.californium.core.config.CoapConfig; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +public class EdhocSulRA implements AbstractSul { + private static final Logger LOGGER = LogManager.getLogger(); + + protected SulConfig sulConfig; + protected CleanupTasks cleanupTasks; + protected EdhocMapperConfig edhocMapperConfig; + protected EdhocMapperComposerRA edhocMapperComposer; + protected EdhocExecutionContext edhocExecutionContext; + protected Long originalTimeout; + protected EdhocMapperState edhocMapperState; + protected EdhocMapperConnector edhocMapperConnector; + protected boolean serverWaitForInitialMessageDone; + + public EdhocSulRA(SulConfig sulConfig, CleanupTasks cleanupTasks) { + this.sulConfig = sulConfig; + this.cleanupTasks = cleanupTasks; + this.edhocMapperConfig = (EdhocMapperConfig) sulConfig.getMapperConfig(); + this.originalTimeout = sulConfig.getResponseWait(); + } + + public EdhocSulRA initialize() { + try { + // Adds also the californium standard configuration + EdhocMapperConnectionConfig mapperConnectionConfig = new EdhocMapperConnectionConfig( + sulConfig.getMapperConfig().getMapperConnectionConfigInputStream()); + + sulConfig.applyDelegate(mapperConnectionConfig); + + // Warn about possible retransmissions + Long coapAckTimeout = mapperConnectionConfig.getConfiguration().get( + CoapConfig.ACK_TIMEOUT, TimeUnit.MILLISECONDS); + + if (originalTimeout > coapAckTimeout) { + LOGGER.warn("Found COAP.ACK_TIMEOUT ({} ms) < responseWait ({} ms)", coapAckTimeout, originalTimeout); + LOGGER.warn("Retransmissions may occur implicitly and may affect the learned model's correctness"); + LOGGER.warn("To avoid them: [COAP.ACK_TIMEOUT > longest wait time] or [COAP.MAX_RETRANSMIT = 0]"); + } + } catch (IOException e) { + LOGGER.error("Exception occurred: " + e.getMessage()); + throw new RuntimeException(e); + } + + // The connector uses the californium standard configuration + if (sulConfig.isFuzzingClient()) { + this.edhocMapperConnector = new ServerMapperConnector(edhocMapperConfig.getHostCoapUri(), + edhocMapperConfig.getEdhocCoapResource(), edhocMapperConfig.getAppCoapResource(), + originalTimeout); + } else { + this.edhocMapperConnector = new ClientMapperConnector(edhocMapperConfig.getEdhocCoapUri(), + edhocMapperConfig.getAppCoapUri(), this.originalTimeout); + } + + this.edhocMapperComposer = new EdhocMapperComposerRA( + new EdhocInputMapper(edhocMapperConfig, new EdhocOutputChecker(), edhocMapperConnector), + new EdhocOutputMapper(edhocMapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), + edhocMapperConnector)); + + return this; + } + + @Override + public SulConfig getSulConfig() { + return sulConfig; + } + + @Override + public CleanupTasks getCleanupTasks() { + return cleanupTasks; + } + + @Override + public EdhocMapperComposerRA getMapper() { + return edhocMapperComposer; + } + + @Override + public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public DynamicPortProvider getDynamicPortProvider() { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public SulAdapter getSulAdapter() { + throw new RuntimeException("No sul adapter available"); + } + + @Override + public void pre() { + LOGGER.debug("SUL 'pre' start"); + + if (sulConfig.isFuzzingClient()) { + ServerMapperConnector serverMapperConnector = (ServerMapperConnector) edhocMapperConnector; + edhocMapperState = new ServerMapperState(edhocMapperConfig, cleanupTasks).initialize(serverMapperConnector); + + serverWaitForInitialMessageDone = false; + cleanupTasks.submit(serverMapperConnector::shutdown); + + EdhocSulClientConfig edhocSulClientConfig = (EdhocSulClientConfig) sulConfig; + long clientWait = edhocSulClientConfig.getClientWait(); + if (clientWait > 0) { + try { + Thread.sleep(clientWait); + } catch (InterruptedException e) { + LOGGER.error("Interrupted 'clientWait' sleep for {} ms", clientWait); + } + } + } else { + ClientMapperConnector clientMapperConnector = (ClientMapperConnector) edhocMapperConnector; + edhocMapperState = new ClientMapperState(edhocMapperConfig, cleanupTasks).initialize(clientMapperConnector); + } + + this.edhocExecutionContext = new EdhocExecutionContext(edhocMapperState); + + long startWait = sulConfig.getStartWait(); + if (startWait > 0) { + try { + Thread.sleep(startWait); + } catch (InterruptedException e) { + LOGGER.error("Interrupted 'startWait' sleep for {} ms", startWait); + } + } + + LOGGER.debug("SUL 'pre' end"); + } + + @Override + public void post() { + LOGGER.debug("SUL 'post' start"); + LOGGER.debug("SUL 'post' end"); + } + + @Override + public EdhocOutputRA step(EdhocInputRA abstractInput) { + // In case of server mapper, wait for initial message from client + serverWaitForInitialMessage(); + + LOGGER.debug("SUL 'step' start"); + + edhocExecutionContext.addStepContext(); + + if (!edhocExecutionContext.isExecutionEnabled()) { + return edhocMapperComposer.getOutputMapper().disabled(); + } + + EdhocOutputRA abstractOutput = executeInput(abstractInput); + + if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) + || !edhocExecutionContext.isExecutionEnabled()) { + // this should lead to a disabled sink state + edhocExecutionContext.disableExecution(); + } + + LOGGER.debug("SUL 'step' end"); + + return abstractOutput; + } + + protected EdhocOutputRA executeInput(EdhocInputRA abstractInput) { + boolean timeoutChanged = false; + + // handle timeout from extendedWait and from inputResponse + if (abstractInput.getExtendedWait() != null) { + edhocMapperConnector.setTimeout(originalTimeout + abstractInput.getExtendedWait()); + timeoutChanged = true; + } else if (sulConfig.getInputResponseTimeout() != null && + sulConfig.getInputResponseTimeout().containsKey(abstractInput.getName())) { + edhocMapperConnector.setTimeout(sulConfig.getInputResponseTimeout().get(abstractInput.getName())); + timeoutChanged = true; + } + + EdhocOutputRA abstractOutput = edhocMapperComposer.execute(abstractInput, edhocExecutionContext); + + // reset timeout + if (timeoutChanged) { + edhocMapperConnector.setTimeout(originalTimeout); + } + return abstractOutput; + } + + protected void serverWaitForInitialMessage() { + boolean isServer = !edhocMapperState.isCoapClient(); + boolean isResponder = !edhocMapperState.getEdhocSessionPersistent().isInitiator(); + MessageOutputType expectedMessageType = isResponder ? MessageOutputType.EDHOC_MESSAGE_1 + : MessageOutputType.COAP_EMPTY_MESSAGE; + + if (!isServer || serverWaitForInitialMessageDone) { + return; + } + + ServerMapperConnector serverMapperConnector = (ServerMapperConnector) edhocMapperConnector; + EdhocOutputChecker edhocOutputChecker = edhocMapperComposer.getOutputChecker(); + + serverMapperConnector.waitForClientMessage(); + EdhocOutputRA abstractOutput = edhocMapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); + boolean isExpectedMessage = edhocOutputChecker.isMessage(abstractOutput, expectedMessageType); + + if (!isExpectedMessage) { + throw new RuntimeException("After initial wait, instead of " + expectedMessageType + ", received " + + abstractOutput.getName()); + } + + LOGGER.debug("Received {} from client", expectedMessageType); + serverWaitForInitialMessageDone = true; + } + +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java new file mode 100644 index 00000000..cbdde011 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java @@ -0,0 +1,19 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.context.ExecutionContextStepped; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.context.StepContext; + +public class EdhocExecutionContextRA +extends ExecutionContextStepped> { + + public EdhocExecutionContextRA(EdhocMapperState state) { + super(state); + } + + @Override + protected StepContext buildStepContext() { + return new StepContext<>(stepContexts.size()); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java new file mode 100644 index 00000000..e9c377c2 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -0,0 +1,36 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; +import org.eclipse.californium.core.coap.MediaTypeRegistry; + +public class EdhocInputMapperRA extends InputMapper { + EdhocMapperConnector edhocMapperConnector; + + public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + super(mapperConfig, outputChecker); + this.edhocMapperConnector = edhocMapperConnector; + } + + @Override + protected void sendMessage(EdhocProtocolMessage message, EdhocExecutionContextRA context) { + if (message == null) { + throw new RuntimeException("Null message provided to EdhocInputMapper in sendMessage"); + } + + // enable or disable content format + EdhocMapperConfig edhocMapperConfig = (EdhocMapperConfig) mapperConfig; + int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat() : MediaTypeRegistry.UNDEFINED; + + edhocMapperConnector.send(message.getPayload(), message.getPayloadType(), message.getMessageCode(), contentFormat); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java new file mode 100644 index 00000000..e3380fbc --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java @@ -0,0 +1,31 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; + +public class EdhocMapperComposerRA extends + MapperComposer { + public EdhocMapperComposerRA(EdhocInputMapperRA edhocInputMapper, EdhocOutputMapperRA edhocOutputMapper) { + super(edhocInputMapper, edhocOutputMapper); + } + + @Override + public EdhocOutputCheckerRA getOutputChecker() { + return (EdhocOutputCheckerRA) super.getOutputChecker(); + } + + @Override + public EdhocOutputBuilderRA getOutputBuilder() { + return (EdhocOutputBuilderRA) super.getOutputBuilder(); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java new file mode 100644 index 00000000..aa9101a2 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -0,0 +1,237 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.GenericErrorException; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.TimeoutException; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.UnsuccessfulMessageException; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.UnsupportedMessageException; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.nio.charset.StandardCharsets; +import java.util.List; + +public class EdhocOutputMapperRA extends OutputMapper { + private static final Logger LOGGER = LogManager.getLogger(); + + EdhocMapperConnector edhocMapperConnector; + + public EdhocOutputMapperRA(MapperConfig mapperConfig, EdhocOutputBuilderRA edhocOutputBuilder, + EdhocOutputCheckerRA edhocOutputChecker, EdhocMapperConnector edhocMapperConnector) { + super(mapperConfig, edhocOutputBuilder, edhocOutputChecker); + this.edhocMapperConnector = edhocMapperConnector; + } + + @Override + public EdhocOutputRA receiveOutput(EdhocExecutionContextRA context) { + EdhocMapperState edhocMapperState = context.getState(); + byte[] responsePayload; + + try { + responsePayload = edhocMapperConnector.receive(); + } catch (GenericErrorException e) { + return socketClosed(); + } catch (TimeoutException e) { + return timeout(); + } catch (UnsupportedMessageException e) { + // special output to demonstrate that the input message the learner requested + // was unable to be sent and deemed unsupported + return edhocOutputRA(MessageOutputType.UNSUPPORTED_MESSAGE); + } catch (UnsuccessfulMessageException e) { + // special output to demonstrate that the received message evoked an error + // in a middle layer and did not reach the upper resource in the case of + // server mapper + return edhocOutputRA(MessageOutputType.UNSUCCESSFUL_MESSAGE); + } + + EdhocOutputRA abstractOutput; + + // Check for application related message + // including message 3 combined with oscore + abstractOutput = appOutput(edhocMapperState, responsePayload); + + if (abstractOutput != null) { + return abstractOutput; + } + + // Check for edhoc message + abstractOutput = edhocOutputRA(edhocMapperState, responsePayload); + + if (abstractOutput != null) { + return abstractOutput; + } + + // Check for coap message + abstractOutput = coapOutput(edhocMapperState, responsePayload); + + if (abstractOutput != null) { + return abstractOutput; + } + + return outputBuilder.buildUnknown(); + } + + protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { + String messageType = edhocMapperState.isCoapClient() ? "response" : "request"; + + if (edhocMapperConnector.receivedMsg3WithOscoreApp()) { + // received Message3_OSCORE_APP, from which application data propagated and + // decrypted + LOGGER.info("EDHOC_MESSAGE_3_OSCORE_APP | OSCORE_APP_MESSAGE ({}): {} ~ {}", + messageType, EdhocUtil.byteArrayToString(responsePayload), + new String(responsePayload, StandardCharsets.UTF_8)); + + return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP); + } + + if (edhocMapperConnector.receivedOscoreAppMessage()) { + /* + * Client Mapper: + * sent oscore protected app data and received oscore protected + * app data, handled by oscore layer, so responsePayload is the + * decrypted response + * + * Server Mapper: + * received oscore-protected request to application data, so + * responsePayload is the decrypted request payload + */ + LOGGER.info("OSCORE_APP_MESSAGE ({}): {} ~ {}", + messageType, EdhocUtil.byteArrayToString(responsePayload), + new String(responsePayload, StandardCharsets.UTF_8)); + + return edhocOutputRA(MessageOutputType.OSCORE_APP_MESSAGE); + } + + return null; + } + + protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] responsePayload) { + MessageProcessorPersistent messageProcessorPersistent = new MessageProcessorPersistent(edhocMapperState); + boolean ok; + + switch (messageProcessorPersistent.messageTypeFromStructure(responsePayload)) { + case EDHOC_ERROR_MESSAGE -> { + ok = messageProcessorPersistent.readErrorMessage(responsePayload); + return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_ERROR_MESSAGE); + } + + case EDHOC_MESSAGE_1 -> { + ok = messageProcessorPersistent.readMessage1(responsePayload); + return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_1); + } + + case EDHOC_MESSAGE_2 -> { + ok = messageProcessorPersistent.readMessage2(responsePayload); + return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_2); + } + + case EDHOC_MESSAGE_3_OR_4 -> { + // message may be 3 or 4 + LOGGER.info("Reading as EDHOC Message 3 or 4"); + ok = messageProcessorPersistent.readMessage3(responsePayload); + if (ok) { + return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_3); + } + + ok = messageProcessorPersistent.readMessage4(responsePayload); + return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_4); + } + + case EDHOC_MESSAGE_2_OR_3_OR_4 -> { + // message may be 2 or 3 or 4 + LOGGER.info("Reading as EDHOC Message 2 or 3 or 4"); + ok = messageProcessorPersistent.readMessage2(responsePayload); + if (ok) { + return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_2); + } + + ok = messageProcessorPersistent.readMessage3(responsePayload); + if (ok) { + return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_3); + } + + ok = messageProcessorPersistent.readMessage4(responsePayload); + return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_4); + } + + default -> { + return null; + } + } + } + + protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { + String messageType = edhocMapperState.isCoapClient() ? "response" : "request"; + + // Check for coap error message + if (edhocMapperConnector.receivedCoapErrorMessage()) { + LOGGER.info("COAP_ERROR_MESSAGE ({}): {} ~ {}", + messageType, EdhocUtil.byteArrayToString(responsePayload), + new String(responsePayload, StandardCharsets.UTF_8)); + return coapError(); + } + + // Check for coap empty message + if (edhocMapperConnector.receivedCoapEmptyMessage()) { + /* + * Client Mapper: + * received empty coap ack, possible when client mapper is + * Initiator and message 3 is the final edhoc message + * + * Server Mapper: + * received empty coap request for some reason + */ + return edhocOutputRA(MessageOutputType.COAP_EMPTY_MESSAGE); + } + + // Check for unprotected coap message + // Must be checked after checking for empty message, because empty message can + // be unprotected + // Application message is any non-error coap message, no distinction based on + // payload + if (edhocMapperConnector.receivedCoapAppMessage()) { + LOGGER.info("COAP_APP_MESSAGE ({}): {} ~ {}", + messageType, EdhocUtil.byteArrayToString(responsePayload), + new String(responsePayload, StandardCharsets.UTF_8)); + return edhocOutputRA(MessageOutputType.COAP_APP_MESSAGE); + } + + // if payload was not empty then a coap message is received + // because no other transport protocol than coap is supported yet + return edhocOutputAfterCheck(responsePayload != null, MessageOutputType.COAP_MESSAGE); + } + + protected EdhocOutputRA coapError() { + if (((EdhocMapperConfig) mapperConfig).isCoapErrorAsEdhocError()) { + return edhocOutputRA(MessageOutputType.EDHOC_ERROR_MESSAGE); + } else { + return edhocOutputRA(MessageOutputType.COAP_ERROR_MESSAGE); + } + } + + protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, MessageOutputType type) { + return successfulCheck ? edhocOutputRA(type) : null; + } + + protected EdhocOutputRA edhocOutputRA(MessageOutputType type) { + return new EdhocOutputRA(type.name()); + } + + @Override + protected EdhocOutputRA buildOutput(String name, List messages) { + return new EdhocOutputRA(name, messages); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java new file mode 100644 index 00000000..58192b61 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java @@ -0,0 +1,36 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.AbstractInputXml; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.MapperInput; + +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.PSymbolInstance; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public abstract class EdhocInputRA extends PSymbolInstance + implements MapperInput { + public abstract Enum getInputType(); + + EdhocInputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public void preSendUpdate(EdhocExecutionContextRA context) { + } + + @Override + public void postSendUpdate(EdhocExecutionContextRA context) { + } + + @Override + public void postReceiveUpdate( + EdhocOutputRA output, + OutputChecker abstractOutputChecker, + EdhocExecutionContextRA context) { + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java new file mode 100644 index 00000000..5646e24c --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java @@ -0,0 +1,10 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; + +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; + +public class EdhocOutputBuilderRA implements OutputBuilder { + @Override + public EdhocOutputRA buildOutput(String name) { + return new EdhocOutputRA(name); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java new file mode 100644 index 00000000..8ba49564 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java @@ -0,0 +1,37 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; + +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; + +import java.util.Objects; + +public class EdhocOutputCheckerRA implements OutputChecker { + + public boolean isMessage(EdhocOutputRA output, MessageOutputType messageOutputType) { + return Objects.equals(output.getName(), messageOutputType.name()); + } + + @Override + public boolean hasInitialClientMessage(EdhocOutputRA output) { + return isMessage(output, MessageOutputType.EDHOC_MESSAGE_1); + } + + @Override + public boolean isTimeout(EdhocOutputRA output) { + return isMessage(output, MessageOutputType.TIMEOUT); + } + + @Override + public boolean isUnknown(EdhocOutputRA output) { + return isMessage(output, MessageOutputType.UNKNOWN); + } + + @Override + public boolean isSocketClosed(EdhocOutputRA output) { + return isMessage(output, MessageOutputType.SOCKET_CLOSED); + } + + @Override + public boolean isDisabled(EdhocOutputRA output) { + return isMessage(output, MessageOutputType.DISABLED); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java new file mode 100644 index 00000000..6618007d --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java @@ -0,0 +1,95 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.MapperOutput; + +import de.learnlib.ralib.data.DataType; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.OutputSymbol; +import de.learnlib.ralib.words.PSymbolInstance; +import de.learnlib.ralib.words.ParameterizedSymbol; + +import java.util.List; + +public class EdhocOutputRA extends PSymbolInstance implements MapperOutput { + List messages; + + public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, DataValue... parameterValues) { + super(baseSymbol, parameterValues); + this.messages = messages; + } + + /** Used only by @link #EdhocOutputBuilder. */ + public EdhocOutputRA(String name) { + super(new OutputSymbol(name, (DataType[]) null), (DataValue[]) null); + } + + @Override + public boolean isComposite() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isAtomic() { + // TODO Auto-generated method stub + return false; + } + + @Override + public List getMessages() { + return this.messages; + } + + @Override + public String getName() { + return super.getBaseSymbol().getName(); + } + + @Override + public boolean hasMessages() { + return !messages.isEmpty(); + } + + @Override + public List getAtomicOutputs() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getAtomicOutputs'"); + } + + @Override + public List getAtomicOutputs(int unrollRepeating) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getAtomicOutputs'"); + } + + @Override + public List getAtomicAbstractionStrings() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getAtomicAbstractionStrings'"); + } + + @Override + public List getAtomicAbstractionStrings(int unrollRepeating) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getAtomicAbstractionStrings'"); + } + + @Override + public boolean isRepeating() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'isRepeating'"); + } + + @Override + public EdhocOutputRA getRepeatedOutput() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'getRepeatedOutput'"); + } + + @Override + public String toDetailedString() { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'toDetailedString'"); + } +} From 48bd92d08892ea5c086a0802ce41b59dc26d9617 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Mon, 26 Feb 2024 14:56:28 +0100 Subject: [PATCH 016/169] Added versions of various classes using RALib Co-authored-by: 00oskpet <00oskpet@users.noreply.github.com> --- .../edhocfuzzer/MultiBuilderRA.java | 26 +++++-------- .../learner/EdhocAlphabetPojoXmlRA.java | 39 +++++++++++++++++++ .../sul/core/EdhocSulBuilderRA.java | 17 ++++++++ .../components/sul/core/EdhocSulRA.java | 23 ++++++----- .../context/EdhocExecutionContextRA.java | 2 +- .../mapper/mappers/EdhocInputMapperRA.java | 6 +-- .../mapper/mappers/EdhocMapperComposerRA.java | 4 -- .../mapper/mappers/EdhocOutputMapperRA.java | 14 +++++-- .../symbols/inputs/CoapAppMessageInputRA.java | 25 ++++++++++++ .../inputs/CoapEmptyMessageInputRA.java | 25 ++++++++++++ .../inputs/EdhocErrorMessageInputRA.java | 25 ++++++++++++ .../mapper/symbols/inputs/EdhocInputRA.java | 23 +++++++++-- .../symbols/inputs/EdhocMessage1InputRA.java | 37 ++++++++++++++++++ .../symbols/inputs/EdhocMessage2InputRA.java | 25 ++++++++++++ .../symbols/inputs/EdhocMessage3InputRA.java | 25 ++++++++++++ .../inputs/EdhocMessage3OscoreAppInputRA.java | 32 +++++++++++++++ .../symbols/inputs/EdhocMessage4InputRA.java | 25 ++++++++++++ .../inputs/OscoreAppMessageInputRA.java | 25 ++++++++++++ .../mapper/symbols/outputs/EdhocOutputRA.java | 3 +- 19 files changed, 354 insertions(+), 47 deletions(-) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 04b75d95..15eb2d9e 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -1,21 +1,17 @@ package com.github.protocolfuzzing.edhocfuzzer; -import com.github.protocolfuzzing.edhocfuzzer.components.learner.EdhocAlphabetPojoXml; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.EdhocSulBuilder; +import com.github.protocolfuzzing.edhocfuzzer.components.learner.EdhocAlphabetPojoXmlRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.EdhocSulBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulServerConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.xml.AlphabetSerializerXml; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigStandard; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.statistics.MealyMachineWrapper; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.statistics.RegisterAutomatonWrapper; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulWrapper; @@ -23,9 +19,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzer; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerComposerRA; -import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerComposerStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerRA; -import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerClientConfig; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerClientConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerConfigBuilder; @@ -49,12 +43,12 @@ public class MultiBuilderRA implements TestRunnerBuilder, TimingProbeBuilder { - protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( - new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) + protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( + new AlphabetSerializerXml(EdhocInputRA.class, EdhocAlphabetPojoXmlRA.class) ); - protected SulBuilder sulBuilder = new EdhocSulBuilder(); - protected SulWrapper sulWrapper = new SulWrapperStandard<>(); + protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); + protected SulWrapper sulWrapper = new SulWrapperStandard<>(); @Override public StateFuzzerClientConfig buildClientConfig() { @@ -69,7 +63,7 @@ public StateFuzzerClientConfig buildClientConfig() { @Override public StateFuzzerServerConfig buildServerConfig() { return new StateFuzzerServerConfigStandard( - new LearnerConfigStandard(), + new LearnerConfigRA(), new EdhocSulServerConfig(new EdhocMapperConfig()), new TestRunnerConfigStandard(), new TimingProbeConfigStandard() @@ -79,13 +73,13 @@ public StateFuzzerServerConfig buildServerConfig() { @Override public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { return new StateFuzzerRA<>( - new StateFuzzerComposerRA(stateFuzzerEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize() + new StateFuzzerComposerRA(stateFuzzerEnabler, alphabetBuilder, sulBuilder, sulWrapper, null).initialize() ); } @Override public TestRunner build(TestRunnerEnabler testRunnerEnabler) { - return new TestRunnerStandard(testRunnerEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize(); + return new TestRunnerStandard<>(testRunnerEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize(); } @Override diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java new file mode 100644 index 00000000..5c79ce5b --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java @@ -0,0 +1,39 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.learner; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.xml.AlphabetPojoXml; +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElements; +import jakarta.xml.bind.annotation.XmlRootElement; + +import java.util.List; + +@XmlRootElement(name = "alphabet") +@XmlAccessorType(XmlAccessType.FIELD) +public class EdhocAlphabetPojoXmlRA extends AlphabetPojoXml { + @XmlElements(value = { + @XmlElement(type = EdhocMessage1InputRA.class, name = "EdhocMessage1Input"), + @XmlElement(type = EdhocMessage2InputRA.class, name = "EdhocMessage2Input"), + @XmlElement(type = EdhocMessage3InputRA.class, name = "EdhocMessage3Input"), + @XmlElement(type = EdhocMessage4InputRA.class, name = "EdhocMessage4Input"), + @XmlElement(type = EdhocErrorMessageInputRA.class, name = "EdhocErrorMessageInput"), + @XmlElement(type = EdhocMessage3OscoreAppInputRA.class, name = "EdhocMessage3OscoreAppInput"), + @XmlElement(type = OscoreAppMessageInputRA.class, name = "OscoreAppMessageInput"), + @XmlElement(type = CoapAppMessageInputRA.class, name = "CoapAppMessageInput"), + @XmlElement(type = CoapEmptyMessageInputRA.class, name = "CoapEmptyMessageInput") + }) + protected List inputs; + + public EdhocAlphabetPojoXmlRA() {} + + public EdhocAlphabetPojoXmlRA(List inputs) { + this.inputs = inputs; + } + + @Override + public List getInputs(){ + return inputs; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java new file mode 100644 index 00000000..4ed07f87 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java @@ -0,0 +1,17 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; + +public class EdhocSulBuilderRA implements SulBuilder{ + @Override + public AbstractSul + build(SulConfig sulConfig, CleanupTasks cleanupTasks) { + return new EdhocSulRA(sulConfig, cleanupTasks).initialize(); + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java index cc181fa0..36590f53 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java @@ -7,16 +7,15 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ServerMapperConnector; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.ClientMapperState; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.ServerMapperState; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocInputMapper; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocMapperComposer; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocInputMapperRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocMapperComposerRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocOutputMapper; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocOutputMapperRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilder; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; @@ -31,14 +30,14 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSulRA implements AbstractSul { +public class EdhocSulRA implements AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); protected SulConfig sulConfig; protected CleanupTasks cleanupTasks; protected EdhocMapperConfig edhocMapperConfig; protected EdhocMapperComposerRA edhocMapperComposer; - protected EdhocExecutionContext edhocExecutionContext; + protected EdhocExecutionContextRA edhocExecutionContext; protected Long originalTimeout; protected EdhocMapperState edhocMapperState; protected EdhocMapperConnector edhocMapperConnector; @@ -84,8 +83,8 @@ public EdhocSulRA initialize() { } this.edhocMapperComposer = new EdhocMapperComposerRA( - new EdhocInputMapper(edhocMapperConfig, new EdhocOutputChecker(), edhocMapperConnector), - new EdhocOutputMapper(edhocMapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), + new EdhocInputMapperRA(edhocMapperConfig, new EdhocOutputCheckerRA(), edhocMapperConnector), + new EdhocOutputMapperRA(edhocMapperConfig, new EdhocOutputBuilderRA(), new EdhocOutputCheckerRA(), edhocMapperConnector)); return this; @@ -146,7 +145,7 @@ public void pre() { edhocMapperState = new ClientMapperState(edhocMapperConfig, cleanupTasks).initialize(clientMapperConnector); } - this.edhocExecutionContext = new EdhocExecutionContext(edhocMapperState); + this.edhocExecutionContext = new EdhocExecutionContextRA(edhocMapperState); long startWait = sulConfig.getStartWait(); if (startWait > 0) { @@ -225,7 +224,7 @@ protected void serverWaitForInitialMessage() { } ServerMapperConnector serverMapperConnector = (ServerMapperConnector) edhocMapperConnector; - EdhocOutputChecker edhocOutputChecker = edhocMapperComposer.getOutputChecker(); + EdhocOutputCheckerRA edhocOutputChecker = edhocMapperComposer.getOutputChecker(); serverMapperConnector.waitForClientMessage(); EdhocOutputRA abstractOutput = edhocMapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java index cbdde011..19ea6352 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java @@ -8,7 +8,7 @@ public class EdhocExecutionContextRA extends ExecutionContextStepped> { - public EdhocExecutionContextRA(EdhocMapperState state) { + public EdhocExecutionContextRA(EdhocMapperState state) { super(state); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index e9c377c2..9292e97c 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -4,10 +4,8 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; @@ -16,7 +14,7 @@ public class EdhocInputMapperRA extends InputMapper { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputCheckerRA outputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java index e3380fbc..dbead408 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java @@ -1,14 +1,10 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index aa9101a2..fd50847c 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -17,7 +17,8 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; - +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -103,7 +104,7 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp * sent oscore protected app data and received oscore protected * app data, handled by oscore layer, so responsePayload is the * decrypted response - * + * * Server Mapper: * received oscore-protected request to application data, so * responsePayload is the decrypted request payload @@ -190,7 +191,7 @@ protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] res * Client Mapper: * received empty coap ack, possible when client mapper is * Initiator and message 3 is the final edhoc message - * + * * Server Mapper: * received empty coap request for some reason */ @@ -230,8 +231,13 @@ protected EdhocOutputRA edhocOutputRA(MessageOutputType type) { return new EdhocOutputRA(type.name()); } + protected EdhocOutputRA buildOutput(List messages, ParameterizedSymbol baseSymbol, + @SuppressWarnings("rawtypes") DataValue... parameterValues) { + return new EdhocOutputRA(messages, baseSymbol, parameterValues); + } + @Override protected EdhocOutputRA buildOutput(String name, List messages) { - return new EdhocOutputRA(name, messages); + throw new UnsupportedOperationException("Unsupported output builder arguments"); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java new file mode 100644 index 00000000..ab3ebec5 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java @@ -0,0 +1,25 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.CoapAppMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class CoapAppMessageInputRA extends EdhocInputRA { + + CoapAppMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new CoapAppMessage(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.COAP_APP_MESSAGE; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java new file mode 100644 index 00000000..6788c877 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java @@ -0,0 +1,25 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.CoapEmptyMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class CoapEmptyMessageInputRA extends EdhocInputRA { + + CoapEmptyMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new CoapEmptyMessage(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.COAP_EMPTY_MESSAGE; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java new file mode 100644 index 00000000..7e041c45 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java @@ -0,0 +1,25 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.EdhocErrorMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class EdhocErrorMessageInputRA extends EdhocInputRA { + + EdhocErrorMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new EdhocErrorMessage(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.EDHOC_ERROR_MESSAGE; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java index 58192b61..ad4daf8d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java @@ -3,10 +3,8 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.AbstractInputXml; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.MapperInput; - +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; @@ -15,10 +13,12 @@ public abstract class EdhocInputRA extends PSymbolInstance implements MapperInput { public abstract Enum getInputType(); - EdhocInputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { + EdhocInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... parameterValues) { super(baseSymbol, parameterValues); } + private long extendedWait = 0; + @Override public void preSendUpdate(EdhocExecutionContextRA context) { } @@ -33,4 +33,19 @@ public void postReceiveUpdate( OutputChecker abstractOutputChecker, EdhocExecutionContextRA context) { } + + @Override + public Long getExtendedWait() { + return extendedWait; + } + + @Override + public void setExtendedWait(Long value) { + extendedWait = value; + } + + @Override + public String getName() { + return this.getBaseSymbol().getName(); + } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java new file mode 100644 index 00000000..d24de028 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java @@ -0,0 +1,37 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage1; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class EdhocMessage1InputRA extends EdhocInputRA { + + EdhocMessage1InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public void preSendUpdate(EdhocExecutionContextRA context) { + EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + + if (session.isInitiator()) { + // Initiator by sending message 1 starts a new key exchange session + // so previous session state must be cleaned unless reset is disabled + session.resetIfEnabled(); + } + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new EdhocMessage1(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.EDHOC_MESSAGE_1; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java new file mode 100644 index 00000000..d86256cf --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java @@ -0,0 +1,25 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage2; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class EdhocMessage2InputRA extends EdhocInputRA { + + EdhocMessage2InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new EdhocMessage2(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.EDHOC_MESSAGE_2; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java new file mode 100644 index 00000000..4cfae2a4 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java @@ -0,0 +1,25 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class EdhocMessage3InputRA extends EdhocInputRA { + + EdhocMessage3InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new EdhocMessage3(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.EDHOC_MESSAGE_3; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java new file mode 100644 index 00000000..f936f3fc --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java @@ -0,0 +1,32 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3OscoreApp; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class EdhocMessage3OscoreAppInputRA extends EdhocInputRA { + + EdhocMessage3OscoreAppInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public void preSendUpdate(EdhocExecutionContextRA context) { + // construct Message3 in order to store it in session 'message3' field, + // derive new oscore context and make Message3 available to oscore layer + new MessageProcessorPersistent(context.getState()).writeMessage3(); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new EdhocMessage3OscoreApp(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.EDHOC_MESSAGE_3_OSCORE_APP; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java new file mode 100644 index 00000000..a2889a72 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java @@ -0,0 +1,25 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage4; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class EdhocMessage4InputRA extends EdhocInputRA { + + EdhocMessage4InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new EdhocMessage4(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.EDHOC_MESSAGE_4; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java new file mode 100644 index 00000000..d4f6b200 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java @@ -0,0 +1,25 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.OscoreAppMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class OscoreAppMessageInputRA extends EdhocInputRA { + + OscoreAppMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + super(baseSymbol, parameterValues); + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { + return new OscoreAppMessage(new MessageProcessorPersistent(context.getState())); + } + + @Override + public Enum getInputType() { + return MessageInputType.OSCORE_APP_MESSAGE; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java index 6618007d..d688b0d1 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java @@ -2,7 +2,6 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.MapperOutput; - import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; @@ -14,7 +13,7 @@ public class EdhocOutputRA extends PSymbolInstance implements MapperOutput { List messages; - public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, DataValue... parameterValues) { + public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... parameterValues) { super(baseSymbol, parameterValues); this.messages = messages; } From d3c223aeb0b92a7a0ab939e0a8ef29aa9fc62b73 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Mon, 26 Feb 2024 15:36:01 +0100 Subject: [PATCH 017/169] Change setup to clone our version of PSF --- scripts/setup_fuzzer.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index cd55d848..b25437c2 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,11 +8,11 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="generics" + CHECKOUT="main" set -e cd "${BASE_DIR}" - git clone "https://github.com/protocol-fuzzing/protocol-state-fuzzer.git" + git clone "https://github.com/Kax-y/protocol-state-fuzzer.git" cd protocol-state-fuzzer git checkout "${CHECKOUT}" bash ./install.sh From 2991b46e14f7b878ca406e72e87c6da8130ca2cc Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Wed, 28 Feb 2024 16:10:34 +0100 Subject: [PATCH 018/169] Try to make OutputMapper map C_I to a parameter Co-authored-by: Linus Olofsson --- .../protocolfuzzing/edhocfuzzer/Main.java | 2 +- .../edhocfuzzer/MultiBuilderRA.java | 33 ++++-- .../mapper/mappers/EdhocOutputMapperRA.java | 104 ++++++++++++++---- .../mapper/symbols/outputs/EdhocOutputRA.java | 6 +- 4 files changed, 110 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index 62e97580..f5e160e1 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -6,7 +6,7 @@ public class Main { public static void main(String[] args) { - MultiBuilder mb = new MultiBuilder(); + MultiBuilderRA mb = new MultiBuilderRA(); String[] parentLoggers = {Main.class.getPackageName()}; CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 15eb2d9e..5a859f62 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -36,16 +36,23 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbeStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; +import com.upokecenter.cbor.CBORObject; +import de.learnlib.ralib.data.DataType; +import de.learnlib.ralib.theory.Theory; +import de.learnlib.ralib.tools.theories.IntegerEqualityTheory; + +import java.util.LinkedHashMap; +import java.util.Map; public class MultiBuilderRA implements - StateFuzzerConfigBuilder, - StateFuzzerBuilder>, - TestRunnerBuilder, - TimingProbeBuilder { + StateFuzzerConfigBuilder, + StateFuzzerBuilder>, + TestRunnerBuilder, + TimingProbeBuilder { protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( - new AlphabetSerializerXml(EdhocInputRA.class, EdhocAlphabetPojoXmlRA.class) - ); + new AlphabetSerializerXml(EdhocInputRA.class, + EdhocAlphabetPojoXmlRA.class)); protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); protected SulWrapper sulWrapper = new SulWrapperStandard<>(); @@ -56,8 +63,7 @@ public StateFuzzerClientConfig buildClientConfig() { new LearnerConfigRA(), new EdhocSulClientConfig(new EdhocMapperConfig()), new TestRunnerConfigStandard(), - new TimingProbeConfigStandard() - ); + new TimingProbeConfigStandard()); } @Override @@ -66,15 +72,18 @@ public StateFuzzerServerConfig buildServerConfig() { new LearnerConfigRA(), new EdhocSulServerConfig(new EdhocMapperConfig()), new TestRunnerConfigStandard(), - new TimingProbeConfigStandard() - ); + new TimingProbeConfigStandard()); } @Override public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { + DataType T_CI = new DataType("C_I", CBORObject.class); + @SuppressWarnings("rawtypes") + final Map teachers = new LinkedHashMap<>(); + teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); return new StateFuzzerRA<>( - new StateFuzzerComposerRA(stateFuzzerEnabler, alphabetBuilder, sulBuilder, sulWrapper, null).initialize() - ); + new StateFuzzerComposerRA(stateFuzzerEnabler, + alphabetBuilder, sulBuilder, sulWrapper, teachers).initialize()); } @Override diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index fd50847c..e2d092ae 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -17,19 +17,25 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; +import com.upokecenter.cbor.CBORObject; +import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.ParameterizedSymbol; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.nio.charset.StandardCharsets; import java.util.List; +import java.util.Map; public class EdhocOutputMapperRA extends OutputMapper { private static final Logger LOGGER = LogManager.getLogger(); EdhocMapperConnector edhocMapperConnector; + Map baseSymbols; + public EdhocOutputMapperRA(MapperConfig mapperConfig, EdhocOutputBuilderRA edhocOutputBuilder, EdhocOutputCheckerRA edhocOutputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, edhocOutputBuilder, edhocOutputChecker); @@ -50,12 +56,16 @@ public EdhocOutputRA receiveOutput(EdhocExecutionContextRA context) { } catch (UnsupportedMessageException e) { // special output to demonstrate that the input message the learner requested // was unable to be sent and deemed unsupported - return edhocOutputRA(MessageOutputType.UNSUPPORTED_MESSAGE); + + OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } catch (UnsuccessfulMessageException e) { // special output to demonstrate that the received message evoked an error // in a middle layer and did not reach the upper resource in the case of // server mapper - return edhocOutputRA(MessageOutputType.UNSUCCESSFUL_MESSAGE); + + OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } EdhocOutputRA abstractOutput; @@ -95,7 +105,9 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP.name(), + (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } if (edhocMapperConnector.receivedOscoreAppMessage()) { @@ -113,7 +125,8 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - return edhocOutputRA(MessageOutputType.OSCORE_APP_MESSAGE); + OutputSymbol base = new OutputSymbol(MessageOutputType.OSCORE_APP_MESSAGE.name(), (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } return null; @@ -122,33 +135,59 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] responsePayload) { MessageProcessorPersistent messageProcessorPersistent = new MessageProcessorPersistent(edhocMapperState); boolean ok; + DataType T_CI = new DataType("C_I", CBORObject.class); switch (messageProcessorPersistent.messageTypeFromStructure(responsePayload)) { case EDHOC_ERROR_MESSAGE -> { ok = messageProcessorPersistent.readErrorMessage(responsePayload); - return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_ERROR_MESSAGE); + + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), (DataType[]) null); + return edhocOutputAfterCheck(ok, base, (DataValue[]) null); } case EDHOC_MESSAGE_1 -> { ok = messageProcessorPersistent.readMessage1(responsePayload); - return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_1); + + CBORObject parameter = CBORObject + .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_1.name(), T_CI); + + DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base, value); } case EDHOC_MESSAGE_2 -> { ok = messageProcessorPersistent.readMessage2(responsePayload); - return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_2); + + CBORObject parameter = CBORObject + .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + + DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base, value); } case EDHOC_MESSAGE_3_OR_4 -> { // message may be 3 or 4 LOGGER.info("Reading as EDHOC Message 3 or 4"); ok = messageProcessorPersistent.readMessage3(responsePayload); + if (ok) { - return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_3); + CBORObject parameter = CBORObject + .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + + DataValue value = new DataValue(T_CI, parameter); + return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); - return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_4); + CBORObject parameter = CBORObject + .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + + DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base, value); } case EDHOC_MESSAGE_2_OR_3_OR_4 -> { @@ -156,16 +195,31 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] LOGGER.info("Reading as EDHOC Message 2 or 3 or 4"); ok = messageProcessorPersistent.readMessage2(responsePayload); if (ok) { - return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_2); + CBORObject parameter = CBORObject + .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + + DataValue value = new DataValue(T_CI, parameter); + return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { - return edhocOutputRA(MessageOutputType.EDHOC_MESSAGE_3); + CBORObject parameter = CBORObject + .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name(), T_CI); + + DataValue value = new DataValue(T_CI, parameter); + return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); - return edhocOutputAfterCheck(ok, MessageOutputType.EDHOC_MESSAGE_4); + CBORObject parameter = CBORObject + .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name(), T_CI); + + DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base, value); } default -> { @@ -195,7 +249,8 @@ protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] res * Server Mapper: * received empty coap request for some reason */ - return edhocOutputRA(MessageOutputType.COAP_EMPTY_MESSAGE); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_EMPTY_MESSAGE.name(), (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } // Check for unprotected coap message @@ -207,28 +262,35 @@ protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] res LOGGER.info("COAP_APP_MESSAGE ({}): {} ~ {}", messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - return edhocOutputRA(MessageOutputType.COAP_APP_MESSAGE); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_APP_MESSAGE.name(), (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } // if payload was not empty then a coap message is received // because no other transport protocol than coap is supported yet - return edhocOutputAfterCheck(responsePayload != null, MessageOutputType.COAP_MESSAGE); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_MESSAGE.name(), (DataType[]) null); + @SuppressWarnings("rawtypes") + DataValue[] values = (DataValue[]) null; + return edhocOutputAfterCheck(responsePayload != null, base, values); } protected EdhocOutputRA coapError() { if (((EdhocMapperConfig) mapperConfig).isCoapErrorAsEdhocError()) { - return edhocOutputRA(MessageOutputType.EDHOC_ERROR_MESSAGE); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } else { - return edhocOutputRA(MessageOutputType.COAP_ERROR_MESSAGE); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_ERROR_MESSAGE.name(), (DataType[]) null); + return edhocOutputRA(base, (DataValue[]) null); } } - protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, MessageOutputType type) { - return successfulCheck ? edhocOutputRA(type) : null; + protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, + @SuppressWarnings("rawtypes") DataValue... values) { + return successfulCheck ? edhocOutputRA(baseSymbol, values) : null; } - protected EdhocOutputRA edhocOutputRA(MessageOutputType type) { - return new EdhocOutputRA(type.name()); + protected EdhocOutputRA edhocOutputRA(OutputSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... values) { + return new EdhocOutputRA(baseSymbol, values); } protected EdhocOutputRA buildOutput(List messages, ParameterizedSymbol baseSymbol, diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java index d688b0d1..fb08639c 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java @@ -13,12 +13,16 @@ public class EdhocOutputRA extends PSymbolInstance implements MapperOutput { List messages; + public EdhocOutputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... parameterValues) { + super(baseSymbol, parameterValues); + } + public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... parameterValues) { super(baseSymbol, parameterValues); this.messages = messages; } - /** Used only by @link #EdhocOutputBuilder. */ + /** Used only by @link #EdhocOutputBuilderRA. */ public EdhocOutputRA(String name) { super(new OutputSymbol(name, (DataType[]) null), (DataValue[]) null); } From 9a30c0f3a44b8757d61c1d3dd66882b9acddaa09 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Wed, 28 Feb 2024 16:11:39 +0100 Subject: [PATCH 019/169] Co-authored-by: Linus Olofsson --- pom.xml | 3 ++- scripts/setup_fuzzer.sh | 25 ++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index faa75ccf..03f6e706 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,8 @@ 33.5.0-jre 4.0.4 1.82 - 2.25.3 + 2.22.1 + 0.1-SNAPSHOT diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index b25437c2..8213b6a0 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -22,6 +22,23 @@ setup_psf() { set +e } +setup_ralib() { + # setup RALib + + CHECKOUT="main" + + set -e + cd "${BASE_DIR}" + git clone "https://github.com/LearnLib/ralib" + cd ralib + git checkout ${CHECKOUT} + mvn install + + cd "${BASE_DIR}" + rm -rf ./ralib/ + set +e +} + setup_cf_edhoc() { # setup cf-edhoc library @@ -68,19 +85,21 @@ usage() { Options (library setup prior to EDHOC-Fuzzer): -p Fetch and setup only protocol-state-fuzzer library -e Fetch and setup only cf-edhoc library - -l Fetch and setup protocol-state-fuzzer and cf-edhoc libraries + -r Fetch and setup only ralib + -l Fetch and setup protocol-state-fuzzer, ralib and cf-edhoc libraries -h Show usage message END exit 0 } -while getopts :pelh flag +while getopts :pelrh flag do case "${flag}" in p) setup_psf ;; e) setup_cf_edhoc ;; - l) setup_psf; setup_cf_edhoc ;; + r) setup_ralib ;; + l) setup_ralib; setup_psf; setup_cf_edhoc ;; : | \? | h | *) usage ;; esac done From 83b2bbf6ea84ea63fe58711f69030520f207db78 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Wed, 28 Feb 2024 17:05:29 +0100 Subject: [PATCH 020/169] spotbugs + pom update unclear why we need learnlib --- pom.xml | 21 +++++++++++++++++++ .../mapper/mappers/EdhocOutputMapperRA.java | 3 --- .../mapper/symbols/outputs/EdhocOutputRA.java | 14 +++++++++++++ 3 files changed, 35 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 03f6e706..05b9f757 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,7 @@ com.github.protocolfuzzing edhoc-fuzzer 1.0.0 + pom UTF-8 @@ -78,6 +79,15 @@ runtime + + + de.learnlib + ralib + ${ralib.version} + pom + import + + com.google.code.gson @@ -131,6 +141,13 @@ log4j-slf4j-impl + + + de.learnlib + ralib + ${ralib.version} + + com.google.code.gson @@ -182,6 +199,10 @@ org.slf4j:slf4j-api + + + de.learnlib:learnlib-api:jar:* + diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index e2d092ae..830f991b 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -27,15 +27,12 @@ import java.nio.charset.StandardCharsets; import java.util.List; -import java.util.Map; public class EdhocOutputMapperRA extends OutputMapper { private static final Logger LOGGER = LogManager.getLogger(); EdhocMapperConnector edhocMapperConnector; - Map baseSymbols; - public EdhocOutputMapperRA(MapperConfig mapperConfig, EdhocOutputBuilderRA edhocOutputBuilder, EdhocOutputCheckerRA edhocOutputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, edhocOutputBuilder, edhocOutputChecker); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java index fb08639c..1a03bdd5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java @@ -27,6 +27,20 @@ public EdhocOutputRA(String name) { super(new OutputSymbol(name, (DataType[]) null), (DataValue[]) null); } + @Override + public boolean equals(Object other) { + if (other instanceof EdhocOutputRA) { + return super.equals((PSymbolInstance) other); + } else { + return false; + } + } + + @Override + public int hashCode() { + return super.hashCode(); + } + @Override public boolean isComposite() { // TODO Auto-generated method stub From 5404eae8087f508f4a283434bf5bdc0cdec5927a Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 29 Feb 2024 11:06:58 +0100 Subject: [PATCH 021/169] Remove pom packaging Co-authored-by: 00oskpet <00oskpet@users.noreply.github.com> --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 05b9f757..100e2d8c 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,6 @@ com.github.protocolfuzzing edhoc-fuzzer 1.0.0 - pom UTF-8 From 2cede5cebfb38946f1ee14433ccae44fd5d8343c Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 29 Feb 2024 11:42:40 +0100 Subject: [PATCH 022/169] Update pom.xml --- pom.xml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pom.xml b/pom.xml index 100e2d8c..5fd2b0d8 100644 --- a/pom.xml +++ b/pom.xml @@ -83,8 +83,6 @@ de.learnlib ralib ${ralib.version} - pom - import From e52721169472542d5a9e1a48d6605cfbdd962926 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 29 Feb 2024 11:44:20 +0100 Subject: [PATCH 023/169] Replace suppress rawtype warnings with Co-authored-by: 00oskpet <42684085+00oskpet@users.noreply.github.com> --- .../sul/mapper/mappers/EdhocOutputMapperRA.java | 11 ++++------- .../mapper/symbols/inputs/CoapAppMessageInputRA.java | 2 +- .../symbols/inputs/CoapEmptyMessageInputRA.java | 2 +- .../symbols/inputs/EdhocErrorMessageInputRA.java | 2 +- .../sul/mapper/symbols/inputs/EdhocInputRA.java | 2 +- .../mapper/symbols/inputs/EdhocMessage2InputRA.java | 2 +- .../mapper/symbols/inputs/EdhocMessage3InputRA.java | 2 +- .../symbols/inputs/EdhocMessage3OscoreAppInputRA.java | 2 +- .../mapper/symbols/inputs/EdhocMessage4InputRA.java | 2 +- .../symbols/inputs/OscoreAppMessageInputRA.java | 2 +- .../sul/mapper/symbols/outputs/EdhocOutputRA.java | 4 ++-- 11 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index 830f991b..e19672f2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -266,8 +266,7 @@ protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] res // if payload was not empty then a coap message is received // because no other transport protocol than coap is supported yet OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_MESSAGE.name(), (DataType[]) null); - @SuppressWarnings("rawtypes") - DataValue[] values = (DataValue[]) null; + DataValue[] values = (DataValue[]) null; return edhocOutputAfterCheck(responsePayload != null, base, values); } @@ -281,17 +280,15 @@ protected EdhocOutputRA coapError() { } } - protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, - @SuppressWarnings("rawtypes") DataValue... values) { + protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, DataValue... values) { return successfulCheck ? edhocOutputRA(baseSymbol, values) : null; } - protected EdhocOutputRA edhocOutputRA(OutputSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... values) { + protected EdhocOutputRA edhocOutputRA(OutputSymbol baseSymbol, DataValue... values) { return new EdhocOutputRA(baseSymbol, values); } - protected EdhocOutputRA buildOutput(List messages, ParameterizedSymbol baseSymbol, - @SuppressWarnings("rawtypes") DataValue... parameterValues) { + protected EdhocOutputRA buildOutput(List messages, ParameterizedSymbol baseSymbol, DataValue... parameterValues) { return new EdhocOutputRA(messages, baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java index ab3ebec5..9f0e4b69 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java @@ -9,7 +9,7 @@ public class CoapAppMessageInputRA extends EdhocInputRA { - CoapAppMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + CoapAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java index 6788c877..b893906a 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java @@ -9,7 +9,7 @@ public class CoapEmptyMessageInputRA extends EdhocInputRA { - CoapEmptyMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + CoapEmptyMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java index 7e041c45..fe6015be 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java @@ -9,7 +9,7 @@ public class EdhocErrorMessageInputRA extends EdhocInputRA { - EdhocErrorMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + EdhocErrorMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java index ad4daf8d..36fd60c7 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java @@ -13,7 +13,7 @@ public abstract class EdhocInputRA extends PSymbolInstance implements MapperInput { public abstract Enum getInputType(); - EdhocInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... parameterValues) { + EdhocInputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java index d86256cf..3cb188d8 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java @@ -9,7 +9,7 @@ public class EdhocMessage2InputRA extends EdhocInputRA { - EdhocMessage2InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + EdhocMessage2InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java index 4cfae2a4..fd90afe9 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java @@ -9,7 +9,7 @@ public class EdhocMessage3InputRA extends EdhocInputRA { - EdhocMessage3InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + EdhocMessage3InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java index f936f3fc..4400b8f6 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java @@ -9,7 +9,7 @@ public class EdhocMessage3OscoreAppInputRA extends EdhocInputRA { - EdhocMessage3OscoreAppInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + EdhocMessage3OscoreAppInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java index a2889a72..204729bf 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java @@ -9,7 +9,7 @@ public class EdhocMessage4InputRA extends EdhocInputRA { - EdhocMessage4InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + EdhocMessage4InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java index d4f6b200..267c93b7 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java @@ -9,7 +9,7 @@ public class OscoreAppMessageInputRA extends EdhocInputRA { - OscoreAppMessageInputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + OscoreAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java index 1a03bdd5..5969124b 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java @@ -13,11 +13,11 @@ public class EdhocOutputRA extends PSymbolInstance implements MapperOutput { List messages; - public EdhocOutputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... parameterValues) { + public EdhocOutputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { super(baseSymbol, parameterValues); } - public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue... parameterValues) { + public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, DataValue... parameterValues) { super(baseSymbol, parameterValues); this.messages = messages; } From 71c1998996977094e64262592f6c802f5112b9dc Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 29 Feb 2024 12:16:15 +0100 Subject: [PATCH 024/169] Update EdhocSessionPersistent with generated DataValues from RALib learner Co-authored-by: 00oskpet <42684085+00oskpet@users.noreply.github.com> --- .../mapper/symbols/inputs/EdhocInputRA.java | 28 +++++++++++++++++++ .../symbols/inputs/EdhocMessage1InputRA.java | 4 ++- .../symbols/inputs/EdhocMessage2InputRA.java | 8 ++++++ .../symbols/inputs/EdhocMessage3InputRA.java | 8 ++++++ .../inputs/EdhocMessage3OscoreAppInputRA.java | 5 ++++ .../symbols/inputs/EdhocMessage4InputRA.java | 8 ++++++ .../inputs/OscoreAppMessageInputRA.java | 8 ++++++ 7 files changed, 68 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java index 36fd60c7..b434686f 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java @@ -1,10 +1,13 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.MapperInput; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; +import com.upokecenter.cbor.CBORObject; +import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; @@ -13,6 +16,8 @@ public abstract class EdhocInputRA extends PSymbolInstance implements MapperInput { public abstract Enum getInputType(); + protected DataType T_CI = new DataType("C_I", CBORObject.class); + EdhocInputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { super(baseSymbol, parameterValues); } @@ -48,4 +53,27 @@ public void setExtendedWait(Long value) { public String getName() { return this.getBaseSymbol().getName(); } + + /* + * TODO This is bad in multiple ways: + * - We need to have access to the datatype, which means defining it multiple + * times. For teachers, EdhocInputRA and the EdhocOutputMapperRA. + * - It is uncertain if we can cast back to CBORObject, since the learner + * selects a random new value, which it is unreasonable to assume it can convert + * to any type, + * since it only has the integer equality theories. + * - If the C_I is a bytestring it is unclear if use of a mapper to convert from + * a randomly selected integer in the learner to a corresponding bytestring is + * possible. + */ + public void updatePeerConnectionId(EdhocSessionPersistent session) { + for (DataValue dv : this.getParameterValues()) { + if (dv.getType().equals(T_CI)) { + + // TODO: Unsafe typecast. + CBORObject value = (CBORObject) dv.getId(); + session.setPeerConnectionId(value.EncodeToBytes()); + } + } + } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java index d24de028..ae9022ec 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java @@ -10,7 +10,7 @@ public class EdhocMessage1InputRA extends EdhocInputRA { - EdhocMessage1InputRA(ParameterizedSymbol baseSymbol, @SuppressWarnings("rawtypes") DataValue[] parameterValues) { + EdhocMessage1InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } @@ -23,6 +23,8 @@ public void preSendUpdate(EdhocExecutionContextRA context) { // so previous session state must be cleaned unless reset is disabled session.resetIfEnabled(); } + + updatePeerConnectionId(session); } @Override diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java index 3cb188d8..4d96d655 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage2; @@ -18,6 +19,13 @@ public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA cont return new EdhocMessage2(new MessageProcessorPersistent(context.getState())); } + @Override + public void preSendUpdate(EdhocExecutionContextRA context) { + EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + + updatePeerConnectionId(session); + } + @Override public Enum getInputType() { return MessageInputType.EDHOC_MESSAGE_2; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java index fd90afe9..413d6b6d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3; @@ -13,6 +14,13 @@ public class EdhocMessage3InputRA extends EdhocInputRA { super(baseSymbol, parameterValues); } + @Override + public void preSendUpdate(EdhocExecutionContextRA context) { + EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + + updatePeerConnectionId(session); + } + @Override public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { return new EdhocMessage3(new MessageProcessorPersistent(context.getState())); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java index 4400b8f6..4b84e81d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3OscoreApp; @@ -15,6 +16,10 @@ public class EdhocMessage3OscoreAppInputRA extends EdhocInputRA { @Override public void preSendUpdate(EdhocExecutionContextRA context) { + EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + + updatePeerConnectionId(session); + // construct Message3 in order to store it in session 'message3' field, // derive new oscore context and make Message3 available to oscore layer new MessageProcessorPersistent(context.getState()).writeMessage3(); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java index 204729bf..d5e7e943 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage4; @@ -13,6 +14,13 @@ public class EdhocMessage4InputRA extends EdhocInputRA { super(baseSymbol, parameterValues); } + @Override + public void preSendUpdate(EdhocExecutionContextRA context) { + EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + + updatePeerConnectionId(session); + } + @Override public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { return new EdhocMessage4(new MessageProcessorPersistent(context.getState())); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java index 267c93b7..c49927d4 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.OscoreAppMessage; @@ -13,6 +14,13 @@ public class OscoreAppMessageInputRA extends EdhocInputRA { super(baseSymbol, parameterValues); } + @Override + public void preSendUpdate(EdhocExecutionContextRA context) { + EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + + updatePeerConnectionId(session); + } + @Override public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { return new OscoreAppMessage(new MessageProcessorPersistent(context.getState())); From 33c7662af4fe0ce6ddb997ba60649bfd31e30545 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 6 Mar 2024 12:40:38 +0100 Subject: [PATCH 025/169] Implement AlphabetTransformer and use it Co-authored-by: 00oskpet <00oskpet@users.noreply.github.com> --- .../edhocfuzzer/AlphabetTransformerRA.java | 60 +++++++++++++++++++ .../edhocfuzzer/MultiBuilderRA.java | 7 ++- .../learner/EdhocAlphabetPojoXmlRA.java | 8 +-- .../symbols/inputs/CoapAppMessageInputRA.java | 2 +- .../inputs/CoapEmptyMessageInputRA.java | 2 +- .../inputs/EdhocErrorMessageInputRA.java | 2 +- .../symbols/inputs/EdhocMessage1InputRA.java | 2 +- .../symbols/inputs/EdhocMessage2InputRA.java | 2 +- .../symbols/inputs/EdhocMessage3InputRA.java | 2 +- .../inputs/EdhocMessage3OscoreAppInputRA.java | 2 +- .../symbols/inputs/EdhocMessage4InputRA.java | 2 +- .../mapper/symbols/inputs/InputSymbolXml.java | 31 ++++++++++ .../inputs/OscoreAppMessageInputRA.java | 2 +- 13 files changed, 109 insertions(+), 15 deletions(-) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java new file mode 100644 index 00000000..29e92caf --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java @@ -0,0 +1,60 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.InputSymbolXml; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputType; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderTransformer; +import de.learnlib.ralib.words.InputSymbol; + +public class AlphabetTransformerRA extends AlphabetBuilderTransformer { + public AlphabetTransformerRA(AlphabetBuilderStandard alphabetBuilderStandard) { + super(alphabetBuilderStandard); + } + + @Override + public InputSymbolXml fromTransformedInput(EdhocInputRA input) { + InputSymbolXml result = new InputSymbolXml(); + result.setName(input.getBaseSymbol().getName()); + result.setDataTypes(input.getBaseSymbol().getPtypes()); + return result; + } + + @Override + public EdhocInputRA toTransformedInput(InputSymbolXml input) { + InputSymbol base = new InputSymbol(input.getName(), input.getDataTypes()); + switch (MessageInputType.valueOf(input.getName())) { + case EDHOC_MESSAGE_1: + return new EdhocMessage1InputRA(base, null); + + case EDHOC_MESSAGE_2: + return new EdhocMessage2InputRA(base, null); + + case EDHOC_MESSAGE_3: + return new EdhocMessage3InputRA(base, null); + + case EDHOC_MESSAGE_3_OSCORE_APP: + return new EdhocMessage3OscoreAppInputRA(base, null); + + case EDHOC_MESSAGE_4: + return new EdhocMessage4InputRA(base, null); + + case EDHOC_ERROR_MESSAGE: + return new EdhocErrorMessageInputRA(base, null); + + case OSCORE_APP_MESSAGE: + return new OscoreAppMessageInputRA(base, null); + + case COAP_APP_MESSAGE: + return new CoapAppMessageInputRA(base, null); + + case COAP_EMPTY_MESSAGE: + return new CoapEmptyMessageInputRA(base, null); + + default: + throw new RuntimeException("Invalid input type, no such input type exists"); + } + + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 5a859f62..0facf796 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -7,6 +7,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.InputSymbolXml; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; @@ -50,9 +51,11 @@ public class MultiBuilderRA implements TestRunnerBuilder, TimingProbeBuilder { - protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( - new AlphabetSerializerXml(EdhocInputRA.class, + protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( + new AlphabetSerializerXml(InputSymbolXml.class, EdhocAlphabetPojoXmlRA.class)); + + protected AlphabetTransformerRA alphabetTransformer = new AlphabetTransformerRA((AlphabetBuilderStandard) alphabetBuilder); protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); protected SulWrapper sulWrapper = new SulWrapperStandard<>(); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java index 5c79ce5b..33e316bb 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java @@ -12,7 +12,7 @@ @XmlRootElement(name = "alphabet") @XmlAccessorType(XmlAccessType.FIELD) -public class EdhocAlphabetPojoXmlRA extends AlphabetPojoXml { +public class EdhocAlphabetPojoXmlRA extends AlphabetPojoXml { @XmlElements(value = { @XmlElement(type = EdhocMessage1InputRA.class, name = "EdhocMessage1Input"), @XmlElement(type = EdhocMessage2InputRA.class, name = "EdhocMessage2Input"), @@ -24,16 +24,16 @@ public class EdhocAlphabetPojoXmlRA extends AlphabetPojoXml { @XmlElement(type = CoapAppMessageInputRA.class, name = "CoapAppMessageInput"), @XmlElement(type = CoapEmptyMessageInputRA.class, name = "CoapEmptyMessageInput") }) - protected List inputs; + protected List inputs; public EdhocAlphabetPojoXmlRA() {} - public EdhocAlphabetPojoXmlRA(List inputs) { + public EdhocAlphabetPojoXmlRA(List inputs) { this.inputs = inputs; } @Override - public List getInputs(){ + public List getInputs(){ return inputs; } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java index 9f0e4b69..38d201bf 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java @@ -9,7 +9,7 @@ public class CoapAppMessageInputRA extends EdhocInputRA { - CoapAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public CoapAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java index b893906a..fd3a9e0a 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java @@ -9,7 +9,7 @@ public class CoapEmptyMessageInputRA extends EdhocInputRA { - CoapEmptyMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public CoapEmptyMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java index fe6015be..781ab6b6 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java @@ -9,7 +9,7 @@ public class EdhocErrorMessageInputRA extends EdhocInputRA { - EdhocErrorMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public EdhocErrorMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java index ae9022ec..b58a4cd2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java @@ -10,7 +10,7 @@ public class EdhocMessage1InputRA extends EdhocInputRA { - EdhocMessage1InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public EdhocMessage1InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java index 4d96d655..a24d031b 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java @@ -10,7 +10,7 @@ public class EdhocMessage2InputRA extends EdhocInputRA { - EdhocMessage2InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public EdhocMessage2InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java index 413d6b6d..65d1e378 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java @@ -10,7 +10,7 @@ public class EdhocMessage3InputRA extends EdhocInputRA { - EdhocMessage3InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public EdhocMessage3InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java index 4b84e81d..0164d406 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java @@ -10,7 +10,7 @@ public class EdhocMessage3OscoreAppInputRA extends EdhocInputRA { - EdhocMessage3OscoreAppInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public EdhocMessage3OscoreAppInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java index d5e7e943..3babd597 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java @@ -10,7 +10,7 @@ public class EdhocMessage4InputRA extends EdhocInputRA { - EdhocMessage4InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public EdhocMessage4InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java new file mode 100644 index 00000000..8edb6996 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java @@ -0,0 +1,31 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import de.learnlib.ralib.data.DataType; +import jakarta.xml.bind.annotation.XmlAttribute; + +public class InputSymbolXml { + + private String name = null; + private DataType[] types = null; + + public InputSymbolXml() { + } + + @XmlAttribute(name = "name", required = true) + public void setName(String name) { + this.name = name; + } + + public String getName() { + return this.name; + } + + @XmlAttribute(name = "datatype", required = false) + public void setDataTypes(DataType[] types) { + this.types = types; + } + + public DataType[] getDataTypes() { + return this.types; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java index c49927d4..6775c18c 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java @@ -10,7 +10,7 @@ public class OscoreAppMessageInputRA extends EdhocInputRA { - OscoreAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { + public OscoreAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { super(baseSymbol, parameterValues); } From 3dba4c57cd69bf8e8ad7d62b4a04e930840b9c35 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Wed, 6 Mar 2024 14:53:16 +0100 Subject: [PATCH 026/169] Spotless:apply Co-authored-by: Linus Olofsson --- .../sul/mapper/symbols/outputs/MessageOutputType.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java index 7f834f91..26fecbe3 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java @@ -1,6 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; -/** Messages that can be received. +/** + * Messages that can be received. * The last four are from the OutputBuilder. */ public enum MessageOutputType { From dbbc2816acf29330f3db550f2ac96b65b2f9597c Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Wed, 6 Mar 2024 14:57:06 +0100 Subject: [PATCH 027/169] Restructure and add getDataTypes Co-authored-by: Linus Olofsson --- .../sul/mapper/symbols/inputs/EdhocInputRA.java | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java index b434686f..601b63fe 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java @@ -12,17 +12,19 @@ import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; + public abstract class EdhocInputRA extends PSymbolInstance implements MapperInput { - public abstract Enum getInputType(); + private long extendedWait = 0; protected DataType T_CI = new DataType("C_I", CBORObject.class); + EdhocInputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { super(baseSymbol, parameterValues); } - private long extendedWait = 0; + public abstract Enum getInputType(); @Override public void preSendUpdate(EdhocExecutionContextRA context) { @@ -54,14 +56,17 @@ public String getName() { return this.getBaseSymbol().getName(); } + public DataType[] getDataTypes() { + return this.getBaseSymbol().getPtypes(); + } + /* * TODO This is bad in multiple ways: * - We need to have access to the datatype, which means defining it multiple * times. For teachers, EdhocInputRA and the EdhocOutputMapperRA. * - It is uncertain if we can cast back to CBORObject, since the learner - * selects a random new value, which it is unreasonable to assume it can convert - * to any type, - * since it only has the integer equality theories. + * selects a random new value, which means it is unreasonable to assume it can + * convert to any type, since it only has the integer equality theories. * - If the C_I is a bytestring it is unclear if use of a mapper to convert from * a randomly selected integer in the learner to a corresponding bytestring is * possible. From 7849514b8abaa889433fd921403980931aafee0c Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Wed, 6 Mar 2024 14:58:07 +0100 Subject: [PATCH 028/169] Use the AlphabetTransformerRA in the creation of StateFuzzerRA, TimingProbe and TestRunner --- .../protocolfuzzing/edhocfuzzer/MultiBuilderRA.java | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 0facf796..fa3768c7 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -9,7 +9,6 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.InputSymbolXml; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.xml.AlphabetSerializerXml; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; @@ -51,11 +50,11 @@ public class MultiBuilderRA implements TestRunnerBuilder, TimingProbeBuilder { - protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( + protected AlphabetBuilderStandard alphabetBuilder = new AlphabetBuilderStandard<>( new AlphabetSerializerXml(InputSymbolXml.class, EdhocAlphabetPojoXmlRA.class)); - - protected AlphabetTransformerRA alphabetTransformer = new AlphabetTransformerRA((AlphabetBuilderStandard) alphabetBuilder); + + protected AlphabetTransformerRA alphabetTransformer = new AlphabetTransformerRA(alphabetBuilder); protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); protected SulWrapper sulWrapper = new SulWrapperStandard<>(); @@ -86,16 +85,16 @@ public StateFuzzer> build(StateFuzzerEnab teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); return new StateFuzzerRA<>( new StateFuzzerComposerRA(stateFuzzerEnabler, - alphabetBuilder, sulBuilder, sulWrapper, teachers).initialize()); + alphabetTransformer, sulBuilder, sulWrapper, teachers).initialize()); } @Override public TestRunner build(TestRunnerEnabler testRunnerEnabler) { - return new TestRunnerStandard<>(testRunnerEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize(); + return new TestRunnerStandard<>(testRunnerEnabler, alphabetTransformer, sulBuilder, sulWrapper).initialize(); } @Override public TimingProbe build(TimingProbeEnabler timingProbeEnabler) { - return new TimingProbeStandard<>(timingProbeEnabler, alphabetBuilder, sulBuilder, sulWrapper).initialize(); + return new TimingProbeStandard<>(timingProbeEnabler, alphabetTransformer, sulBuilder, sulWrapper).initialize(); } } From 6f29063212ee15aa22aa1f27df129e59be643411 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:58:16 +0100 Subject: [PATCH 029/169] Make XML-equivalent for DataType and use it in AlphabetTransformer and InputSymbolXML Co-authored-by: Linus Olofsson --- .../edhocfuzzer/AlphabetTransformerRA.java | 22 +++++++++----- .../mapper/symbols/inputs/DataTypeXml.java | 30 +++++++++++++++++++ .../mapper/symbols/inputs/InputSymbolXml.java | 25 ++++++++-------- 3 files changed, 56 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java index 29e92caf..f83afda2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java @@ -1,13 +1,13 @@ package com.github.protocolfuzzing.edhocfuzzer; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.InputSymbolXml; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderTransformer; +import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.words.InputSymbol; +import java.util.Arrays; + public class AlphabetTransformerRA extends AlphabetBuilderTransformer { public AlphabetTransformerRA(AlphabetBuilderStandard alphabetBuilderStandard) { super(alphabetBuilderStandard); @@ -15,15 +15,21 @@ public AlphabetTransformerRA(AlphabetBuilderStandard alphabetBui @Override public InputSymbolXml fromTransformedInput(EdhocInputRA input) { - InputSymbolXml result = new InputSymbolXml(); - result.setName(input.getBaseSymbol().getName()); - result.setDataTypes(input.getBaseSymbol().getPtypes()); - return result; + DataTypeXml[] types = Arrays.stream(input.getDataTypes()) + .map(type -> new DataTypeXml(type.getName(), type.getBase())).toArray(DataTypeXml[]::new); + return new InputSymbolXml(input.getName(), types); } @Override public EdhocInputRA toTransformedInput(InputSymbolXml input) { - InputSymbol base = new InputSymbol(input.getName(), input.getDataTypes()); + DataType[] types = Arrays.stream(input.getDataTypes()).map(type -> new DataType(type.getName(), type.getBase())) + .toArray(DataType[]::new); + InputSymbol base = new InputSymbol(input.getName(), types); + + if (input.getName() == null) { + throw new RuntimeException("Nameless symbol found, possibly due to malformed alphabet file"); + } + switch (MessageInputType.valueOf(input.getName())) { case EDHOC_MESSAGE_1: return new EdhocMessage1InputRA(base, null); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java new file mode 100644 index 00000000..9c374b3f --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java @@ -0,0 +1,30 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; + +@XmlAccessorType(XmlAccessType.FIELD) +public class DataTypeXml { + + private String name = null; + + // TODO: this might not be parsable by default, we might need to do lookup on a string. + private Class base = null; + + public DataTypeXml (String name, Class base) { + this.name = name; + this.base = base; + } + + public DataTypeXml() { + this(null, null); + } + + public String getName() { + return this.name; + } + + public Class getBase() { + return this.base; + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java index 8edb6996..51aa97c7 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java @@ -1,31 +1,30 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; -import de.learnlib.ralib.data.DataType; -import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlRootElement; +@XmlRootElement(name = "InputSymbol") public class InputSymbolXml { + @XmlElement(name="Name") private String name = null; - private DataType[] types = null; - public InputSymbolXml() { - } + @XmlElement(name="DataTypes") + private DataTypeXml[] types = {}; - @XmlAttribute(name = "name", required = true) - public void setName(String name) { + public InputSymbolXml(String name, DataTypeXml... types) { this.name = name; + this.types = types; } - public String getName() { - return this.name; + public InputSymbolXml() { } - @XmlAttribute(name = "datatype", required = false) - public void setDataTypes(DataType[] types) { - this.types = types; + public String getName() { + return this.name; } - public DataType[] getDataTypes() { + public DataTypeXml[] getDataTypes() { return this.types; } } From 3601012e72c2ef8ad0d88d6a662185aba7be46c7 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:58:50 +0100 Subject: [PATCH 030/169] Update PojoXML with InputSymbolXML class --- .../learner/EdhocAlphabetPojoXmlRA.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java index 33e316bb..cbba61d8 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java @@ -14,15 +14,15 @@ @XmlAccessorType(XmlAccessType.FIELD) public class EdhocAlphabetPojoXmlRA extends AlphabetPojoXml { @XmlElements(value = { - @XmlElement(type = EdhocMessage1InputRA.class, name = "EdhocMessage1Input"), - @XmlElement(type = EdhocMessage2InputRA.class, name = "EdhocMessage2Input"), - @XmlElement(type = EdhocMessage3InputRA.class, name = "EdhocMessage3Input"), - @XmlElement(type = EdhocMessage4InputRA.class, name = "EdhocMessage4Input"), - @XmlElement(type = EdhocErrorMessageInputRA.class, name = "EdhocErrorMessageInput"), - @XmlElement(type = EdhocMessage3OscoreAppInputRA.class, name = "EdhocMessage3OscoreAppInput"), - @XmlElement(type = OscoreAppMessageInputRA.class, name = "OscoreAppMessageInput"), - @XmlElement(type = CoapAppMessageInputRA.class, name = "CoapAppMessageInput"), - @XmlElement(type = CoapEmptyMessageInputRA.class, name = "CoapEmptyMessageInput") + @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage1Input"), + @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage2Input"), + @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage3Input"), + @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage4Input"), + @XmlElement(type = InputSymbolXml.class, name = "EdhocErrorMessageInput"), + @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage3OscoreAppInput"), + @XmlElement(type = InputSymbolXml.class, name = "OscoreAppMessageInput"), + @XmlElement(type = InputSymbolXml.class, name = "CoapAppMessageInput"), + @XmlElement(type = InputSymbolXml.class, name = "CoapEmptyMessageInput") }) protected List inputs; From 6af7b8fde72bf84643bb017fdcce0a9f70737a08 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 11 Mar 2024 11:59:25 +0100 Subject: [PATCH 031/169] Add RA configs and alphabet --- experiments/args/lakers/client_ra | 67 ++++++++++++++++++++++++++++++ experiments/args/lakers/server_ra | 67 ++++++++++++++++++++++++++++++ src/main/resources/alphabet_ra.xml | 58 ++++++++++++++++++++++++++ 3 files changed, 192 insertions(+) create mode 100644 experiments/args/lakers/client_ra create mode 100644 experiments/args/lakers/server_ra create mode 100644 src/main/resources/alphabet_ra.xml diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra new file mode 100644 index 00000000..2198f2ad --- /dev/null +++ b/experiments/args/lakers/client_ra @@ -0,0 +1,67 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/lakers + + +##### LearnerConfig ##### +-learningAlgorithm +RaLambda +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-cacheTests +-skipNonDetTests +-alphabet +./src/main/resources/alphabet_ra.xml + + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +## Mapper Auth ## + +-mapCredType +CCS + +-mapIdCredType +KID + +## Sul Auth ## + +-sulCredType +CCS + +-sulIdCredType +KID + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_lakers.json + +-testVectorJsonKey +test_vector_p256 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Responder + +##### SulConfig ##### +-responseWait +300 +-processDir +${models.clients}/lakers +-cmd +./coapclient +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra new file mode 100644 index 00000000..649f2f77 --- /dev/null +++ b/experiments/args/lakers/server_ra @@ -0,0 +1,67 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers}/lakers + + +##### LearnerConfig ##### +-learningAlgorithm +RALAMBDA +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-cacheTests +-skipNonDetTests +-alphabet +alphabet_ra + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +## Mapper Auth ## + +-mapCredType +CCS + +-mapIdCredType +KID + +## Sul Auth ## + +-sulCredType +CCS + +-sulIdCredType +KID + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_lakers.json + +-testVectorJsonKey +test_vector_p256 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Initiator + + +##### SulConfig ##### +-responseWait +300 +-processDir +${models.servers}/lakers +-cmd +./coapserver +-startWait +50 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 diff --git a/src/main/resources/alphabet_ra.xml b/src/main/resources/alphabet_ra.xml new file mode 100644 index 00000000..fdae7639 --- /dev/null +++ b/src/main/resources/alphabet_ra.xml @@ -0,0 +1,58 @@ + + + EDHOC_MESSAGE_1 + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_2 + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_3 + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_3_OSCORE_APP + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_4 + + C_I + java.lang.Integer + + + + OSCORE_APP_MESSAGE + + C_I + java.lang.Integer + + + + COAP_APP_MESSAGE + + C_I + java.lang.Integer + + + + COAP_EMPTY_MESSAGE + + C_I + java.lang.Integer + + + \ No newline at end of file From 1a0f907445ca6c1589a7e38d1b47c5e438da9237 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:06:42 +0100 Subject: [PATCH 032/169] Adapt MultibuilderRA to StateFuzzerComposerRA changes Co-authored-by: 00oskpet <42684085+00oskpet@users.noreply.github.com> --- .../com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index fa3768c7..f18b713c 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -85,7 +85,7 @@ public StateFuzzer> build(StateFuzzerEnab teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); return new StateFuzzerRA<>( new StateFuzzerComposerRA(stateFuzzerEnabler, - alphabetTransformer, sulBuilder, sulWrapper, teachers).initialize()); + alphabetTransformer, sulBuilder, sulWrapper, teachers, EdhocInputRA.class).initialize()); } @Override From bd0227d1def0f8dd22c50d6620e30062d4c46722 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 13 Mar 2024 14:12:55 +0100 Subject: [PATCH 033/169] Change CI for lakers to run the RA script Co-authored-by: 00oskpet <42684085+00oskpet@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81443aaf..01ac4b79 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,7 +29,7 @@ jobs: - name: Test Lakers Client run: | - java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 + java -jar edhoc-fuzzer.jar @experiments/args/lakers/client_ra -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 Lakers-Server: From 0d2ec9c6c03e16fd4da0c42784703fc445288c9f Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:20:18 +0100 Subject: [PATCH 034/169] Create and use EdhocInputConverter Co-authored-by: Linus Olofsson --- .../edhocfuzzer/EdhocInputConverter.java | 49 +++++++++++++++++++ .../edhocfuzzer/MultiBuilderRA.java | 3 +- 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java new file mode 100644 index 00000000..6eb25c4f --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java @@ -0,0 +1,49 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; +import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerComposerRA.PSymbolInstanceConverter; +import de.learnlib.ralib.words.PSymbolInstance; +import de.learnlib.ralib.words.ParameterizedSymbol; + +public class EdhocInputConverter implements PSymbolInstanceConverter { + + @Override + public EdhocInputRA convert(PSymbolInstance input) { + String name = input.getBaseSymbol().getName(); + ParameterizedSymbol base = input.getBaseSymbol(); + + switch (MessageInputType.valueOf(name)) { + case EDHOC_MESSAGE_1: + return new EdhocMessage1InputRA(base, null); + + case EDHOC_MESSAGE_2: + return new EdhocMessage2InputRA(base, null); + + case EDHOC_MESSAGE_3: + return new EdhocMessage3InputRA(base, null); + + case EDHOC_MESSAGE_3_OSCORE_APP: + return new EdhocMessage3OscoreAppInputRA(base, null); + + case EDHOC_MESSAGE_4: + return new EdhocMessage4InputRA(base, null); + + case EDHOC_ERROR_MESSAGE: + return new EdhocErrorMessageInputRA(base, null); + + case OSCORE_APP_MESSAGE: + return new OscoreAppMessageInputRA(base, null); + + case COAP_APP_MESSAGE: + return new CoapAppMessageInputRA(base, null); + + case COAP_EMPTY_MESSAGE: + return new CoapEmptyMessageInputRA(base, null); + + default: + throw new RuntimeException("The name '" + name + "' of the " + PSymbolInstance.class.getName() + + "is not a member of the enum " + MessageInputType.class.getName()); + } + } + +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index f18b713c..b1a3a038 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -83,9 +83,10 @@ public StateFuzzer> build(StateFuzzerEnab @SuppressWarnings("rawtypes") final Map teachers = new LinkedHashMap<>(); teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); + final EdhocInputConverter converter = new EdhocInputConverter(); return new StateFuzzerRA<>( new StateFuzzerComposerRA(stateFuzzerEnabler, - alphabetTransformer, sulBuilder, sulWrapper, teachers, EdhocInputRA.class).initialize()); + alphabetTransformer, sulBuilder, sulWrapper, teachers, converter).initialize()); } @Override From 992e8c5f52caa133bbeed7089504e1eef656d560 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 14 Mar 2024 16:18:49 +0100 Subject: [PATCH 035/169] Update the californium commit hash --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 8213b6a0..3942de1c 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -43,7 +43,7 @@ setup_cf_edhoc() { # setup cf-edhoc library PATCH_FILE="${SCRIPT_DIR}/cf-edhoc.patch" - CHECKOUT="b08bf12dae965044925eb58ee25717a4d2f8105b" + CHECKOUT="9bdb7561147a36a2064c2f7968291436b742d2e9" set -e cd "${BASE_DIR}" From 493a8c5cc386bb6115546796b19d3070fdfb359d Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:05:45 +0100 Subject: [PATCH 036/169] pass the parameter values as well in EdhocInputConverter --- .../edhocfuzzer/EdhocInputConverter.java | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java index 6eb25c4f..bdb545cd 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java @@ -14,31 +14,31 @@ public EdhocInputRA convert(PSymbolInstance input) { switch (MessageInputType.valueOf(name)) { case EDHOC_MESSAGE_1: - return new EdhocMessage1InputRA(base, null); + return new EdhocMessage1InputRA(base, input.getParameterValues()); case EDHOC_MESSAGE_2: - return new EdhocMessage2InputRA(base, null); + return new EdhocMessage2InputRA(base, input.getParameterValues()); case EDHOC_MESSAGE_3: - return new EdhocMessage3InputRA(base, null); + return new EdhocMessage3InputRA(base, input.getParameterValues()); case EDHOC_MESSAGE_3_OSCORE_APP: - return new EdhocMessage3OscoreAppInputRA(base, null); + return new EdhocMessage3OscoreAppInputRA(base, input.getParameterValues()); case EDHOC_MESSAGE_4: - return new EdhocMessage4InputRA(base, null); + return new EdhocMessage4InputRA(base, input.getParameterValues()); case EDHOC_ERROR_MESSAGE: - return new EdhocErrorMessageInputRA(base, null); + return new EdhocErrorMessageInputRA(base, input.getParameterValues()); case OSCORE_APP_MESSAGE: - return new OscoreAppMessageInputRA(base, null); + return new OscoreAppMessageInputRA(base, input.getParameterValues()); case COAP_APP_MESSAGE: - return new CoapAppMessageInputRA(base, null); + return new CoapAppMessageInputRA(base, input.getParameterValues()); case COAP_EMPTY_MESSAGE: - return new CoapEmptyMessageInputRA(base, null); + return new CoapEmptyMessageInputRA(base, input.getParameterValues()); default: throw new RuntimeException("The name '" + name + "' of the " + PSymbolInstance.class.getName() From 7f648ea907c77bd2b76075dcdef7c576c4c4e0ab Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 14 Mar 2024 16:33:03 +0100 Subject: [PATCH 037/169] Update rise setup checkout commit hash --- scripts/setup_sul.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_sul.sh b/scripts/setup_sul.sh index 12d8c198..03de6c5e 100755 --- a/scripts/setup_sul.sh +++ b/scripts/setup_sul.sh @@ -35,7 +35,7 @@ setup_lakers() { setup_rise() { # rise - CHECKOUT="b08bf12dae965044925eb58ee25717a4d2f8105b" + CHECKOUT="9bdb7561147a36a2064c2f7968291436b742d2e9" PREFIX="${SOURCES_DIR}/californium/cf-edhoc/src" POSTFIX="java/org/eclipse/californium/edhoc" CF_EDHOC_MAIN_DIR="${PREFIX}/main/${POSTFIX}" From a7ffa961780a98c4a3560cf77bdb9f32281d5fac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 15 Mar 2024 14:48:41 +0100 Subject: [PATCH 038/169] Update EdhocOutputRA to give empty datavalue arrays instead of null for the cases when there are no values Co-authored-by: Linus Olofsson --- .../mapper/mappers/EdhocOutputMapperRA.java | 47 ++++++++++--------- .../mapper/symbols/outputs/EdhocOutputRA.java | 9 +++- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index e19672f2..0b6c1bb5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -54,15 +54,15 @@ public EdhocOutputRA receiveOutput(EdhocExecutionContextRA context) { // special output to demonstrate that the input message the learner requested // was unable to be sent and deemed unsupported - OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), new DataType[] {}); + return edhocOutputRA(base); } catch (UnsuccessfulMessageException e) { // special output to demonstrate that the received message evoked an error // in a middle layer and did not reach the upper resource in the case of // server mapper - OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), new DataType[] {}); + return edhocOutputRA(base); } EdhocOutputRA abstractOutput; @@ -103,8 +103,8 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp new String(responsePayload, StandardCharsets.UTF_8)); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP.name(), - (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + new DataType[] {}); + return edhocOutputRA(base); } if (edhocMapperConnector.receivedOscoreAppMessage()) { @@ -122,8 +122,8 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - OutputSymbol base = new OutputSymbol(MessageOutputType.OSCORE_APP_MESSAGE.name(), (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.OSCORE_APP_MESSAGE.name(), new DataType[] {}); + return edhocOutputRA(base); } return null; @@ -138,8 +138,8 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] case EDHOC_ERROR_MESSAGE -> { ok = messageProcessorPersistent.readErrorMessage(responsePayload); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), (DataType[]) null); - return edhocOutputAfterCheck(ok, base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), new DataType[] {}); + return edhocOutputAfterCheck(ok, base, new DataValue[] {}); } case EDHOC_MESSAGE_1 -> { @@ -246,8 +246,8 @@ protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] res * Server Mapper: * received empty coap request for some reason */ - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_EMPTY_MESSAGE.name(), (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_EMPTY_MESSAGE.name(), new DataType[] {}); + return edhocOutputRA(base); } // Check for unprotected coap message @@ -259,28 +259,28 @@ protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] res LOGGER.info("COAP_APP_MESSAGE ({}): {} ~ {}", messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_APP_MESSAGE.name(), (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_APP_MESSAGE.name(), new DataType[] {}); + return edhocOutputRA(base); } // if payload was not empty then a coap message is received // because no other transport protocol than coap is supported yet - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_MESSAGE.name(), (DataType[]) null); - DataValue[] values = (DataValue[]) null; - return edhocOutputAfterCheck(responsePayload != null, base, values); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_MESSAGE.name(), new DataType[] {}); + return edhocOutputAfterCheck(responsePayload != null, base, new DataValue[] {}); } protected EdhocOutputRA coapError() { if (((EdhocMapperConfig) mapperConfig).isCoapErrorAsEdhocError()) { - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), new DataType[] {}); + return edhocOutputRA(base); } else { - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_ERROR_MESSAGE.name(), (DataType[]) null); - return edhocOutputRA(base, (DataValue[]) null); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_ERROR_MESSAGE.name(), new DataType[] {}); + return edhocOutputRA(base); } } - protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, DataValue... values) { + protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, + DataValue... values) { return successfulCheck ? edhocOutputRA(baseSymbol, values) : null; } @@ -288,7 +288,8 @@ protected EdhocOutputRA edhocOutputRA(OutputSymbol baseSymbol, DataValue... v return new EdhocOutputRA(baseSymbol, values); } - protected EdhocOutputRA buildOutput(List messages, ParameterizedSymbol baseSymbol, DataValue... parameterValues) { + protected EdhocOutputRA buildOutput(List messages, ParameterizedSymbol baseSymbol, + DataValue... parameterValues) { return new EdhocOutputRA(messages, baseSymbol, parameterValues); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java index 5969124b..0c69196b 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputRA.java @@ -17,14 +17,19 @@ public EdhocOutputRA(ParameterizedSymbol baseSymbol, DataValue... parameterVa super(baseSymbol, parameterValues); } - public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, DataValue... parameterValues) { + public EdhocOutputRA(List messages, ParameterizedSymbol baseSymbol, + DataValue... parameterValues) { super(baseSymbol, parameterValues); this.messages = messages; } /** Used only by @link #EdhocOutputBuilderRA. */ public EdhocOutputRA(String name) { - super(new OutputSymbol(name, (DataType[]) null), (DataValue[]) null); + super(new OutputSymbol(name, new DataType[] {}), new DataValue[] {}); + } + + public EdhocOutputRA(ParameterizedSymbol baseSymbol) { + super(baseSymbol, new DataValue[] {}); } @Override From 37b467f7a329ba4ad13c5d31d8589662797cf062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 22 Mar 2024 14:46:34 +0100 Subject: [PATCH 039/169] Add a logging configuration for the RALib package and update SLF4J-impl to to the version for SLF4J 1.7+ Co-authored-by: Linus Olofsson --- pom.xml | 12 ++++-------- src/main/resources/log4j2.xml | 3 +++ 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/pom.xml b/pom.xml index 5fd2b0d8..3e266c68 100644 --- a/pom.xml +++ b/pom.xml @@ -70,10 +70,10 @@ runtime - + org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl ${log4j.version} runtime @@ -132,10 +132,10 @@ log4j-core - + org.apache.logging.log4j - log4j-slf4j-impl + log4j-slf4j2-impl @@ -192,10 +192,6 @@ true - - - org.slf4j:slf4j-api - de.learnlib:learnlib-api:jar:* diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index d89b7ea6..fa1b8c8b 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -12,6 +12,9 @@ + + + From 2921bc57d7a81158c48a65d6a4996135458328d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 22 Mar 2024 14:54:13 +0100 Subject: [PATCH 040/169] Update own connection id instead of peer remove the usage of CBORObject and convert explicitly to integer Add logging in EdhocInputRA Update server_ra configuration with correct algorithm name and alphabet path --- experiments/args/lakers/server_ra | 4 +- .../edhocfuzzer/MultiBuilderRA.java | 3 +- .../core/protocol/EdhocSessionPersistent.java | 66 ++++++++++++------- .../mapper/mappers/EdhocOutputMapperRA.java | 62 ++++++++++------- .../mapper/symbols/inputs/EdhocInputRA.java | 20 ++++-- .../symbols/inputs/EdhocMessage1InputRA.java | 2 +- .../symbols/inputs/EdhocMessage2InputRA.java | 2 +- .../symbols/inputs/EdhocMessage3InputRA.java | 2 +- .../inputs/EdhocMessage3OscoreAppInputRA.java | 2 +- .../symbols/inputs/EdhocMessage4InputRA.java | 2 +- .../inputs/OscoreAppMessageInputRA.java | 2 +- 11 files changed, 102 insertions(+), 65 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 649f2f77..2e9ad6b6 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,14 +8,14 @@ ${results.learning.servers}/lakers ##### LearnerConfig ##### -learningAlgorithm -RALAMBDA +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -cacheTests -skipNonDetTests -alphabet -alphabet_ra +./src/main/resources/alphabet_ra.xml ##### EdhocMapperConfig ##### -protocolVersion diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index b1a3a038..ac4a0257 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -36,7 +36,6 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbeStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; -import com.upokecenter.cbor.CBORObject; import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.theory.Theory; import de.learnlib.ralib.tools.theories.IntegerEqualityTheory; @@ -79,7 +78,7 @@ public StateFuzzerServerConfig buildServerConfig() { @Override public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { - DataType T_CI = new DataType("C_I", CBORObject.class); + DataType T_CI = new DataType("C_I", Integer.class); @SuppressWarnings("rawtypes") final Map teachers = new LinkedHashMap<>(); teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java index 4b71cbea..aefdb1c5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java @@ -41,7 +41,8 @@ public class EdhocSessionPersistent extends EdhocSession { protected byte[] forceOscoreSenderId; protected byte[] forceOscoreRecipientId; - @SuppressWarnings("this-escape") + protected byte[] connectionId; + public EdhocSessionPersistent( String sessionUri, boolean initiator, boolean clientInitiated, int method, byte[] connectionId, EdhocEndpointInfoPersistent edhocEndpointInfoPersistent, List peerSupportedCipherSuites, @@ -49,10 +50,11 @@ public EdhocSessionPersistent( byte[] forceOscoreSenderId, byte[] forceOscoreRecipientId) { super(initiator, clientInitiated, method, connectionId, edhocEndpointInfoPersistent.getKeyPairs(), - edhocEndpointInfoPersistent.getIdCreds(), edhocEndpointInfoPersistent.getCreds(), - edhocEndpointInfoPersistent.getSupportedCipherSuites(), peerSupportedCipherSuites, - edhocEndpointInfoPersistent.getSupportedEADs(), edhocEndpointInfoPersistent.getAppProfiles().get(sessionUri), - edhocEndpointInfoPersistent.getTrustModel(), oscoreDB); + edhocEndpointInfoPersistent.getIdCreds(), edhocEndpointInfoPersistent.getCreds(), + edhocEndpointInfoPersistent.getSupportedCipherSuites(), peerSupportedCipherSuites, + edhocEndpointInfoPersistent.getSupportedEADs(), + edhocEndpointInfoPersistent.getAppProfiles().get(sessionUri), + edhocEndpointInfoPersistent.getTrustModel(), oscoreDB); this.sessionUri = sessionUri; this.oscoreUri = edhocEndpointInfoPersistent.getOscoreUri(); @@ -63,13 +65,12 @@ public EdhocSessionPersistent( this.sessionResetEnabled = sessionResetEnabled; this.forceOscoreSenderId = forceOscoreSenderId; this.forceOscoreRecipientId = forceOscoreRecipientId; + this.connectionId = connectionId; SideProcessor sideProcessor = new SideProcessor( - edhocEndpointInfoPersistent.getTrustModel(), - edhocEndpointInfoPersistent.getPeerPublicKeys(), - edhocEndpointInfoPersistent.getPeerCredentials(), - edhocEndpointInfoPersistent.getEadProductionInput() - ); + edhocEndpointInfoPersistent.getTrustModel(), + edhocEndpointInfoPersistent.getPeerCredentials(), + edhocEndpointInfoPersistent.getEadProductionInput()); sideProcessor.setEdhocSession(this); this.setSideProcessor(sideProcessor); @@ -93,38 +94,39 @@ public synchronized void reset() { setEphemeralKey(); // peer dummy info - setPeerConnectionId(new byte[]{0, 0, 0, 0}); - setPeerCred(new byte[]{0, 0, 0, 0}); + setPeerConnectionId(new byte[] { 0, 0, 0, 0 }); + setPeerCred(new byte[] { 0, 0, 0, 0 }); setPeerIdCred(Util.buildIdCredKid(getPeerCred())); - // in order for the ephemeral and long-term keys of the two peers to be of the same curve + // in order for the ephemeral and long-term keys of the two peers to be of the + // same curve // dummy peerEphemeralPublicKey same as own ephemeral key // dummy peerLongTermPublicKey same as own long-term key setPeerEphemeralPublicKey(getEphemeralKey()); setPeerLongTermPublicKey(getKeyPair()); // message1 hash - setHashMessage1(new byte[]{1}); + setHashMessage1(new byte[] { 1 }); // plaintext2 - setPlaintext2(new byte[]{1}); + setPlaintext2(new byte[] { 1 }); // inner key-derivation Keys - setPRK2e(new byte[]{1}); - setPRK3e2m(new byte[]{1}); - setPRK4e3m(new byte[]{1}); + setPRK2e(new byte[] { 1 }); + setPRK3e2m(new byte[] { 1 }); + setPRK4e3m(new byte[] { 1 }); // transcript hashes - setTH2(new byte[]{1}); - setTH3(new byte[]{1}); - setTH4(new byte[]{1}); + setTH2(new byte[] { 1 }); + setTH3(new byte[] { 1 }); + setTH4(new byte[] { 1 }); // key after successful EDHOC execution - setPRKout(new byte[]{1}); - setPRKexporter(new byte[]{1}); + setPRKout(new byte[] { 1 }); + setPRKexporter(new byte[] { 1 }); // message3, to be used for building an EDHOC+OSCORE request - setMessage3(new byte[]{1}); + setMessage3(new byte[] { 1 }); // setup dummy oscore context and reset flag oscoreCtxGenerated = false; @@ -221,7 +223,8 @@ public void cleanMessage3() { } @Override - public byte[] edhocExporter(int label, CBORObject context, int len) throws InvalidKeyException, NoSuchAlgorithmException { + public byte[] edhocExporter(int label, CBORObject context, int len) + throws InvalidKeyException, NoSuchAlgorithmException { if (label < 0 || context.getType() != CBORType.ByteString || len < 0) return null; // do not check for session currentStep @@ -266,4 +269,17 @@ public byte[] getForceOscoreSenderId() { public byte[] getForceOscoreRecipientId() { return forceOscoreRecipientId; } + + public void setConnectionId(byte[] id) { + this.connectionId = id; + } + + /** + * Note: Override to enable modification of connectionId. + * It is private and (in practice) immutable in the parent class EdhocSession. + */ + @Override + public byte[] getConnectionId() { + return this.connectionId; + } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index 0b6c1bb5..614595fb 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -132,7 +132,7 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] responsePayload) { MessageProcessorPersistent messageProcessorPersistent = new MessageProcessorPersistent(edhocMapperState); boolean ok; - DataType T_CI = new DataType("C_I", CBORObject.class); + DataType T_CI = new DataType("C_I", Integer.class); switch (messageProcessorPersistent.messageTypeFromStructure(responsePayload)) { case EDHOC_ERROR_MESSAGE -> { @@ -145,22 +145,26 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] case EDHOC_MESSAGE_1 -> { ok = messageProcessorPersistent.readMessage1(responsePayload); - CBORObject parameter = CBORObject - .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + Integer parameter = CBORObject + .DecodeObjectFromBytes( + edhocMapperState.getEdhocSessionPersistent().getConnectionId(), + Integer.class); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_1.name(), T_CI); - DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } case EDHOC_MESSAGE_2 -> { ok = messageProcessorPersistent.readMessage2(responsePayload); - CBORObject parameter = CBORObject - .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + Integer parameter = CBORObject + .DecodeObjectFromBytes( + edhocMapperState.getEdhocSessionPersistent().getConnectionId(), + Integer.class); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); - DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } @@ -170,20 +174,24 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { - CBORObject parameter = CBORObject - .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + Integer parameter = CBORObject + .DecodeObjectFromBytes( + edhocMapperState.getEdhocSessionPersistent().getConnectionId(), + Integer.class); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name(), T_CI); - DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(T_CI, parameter); return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); - CBORObject parameter = CBORObject - .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + Integer parameter = CBORObject + .DecodeObjectFromBytes( + edhocMapperState.getEdhocSessionPersistent().getConnectionId(), + Integer.class); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name(), T_CI); - DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } @@ -192,30 +200,36 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] LOGGER.info("Reading as EDHOC Message 2 or 3 or 4"); ok = messageProcessorPersistent.readMessage2(responsePayload); if (ok) { - CBORObject parameter = CBORObject - .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + Integer parameter = CBORObject + .DecodeObjectFromBytes( + edhocMapperState.getEdhocSessionPersistent().getConnectionId(), + Integer.class); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); - DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(T_CI, parameter); return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { - CBORObject parameter = CBORObject - .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + Integer parameter = CBORObject + .DecodeObjectFromBytes( + edhocMapperState.getEdhocSessionPersistent().getConnectionId(), + Integer.class); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name(), T_CI); - DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(T_CI, parameter); return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); - CBORObject parameter = CBORObject - .FromObject(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); + Integer parameter = CBORObject + .DecodeObjectFromBytes( + edhocMapperState.getEdhocSessionPersistent().getConnectionId(), + Integer.class); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name(), T_CI); - DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java index 601b63fe..98640ad4 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java @@ -1,6 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; @@ -11,14 +12,16 @@ import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; - +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; public abstract class EdhocInputRA extends PSymbolInstance implements MapperInput { private long extendedWait = 0; - protected DataType T_CI = new DataType("C_I", CBORObject.class); + protected DataType T_CI = new DataType("C_I", Integer.class); + private static Logger LOGGER = LogManager.getLogger(); EdhocInputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { super(baseSymbol, parameterValues); @@ -71,13 +74,18 @@ public DataType[] getDataTypes() { * a randomly selected integer in the learner to a corresponding bytestring is * possible. */ - public void updatePeerConnectionId(EdhocSessionPersistent session) { + public void updateConnectionId(EdhocSessionPersistent session) { + + LOGGER.info("Running updateConnectionId method"); + LOGGER.info("Current ConnectionId: " + EdhocUtil.byteArrayToString(session.getConnectionId())); + for (DataValue dv : this.getParameterValues()) { + + LOGGER.info("Datavalue: " + dv.toString()); if (dv.getType().equals(T_CI)) { + CBORObject value = CBORObject.FromObject(dv.getId()); - // TODO: Unsafe typecast. - CBORObject value = (CBORObject) dv.getId(); - session.setPeerConnectionId(value.EncodeToBytes()); + session.setConnectionId(value.EncodeToBytes()); } } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java index b58a4cd2..668333c0 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java @@ -24,7 +24,7 @@ public void preSendUpdate(EdhocExecutionContextRA context) { session.resetIfEnabled(); } - updatePeerConnectionId(session); + updateConnectionId(session); } @Override diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java index a24d031b..54f08ed5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java @@ -23,7 +23,7 @@ public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA cont public void preSendUpdate(EdhocExecutionContextRA context) { EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - updatePeerConnectionId(session); + updateConnectionId(session); } @Override diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java index 65d1e378..fb692bd2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java @@ -18,7 +18,7 @@ public EdhocMessage3InputRA(ParameterizedSymbol baseSymbol, DataValue[] param public void preSendUpdate(EdhocExecutionContextRA context) { EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - updatePeerConnectionId(session); + updateConnectionId(session); } @Override diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java index 0164d406..85aeb117 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java @@ -18,7 +18,7 @@ public EdhocMessage3OscoreAppInputRA(ParameterizedSymbol baseSymbol, DataValue[] param public void preSendUpdate(EdhocExecutionContextRA context) { EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - updatePeerConnectionId(session); + updateConnectionId(session); } @Override diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java index 6775c18c..c255d65d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java @@ -18,7 +18,7 @@ public OscoreAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] pa public void preSendUpdate(EdhocExecutionContextRA context) { EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - updatePeerConnectionId(session); + updateConnectionId(session); } @Override From fcaaa0a7c23f4adb9c8b4b10c614c9a90d316ce7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 27 Mar 2024 15:28:36 +0100 Subject: [PATCH 041/169] Rename InputSymbolXml to SymbolXml Remove old todo in DataTypeXml Co-authored-by: Linus Olofsson --- .../mapper/symbols/inputs/DataTypeXml.java | 3 +-- .../{InputSymbolXml.java => SymbolXml.java} | 25 ++++++++++++++----- 2 files changed, 20 insertions(+), 8 deletions(-) rename src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/{InputSymbolXml.java => SymbolXml.java} (50%) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java index 9c374b3f..bc2ca20c 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/DataTypeXml.java @@ -8,10 +8,9 @@ public class DataTypeXml { private String name = null; - // TODO: this might not be parsable by default, we might need to do lookup on a string. private Class base = null; - public DataTypeXml (String name, Class base) { + public DataTypeXml(String name, Class base) { this.name = name; this.base = base; } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/SymbolXml.java similarity index 50% rename from src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java rename to src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/SymbolXml.java index 51aa97c7..4b147c00 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/InputSymbolXml.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/SymbolXml.java @@ -3,21 +3,25 @@ import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlRootElement; -@XmlRootElement(name = "InputSymbol") -public class InputSymbolXml { +@XmlRootElement(name = "Symbol") +public class SymbolXml { - @XmlElement(name="Name") + @XmlElement(name = "Name") private String name = null; - @XmlElement(name="DataTypes") + @XmlElement(name = "Type") + private Type symbolType = Type.INPUT; + + @XmlElement(name = "DataTypes") private DataTypeXml[] types = {}; - public InputSymbolXml(String name, DataTypeXml... types) { + public SymbolXml(String name, Type type, DataTypeXml... types) { this.name = name; + this.symbolType = type; this.types = types; } - public InputSymbolXml() { + public SymbolXml() { } public String getName() { @@ -27,4 +31,13 @@ public String getName() { public DataTypeXml[] getDataTypes() { return this.types; } + + public Type getSymbolType() { + return this.symbolType; + } + + public enum Type { + INPUT, + OUTPUT + } } From 60c2eda14b5f81c8a389802477aed118fe1ae445 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 27 Mar 2024 15:29:42 +0100 Subject: [PATCH 042/169] Add outputs to alphabet_ra and update the PojoXml Co-authored-by: Linus Olofsson --- .../learner/EdhocAlphabetPojoXmlRA.java | 49 +++++++--- src/main/resources/alphabet_ra.xml | 94 +++++++++++++++++-- 2 files changed, 122 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java index cbba61d8..ae5a9374 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/learner/EdhocAlphabetPojoXmlRA.java @@ -12,28 +12,49 @@ @XmlRootElement(name = "alphabet") @XmlAccessorType(XmlAccessType.FIELD) -public class EdhocAlphabetPojoXmlRA extends AlphabetPojoXml { +public class EdhocAlphabetPojoXmlRA extends AlphabetPojoXml { @XmlElements(value = { - @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage1Input"), - @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage2Input"), - @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage3Input"), - @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage4Input"), - @XmlElement(type = InputSymbolXml.class, name = "EdhocErrorMessageInput"), - @XmlElement(type = InputSymbolXml.class, name = "EdhocMessage3OscoreAppInput"), - @XmlElement(type = InputSymbolXml.class, name = "OscoreAppMessageInput"), - @XmlElement(type = InputSymbolXml.class, name = "CoapAppMessageInput"), - @XmlElement(type = InputSymbolXml.class, name = "CoapEmptyMessageInput") + @XmlElement(type = SymbolXml.class, name = "EdhocMessage1Input"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage2Input"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage3Input"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage4Input"), + @XmlElement(type = SymbolXml.class, name = "EdhocErrorMessageInput"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage3OscoreAppInput"), + @XmlElement(type = SymbolXml.class, name = "OscoreAppMessageInput"), + @XmlElement(type = SymbolXml.class, name = "CoapAppMessageInput"), + @XmlElement(type = SymbolXml.class, name = "CoapEmptyMessageInput"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage1"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage2"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage3"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage4"), + @XmlElement(type = SymbolXml.class, name = "EdhocErrorMessage"), + @XmlElement(type = SymbolXml.class, name = "EdhocMessage3OscoreApp"), + @XmlElement(type = SymbolXml.class, name = "OscoreAppMessage"), + @XmlElement(type = SymbolXml.class, name = "CoapAppMessage"), + @XmlElement(type = SymbolXml.class, name = "CoapEmptyMessage"), + @XmlElement(type = SymbolXml.class, name = "Disabled"), + @XmlElement(type = SymbolXml.class, name = "SocketClosed"), + @XmlElement(type = SymbolXml.class, name = "Unknown"), + @XmlElement(type = SymbolXml.class, name = "Timeout"), + @XmlElement(type = SymbolXml.class, name = "CoapErrorMessage"), + @XmlElement(type = SymbolXml.class, name = "CoapEmptyMessage"), + @XmlElement(type = SymbolXml.class, name = "UnsupportedMessage"), + @XmlElement(type = SymbolXml.class, name = "EdhocErrorMessage"), + @XmlElement(type = SymbolXml.class, name = "CoapMessage"), + @XmlElement(type = SymbolXml.class, name = "CoapAppMessage"), + @XmlElement(type = SymbolXml.class, name = "OscoreAppMessage"), }) - protected List inputs; + protected List inputs; - public EdhocAlphabetPojoXmlRA() {} + public EdhocAlphabetPojoXmlRA() { + } - public EdhocAlphabetPojoXmlRA(List inputs) { + public EdhocAlphabetPojoXmlRA(List inputs) { this.inputs = inputs; } @Override - public List getInputs(){ + public List getInputs() { return inputs; } } diff --git a/src/main/resources/alphabet_ra.xml b/src/main/resources/alphabet_ra.xml index fdae7639..2ba0ab3b 100644 --- a/src/main/resources/alphabet_ra.xml +++ b/src/main/resources/alphabet_ra.xml @@ -1,6 +1,7 @@ EDHOC_MESSAGE_1 + INPUT C_I java.lang.Integer @@ -8,6 +9,7 @@ EDHOC_MESSAGE_2 + INPUT C_I java.lang.Integer @@ -15,6 +17,7 @@ EDHOC_MESSAGE_3 + INPUT C_I java.lang.Integer @@ -22,6 +25,7 @@ EDHOC_MESSAGE_3_OSCORE_APP + INPUT C_I java.lang.Integer @@ -29,6 +33,7 @@ EDHOC_MESSAGE_4 + INPUT C_I java.lang.Integer @@ -36,23 +41,98 @@ OSCORE_APP_MESSAGE + INPUT + + + COAP_APP_MESSAGE + INPUT + + + COAP_EMPTY_MESSAGE + INPUT + + + DISABLED + OUTPUT + + + SOCKET_CLOSED + OUTPUT + + + UNKNOWN + OUTPUT + + + TIMEOUT + OUTPUT + + + COAP_ERROR_MESSAGE + OUTPUT + + + COAP_EMPTY_MESSAGE + OUTPUT + + + UNSUPPORTED_MESSAGE + OUTPUT + + + EDHOC_ERROR_MESSAGE + OUTPUT + + + EDHOC_MESSAGE_1 + OUTPUT C_I java.lang.Integer - - - COAP_APP_MESSAGE + + + EDHOC_MESSAGE_2 + OUTPUT C_I java.lang.Integer - - - COAP_EMPTY_MESSAGE + + + EDHOC_MESSAGE_3 + OUTPUT C_I java.lang.Integer - + + + EDHOC_MESSAGE_3_OSCORE_APP + OUTPUT + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_4 + OUTPUT + + C_I + java.lang.Integer + + + + OSCORE_APP_MESSAGE + OUTPUT + + + COAP_APP_MESSAGE + OUTPUT + + + COAP_EMPTY_MESSAGE + OUTPUT + \ No newline at end of file From 7776381dfa66b51b52382d4b5bc44f97d3567315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 27 Mar 2024 15:31:23 +0100 Subject: [PATCH 043/169] Update the alphabetTransformer with the abillity to transform output symbols --- .../edhocfuzzer/AlphabetTransformerRA.java | 87 ++++++++++++++----- 1 file changed, 66 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java index f83afda2..76bb41a8 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java @@ -1,66 +1,111 @@ package com.github.protocolfuzzing.edhocfuzzer; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.*; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderTransformer; import de.learnlib.ralib.data.DataType; +import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.InputSymbol; +import de.learnlib.ralib.words.OutputSymbol; +import de.learnlib.ralib.words.PSymbolInstance; +import de.learnlib.ralib.words.ParameterizedSymbol; import java.util.Arrays; -public class AlphabetTransformerRA extends AlphabetBuilderTransformer { - public AlphabetTransformerRA(AlphabetBuilderStandard alphabetBuilderStandard) { +public class AlphabetTransformerRA extends AlphabetBuilderTransformer { + public AlphabetTransformerRA(AlphabetBuilderStandard alphabetBuilderStandard) { super(alphabetBuilderStandard); } @Override - public InputSymbolXml fromTransformedInput(EdhocInputRA input) { - DataTypeXml[] types = Arrays.stream(input.getDataTypes()) + public SymbolXml fromTransformedInput(PSymbolInstance symbol) { + ParameterizedSymbol baseSymbol = symbol.getBaseSymbol(); + + DataTypeXml[] types = Arrays.stream(baseSymbol.getPtypes()) .map(type -> new DataTypeXml(type.getName(), type.getBase())).toArray(DataTypeXml[]::new); - return new InputSymbolXml(input.getName(), types); + + if (symbol.getBaseSymbol() instanceof InputSymbol) { + return new SymbolXml(baseSymbol.getName(), SymbolXml.Type.INPUT, types); + } else if (symbol.getBaseSymbol() instanceof OutputSymbol) { + return new SymbolXml(baseSymbol.getName(), SymbolXml.Type.OUTPUT, types); + } else { + throw new RuntimeException("Invalid type for ParameterizedSymbol, not InputSymbol or OutputSymbol"); + } } @Override - public EdhocInputRA toTransformedInput(InputSymbolXml input) { - DataType[] types = Arrays.stream(input.getDataTypes()).map(type -> new DataType(type.getName(), type.getBase())) + public PSymbolInstance toTransformedInput(SymbolXml symbol) { + if (symbol.getName() == null) { + throw new RuntimeException("Nameless symbol found, possibly due to malformed alphabet file"); + } + + ParameterizedSymbol baseSymbol = createBaseSymbol(symbol); + switch (symbol.getSymbolType()) { + case INPUT: + return createInputSymbol(baseSymbol); + + case OUTPUT: + return createOutputSymbol(baseSymbol); + + default: + throw new RuntimeException("Invalid SymbolType for InputSymbolXml, not INPUT or OUTPUT"); + } + + } + + private static ParameterizedSymbol createBaseSymbol(SymbolXml symbol) { + DataType[] types = Arrays.stream(symbol.getDataTypes()) + .map(type -> new DataType(type.getName(), type.getBase())) .toArray(DataType[]::new); - InputSymbol base = new InputSymbol(input.getName(), types); - if (input.getName() == null) { - throw new RuntimeException("Nameless symbol found, possibly due to malformed alphabet file"); + switch (symbol.getSymbolType()) { + case INPUT: + return new InputSymbol(symbol.getName(), types); + + case OUTPUT: + return new OutputSymbol(symbol.getName(), types); + + default: + throw new RuntimeException("Invalid SymbolType for InputSymbolXml, not INPUT or OUTPUT"); } + } - switch (MessageInputType.valueOf(input.getName())) { + private static EdhocOutputRA createOutputSymbol(ParameterizedSymbol baseSymbol) { + return new EdhocOutputRA(baseSymbol, new DataValue[] {}); + } + + private static EdhocInputRA createInputSymbol(ParameterizedSymbol baseSymbol) { + switch (MessageInputType.valueOf(baseSymbol.getName())) { case EDHOC_MESSAGE_1: - return new EdhocMessage1InputRA(base, null); + return new EdhocMessage1InputRA(baseSymbol, new DataValue[] {}); case EDHOC_MESSAGE_2: - return new EdhocMessage2InputRA(base, null); + return new EdhocMessage2InputRA(baseSymbol, new DataValue[] {}); case EDHOC_MESSAGE_3: - return new EdhocMessage3InputRA(base, null); + return new EdhocMessage3InputRA(baseSymbol, new DataValue[] {}); case EDHOC_MESSAGE_3_OSCORE_APP: - return new EdhocMessage3OscoreAppInputRA(base, null); + return new EdhocMessage3OscoreAppInputRA(baseSymbol, new DataValue[] {}); case EDHOC_MESSAGE_4: - return new EdhocMessage4InputRA(base, null); + return new EdhocMessage4InputRA(baseSymbol, new DataValue[] {}); case EDHOC_ERROR_MESSAGE: - return new EdhocErrorMessageInputRA(base, null); + return new EdhocErrorMessageInputRA(baseSymbol, new DataValue[] {}); case OSCORE_APP_MESSAGE: - return new OscoreAppMessageInputRA(base, null); + return new OscoreAppMessageInputRA(baseSymbol, new DataValue[] {}); case COAP_APP_MESSAGE: - return new CoapAppMessageInputRA(base, null); + return new CoapAppMessageInputRA(baseSymbol, new DataValue[] {}); case COAP_EMPTY_MESSAGE: - return new CoapEmptyMessageInputRA(base, null); + return new CoapEmptyMessageInputRA(baseSymbol, new DataValue[] {}); default: throw new RuntimeException("Invalid input type, no such input type exists"); } - } } From a9c87b57f48b47fa754280fc284d8207ea2807fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 27 Mar 2024 15:33:56 +0100 Subject: [PATCH 044/169] Change the InputSymbolXml in multibuilder to SymbolXml --- .../github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index ac4a0257..6c3c371d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -7,7 +7,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.InputSymbolXml; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.SymbolXml; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.xml.AlphabetSerializerXml; @@ -49,8 +49,8 @@ public class MultiBuilderRA implements TestRunnerBuilder, TimingProbeBuilder { - protected AlphabetBuilderStandard alphabetBuilder = new AlphabetBuilderStandard<>( - new AlphabetSerializerXml(InputSymbolXml.class, + protected AlphabetBuilderStandard alphabetBuilder = new AlphabetBuilderStandard<>( + new AlphabetSerializerXml(SymbolXml.class, EdhocAlphabetPojoXmlRA.class)); protected AlphabetTransformerRA alphabetTransformer = new AlphabetTransformerRA(alphabetBuilder); From 01c4bc7b253a44aff37a3df209347d5e05a84690 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 27 Mar 2024 15:35:23 +0100 Subject: [PATCH 045/169] Logging & reformatting NOTE: might undo. --- .../protocol/MessageProcessorPersistent.java | 640 +++++++++++------- .../sul/mapper/context/EdhocMapperState.java | 40 +- .../mapper/mappers/EdhocOutputMapperRA.java | 69 +- .../mapper/symbols/inputs/EdhocInputRA.java | 8 +- 4 files changed, 461 insertions(+), 296 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java index 3b6b99f0..0017ede7 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java @@ -15,10 +15,14 @@ import java.util.*; /** - * Taken and heavily adapted from {@link org.eclipse.californium.edhoc.MessageProcessor}. - * Substitutes the static functions of {@link org.eclipse.californium.edhoc.MessageProcessor} mainly by removing - * field cleanup and purge session calls and by delaying changes to session. The read functions return boolean. - * These functions are no longer static and take their parameters also from the class's field edhocMapperState. + * Taken and heavily adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor}. + * Substitutes the static functions of + * {@link org.eclipse.californium.edhoc.MessageProcessor} mainly by removing + * field cleanup and purge session calls and by delaying changes to session. The + * read functions return boolean. + * These functions are no longer static and take their parameters also from the + * class's field edhocMapperState. */ public class MessageProcessorPersistent { private static final Logger LOGGER = LogManager.getLogger(); @@ -41,7 +45,10 @@ public enum StructureCodes { UNKNOWN_MESSAGE } - /** Tries to match the byte sequence's structure of CBOR elements with an edhoc message */ + /** + * Tries to match the byte sequence's structure of CBOR elements with an edhoc + * message + */ public StructureCodes messageTypeFromStructure(byte[] sequence) { LOGGER.debug("Start of messageTypeFromStructure"); if (sequence == null) { @@ -62,8 +69,10 @@ public StructureCodes messageTypeFromStructure(byte[] sequence) { return StructureCodes.EDHOC_ERROR_MESSAGE; } - // A CoAP client receives responses from CoAP server without connection identifiers prepended - // A CoAP server receives requests from CoAP clients with C_I or C_R prepended if enabled + // A CoAP client receives responses from CoAP server without connection + // identifiers prepended + // A CoAP server receives requests from CoAP clients with C_I or C_R prepended + // if enabled int cX_offset = edhocMapperState.receiveWithPrependedCX() ? 1 : 0; int messageElementsLength = elements.length - cX_offset; @@ -95,10 +104,12 @@ public StructureCodes messageTypeFromStructure(byte[] sequence) { } } - /* Initiator message functions -- only session of Initiator is modified */ - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage1} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage1} + */ public byte[] writeMessage1() { LOGGER.debug("Start of writeMessage1"); EdhocSessionPersistent session = edhocMapperState.getEdhocSessionPersistent(); @@ -126,12 +137,15 @@ public byte[] writeMessage1() { int preferredSuite = supportedCipherSuites.get(0); if (peerSupportedCipherSuites == null || peerSupportedCipherSuites.isEmpty()) { - // No SUITES_R has been received, so it is not known what cipher suites the responder supports + // No SUITES_R has been received, so it is not known what cipher suites the + // responder supports // The selected cipher suite is the most preferred by the initiator selectedSuite = preferredSuite; } else { - // SUITES_R has been received, so it is known what cipher suites the responder supports - // Pick the selected cipher suite as the most preferred by the Initiator from the ones + // SUITES_R has been received, so it is known what cipher suites the responder + // supports + // Pick the selected cipher suite as the most preferred by the Initiator from + // the ones // supported by the Responder for (Integer i : supportedCipherSuites) { if (peerSupportedCipherSuites.contains(i)) { @@ -149,7 +163,8 @@ public byte[] writeMessage1() { // Set the selected cipher suite session.setSelectedCipherSuite(selectedSuite); - // Set the asymmetric key pair, CRED and ID_CRED of the Initiator to use in this session + // Set the asymmetric key pair, CRED and ID_CRED of the Initiator to use in this + // session session.setAuthenticationCredential(); // Set the ephemeral keys of the Initiator to use in this session @@ -163,7 +178,8 @@ public byte[] writeMessage1() { suitesI = CBORObject.FromObject(selectedSuite); } else { // SUITES_I is a CBOR array - // The elements are the Initiator's supported cipher suite in decreasing order of preference, + // The elements are the Initiator's supported cipher suite in decreasing order + // of preference, // up until and including the selected suite as last element of the array. suitesI = CBORObject.NewArray(); for (Integer i : supportedCipherSuites) { @@ -178,11 +194,11 @@ public byte[] writeMessage1() { objectList.add(suitesI); // G_X as a CBOR byte string - CBORObject gX = switch(selectedSuite) { + CBORObject gX = switch (selectedSuite) { case Constants.EDHOC_CIPHER_SUITE_0, Constants.EDHOC_CIPHER_SUITE_1 -> - session.getEphemeralKey().PublicKey().get(KeyKeys.OKP_X); + session.getEphemeralKey().PublicKey().get(KeyKeys.OKP_X); case Constants.EDHOC_CIPHER_SUITE_2, Constants.EDHOC_CIPHER_SUITE_3 -> - session.getEphemeralKey().PublicKey().get(KeyKeys.EC2_X); + session.getEphemeralKey().PublicKey().get(KeyKeys.EC2_X); default -> null; }; @@ -198,7 +214,8 @@ public byte[] writeMessage1() { // C_I byte[] connectionIdentifierInitiator = session.getConnectionId(); CBORObject cI = encodeIdentifier(connectionIdentifierInitiator); - LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Initiator", connectionIdentifierInitiator)); + LOGGER.debug( + EdhocUtil.byteArrayToString("Connection Identifier of the Initiator", connectionIdentifierInitiator)); LOGGER.debug(EdhocUtil.byteArrayToString("C_I", cI.EncodeToBytes())); objectList.add(cI); @@ -212,10 +229,10 @@ public byte[] writeMessage1() { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_1, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_1, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); @@ -249,12 +266,17 @@ public byte[] writeMessage1() { return message1; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage2} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage2} + */ public boolean readMessage2(byte[] sequence) { LOGGER.debug("Start of readMessage2"); - Map edhocSessions = edhocMapperState.getEdhocEndpointInfoPersistent().getEdhocSessionsPersistent(); + Map edhocSessions = edhocMapperState.getEdhocEndpointInfoPersistent() + .getEdhocSessionsPersistent(); Map peerPublicKeys = edhocMapperState.getEdhocEndpointInfoPersistent().getPeerPublicKeys(); - Map peerCredentials = edhocMapperState.getEdhocEndpointInfoPersistent().getPeerCredentials(); + Map peerCredentials = edhocMapperState.getEdhocEndpointInfoPersistent() + .getPeerCredentials(); Set usedConnectionIds = edhocMapperState.getEdhocEndpointInfoPersistent().getUsedConnectionIds(); Set ownIdCreds = edhocMapperState.getOwnIdCreds(); @@ -284,7 +306,7 @@ public boolean readMessage2(byte[] sequence) { index++; CBORObject cI = objectListRequest[index]; - if (cI.getType() != CBORType.ByteString && cI.getType() != CBORType.Integer) { + if (cI.getType() != CBORType.ByteString && cI.getType() != CBORType.Integer) { LOGGER.error("R_M2: C_I must be a byte string or an integer"); return false; } @@ -296,16 +318,18 @@ public boolean readMessage2(byte[] sequence) { return false; } } else { - // CoAP Client as Initiator when Message 2 is a CoAP response of a previous Message 1 request + // CoAP Client as Initiator when Message 2 is a CoAP response of a previous + // Message 1 request // or CoAP Server as Initiator with correlation with CX is disabled connectionIdentifierInitiator = edhocMapperState.getEdhocSessionPersistent().getConnectionId(); } - LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Initiator", connectionIdentifierInitiator)); + LOGGER.debug( + EdhocUtil.byteArrayToString("Connection Identifier of the Initiator", connectionIdentifierInitiator)); CBORObject connectionIdentifierInitiatorCbor = CBORObject.FromObject(connectionIdentifierInitiator); EdhocSessionPersistent session = edhocSessions.get(connectionIdentifierInitiatorCbor); - + LOGGER.info("Sessions: " + edhocSessions); if (session == null) { LOGGER.error("R_M2: EDHOC session not found"); return false; @@ -338,13 +362,13 @@ public boolean readMessage2(byte[] sequence) { // Ephemeral public key of the Responder int selectedCipherSuite = session.getSelectedCipherSuite(); - OneKey peerEphemeralKey = switch(selectedCipherSuite) { + OneKey peerEphemeralKey = switch (selectedCipherSuite) { case Constants.EDHOC_CIPHER_SUITE_0, Constants.EDHOC_CIPHER_SUITE_1 -> - SharedSecretCalculation.buildCurve25519OneKey(null, gY); + SharedSecretCalculation.buildCurve25519OneKey(null, gY); case Constants.EDHOC_CIPHER_SUITE_2, Constants.EDHOC_CIPHER_SUITE_3 -> - SharedSecretCalculation.buildEcdsa256OneKey(null, gY, null); + SharedSecretCalculation.buildEcdsa256OneKey(null, gY, null); default -> - null; + null; }; if (peerEphemeralKey == null) { @@ -378,11 +402,12 @@ public boolean readMessage2(byte[] sequence) { return false; } - LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Responder", connectionIdentifierResponder)); + LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Responder", + connectionIdentifierResponder)); LOGGER.debug(EdhocUtil.byteArrayToString("C_R", cR.EncodeToBytes())); if (session.getApplicationProfile().getUsedForOSCORE() - && Arrays.equals(connectionIdentifierInitiator, connectionIdentifierResponder)) { + && Arrays.equals(connectionIdentifierInitiator, connectionIdentifierResponder)) { LOGGER.warn("R_M2: Found C_R equal to C_I in an OSCORE enabled Application Profile"); } } @@ -500,11 +525,12 @@ public boolean readMessage2(byte[] sequence) { return false; } - LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Responder", connectionIdentifierResponder)); + LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Responder", + connectionIdentifierResponder)); LOGGER.debug(EdhocUtil.byteArrayToString("C_R", cR.EncodeToBytes())); if (session.getApplicationProfile().getUsedForOSCORE() - && Arrays.equals(connectionIdentifierInitiator, connectionIdentifierResponder)) { + && Arrays.equals(connectionIdentifierInitiator, connectionIdentifierResponder)) { LOGGER.warn("R_M2: Found C_R equal to C_I in an OSCORE enabled Application Profile"); } } @@ -581,10 +607,10 @@ public boolean readMessage2(byte[] sequence) { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_2, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_2, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); @@ -600,9 +626,9 @@ public boolean readMessage2(byte[] sequence) { .containsKey(Constants.SIDE_PROCESSOR_OUTER_CRED)) { peerCredCBOR = sideProcessor.getResults(Constants.EDHOC_MESSAGE_2, false) - .get(Constants.SIDE_PROCESSOR_OUTER_CRED) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_CRED_VALUE); + .get(Constants.SIDE_PROCESSOR_OUTER_CRED) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_CRED_VALUE); if (peerCredCBOR == null) { LOGGER.error("R_M2: Unable to retrieve the peer credential from the side processing on message 2"); @@ -666,10 +692,10 @@ public boolean readMessage2(byte[] sequence) { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_2, true) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_2, Constants.SIDE_PROCESSOR_OUTER_ERROR, true); @@ -696,7 +722,10 @@ public boolean readMessage2(byte[] sequence) { return true; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage3} + */ public byte[] writeMessage3() { LOGGER.debug("Start of writeMessage3"); EdhocSessionPersistent session = edhocMapperState.getEdhocSessionPersistent(); @@ -756,10 +785,10 @@ public byte[] writeMessage3() { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_3, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_3, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); @@ -902,10 +931,14 @@ public byte[] writeMessage3() { return message3; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage4} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage4} + */ public boolean readMessage4(byte[] sequence) { LOGGER.debug("Start of readMessage4"); - Map edhocSessions = edhocMapperState.getEdhocEndpointInfoPersistent().getEdhocSessionsPersistent(); + Map edhocSessions = edhocMapperState.getEdhocEndpointInfoPersistent() + .getEdhocSessionsPersistent(); Set usedConnectionIds = edhocMapperState.getEdhocEndpointInfoPersistent().getUsedConnectionIds(); if (sequence == null || edhocSessions == null || usedConnectionIds == null) { @@ -932,7 +965,7 @@ public boolean readMessage4(byte[] sequence) { // C_I is present as first element of the CBOR sequence index++; if (objectListRequest[index].getType() != CBORType.ByteString - && objectListRequest[index].getType() != CBORType.Integer) { + && objectListRequest[index].getType() != CBORType.Integer) { LOGGER.error("R_M4: C_I must be a byte string or an integer"); return false; } @@ -943,7 +976,8 @@ public boolean readMessage4(byte[] sequence) { return false; } } else { - // CoAP Client as Initiator when Message 4 is a CoAP response of a previous Message 3 request + // CoAP Client as Initiator when Message 4 is a CoAP response of a previous + // Message 3 request // or CoAP Server as Initiator with correlation with CX is disabled connectionIdentifierInitiator = edhocMapperState.getEdhocSessionPersistent().getConnectionId(); } @@ -1002,15 +1036,18 @@ public boolean readMessage4(byte[] sequence) { } LOGGER.debug(EdhocUtil.byteArrayToString("IV", iv4ae)); - byte[] plaintext4 = decryptCiphertext4(session.getSelectedCipherSuite(), externalData, ciphertext4, k4ae, iv4ae); + byte[] plaintext4 = decryptCiphertext4(session.getSelectedCipherSuite(), externalData, ciphertext4, k4ae, + iv4ae); if (plaintext4 == null) { LOGGER.error("R_M4: Decrypting CIPHERTEXT_4"); return false; } LOGGER.debug(EdhocUtil.byteArrayToString("Plaintext retrieved from CIPHERTEXT_4", plaintext4)); - // Parse the outer plaintext as a CBOR sequence. To be valid, this is either the empty plaintext - // or just padding or padding followed by the External Authorization Data EAD_4 possibly + // Parse the outer plaintext as a CBOR sequence. To be valid, this is either the + // empty plaintext + // or just padding or padding followed by the External Authorization Data EAD_4 + // possibly CBORObject[] ead4 = null; if (plaintext4.length > 0) { @@ -1058,13 +1095,14 @@ public boolean readMessage4(byte[] sequence) { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_4, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object - sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_4, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); + sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_4, Constants.SIDE_PROCESSOR_OUTER_ERROR, + false); LOGGER.error("R_M4: Using side processor on message 4: {}", error); return false; @@ -1077,13 +1115,16 @@ public boolean readMessage4(byte[] sequence) { return true; } - /* Responder message functions -- only session of Responder is modified */ - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage1} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage1} + */ public boolean readMessage1(byte[] sequence) { LOGGER.debug("Start of readMessage1"); - List supportedCipherSuites = edhocMapperState.getEdhocEndpointInfoPersistent().getSupportedCipherSuites(); + List supportedCipherSuites = edhocMapperState.getEdhocEndpointInfoPersistent() + .getSupportedCipherSuites(); AppProfile appProfile = edhocMapperState.getEdhocSessionPersistent().getApplicationProfile(); if (sequence == null || supportedCipherSuites == null || appProfile == null) { @@ -1107,7 +1148,8 @@ public boolean readMessage1(byte[] sequence) { return false; } - // If the received message is a request and the first element before the actual message_1 is the + // If the received message is a request and the first element before the actual + // message_1 is the // CBOR simple value 'true', it can be skipped if (edhocMapperState.receiveWithPrependedCX()) { index++; @@ -1160,7 +1202,7 @@ public boolean readMessage1(byte[] sequence) { } for (int i = 0; i < objectListRequest[index].size(); i++) { - if(objectListRequest[index].get(i).getType() != CBORType.Integer + if (objectListRequest[index].get(i).getType() != CBORType.Integer || objectListRequest[index].get(i).AsInt32() < 0) { LOGGER.error("R_M1: SUITES_I as an array must have positive integers as elements"); return false; @@ -1169,7 +1211,7 @@ public boolean readMessage1(byte[] sequence) { // The selected cipher suite is the last element of SUITES_I int size = objectListRequest[index].size(); - selectedCipherSuite = objectListRequest[index].get(size-1).AsInt32(); + selectedCipherSuite = objectListRequest[index].get(size - 1).AsInt32(); int firstSharedCipherSuite = -1; // Find the first commonly supported cipher suite, i.e. the cipher suite both @@ -1190,15 +1232,16 @@ public boolean readMessage1(byte[] sequence) { // The Responder does not support any cipher suites in SUITES_I. // SUITES_R will include all the cipher suites supported by the Responder cipherSuitesToOffer = supportedCipherSuites; - } - else { + } else { // SUITES_R will include only the cipher suite supported // by both peers and most preferred by the Initiator. cipherSuitesToOffer = new ArrayList<>(firstSharedCipherSuite); } } else if (firstSharedCipherSuite != selectedCipherSuite) { - // The Responder supports the selected cipher suite, but it has to reply with an EDHOC Error Message - // if it supports a cipher suite more preferred by the Initiator than the selected cipher suite + // The Responder supports the selected cipher suite, but it has to reply with an + // EDHOC Error Message + // if it supports a cipher suite more preferred by the Initiator than the + // selected cipher suite LOGGER.error("R_M1: The selected cipher suite is not supported"); @@ -1247,9 +1290,11 @@ public boolean readMessage1(byte[] sequence) { if (length > 0) { // EAD_1 is present if (hasProtocolVersionLeqV17()) { - ead1 = preParseEADleqV17(objectListRequest, index, edhocMapperState.getEdhocSessionPersistent().getSupportedEADs()); + ead1 = preParseEADleqV17(objectListRequest, index, + edhocMapperState.getEdhocSessionPersistent().getSupportedEADs()); } else { - ead1 = preParseEAD(objectListRequest, index, 1, edhocMapperState.getEdhocSessionPersistent().getSupportedEADs()); + ead1 = preParseEAD(objectListRequest, index, 1, + edhocMapperState.getEdhocSessionPersistent().getSupportedEADs()); } if (ead1 == null) { @@ -1291,13 +1336,14 @@ public boolean readMessage1(byte[] sequence) { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_1, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object - sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_1, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); + sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_1, Constants.SIDE_PROCESSOR_OUTER_ERROR, + false); LOGGER.error("R_M1: Using side processor on message 1: {}", error); return false; @@ -1305,7 +1351,10 @@ public boolean readMessage1(byte[] sequence) { } } - /* Modify session -- Create a new edhocSessionPersistent to replace current session */ + /* + * Modify session -- Create a new edhocSessionPersistent to replace current + * session + */ EdhocSessionPersistent oldSession = edhocMapperState.getEdhocSessionPersistent(); EdhocEndpointInfoPersistent endpointInfo = edhocMapperState.getEdhocEndpointInfoPersistent(); @@ -1317,9 +1366,10 @@ public boolean readMessage1(byte[] sequence) { } byte[] connectionIdResponder = oldSession.getConnectionId(); + LOGGER.info("Old Connection ID: " + EdhocUtil.bytesToInt(connectionIdResponder)); if (edhocMapperState.getEdhocMapperConfig().generateOwnConnectionId()) { connectionIdResponder = Util.getConnectionId(endpointInfo.getUsedConnectionIds(), - endpointInfo.getOscoreDb(), connectionIdInitiator); + endpointInfo.getOscoreDb(), connectionIdInitiator); } EdhocSessionPersistent newSession = new EdhocSessionPersistent(oldSession.getSessionUri(), @@ -1331,20 +1381,21 @@ public boolean readMessage1(byte[] sequence) { // Set the selected cipher suite newSession.setSelectedCipherSuite(selectedCipherSuite); - // Set the asymmetric key pair, CRED and ID_CRED of the Responder to use in this session + // Set the asymmetric key pair, CRED and ID_CRED of the Responder to use in this + // session newSession.setAuthenticationCredential(); // Set the Connection Identifier of the peer newSession.setPeerConnectionId(connectionIdInitiator); // Set the ephemeral public key of the Initiator - OneKey peerEphemeralKey = switch(selectedCipherSuite) { + OneKey peerEphemeralKey = switch (selectedCipherSuite) { case Constants.EDHOC_CIPHER_SUITE_0, Constants.EDHOC_CIPHER_SUITE_1 -> - SharedSecretCalculation.buildCurve25519OneKey(null, gX); + SharedSecretCalculation.buildCurve25519OneKey(null, gX); case Constants.EDHOC_CIPHER_SUITE_2, Constants.EDHOC_CIPHER_SUITE_3 -> - SharedSecretCalculation.buildEcdsa256OneKey(null, gX, null); + SharedSecretCalculation.buildEcdsa256OneKey(null, gX, null); default -> - throw new IllegalStateException("Unexpected value: " + selectedCipherSuite); + throw new IllegalStateException("Unexpected value: " + selectedCipherSuite); }; newSession.setPeerEphemeralPublicKey(peerEphemeralKey); @@ -1367,22 +1418,29 @@ public boolean readMessage1(byte[] sequence) { // Update edhocSessions edhocMapperState.getEdhocEndpointInfoPersistent().getEdhocSessionsPersistent() .put(CBORObject.FromObject(connectionIdResponder), newSession); + LOGGER.info("Sessions after update: " + + edhocMapperState.getEdhocEndpointInfoPersistent().getEdhocSessionsPersistent()); LOGGER.debug("Successful processing of EDHOC Message 1"); return true; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage2} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage2} + */ public byte[] writeMessage2() { LOGGER.debug("Start of writeMessage2"); EdhocSessionPersistent session = edhocMapperState.getEdhocSessionPersistent(); List objectList = new ArrayList<>(); - // C_I, if EDHOC message_2 is transported in a CoAP request and CX correlation is enabled + // C_I, if EDHOC message_2 is transported in a CoAP request and CX correlation + // is enabled if (edhocMapperState.sendWithPrependedCX()) { byte[] connectionIdentifierInitiator = session.getPeerConnectionId(); CBORObject cI = encodeIdentifier(connectionIdentifierInitiator); - LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Initiator", connectionIdentifierInitiator)); + LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Initiator", + connectionIdentifierInitiator)); LOGGER.debug(EdhocUtil.byteArrayToString("C_I", cI.EncodeToBytes())); objectList.add(cI); } @@ -1394,11 +1452,11 @@ public byte[] writeMessage2() { // G_Y as a CBOR byte string int selectedSuite = session.getSelectedCipherSuite(); - CBORObject gY = switch(selectedSuite) { + CBORObject gY = switch (selectedSuite) { case Constants.EDHOC_CIPHER_SUITE_0, Constants.EDHOC_CIPHER_SUITE_1 -> - session.getEphemeralKey().PublicKey().get(KeyKeys.OKP_X); + session.getEphemeralKey().PublicKey().get(KeyKeys.OKP_X); case Constants.EDHOC_CIPHER_SUITE_2, Constants.EDHOC_CIPHER_SUITE_3 -> - session.getEphemeralKey().PublicKey().get(KeyKeys.EC2_X); + session.getEphemeralKey().PublicKey().get(KeyKeys.EC2_X); default -> null; }; @@ -1412,7 +1470,8 @@ public byte[] writeMessage2() { // C_R byte[] connectionIdentifierResponder = session.getConnectionId(); CBORObject cR = encodeIdentifier(connectionIdentifierResponder); - LOGGER.debug(EdhocUtil.byteArrayToString("Connection Identifier of the Responder", connectionIdentifierResponder)); + LOGGER.debug( + EdhocUtil.byteArrayToString("Connection Identifier of the Responder", connectionIdentifierResponder)); LOGGER.debug(EdhocUtil.byteArrayToString("C_R", cR.EncodeToBytes())); // Compute TH_2 @@ -1436,7 +1495,6 @@ public byte[] writeMessage2() { LOGGER.debug(EdhocUtil.byteArrayToString("H(message_1)", hashMessage1)); LOGGER.debug(EdhocUtil.byteArrayToString("TH_2", th2)); - // Compute the key material // Compute the Diffie-Hellman secret G_XY @@ -1483,10 +1541,10 @@ public byte[] writeMessage2() { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_2, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_2, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); @@ -1539,7 +1597,8 @@ public byte[] writeMessage2() { } if (session.getIdCred().ContainsKey(HeaderKeys.KID.AsCBOR())) { - // ID_CRED_R uses 'kid', whose value is the only thing to include in the plaintext + // ID_CRED_R uses 'kid', whose value is the only thing to include in the + // plaintext CBORObject kid = session.getIdCred().get(HeaderKeys.KID.AsCBOR()); plaintextElement = encodeIdentifier(kid.GetByteString()); } else { @@ -1558,7 +1617,7 @@ public byte[] writeMessage2() { // Compute KEYSTREAM_2 byte[] keystream2 = computeKeystream2(session, th2, prk2e, plaintext2.length); - if (keystream2== null) { + if (keystream2 == null) { LOGGER.error("W_M2: Computing KEYSTREAM_2"); return null; } @@ -1574,7 +1633,8 @@ public byte[] writeMessage2() { System.arraycopy(gY.GetByteString(), 0, gY_Ciphertext2, 0, gY.GetByteString().length); System.arraycopy(ciphertext2, 0, gY_Ciphertext2, gY.GetByteString().length, ciphertext2.length); - // Wrap the result in a single CBOR byte string, included in the outer CBOR sequence of EDHOC Message 2 + // Wrap the result in a single CBOR byte string, included in the outer CBOR + // sequence of EDHOC Message 2 objectList.add(CBORObject.FromObject(gY_Ciphertext2)); LOGGER.debug(EdhocUtil.byteArrayToString("G_Y | CIPHERTEXT_2", gY_Ciphertext2)); @@ -1587,7 +1647,6 @@ public byte[] writeMessage2() { byte[] message2 = EdhocUtil.buildCBORSequence(objectList); LOGGER.debug(EdhocUtil.byteArrayToString("EDHOC Message 2", message2)); - /* Modify session */ if (!session.isInitiator()) { session.setTH2(th2); @@ -1599,12 +1658,17 @@ public byte[] writeMessage2() { return message2; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#readMessage3} + */ public boolean readMessage3(byte[] sequence) { LOGGER.debug("Start of readMessage3"); - Map edhocSessions = edhocMapperState.getEdhocEndpointInfoPersistent().getEdhocSessionsPersistent(); + Map edhocSessions = edhocMapperState.getEdhocEndpointInfoPersistent() + .getEdhocSessionsPersistent(); Map peerPublicKeys = edhocMapperState.getEdhocEndpointInfoPersistent().getPeerPublicKeys(); - Map peerCredentials = edhocMapperState.getEdhocEndpointInfoPersistent().getPeerCredentials(); + Map peerCredentials = edhocMapperState.getEdhocEndpointInfoPersistent() + .getPeerCredentials(); Set usedConnectionIds = edhocMapperState.getEdhocEndpointInfoPersistent().getUsedConnectionIds(); if (sequence == null || edhocSessions == null || peerPublicKeys == null || peerCredentials == null @@ -1622,7 +1686,6 @@ public boolean readMessage3(byte[] sequence) { return false; } - /* Consistency checks */ // C_R @@ -1633,7 +1696,7 @@ public boolean readMessage3(byte[] sequence) { // C_R is present as first element of the CBOR sequence index++; if (objectListRequest[index].getType() != CBORType.ByteString - && objectListRequest[index].getType() != CBORType.Integer) { + && objectListRequest[index].getType() != CBORType.Integer) { LOGGER.error("R_M3: C_R must be a byte string or an integer"); return false; } @@ -1644,7 +1707,8 @@ public boolean readMessage3(byte[] sequence) { return false; } } else { - // CoAP Client as Responder when Message 3 is a CoAP response of a previous Message 2 request + // CoAP Client as Responder when Message 3 is a CoAP response of a previous + // Message 2 request // or CoAP Server as Initiator with CX correlation disabled connectionIdentifierResponder = edhocMapperState.getEdhocSessionPersistent().getConnectionId(); } @@ -1695,7 +1759,6 @@ public boolean readMessage3(byte[] sequence) { } LOGGER.debug(EdhocUtil.byteArrayToString("K_3", k3)); - byte[] iv3 = computeKeyOrIV3("IV", session, th3, session.getPRK3e2m()); if (iv3 == null) { LOGGER.error("R_M3: Computing IV_3ae"); @@ -1732,7 +1795,7 @@ public boolean readMessage3(byte[] sequence) { if (hasProtocolVersionLeqV17()) { // Discard possible padding prepended to the plaintext while (baseIndex < plaintextElementList.length - && plaintextElementList[baseIndex].equals(CBORObject.True)) { + && plaintextElementList[baseIndex].equals(CBORObject.True)) { baseIndex++; } } @@ -1807,10 +1870,10 @@ public boolean readMessage3(byte[] sequence) { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_3, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_3, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); @@ -1819,16 +1882,17 @@ public boolean readMessage3(byte[] sequence) { return false; } - // If no error occurred, the side processor object includes the authentication credential + // If no error occurred, the side processor object includes the authentication + // credential // of the other peer, if a valid one was found during the side processing CBORObject peerCredCBOR = null; if (sideProcessor.getResults(Constants.EDHOC_MESSAGE_3, false) .containsKey(Integer.valueOf(Constants.SIDE_PROCESSOR_OUTER_CRED))) { peerCredCBOR = sideProcessor.getResults(Constants.EDHOC_MESSAGE_3, false) - .get(Integer.valueOf(Constants.SIDE_PROCESSOR_OUTER_CRED)) - .get(0) - .get(Integer.valueOf(Constants.SIDE_PROCESSOR_INNER_CRED_VALUE)); + .get(Integer.valueOf(Constants.SIDE_PROCESSOR_OUTER_CRED)) + .get(0) + .get(Integer.valueOf(Constants.SIDE_PROCESSOR_INNER_CRED_VALUE)); if (peerCredCBOR == null) { LOGGER.error("R_M3: Unable to retrieve the peer credential from the side processing on message 3"); @@ -1894,10 +1958,10 @@ public boolean readMessage3(byte[] sequence) { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_3, true) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_3, Constants.SIDE_PROCESSOR_OUTER_ERROR, true); @@ -1960,7 +2024,10 @@ public boolean readMessage3(byte[] sequence) { return true; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage4} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#writeMessage4} + */ public byte[] writeMessage4() { LOGGER.debug("Start of writeMessage4"); EdhocSessionPersistent session = edhocMapperState.getEdhocSessionPersistent(); @@ -1968,7 +2035,8 @@ public byte[] writeMessage4() { /* Start preparing data_4 */ - // C_I, if EDHOC message_4 is transported in a CoAP request and CX correlation is enabled + // C_I, if EDHOC message_4 is transported in a CoAP request and CX correlation + // is enabled if (edhocMapperState.sendWithPrependedCX()) { byte[] connectionIdentifierInitiator = session.getPeerConnectionId(); CBORObject cI = encodeIdentifier(connectionIdentifierInitiator); @@ -2001,10 +2069,10 @@ public byte[] writeMessage4() { .containsKey(Constants.SIDE_PROCESSOR_OUTER_ERROR)) { String error = sideProcessor.getResults(Constants.EDHOC_MESSAGE_4, false) - .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) - .get(0) - .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) - .AsString(); + .get(Constants.SIDE_PROCESSOR_OUTER_ERROR) + .get(0) + .get(Constants.SIDE_PROCESSOR_INNER_ERROR_DESCRIPTION) + .AsString(); // No need to keep this information any longer in the side processor object sideProcessor.removeResultSet(Constants.EDHOC_MESSAGE_4, Constants.SIDE_PROCESSOR_OUTER_ERROR, false); @@ -2061,31 +2129,37 @@ public byte[] writeMessage4() { return message4; } - /* Error message functions */ - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#isErrorMessage} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#isErrorMessage} + */ protected boolean hasErrorMessageStructure(CBORObject[] myObjects) { // A CoAP message including an EDHOC error message is a CBOR sequence of - // CX - not true (optional); ERR_CODE - int (mandatory); ERR_INFO - any type (mandatory) + // CX - not true (optional); ERR_CODE - int (mandatory); ERR_INFO - any type + // (mandatory) if (myObjects.length != 3 && myObjects.length != 2) { return false; } if (edhocMapperState.receiveWithPrependedCX()) { // Received by CoAP server - // Error message is a request, this starts with C_X different from 'true' (0xf5), + // Error message is a request, this starts with C_X different from 'true' + // (0xf5), // followed by ERR_CODE as a CBOR integer return !myObjects[0].equals(CBORObject.True) && myObjects[1].getType() == CBORType.Integer; - } - else { + } else { // Received by CoAP client or CoAP server with CX correlation disabled // Error message is a response, this starts with ERR_CODE as a CBOR integer return myObjects[0].getType() == CBORType.Integer; } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#writeErrorMessage} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#writeErrorMessage} + */ public byte[] writeErrorMessage(int errorCode, String errMsg) { LOGGER.debug("Start of writeErrorMessage"); @@ -2097,7 +2171,7 @@ public byte[] writeErrorMessage(int errorCode, String errMsg) { } if (cipherSuites != null && cipherSuites.getType() == CBORType.Array) { - for (int i = 0 ; i < cipherSuites.size(); i++) { + for (int i = 0; i < cipherSuites.size(); i++) { if (cipherSuites.get(i).getType() != CBORType.Integer) { return null; } @@ -2106,7 +2180,8 @@ public byte[] writeErrorMessage(int errorCode, String errMsg) { List objectList = new ArrayList<>(); - // Include C_X if error message sent from CoAP Client with CX correlation enabled + // Include C_X if error message sent from CoAP Client with CX correlation + // enabled if (edhocMapperState.sendWithPrependedCX()) { CBORObject cX = encodeIdentifier(edhocMapperState.getEdhocSessionPersistent().getPeerConnectionId()); objectList.add(cX); @@ -2123,7 +2198,8 @@ public byte[] writeErrorMessage(int errorCode, String errMsg) { // Include DIAG_MSG objectList.add(CBORObject.FromObject(errMsg)); } else if (errorCode == Constants.ERR_CODE_WRONG_SELECTED_CIPHER_SUITE) { - // Possibly include cipher suites, this implies that EDHOC Message 1 was good enough + // Possibly include cipher suites, this implies that EDHOC Message 1 was good + // enough // to yield a suite negotiation if (cipherSuites != null) objectList.add(cipherSuites); @@ -2136,7 +2212,10 @@ public byte[] writeErrorMessage(int errorCode, String errMsg) { return payload; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#readErrorMessage} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#readErrorMessage} + */ public boolean readErrorMessage(byte[] sequence) { LOGGER.debug("Start of readErrorMessage"); Map edhocSessions = edhocMapperState.getEdhocEndpointInfoPersistent() @@ -2163,7 +2242,8 @@ public boolean readErrorMessage(byte[] sequence) { } if (edhocMapperState.receiveWithPrependedCX()) { - // The connection identifier is expected as first element in the EDHOC Error Message + // The connection identifier is expected as first element in the EDHOC Error + // Message if (objectList[index].getType() != CBORType.ByteString && objectList[index].getType() != CBORType.Integer) { LOGGER.error("R_ERR: Invalid format of C_X"); @@ -2196,17 +2276,17 @@ public boolean readErrorMessage(byte[] sequence) { index++; // Check that the rest of the message is consistent - if (objectList.length == index){ + if (objectList.length == index) { LOGGER.error("R_ERR: ERR_INFO expected but not included"); return false; } - if (objectList.length > (index + 1)){ + if (objectList.length > (index + 1)) { LOGGER.error("R_ERR: Unexpected parameters following ERR_INFO"); return false; } - switch(errorCode) { + switch (errorCode) { case Constants.ERR_CODE_SUCCESS -> { LOGGER.warn("R_ERR: Error code success"); } @@ -2217,14 +2297,15 @@ public boolean readErrorMessage(byte[] sequence) { return false; } String errorMsg = objectList[index].AsString(); - LOGGER.info("ERR_INFO: {} ~ {}", EdhocUtil.byteArrayToString(errorMsg.getBytes(StandardCharsets.UTF_8)), errorMsg); + LOGGER.info("ERR_INFO: {} ~ {}", EdhocUtil.byteArrayToString(errorMsg.getBytes(StandardCharsets.UTF_8)), + errorMsg); } case Constants.ERR_CODE_WRONG_SELECTED_CIPHER_SUITE -> { CBORObject suitesR = objectList[index]; List peerSupportedCipherSuites = new ArrayList<>(); - switch(suitesR.getType()) { + switch (suitesR.getType()) { case Integer -> { peerSupportedCipherSuites.add(suitesR.AsInt32()); } @@ -2257,10 +2338,12 @@ public boolean readErrorMessage(byte[] sequence) { return true; } - /* General util functions */ - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#encodeIdentifier} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#encodeIdentifier} + */ protected CBORObject encodeIdentifier(byte[] identifier) { CBORObject identifierCBOR = null; @@ -2273,13 +2356,14 @@ protected CBORObject encodeIdentifier(byte[] identifier) { int byteValue = EdhocUtil.bytesToInt(identifier); if ((byteValue >= 0 && byteValue <= 23) || (byteValue >= 32 && byteValue <= 55)) { - // The EDHOC connection identifier is in the range 0x00-0x17 or in the range 0x20-0x37. - // That is, it happens to be the serialization of a CBOR integer with numeric value -24..23 + // The EDHOC connection identifier is in the range 0x00-0x17 or in the range + // 0x20-0x37. + // That is, it happens to be the serialization of a CBOR integer with numeric + // value -24..23 // Encode the EDHOC connection identifier as a CBOR integer identifierCBOR = CBORObject.DecodeFromBytes(identifier); - } - else { + } else { // Encode the EDHOC connection identifier as a CBOR byte string identifierCBOR = CBORObject.FromObject(identifier); } @@ -2288,7 +2372,10 @@ protected CBORObject encodeIdentifier(byte[] identifier) { return identifierCBOR; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#decodeIdentifier} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#decodeIdentifier} + */ protected byte[] decodeIdentifier(CBORObject identifierCbor) { byte[] identifier = null; @@ -2302,12 +2389,12 @@ protected byte[] decodeIdentifier(CBORObject identifierCbor) { // This EDHOC connection identifier should have been encoded as a CBOR integer identifier = null; } - } - else if (identifierCbor != null && identifierCbor.getType() == CBORType.Integer) { + } else if (identifierCbor != null && identifierCbor.getType() == CBORType.Integer) { identifier = identifierCbor.EncodeToBytes(); if (identifier.length != 1) { - // This EDHOC connection identifier is not valid or was not encoded according to deterministic CBOR + // This EDHOC connection identifier is not valid or was not encoded according to + // deterministic CBOR identifier = null; } @@ -2315,7 +2402,10 @@ else if (identifierCbor != null && identifierCbor.getType() == CBORType.Integer) return identifier; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeTH2} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeTH2} + */ protected byte[] computeTH2(String hashAlgorithm, byte[] gY, byte[] cR, byte[] hashMessage1) { int offset = 0; byte[] hashInput = new byte[gY.length + cR.length + hashMessage1.length]; @@ -2333,7 +2423,10 @@ protected byte[] computeTH2(String hashAlgorithm, byte[] gY, byte[] cR, byte[] h } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computePRK2e} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computePRK2e} + */ protected byte[] computePRK2e(byte[] th2, byte[] dhSecret, String hashAlgorithm) { if (hashAlgorithm.equals("SHA-256") || hashAlgorithm.equals("SHA-384") || hashAlgorithm.equals("SHA-512")) { try { @@ -2346,25 +2439,29 @@ protected byte[] computePRK2e(byte[] th2, byte[] dhSecret, String hashAlgorithm) return null; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computePRK3e2m} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computePRK3e2m} + */ protected byte[] computePRK3e2m(EdhocSessionPersistent session, byte[] prk2e, byte[] th2, OneKey peerLongTerm, - OneKey peerEphemeral) { + OneKey peerEphemeral) { byte[] prk3e2m = null; int authenticationMethod = session.getMethod(); if (authenticationMethod == Constants.EDHOC_AUTH_METHOD_0 || authenticationMethod == Constants.EDHOC_AUTH_METHOD_2) { - // The responder uses signatures as authentication method, then PRK_3e2m is equal to PRK_2e + // The responder uses signatures as authentication method, then PRK_3e2m is + // equal to PRK_2e prk3e2m = new byte[prk2e.length]; System.arraycopy(prk2e, 0, prk3e2m, 0, prk2e.length); - } - else if (authenticationMethod == Constants.EDHOC_AUTH_METHOD_1 + } else if (authenticationMethod == Constants.EDHOC_AUTH_METHOD_1 || authenticationMethod == Constants.EDHOC_AUTH_METHOD_3) { - // The responder does not use signatures as authentication method, then PRK_3e2m has to be computed + // The responder does not use signatures as authentication method, then PRK_3e2m + // has to be computed byte[] dhSecret; OneKey privateKey; OneKey publicKey; - if (session.isInitiator()) { + if (session.isInitiator()) { // Use the long-term key of the Responder as public key publicKey = peerLongTerm; @@ -2429,12 +2526,17 @@ else if (authenticationMethod == Constants.EDHOC_AUTH_METHOD_1 return prk3e2m; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeMAC2} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeMAC2} + */ protected byte[] computeMAC2(EdhocSessionPersistent session, byte[] prk3e2m, byte[] th2, - CBORObject cR, CBORObject idCredR, byte[] credR, CBORObject[] ead2) { + CBORObject cR, CBORObject idCredR, byte[] credR, CBORObject[] ead2) { - // Build the CBOR sequence to use for 'context': ( ID_CRED_R, TH_2, CRED_R, ?EAD_2 ) - // The actual 'context' is a CBOR byte string with value the serialization of the CBOR sequence + // Build the CBOR sequence to use for 'context': ( ID_CRED_R, TH_2, CRED_R, + // ?EAD_2 ) + // The actual 'context' is a CBOR byte string with value the serialization of + // the CBOR sequence List objectList = new ArrayList<>(); if (!hasProtocolVersionLeqV22()) { objectList.add(cR); @@ -2469,7 +2571,10 @@ protected byte[] computeMAC2(EdhocSessionPersistent session, byte[] prk3e2m, byt } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeExternalData} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeExternalData} + */ protected byte[] computeExternalData(byte[] th, byte[] cred, CBORObject[] ead) { if (th == null || cred == null) @@ -2499,7 +2604,10 @@ protected byte[] computeExternalData(byte[] th, byte[] cred, CBORObject[] ead) { return EdhocUtil.concatenateByteArrays(externalDataList); } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeSignatureOrMac2} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeSignatureOrMac2} + */ protected byte[] computeSignatureOrMac2(EdhocSessionPersistent session, byte[] mac2, byte[] externalData) { // Used by Responder byte[] signatureOrMac2 = null; @@ -2525,8 +2633,9 @@ protected byte[] computeSignatureOrMac2(EdhocSessionPersistent session, byte[] m return null; } - LOGGER.debug(EdhocUtil.byteArrayToString("External Data for signing MAC_2 to produce Signature_or_MAC_2", - externalData)); + LOGGER.debug( + EdhocUtil.byteArrayToString("External Data for signing MAC_2 to produce Signature_or_MAC_2", + externalData)); signatureOrMac2 = EdhocUtil.computeSignature(session.getIdCred(), externalData, mac2, identityKey); @@ -2539,7 +2648,10 @@ protected byte[] computeSignatureOrMac2(EdhocSessionPersistent session, byte[] m return signatureOrMac2; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeKeystream2} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeKeystream2} + */ protected byte[] computeKeystream2(EdhocSessionPersistent session, byte[] th2, byte[] prk2e, int length) { CBORObject context = CBORObject.FromObject(th2); int selectedCipherSuite = session.getSelectedCipherSuite(); @@ -2547,7 +2659,6 @@ protected byte[] computeKeystream2(EdhocSessionPersistent session, byte[] th2, b int hashLength = EdhocSession.getEdhocHashAlgOutputSize(selectedCipherSuite); byte[] keystream2; - if ((!hashAlg.equals("SHA-256") && !hashAlg.equals("SHA-384") && !hashAlg.equals("SHA-512")) || (length <= 255 * hashLength)) { try { @@ -2556,8 +2667,7 @@ protected byte[] computeKeystream2(EdhocSessionPersistent session, byte[] th2, b LOGGER.error("Generating KEYSTREAM_2 (whole): " + e.getMessage()); return null; } - } - else { + } else { byte[] part; int regularPartSize = 255 * hashLength; int lastPartSize = regularPartSize; @@ -2588,9 +2698,12 @@ protected byte[] computeKeystream2(EdhocSessionPersistent session, byte[] th2, b return keystream2; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#verifySignatureOrMac2} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#verifySignatureOrMac2} + */ protected boolean verifySignatureOrMac2(EdhocSessionPersistent session, OneKey peerLongTerm, CBORObject peerIdCred, - byte[] signatureOrMac2, byte[] externalData, byte[] mac2) { + byte[] signatureOrMac2, byte[] externalData, byte[] mac2) { // Used by Initiator int authenticationMethod = session.getMethod(); @@ -2621,7 +2734,10 @@ protected boolean verifySignatureOrMac2(EdhocSessionPersistent session, OneKey p return false; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeTH3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeTH3} + */ protected byte[] computeTH3(String hashAlgorithm, byte[] th2, byte[] plaintext2, byte[] credR) { int inputLength = th2.length + plaintext2.length + credR.length; int offset = 0; @@ -2640,9 +2756,12 @@ protected byte[] computeTH3(String hashAlgorithm, byte[] th2, byte[] plaintext2, } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computePRK4e3m} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computePRK4e3m} + */ protected byte[] computePRK4e3m(EdhocSessionPersistent session, byte[] prk3e2m, byte[] th3, OneKey peerLongTerm, - OneKey peerEphemeral) { + OneKey peerEphemeral) { byte[] prk4e3m = null; int authenticationMethod = session.getMethod(); @@ -2730,12 +2849,16 @@ protected byte[] computePRK4e3m(EdhocSessionPersistent session, byte[] prk3e2m, return prk4e3m; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeMAC3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeMAC3} + */ protected byte[] computeMAC3(EdhocSessionPersistent session, byte[] prk4e3m, byte[] th3, CBORObject idCredI, - byte[] credI, CBORObject[] ead3) { + byte[] credI, CBORObject[] ead3) { // Build the CBOR sequence for 'context': ( ID_CRED_I, TH_3, CRED_I, ?EAD_3 ) - // The actual 'context' is a CBOR byte string with value the serialization of the CBOR sequence + // The actual 'context' is a CBOR byte string with value the serialization of + // the CBOR sequence List objectList = new ArrayList<>(); objectList.add(idCredI); objectList.add(CBORObject.FromObject(th3)); @@ -2766,7 +2889,10 @@ protected byte[] computeMAC3(EdhocSessionPersistent session, byte[] prk4e3m, byt } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeSignatureOrMac3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeSignatureOrMac3} + */ protected byte[] computeSignatureOrMac3(EdhocSessionPersistent session, byte[] mac3, byte[] externalData) { // Used by Initiator byte[] signatureOrMac3 = null; @@ -2792,8 +2918,9 @@ protected byte[] computeSignatureOrMac3(EdhocSessionPersistent session, byte[] m return null; } - LOGGER.debug(EdhocUtil.byteArrayToString("External Data for signing MAC_3 to produce Signature_or_MAC_3", - externalData)); + LOGGER.debug( + EdhocUtil.byteArrayToString("External Data for signing MAC_3 to produce Signature_or_MAC_3", + externalData)); signatureOrMac3 = EdhocUtil.computeSignature(session.getIdCred(), externalData, mac3, identityKey); @@ -2807,8 +2934,11 @@ protected byte[] computeSignatureOrMac3(EdhocSessionPersistent session, byte[] m } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} - * and {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} + * and {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} + */ protected byte[] computeKeyOrIV3(String keyName, EdhocSessionPersistent session, byte[] th3, byte[] prk3e2m) { int selectedCipherSuite = session.getSelectedCipherSuite(); CBORObject context = CBORObject.FromObject(th3); @@ -2817,7 +2947,7 @@ protected byte[] computeKeyOrIV3(String keyName, EdhocSessionPersistent session, int length; int label; - switch(keyName) { + switch (keyName) { case "KEY" -> { name = "K_3"; length = EdhocSession.getKeyLengthEdhocAEAD(selectedCipherSuite); @@ -2845,9 +2975,12 @@ protected byte[] computeKeyOrIV3(String keyName, EdhocSessionPersistent session, } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeCiphertext3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeCiphertext3} + */ protected byte[] computeCiphertext3(int selectedCipherSuite, byte[] externalData, byte[] plaintext, byte[] k3ae, - byte[] iv3ae) { + byte[] iv3ae) { AlgorithmID alg = EdhocSession.getEdhocAEADAlg(selectedCipherSuite); // Prepare the empty content for the COSE protected header @@ -2861,7 +2994,10 @@ protected byte[] computeCiphertext3(int selectedCipherSuite, byte[] externalData } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeTH4} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeTH4} + */ protected byte[] computeTH4(String hashAlgorithm, byte[] th3, byte[] plaintext3, byte[] credI) { int inputLength = th3.length + plaintext3.length + credI.length; int offset = 0; @@ -2880,7 +3016,10 @@ protected byte[] computeTH4(String hashAlgorithm, byte[] th3, byte[] plaintext3, } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computePRKout} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computePRKout} + */ protected byte[] computePRKout(EdhocSessionPersistent session, byte[] th4, byte[] prk4e3m) { int selectedCipherSuite = session.getSelectedCipherSuite(); int length = EdhocSession.getEdhocHashAlgOutputSize(selectedCipherSuite); @@ -2894,7 +3033,10 @@ protected byte[] computePRKout(EdhocSessionPersistent session, byte[] th4, byte[ } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computePRKexporter} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computePRKexporter} + */ protected byte[] computePRKexporter(EdhocSessionPersistent session, byte[] prkOut) { int selectedCipherSuite = session.getSelectedCipherSuite(); int length = EdhocSession.getEdhocHashAlgOutputSize(selectedCipherSuite); @@ -2908,9 +3050,12 @@ protected byte[] computePRKexporter(EdhocSessionPersistent session, byte[] prkOu } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#decryptCiphertext3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#decryptCiphertext3} + */ protected byte[] decryptCiphertext3(int selectedCipherSuite, byte[] externalData, byte[] ciphertext, byte[] k3ae, - byte[] iv3ae) { + byte[] iv3ae) { AlgorithmID alg = EdhocSession.getEdhocAEADAlg(selectedCipherSuite); // Prepare the empty content for the COSE protected header @@ -2924,9 +3069,12 @@ protected byte[] decryptCiphertext3(int selectedCipherSuite, byte[] externalData } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#verifySignatureOrMac3} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#verifySignatureOrMac3} + */ protected boolean verifySignatureOrMac3(EdhocSessionPersistent session, OneKey peerLongTerm, CBORObject peerIdCred, - byte[] signatureOrMac3, byte[] externalData, byte[] mac3) { + byte[] signatureOrMac3, byte[] externalData, byte[] mac3) { // Used by Responder int authenticationMethod = session.getMethod(); @@ -2935,8 +3083,7 @@ protected boolean verifySignatureOrMac3(EdhocSessionPersistent session, OneKey p // The initiator does not use signatures as authentication method, // then Signature_or_MAC_3 has to be equal to MAC_3 return Arrays.equals(signatureOrMac3, mac3); - } - else if (authenticationMethod == Constants.EDHOC_AUTH_METHOD_0 + } else if (authenticationMethod == Constants.EDHOC_AUTH_METHOD_0 || authenticationMethod == Constants.EDHOC_AUTH_METHOD_1) { // The initiator uses signatures as authentication method, // then Signature_or_MAC_3 is a signature to verify @@ -2959,8 +3106,11 @@ else if (authenticationMethod == Constants.EDHOC_AUTH_METHOD_0 return false; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} - * and {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} + * and {@link org.eclipse.californium.edhoc.MessageProcessor#computeKey} + */ protected byte[] computeKeyOrIV4(String keyName, EdhocSessionPersistent session, byte[] th4, byte[] prk4e3m) { int selectedCipherSuite = session.getSelectedCipherSuite(); CBORObject context = CBORObject.FromObject(th4); @@ -2969,7 +3119,7 @@ protected byte[] computeKeyOrIV4(String keyName, EdhocSessionPersistent session, int length; int label; - switch(keyName) { + switch (keyName) { case "KEY" -> { name = "K_4"; length = EdhocSession.getKeyLengthEdhocAEAD(selectedCipherSuite); @@ -2997,9 +3147,12 @@ protected byte[] computeKeyOrIV4(String keyName, EdhocSessionPersistent session, } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#computeCiphertext4} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#computeCiphertext4} + */ protected byte[] computeCiphertext4(int selectedCipherSuite, byte[] externalData, byte[] plaintext, byte[] k4m, - byte[] iv4m) { + byte[] iv4m) { AlgorithmID alg = EdhocSession.getEdhocAEADAlg(selectedCipherSuite); // Prepare the empty content for the COSE protected header @@ -3013,9 +3166,12 @@ protected byte[] computeCiphertext4(int selectedCipherSuite, byte[] externalData } } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#decryptCiphertext4} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#decryptCiphertext4} + */ protected byte[] decryptCiphertext4(int selectedCipherSuite, byte[] externalData, byte[] ciphertext, - byte[] k4ae, byte[] iv4ae) { + byte[] k4ae, byte[] iv4ae) { AlgorithmID alg = EdhocSession.getEdhocAEADAlg(selectedCipherSuite); // Prepare the empty content for the COSE protected header @@ -3030,28 +3186,28 @@ protected byte[] decryptCiphertext4(int selectedCipherSuite, byte[] externalData } protected boolean hasProtocolVersionLeqV15() { - return switch(edhocMapperState.getProtocolVersion()) { + return switch (edhocMapperState.getProtocolVersion()) { case v14, v15 -> true; default -> false; }; } protected boolean hasProtocolVersionLeqV17() { - return hasProtocolVersionLeqV15() || switch(edhocMapperState.getProtocolVersion()) { + return hasProtocolVersionLeqV15() || switch (edhocMapperState.getProtocolVersion()) { case v16, v17 -> true; default -> false; }; } protected boolean hasProtocolVersionLeqV19() { - return hasProtocolVersionLeqV17() || switch(edhocMapperState.getProtocolVersion()) { + return hasProtocolVersionLeqV17() || switch (edhocMapperState.getProtocolVersion()) { case v18, v19 -> true; default -> false; }; } protected boolean hasProtocolVersionLeqV22() { - return hasProtocolVersionLeqV19() || switch(edhocMapperState.getProtocolVersion()) { + return hasProtocolVersionLeqV19() || switch (edhocMapperState.getProtocolVersion()) { case v20, v21, v22 -> true; default -> false; }; @@ -3075,7 +3231,8 @@ protected CBORObject[] preParseEADleqV17(CBORObject[] objectList, int baseIndex, for (int i = baseIndex; i < objectList.length; i++) { - // The first element of each pair is an ead_label, and must be a non-zero CBOR integer + // The first element of each pair is an ead_label, and must be a non-zero CBOR + // integer if ((eadIndex & 1) == 0) { if (objectList[i].getType() != CBORType.Integer || objectList[i].AsInt32() == 0) { LOGGER.error("Malformed or Invalid EAD label"); @@ -3094,7 +3251,8 @@ protected CBORObject[] preParseEADleqV17(CBORObject[] objectList, int baseIndex, continue; } - // The second element of each pair is an ead_value, and must be a CBOR byte string + // The second element of each pair is an ead_value, and must be a CBOR byte + // string if ((eadIndex & 1) == 1) { if (objectList[i].getType() != CBORType.ByteString) { LOGGER.error("Malformed or invalid EAD value"); @@ -3126,7 +3284,10 @@ protected CBORObject[] preParseEADleqV17(CBORObject[] objectList, int baseIndex, return eadArray; } - /** Adapted from {@link org.eclipse.californium.edhoc.MessageProcessor#preParseEAD} */ + /** + * Adapted from + * {@link org.eclipse.californium.edhoc.MessageProcessor#preParseEAD} + */ protected CBORObject[] preParseEAD(CBORObject[] objectList, int baseIndex, int msgNum, Set supportedEADs) { int length = objectList.length - baseIndex; CBORObject[] eadArray = new CBORObject[length]; @@ -3139,34 +3300,38 @@ protected CBORObject[] preParseEAD(CBORObject[] objectList, int baseIndex, int m // The actual goal of each step is to go through one EAD item // At each step, the element with index 'i' must be an ead_label - // For EAD items that are supported or non-critical, the corresponding ead_value (if present) is - // handled during the same step, so that the next step will consider the next EAD item, if any + // For EAD items that are supported or non-critical, the corresponding ead_value + // (if present) is + // handled during the same step, so that the next step will consider the next + // EAD item, if any for (int i = baseIndex; i < objectList.length; i++) { CBORObject currObject = objectList[i]; if (currObject.getType() != CBORType.Integer) { - // Each EAD item must start with a CBOR integer encoding the ead_label - LOGGER.error("Malformed or invalid EAD_" + msgNum); - return null; + // Each EAD item must start with a CBOR integer encoding the ead_label + LOGGER.error("Malformed or invalid EAD_" + msgNum); + return null; } - if (i+1 < objectList.length - && objectList[i+1].getType() != CBORType.Integer - && objectList[i+1].getType() != CBORType.ByteString) { + if (i + 1 < objectList.length + && objectList[i + 1].getType() != CBORType.Integer + && objectList[i + 1].getType() != CBORType.ByteString) { - // The immediately following item in the CBOR sequence (if any) must be a CBOR integer or a CBOR byte string - LOGGER.error("Malformed or invalid EAD_" + msgNum); - return null; + // The immediately following item in the CBOR sequence (if any) must be a CBOR + // integer or a CBOR byte string + LOGGER.error("Malformed or invalid EAD_" + msgNum); + return null; } int eadLabel = currObject.AsInt32(); if (eadLabel == Constants.EAD_LABEL_PADDING) { - // This is the padding EAD item and it is not passed to the application for further processing + // This is the padding EAD item and it is not passed to the application for + // further processing LOGGER.debug("EAD Label: {}", eadLabel); - if (i+1 < objectList.length && objectList[i+1].getType() == CBORType.ByteString) { - LOGGER.debug(EdhocUtil.byteArrayToString("EAD Value", objectList[i+1].GetByteString())); + if (i + 1 < objectList.length && objectList[i + 1].getType() == CBORType.ByteString) { + LOGGER.debug(EdhocUtil.byteArrayToString("EAD Value", objectList[i + 1].GetByteString())); // Skip the corresponding ead_value, if present i++; } @@ -3183,7 +3348,7 @@ protected CBORObject[] preParseEAD(CBORObject[] objectList, int baseIndex, int m // The EAD item is non-critical and not supported, // it is not passed to the application for further processing - if (i+1 < objectList.length && objectList[i+1].getType() == CBORType.ByteString) { + if (i + 1 < objectList.length && objectList[i + 1].getType() == CBORType.ByteString) { // This will result in moving to the next EAD item, if any i++; } @@ -3200,19 +3365,20 @@ protected CBORObject[] preParseEAD(CBORObject[] objectList, int baseIndex, int m LOGGER.debug("EAD Label: {}", eadLabel); // Make a hard copy of the ead_value, if present - if (i+1 < objectList.length && objectList[i+1].getType() == CBORType.ByteString) { - byte[] serializedObjectValue = objectList[i+1].EncodeToBytes(); + if (i + 1 < objectList.length && objectList[i + 1].getType() == CBORType.ByteString) { + byte[] serializedObjectValue = objectList[i + 1].EncodeToBytes(); CBORObject elementValue = CBORObject.DecodeFromBytes(serializedObjectValue); eadArray[eadIndex] = elementValue; eadIndex++; - LOGGER.debug(EdhocUtil.byteArrayToString("EAD Value", objectList[i+1].GetByteString())); + LOGGER.debug(EdhocUtil.byteArrayToString("EAD Value", objectList[i + 1].GetByteString())); // This will result in moving to the next EAD item, if any i++; } } - // Prepare the subset of the EAD items to provide to the application for further processing + // Prepare the subset of the EAD items to provide to the application for further + // processing CBORObject[] ret = new CBORObject[eadIndex]; for (int i = 0; i < eadIndex; i++) { ret[i] = eadArray[i]; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java index 81e23031..c9cd9a6e 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java @@ -27,12 +27,15 @@ /** Adapted from test files EdhocClient / EdhocServer from edhoc repo */ public abstract class EdhocMapperState { - // The authentication method to include in EDHOC message_1 (relevant only when Initiator) + // The authentication method to include in EDHOC message_1 (relevant only when + // Initiator) protected int authenticationMethod; // Authentication credentials of this peer - // At the top level, authentication credentials are sorted by key usage of the authentication keys. - // The outer map has label SIGNATURE_KEY or ECDH_KEY for distinguishing the two key usages. + // At the top level, authentication credentials are sorted by key usage of the + // authentication keys. + // The outer map has label SIGNATURE_KEY or ECDH_KEY for distinguishing the two + // key usages. // The asymmetric key pairs of this peer (one per supported curve) protected HashMap> keyPairs = new HashMap<>(); @@ -42,7 +45,8 @@ public abstract class EdhocMapperState { // The authentication credentials of this peer (one per supported curve) protected HashMap> creds = new HashMap<>(); - // Each element is the ID_CRED_X used for an authentication credential associated to this peer + // Each element is the ID_CRED_X used for an authentication credential + // associated to this peer protected Set ownIdCreds = new HashSet<>(); // Authentication credentials of the other peers @@ -55,11 +59,13 @@ public abstract class EdhocMapperState { protected HashMap peerCredentials = new HashMap<>(); // Existing EDHOC Sessions, including completed ones - // The map label is C_X, i.e. the connection identifier offered to the other peer, as a CBOR integer or byte string + // The map label is C_X, i.e. the connection identifier offered to the other + // peer, as a CBOR integer or byte string protected HashMap edhocSessionsPersistent = new HashMap<>(); // Each element is a used Connection Identifier offered to the other peers. - // Connection Identifiers are stored as CBOR integers (if numeric) or as CBOR byte strings (if binary) + // Connection Identifiers are stored as CBOR integers (if numeric) or as CBOR + // byte strings (if binary) protected Set usedConnectionIds = new HashSet<>(); // List of supported cipher suites, in decreasing order of preference. @@ -68,7 +74,8 @@ public abstract class EdhocMapperState { // Set of supported EAD items protected Set supportedEADs = new HashSet<>(); - // The collection of application profiles - The lookup key is the full URI of the EDHOC resource + // The collection of application profiles - The lookup key is the full URI of + // the EDHOC resource protected HashMap appProfiles = new HashMap<>(); // The database of OSCORE Security Contexts @@ -91,8 +98,8 @@ public abstract class EdhocMapperState { protected CleanupTasks cleanupTasks; - @SuppressWarnings("this-escape") - public EdhocMapperState(EdhocMapperConfig edhocMapperConfig, String edhocSessionUri, String oscoreUri, CleanupTasks cleanupTasks) { + public EdhocMapperState(EdhocMapperConfig edhocMapperConfig, String edhocSessionUri, String oscoreUri, + CleanupTasks cleanupTasks) { this.edhocMapperConfig = edhocMapperConfig; this.cleanupTasks = cleanupTasks; @@ -133,15 +140,14 @@ public EdhocMapperState(EdhocMapperConfig edhocMapperConfig, String edhocSession edhocEndpointInfoPersistent = new EdhocEndpointInfoPersistent( idCreds, creds, keyPairs, peerPublicKeys, peerCredentials, edhocSessionsPersistent, usedConnectionIds, supportedCipherSuites, supportedEADs, null, trustModel, db, oscoreUri, - OSCORE_REPLAY_WINDOW, MAX_UNFRAGMENTED_SIZE, appProfiles - ); + OSCORE_REPLAY_WINDOW, MAX_UNFRAGMENTED_SIZE, appProfiles); // Set up the authentication credentials Authenticator authenticator; - authenticator = manyFilesAuthIsUsed ? - new ManyFilesAuthenticator(authenticationConfig, edhocEndpointInfoPersistent, ownIdCreds) : - new TestVectorAuthenticator(authenticationConfig, edhocEndpointInfoPersistent, ownIdCreds, + authenticator = manyFilesAuthIsUsed + ? new ManyFilesAuthenticator(authenticationConfig, edhocEndpointInfoPersistent, ownIdCreds) + : new TestVectorAuthenticator(authenticationConfig, edhocEndpointInfoPersistent, ownIdCreds, edhocMapperConfig.isInitiator()); authenticator.setupOwnAuthenticationCredentials(); @@ -158,7 +164,8 @@ public EdhocMapperState(EdhocMapperConfig edhocMapperConfig, String edhocSession boolean isInitiator = edhocMapperConfig.isInitiator(); - // logically isClientInitiated when (isInitiator && isCoapClient()) || (!isInitiator && !isCoapClient()) + // logically isClientInitiated when (isInitiator && isCoapClient()) || + // (!isInitiator && !isCoapClient()) // which simplifies to isClientInitiated when isInitiator == isCoapClient() boolean isClientInitiated = isInitiator == isCoapClient(); @@ -171,7 +178,8 @@ db, new CoapExchanger(), edhocMapperConfig.useSessionReset(), edhocSessionsPersistent.put(CBORObject.FromObject(connectionId), edhocSessionPersistent); if (edhocMapperConfig.getForceOscoreRecipientId() != null) { - // forceRecipientId should point to the session, in order for the session to be accessible from + // forceRecipientId should point to the session, in order for the session to be + // accessible from // the OSCORE context's recipient id as well edhocSessionsPersistent.put(CBORObject.FromObject(edhocMapperConfig.getForceOscoreRecipientId()), edhocSessionPersistent); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index 614595fb..0dd2d9e8 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -17,7 +17,6 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; -import com.upokecenter.cbor.CBORObject; import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; @@ -94,6 +93,7 @@ public EdhocOutputRA receiveOutput(EdhocExecutionContextRA context) { protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { String messageType = edhocMapperState.isCoapClient() ? "response" : "request"; + DataType T_CI = new DataType("C_I", Integer.class); if (edhocMapperConnector.receivedMsg3WithOscoreApp()) { // received Message3_OSCORE_APP, from which application data propagated and @@ -102,9 +102,14 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP.name(), - new DataType[] {}); - return edhocOutputRA(base); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP.name(), T_CI); + + LOGGER.info("Reading as EDHOC Message 3 Oscore App, DataValue: " + parameter); + DataValue value = new DataValue(T_CI, parameter); + + return edhocOutputRA(base, value); } if (edhocMapperConnector.receivedOscoreAppMessage()) { @@ -145,12 +150,10 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] case EDHOC_MESSAGE_1 -> { ok = messageProcessorPersistent.readMessage1(responsePayload); - Integer parameter = CBORObject - .DecodeObjectFromBytes( - edhocMapperState.getEdhocSessionPersistent().getConnectionId(), - Integer.class); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_1.name(), T_CI); - + LOGGER.info("Reading as Message 1, DataValue: " + parameter); DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } @@ -158,12 +161,10 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] case EDHOC_MESSAGE_2 -> { ok = messageProcessorPersistent.readMessage2(responsePayload); - Integer parameter = CBORObject - .DecodeObjectFromBytes( - edhocMapperState.getEdhocSessionPersistent().getConnectionId(), - Integer.class); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); - + LOGGER.info("Reading as Message 2, DataValue: " + parameter); DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } @@ -174,23 +175,19 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { - Integer parameter = CBORObject - .DecodeObjectFromBytes( - edhocMapperState.getEdhocSessionPersistent().getConnectionId(), - Integer.class); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name(), T_CI); - + LOGGER.info("Reading as Message 3, DataValue: " + parameter); DataValue value = new DataValue(T_CI, parameter); return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); - Integer parameter = CBORObject - .DecodeObjectFromBytes( - edhocMapperState.getEdhocSessionPersistent().getConnectionId(), - Integer.class); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name(), T_CI); - + LOGGER.info("Reading as Message 4, DataValue: " + parameter); DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } @@ -200,35 +197,29 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] LOGGER.info("Reading as EDHOC Message 2 or 3 or 4"); ok = messageProcessorPersistent.readMessage2(responsePayload); if (ok) { - Integer parameter = CBORObject - .DecodeObjectFromBytes( - edhocMapperState.getEdhocSessionPersistent().getConnectionId(), - Integer.class); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); - + LOGGER.info("Reading as Message 2, DataValue: " + parameter); DataValue value = new DataValue(T_CI, parameter); return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { - Integer parameter = CBORObject - .DecodeObjectFromBytes( - edhocMapperState.getEdhocSessionPersistent().getConnectionId(), - Integer.class); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name(), T_CI); - + LOGGER.info("Reading as Message 3, DataValue: " + parameter); DataValue value = new DataValue(T_CI, parameter); return edhocOutputRA(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); - Integer parameter = CBORObject - .DecodeObjectFromBytes( - edhocMapperState.getEdhocSessionPersistent().getConnectionId(), - Integer.class); + Integer parameter = EdhocUtil + .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name(), T_CI); - + LOGGER.info("Reading as Message 4, DataValue: " + parameter); DataValue value = new DataValue(T_CI, parameter); return edhocOutputAfterCheck(ok, base, value); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java index 98640ad4..6a26b075 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java @@ -67,9 +67,6 @@ public DataType[] getDataTypes() { * TODO This is bad in multiple ways: * - We need to have access to the datatype, which means defining it multiple * times. For teachers, EdhocInputRA and the EdhocOutputMapperRA. - * - It is uncertain if we can cast back to CBORObject, since the learner - * selects a random new value, which means it is unreasonable to assume it can - * convert to any type, since it only has the integer equality theories. * - If the C_I is a bytestring it is unclear if use of a mapper to convert from * a randomly selected integer in the learner to a corresponding bytestring is * possible. @@ -77,15 +74,18 @@ public DataType[] getDataTypes() { public void updateConnectionId(EdhocSessionPersistent session) { LOGGER.info("Running updateConnectionId method"); - LOGGER.info("Current ConnectionId: " + EdhocUtil.byteArrayToString(session.getConnectionId())); + LOGGER.info("Current ConnectionId: " + EdhocUtil.bytesToInt(session.getConnectionId())); for (DataValue dv : this.getParameterValues()) { LOGGER.info("Datavalue: " + dv.toString()); if (dv.getType().equals(T_CI)) { CBORObject value = CBORObject.FromObject(dv.getId()); + LOGGER.info("CBORObject version of DataValue id: " + value.toString()); session.setConnectionId(value.EncodeToBytes()); + LOGGER.info( + "Current ConnectionId after set: " + EdhocUtil.bytesToInt(session.getConnectionId())); } } } From 5b1d10c274ef583caf6793582cce33a6e9389b81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 3 Apr 2024 12:12:19 +0200 Subject: [PATCH 046/169] Update the alphabetTransformer to transform into RALib input/output symbols Co-authored-by: Linus Olofsson --- .../edhocfuzzer/AlphabetTransformerRA.java | 78 ++----------------- .../edhocfuzzer/EdhocInputConverter.java | 49 ------------ 2 files changed, 8 insertions(+), 119 deletions(-) delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java index 76bb41a8..db543256 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java @@ -1,60 +1,36 @@ package com.github.protocolfuzzing.edhocfuzzer; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.*; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderTransformer; import de.learnlib.ralib.data.DataType; -import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.InputSymbol; import de.learnlib.ralib.words.OutputSymbol; -import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; import java.util.Arrays; -public class AlphabetTransformerRA extends AlphabetBuilderTransformer { +public class AlphabetTransformerRA extends AlphabetBuilderTransformer { public AlphabetTransformerRA(AlphabetBuilderStandard alphabetBuilderStandard) { super(alphabetBuilderStandard); } @Override - public SymbolXml fromTransformedInput(PSymbolInstance symbol) { - ParameterizedSymbol baseSymbol = symbol.getBaseSymbol(); - - DataTypeXml[] types = Arrays.stream(baseSymbol.getPtypes()) + public SymbolXml fromTransformedInput(ParameterizedSymbol symbol) { + DataTypeXml[] types = Arrays.stream(symbol.getPtypes()) .map(type -> new DataTypeXml(type.getName(), type.getBase())).toArray(DataTypeXml[]::new); - if (symbol.getBaseSymbol() instanceof InputSymbol) { - return new SymbolXml(baseSymbol.getName(), SymbolXml.Type.INPUT, types); - } else if (symbol.getBaseSymbol() instanceof OutputSymbol) { - return new SymbolXml(baseSymbol.getName(), SymbolXml.Type.OUTPUT, types); + if (symbol instanceof InputSymbol) { + return new SymbolXml(symbol.getName(), SymbolXml.Type.INPUT, types); + } else if (symbol instanceof OutputSymbol) { + return new SymbolXml(symbol.getName(), SymbolXml.Type.OUTPUT, types); } else { throw new RuntimeException("Invalid type for ParameterizedSymbol, not InputSymbol or OutputSymbol"); } } @Override - public PSymbolInstance toTransformedInput(SymbolXml symbol) { - if (symbol.getName() == null) { - throw new RuntimeException("Nameless symbol found, possibly due to malformed alphabet file"); - } - - ParameterizedSymbol baseSymbol = createBaseSymbol(symbol); - switch (symbol.getSymbolType()) { - case INPUT: - return createInputSymbol(baseSymbol); - - case OUTPUT: - return createOutputSymbol(baseSymbol); - - default: - throw new RuntimeException("Invalid SymbolType for InputSymbolXml, not INPUT or OUTPUT"); - } - - } - - private static ParameterizedSymbol createBaseSymbol(SymbolXml symbol) { + public ParameterizedSymbol toTransformedInput(SymbolXml symbol) { DataType[] types = Arrays.stream(symbol.getDataTypes()) .map(type -> new DataType(type.getName(), type.getBase())) .toArray(DataType[]::new); @@ -70,42 +46,4 @@ private static ParameterizedSymbol createBaseSymbol(SymbolXml symbol) { throw new RuntimeException("Invalid SymbolType for InputSymbolXml, not INPUT or OUTPUT"); } } - - private static EdhocOutputRA createOutputSymbol(ParameterizedSymbol baseSymbol) { - return new EdhocOutputRA(baseSymbol, new DataValue[] {}); - } - - private static EdhocInputRA createInputSymbol(ParameterizedSymbol baseSymbol) { - switch (MessageInputType.valueOf(baseSymbol.getName())) { - case EDHOC_MESSAGE_1: - return new EdhocMessage1InputRA(baseSymbol, new DataValue[] {}); - - case EDHOC_MESSAGE_2: - return new EdhocMessage2InputRA(baseSymbol, new DataValue[] {}); - - case EDHOC_MESSAGE_3: - return new EdhocMessage3InputRA(baseSymbol, new DataValue[] {}); - - case EDHOC_MESSAGE_3_OSCORE_APP: - return new EdhocMessage3OscoreAppInputRA(baseSymbol, new DataValue[] {}); - - case EDHOC_MESSAGE_4: - return new EdhocMessage4InputRA(baseSymbol, new DataValue[] {}); - - case EDHOC_ERROR_MESSAGE: - return new EdhocErrorMessageInputRA(baseSymbol, new DataValue[] {}); - - case OSCORE_APP_MESSAGE: - return new OscoreAppMessageInputRA(baseSymbol, new DataValue[] {}); - - case COAP_APP_MESSAGE: - return new CoapAppMessageInputRA(baseSymbol, new DataValue[] {}); - - case COAP_EMPTY_MESSAGE: - return new CoapEmptyMessageInputRA(baseSymbol, new DataValue[] {}); - - default: - throw new RuntimeException("Invalid input type, no such input type exists"); - } - } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java deleted file mode 100644 index bdb545cd..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocInputConverter.java +++ /dev/null @@ -1,49 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; -import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerComposerRA.PSymbolInstanceConverter; -import de.learnlib.ralib.words.PSymbolInstance; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class EdhocInputConverter implements PSymbolInstanceConverter { - - @Override - public EdhocInputRA convert(PSymbolInstance input) { - String name = input.getBaseSymbol().getName(); - ParameterizedSymbol base = input.getBaseSymbol(); - - switch (MessageInputType.valueOf(name)) { - case EDHOC_MESSAGE_1: - return new EdhocMessage1InputRA(base, input.getParameterValues()); - - case EDHOC_MESSAGE_2: - return new EdhocMessage2InputRA(base, input.getParameterValues()); - - case EDHOC_MESSAGE_3: - return new EdhocMessage3InputRA(base, input.getParameterValues()); - - case EDHOC_MESSAGE_3_OSCORE_APP: - return new EdhocMessage3OscoreAppInputRA(base, input.getParameterValues()); - - case EDHOC_MESSAGE_4: - return new EdhocMessage4InputRA(base, input.getParameterValues()); - - case EDHOC_ERROR_MESSAGE: - return new EdhocErrorMessageInputRA(base, input.getParameterValues()); - - case OSCORE_APP_MESSAGE: - return new OscoreAppMessageInputRA(base, input.getParameterValues()); - - case COAP_APP_MESSAGE: - return new CoapAppMessageInputRA(base, input.getParameterValues()); - - case COAP_EMPTY_MESSAGE: - return new CoapEmptyMessageInputRA(base, input.getParameterValues()); - - default: - throw new RuntimeException("The name '" + name + "' of the " + PSymbolInstance.class.getName() - + "is not a member of the enum " + MessageInputType.class.getName()); - } - } - -} From 1e209fbbc9ed278c27146617f2edf3798c4acf88 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 3 Apr 2024 12:14:02 +0200 Subject: [PATCH 047/169] Migrate mappers and SUL to use PSymbolInstance Co-authored-by: Linus Olofsson --- .../edhocfuzzer/MultiBuilderRA.java | 28 +-- .../sul/core/EdhocSulBuilderRA.java | 9 +- .../components/sul/core/EdhocSulRA.java | 33 ++-- .../context/EdhocExecutionContextRA.java | 9 +- .../mapper/mappers/EdhocInputMapperRA.java | 173 +++++++++++++++++- .../mapper/mappers/EdhocMapperComposerRA.java | 7 +- .../mapper/mappers/EdhocOutputMapperRA.java | 38 ++-- .../symbols/outputs/EdhocOutputBuilderRA.java | 5 +- .../symbols/outputs/EdhocOutputCheckerRA.java | 17 +- 9 files changed, 237 insertions(+), 82 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 6c3c371d..f6166a08 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -6,9 +6,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulServerConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.SymbolXml; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.xml.AlphabetSerializerXml; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; @@ -28,24 +26,24 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerServerConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.TestRunner; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.TestRunnerBuilder; -import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.TestRunnerStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.config.TestRunnerConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.core.config.TestRunnerEnabler; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbe; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbeBuilder; -import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.TimingProbeStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.theory.Theory; import de.learnlib.ralib.tools.theories.IntegerEqualityTheory; +import de.learnlib.ralib.words.PSymbolInstance; +import de.learnlib.ralib.words.ParameterizedSymbol; import java.util.LinkedHashMap; import java.util.Map; public class MultiBuilderRA implements StateFuzzerConfigBuilder, - StateFuzzerBuilder>, + StateFuzzerBuilder>, TestRunnerBuilder, TimingProbeBuilder { @@ -55,8 +53,8 @@ public class MultiBuilderRA implements protected AlphabetTransformerRA alphabetTransformer = new AlphabetTransformerRA(alphabetBuilder); - protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); - protected SulWrapper sulWrapper = new SulWrapperStandard<>(); + protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); + protected SulWrapper sulWrapper = new SulWrapperStandard<>(); @Override public StateFuzzerClientConfig buildClientConfig() { @@ -77,24 +75,28 @@ public StateFuzzerServerConfig buildServerConfig() { } @Override - public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { + public StateFuzzer> build( + StateFuzzerEnabler stateFuzzerEnabler) { DataType T_CI = new DataType("C_I", Integer.class); @SuppressWarnings("rawtypes") final Map teachers = new LinkedHashMap<>(); teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); - final EdhocInputConverter converter = new EdhocInputConverter(); return new StateFuzzerRA<>( - new StateFuzzerComposerRA(stateFuzzerEnabler, - alphabetTransformer, sulBuilder, sulWrapper, teachers, converter).initialize()); + new StateFuzzerComposerRA(stateFuzzerEnabler, + alphabetTransformer, sulBuilder, sulWrapper, teachers).initialize()); } @Override public TestRunner build(TestRunnerEnabler testRunnerEnabler) { - return new TestRunnerStandard<>(testRunnerEnabler, alphabetTransformer, sulBuilder, sulWrapper).initialize(); + // return new TestRunnerStandard<>(testRunnerEnabler, alphabetTransformer, + // sulBuilder, sulWrapper).initialize(); + return null; // FIXME: If this is used we have problems. } @Override public TimingProbe build(TimingProbeEnabler timingProbeEnabler) { - return new TimingProbeStandard<>(timingProbeEnabler, alphabetTransformer, sulBuilder, sulWrapper).initialize(); + // return new TimingProbeStandard<>(timingProbeEnabler, alphabetTransformer, + // sulBuilder, sulWrapper).initialize(); + return null; // FIXME: If this is used we have problems. } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java index 4ed07f87..502496c9 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java @@ -1,17 +1,16 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; +import de.learnlib.ralib.words.PSymbolInstance; -public class EdhocSulBuilderRA implements SulBuilder{ +public class EdhocSulBuilderRA implements SulBuilder { @Override - public AbstractSul - build(SulConfig sulConfig, CleanupTasks cleanupTasks) { + public AbstractSul build(SulConfig sulConfig, + CleanupTasks cleanupTasks) { return new EdhocSulRA(sulConfig, cleanupTasks).initialize(); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java index 36590f53..f6d744f5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java @@ -13,16 +13,15 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocInputMapperRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocMapperComposerRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocOutputMapperRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; +import de.learnlib.ralib.words.PSymbolInstance; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.eclipse.californium.core.config.CoapConfig; @@ -30,7 +29,7 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSulRA implements AbstractSul { +public class EdhocSulRA implements AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); protected SulConfig sulConfig; @@ -84,8 +83,7 @@ public EdhocSulRA initialize() { this.edhocMapperComposer = new EdhocMapperComposerRA( new EdhocInputMapperRA(edhocMapperConfig, new EdhocOutputCheckerRA(), edhocMapperConnector), - new EdhocOutputMapperRA(edhocMapperConfig, new EdhocOutputBuilderRA(), new EdhocOutputCheckerRA(), - edhocMapperConnector)); + new EdhocOutputMapperRA(edhocMapperConfig, new EdhocOutputBuilderRA(), edhocMapperConnector)); return this; } @@ -166,7 +164,7 @@ public void post() { } @Override - public EdhocOutputRA step(EdhocInputRA abstractInput) { + public PSymbolInstance step(PSymbolInstance abstractInput) { // In case of server mapper, wait for initial message from client serverWaitForInitialMessage(); @@ -178,7 +176,7 @@ public EdhocOutputRA step(EdhocInputRA abstractInput) { return edhocMapperComposer.getOutputMapper().disabled(); } - EdhocOutputRA abstractOutput = executeInput(abstractInput); + PSymbolInstance abstractOutput = executeInput(abstractInput); if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { @@ -191,20 +189,25 @@ public EdhocOutputRA step(EdhocInputRA abstractInput) { return abstractOutput; } - protected EdhocOutputRA executeInput(EdhocInputRA abstractInput) { + protected PSymbolInstance executeInput(PSymbolInstance abstractInput) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse - if (abstractInput.getExtendedWait() != null) { - edhocMapperConnector.setTimeout(originalTimeout + abstractInput.getExtendedWait()); + // TODO: Find a non-stupid solution. We could add a datatype ExtendedWait + // with the sole purpose to hold the value, but that is the definition of an + // ugly hack. + EdhocInputMapperRA inputMapper = (EdhocInputMapperRA) edhocMapperComposer.getInputMapper(); + if (inputMapper.getTimeoutForSymbol(abstractInput) != 0L) { + edhocMapperConnector.setTimeout(originalTimeout + inputMapper.getTimeoutForSymbol(abstractInput)); timeoutChanged = true; } else if (sulConfig.getInputResponseTimeout() != null && - sulConfig.getInputResponseTimeout().containsKey(abstractInput.getName())) { - edhocMapperConnector.setTimeout(sulConfig.getInputResponseTimeout().get(abstractInput.getName())); + sulConfig.getInputResponseTimeout().containsKey(abstractInput.getBaseSymbol().getName())) { + edhocMapperConnector + .setTimeout(sulConfig.getInputResponseTimeout().get(abstractInput.getBaseSymbol().getName())); timeoutChanged = true; } - EdhocOutputRA abstractOutput = edhocMapperComposer.execute(abstractInput, edhocExecutionContext); + PSymbolInstance abstractOutput = edhocMapperComposer.execute(abstractInput, edhocExecutionContext); // reset timeout if (timeoutChanged) { @@ -227,12 +230,12 @@ protected void serverWaitForInitialMessage() { EdhocOutputCheckerRA edhocOutputChecker = edhocMapperComposer.getOutputChecker(); serverMapperConnector.waitForClientMessage(); - EdhocOutputRA abstractOutput = edhocMapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); + PSymbolInstance abstractOutput = edhocMapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); boolean isExpectedMessage = edhocOutputChecker.isMessage(abstractOutput, expectedMessageType); if (!isExpectedMessage) { throw new RuntimeException("After initial wait, instead of " + expectedMessageType + ", received " + - abstractOutput.getName()); + abstractOutput.getBaseSymbol().getName()); } LOGGER.debug("Received {} from client", expectedMessageType); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java index 19ea6352..2adc14c6 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocExecutionContextRA.java @@ -1,19 +1,18 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.context.ExecutionContextStepped; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.context.StepContext; +import de.learnlib.ralib.words.PSymbolInstance; -public class EdhocExecutionContextRA -extends ExecutionContextStepped> { +public class EdhocExecutionContextRA extends + ExecutionContextStepped> { public EdhocExecutionContextRA(EdhocMapperState state) { super(state); } @Override - protected StepContext buildStepContext() { + protected StepContext buildStepContext() { return new StepContext<>(stepContexts.size()); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index 9292e97c..12930eb1 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -1,34 +1,191 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.CoapAppMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.CoapEmptyMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.EdhocErrorMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.OscoreAppMessage; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage1; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3OscoreApp; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage2; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage4; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputType; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapperRA; +import com.upokecenter.cbor.CBORObject; +import de.learnlib.ralib.data.DataType; +import de.learnlib.ralib.data.DataValue; +import de.learnlib.ralib.words.InputSymbol; +import de.learnlib.ralib.words.PSymbolInstance; +import de.learnlib.ralib.words.ParameterizedSymbol; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import org.eclipse.californium.core.coap.MediaTypeRegistry; -public class EdhocInputMapperRA extends InputMapper { +import java.util.EnumMap; + +public class EdhocInputMapperRA extends InputMapperRA { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputCheckerRA outputChecker, EdhocMapperConnector edhocMapperConnector) { + private static Logger LOGGER = LogManager.getLogger(); + protected DataType T_CI = new DataType("C_I", Integer.class); + + protected EnumMap timeoutMap = new EnumMap(MessageInputType.class); + + public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputCheckerRA outputChecker, + EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } @Override - protected void sendMessage(EdhocProtocolMessage message, EdhocExecutionContextRA context) { + public void sendMessage(EdhocProtocolMessage message, EdhocExecutionContextRA context) { if (message == null) { throw new RuntimeException("Null message provided to EdhocInputMapper in sendMessage"); } // enable or disable content format EdhocMapperConfig edhocMapperConfig = (EdhocMapperConfig) mapperConfig; - int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat() : MediaTypeRegistry.UNDEFINED; + int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat() + : MediaTypeRegistry.UNDEFINED; + + edhocMapperConnector.send(message.getPayload(), message.getPayloadType(), message.getMessageCode(), + contentFormat); + } + + @Override + public void preSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context) { + String symbolName = input.getBaseSymbol().getName(); + EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + + switch (MessageInputType.valueOf(symbolName)) { + case EDHOC_MESSAGE_1: + if (session.isInitiator()) { + // Initiator by sending message 1 starts a new key exchange session + // so previous session state must be cleaned unless reset is disabled + session.resetIfEnabled(); + } + updateConnectionId(session, input); + break; + + case EDHOC_MESSAGE_2: + case EDHOC_MESSAGE_3: + case EDHOC_MESSAGE_4: + case OSCORE_APP_MESSAGE: + updateConnectionId(session, input); + break; + + case EDHOC_MESSAGE_3_OSCORE_APP: + updateConnectionId(session, input); + // construct Message3 in order to store it in session 'message3' field, + // derive new oscore context and make Message3 available to oscore layer + new MessageProcessorPersistent(context.getState()).writeMessage3(); + break; + + case COAP_APP_MESSAGE: + case COAP_EMPTY_MESSAGE: + case EDHOC_ERROR_MESSAGE: + break; + } + } + + @Override + public EdhocProtocolMessage generateProtocolMessage(PSymbolInstance input, EdhocExecutionContextRA context) { + ParameterizedSymbol baseSymbol = input.getBaseSymbol(); + String symbolName = baseSymbol.getName(); + if (baseSymbol instanceof InputSymbol) { + // We can construct this here since the switch should always dispatch to only + // one instance. + MessageProcessorPersistent messageProcessor = new MessageProcessorPersistent(context.getState()); + switch (MessageInputType.valueOf(symbolName)) { + case EDHOC_MESSAGE_1: + return new EdhocMessage1(messageProcessor); + + case EDHOC_MESSAGE_2: + return new EdhocMessage2(messageProcessor); + + case EDHOC_MESSAGE_3: + return new EdhocMessage3(messageProcessor); + + case EDHOC_MESSAGE_3_OSCORE_APP: + return new EdhocMessage3OscoreApp(messageProcessor); + + case EDHOC_MESSAGE_4: + return new EdhocMessage4(messageProcessor); + + case OSCORE_APP_MESSAGE: + return new OscoreAppMessage(messageProcessor); + + case EDHOC_ERROR_MESSAGE: + return new EdhocErrorMessage(messageProcessor); + + case COAP_APP_MESSAGE: + return new CoapAppMessage(messageProcessor); + + case COAP_EMPTY_MESSAGE: + return new CoapEmptyMessage(messageProcessor); + } + } + + throw new RuntimeException( + "Input mapper can only map input symbols: " + baseSymbol + " is not an InputSymbol."); + + } + + @Override + public void postReceiveUpdate(PSymbolInstance input, PSymbolInstance output, + OutputChecker outputChecker, EdhocExecutionContextRA context) { + } + + @Override + public void postSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context) { + } + + /* + * TODO This is bad in multiple ways: + * - We need to have access to the datatype, which means defining it multiple + * times. For teachers, EdhocInputRA and the EdhocOutputMapperRA. + * - If the C_I is a bytestring it is unclear if use of a mapper to convert from + * a randomly selected integer in the learner to a corresponding bytestring is + * possible. + */ + public void updateConnectionId(EdhocSessionPersistent session, PSymbolInstance input) { + + LOGGER.info("Running updateConnectionId method"); + LOGGER.info("Current ConnectionId: " + EdhocUtil.bytesToInt(session.getConnectionId())); + + for (DataValue dv : input.getParameterValues()) { + + LOGGER.info("Datavalue: " + dv.toString()); + if (dv.getType().equals(T_CI)) { + CBORObject value = CBORObject.FromObject(dv.getId()); + LOGGER.info("CBORObject version of DataValue id: " + value.toString()); + + // session.setConnectionId(value.EncodeToBytes()); + LOGGER.info("ConnectionId after set: " + + EdhocUtil.bytesToInt(session.getConnectionId())); + } + } + } + + public long getTimeoutForSymbol(PSymbolInstance input) { + String baseSymbolName = input.getBaseSymbol().getName(); + MessageInputType key = MessageInputType.valueOf(baseSymbolName); + return timeoutMap.getOrDefault(key, 0L); + } - edhocMapperConnector.send(message.getPayload(), message.getPayloadType(), message.getMessageCode(), contentFormat); + public void setTimeoutForSymbol(PSymbolInstance input, long timeout) { + String baseSymbolName = input.getBaseSymbol().getName(); + MessageInputType key = MessageInputType.valueOf(baseSymbolName); + timeoutMap.put(key, timeout); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java index dbead408..77c73b0d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java @@ -3,14 +3,13 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInputRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposerRA; +import de.learnlib.ralib.words.PSymbolInstance; public class EdhocMapperComposerRA extends - MapperComposer { + MapperComposerRA { public EdhocMapperComposerRA(EdhocInputMapperRA edhocInputMapper, EdhocOutputMapperRA edhocOutputMapper) { super(edhocInputMapper, edhocOutputMapper); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index 0dd2d9e8..f08670ab 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -12,34 +12,33 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapperRA; import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; -import de.learnlib.ralib.words.ParameterizedSymbol; +import de.learnlib.ralib.words.PSymbolInstance; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.nio.charset.StandardCharsets; import java.util.List; -public class EdhocOutputMapperRA extends OutputMapper { +public class EdhocOutputMapperRA + extends OutputMapperRA { private static final Logger LOGGER = LogManager.getLogger(); EdhocMapperConnector edhocMapperConnector; public EdhocOutputMapperRA(MapperConfig mapperConfig, EdhocOutputBuilderRA edhocOutputBuilder, - EdhocOutputCheckerRA edhocOutputChecker, EdhocMapperConnector edhocMapperConnector) { - super(mapperConfig, edhocOutputBuilder, edhocOutputChecker); + EdhocMapperConnector edhocMapperConnector) { + super(mapperConfig, edhocOutputBuilder); this.edhocMapperConnector = edhocMapperConnector; } @Override - public EdhocOutputRA receiveOutput(EdhocExecutionContextRA context) { + public PSymbolInstance receiveOutput(EdhocExecutionContextRA context) { EdhocMapperState edhocMapperState = context.getState(); byte[] responsePayload; @@ -64,7 +63,7 @@ public EdhocOutputRA receiveOutput(EdhocExecutionContextRA context) { return edhocOutputRA(base); } - EdhocOutputRA abstractOutput; + PSymbolInstance abstractOutput; // Check for application related message // including message 3 combined with oscore @@ -91,7 +90,7 @@ public EdhocOutputRA receiveOutput(EdhocExecutionContextRA context) { return outputBuilder.buildUnknown(); } - protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { + protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { String messageType = edhocMapperState.isCoapClient() ? "response" : "request"; DataType T_CI = new DataType("C_I", Integer.class); @@ -134,7 +133,7 @@ protected EdhocOutputRA appOutput(EdhocMapperState edhocMapperState, byte[] resp return null; } - protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] responsePayload) { + protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[] responsePayload) { MessageProcessorPersistent messageProcessorPersistent = new MessageProcessorPersistent(edhocMapperState); boolean ok; DataType T_CI = new DataType("C_I", Integer.class); @@ -230,7 +229,7 @@ protected EdhocOutputRA edhocOutputRA(EdhocMapperState edhocMapperState, byte[] } } - protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { + protected PSymbolInstance coapOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { String messageType = edhocMapperState.isCoapClient() ? "response" : "request"; // Check for coap error message @@ -274,7 +273,7 @@ protected EdhocOutputRA coapOutput(EdhocMapperState edhocMapperState, byte[] res return edhocOutputAfterCheck(responsePayload != null, base, new DataValue[] {}); } - protected EdhocOutputRA coapError() { + protected PSymbolInstance coapError() { if (((EdhocMapperConfig) mapperConfig).isCoapErrorAsEdhocError()) { OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), new DataType[] {}); return edhocOutputRA(base); @@ -284,22 +283,17 @@ protected EdhocOutputRA coapError() { } } - protected EdhocOutputRA edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, + protected PSymbolInstance edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, DataValue... values) { return successfulCheck ? edhocOutputRA(baseSymbol, values) : null; } - protected EdhocOutputRA edhocOutputRA(OutputSymbol baseSymbol, DataValue... values) { - return new EdhocOutputRA(baseSymbol, values); - } - - protected EdhocOutputRA buildOutput(List messages, ParameterizedSymbol baseSymbol, - DataValue... parameterValues) { - return new EdhocOutputRA(messages, baseSymbol, parameterValues); + protected PSymbolInstance edhocOutputRA(OutputSymbol baseSymbol, DataValue... values) { + return new PSymbolInstance(baseSymbol, values); } @Override - protected EdhocOutputRA buildOutput(String name, List messages) { + protected PSymbolInstance buildOutput(String name, List messages) { throw new UnsupportedOperationException("Unsupported output builder arguments"); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java index 5646e24c..de0585ee 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java @@ -1,10 +1,11 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; +import de.learnlib.ralib.words.PSymbolInstance; -public class EdhocOutputBuilderRA implements OutputBuilder { +public class EdhocOutputBuilderRA implements OutputBuilder { @Override - public EdhocOutputRA buildOutput(String name) { + public PSymbolInstance buildOutput(String name) { return new EdhocOutputRA(name); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java index 8ba49564..297fd6ed 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java @@ -1,37 +1,38 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; +import de.learnlib.ralib.words.PSymbolInstance; import java.util.Objects; -public class EdhocOutputCheckerRA implements OutputChecker { +public class EdhocOutputCheckerRA implements OutputChecker { - public boolean isMessage(EdhocOutputRA output, MessageOutputType messageOutputType) { - return Objects.equals(output.getName(), messageOutputType.name()); + public boolean isMessage(PSymbolInstance output, MessageOutputType messageOutputType) { + return Objects.equals(output.getBaseSymbol().getName(), messageOutputType.name()); } @Override - public boolean hasInitialClientMessage(EdhocOutputRA output) { + public boolean hasInitialClientMessage(PSymbolInstance output) { return isMessage(output, MessageOutputType.EDHOC_MESSAGE_1); } @Override - public boolean isTimeout(EdhocOutputRA output) { + public boolean isTimeout(PSymbolInstance output) { return isMessage(output, MessageOutputType.TIMEOUT); } @Override - public boolean isUnknown(EdhocOutputRA output) { + public boolean isUnknown(PSymbolInstance output) { return isMessage(output, MessageOutputType.UNKNOWN); } @Override - public boolean isSocketClosed(EdhocOutputRA output) { + public boolean isSocketClosed(PSymbolInstance output) { return isMessage(output, MessageOutputType.SOCKET_CLOSED); } @Override - public boolean isDisabled(EdhocOutputRA output) { + public boolean isDisabled(PSymbolInstance output) { return isMessage(output, MessageOutputType.DISABLED); } } From 7d9ea40ef5406fb3784fd311a2e6fd87a2e60f6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 3 Apr 2024 14:42:22 +0200 Subject: [PATCH 048/169] Set max depth and enable IO mode Co-authored-by: Linus Olofsson --- experiments/args/lakers/server_ra | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 2e9ad6b6..b893f32b 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -16,6 +16,11 @@ IO_RANDOM_WALK -skipNonDetTests -alphabet ./src/main/resources/alphabet_ra.xml +-maxDepthRA +4 +-depth +4 +-ioMode ##### EdhocMapperConfig ##### -protocolVersion From ada8d51ce388e56eb772339e5412c98ea43ea98f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 11 Apr 2024 16:33:54 +0200 Subject: [PATCH 049/169] Create a smaller test alphabet Co-authored-by: Linus Olofsson --- experiments/args/lakers/server_ra | 2 +- src/main/resources/small_alphabet.xml | 86 +++++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 src/main/resources/small_alphabet.xml diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index b893f32b..71ed8971 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -cacheTests -skipNonDetTests -alphabet -./src/main/resources/alphabet_ra.xml +./src/main/resources/small_alphabet.xml -maxDepthRA 4 -depth diff --git a/src/main/resources/small_alphabet.xml b/src/main/resources/small_alphabet.xml new file mode 100644 index 00000000..c2c9e785 --- /dev/null +++ b/src/main/resources/small_alphabet.xml @@ -0,0 +1,86 @@ + + + DISABLED + OUTPUT + + + SOCKET_CLOSED + OUTPUT + + + UNKNOWN + OUTPUT + + + TIMEOUT + OUTPUT + + + COAP_ERROR_MESSAGE + OUTPUT + + + UNSUPPORTED_MESSAGE + OUTPUT + + + EDHOC_ERROR_MESSAGE + OUTPUT + + + EDHOC_MESSAGE_1 + INPUT + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_2 + OUTPUT + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_3 + INPUT + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_3_OSCORE_APP + INPUT + + C_I + java.lang.Integer + + + + EDHOC_MESSAGE_4 + OUTPUT + + C_I + java.lang.Integer + + + + OSCORE_APP_MESSAGE + INPUT + + + COAP_APP_MESSAGE + OUTPUT + + + COAP_EMPTY_MESSAGE + INPUT + + + COAP_EMPTY_MESSAGE + OUTPUT + + \ No newline at end of file From d9ee4f89f71b3db2339f0abf38332cb8794724a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 11 Apr 2024 16:38:26 +0200 Subject: [PATCH 050/169] Update the log4j configuration with more info, log AutomatonBuilder at error --- src/main/resources/log4j2.xml | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index fa1b8c8b..be477600 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -6,15 +6,21 @@ - + + + + + + + From f6b3e07e3f5fd204bbc2401bb9df3aafabeda575 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 18 Apr 2024 16:44:01 +0200 Subject: [PATCH 051/169] Update the OutputBuilder to build PSymbolInstances from MessageOutputType members Co-authored-by: Linus Olofsson --- .../symbols/outputs/EdhocOutputBuilderRA.java | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java index de0585ee..922df29f 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java @@ -1,11 +1,39 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; +import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; public class EdhocOutputBuilderRA implements OutputBuilder { + @Override public PSymbolInstance buildOutput(String name) { - return new EdhocOutputRA(name); + OutputSymbol baseSymbol = new OutputSymbol(name); + return new PSymbolInstance(baseSymbol); + } + + public PSymbolInstance buildOutput(MessageOutputType type) { + OutputSymbol baseSymbol = new OutputSymbol(type.name()); + return new PSymbolInstance(baseSymbol); + } + + @Override + public PSymbolInstance buildTimeout() { + return buildOutput(MessageOutputType.TIMEOUT); + } + + @Override + public PSymbolInstance buildUnknown() { + return buildOutput(MessageOutputType.UNKNOWN); + } + + @Override + public PSymbolInstance buildSocketClosed() { + return buildOutput(MessageOutputType.SOCKET_CLOSED); + } + + @Override + public PSymbolInstance buildDisabled() { + return buildOutput(MessageOutputType.DISABLED); } } From 9e2d1d6d820061ddf5c7a862b4a60bbb2bccd8f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 18 Apr 2024 16:46:00 +0200 Subject: [PATCH 052/169] Add unique output types with names different from the MessageInputTypes --- .../sul/mapper/symbols/outputs/MessageOutputType.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java index 26fecbe3..e5de339d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java @@ -12,10 +12,13 @@ public enum MessageOutputType { EDHOC_ERROR_MESSAGE, EDHOC_MESSAGE_3_OSCORE_APP, OSCORE_APP_MESSAGE, + OSCORE_APP_MESSAGE_RESPONDER, COAP_APP_MESSAGE, + COAP_APP_MESSAGE_RESPONDER, COAP_MESSAGE, COAP_ERROR_MESSAGE, COAP_EMPTY_MESSAGE, + COAP_EMPTY_MESSAGE_RESPONDER, UNSUPPORTED_MESSAGE, UNSUCCESSFUL_MESSAGE, TIMEOUT, From dafe751af1752c9bd750d349a30659923fba069d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 18 Apr 2024 16:47:42 +0200 Subject: [PATCH 053/169] Change the alphabet to match MessageInputType and MessageOutputType --- src/main/resources/small_alphabet.xml | 94 ++++++++++++++++----------- 1 file changed, 57 insertions(+), 37 deletions(-) diff --git a/src/main/resources/small_alphabet.xml b/src/main/resources/small_alphabet.xml index c2c9e785..5a3b9a90 100644 --- a/src/main/resources/small_alphabet.xml +++ b/src/main/resources/small_alphabet.xml @@ -1,32 +1,5 @@ - - DISABLED - OUTPUT - - - SOCKET_CLOSED - OUTPUT - - - UNKNOWN - OUTPUT - - - TIMEOUT - OUTPUT - - - COAP_ERROR_MESSAGE - OUTPUT - - - UNSUPPORTED_MESSAGE - OUTPUT - - - EDHOC_ERROR_MESSAGE - OUTPUT - + EDHOC_MESSAGE_1 INPUT @@ -51,36 +24,83 @@ java.lang.Integer - - EDHOC_MESSAGE_3_OSCORE_APP - INPUT + + EDHOC_MESSAGE_4 + OUTPUT C_I java.lang.Integer - - - EDHOC_MESSAGE_4 + + + EDHOC_ERROR_MESSAGE OUTPUT + + + + EDHOC_MESSAGE_3_OSCORE_APP + INPUT C_I java.lang.Integer - + OSCORE_APP_MESSAGE INPUT + + OSCORE_APP_MESSAGE_RESPONDER + OUTPUT + + COAP_APP_MESSAGE + INPUT + + + COAP_APP_MESSAGE_RESPONDER OUTPUT - + + COAP_MESSAGE + OUTPUT + + COAP_EMPTY_MESSAGE INPUT - COAP_EMPTY_MESSAGE + COAP_EMPTY_MESSAGE_RESPONDER OUTPUT + + COAP_ERROR_MESSAGE + OUTPUT + + + + DISABLED + OUTPUT + + + SOCKET_CLOSED + OUTPUT + + + UNKNOWN + OUTPUT + + + TIMEOUT + OUTPUT + + + UNSUPPORTED_MESSAGE + OUTPUT + + + UNSUCCESSFUL_MESSAGE + OUTPUT + \ No newline at end of file From a16e7b96682ca5d07e9ee3e9e352ab2761cfb9ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 18 Apr 2024 16:48:59 +0200 Subject: [PATCH 054/169] Update logging config --- src/main/resources/log4j2.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index be477600..94de1b3b 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -9,13 +9,16 @@ + + + - + From 9243cc11c3f391fb98680a978aee4daf633e552b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 18 Apr 2024 16:49:42 +0200 Subject: [PATCH 055/169] Disable parameters and update OutputMapperRA to only PSymbolInstance --- .../edhocfuzzer/AlphabetTransformerRA.java | 11 +- .../edhocfuzzer/MultiBuilderRA.java | 5 +- .../mapper/mappers/EdhocInputMapperRA.java | 25 ++--- .../mapper/mappers/EdhocOutputMapperRA.java | 101 +++++++++--------- 4 files changed, 70 insertions(+), 72 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java index db543256..41fdbd0d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java @@ -3,7 +3,6 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderTransformer; -import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.words.InputSymbol; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.ParameterizedSymbol; @@ -31,16 +30,16 @@ public SymbolXml fromTransformedInput(ParameterizedSymbol symbol) { @Override public ParameterizedSymbol toTransformedInput(SymbolXml symbol) { - DataType[] types = Arrays.stream(symbol.getDataTypes()) - .map(type -> new DataType(type.getName(), type.getBase())) - .toArray(DataType[]::new); + // DataType[] types = Arrays.stream(symbol.getDataTypes()) + // .map(type -> new DataType(type.getName(), type.getBase())) + // .toArray(DataType[]::new); switch (symbol.getSymbolType()) { case INPUT: - return new InputSymbol(symbol.getName(), types); + return new InputSymbol(symbol.getName()); case OUTPUT: - return new OutputSymbol(symbol.getName(), types); + return new OutputSymbol(symbol.getName()); default: throw new RuntimeException("Invalid SymbolType for InputSymbolXml, not INPUT or OUTPUT"); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index f6166a08..725d85dd 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -34,7 +34,6 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.theory.Theory; -import de.learnlib.ralib.tools.theories.IntegerEqualityTheory; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; @@ -77,10 +76,10 @@ public StateFuzzerServerConfig buildServerConfig() { @Override public StateFuzzer> build( StateFuzzerEnabler stateFuzzerEnabler) { - DataType T_CI = new DataType("C_I", Integer.class); + // DataType T_CI = new DataType("C_I", Integer.class); @SuppressWarnings("rawtypes") final Map teachers = new LinkedHashMap<>(); - teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); + // teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); return new StateFuzzerRA<>( new StateFuzzerComposerRA(stateFuzzerEnabler, alphabetTransformer, sulBuilder, sulWrapper, teachers).initialize()); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index 12930eb1..e83aba09 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -21,9 +21,6 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapperRA; -import com.upokecenter.cbor.CBORObject; -import de.learnlib.ralib.data.DataType; -import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.InputSymbol; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; @@ -37,7 +34,7 @@ public class EdhocInputMapperRA extends InputMapperRA timeoutMap = new EnumMap(MessageInputType.class); @@ -163,18 +160,18 @@ public void updateConnectionId(EdhocSessionPersistent session, PSymbolInstance i LOGGER.info("Running updateConnectionId method"); LOGGER.info("Current ConnectionId: " + EdhocUtil.bytesToInt(session.getConnectionId())); - for (DataValue dv : input.getParameterValues()) { + // for (DataValue dv : input.getParameterValues()) { - LOGGER.info("Datavalue: " + dv.toString()); - if (dv.getType().equals(T_CI)) { - CBORObject value = CBORObject.FromObject(dv.getId()); - LOGGER.info("CBORObject version of DataValue id: " + value.toString()); + // LOGGER.info("Datavalue: " + dv.toString()); + // if (dv.getType().equals(T_CI)) { + // CBORObject value = CBORObject.FromObject(dv.getId()); + // LOGGER.info("CBORObject version of DataValue id: " + value.toString()); - // session.setConnectionId(value.EncodeToBytes()); - LOGGER.info("ConnectionId after set: " + - EdhocUtil.bytesToInt(session.getConnectionId())); - } - } + // // session.setConnectionId(value.EncodeToBytes()); + // LOGGER.info("ConnectionId after set: " + + // EdhocUtil.bytesToInt(session.getConnectionId())); + // } + // } } public long getTimeoutForSymbol(PSymbolInstance input) { diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index f08670ab..951f0431 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -15,7 +15,6 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapperRA; -import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; @@ -48,19 +47,16 @@ public PSymbolInstance receiveOutput(EdhocExecutionContextRA context) { return socketClosed(); } catch (TimeoutException e) { return timeout(); - } catch (UnsupportedMessageException e) { + } catch (UnsupportedMessageException | UnsuccessfulMessageException e) { // special output to demonstrate that the input message the learner requested // was unable to be sent and deemed unsupported - - OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), new DataType[] {}); - return edhocOutputRA(base); - } catch (UnsuccessfulMessageException e) { + // or // special output to demonstrate that the received message evoked an error // in a middle layer and did not reach the upper resource in the case of // server mapper - OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name(), new DataType[] {}); - return edhocOutputRA(base); + OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name()); + return instanceFromOutputSymbol(base); } PSymbolInstance abstractOutput; @@ -92,7 +88,7 @@ public PSymbolInstance receiveOutput(EdhocExecutionContextRA context) { protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { String messageType = edhocMapperState.isCoapClient() ? "response" : "request"; - DataType T_CI = new DataType("C_I", Integer.class); + // DataType T_CI = new DataType("C_I", Integer.class); if (edhocMapperConnector.receivedMsg3WithOscoreApp()) { // received Message3_OSCORE_APP, from which application data propagated and @@ -103,12 +99,12 @@ protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] re Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP.name()); LOGGER.info("Reading as EDHOC Message 3 Oscore App, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); + // DataValue value = new DataValue(T_CI, parameter); - return edhocOutputRA(base, value); + return instanceFromOutputSymbol(base); } if (edhocMapperConnector.receivedOscoreAppMessage()) { @@ -126,8 +122,8 @@ protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] re messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - OutputSymbol base = new OutputSymbol(MessageOutputType.OSCORE_APP_MESSAGE.name(), new DataType[] {}); - return edhocOutputRA(base); + OutputSymbol base = new OutputSymbol(MessageOutputType.OSCORE_APP_MESSAGE_RESPONDER.name()); + return instanceFromOutputSymbol(base); } return null; @@ -136,13 +132,13 @@ protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] re protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[] responsePayload) { MessageProcessorPersistent messageProcessorPersistent = new MessageProcessorPersistent(edhocMapperState); boolean ok; - DataType T_CI = new DataType("C_I", Integer.class); + // DataType T_CI = new DataType("C_I", Integer.class); switch (messageProcessorPersistent.messageTypeFromStructure(responsePayload)) { case EDHOC_ERROR_MESSAGE -> { ok = messageProcessorPersistent.readErrorMessage(responsePayload); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), new DataType[] {}); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name()); return edhocOutputAfterCheck(ok, base, new DataValue[] {}); } @@ -151,10 +147,10 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_1.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_1.name()); LOGGER.info("Reading as Message 1, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base, value); + // DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base); } case EDHOC_MESSAGE_2 -> { @@ -162,10 +158,10 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name()); LOGGER.info("Reading as Message 2, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base, value); + // DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base); } case EDHOC_MESSAGE_3_OR_4 -> { @@ -176,19 +172,19 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ if (ok) { Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name()); LOGGER.info("Reading as Message 3, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); - return edhocOutputRA(base, value); + // DataValue value = new DataValue(T_CI, parameter); + return instanceFromOutputSymbol(base); } ok = messageProcessorPersistent.readMessage4(responsePayload); Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name()); LOGGER.info("Reading as Message 4, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base, value); + // DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base); } case EDHOC_MESSAGE_2_OR_3_OR_4 -> { @@ -198,29 +194,29 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ if (ok) { Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name()); LOGGER.info("Reading as Message 2, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); - return edhocOutputRA(base, value); + // DataValue value = new DataValue(T_CI, parameter); + return instanceFromOutputSymbol(base); } ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name()); LOGGER.info("Reading as Message 3, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); - return edhocOutputRA(base, value); + // DataValue value = new DataValue(T_CI, parameter); + return instanceFromOutputSymbol(base); } ok = messageProcessorPersistent.readMessage4(responsePayload); Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name(), T_CI); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name()); LOGGER.info("Reading as Message 4, DataValue: " + parameter); - DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base, value); + // DataValue value = new DataValue(T_CI, parameter); + return edhocOutputAfterCheck(ok, base); } default -> { @@ -250,8 +246,8 @@ protected PSymbolInstance coapOutput(EdhocMapperState edhocMapperState, byte[] r * Server Mapper: * received empty coap request for some reason */ - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_EMPTY_MESSAGE.name(), new DataType[] {}); - return edhocOutputRA(base); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_EMPTY_MESSAGE_RESPONDER.name()); + return instanceFromOutputSymbol(base); } // Check for unprotected coap message @@ -263,32 +259,39 @@ protected PSymbolInstance coapOutput(EdhocMapperState edhocMapperState, byte[] r LOGGER.info("COAP_APP_MESSAGE ({}): {} ~ {}", messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_APP_MESSAGE.name(), new DataType[] {}); - return edhocOutputRA(base); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_APP_MESSAGE_RESPONDER.name()); + return instanceFromOutputSymbol(base); } // if payload was not empty then a coap message is received // because no other transport protocol than coap is supported yet - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_MESSAGE.name(), new DataType[] {}); - return edhocOutputAfterCheck(responsePayload != null, base, new DataValue[] {}); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_MESSAGE.name()); + if (responsePayload != null) { + LOGGER.info("COAP_MESSAGE ({}): {} ~ {}", + messageType, EdhocUtil.byteArrayToString(responsePayload), + new String(responsePayload, StandardCharsets.UTF_8)); + } else { + LOGGER.info("COAP_MESSAGE payload is null."); + } + return edhocOutputAfterCheck(responsePayload != null, base); } protected PSymbolInstance coapError() { if (((EdhocMapperConfig) mapperConfig).isCoapErrorAsEdhocError()) { - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name(), new DataType[] {}); - return edhocOutputRA(base); + OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name()); + return instanceFromOutputSymbol(base); } else { - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_ERROR_MESSAGE.name(), new DataType[] {}); - return edhocOutputRA(base); + OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_ERROR_MESSAGE.name()); + return instanceFromOutputSymbol(base); } } protected PSymbolInstance edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, DataValue... values) { - return successfulCheck ? edhocOutputRA(baseSymbol, values) : null; + return successfulCheck ? instanceFromOutputSymbol(baseSymbol, values) : null; } - protected PSymbolInstance edhocOutputRA(OutputSymbol baseSymbol, DataValue... values) { + protected PSymbolInstance instanceFromOutputSymbol(OutputSymbol baseSymbol, DataValue... values) { return new PSymbolInstance(baseSymbol, values); } From 57750a9552b97b390593a586d39237d283aad71f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 18 Apr 2024 17:15:24 +0200 Subject: [PATCH 056/169] Change learning algorithm and add parameters --- experiments/args/lakers/server_ra | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 71ed8971..052201ad 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries @@ -20,7 +20,13 @@ IO_RANDOM_WALK 4 -depth 4 --ioMode +-roundLimit +5 +-probNewDataValue +0.5 +-seed +7 +-ros ##### EdhocMapperConfig ##### -protocolVersion From 4dfc2b2565245aa271a2dc584b7ac24dda912aae Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 18 Apr 2024 17:16:52 +0200 Subject: [PATCH 057/169] Change ci.yml to use server_ra args file --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 01ac4b79..d2b332c8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,7 +59,7 @@ jobs: - name: Test Lakers Server run: | - java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 2 + java -jar edhoc-fuzzer.jar @experiments/args/lakers/server_ra ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 RISE-Client: From 0414a4b8b0b13119471cc1431c3134c47b7bec04 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:20:07 +0200 Subject: [PATCH 058/169] EnumAlphabet and enumerations to build from Co-authored-by: Linus Olofsson --- .../edhocfuzzer/EnumAlphabet.java | 60 +++++++++++++++++++ .../edhocfuzzer/MessageInputTypeRA.java | 13 ++++ .../edhocfuzzer/MessageOutputTypeRA.java | 20 +++++++ .../edhocfuzzer/PSFOutputSymbols.java | 10 ++++ 4 files changed, 103 insertions(+) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageInputTypeRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java new file mode 100644 index 00000000..6207d306 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java @@ -0,0 +1,60 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +import de.learnlib.ralib.data.DataType; +import de.learnlib.ralib.words.*; +import net.automatalib.alphabet.ListAlphabet; + +import java.util.ArrayList; + +public class EnumAlphabet extends ListAlphabet { + + private EnumAlphabet(ArrayList inputs) { + super(inputs); + } + + public static class Builder { + + // TODO: This being static might mean that the list is never cleared unless done + // so specifically, + // meaning that constructing multiple alphabets might break unless this is + // cleared and a deepcopy + // is passed to EnumAlphabet. + private static ArrayList symbols = new ArrayList<>(); + + public Builder() {}; + + // TODO: This could be made generic like the methods for multiple enum values. + public Builder withInput(MessageInputTypeRA inputName, DataType... dataTypes) { + InputSymbol input = new InputSymbol(inputName.name()); + symbols.add(input); + return this; + } + + // TODO: This could be made generic like the methods for multiple enum values. + public Builder withOutput(MessageOutputTypeRA outputName, DataType... dataTypes) { + OutputSymbol output = new OutputSymbol(outputName.name(), dataTypes); + symbols.add(output); + return this; + } + + public > Builder withInputs(T[] inputNames) { + for (T e : inputNames) { + symbols.add(new InputSymbol(e.name())); + } + return this; + } + + public > Builder withOutputs(T[] outputNames) { + for (T e : outputNames) { + symbols.add(new OutputSymbol(e.name())); + } + return this; + } + + public EnumAlphabet build() { + // TODO: Deepcopy symbols, clear symbols after construction? + return new EnumAlphabet(symbols); + } + + } +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageInputTypeRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageInputTypeRA.java new file mode 100644 index 00000000..bdf21031 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageInputTypeRA.java @@ -0,0 +1,13 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +public enum MessageInputTypeRA { + EDHOC_MESSAGE_1_INPUT, + EDHOC_MESSAGE_2_INPUT, + EDHOC_MESSAGE_3_INPUT, + EDHOC_MESSAGE_4_INPUT, + EDHOC_ERROR_MESSAGE_INPUT, + EDHOC_MESSAGE_3_OSCORE_APP_INPUT, + OSCORE_APP_MESSAGE_INPUT, + COAP_APP_MESSAGE_INPUT, + COAP_EMPTY_MESSAGE_INPUT +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java new file mode 100644 index 00000000..0d81ec7d --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java @@ -0,0 +1,20 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +/** + * Messages that can be received. + * The last four are from the OutputBuilder. + */ +public enum MessageOutputTypeRA { + EDHOC_MESSAGE_1_OUTPUT, + EDHOC_MESSAGE_2_OUTPUT, + EDHOC_MESSAGE_3_OUTPUT, + EDHOC_MESSAGE_4_OUTPUT, + EDHOC_ERROR_MESSAGE_OUTPUT, + EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT, + OSCORE_APP_MESSAGE_OUTPUT, + COAP_APP_MESSAGE_OUTPUT, + COAP_MESSAGE_OUTPUT, + COAP_ERROR_MESSAGE_OUTPUT, + COAP_EMPTY_MESSAGE_OUTPUT + // The PSF specific symbols like timeout now lives in the PSFOutputSymbols +} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java new file mode 100644 index 00000000..f3463898 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java @@ -0,0 +1,10 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +public enum PSFOutputSymbols { + UNSUPPORTED_MESSAGE, + UNSUCCESSFUL_MESSAGE, + TIMEOUT, + UNKNOWN, + SOCKET_CLOSED, + DISABLED +} From 759b6d8b368e8562cce531aaca44d2ca6833e4b7 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:21:21 +0200 Subject: [PATCH 059/169] Change InputSymbolXml to SymbolXml in toTransformedInput default case --- .../protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java index 41fdbd0d..1a55a019 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java @@ -42,7 +42,7 @@ public ParameterizedSymbol toTransformedInput(SymbolXml symbol) { return new OutputSymbol(symbol.getName()); default: - throw new RuntimeException("Invalid SymbolType for InputSymbolXml, not INPUT or OUTPUT"); + throw new RuntimeException("Invalid SymbolType for SymbolXml, not INPUT or OUTPUT"); } } } From ebcdd5399e0a0dd112b751e6b1e5a53b90c77477 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:22:02 +0200 Subject: [PATCH 060/169] Update Input/Ouput mapper and OutputBuilder to use new enumerations --- .../mapper/mappers/EdhocInputMapperRA.java | 48 ++++++------- .../mapper/mappers/EdhocOutputMapperRA.java | 70 +++++++++++-------- .../symbols/outputs/EdhocOutputBuilderRA.java | 19 +++-- 3 files changed, 79 insertions(+), 58 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index e83aba09..fc22bf14 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; +import com.github.protocolfuzzing.edhocfuzzer.MessageInputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; @@ -16,7 +17,6 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputType; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; @@ -36,7 +36,7 @@ public class EdhocInputMapperRA extends InputMapperRA timeoutMap = new EnumMap(MessageInputType.class); + protected EnumMap timeoutMap = new EnumMap(MessageInputTypeRA.class); public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputCheckerRA outputChecker, EdhocMapperConnector edhocMapperConnector) { @@ -64,8 +64,8 @@ public void preSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context String symbolName = input.getBaseSymbol().getName(); EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - switch (MessageInputType.valueOf(symbolName)) { - case EDHOC_MESSAGE_1: + switch (MessageInputTypeRA.valueOf(symbolName)) { + case EDHOC_MESSAGE_1_INPUT: if (session.isInitiator()) { // Initiator by sending message 1 starts a new key exchange session // so previous session state must be cleaned unless reset is disabled @@ -74,23 +74,23 @@ public void preSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context updateConnectionId(session, input); break; - case EDHOC_MESSAGE_2: - case EDHOC_MESSAGE_3: - case EDHOC_MESSAGE_4: - case OSCORE_APP_MESSAGE: + case EDHOC_MESSAGE_2_INPUT: + case EDHOC_MESSAGE_3_INPUT: + case EDHOC_MESSAGE_4_INPUT: + case OSCORE_APP_MESSAGE_INPUT: updateConnectionId(session, input); break; - case EDHOC_MESSAGE_3_OSCORE_APP: + case EDHOC_MESSAGE_3_OSCORE_APP_INPUT: updateConnectionId(session, input); // construct Message3 in order to store it in session 'message3' field, // derive new oscore context and make Message3 available to oscore layer new MessageProcessorPersistent(context.getState()).writeMessage3(); break; - case COAP_APP_MESSAGE: - case COAP_EMPTY_MESSAGE: - case EDHOC_ERROR_MESSAGE: + case COAP_APP_MESSAGE_INPUT: + case COAP_EMPTY_MESSAGE_INPUT: + case EDHOC_ERROR_MESSAGE_INPUT: break; } } @@ -103,32 +103,32 @@ public EdhocProtocolMessage generateProtocolMessage(PSymbolInstance input, Edhoc // We can construct this here since the switch should always dispatch to only // one instance. MessageProcessorPersistent messageProcessor = new MessageProcessorPersistent(context.getState()); - switch (MessageInputType.valueOf(symbolName)) { - case EDHOC_MESSAGE_1: + switch (MessageInputTypeRA.valueOf(symbolName)) { + case EDHOC_MESSAGE_1_INPUT: return new EdhocMessage1(messageProcessor); - case EDHOC_MESSAGE_2: + case EDHOC_MESSAGE_2_INPUT: return new EdhocMessage2(messageProcessor); - case EDHOC_MESSAGE_3: + case EDHOC_MESSAGE_3_INPUT: return new EdhocMessage3(messageProcessor); - case EDHOC_MESSAGE_3_OSCORE_APP: + case EDHOC_MESSAGE_3_OSCORE_APP_INPUT: return new EdhocMessage3OscoreApp(messageProcessor); - case EDHOC_MESSAGE_4: + case EDHOC_MESSAGE_4_INPUT: return new EdhocMessage4(messageProcessor); - case OSCORE_APP_MESSAGE: + case OSCORE_APP_MESSAGE_INPUT: return new OscoreAppMessage(messageProcessor); - case EDHOC_ERROR_MESSAGE: + case EDHOC_ERROR_MESSAGE_INPUT: return new EdhocErrorMessage(messageProcessor); - case COAP_APP_MESSAGE: + case COAP_APP_MESSAGE_INPUT: return new CoapAppMessage(messageProcessor); - case COAP_EMPTY_MESSAGE: + case COAP_EMPTY_MESSAGE_INPUT: return new CoapEmptyMessage(messageProcessor); } } @@ -176,13 +176,13 @@ public void updateConnectionId(EdhocSessionPersistent session, PSymbolInstance i public long getTimeoutForSymbol(PSymbolInstance input) { String baseSymbolName = input.getBaseSymbol().getName(); - MessageInputType key = MessageInputType.valueOf(baseSymbolName); + MessageInputTypeRA key = MessageInputTypeRA.valueOf(baseSymbolName); return timeoutMap.getOrDefault(key, 0L); } public void setTimeoutForSymbol(PSymbolInstance input, long timeout) { String baseSymbolName = input.getBaseSymbol().getName(); - MessageInputType key = MessageInputType.valueOf(baseSymbolName); + MessageInputTypeRA key = MessageInputTypeRA.valueOf(baseSymbolName); timeoutMap.put(key, timeout); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index 951f0431..0e821c81 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; +import com.github.protocolfuzzing.edhocfuzzer.MessageOutputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; @@ -12,9 +13,9 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapperRA; +import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; @@ -30,10 +31,18 @@ public class EdhocOutputMapperRA EdhocMapperConnector edhocMapperConnector; + // FIXME: Suppressing the warning that outputBuilder shadows the same name in + // parent. + // If the enum approach is taken and is standardized this will be solved. + // Hack to allow building unsupportedMessage/unkownMessage. + @SuppressWarnings("HidingField") + EdhocOutputBuilderRA outputBuilder; + public EdhocOutputMapperRA(MapperConfig mapperConfig, EdhocOutputBuilderRA edhocOutputBuilder, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, edhocOutputBuilder); this.edhocMapperConnector = edhocMapperConnector; + this.outputBuilder = edhocOutputBuilder; } @Override @@ -47,16 +56,15 @@ public PSymbolInstance receiveOutput(EdhocExecutionContextRA context) { return socketClosed(); } catch (TimeoutException e) { return timeout(); - } catch (UnsupportedMessageException | UnsuccessfulMessageException e) { + } catch (UnsupportedMessageException e) { // special output to demonstrate that the input message the learner requested // was unable to be sent and deemed unsupported - // or + return outputBuilder.buildUnsupportedMessage(); + } catch (UnsuccessfulMessageException e) { // special output to demonstrate that the received message evoked an error // in a middle layer and did not reach the upper resource in the case of // server mapper - - OutputSymbol base = new OutputSymbol(MessageOutputType.UNSUPPORTED_MESSAGE.name()); - return instanceFromOutputSymbol(base); + return outputBuilder.buildUnsuccessfulMessage(); } PSymbolInstance abstractOutput; @@ -99,7 +107,7 @@ protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] re Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3_OSCORE_APP.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT); LOGGER.info("Reading as EDHOC Message 3 Oscore App, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); @@ -122,8 +130,9 @@ protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] re messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - OutputSymbol base = new OutputSymbol(MessageOutputType.OSCORE_APP_MESSAGE_RESPONDER.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.OSCORE_APP_MESSAGE_OUTPUT); return instanceFromOutputSymbol(base); + } return null; @@ -137,9 +146,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ switch (messageProcessorPersistent.messageTypeFromStructure(responsePayload)) { case EDHOC_ERROR_MESSAGE -> { ok = messageProcessorPersistent.readErrorMessage(responsePayload); - - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name()); - return edhocOutputAfterCheck(ok, base, new DataValue[] {}); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_ERROR_MESSAGE_OUTPUT); + return instanceAfterCheck(ok, base, new DataValue[] {}); } case EDHOC_MESSAGE_1 -> { @@ -147,10 +155,10 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_1.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_1_OUTPUT); LOGGER.info("Reading as Message 1, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base); + return instanceAfterCheck(ok, base); } case EDHOC_MESSAGE_2 -> { @@ -158,10 +166,10 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); LOGGER.info("Reading as Message 2, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base); + return instanceAfterCheck(ok, base); } case EDHOC_MESSAGE_3_OR_4 -> { @@ -172,7 +180,7 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ if (ok) { Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT); LOGGER.info("Reading as Message 3, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); return instanceFromOutputSymbol(base); @@ -181,10 +189,10 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ ok = messageProcessorPersistent.readMessage4(responsePayload); Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT); LOGGER.info("Reading as Message 4, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base); + return instanceAfterCheck(ok, base); } case EDHOC_MESSAGE_2_OR_3_OR_4 -> { @@ -194,7 +202,7 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ if (ok) { Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_2.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); LOGGER.info("Reading as Message 2, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); return instanceFromOutputSymbol(base); @@ -204,7 +212,7 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ if (ok) { Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_3.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT); LOGGER.info("Reading as Message 3, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); return instanceFromOutputSymbol(base); @@ -213,10 +221,10 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ ok = messageProcessorPersistent.readMessage4(responsePayload); Integer parameter = EdhocUtil .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_MESSAGE_4.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT); LOGGER.info("Reading as Message 4, DataValue: " + parameter); // DataValue value = new DataValue(T_CI, parameter); - return edhocOutputAfterCheck(ok, base); + return instanceAfterCheck(ok, base); } default -> { @@ -246,7 +254,7 @@ protected PSymbolInstance coapOutput(EdhocMapperState edhocMapperState, byte[] r * Server Mapper: * received empty coap request for some reason */ - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_EMPTY_MESSAGE_RESPONDER.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.COAP_EMPTY_MESSAGE_OUTPUT); return instanceFromOutputSymbol(base); } @@ -259,13 +267,13 @@ protected PSymbolInstance coapOutput(EdhocMapperState edhocMapperState, byte[] r LOGGER.info("COAP_APP_MESSAGE ({}): {} ~ {}", messageType, EdhocUtil.byteArrayToString(responsePayload), new String(responsePayload, StandardCharsets.UTF_8)); - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_APP_MESSAGE_RESPONDER.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.COAP_APP_MESSAGE_OUTPUT); return instanceFromOutputSymbol(base); } // if payload was not empty then a coap message is received // because no other transport protocol than coap is supported yet - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_MESSAGE.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.COAP_MESSAGE_OUTPUT); if (responsePayload != null) { LOGGER.info("COAP_MESSAGE ({}): {} ~ {}", messageType, EdhocUtil.byteArrayToString(responsePayload), @@ -273,20 +281,24 @@ protected PSymbolInstance coapOutput(EdhocMapperState edhocMapperState, byte[] r } else { LOGGER.info("COAP_MESSAGE payload is null."); } - return edhocOutputAfterCheck(responsePayload != null, base); + return instanceAfterCheck(responsePayload != null, base); } protected PSymbolInstance coapError() { if (((EdhocMapperConfig) mapperConfig).isCoapErrorAsEdhocError()) { - OutputSymbol base = new OutputSymbol(MessageOutputType.EDHOC_ERROR_MESSAGE.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_ERROR_MESSAGE_OUTPUT); return instanceFromOutputSymbol(base); } else { - OutputSymbol base = new OutputSymbol(MessageOutputType.COAP_ERROR_MESSAGE.name()); + OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.COAP_ERROR_MESSAGE_OUTPUT); return instanceFromOutputSymbol(base); } } - protected PSymbolInstance edhocOutputAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, + protected OutputSymbol newBaseSymbol(MessageOutputTypeRA outputName, DataType... dataTypes) { + return new OutputSymbol(outputName.name(), dataTypes); + } + + protected PSymbolInstance instanceAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, DataValue... values) { return successfulCheck ? instanceFromOutputSymbol(baseSymbol, values) : null; } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java index 922df29f..87768e78 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; +import com.github.protocolfuzzing.edhocfuzzer.PSFOutputSymbols; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; @@ -12,28 +13,36 @@ public PSymbolInstance buildOutput(String name) { return new PSymbolInstance(baseSymbol); } - public PSymbolInstance buildOutput(MessageOutputType type) { + public PSymbolInstance buildOutput(PSFOutputSymbols type) { OutputSymbol baseSymbol = new OutputSymbol(type.name()); return new PSymbolInstance(baseSymbol); } + public PSymbolInstance buildUnsupportedMessage() { + return buildOutput(PSFOutputSymbols.UNSUPPORTED_MESSAGE); + } + + public PSymbolInstance buildUnsuccessfulMessage() { + return buildOutput(PSFOutputSymbols.UNSUCCESSFUL_MESSAGE); + } + @Override public PSymbolInstance buildTimeout() { - return buildOutput(MessageOutputType.TIMEOUT); + return buildOutput(PSFOutputSymbols.TIMEOUT); } @Override public PSymbolInstance buildUnknown() { - return buildOutput(MessageOutputType.UNKNOWN); + return buildOutput(PSFOutputSymbols.UNKNOWN); } @Override public PSymbolInstance buildSocketClosed() { - return buildOutput(MessageOutputType.SOCKET_CLOSED); + return buildOutput(PSFOutputSymbols.SOCKET_CLOSED); } @Override public PSymbolInstance buildDisabled() { - return buildOutput(MessageOutputType.DISABLED); + return buildOutput(PSFOutputSymbols.DISABLED); } } From 3bed950c086d7a4be0b20da73212148cc58bf9d2 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:22:37 +0200 Subject: [PATCH 061/169] Create a dummy builder to be able to pass EnumAlphabet to PSF. --- .../edhocfuzzer/AlphabetDummyBuilder.java | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java new file mode 100644 index 00000000..7a93df68 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java @@ -0,0 +1,42 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetSerializerException; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfig; +import net.automatalib.alphabet.Alphabet; + +import java.io.IOException; +import java.io.InputStream; + +public class AlphabetDummyBuilder implements AlphabetBuilder { + + private Alphabet alphabet; + + public AlphabetDummyBuilder(Alphabet alphabet) { + this.alphabet = alphabet; + } + + @Override + public Alphabet build(LearnerConfig learnerConfig) { + return alphabet; + } + + @Override + public String getAlphabetFileExtension() { + // TODO Auto-generated method stub + return null; + } + + @Override + public InputStream getAlphabetFileInputStream(LearnerConfig learnerConfig) { + // TODO Auto-generated method stub + return null; + } + + @Override + public void exportAlphabetToFile(String outputFileName, Alphabet alphabet) + throws IOException, AlphabetSerializerException { + // TODO Auto-generated method stub + + } +} From 14fd65ba602538fa3ccc8baeaf178ea3ce22168e Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:23:14 +0200 Subject: [PATCH 062/169] Use EnumAlphabet and AlphabetDummyBuilder in MultiBuilderRA --- .../edhocfuzzer/MultiBuilderRA.java | 26 ++++++++++++------- 1 file changed, 17 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 725d85dd..266655b1 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -1,14 +1,10 @@ package com.github.protocolfuzzing.edhocfuzzer; -import com.github.protocolfuzzing.edhocfuzzer.components.learner.EdhocAlphabetPojoXmlRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.EdhocSulBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulServerConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.SymbolXml; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.xml.AlphabetSerializerXml; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.statistics.RegisterAutomatonWrapper; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; @@ -36,6 +32,7 @@ import de.learnlib.ralib.theory.Theory; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; +import net.automatalib.alphabet.Alphabet; import java.util.LinkedHashMap; import java.util.Map; @@ -46,11 +43,22 @@ public class MultiBuilderRA implements TestRunnerBuilder, TimingProbeBuilder { - protected AlphabetBuilderStandard alphabetBuilder = new AlphabetBuilderStandard<>( - new AlphabetSerializerXml(SymbolXml.class, - EdhocAlphabetPojoXmlRA.class)); + // protected AlphabetBuilderStandard alphabetBuilder = new + // AlphabetBuilderStandard<>( + // new AlphabetSerializerXml(SymbolXml.class, + // EdhocAlphabetPojoXmlRA.class)); - protected AlphabetTransformerRA alphabetTransformer = new AlphabetTransformerRA(alphabetBuilder); + // protected AlphabetTransformerRA alphabetTransformer = new + // AlphabetTransformerRA(alphabetBuilder); + + protected Alphabet alphabet = new EnumAlphabet.Builder() + .withInputs(MessageInputTypeRA.values()) + .withOutputs(MessageOutputTypeRA.values()) + .withOutputs(PSFOutputSymbols.values()) + .build(); + + protected AlphabetDummyBuilder dummyBuilder = new AlphabetDummyBuilder( + alphabet); protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); protected SulWrapper sulWrapper = new SulWrapperStandard<>(); @@ -82,7 +90,7 @@ public StateFuzzer( new StateFuzzerComposerRA(stateFuzzerEnabler, - alphabetTransformer, sulBuilder, sulWrapper, teachers).initialize()); + dummyBuilder, sulBuilder, sulWrapper, teachers).initialize()); } @Override From 9c56a6cf98e1cfa768c0a7f96458ff27d91a1842 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Mon, 22 Apr 2024 15:24:06 +0200 Subject: [PATCH 063/169] Add temporary dependencies on automatalib to allow creation of enumalphabet in EDHOC. It should probably be moved to PSF. --- pom.xml | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pom.xml b/pom.xml index 3e266c68..26058293 100644 --- a/pom.xml +++ b/pom.xml @@ -78,6 +78,15 @@ runtime + + + net.automatalib.distribution + automata-distribution + 0.11.0 + pom + import + + de.learnlib @@ -157,6 +166,18 @@ guava ${guava.version} + + + + net.automatalib + automata-core + + + + + net.automatalib + automata-api + From bb313c92e75fa843f38044daae6dbc1138b87d24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Mon, 22 Apr 2024 17:25:45 +0200 Subject: [PATCH 064/169] Update loglevels --- src/main/resources/log4j2.xml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 94de1b3b..9d0499e9 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -6,10 +6,10 @@ - + - + @@ -18,7 +18,10 @@ - + + + + From c3d07de14181b743b94cfb06bd79b6401c77c62e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 26 Apr 2024 13:07:51 +0200 Subject: [PATCH 065/169] Update the RISE configurations, currently with hardcoded filepaths which should be replaced at a later date. Co-authored-by: Linus Olofsson --- experiments/args/rise/server_m4_app_ra | 81 ++++++++++++++++++++++++++ experiments/args/rise/server_ra | 81 ++++++++++++++++++++++++++ 2 files changed, 162 insertions(+) create mode 100644 experiments/args/rise/server_m4_app_ra create mode 100644 experiments/args/rise/server_ra diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra new file mode 100644 index 00000000..77507bc9 --- /dev/null +++ b/experiments/args/rise/server_m4_app_ra @@ -0,0 +1,81 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +./experiments/results/server/rise_m4_app + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-cacheTests +-skipNonDetTests +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +10 +-depth +10 +-probNewDataValue +0.5 +-seed +7 +-ros + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +./experiments/authentication/test_vectors/test_vectors_rise.json + +-testVectorJsonKey +test_vector_ed25519 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Initiator + +-appCoapResource +helloWorld + +##### SulConfig ##### +-responseWait +500 +-processDir +./experiments/models/servers/rise +-cmd +java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer 5 +-startWait +1000 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra new file mode 100644 index 00000000..10e955f7 --- /dev/null +++ b/experiments/args/rise/server_ra @@ -0,0 +1,81 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +./experiments/results/server/rise + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-cacheTests +-skipNonDetTests +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +10 +-depth +10 +-probNewDataValue +0.5 +-seed +7 +-ros + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +./experiments/authentication/test_vectors/test_vectors_rise.json + +-testVectorJsonKey +test_vector_ed25519 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Initiator + +-appCoapResource +helloWorld + +##### SulConfig ##### +-responseWait +500 +-processDir +./experiments/models/servers/rise +-cmd +java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer +-startWait +1000 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 From c268e2a7674ac06d678386f26666970732b4b9e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 2 May 2024 10:36:21 +0200 Subject: [PATCH 066/169] More fine-grained logging, keep only RaStar Co-authored-by: Linus Olofsson --- src/main/resources/log4j2.xml | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 9d0499e9..f6849bf7 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -9,22 +9,28 @@ - + - + - + + + + + + + - + From fd8fc5939addf2475debb26281cf8b8d1a3a3dbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 7 May 2024 12:17:41 +0200 Subject: [PATCH 067/169] Update EnumAlphabet to use a map for easy symbol retreival, add some comments to the enum classes Co-authored-by: Linus Olofsson --- .../edhocfuzzer/EnumAlphabet.java | 60 +++++++++++-------- .../edhocfuzzer/MessageOutputTypeRA.java | 1 - .../edhocfuzzer/PSFOutputSymbols.java | 3 + 3 files changed, 38 insertions(+), 26 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java index 6207d306..7445f001 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java @@ -5,55 +5,65 @@ import net.automatalib.alphabet.ListAlphabet; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; public class EnumAlphabet extends ListAlphabet { - private EnumAlphabet(ArrayList inputs) { - super(inputs); + private Map map; + + private EnumAlphabet(Map symbols) { + super(new ArrayList(symbols.values())); + this.map = symbols; + } + + public > ParameterizedSymbol getPSymbol(T enum_member) { + + ParameterizedSymbol symbol = map.get(enum_member.name()); + if (symbol == null) { + throw new RuntimeException("The symbol " + symbol + + " is not present in the alphabet map, the map may not have been initialised properly."); + } + return symbol; } public static class Builder { - // TODO: This being static might mean that the list is never cleared unless done - // so specifically, - // meaning that constructing multiple alphabets might break unless this is - // cleared and a deepcopy - // is passed to EnumAlphabet. - private static ArrayList symbols = new ArrayList<>(); + private HashMap map = new HashMap<>(); - public Builder() {}; + public Builder() { + }; - // TODO: This could be made generic like the methods for multiple enum values. - public Builder withInput(MessageInputTypeRA inputName, DataType... dataTypes) { - InputSymbol input = new InputSymbol(inputName.name()); - symbols.add(input); + public > Builder withInput(T enum_member, DataType... dataTypes) { + String name = enum_member.name(); + InputSymbol input = new InputSymbol(name, dataTypes); + map.put(name, input); return this; } - // TODO: This could be made generic like the methods for multiple enum values. - public Builder withOutput(MessageOutputTypeRA outputName, DataType... dataTypes) { - OutputSymbol output = new OutputSymbol(outputName.name(), dataTypes); - symbols.add(output); + public > Builder withOutput(T enum_member, DataType... dataTypes) { + String name = enum_member.name(); + OutputSymbol output = new OutputSymbol(name, dataTypes); + map.put(name, output); return this; } - public > Builder withInputs(T[] inputNames) { - for (T e : inputNames) { - symbols.add(new InputSymbol(e.name())); + public > Builder withInputs(T[] enum_members) { + for (T e : enum_members) { + map.put(e.name(), new InputSymbol(e.name())); } return this; } - public > Builder withOutputs(T[] outputNames) { - for (T e : outputNames) { - symbols.add(new OutputSymbol(e.name())); + public > Builder withOutputs(T[] enum_members) { + for (T e : enum_members) { + map.put(e.name(), new OutputSymbol(e.name())); } return this; } public EnumAlphabet build() { - // TODO: Deepcopy symbols, clear symbols after construction? - return new EnumAlphabet(symbols); + return new EnumAlphabet(map); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java index 0d81ec7d..ea42b2a2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java @@ -2,7 +2,6 @@ /** * Messages that can be received. - * The last four are from the OutputBuilder. */ public enum MessageOutputTypeRA { EDHOC_MESSAGE_1_OUTPUT, diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java index f3463898..3806b32b 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java @@ -1,5 +1,8 @@ package com.github.protocolfuzzing.edhocfuzzer; +/** + * Symbols from the Protocol State Fuzzer + */ public enum PSFOutputSymbols { UNSUPPORTED_MESSAGE, UNSUCCESSFUL_MESSAGE, From a7e2b9d9a6a3a24c50a0f21f5326f643c83b4563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 7 May 2024 12:20:14 +0200 Subject: [PATCH 068/169] Add parameters and update the mappers with symbol retreival from the alphabet, thus instantiating it in one place NOTE: the way this is done is not ideal, there might be a better pattern --- .../edhocfuzzer/MultiBuilderRA.java | 189 +++++++++++------- .../sul/core/EdhocSulBuilderRA.java | 9 +- .../components/sul/core/EdhocSulRA.java | 7 +- .../sul/mapper/context/EdhocMapperState.java | 8 + .../mapper/mappers/EdhocInputMapperRA.java | 48 +++-- .../mapper/mappers/EdhocOutputMapperRA.java | 49 ++--- 6 files changed, 194 insertions(+), 116 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 266655b1..87865617 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -30,80 +30,131 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.theory.Theory; +import de.learnlib.ralib.tools.theories.IntegerEqualityTheory; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; -import net.automatalib.alphabet.Alphabet; +import org.eclipse.californium.edhoc.SharedSecretCalculation; import java.util.LinkedHashMap; import java.util.Map; public class MultiBuilderRA implements - StateFuzzerConfigBuilder, - StateFuzzerBuilder>, - TestRunnerBuilder, - TimingProbeBuilder { - - // protected AlphabetBuilderStandard alphabetBuilder = new - // AlphabetBuilderStandard<>( - // new AlphabetSerializerXml(SymbolXml.class, - // EdhocAlphabetPojoXmlRA.class)); - - // protected AlphabetTransformerRA alphabetTransformer = new - // AlphabetTransformerRA(alphabetBuilder); - - protected Alphabet alphabet = new EnumAlphabet.Builder() - .withInputs(MessageInputTypeRA.values()) - .withOutputs(MessageOutputTypeRA.values()) - .withOutputs(PSFOutputSymbols.values()) - .build(); - - protected AlphabetDummyBuilder dummyBuilder = new AlphabetDummyBuilder( - alphabet); - - protected SulBuilder sulBuilder = new EdhocSulBuilderRA(); - protected SulWrapper sulWrapper = new SulWrapperStandard<>(); - - @Override - public StateFuzzerClientConfig buildClientConfig() { - return new StateFuzzerClientConfigStandard( - new LearnerConfigRA(), - new EdhocSulClientConfig(new EdhocMapperConfig()), - new TestRunnerConfigStandard(), - new TimingProbeConfigStandard()); - } - - @Override - public StateFuzzerServerConfig buildServerConfig() { - return new StateFuzzerServerConfigStandard( - new LearnerConfigRA(), - new EdhocSulServerConfig(new EdhocMapperConfig()), - new TestRunnerConfigStandard(), - new TimingProbeConfigStandard()); - } - - @Override - public StateFuzzer> build( - StateFuzzerEnabler stateFuzzerEnabler) { - // DataType T_CI = new DataType("C_I", Integer.class); - @SuppressWarnings("rawtypes") - final Map teachers = new LinkedHashMap<>(); - // teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); - return new StateFuzzerRA<>( - new StateFuzzerComposerRA(stateFuzzerEnabler, - dummyBuilder, sulBuilder, sulWrapper, teachers).initialize()); - } - - @Override - public TestRunner build(TestRunnerEnabler testRunnerEnabler) { - // return new TestRunnerStandard<>(testRunnerEnabler, alphabetTransformer, - // sulBuilder, sulWrapper).initialize(); - return null; // FIXME: If this is used we have problems. - } - - @Override - public TimingProbe build(TimingProbeEnabler timingProbeEnabler) { - // return new TimingProbeStandard<>(timingProbeEnabler, alphabetTransformer, - // sulBuilder, sulWrapper).initialize(); - return null; // FIXME: If this is used we have problems. - } + StateFuzzerConfigBuilder, + StateFuzzerBuilder>, + TestRunnerBuilder, + TimingProbeBuilder { + + // protected AlphabetBuilderStandard alphabetBuilder = new + // AlphabetBuilderStandard<>( + // new AlphabetSerializerXml(SymbolXml.class, + // EdhocAlphabetPojoXmlRA.class)); + + // protected AlphabetTransformerRA alphabetTransformer = new + // AlphabetTransformerRA(alphabetBuilder); + + DataType T_CI = new DataType("C_I", Integer.class); + + protected EnumAlphabet alphabet = new EnumAlphabet.Builder() + .withInputs(MessageInputTypeRA.values()) + .withOutputs(MessageOutputTypeRA.values()) + .withOutputs(PSFOutputSymbols.values()) + .withInput(MessageInputTypeRA.EDHOC_MESSAGE_1_INPUT, T_CI) + .withInput(MessageInputTypeRA.EDHOC_MESSAGE_2_INPUT, T_CI) + .withInput(MessageInputTypeRA.EDHOC_MESSAGE_3_INPUT, T_CI) + .withInput(MessageInputTypeRA.EDHOC_MESSAGE_4_INPUT, T_CI) + .withInput(MessageInputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_INPUT, T_CI) + .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_1_OUTPUT, T_CI) + .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT, T_CI) + .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT, T_CI) + .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT, T_CI) + .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT, T_CI) + .build(); + + protected AlphabetDummyBuilder dummyBuilder = new AlphabetDummyBuilder( + alphabet); + + protected SulBuilder sulBuilder = new EdhocSulBuilderRA( + alphabet); + protected SulWrapper sulWrapper = new SulWrapperStandard<>(); + + @Override + public StateFuzzerClientConfig buildClientConfig() { + return new StateFuzzerClientConfigStandard( + new LearnerConfigRA(), + new EdhocSulClientConfig(new EdhocMapperConfig()), + new TestRunnerConfigStandard(), + new TimingProbeConfigStandard()); + } + + @Override + public StateFuzzerServerConfig buildServerConfig() { + return new StateFuzzerServerConfigStandard( + new LearnerConfigRA(), + new EdhocSulServerConfig(new EdhocMapperConfig()), + new TestRunnerConfigStandard(), + new TimingProbeConfigStandard()); + } + + @Override + public StateFuzzer> build( + StateFuzzerEnabler stateFuzzerEnabler) { + // testOneKeyBuild(); + @SuppressWarnings("rawtypes") + final Map teachers = new LinkedHashMap<>(); + teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); + return new StateFuzzerRA<>( + new StateFuzzerComposerRA( + stateFuzzerEnabler, + dummyBuilder, sulBuilder, sulWrapper, teachers).initialize()); + } + + @Override + public TestRunner build(TestRunnerEnabler testRunnerEnabler) { + // return new TestRunnerStandard<>(testRunnerEnabler, alphabetTransformer, + // sulBuilder, sulWrapper).initialize(); + return null; // FIXME: If this is used we have problems. + } + + @Override + public TimingProbe build(TimingProbeEnabler timingProbeEnabler) { + // return new TimingProbeStandard<>(timingProbeEnabler, alphabetTransformer, + // sulBuilder, sulWrapper).initialize(); + return null; // FIXME: If this is used we have problems. + } + + public static void testOneKeyBuild() { + byte[] invalidG_Y = new byte[] { (byte) 0x00, (byte) 0x33, (byte) 0x69, (byte) 0xf1, (byte) 0xa6, + (byte) 0x0d, (byte) 0x17, (byte) 0xe8, (byte) 0x51, (byte) 0x15, + (byte) 0x88, (byte) 0x67, (byte) 0xdd, (byte) 0x33, (byte) 0xeb, (byte) 0xad, + (byte) 0x87, (byte) 0x19, (byte) 0xeb, (byte) 0xb0, + (byte) 0xd5, (byte) 0xe9, (byte) 0x08, (byte) 0xa3, (byte) 0xeb, (byte) 0x6d, + (byte) 0x5f, (byte) 0x48, (byte) 0x12, (byte) 0xb5, + (byte) 0x85, (byte) 0xdf }; + + byte[] validG_Y = new byte[] { (byte) 0xf7, (byte) 0x02, (byte) 0xe5, (byte) 0xee, (byte) 0x70, + (byte) 0x46, (byte) 0xb4, (byte) 0xea, (byte) 0xfe, (byte) 0x7a, + (byte) 0x31, (byte) 0x0d, (byte) 0x2f, (byte) 0xff, (byte) 0x04, (byte) 0xba, + (byte) 0xc6, (byte) 0xa5, (byte) 0x96, (byte) 0x9a, + (byte) 0x84, (byte) 0x39, (byte) 0xf5, (byte) 0x4a, (byte) 0xd5, (byte) 0xba, + (byte) 0x3a, (byte) 0x26, (byte) 0xcc, (byte) 0xe8, + (byte) 0x7b, (byte) 0xb0 }; + System.err.println("Key beggining with non-zero byte:"); + System.err.println("Curve25519"); + System.err.println(SharedSecretCalculation.buildCurve25519OneKey(null, validG_Y) == null ? "Key null" + : "Key not null"); + + System.err.println("ECDSA256"); + System.err.println( + SharedSecretCalculation.buildEcdsa256OneKey(null, validG_Y, null) == null ? "Key null" + : "Key not null"); + System.err.println("Key beginning with zero byte:"); + System.err.println("Curve25519"); + System.err.println(SharedSecretCalculation.buildCurve25519OneKey(null, invalidG_Y) == null ? "Key null" + : "Key not null"); + System.err.println("ECDSA256"); + System.err.println( + SharedSecretCalculation.buildEcdsa256OneKey(null, invalidG_Y, null) == null ? "Key null" + : "Key not null"); + System.exit(0); + } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java index 502496c9..c4b05f54 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; +import com.github.protocolfuzzing.edhocfuzzer.EnumAlphabet; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; @@ -8,9 +9,15 @@ import de.learnlib.ralib.words.PSymbolInstance; public class EdhocSulBuilderRA implements SulBuilder { + protected EnumAlphabet alphabet; + + public EdhocSulBuilderRA(EnumAlphabet alphabet) { + this.alphabet = alphabet; + } + @Override public AbstractSul build(SulConfig sulConfig, CleanupTasks cleanupTasks) { - return new EdhocSulRA(sulConfig, cleanupTasks).initialize(); + return new EdhocSulRA(sulConfig, cleanupTasks, alphabet).initialize(); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java index f6d744f5..e0f23f79 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; +import com.github.protocolfuzzing.edhocfuzzer.EnumAlphabet; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; @@ -41,12 +42,14 @@ public class EdhocSulRA implements AbstractSul timeoutMap = new EnumMap(MessageInputTypeRA.class); + protected EnumMap timeoutMap = new EnumMap( + MessageInputTypeRA.class); public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputCheckerRA outputChecker, EdhocMapperConnector edhocMapperConnector) { @@ -47,7 +51,7 @@ public EdhocInputMapperRA(MapperConfig mapperConfig, EdhocOutputCheckerRA output @Override public void sendMessage(EdhocProtocolMessage message, EdhocExecutionContextRA context) { if (message == null) { - throw new RuntimeException("Null message provided to EdhocInputMapper in sendMessage"); + throw new RuntimeException("Null message provided to EdhocInputMapperRA in sendMessage"); } // enable or disable content format @@ -62,27 +66,27 @@ public void sendMessage(EdhocProtocolMessage message, EdhocExecutionContextRA co @Override public void preSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context) { String symbolName = input.getBaseSymbol().getName(); - EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); + EdhocMapperState mapperState = context.getState(); switch (MessageInputTypeRA.valueOf(symbolName)) { case EDHOC_MESSAGE_1_INPUT: - if (session.isInitiator()) { + if (mapperState.getEdhocSessionPersistent().isInitiator()) { // Initiator by sending message 1 starts a new key exchange session // so previous session state must be cleaned unless reset is disabled - session.resetIfEnabled(); + mapperState.getEdhocSessionPersistent().resetIfEnabled(); } - updateConnectionId(session, input); + updateConnectionId(mapperState, input); break; case EDHOC_MESSAGE_2_INPUT: case EDHOC_MESSAGE_3_INPUT: case EDHOC_MESSAGE_4_INPUT: case OSCORE_APP_MESSAGE_INPUT: - updateConnectionId(session, input); + updateConnectionId(mapperState, input); break; case EDHOC_MESSAGE_3_OSCORE_APP_INPUT: - updateConnectionId(session, input); + updateConnectionId(mapperState, input); // construct Message3 in order to store it in session 'message3' field, // derive new oscore context and make Message3 available to oscore layer new MessageProcessorPersistent(context.getState()).writeMessage3(); @@ -155,23 +159,27 @@ public void postSendUpdate(PSymbolInstance input, EdhocExecutionContextRA contex * a randomly selected integer in the learner to a corresponding bytestring is * possible. */ - public void updateConnectionId(EdhocSessionPersistent session, PSymbolInstance input) { - + public void updateConnectionId(EdhocMapperState state, PSymbolInstance input) { + EdhocSessionPersistent session = state.getEdhocSessionPersistent(); LOGGER.info("Running updateConnectionId method"); LOGGER.info("Current ConnectionId: " + EdhocUtil.bytesToInt(session.getConnectionId())); - // for (DataValue dv : input.getParameterValues()) { + for (DataValue dv : input.getParameterValues()) { + + LOGGER.info("Datavalue: " + dv.toString()); + CBORObject value = CBORObject.FromObject(dv.getId()); + LOGGER.info("CBORObject version of DataValue id: " + value.toString()); + + session.setConnectionId(value.EncodeToBytes()); + LOGGER.info("ConnectionId after set: " + + EdhocUtil.bytesToInt(session.getConnectionId())); + } - // LOGGER.info("Datavalue: " + dv.toString()); - // if (dv.getType().equals(T_CI)) { - // CBORObject value = CBORObject.FromObject(dv.getId()); - // LOGGER.info("CBORObject version of DataValue id: " + value.toString()); + EdhocSessionPersistent new_session = state.getEdhocSessionPersistent(); + byte[] new_CI = session.getConnectionId(); - // // session.setConnectionId(value.EncodeToBytes()); - // LOGGER.info("ConnectionId after set: " + - // EdhocUtil.bytesToInt(session.getConnectionId())); - // } - // } + state.setEdhocSessionPersistent(new_session); + state.updateEdhocSessionsPersistent(new_CI, new_session); } public long getTimeoutForSymbol(PSymbolInstance input) { diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index 0e821c81..2723c6de 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; +import com.github.protocolfuzzing.edhocfuzzer.EnumAlphabet; import com.github.protocolfuzzing.edhocfuzzer.MessageOutputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; @@ -15,7 +16,6 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapperRA; -import de.learnlib.ralib.data.DataType; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; @@ -31,18 +31,21 @@ public class EdhocOutputMapperRA EdhocMapperConnector edhocMapperConnector; + EnumAlphabet alphabet; + // FIXME: Suppressing the warning that outputBuilder shadows the same name in // parent. // If the enum approach is taken and is standardized this will be solved. - // Hack to allow building unsupportedMessage/unkownMessage. + // Hack to allow building unsupportedMessage/unknownMessage. @SuppressWarnings("HidingField") EdhocOutputBuilderRA outputBuilder; public EdhocOutputMapperRA(MapperConfig mapperConfig, EdhocOutputBuilderRA edhocOutputBuilder, - EdhocMapperConnector edhocMapperConnector) { + EdhocMapperConnector edhocMapperConnector, EnumAlphabet alphabet) { super(mapperConfig, edhocOutputBuilder); this.edhocMapperConnector = edhocMapperConnector; this.outputBuilder = edhocOutputBuilder; + this.alphabet = alphabet; } @Override @@ -96,7 +99,6 @@ public PSymbolInstance receiveOutput(EdhocExecutionContextRA context) { protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] responsePayload) { String messageType = edhocMapperState.isCoapClient() ? "response" : "request"; - // DataType T_CI = new DataType("C_I", Integer.class); if (edhocMapperConnector.receivedMsg3WithOscoreApp()) { // received Message3_OSCORE_APP, from which application data propagated and @@ -110,9 +112,9 @@ protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] re OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT); LOGGER.info("Reading as EDHOC Message 3 Oscore App, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); + DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceFromOutputSymbol(base); + return instanceFromOutputSymbol(base, value); } if (edhocMapperConnector.receivedOscoreAppMessage()) { @@ -141,13 +143,12 @@ protected PSymbolInstance appOutput(EdhocMapperState edhocMapperState, byte[] re protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[] responsePayload) { MessageProcessorPersistent messageProcessorPersistent = new MessageProcessorPersistent(edhocMapperState); boolean ok; - // DataType T_CI = new DataType("C_I", Integer.class); switch (messageProcessorPersistent.messageTypeFromStructure(responsePayload)) { case EDHOC_ERROR_MESSAGE -> { ok = messageProcessorPersistent.readErrorMessage(responsePayload); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_ERROR_MESSAGE_OUTPUT); - return instanceAfterCheck(ok, base, new DataValue[] {}); + return instanceAfterCheck(ok, base); } case EDHOC_MESSAGE_1 -> { @@ -157,8 +158,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_1_OUTPUT); LOGGER.info("Reading as Message 1, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); - return instanceAfterCheck(ok, base); + DataValue value = new DataValue(base.getPtypes()[0], parameter); + return instanceAfterCheck(ok, base, value); } case EDHOC_MESSAGE_2 -> { @@ -168,8 +169,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); LOGGER.info("Reading as Message 2, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); - return instanceAfterCheck(ok, base); + DataValue value = new DataValue(base.getPtypes()[0], parameter); + return instanceAfterCheck(ok, base, value); } case EDHOC_MESSAGE_3_OR_4 -> { @@ -182,8 +183,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT); LOGGER.info("Reading as Message 3, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); - return instanceFromOutputSymbol(base); + DataValue value = new DataValue(base.getPtypes()[0], parameter); + return instanceFromOutputSymbol(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); @@ -191,8 +192,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT); LOGGER.info("Reading as Message 4, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); - return instanceAfterCheck(ok, base); + DataValue value = new DataValue(base.getPtypes()[0], parameter); + return instanceAfterCheck(ok, base, value); } case EDHOC_MESSAGE_2_OR_3_OR_4 -> { @@ -204,8 +205,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); LOGGER.info("Reading as Message 2, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); - return instanceFromOutputSymbol(base); + DataValue value = new DataValue(base.getPtypes()[0], parameter); + return instanceFromOutputSymbol(base, value); } ok = messageProcessorPersistent.readMessage3(responsePayload); @@ -214,8 +215,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT); LOGGER.info("Reading as Message 3, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); - return instanceFromOutputSymbol(base); + DataValue value = new DataValue(base.getPtypes()[0], parameter); + return instanceFromOutputSymbol(base, value); } ok = messageProcessorPersistent.readMessage4(responsePayload); @@ -223,8 +224,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT); LOGGER.info("Reading as Message 4, DataValue: " + parameter); - // DataValue value = new DataValue(T_CI, parameter); - return instanceAfterCheck(ok, base); + DataValue value = new DataValue(base.getPtypes()[0], parameter); + return instanceAfterCheck(ok, base, value); } default -> { @@ -294,8 +295,8 @@ protected PSymbolInstance coapError() { } } - protected OutputSymbol newBaseSymbol(MessageOutputTypeRA outputName, DataType... dataTypes) { - return new OutputSymbol(outputName.name(), dataTypes); + protected OutputSymbol newBaseSymbol(MessageOutputTypeRA enum_member) { + return (OutputSymbol) alphabet.getPSymbol(enum_member); } protected PSymbolInstance instanceAfterCheck(boolean successfulCheck, OutputSymbol baseSymbol, From 967ee58e5580d3cbf8be58ba5de1e31413241d48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 7 May 2024 12:45:20 +0200 Subject: [PATCH 069/169] Update beautify model for register automata --- scripts/beautify_model.py | 151 +++++++++++------- scripts/beautify_model.sh | 16 +- scripts/replacementsRA.txt | 26 +++ .../edhocfuzzer/EdhocDotProcessor.java | 21 ++- 4 files changed, 142 insertions(+), 72 deletions(-) create mode 100644 scripts/replacementsRA.txt diff --git a/scripts/beautify_model.py b/scripts/beautify_model.py index aacae342..1b4504cf 100644 --- a/scripts/beautify_model.py +++ b/scripts/beautify_model.py @@ -1,7 +1,6 @@ import argparse import pydot - def create_pattern_dct(pattern_string): pattern_dct = { 'i': set(), @@ -130,7 +129,7 @@ def replace_symbol(s): def replace_label(label): if label == "" or ' / ' not in label: return label - + i, o = label.strip('\' "').split(' / ') ri = replace_symbol(i) ro = replace_symbol(o) @@ -145,8 +144,7 @@ def replace_label(label): for node in graph.get_nodes(): name = node.get_name() if name.startswith('s'): - if shorten_node_names: - node.set_label('"' + node.get_label().strip('\' "').lstrip('s') + '"') + node.set_label('"' + node.get_label().strip('\' "').lstrip('s') + '"') elif name != initial_hidden_node_name: if graph.del_node(node): @@ -320,6 +318,31 @@ def format_and_write_dot_string(graph_raw_string, initial_hidden_node_name, file # other non-empty line f.write(prefix + line + '\n') +def beautify_ra(args): + replacement_dict = read_replacement_file(args.r, args.replacement_sep) + + input_file = args.i + output_file = args.i if args.overwrite_dot_input else args.i.replace('.dot', 'btf.dot') + + with open(input_file, 'r') as dot_file: + lines = dot_file.readlines() + + for old, new in replacement_dict.items(): + for index, line in enumerate(lines): + lines[index] = line.replace(old, new) + + with open(output_file, 'w') as dot_file: + dot_file.writelines(lines) + + graph, *_ = pydot.graph_from_dot_file(output_file) + + prefix = args.o.replace('.dot', '') if args.o else (args.i.replace('.dot', '') + 'btf') + other_format_pairs = [ (prefix + '.' + fmt, fmt) for fmt in args.other_formats ] + for graph_name, format in other_format_pairs: + graph.write(graph_name, format=format) + print(f"Written {graph_name} with {format} formatting.") + + if __name__ == '__main__': parser = argparse.ArgumentParser( @@ -360,73 +383,77 @@ def format_and_write_dot_string(graph_raw_string, initial_hidden_node_name, file "with the output dot file in case they have the same name") parser.add_argument('--no-dot-output', default=False, action='store_true', help='Do not output the resulting .dot file') parser.add_argument('--other-formats', nargs='*', default=['pdf'], help='Additional output formats other than .dot') + parser.add_argument('--register-automata', default=False, action='store_true', help="Beautify a Register Automata instead of a Mealy Machine.") + parser.set_defaults(register_automata=False) args = parser.parse_args() + if args.register_automata: + beautify_ra(args) + else: + def set_if_default(var, new, default): + return new if var == default else var + + # check same edges op + if args.same_edges_op not in ['stack', 'merge']: + print(f"Invalid --same-edge-op value '{args.same_edges_op}'. Available: stack, merge.") + exit(1) + + if args.html_like_labels: + args.stack_sep = set_if_default(args.stack_sep, '
', '\l ') + args.merge_label_sep = set_if_default(args.merge_label_sep, '
', '\l ') + args.end_padding = set_if_default(args.end_padding, 1, 5) + + # print some visual separators in command line + cmd_line_sep = 100 * '=' + print(cmd_line_sep) + + remove_dct = create_pattern_dct(args.remove_edge_pattern) + original_label_symbol_dct = create_pattern_dct_with_label_symbol(args.set_label_symbol_pattern) + replacement_dct = read_replacement_file(args.r, args.replacement_sep) + + nodes, edge_info_dct, initial_edge, label_symbol_dct = get_info_from_graph( + args.i, not args.disable_shorten_nodes, remove_dct, original_label_symbol_dct, + replacement_dct, args.start_node_name, args.start_edge_label) + + label_info_dct = { + 'same_edges_op': args.same_edges_op, + 'stack_sep': args.stack_sep, + 'merge_input_sep': args.merge_input_sep, + 'merge_label_sep': args.merge_label_sep, + 'start_padding': args.start_padding * " ", + 'end_padding': args.end_padding * " ", + 'html_like_labels': args.html_like_labels + } - def set_if_default(var, new, default): - return new if var == default else var - - # check same edges op - if args.same_edges_op not in ['stack', 'merge']: - print(f"Invalid --same-edge-op value '{args.same_edges_op}'. Available: stack, merge.") - exit(1) - - if args.html_like_labels: - args.stack_sep = set_if_default(args.stack_sep, '
', '\l ') - args.merge_label_sep = set_if_default(args.merge_label_sep, '
', '\l ') - args.end_padding = set_if_default(args.end_padding, 1, 5) - - # print some visual separators in command line - cmd_line_sep = 100 * '=' - print(cmd_line_sep) - - remove_dct = create_pattern_dct(args.remove_edge_pattern) - original_label_symbol_dct = create_pattern_dct_with_label_symbol(args.set_label_symbol_pattern) - replacement_dct = read_replacement_file(args.r, args.replacement_sep) - - nodes, edge_info_dct, initial_edge, label_symbol_dct = get_info_from_graph( - args.i, not args.disable_shorten_nodes, remove_dct, original_label_symbol_dct, - replacement_dct, args.start_node_name, args.start_edge_label) - - label_info_dct = { - 'same_edges_op': args.same_edges_op, - 'stack_sep': args.stack_sep, - 'merge_input_sep': args.merge_input_sep, - 'merge_label_sep': args.merge_label_sep, - 'start_padding': args.start_padding * " ", - 'end_padding': args.end_padding * " ", - 'html_like_labels': args.html_like_labels - } - - new_graph = create_new_graph(nodes, edge_info_dct, initial_edge, label_info_dct, label_symbol_dct) + new_graph = create_new_graph(nodes, edge_info_dct, initial_edge, label_info_dct, label_symbol_dct) - prefix = args.o.replace('.dot', '') if args.o else (args.i.replace('.dot', '') + 'btf') - new_graph_dot_name = prefix + '.dot' - other_format_pairs = [ (prefix + '.' + fmt, fmt) for fmt in args.other_formats ] + prefix = args.o.replace('.dot', '') if args.o else (args.i.replace('.dot', '') + 'btf') + new_graph_dot_name = prefix + '.dot' + other_format_pairs = [ (prefix + '.' + fmt, fmt) for fmt in args.other_formats ] - print(cmd_line_sep) + print(cmd_line_sep) - if not args.no_dot_output: - if args.i == new_graph_dot_name: - print("Output dot file name coincides with the input dot file name") + if not args.no_dot_output: + if args.i == new_graph_dot_name: + print("Output dot file name coincides with the input dot file name") - if not args.overwrite_dot_input: - new_graph_dot_name = new_graph_dot_name.replace('.dot', '') + 'btf.dot' - print(f"The new output dot file name will be {new_graph_dot_name}") - print("Add --overwrite-dot-input option to overwrite the input dot file") - else: - print("Option --overwrite-dot-input is applicable") - print("Input dot file will be overwritten by output dot file") + if not args.overwrite_dot_input: + new_graph_dot_name = new_graph_dot_name.replace('.dot', '') + 'btf.dot' + print(f"The new output dot file name will be {new_graph_dot_name}") + print("Add --overwrite-dot-input option to overwrite the input dot file") + else: + print("Option --overwrite-dot-input is applicable") + print("Input dot file will be overwritten by output dot file") - print(cmd_line_sep) + print(cmd_line_sep) - # alternative without formatting: new_graph.write(new_graph_dot_name, format='raw') - format_and_write_dot_string(new_graph.to_string(), args.start_node_name, new_graph_dot_name) - print(f"Written {new_graph_dot_name}") + # alternative without formatting: new_graph.write(new_graph_dot_name, format='raw') + format_and_write_dot_string(new_graph.to_string(), args.start_node_name, new_graph_dot_name) + print(f"Written {new_graph_dot_name}") - for graph_name, fmt in other_format_pairs: - new_graph.write(graph_name, format=fmt) - print(f"Written {graph_name}") + for graph_name, fmt in other_format_pairs: + new_graph.write(graph_name, format=fmt) + print(f"Written {graph_name}") - print(cmd_line_sep) + print(cmd_line_sep) diff --git a/scripts/beautify_model.sh b/scripts/beautify_model.sh index 1341180e..4f630239 100755 --- a/scripts/beautify_model.sh +++ b/scripts/beautify_model.sh @@ -2,15 +2,17 @@ SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" readonly SCRIPT_DIR -readonly REPL_FILE="${SCRIPT_DIR}/replacements.txt" +REPL_FILE="${SCRIPT_DIR}/replacements.txt" +REPL_FILE_RA="${SCRIPT_DIR}/replacementsRA.txt" readonly PY_SCRIPT="${SCRIPT_DIR}/beautify_model.py" start_edge_label="" +RA_FLAG="" # uncomment next line to remove all edges with transitions '_ / UNSUPPORTED_MESSAGE' # remove_edge_pattern="o_UNSUPPORTED_MESSAGE" -if [[ ${#} = 0 ]]; then - echo "Usage: ${0##*/} [-cI|--clientInitiator] [-cR|--clientResponder] dot_model" +if [ ${#} = 0 ]; then + echo "Usage: ${0##*/} [-cI|--clientInitiator] [-cR|--clientResponder] [-RA|--registerAutomata] dot_model" else while [[ "${1}" =~ ^- ]]; do case ${1} in -cI | --clientInitiator ) @@ -19,6 +21,10 @@ else -cR | --clientResponder ) start_edge_label='"TIMEOUT / COAP_EMPTY_MESSAGE"' ;; + -RA | --registerAutomata ) + REPL_FILE=${REPL_FILE_RA} + RA_FLAG='--register-automata' + ;; * ) echo "Unsupported option ${1}" ;; @@ -36,5 +42,7 @@ else exit 1 fi - python3 "${PY_SCRIPT}" "${1}" -r "${REPL_FILE}" --start-edge-label "${start_edge_label}" #--remove-edge-pattern "${remove_edge_pattern}" + echo "RA_FLAG: ${RA_FLAG} REPL_FILE: ${REPL_FILE}" + + python3 "${PY_SCRIPT}" "${1}" -r "${REPL_FILE}" --start-edge-label "${start_edge_label}" ${RA_FLAG} #--remove-edge-pattern "${remove_edge_pattern}" fi diff --git a/scripts/replacementsRA.txt b/scripts/replacementsRA.txt new file mode 100644 index 00000000..37a5c47b --- /dev/null +++ b/scripts/replacementsRA.txt @@ -0,0 +1,26 @@ +EDHOC_MESSAGE_1_INPUT -> M1 +EDHOC_MESSAGE_2_INPUT -> M2 +EDHOC_MESSAGE_3_INPUT -> M3 +EDHOC_MESSAGE_4_INPUT -> M4 +EDHOC_ERROR_MESSAGE_INPUT -> ERRᴇ +EDHOC_MESSAGE_3_OSCORE_APP_INPUT -> M3APPᴏ +OSCORE_APP_MESSAGE_INPUT -> APPᴏ +COAP_APP_MESSAGE_INPUT -> APPᴄ +COAP_EMPTY_MESSAGE_INPUT -> EMPᴄ +EDHOC_MESSAGE_1_OUTPUT -> M1 +EDHOC_MESSAGE_2_OUTPUT -> M2 +EDHOC_MESSAGE_3_OUTPUT -> M3 +EDHOC_MESSAGE_4_OUTPUT -> M4 +EDHOC_ERROR_MESSAGE_OUTPUT -> ERRᴇ +EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT -> M3APPᴏ +OSCORE_APP_MESSAGE_OUTPUT -> APPᴏ +COAP_APP_MESSAGE_OUTPUT -> APPᴄ +COAP_MESSAGE_OUTPUT -> MSGᴄ +COAP_ERROR_MESSAGE_OUTPUT -> ERRᴄ +COAP_EMPTY_MESSAGE_OUTPUT -> EMPᴄ +UNSUPPORTED_MESSAGE -> ɴᴀ +UNSUCCESSFUL_MESSAGE -> ⨯ +UNKNOWN_MESSAGE -> ? +SOCKET_CLOSED -> ⊥ +TIMEOUT -> ∅ +DISABLED -> DIS \ No newline at end of file diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java index a1557619..3dbbdef2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java @@ -2,6 +2,8 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.LearnerResult; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.config.StateFuzzerEnabler; import org.apache.logging.log4j.LogManager; @@ -54,17 +56,24 @@ public static void beautify(LearnerResult learnerResult) { // when Fuzzer is Initiator then SUL is Responder // when Fuzzer is Responder then SUL is Initiator - String cIR = isFuzzerInitiator ? "--clientResponder" : "--clientInitiator"; - commandArgList.add(1, cIR); + String argument = isFuzzerInitiator ? "--clientResponder" : "--clientInitiator"; + + commandArgList.add(1, argument); + } + + LearnerConfig learnerConfig = stateFuzzerEnabler.getLearnerConfig(); + if (learnerConfig instanceof LearnerConfigRA) { + commandArgList.add(1, "--registerAutomata"); } try { LOGGER.info("Running {}", script); + LOGGER.info("Shell script arguments {}", commandArgList); new ProcessBuilder(commandArgList) - .redirectErrorStream(true) - .redirectOutput(ProcessBuilder.Redirect.INHERIT) - .start() - .waitFor(); + .redirectErrorStream(true) + .redirectOutput(ProcessBuilder.Redirect.INHERIT) + .start() + .waitFor(); } catch (IOException | InterruptedException e) { LOGGER.warn("Could not beautify {}: {}", learnedModelPath, e.getMessage()); } From 8612c6399472155cbcc33ebcc635679691618691 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 7 May 2024 12:51:02 +0200 Subject: [PATCH 070/169] Update the package path to MessageProcessorPersistant in the logger configuration --- src/main/resources/log4j2.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index f6849bf7..4af86276 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -6,7 +6,7 @@ - + @@ -33,7 +33,7 @@ - + From c519d4a4650725dd2223a84ab1de639645643a35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 7 May 2024 13:01:41 +0200 Subject: [PATCH 071/169] Add RA configurations for all implementations and update CI --- .github/workflows/ci.yml | 145 +++++++++++------- experiments/args/lakers/client_ra | 18 ++- experiments/args/lakers/server_ra | 13 +- experiments/args/rise/client_m4_app_ra | 78 ++++++++++ experiments/args/rise/client_ra | 78 ++++++++++ experiments/args/rise/server_m4_app_ra | 7 +- experiments/args/sifis-home/client_phase_1_ra | 79 ++++++++++ experiments/args/sifis-home/client_phase_2_ra | 79 ++++++++++ experiments/args/sifis-home/client_phase_3_ra | 79 ++++++++++ experiments/args/sifis-home/client_phase_4_ra | 79 ++++++++++ experiments/args/sifis-home/server_phase_1_ra | 83 ++++++++++ experiments/args/sifis-home/server_phase_2_ra | 83 ++++++++++ experiments/args/sifis-home/server_phase_3_ra | 82 ++++++++++ experiments/args/sifis-home/server_phase_4_ra | 82 ++++++++++ .../client_linux_edhoc_oscore_ra | 81 ++++++++++ .../args/uoscore-uedhoc/client_linux_edhoc_ra | 69 +++++++++ .../server_linux_edhoc_oscore_ra | 82 ++++++++++ .../args/uoscore-uedhoc/server_linux_edhoc_ra | 76 +++++++++ 18 files changed, 1218 insertions(+), 75 deletions(-) create mode 100644 experiments/args/rise/client_m4_app_ra create mode 100644 experiments/args/rise/client_ra create mode 100644 experiments/args/sifis-home/client_phase_1_ra create mode 100644 experiments/args/sifis-home/client_phase_2_ra create mode 100644 experiments/args/sifis-home/client_phase_3_ra create mode 100644 experiments/args/sifis-home/client_phase_4_ra create mode 100644 experiments/args/sifis-home/server_phase_1_ra create mode 100644 experiments/args/sifis-home/server_phase_2_ra create mode 100644 experiments/args/sifis-home/server_phase_3_ra create mode 100644 experiments/args/sifis-home/server_phase_4_ra create mode 100644 experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra create mode 100644 experiments/args/uoscore-uedhoc/client_linux_edhoc_ra create mode 100644 experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra create mode 100644 experiments/args/uoscore-uedhoc/server_linux_edhoc_ra diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index d2b332c8..955aeb30 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,6 +28,11 @@ jobs: ./scripts/setup_sul.sh lakers - name: Test Lakers Client + run: | + java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 + + - name: Test Lakers Client (RA) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/client_ra -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 @@ -59,7 +64,12 @@ jobs: - name: Test Lakers Server run: | - java -jar edhoc-fuzzer.jar @experiments/args/lakers/server_ra + java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 + ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 + + - name: Test Lakers Server (RA) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/lakers/server_ra -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 RISE-Client: @@ -87,6 +97,11 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 + + - name: Test RISE Client (m4_app, RA) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app_ra -roundLimit 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -113,58 +128,74 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 + + - name: Test RISE Server (m4_app, RA) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app_ra -roundLimit 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 + + SIFIS-HOME-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup SIFIS-HOME + run: ./scripts/setup_sul.sh sifis-home + + - name: Test SIFIS-HOME Client (phase_1) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 + + - name: Test SIFIS-HOME Client (phase_1, RA) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1_ra -roundLimit 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 + + SIFIS-HOME-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup SIFIS-HOME + run: ./scripts/setup_sul.sh sifis-home + + - name: Test SIFIS-HOME Server (phase_1) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 -# SIFIS-HOME-Client: -# if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} -# runs-on: ubuntu-latest -# strategy: -# fail-fast: true -# steps: -# - uses: actions/checkout@v6 -# - uses: actions/setup-java@v5 -# with: -# java-version: '21' -# distribution: 'temurin' -# - uses: ts-graphviz/setup-graphviz@v2 -# - name: Install pydot -# run: pip3 install pydot -# -# - name: Setup EDHOC-Fuzzer -# run: ./scripts/setup_fuzzer.sh -l -# -# - name: Setup SIFIS-HOME -# run: ./scripts/setup_sul.sh sifis-home -# -# - name: Test SIFIS-HOME Client (phase_1) -# run: | -# java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 -# ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 -# -# SIFIS-HOME-Server: -# if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} -# runs-on: ubuntu-latest -# strategy: -# fail-fast: true -# steps: -# - uses: actions/checkout@v6 -# - uses: actions/setup-java@v5 -# with: -# java-version: '21' -# distribution: 'temurin' -# - uses: ts-graphviz/setup-graphviz@v2 -# - name: Install pydot -# run: pip3 install pydot -# -# - name: Setup EDHOC-Fuzzer -# run: ./scripts/setup_fuzzer.sh -l -# -# - name: Setup SIFIS-HOME -# run: ./scripts/setup_sul.sh sifis-home -# -# - name: Test SIFIS-HOME Server (phase_1) -# run: | -# java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 -# ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 + - name: Test SIFIS-HOME Server (phase_1, RA) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1_ra -roundLimit 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 + uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -192,6 +223,11 @@ jobs: java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 + - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 + uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -217,3 +253,8 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 + + - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 \ No newline at end of file diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index 2198f2ad..34116f51 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -3,19 +3,23 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/lakers +experiments/results/client/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries --cacheTests --skipNonDetTests -alphabet -./src/main/resources/alphabet_ra.xml +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 ##### EdhocMapperConfig ##### @@ -40,7 +44,7 @@ KID # TestVector -testVectorJson -${authentication.test_vectors}/test_vectors_lakers.json +./experiments/authentication/test_vectors/test_vectors_lakers.json -testVectorJsonKey test_vector_p256 @@ -55,7 +59,7 @@ Responder -responseWait 300 -processDir -${models.clients}/lakers +./experiments/models/clients/lakers -cmd ./coapclient -startWait diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 052201ad..c144b142 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/lakers +experiments/results/server/lakers ##### LearnerConfig ##### @@ -12,21 +12,14 @@ RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries --cacheTests --skipNonDetTests -alphabet ./src/main/resources/small_alphabet.xml -maxDepthRA 4 --depth -4 --roundLimit -5 -probNewDataValue 0.5 -seed 7 --ros ##### EdhocMapperConfig ##### -protocolVersion @@ -50,7 +43,7 @@ KID # TestVector -testVectorJson -${authentication.test_vectors}/test_vectors_lakers.json +./experiments/authentication/test_vectors/test_vectors_lakers.json -testVectorJsonKey test_vector_p256 @@ -66,7 +59,7 @@ Initiator -responseWait 300 -processDir -${models.servers}/lakers +./experiments/models/servers/lakers -cmd ./coapserver -startWait diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra new file mode 100644 index 00000000..f7cdd402 --- /dev/null +++ b/experiments/args/rise/client_m4_app_ra @@ -0,0 +1,78 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/rise_m4_app + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_rise.json + +-testVectorJsonKey +test_vector_ed25519 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Responder + +-appCoapResource +helloWorld + + +##### SulConfig ##### +-responseWait +400 +-processDir +${models.clients}/rise +-cmd +java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocClient 5 +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra new file mode 100644 index 00000000..6dc284a3 --- /dev/null +++ b/experiments/args/rise/client_ra @@ -0,0 +1,78 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/rise + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_rise.json + +-testVectorJsonKey +test_vector_ed25519 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Responder + +-appCoapResource +helloWorld + + +##### SulConfig ##### +-responseWait +400 +-processDir +${models.clients}/rise +-cmd +java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocClient +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 77507bc9..7a09c529 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -12,19 +12,14 @@ RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries --cacheTests --skipNonDetTests -alphabet ./src/main/resources/small_alphabet.xml -maxDepthRA -10 --depth -10 +4 -probNewDataValue 0.5 -seed 7 --ros ##### EdhocMapperConfig ##### -protocolVersion diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra new file mode 100644 index 00000000..96335a89 --- /dev/null +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -0,0 +1,79 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/sifis-home_phase_1 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_ed25519_phases_1_3 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Responder + +-appCoapResource +light + + +##### SulConfig ##### +-responseWait +400 +-processDir +${models.clients}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Client -server coap://localhost:5683 1q +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra new file mode 100644 index 00000000..0101fe9b --- /dev/null +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -0,0 +1,79 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/sifis-home_phase_2 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_x25519_phases_2_4 + +-testVectorPeerKeyCurve +X25519 + +-edhocRole +Responder + +-appCoapResource +light + + +##### SulConfig ##### +-responseWait +400 +-processDir +${models.clients}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase2Client -server coap://localhost:5683 1q +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra new file mode 100644 index 00000000..206df123 --- /dev/null +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -0,0 +1,79 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/sifis-home_phase_3 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_ed25519_phases_1_3 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Responder + +-appCoapResource +light + + +##### SulConfig ##### +-responseWait +400 +-processDir +${models.clients}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase3Client -server coap://localhost:5683 1q +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra new file mode 100644 index 00000000..87685670 --- /dev/null +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -0,0 +1,79 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/sifis-home_phase_4 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_x25519_phases_2_4 + +-testVectorPeerKeyCurve +X25519 + +-edhocRole +Responder + +-appCoapResource +light + + +##### SulConfig ##### +-responseWait +400 +-processDir +${models.clients}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase4Client -server coap://localhost:5683 1q +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra new file mode 100644 index 00000000..f6ecea93 --- /dev/null +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -0,0 +1,83 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers}/sifis-home_phase_1 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_ed25519_phases_1_3 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Initiator + +-appCoapResource +light + +-appMessageCodeToCoapServer +POST + +-appMessagePayloadToCoapServer +1 + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.servers}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Server +-startWait +400 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5694 diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra new file mode 100644 index 00000000..e594b4fa --- /dev/null +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -0,0 +1,83 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers}/sifis-home_phase_2 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_x25519_phases_2_4 + +-testVectorPeerKeyCurve +X25519 + +-edhocRole +Initiator + +-appCoapResource +light + +-appMessageCodeToCoapServer +POST + +-appMessagePayloadToCoapServer +1 + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.servers}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase2Server +-startWait +400 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5695 diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra new file mode 100644 index 00000000..860f8340 --- /dev/null +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -0,0 +1,82 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers}/sifis-home_phase_3 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_ed25519_phases_1_3 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Initiator + +-appCoapResource +light + +-appMessageCodeToCoapServer +POST + +-appMessagePayloadToCoapServer +1 + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.servers}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase3Server +-startWait +400 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5696 diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra new file mode 100644 index 00000000..7d8beb2d --- /dev/null +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -0,0 +1,82 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers}/sifis-home_phase_4 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_x25519_phases_2_4 + +-testVectorPeerKeyCurve +X25519 + +-edhocRole +Initiator + +-appCoapResource +light + +-appMessageCodeToCoapServer +POST + +-appMessagePayloadToCoapServer +1 + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.servers}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase4Server +-startWait +400 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5697 diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra new file mode 100644 index 00000000..0ea5fb62 --- /dev/null +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -0,0 +1,81 @@ +state-fuzzer-client + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/uoscore-uedhoc_linux_edhoc_oscore + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v16 +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_v16_p256.json + +-testVectorJsonKey +test_vector_1 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Responder + +-appCoapResource +tv1 + +-disableCXCorrelation + +-forceOscoreSenderId +01 + +-forceOscoreRecipientId +[] + + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.clients}/uoscore-uedhoc +-cmd +./linux-edhoc-oscore-initiator-client +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_ra new file mode 100644 index 00000000..4c7045bd --- /dev/null +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_ra @@ -0,0 +1,69 @@ +state-fuzzer-client + +##### StateFuzzerConfig ##### +-output +${results.learning.clients}/uoscore-uedhoc_linux_edhoc + + +##### LearnerConfig ##### +-learningAlgorithm +TTT +-equivalenceAlgorithms +W_METHOD,WP_METHOD +-logQueries +-cacheTests +-skipNonDetTests + + +##### EdhocMapperConfig ##### +-protocolVersion +v16 +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_v16_p256.json + +-testVectorJsonKey +test_vector_1 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Responder + +-appCoapResource +tv1 + +-disableCXCorrelation + + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.clients}/uoscore-uedhoc +-cmd +./linux-edhoc-initiator +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra new file mode 100644 index 00000000..38bf202d --- /dev/null +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -0,0 +1,82 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers}/uoscore-uedhoc_linux_edhoc_oscore + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v16 +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_v16_p256.json + +-testVectorJsonKey +test_vector_1 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Initiator + +-appCoapResource +tv1 + +-disableCXCorrelation + +-forceOscoreSenderId +[] + +-forceOscoreRecipientId +01 + + +##### SulConfig ##### +-responseWait +3000 +-processDir +${models.servers}/uoscore-uedhoc +-cmd +./linux-edhoc-oscore-responder-server +-startWait +50 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra new file mode 100644 index 00000000..0e0615eb --- /dev/null +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -0,0 +1,76 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers}/uoscore-uedhoc_linux_edhoc + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/small_alphabet.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v16 +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_v16_p256.json + +-testVectorJsonKey +test_vector_1 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Initiator + +-appCoapResource +tv1 + +-disableCXCorrelation + + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.servers}/uoscore-uedhoc/ +-cmd +./linux-edhoc-responder +-startWait +50 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 From 1f1c39112ae079acca755c0ccf04930f588fbf0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 8 May 2024 09:39:52 +0200 Subject: [PATCH 072/169] Move EnumAlphabet and related parts to PSF Co-authored-by: Linus Olofsson --- .../edhocfuzzer/AlphabetDummyBuilder.java | 42 ----------- .../edhocfuzzer/EnumAlphabet.java | 70 ------------------- .../edhocfuzzer/MultiBuilderRA.java | 45 ++---------- .../edhocfuzzer/PSFOutputSymbols.java | 13 ---- .../sul/core/EdhocSulBuilderRA.java | 2 +- .../components/sul/core/EdhocSulRA.java | 2 +- .../mapper/mappers/EdhocInputMapperRA.java | 2 +- .../mapper/mappers/EdhocOutputMapperRA.java | 4 +- .../symbols/inputs}/MessageInputTypeRA.java | 2 +- .../symbols/outputs/EdhocOutputBuilderRA.java | 2 +- .../symbols/outputs}/MessageOutputTypeRA.java | 3 +- 11 files changed, 14 insertions(+), 173 deletions(-) delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java rename src/main/java/com/github/protocolfuzzing/edhocfuzzer/{ => components/sul/mapper/symbols/inputs}/MessageInputTypeRA.java (77%) rename src/main/java/com/github/protocolfuzzing/edhocfuzzer/{ => components/sul/mapper/symbols/outputs}/MessageOutputTypeRA.java (76%) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java deleted file mode 100644 index 7a93df68..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetDummyBuilder.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer; - -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilder; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetSerializerException; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfig; -import net.automatalib.alphabet.Alphabet; - -import java.io.IOException; -import java.io.InputStream; - -public class AlphabetDummyBuilder implements AlphabetBuilder { - - private Alphabet alphabet; - - public AlphabetDummyBuilder(Alphabet alphabet) { - this.alphabet = alphabet; - } - - @Override - public Alphabet build(LearnerConfig learnerConfig) { - return alphabet; - } - - @Override - public String getAlphabetFileExtension() { - // TODO Auto-generated method stub - return null; - } - - @Override - public InputStream getAlphabetFileInputStream(LearnerConfig learnerConfig) { - // TODO Auto-generated method stub - return null; - } - - @Override - public void exportAlphabetToFile(String outputFileName, Alphabet alphabet) - throws IOException, AlphabetSerializerException { - // TODO Auto-generated method stub - - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java deleted file mode 100644 index 7445f001..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EnumAlphabet.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer; - -import de.learnlib.ralib.data.DataType; -import de.learnlib.ralib.words.*; -import net.automatalib.alphabet.ListAlphabet; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Map; - -public class EnumAlphabet extends ListAlphabet { - - private Map map; - - private EnumAlphabet(Map symbols) { - super(new ArrayList(symbols.values())); - this.map = symbols; - } - - public > ParameterizedSymbol getPSymbol(T enum_member) { - - ParameterizedSymbol symbol = map.get(enum_member.name()); - if (symbol == null) { - throw new RuntimeException("The symbol " + symbol - + " is not present in the alphabet map, the map may not have been initialised properly."); - } - return symbol; - } - - public static class Builder { - - private HashMap map = new HashMap<>(); - - public Builder() { - }; - - public > Builder withInput(T enum_member, DataType... dataTypes) { - String name = enum_member.name(); - InputSymbol input = new InputSymbol(name, dataTypes); - map.put(name, input); - return this; - } - - public > Builder withOutput(T enum_member, DataType... dataTypes) { - String name = enum_member.name(); - OutputSymbol output = new OutputSymbol(name, dataTypes); - map.put(name, output); - return this; - } - - public > Builder withInputs(T[] enum_members) { - for (T e : enum_members) { - map.put(e.name(), new InputSymbol(e.name())); - } - return this; - } - - public > Builder withOutputs(T[] enum_members) { - for (T e : enum_members) { - map.put(e.name(), new OutputSymbol(e.name())); - } - return this; - } - - public EnumAlphabet build() { - return new EnumAlphabet(map); - } - - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 87865617..88bd5427 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -5,6 +5,11 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulServerConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputTypeRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputTypeRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderWrapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.PSFOutputSymbols; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.statistics.RegisterAutomatonWrapper; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; @@ -33,7 +38,6 @@ import de.learnlib.ralib.tools.theories.IntegerEqualityTheory; import de.learnlib.ralib.words.PSymbolInstance; import de.learnlib.ralib.words.ParameterizedSymbol; -import org.eclipse.californium.edhoc.SharedSecretCalculation; import java.util.LinkedHashMap; import java.util.Map; @@ -70,7 +74,7 @@ public class MultiBuilderRA implements .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT, T_CI) .build(); - protected AlphabetDummyBuilder dummyBuilder = new AlphabetDummyBuilder( + protected AlphabetBuilderWrapper dummyBuilder = new AlphabetBuilderWrapper( alphabet); protected SulBuilder sulBuilder = new EdhocSulBuilderRA( @@ -98,7 +102,6 @@ public StateFuzzerServerConfig buildServerConfig() { @Override public StateFuzzer> build( StateFuzzerEnabler stateFuzzerEnabler) { - // testOneKeyBuild(); @SuppressWarnings("rawtypes") final Map teachers = new LinkedHashMap<>(); teachers.put(T_CI, new IntegerEqualityTheory(T_CI)); @@ -121,40 +124,4 @@ public TimingProbe build(TimingProbeEnabler timingProbeEnabler) { // sulBuilder, sulWrapper).initialize(); return null; // FIXME: If this is used we have problems. } - - public static void testOneKeyBuild() { - byte[] invalidG_Y = new byte[] { (byte) 0x00, (byte) 0x33, (byte) 0x69, (byte) 0xf1, (byte) 0xa6, - (byte) 0x0d, (byte) 0x17, (byte) 0xe8, (byte) 0x51, (byte) 0x15, - (byte) 0x88, (byte) 0x67, (byte) 0xdd, (byte) 0x33, (byte) 0xeb, (byte) 0xad, - (byte) 0x87, (byte) 0x19, (byte) 0xeb, (byte) 0xb0, - (byte) 0xd5, (byte) 0xe9, (byte) 0x08, (byte) 0xa3, (byte) 0xeb, (byte) 0x6d, - (byte) 0x5f, (byte) 0x48, (byte) 0x12, (byte) 0xb5, - (byte) 0x85, (byte) 0xdf }; - - byte[] validG_Y = new byte[] { (byte) 0xf7, (byte) 0x02, (byte) 0xe5, (byte) 0xee, (byte) 0x70, - (byte) 0x46, (byte) 0xb4, (byte) 0xea, (byte) 0xfe, (byte) 0x7a, - (byte) 0x31, (byte) 0x0d, (byte) 0x2f, (byte) 0xff, (byte) 0x04, (byte) 0xba, - (byte) 0xc6, (byte) 0xa5, (byte) 0x96, (byte) 0x9a, - (byte) 0x84, (byte) 0x39, (byte) 0xf5, (byte) 0x4a, (byte) 0xd5, (byte) 0xba, - (byte) 0x3a, (byte) 0x26, (byte) 0xcc, (byte) 0xe8, - (byte) 0x7b, (byte) 0xb0 }; - System.err.println("Key beggining with non-zero byte:"); - System.err.println("Curve25519"); - System.err.println(SharedSecretCalculation.buildCurve25519OneKey(null, validG_Y) == null ? "Key null" - : "Key not null"); - - System.err.println("ECDSA256"); - System.err.println( - SharedSecretCalculation.buildEcdsa256OneKey(null, validG_Y, null) == null ? "Key null" - : "Key not null"); - System.err.println("Key beginning with zero byte:"); - System.err.println("Curve25519"); - System.err.println(SharedSecretCalculation.buildCurve25519OneKey(null, invalidG_Y) == null ? "Key null" - : "Key not null"); - System.err.println("ECDSA256"); - System.err.println( - SharedSecretCalculation.buildEcdsa256OneKey(null, invalidG_Y, null) == null ? "Key null" - : "Key not null"); - System.exit(0); - } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java deleted file mode 100644 index 3806b32b..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/PSFOutputSymbols.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer; - -/** - * Symbols from the Protocol State Fuzzer - */ -public enum PSFOutputSymbols { - UNSUPPORTED_MESSAGE, - UNSUCCESSFUL_MESSAGE, - TIMEOUT, - UNKNOWN, - SOCKET_CLOSED, - DISABLED -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java index c4b05f54..e1a55189 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java @@ -1,7 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; -import com.github.protocolfuzzing.edhocfuzzer.EnumAlphabet; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java index e0f23f79..d92f1041 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java @@ -1,6 +1,5 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; -import com.github.protocolfuzzing.edhocfuzzer.EnumAlphabet; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; @@ -17,6 +16,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index b7d308ea..13f6d396 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -1,6 +1,5 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; -import com.github.protocolfuzzing.edhocfuzzer.MessageInputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; @@ -18,6 +17,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.EdhocMapperConnector; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index 2723c6de..b51be3a6 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -1,7 +1,5 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers; -import com.github.protocolfuzzing.edhocfuzzer.EnumAlphabet; -import com.github.protocolfuzzing.edhocfuzzer.MessageOutputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; @@ -14,8 +12,10 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputTypeRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapperRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageInputTypeRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/MessageInputTypeRA.java similarity index 77% rename from src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageInputTypeRA.java rename to src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/MessageInputTypeRA.java index bdf21031..a777f500 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageInputTypeRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/MessageInputTypeRA.java @@ -1,4 +1,4 @@ -package com.github.protocolfuzzing.edhocfuzzer; +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; public enum MessageInputTypeRA { EDHOC_MESSAGE_1_INPUT, diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java index 87768e78..6b73b3f1 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java @@ -1,6 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; -import com.github.protocolfuzzing.edhocfuzzer.PSFOutputSymbols; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.PSFOutputSymbols; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputTypeRA.java similarity index 76% rename from src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java rename to src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputTypeRA.java index ea42b2a2..b4a828c5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MessageOutputTypeRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputTypeRA.java @@ -1,4 +1,4 @@ -package com.github.protocolfuzzing.edhocfuzzer; +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; /** * Messages that can be received. @@ -15,5 +15,4 @@ public enum MessageOutputTypeRA { COAP_MESSAGE_OUTPUT, COAP_ERROR_MESSAGE_OUTPUT, COAP_EMPTY_MESSAGE_OUTPUT - // The PSF specific symbols like timeout now lives in the PSFOutputSymbols } From 88d1a2b5f17af1a279a37a8f99b27ded07d4f861 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 21 May 2024 14:34:10 +0200 Subject: [PATCH 073/169] Remove automatalib since it is no longer needed with EnumAlphabet in PSF --- pom.xml | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/pom.xml b/pom.xml index 26058293..c9dec380 100644 --- a/pom.xml +++ b/pom.xml @@ -78,15 +78,6 @@ runtime - - - net.automatalib.distribution - automata-distribution - 0.11.0 - pom - import - - de.learnlib @@ -166,18 +157,6 @@ guava ${guava.version} - - - - net.automatalib - automata-core - - - - - net.automatalib - automata-api - @@ -217,6 +196,10 @@ de.learnlib:learnlib-api:jar:*
+ + + net.automatalib:automata-api:jar:* +
From fdffb5c9e2ae8e63ad679dfbb4226c6ecd293d5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 21 May 2024 14:47:49 +0200 Subject: [PATCH 074/169] Add edhoc data types enumeration --- .../components/sul/mapper/symbols/EdhocDataTypes.java | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/EdhocDataTypes.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/EdhocDataTypes.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/EdhocDataTypes.java new file mode 100644 index 00000000..f61720e3 --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/EdhocDataTypes.java @@ -0,0 +1,6 @@ +package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols; + +public enum EdhocDataTypes { + T_CI, + T_CR +} From af01964ac2990ce1fc39d6cefdb0e8c121fae865 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Tue, 21 May 2024 15:03:20 +0200 Subject: [PATCH 075/169] EnumAlphabet and DataTypeMap for working CI (test, remove this with ammend if it works.) --- .../edhocfuzzer/MultiBuilderRA.java | 22 +++------ .../mapper/mappers/EdhocInputMapperRA.java | 46 +++++++++---------- .../mapper/mappers/EdhocOutputMapperRA.java | 31 +++---------- 3 files changed, 36 insertions(+), 63 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 88bd5427..9355ff65 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -5,9 +5,11 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulServerConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.EdhocDataTypes; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputTypeRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderWrapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.DataTypeMap; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.PSFOutputSymbols; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; @@ -48,29 +50,19 @@ public class MultiBuilderRA implements TestRunnerBuilder, TimingProbeBuilder { - // protected AlphabetBuilderStandard alphabetBuilder = new - // AlphabetBuilderStandard<>( - // new AlphabetSerializerXml(SymbolXml.class, - // EdhocAlphabetPojoXmlRA.class)); - - // protected AlphabetTransformerRA alphabetTransformer = new - // AlphabetTransformerRA(alphabetBuilder); - DataType T_CI = new DataType("C_I", Integer.class); - protected EnumAlphabet alphabet = new EnumAlphabet.Builder() + protected DataTypeMap dtMap = new DataTypeMap.Builder(EdhocDataTypes.class) + .newDataTypes(EdhocDataTypes.values(), Integer.class) + .build(); + + protected EnumAlphabet alphabet = new EnumAlphabet.Builder(dtMap) .withInputs(MessageInputTypeRA.values()) .withOutputs(MessageOutputTypeRA.values()) .withOutputs(PSFOutputSymbols.values()) .withInput(MessageInputTypeRA.EDHOC_MESSAGE_1_INPUT, T_CI) - .withInput(MessageInputTypeRA.EDHOC_MESSAGE_2_INPUT, T_CI) - .withInput(MessageInputTypeRA.EDHOC_MESSAGE_3_INPUT, T_CI) - .withInput(MessageInputTypeRA.EDHOC_MESSAGE_4_INPUT, T_CI) .withInput(MessageInputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_INPUT, T_CI) .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_1_OUTPUT, T_CI) - .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT, T_CI) - .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT, T_CI) - .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT, T_CI) .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT, T_CI) .build(); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index 13f6d396..72f40781 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -79,10 +79,6 @@ public void preSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context break; case EDHOC_MESSAGE_2_INPUT: - case EDHOC_MESSAGE_3_INPUT: - case EDHOC_MESSAGE_4_INPUT: - case OSCORE_APP_MESSAGE_INPUT: - updateConnectionId(mapperState, input); break; case EDHOC_MESSAGE_3_OSCORE_APP_INPUT: @@ -92,6 +88,9 @@ public void preSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context new MessageProcessorPersistent(context.getState()).writeMessage3(); break; + case EDHOC_MESSAGE_3_INPUT: + case EDHOC_MESSAGE_4_INPUT: + case OSCORE_APP_MESSAGE_INPUT: case COAP_APP_MESSAGE_INPUT: case COAP_EMPTY_MESSAGE_INPUT: case EDHOC_ERROR_MESSAGE_INPUT: @@ -151,29 +150,30 @@ public void postReceiveUpdate(PSymbolInstance input, PSymbolInstance output, public void postSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context) { } - /* - * TODO This is bad in multiple ways: - * - We need to have access to the datatype, which means defining it multiple - * times. For teachers, EdhocInputRA and the EdhocOutputMapperRA. - * - If the C_I is a bytestring it is unclear if use of a mapper to convert from - * a randomly selected integer in the learner to a corresponding bytestring is - * possible. - */ - public void updateConnectionId(EdhocMapperState state, PSymbolInstance input) { + public void updatePeerConnectionId(EdhocMapperState state, PSymbolInstance input) { EdhocSessionPersistent session = state.getEdhocSessionPersistent(); - LOGGER.info("Running updateConnectionId method"); - LOGGER.info("Current ConnectionId: " + EdhocUtil.bytesToInt(session.getConnectionId())); + LOGGER.info("Current PeerConnectionId: " + EdhocUtil.bytesToInt(session.getPeerConnectionId())); - for (DataValue dv : input.getParameterValues()) { + assert input.getParameterValues().length == 1; + DataValue dv = input.getParameterValues()[0]; + CBORObject value = CBORObject.FromObject(dv.getId()); + session.setPeerConnectionId(value.EncodeToBytes()); - LOGGER.info("Datavalue: " + dv.toString()); - CBORObject value = CBORObject.FromObject(dv.getId()); - LOGGER.info("CBORObject version of DataValue id: " + value.toString()); + LOGGER.info("PeerConnectionId after set: " + + EdhocUtil.bytesToInt(session.getPeerConnectionId())); + } - session.setConnectionId(value.EncodeToBytes()); - LOGGER.info("ConnectionId after set: " + - EdhocUtil.bytesToInt(session.getConnectionId())); - } + public void updateConnectionId(EdhocMapperState state, PSymbolInstance input) { + EdhocSessionPersistent session = state.getEdhocSessionPersistent(); + LOGGER.info("Current ConnectionId: {}", EdhocUtil.bytesToInt(session.getConnectionId())); + + assert input.getParameterValues().length == 1; + DataValue dv = input.getParameterValues()[0]; + CBORObject value = CBORObject.FromObject(dv.getId()); + session.setConnectionId(value.EncodeToBytes()); + + LOGGER.info("ConnectionId after set: " + + EdhocUtil.bytesToInt(session.getConnectionId())); EdhocSessionPersistent new_session = state.getEdhocSessionPersistent(); byte[] new_CI = session.getConnectionId(); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index b51be3a6..b9cdaf67 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -13,9 +13,9 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputTypeRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapperRA; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import de.learnlib.ralib.data.DataValue; import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; @@ -158,15 +158,13 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_1_OUTPUT); LOGGER.info("Reading as Message 1, DataValue: " + parameter); - DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceAfterCheck(ok, base, value); + return instanceAfterCheck(ok, base); } case EDHOC_MESSAGE_2 -> { ok = messageProcessorPersistent.readMessage2(responsePayload); Integer parameter = EdhocUtil - .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); LOGGER.info("Reading as Message 2, DataValue: " + parameter); DataValue value = new DataValue(base.getPtypes()[0], parameter); @@ -179,21 +177,13 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { - Integer parameter = EdhocUtil - .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT); - LOGGER.info("Reading as Message 3, DataValue: " + parameter); - DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceFromOutputSymbol(base, value); + return instanceFromOutputSymbol(base); } ok = messageProcessorPersistent.readMessage4(responsePayload); - Integer parameter = EdhocUtil - .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT); - LOGGER.info("Reading as Message 4, DataValue: " + parameter); - DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceAfterCheck(ok, base, value); + return instanceAfterCheck(ok, base); } case EDHOC_MESSAGE_2_OR_3_OR_4 -> { @@ -202,7 +192,6 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ ok = messageProcessorPersistent.readMessage2(responsePayload); if (ok) { Integer parameter = EdhocUtil - .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); LOGGER.info("Reading as Message 2, DataValue: " + parameter); DataValue value = new DataValue(base.getPtypes()[0], parameter); @@ -211,21 +200,13 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ ok = messageProcessorPersistent.readMessage3(responsePayload); if (ok) { - Integer parameter = EdhocUtil - .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_3_OUTPUT); - LOGGER.info("Reading as Message 3, DataValue: " + parameter); - DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceFromOutputSymbol(base, value); + return instanceFromOutputSymbol(base); } ok = messageProcessorPersistent.readMessage4(responsePayload); - Integer parameter = EdhocUtil - .bytesToInt(edhocMapperState.getEdhocSessionPersistent().getConnectionId()); OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_4_OUTPUT); - LOGGER.info("Reading as Message 4, DataValue: " + parameter); - DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceAfterCheck(ok, base, value); + return instanceAfterCheck(ok, base); } default -> { From 5594e5e77974f6f6c088ceaccbda2bc174dcae2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 22 May 2024 16:23:58 +0200 Subject: [PATCH 076/169] Fix the output mapper for only C_I learning --- .../sul/mapper/mappers/EdhocOutputMapperRA.java | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index b9cdaf67..c7dc5991 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -163,12 +163,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ case EDHOC_MESSAGE_2 -> { ok = messageProcessorPersistent.readMessage2(responsePayload); - - Integer parameter = EdhocUtil OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); - LOGGER.info("Reading as Message 2, DataValue: " + parameter); - DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceAfterCheck(ok, base, value); + return instanceAfterCheck(ok, base); } case EDHOC_MESSAGE_3_OR_4 -> { @@ -191,11 +187,8 @@ protected PSymbolInstance edhocOutputRA(EdhocMapperState edhocMapperState, byte[ LOGGER.info("Reading as EDHOC Message 2 or 3 or 4"); ok = messageProcessorPersistent.readMessage2(responsePayload); if (ok) { - Integer parameter = EdhocUtil OutputSymbol base = newBaseSymbol(MessageOutputTypeRA.EDHOC_MESSAGE_2_OUTPUT); - LOGGER.info("Reading as Message 2, DataValue: " + parameter); - DataValue value = new DataValue(base.getPtypes()[0], parameter); - return instanceFromOutputSymbol(base, value); + return instanceFromOutputSymbol(base); } ok = messageProcessorPersistent.readMessage3(responsePayload); From beda288652b42e98ca3186b185b9593945dffed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 22 May 2024 16:25:54 +0200 Subject: [PATCH 077/169] Allow the creation of a RA-jar and a Mealy-jar --- pom.xml | 49 ++++++++++++++----- scripts/setup_fuzzer.sh | 3 +- .../protocolfuzzing/edhocfuzzer/Main.java | 4 +- .../protocolfuzzing/edhocfuzzer/MainRA.java | 17 +++++++ 4 files changed, 57 insertions(+), 16 deletions(-) create mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/MainRA.java diff --git a/pom.xml b/pom.xml index c9dec380..6aab5ac5 100644 --- a/pom.xml +++ b/pom.xml @@ -301,21 +301,44 @@ maven-assembly-plugin - - - - com.github.protocolfuzzing.edhocfuzzer.Main - - - true - - - - jar-with-dependencies - - + build-mealy + + + + com.github.protocolfuzzing.edhocfuzzer.Main + + + true + + + + jar-with-dependencies + + ${project.artifactId}-${project.version}-mealy + + + single + + verify + + + build-RA + + + + com.github.protocolfuzzing.edhocfuzzer.MainRA + + + true + + + + jar-with-dependencies + + ${project.artifactId}-${project.version}-ra + single diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 3942de1c..53ad780d 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -75,7 +75,8 @@ setup_fuzzer() { set -e cd "${BASE_DIR}" mvn clean verify - ln -sf "${BASE_DIR}"/target/edhoc-fuzzer-*-jar-with-dependencies.jar edhoc-fuzzer.jar + ln -sf "${BASE_DIR}"/target/edhoc-fuzzer-*-Mealy.jar edhoc-fuzzer.jar + ln -sf "${BASE_DIR}"/target/edhoc-fuzzer-*-RA.jar edhoc-fuzzerRA.jar set +e } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index f5e160e1..e1b8bc0f 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -6,8 +6,8 @@ public class Main { public static void main(String[] args) { - MultiBuilderRA mb = new MultiBuilderRA(); - String[] parentLoggers = {Main.class.getPackageName()}; + MultiBuilder mb = new MultiBuilder(); + String[] parentLoggers = { Main.class.getPackageName() }; CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); commandLineParser.setExternalParentLoggers(parentLoggers); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MainRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MainRA.java new file mode 100644 index 00000000..59471c4b --- /dev/null +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MainRA.java @@ -0,0 +1,17 @@ +package com.github.protocolfuzzing.edhocfuzzer; + +import com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser; + +import java.util.List; + +public class MainRA { + public static void main(String[] args) { + MultiBuilderRA mb = new MultiBuilderRA(); + String[] parentLoggers = { Main.class.getPackageName() }; + + CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); + commandLineParser.setExternalParentLoggers(parentLoggers); + + commandLineParser.parse(args, true, List.of(EdhocDotProcessor::beautify)); + } +} From 8bd3dfeedd05db996d4849e3a796273d49f7d689 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 22 May 2024 16:26:54 +0200 Subject: [PATCH 078/169] Remove unused files for RA input types. --- .../symbols/inputs/CoapAppMessageInputRA.java | 25 ----- .../inputs/CoapEmptyMessageInputRA.java | 25 ----- .../inputs/EdhocErrorMessageInputRA.java | 25 ----- .../mapper/symbols/inputs/EdhocInputRA.java | 92 ------------------- .../symbols/inputs/EdhocMessage1InputRA.java | 39 -------- .../symbols/inputs/EdhocMessage2InputRA.java | 33 ------- .../symbols/inputs/EdhocMessage3InputRA.java | 33 ------- .../inputs/EdhocMessage3OscoreAppInputRA.java | 37 -------- .../symbols/inputs/EdhocMessage4InputRA.java | 33 ------- .../inputs/OscoreAppMessageInputRA.java | 33 ------- 10 files changed, 375 deletions(-) delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java deleted file mode 100644 index 38d201bf..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapAppMessageInputRA.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.CoapAppMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class CoapAppMessageInputRA extends EdhocInputRA { - - public CoapAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new CoapAppMessage(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.COAP_APP_MESSAGE; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java deleted file mode 100644 index fd3a9e0a..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/CoapEmptyMessageInputRA.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.CoapEmptyMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class CoapEmptyMessageInputRA extends EdhocInputRA { - - public CoapEmptyMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new CoapEmptyMessage(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.COAP_EMPTY_MESSAGE; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java deleted file mode 100644 index 781ab6b6..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocErrorMessageInputRA.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.EdhocErrorMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class EdhocErrorMessageInputRA extends EdhocInputRA { - - public EdhocErrorMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new EdhocErrorMessage(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.EDHOC_ERROR_MESSAGE; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java deleted file mode 100644 index 6a26b075..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocInputRA.java +++ /dev/null @@ -1,92 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocUtil; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputRA; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.MapperInput; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; -import com.upokecenter.cbor.CBORObject; -import de.learnlib.ralib.data.DataType; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.PSymbolInstance; -import de.learnlib.ralib.words.ParameterizedSymbol; -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; - -public abstract class EdhocInputRA extends PSymbolInstance - implements MapperInput { - - private long extendedWait = 0; - protected DataType T_CI = new DataType("C_I", Integer.class); - - private static Logger LOGGER = LogManager.getLogger(); - - EdhocInputRA(ParameterizedSymbol baseSymbol, DataValue... parameterValues) { - super(baseSymbol, parameterValues); - } - - public abstract Enum getInputType(); - - @Override - public void preSendUpdate(EdhocExecutionContextRA context) { - } - - @Override - public void postSendUpdate(EdhocExecutionContextRA context) { - } - - @Override - public void postReceiveUpdate( - EdhocOutputRA output, - OutputChecker abstractOutputChecker, - EdhocExecutionContextRA context) { - } - - @Override - public Long getExtendedWait() { - return extendedWait; - } - - @Override - public void setExtendedWait(Long value) { - extendedWait = value; - } - - @Override - public String getName() { - return this.getBaseSymbol().getName(); - } - - public DataType[] getDataTypes() { - return this.getBaseSymbol().getPtypes(); - } - - /* - * TODO This is bad in multiple ways: - * - We need to have access to the datatype, which means defining it multiple - * times. For teachers, EdhocInputRA and the EdhocOutputMapperRA. - * - If the C_I is a bytestring it is unclear if use of a mapper to convert from - * a randomly selected integer in the learner to a corresponding bytestring is - * possible. - */ - public void updateConnectionId(EdhocSessionPersistent session) { - - LOGGER.info("Running updateConnectionId method"); - LOGGER.info("Current ConnectionId: " + EdhocUtil.bytesToInt(session.getConnectionId())); - - for (DataValue dv : this.getParameterValues()) { - - LOGGER.info("Datavalue: " + dv.toString()); - if (dv.getType().equals(T_CI)) { - CBORObject value = CBORObject.FromObject(dv.getId()); - LOGGER.info("CBORObject version of DataValue id: " + value.toString()); - - session.setConnectionId(value.EncodeToBytes()); - LOGGER.info( - "Current ConnectionId after set: " + EdhocUtil.bytesToInt(session.getConnectionId())); - } - } - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java deleted file mode 100644 index 668333c0..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage1InputRA.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage1; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class EdhocMessage1InputRA extends EdhocInputRA { - - public EdhocMessage1InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public void preSendUpdate(EdhocExecutionContextRA context) { - EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - - if (session.isInitiator()) { - // Initiator by sending message 1 starts a new key exchange session - // so previous session state must be cleaned unless reset is disabled - session.resetIfEnabled(); - } - - updateConnectionId(session); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new EdhocMessage1(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.EDHOC_MESSAGE_1; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java deleted file mode 100644 index 54f08ed5..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage2InputRA.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage2; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class EdhocMessage2InputRA extends EdhocInputRA { - - public EdhocMessage2InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new EdhocMessage2(new MessageProcessorPersistent(context.getState())); - } - - @Override - public void preSendUpdate(EdhocExecutionContextRA context) { - EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - - updateConnectionId(session); - } - - @Override - public Enum getInputType() { - return MessageInputType.EDHOC_MESSAGE_2; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java deleted file mode 100644 index fb692bd2..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3InputRA.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class EdhocMessage3InputRA extends EdhocInputRA { - - public EdhocMessage3InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public void preSendUpdate(EdhocExecutionContextRA context) { - EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - - updateConnectionId(session); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new EdhocMessage3(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.EDHOC_MESSAGE_3; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java deleted file mode 100644 index 85aeb117..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage3OscoreAppInputRA.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.initiator.EdhocMessage3OscoreApp; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class EdhocMessage3OscoreAppInputRA extends EdhocInputRA { - - public EdhocMessage3OscoreAppInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public void preSendUpdate(EdhocExecutionContextRA context) { - EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - - updateConnectionId(session); - - // construct Message3 in order to store it in session 'message3' field, - // derive new oscore context and make Message3 available to oscore layer - new MessageProcessorPersistent(context.getState()).writeMessage3(); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new EdhocMessage3OscoreApp(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.EDHOC_MESSAGE_3_OSCORE_APP; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java deleted file mode 100644 index c7bb9a26..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/EdhocMessage4InputRA.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.responder.EdhocMessage4; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class EdhocMessage4InputRA extends EdhocInputRA { - - public EdhocMessage4InputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public void preSendUpdate(EdhocExecutionContextRA context) { - EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - - updateConnectionId(session); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new EdhocMessage4(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.EDHOC_MESSAGE_4; - } -} diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java deleted file mode 100644 index c255d65d..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/inputs/OscoreAppMessageInputRA.java +++ /dev/null @@ -1,33 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.EdhocSessionPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.MessageProcessorPersistent; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.common.OscoreAppMessage; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; -import de.learnlib.ralib.data.DataValue; -import de.learnlib.ralib.words.ParameterizedSymbol; - -public class OscoreAppMessageInputRA extends EdhocInputRA { - - public OscoreAppMessageInputRA(ParameterizedSymbol baseSymbol, DataValue[] parameterValues) { - super(baseSymbol, parameterValues); - } - - @Override - public void preSendUpdate(EdhocExecutionContextRA context) { - EdhocSessionPersistent session = context.getState().getEdhocSessionPersistent(); - - updateConnectionId(session); - } - - @Override - public EdhocProtocolMessage generateProtocolMessage(EdhocExecutionContextRA context) { - return new OscoreAppMessage(new MessageProcessorPersistent(context.getState())); - } - - @Override - public Enum getInputType() { - return MessageInputType.OSCORE_APP_MESSAGE; - } -} From 302638103b2e580f9d9451b3f1da9743d445a2af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 22 May 2024 16:31:33 +0200 Subject: [PATCH 079/169] Update CI to run RA learning --- .github/workflows/ci.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 955aeb30..befb2125 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/lakers/client_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 Lakers-Server: @@ -69,7 +69,7 @@ jobs: - name: Test Lakers Server (RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/lakers/server_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 RISE-Client: @@ -100,7 +100,7 @@ jobs: - name: Test RISE Client (m4_app, RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app_ra -roundLimit 4 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 4 ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 RISE-Server: @@ -131,7 +131,7 @@ jobs: - name: Test RISE Server (m4_app, RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 5 ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 SIFIS-HOME-Client: @@ -162,7 +162,7 @@ jobs: - name: Test SIFIS-HOME Client (phase_1, RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1_ra -roundLimit 4 + java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra -roundLimit 4 ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 SIFIS-HOME-Server: @@ -193,7 +193,7 @@ jobs: - name: Test SIFIS-HOME Server (phase_1, RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra -roundLimit 5 ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 @@ -225,7 +225,7 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: @@ -256,5 +256,5 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 2 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 2 ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 \ No newline at end of file From 9cd0dad7cb41642ac4e58a9a56ca9ce3a20598cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 22 May 2024 16:32:53 +0200 Subject: [PATCH 080/169] Update timeouts in config files --- experiments/args/lakers/server_ra | 4 +++- experiments/args/rise/server_ra | 9 ++------- .../args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- .../args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 5 files changed, 8 insertions(+), 11 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index c144b142..5b18b5b3 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -16,6 +16,8 @@ IO_RANDOM_WALK ./src/main/resources/small_alphabet.xml -maxDepthRA 4 +-depth +4 -probNewDataValue 0.5 -seed @@ -57,7 +59,7 @@ Initiator ##### SulConfig ##### -responseWait -300 +100 -processDir ./experiments/models/servers/lakers -cmd diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 10e955f7..423395a6 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -12,19 +12,14 @@ RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries --cacheTests --skipNonDetTests -alphabet ./src/main/resources/small_alphabet.xml -maxDepthRA -10 --depth -10 +4 -probNewDataValue 0.5 -seed 7 --ros ##### EdhocMapperConfig ##### -protocolVersion @@ -67,7 +62,7 @@ helloWorld ##### SulConfig ##### -responseWait -500 +700 -processDir ./experiments/models/servers/rise -cmd diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 0ea5fb62..774ae5cc 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -73,7 +73,7 @@ ${models.clients}/uoscore-uedhoc -cmd ./linux-edhoc-oscore-initiator-client -startWait -50 +100 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 38bf202d..5d53ae8b 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -74,7 +74,7 @@ ${models.servers}/uoscore-uedhoc -cmd ./linux-edhoc-oscore-responder-server -startWait -50 +100 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 0e0615eb..73646998 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -68,7 +68,7 @@ ${models.servers}/uoscore-uedhoc/ -cmd ./linux-edhoc-responder -startWait -50 +100 ##### EdhocSulServerConfig ##### From 2d2bbb7dcb9b9f10865d23ecea5d8775c97c339c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 22 May 2024 16:33:03 +0200 Subject: [PATCH 081/169] Update log levels --- src/main/resources/log4j2.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 4af86276..28aa01cc 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -6,10 +6,10 @@ - + - + From c37a4b6ca9097ce53d5c1760a18fcdbff4c968d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 23 May 2024 18:42:47 +0200 Subject: [PATCH 082/169] Update oscore context --- .../components/sul/core/protocol/EdhocSessionPersistent.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java index aefdb1c5..844378f2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java @@ -272,6 +272,8 @@ public byte[] getForceOscoreRecipientId() { public void setConnectionId(byte[] id) { this.connectionId = id; + setPRKexporter(new byte[] { 1 }); + setupOscoreContext(); } /** From 07b5794f18a90d563137045d347792918fb92f8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 23 May 2024 18:43:13 +0200 Subject: [PATCH 083/169] Update argument files --- experiments/args/lakers/server_ra | 2 -- experiments/args/rise/server_ra | 8 ++++++-- experiments/args/sifis-home/server_phase_1_ra | 1 + 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 5b18b5b3..079475a0 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -16,8 +16,6 @@ IO_RANDOM_WALK ./src/main/resources/small_alphabet.xml -maxDepthRA 4 --depth -4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 423395a6..c1b0c58a 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -15,11 +15,15 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/small_alphabet.xml -maxDepthRA -4 +10 +-maxRuns +10000 -probNewDataValue 0.5 -seed 7 +-socketClosedAsTimeout +-ceReruns 6 ##### EdhocMapperConfig ##### -protocolVersion @@ -62,7 +66,7 @@ helloWorld ##### SulConfig ##### -responseWait -700 +650 -processDir ./experiments/models/servers/rise -cmd diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index f6ecea93..eac80d08 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -20,6 +20,7 @@ IO_RANDOM_WALK 0.5 -seed 7 +-socketClosedAsTimeout ##### EdhocMapperConfig ##### From 401ba45be90b13ed90e1f4aed5206b8cfba821fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 24 May 2024 16:35:06 +0200 Subject: [PATCH 084/169] Update the linking of jar-files in setup_fuzzer.sh Co-authored-by: Linus Olofsson --- scripts/setup_fuzzer.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 53ad780d..a98ffc0f 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -32,7 +32,7 @@ setup_ralib() { git clone "https://github.com/LearnLib/ralib" cd ralib git checkout ${CHECKOUT} - mvn install + mvn install -Dmaven.test.skip # Skip RALibs learnings tests, since they take 3-5 minutes. cd "${BASE_DIR}" rm -rf ./ralib/ @@ -75,8 +75,8 @@ setup_fuzzer() { set -e cd "${BASE_DIR}" mvn clean verify - ln -sf "${BASE_DIR}"/target/edhoc-fuzzer-*-Mealy.jar edhoc-fuzzer.jar - ln -sf "${BASE_DIR}"/target/edhoc-fuzzer-*-RA.jar edhoc-fuzzerRA.jar + ln -sf "${BASE_DIR}"/target/edhoc-fuzzer-*-mealy-jar-with-dependencies.jar edhoc-fuzzer.jar + ln -sf "${BASE_DIR}"/target/edhoc-fuzzer-*-ra-jar-with-dependencies.jar edhoc-fuzzerRA.jar set +e } @@ -88,21 +88,21 @@ usage() { -e Fetch and setup only cf-edhoc library -r Fetch and setup only ralib -l Fetch and setup protocol-state-fuzzer, ralib and cf-edhoc libraries + -f Only setup fuzzer -h Show usage message END exit 0 } -while getopts :pelrh flag +while getopts :pelrfh flag do case "${flag}" in - p) setup_psf ;; - e) setup_cf_edhoc ;; - r) setup_ralib ;; - l) setup_ralib; setup_psf; setup_cf_edhoc ;; + p) setup_psf; setup_fuzzer ;; + e) setup_cf_edhoc; setup_fuzzer ;; + r) setup_ralib; setup_fuzzer ;; + l) setup_ralib; setup_psf; setup_cf_edhoc; setup_fuzzer ;; + f) setup_fuzzer ;; : | \? | h | *) usage ;; esac done - -setup_fuzzer From 3d20dbdbdb3aa88d3e5706f98b6acfecc6aa92be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 24 May 2024 17:06:47 +0200 Subject: [PATCH 085/169] Run with tests because maven --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index a98ffc0f..e56d8d31 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -32,7 +32,7 @@ setup_ralib() { git clone "https://github.com/LearnLib/ralib" cd ralib git checkout ${CHECKOUT} - mvn install -Dmaven.test.skip # Skip RALibs learnings tests, since they take 3-5 minutes. + mvn install cd "${BASE_DIR}" rm -rf ./ralib/ From 7d7209e9c4fa0765c0856c403581dc35c5170a73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 29 May 2024 17:03:04 +0200 Subject: [PATCH 086/169] Update arguments and CI configurations Co-authored-by: Linus Olofsson --- .github/workflows/ci.yml | 16 ++++++++-------- experiments/args/rise/server_m4_app_ra | 4 +++- experiments/args/rise/server_ra | 3 ++- experiments/args/sifis-home/client_phase_1_ra | 4 ++-- experiments/args/sifis-home/client_phase_2_ra | 4 ++-- experiments/args/sifis-home/client_phase_3_ra | 4 ++-- experiments/args/sifis-home/client_phase_4_ra | 4 ++-- experiments/args/sifis-home/server_phase_1 | 4 ++-- experiments/args/sifis-home/server_phase_1_ra | 4 ++-- experiments/args/sifis-home/server_phase_2_ra | 4 ++-- experiments/args/sifis-home/server_phase_3_ra | 4 ++-- experiments/args/sifis-home/server_phase_4_ra | 4 ++-- 12 files changed, 31 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index befb2125..448c9eb5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,7 +34,7 @@ jobs: - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 6 ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 Lakers-Server: @@ -69,7 +69,7 @@ jobs: - name: Test Lakers Server (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 6 ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 RISE-Client: @@ -100,7 +100,7 @@ jobs: - name: Test RISE Client (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 4 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 6 ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 RISE-Server: @@ -131,7 +131,7 @@ jobs: - name: Test RISE Server (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 7 ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 SIFIS-HOME-Client: @@ -162,7 +162,7 @@ jobs: - name: Test SIFIS-HOME Client (phase_1, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra -roundLimit 4 + java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra -roundLimit 7 ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 SIFIS-HOME-Server: @@ -193,7 +193,7 @@ jobs: - name: Test SIFIS-HOME Server (phase_1, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra -roundLimit 7 ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 @@ -225,7 +225,7 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 6 ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: @@ -256,5 +256,5 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 2 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 5 ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 \ No newline at end of file diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 7a09c529..566116ec 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -20,6 +20,8 @@ IO_RANDOM_WALK 0.5 -seed 7 +-memQueryRuns +3 ##### EdhocMapperConfig ##### -protocolVersion @@ -62,7 +64,7 @@ helloWorld ##### SulConfig ##### -responseWait -500 +1000 -processDir ./experiments/models/servers/rise -cmd diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index c1b0c58a..0c2c58b2 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -23,7 +23,8 @@ IO_RANDOM_WALK -seed 7 -socketClosedAsTimeout --ceReruns 6 +-ceReruns +5 ##### EdhocMapperConfig ##### -protocolVersion diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 96335a89..f9238a6c 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -400 +800 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Client -server coap://localhost:5683 1q -startWait -50 +1000 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 0101fe9b..87dc2c2a 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -400 +800 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase2Client -server coap://localhost:5683 1q -startWait -50 +1000 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index 206df123..37168732 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -400 +800 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase3Client -server coap://localhost:5683 1q -startWait -50 +1000 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 87685670..27a08e0e 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -400 +800 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase4Client -server coap://localhost:5683 1q -startWait -50 +1000 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/server_phase_1 b/experiments/args/sifis-home/server_phase_1 index 0af465bc..db93e3e2 100644 --- a/experiments/args/sifis-home/server_phase_1 +++ b/experiments/args/sifis-home/server_phase_1 @@ -64,13 +64,13 @@ POST ##### SulConfig ##### -responseWait -500 +1000 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Server -startWait -400 +1000 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index eac80d08..26a0d9d2 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -70,13 +70,13 @@ POST ##### SulConfig ##### -responseWait -500 +1000 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Server -startWait -400 +800 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index e594b4fa..26669f2c 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -69,13 +69,13 @@ POST ##### SulConfig ##### -responseWait -500 +1000 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase2Server -startWait -400 +800 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 860f8340..ca35483f 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -68,13 +68,13 @@ POST ##### SulConfig ##### -responseWait -500 +1000 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase3Server -startWait -400 +800 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 7d8beb2d..5dd36801 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -68,13 +68,13 @@ POST ##### SulConfig ##### -responseWait -500 +1000 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase4Server -startWait -400 +800 ##### EdhocSulServerConfig ##### From f54625e38ac656c5ccbb45007780824fb9a4a742 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 29 May 2024 17:03:37 +0200 Subject: [PATCH 087/169] Add separate logging entry for PSF LoggingWrapper --- src/main/resources/log4j2.xml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 28aa01cc..71a5a0ee 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -9,12 +9,15 @@ - + + + + From 66131f1fb975530d9f809fd32603116a04d4ded8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 29 May 2024 17:25:45 +0200 Subject: [PATCH 088/169] Update client-testing functionallity --- .../edhocfuzzer/components/sul/core/EdhocSulRA.java | 9 +++------ .../sul/mapper/mappers/EdhocOutputMapperRA.java | 4 +--- .../symbols/outputs/EdhocOutputCheckerRA.java | 13 +++++++------ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java index d92f1041..cfa2de35 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulRA.java @@ -15,7 +15,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.mappers.EdhocOutputMapperRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputType; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputTypeRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; @@ -196,9 +196,6 @@ protected PSymbolInstance executeInput(PSymbolInstance abstractInput) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse - // TODO: Find a non-stupid solution. We could add a datatype ExtendedWait - // with the sole purpose to hold the value, but that is the definition of an - // ugly hack. EdhocInputMapperRA inputMapper = (EdhocInputMapperRA) edhocMapperComposer.getInputMapper(); if (inputMapper.getTimeoutForSymbol(abstractInput) != 0L) { edhocMapperConnector.setTimeout(originalTimeout + inputMapper.getTimeoutForSymbol(abstractInput)); @@ -222,8 +219,8 @@ protected PSymbolInstance executeInput(PSymbolInstance abstractInput) { protected void serverWaitForInitialMessage() { boolean isServer = !edhocMapperState.isCoapClient(); boolean isResponder = !edhocMapperState.getEdhocSessionPersistent().isInitiator(); - MessageOutputType expectedMessageType = isResponder ? MessageOutputType.EDHOC_MESSAGE_1 - : MessageOutputType.COAP_EMPTY_MESSAGE; + MessageOutputTypeRA expectedMessageType = isResponder ? MessageOutputTypeRA.EDHOC_MESSAGE_1_OUTPUT + : MessageOutputTypeRA.COAP_EMPTY_MESSAGE_OUTPUT; if (!isServer || serverWaitForInitialMessageDone) { return; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java index c7dc5991..bffc73ed 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocOutputMapperRA.java @@ -30,13 +30,11 @@ public class EdhocOutputMapperRA private static final Logger LOGGER = LogManager.getLogger(); EdhocMapperConnector edhocMapperConnector; - EnumAlphabet alphabet; // FIXME: Suppressing the warning that outputBuilder shadows the same name in // parent. - // If the enum approach is taken and is standardized this will be solved. - // Hack to allow building unsupportedMessage/unknownMessage. + // This is to allow building unsupportedMessage/unknownMessage. @SuppressWarnings("HidingField") EdhocOutputBuilderRA outputBuilder; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java index 297fd6ed..729a142e 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputCheckerRA.java @@ -1,5 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.PSFOutputSymbols; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import de.learnlib.ralib.words.PSymbolInstance; @@ -7,32 +8,32 @@ public class EdhocOutputCheckerRA implements OutputChecker { - public boolean isMessage(PSymbolInstance output, MessageOutputType messageOutputType) { + public > boolean isMessage(PSymbolInstance output, E messageOutputType) { return Objects.equals(output.getBaseSymbol().getName(), messageOutputType.name()); } @Override public boolean hasInitialClientMessage(PSymbolInstance output) { - return isMessage(output, MessageOutputType.EDHOC_MESSAGE_1); + return isMessage(output, MessageOutputTypeRA.EDHOC_MESSAGE_1_OUTPUT); } @Override public boolean isTimeout(PSymbolInstance output) { - return isMessage(output, MessageOutputType.TIMEOUT); + return isMessage(output, PSFOutputSymbols.TIMEOUT); } @Override public boolean isUnknown(PSymbolInstance output) { - return isMessage(output, MessageOutputType.UNKNOWN); + return isMessage(output, PSFOutputSymbols.UNKNOWN); } @Override public boolean isSocketClosed(PSymbolInstance output) { - return isMessage(output, MessageOutputType.SOCKET_CLOSED); + return isMessage(output, PSFOutputSymbols.SOCKET_CLOSED); } @Override public boolean isDisabled(PSymbolInstance output) { - return isMessage(output, MessageOutputType.DISABLED); + return isMessage(output, PSFOutputSymbols.DISABLED); } } From 986051f25c7109fd672450e3f3802c3738b7562e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 29 May 2024 17:42:26 +0200 Subject: [PATCH 089/169] Update all OSCORE Id:s --- .../sul/core/protocol/EdhocSessionPersistent.java | 1 + .../sul/mapper/mappers/EdhocInputMapperRA.java | 13 ------------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java index 844378f2..c2aba33c 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java @@ -272,6 +272,7 @@ public byte[] getForceOscoreRecipientId() { public void setConnectionId(byte[] id) { this.connectionId = id; + this.forceOscoreRecipientId = id; setPRKexporter(new byte[] { 1 }); setupOscoreContext(); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index 72f40781..c8283d9b 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -150,19 +150,6 @@ public void postReceiveUpdate(PSymbolInstance input, PSymbolInstance output, public void postSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context) { } - public void updatePeerConnectionId(EdhocMapperState state, PSymbolInstance input) { - EdhocSessionPersistent session = state.getEdhocSessionPersistent(); - LOGGER.info("Current PeerConnectionId: " + EdhocUtil.bytesToInt(session.getPeerConnectionId())); - - assert input.getParameterValues().length == 1; - DataValue dv = input.getParameterValues()[0]; - CBORObject value = CBORObject.FromObject(dv.getId()); - session.setPeerConnectionId(value.EncodeToBytes()); - - LOGGER.info("PeerConnectionId after set: " + - EdhocUtil.bytesToInt(session.getPeerConnectionId())); - } - public void updateConnectionId(EdhocMapperState state, PSymbolInstance input) { EdhocSessionPersistent session = state.getEdhocSessionPersistent(); LOGGER.info("Current ConnectionId: {}", EdhocUtil.bytesToInt(session.getConnectionId())); From 5bca6e527966d108cca1e063148482eaeea8bc65 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Wed, 29 May 2024 18:01:40 +0200 Subject: [PATCH 090/169] Update logging --- src/main/resources/log4j2.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 71a5a0ee..2eb1250e 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -12,10 +12,10 @@ - + - + From 2f50f8717d0ee272f7356f3b2066b4483461b926 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Fri, 31 May 2024 16:08:02 +0200 Subject: [PATCH 091/169] Adapted timeouts to CI run --- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/server_m4_app_ra | 4 ++-- experiments/args/rise/server_ra | 4 ++-- experiments/args/sifis-home/client_phase_1_ra | 4 ++-- experiments/args/sifis-home/client_phase_2_ra | 4 ++-- experiments/args/sifis-home/client_phase_3_ra | 4 ++-- experiments/args/sifis-home/client_phase_4_ra | 4 ++-- experiments/args/sifis-home/server_phase_1 | 4 ++-- experiments/args/sifis-home/server_phase_1_ra | 4 ++-- experiments/args/sifis-home/server_phase_2_ra | 4 ++-- experiments/args/sifis-home/server_phase_3_ra | 4 ++-- experiments/args/sifis-home/server_phase_4_ra | 5 ++--- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 14 files changed, 25 insertions(+), 26 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 079475a0..c144b142 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -57,7 +57,7 @@ Initiator ##### SulConfig ##### -responseWait -100 +300 -processDir ./experiments/models/servers/lakers -cmd diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 566116ec..2ad7737c 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -64,13 +64,13 @@ helloWorld ##### SulConfig ##### -responseWait -1000 +500 -processDir ./experiments/models/servers/rise -cmd java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer 5 -startWait -1000 +300 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 0c2c58b2..668a36e0 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -67,13 +67,13 @@ helloWorld ##### SulConfig ##### -responseWait -650 +500 -processDir ./experiments/models/servers/rise -cmd java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer -startWait -1000 +300 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index f9238a6c..96335a89 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -800 +400 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Client -server coap://localhost:5683 1q -startWait -1000 +50 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 87dc2c2a..0101fe9b 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -800 +400 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase2Client -server coap://localhost:5683 1q -startWait -1000 +50 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index 37168732..206df123 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -800 +400 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase3Client -server coap://localhost:5683 1q -startWait -1000 +50 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 27a08e0e..87685670 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -65,13 +65,13 @@ light ##### SulConfig ##### -responseWait -800 +400 -processDir ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase4Client -server coap://localhost:5683 1q -startWait -1000 +50 ##### EdhocSulClientConfig ##### diff --git a/experiments/args/sifis-home/server_phase_1 b/experiments/args/sifis-home/server_phase_1 index db93e3e2..0af465bc 100644 --- a/experiments/args/sifis-home/server_phase_1 +++ b/experiments/args/sifis-home/server_phase_1 @@ -64,13 +64,13 @@ POST ##### SulConfig ##### -responseWait -1000 +500 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Server -startWait -1000 +400 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 26a0d9d2..eac80d08 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -70,13 +70,13 @@ POST ##### SulConfig ##### -responseWait -1000 +500 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Server -startWait -800 +400 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 26669f2c..e594b4fa 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -69,13 +69,13 @@ POST ##### SulConfig ##### -responseWait -1000 +500 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase2Server -startWait -800 +400 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index ca35483f..860f8340 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -68,13 +68,13 @@ POST ##### SulConfig ##### -responseWait -1000 +500 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase3Server -startWait -800 +400 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 5dd36801..98b112e5 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -68,14 +68,13 @@ POST ##### SulConfig ##### -responseWait -1000 +500 -processDir ${models.servers}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase4Server -startWait -800 - +400 ##### EdhocSulServerConfig ##### -connect diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 5d53ae8b..38bf202d 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -74,7 +74,7 @@ ${models.servers}/uoscore-uedhoc -cmd ./linux-edhoc-oscore-responder-server -startWait -100 +50 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 73646998..0e0615eb 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -68,7 +68,7 @@ ${models.servers}/uoscore-uedhoc/ -cmd ./linux-edhoc-responder -startWait -100 +50 ##### EdhocSulServerConfig ##### From 0d62de8e1e93c6517e6aa70f7f67f9c0fd30ca47 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Fri, 31 May 2024 16:08:38 +0200 Subject: [PATCH 092/169] Remove round limits --- .github/workflows/ci.yml | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 448c9eb5..247fee05 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -27,14 +27,14 @@ jobs: rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu ./scripts/setup_sul.sh lakers - - name: Test Lakers Client + - name: Test Lakers Client (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 6 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 Lakers-Server: @@ -62,14 +62,14 @@ jobs: rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu ./scripts/setup_sul.sh lakers - - name: Test Lakers Server + - name: Test Lakers Server (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 - name: Test Lakers Server (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 6 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 RISE-Client: @@ -93,14 +93,14 @@ jobs: - name: Setup RISE run: ./scripts/setup_sul.sh rise - - name: Test RISE Client (m4_app) + - name: Test RISE Client (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 - name: Test RISE Client (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 6 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 RISE-Server: @@ -124,14 +124,14 @@ jobs: - name: Setup RISE run: ./scripts/setup_sul.sh rise - - name: Test RISE Server (m4_app) + - name: Test RISE Server (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 - name: Test RISE Server (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 7 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 SIFIS-HOME-Client: @@ -155,14 +155,14 @@ jobs: - name: Setup SIFIS-HOME run: ./scripts/setup_sul.sh sifis-home - - name: Test SIFIS-HOME Client (phase_1) + - name: Test SIFIS-HOME Client (phase_1, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 - name: Test SIFIS-HOME Client (phase_1, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra -roundLimit 7 + java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 SIFIS-HOME-Server: @@ -186,14 +186,14 @@ jobs: - name: Setup SIFIS-HOME run: ./scripts/setup_sul.sh sifis-home - - name: Test SIFIS-HOME Server (phase_1) + - name: Test SIFIS-HOME Server (phase_1, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 - name: Test SIFIS-HOME Server (phase_1, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra -roundLimit 7 + java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 @@ -218,14 +218,14 @@ jobs: - name: Setup uOSCORE-uEDHOC run: ./scripts/setup_sul.sh uoscore-uedhoc - - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore) + - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 6 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: @@ -249,12 +249,12 @@ jobs: - name: Setup uOSCORE-uEDHOC run: ./scripts/setup_sul.sh uoscore-uedhoc - - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore) + - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 \ No newline at end of file From b2f09a98398ed3ec178cba9b58d7351a7d54aa4b Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Fri, 31 May 2024 16:13:19 +0200 Subject: [PATCH 093/169] Revert file paths for args --- experiments/args/lakers/client_ra | 6 +++--- experiments/args/lakers/server_ra | 4 ++-- experiments/args/rise/server_m4_app_ra | 6 +++--- experiments/args/rise/server_ra | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index 34116f51..79257f50 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -experiments/results/client/lakers +${results.learning.clients}/lakers ##### LearnerConfig ##### @@ -44,7 +44,7 @@ KID # TestVector -testVectorJson -./experiments/authentication/test_vectors/test_vectors_lakers.json +${authentication.test_vectors}/test_vectors_lakers.json -testVectorJsonKey test_vector_p256 @@ -59,7 +59,7 @@ Responder -responseWait 300 -processDir -./experiments/models/clients/lakers +${models.clients}/lakers -cmd ./coapclient -startWait diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index c144b142..109d37ed 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -43,7 +43,7 @@ KID # TestVector -testVectorJson -./experiments/authentication/test_vectors/test_vectors_lakers.json +${authentication.test_vectors}/test_vectors_lakers.json -testVectorJsonKey test_vector_p256 @@ -59,7 +59,7 @@ Initiator -responseWait 300 -processDir -./experiments/models/servers/lakers +${models.servers}/lakers -cmd ./coapserver -startWait diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 2ad7737c..0014a6da 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -./experiments/results/server/rise_m4_app +${results.learning.servers}/rise_m4_app ##### LearnerConfig ##### @@ -48,7 +48,7 @@ X5T # TestVector -testVectorJson -./experiments/authentication/test_vectors/test_vectors_rise.json +${authentication.test_vectors}/test_vectors_rise.json -testVectorJsonKey test_vector_ed25519 @@ -66,7 +66,7 @@ helloWorld -responseWait 500 -processDir -./experiments/models/servers/rise +${models.servers}/rise -cmd java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer 5 -startWait diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 668a36e0..7661921d 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -./experiments/results/server/rise +${results.learning.servers}/rise ##### LearnerConfig ##### @@ -51,7 +51,7 @@ X5T # TestVector -testVectorJson -./experiments/authentication/test_vectors/test_vectors_rise.json +${authentication.test_vectors}/test_vectors_rise.json -testVectorJsonKey test_vector_ed25519 @@ -69,7 +69,7 @@ helloWorld -responseWait 500 -processDir -./experiments/models/servers/rise +${models.servers}/rise -cmd java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer -startWait From 806506d79157847ec00872662e0107a6b57c7e28 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Fri, 31 May 2024 21:32:51 +0200 Subject: [PATCH 094/169] Increase timeout for rise & m4 app ra --- experiments/args/lakers/server_ra | 5 +++-- experiments/args/rise/client_m4_app_ra | 1 + experiments/args/rise/server_m4_app_ra | 1 + 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 109d37ed..2cc973d5 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -20,6 +20,7 @@ IO_RANDOM_WALK 0.5 -seed 7 +-socketClosedAsTimeout ##### EdhocMapperConfig ##### -protocolVersion @@ -57,13 +58,13 @@ Initiator ##### SulConfig ##### -responseWait -300 +400 -processDir ${models.servers}/lakers -cmd ./coapserver -startWait -50 +100 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index f7cdd402..ba35221c 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -20,6 +20,7 @@ IO_RANDOM_WALK 0.5 -seed 7 +-socketClosedAsTimeout ##### EdhocMapperConfig ##### diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 0014a6da..bcf40c6d 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -20,6 +20,7 @@ IO_RANDOM_WALK 0.5 -seed 7 +-socketClosedAsTimeout -memQueryRuns 3 From 44b3a92f7cc696a19fdc03aeb3ae6f69f3afcc52 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Fri, 31 May 2024 21:35:29 +0200 Subject: [PATCH 095/169] Increase timeout on client m4 app ra --- experiments/args/rise/client_m4_app_ra | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index ba35221c..9b948093 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -65,13 +65,13 @@ helloWorld ##### SulConfig ##### -responseWait -400 +500 -processDir ${models.clients}/rise -cmd java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocClient 5 -startWait -50 +100 ##### EdhocSulClientConfig ##### From ad52afb5c7159e6cc62477743f87394a105e2147 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Sat, 1 Jun 2024 16:47:24 +0200 Subject: [PATCH 096/169] Increase timeout args for lakers --- experiments/args/lakers/server_ra | 4 ++-- experiments/args/sifis-home/client_phase_1_ra | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 2cc973d5..61f26899 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -58,13 +58,13 @@ Initiator ##### SulConfig ##### -responseWait -400 +500 -processDir ${models.servers}/lakers -cmd ./coapserver -startWait -100 +200 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 96335a89..1f57ee03 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -71,7 +71,7 @@ ${models.clients}/sifis-home -cmd java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Client -server coap://localhost:5683 1q -startWait -50 +100 ##### EdhocSulClientConfig ##### From 9f126ad4342605ef701e13bc6fd80e3dadf0de5f Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Sat, 1 Jun 2024 16:47:43 +0200 Subject: [PATCH 097/169] Set some logging from info to debug level --- .../components/sul/mapper/mappers/EdhocInputMapperRA.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index c8283d9b..e634b596 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -152,14 +152,14 @@ public void postSendUpdate(PSymbolInstance input, EdhocExecutionContextRA contex public void updateConnectionId(EdhocMapperState state, PSymbolInstance input) { EdhocSessionPersistent session = state.getEdhocSessionPersistent(); - LOGGER.info("Current ConnectionId: {}", EdhocUtil.bytesToInt(session.getConnectionId())); + LOGGER.debug("ConnectionId before set: {}", EdhocUtil.bytesToInt(session.getConnectionId())); assert input.getParameterValues().length == 1; DataValue dv = input.getParameterValues()[0]; CBORObject value = CBORObject.FromObject(dv.getId()); session.setConnectionId(value.EncodeToBytes()); - LOGGER.info("ConnectionId after set: " + + LOGGER.debug("ConnectionId after set: " + EdhocUtil.bytesToInt(session.getConnectionId())); EdhocSessionPersistent new_session = state.getEdhocSessionPersistent(); From 4424ec7e2e1ed00f1350c618f7b8b9957f9a4c98 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Sun, 2 Jun 2024 01:26:57 +0200 Subject: [PATCH 098/169] Increase timeout for rise server CI test --- experiments/args/rise/server_m4_app_ra | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index bcf40c6d..0a948570 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -65,13 +65,13 @@ helloWorld ##### SulConfig ##### -responseWait -500 +600 -processDir ${models.servers}/rise -cmd java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer 5 -startWait -300 +400 ##### EdhocSulServerConfig ##### From 910b9ed42e2942580567db339af9ac35ff341254 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 14:32:03 +0200 Subject: [PATCH 099/169] Change RA learning algorithm to RaLambda --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index 79257f50..eaae10c4 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 61f26899..4cf4ffea 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ experiments/results/server/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 9b948093..5bc53673 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.clients}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 6dc284a3..5f94385d 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 0a948570..94a86d48 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 7661921d..39e806cc 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 1f57ee03..20654d21 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.clients}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 0101fe9b..15d65d63 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.clients}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index 206df123..cf37a17c 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.clients}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 87685670..bb8908c0 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.clients}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index eac80d08..7fb6c658 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index e594b4fa..1e6a9c70 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 860f8340..65e7bb45 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 98b112e5..59471abc 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 774ae5cc..70ffd3d1 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,7 +7,7 @@ ${results.learning.clients}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 38bf202d..812ff60c 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 0e0615eb..abec6cff 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,7 +8,7 @@ ${results.learning.servers}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries From 06a1955fe7eae553f130b8ff839466e391f6f254 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:22:57 +0200 Subject: [PATCH 100/169] Remove unnecessary logs ci skip --- .../sul/core/protocol/MessageProcessorPersistent.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java index 0017ede7..bba2de4e 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/MessageProcessorPersistent.java @@ -329,7 +329,6 @@ public boolean readMessage2(byte[] sequence) { CBORObject connectionIdentifierInitiatorCbor = CBORObject.FromObject(connectionIdentifierInitiator); EdhocSessionPersistent session = edhocSessions.get(connectionIdentifierInitiatorCbor); - LOGGER.info("Sessions: " + edhocSessions); if (session == null) { LOGGER.error("R_M2: EDHOC session not found"); return false; @@ -1366,7 +1365,6 @@ public boolean readMessage1(byte[] sequence) { } byte[] connectionIdResponder = oldSession.getConnectionId(); - LOGGER.info("Old Connection ID: " + EdhocUtil.bytesToInt(connectionIdResponder)); if (edhocMapperState.getEdhocMapperConfig().generateOwnConnectionId()) { connectionIdResponder = Util.getConnectionId(endpointInfo.getUsedConnectionIds(), endpointInfo.getOscoreDb(), connectionIdInitiator); @@ -1418,8 +1416,6 @@ public boolean readMessage1(byte[] sequence) { // Update edhocSessions edhocMapperState.getEdhocEndpointInfoPersistent().getEdhocSessionsPersistent() .put(CBORObject.FromObject(connectionIdResponder), newSession); - LOGGER.info("Sessions after update: " - + edhocMapperState.getEdhocEndpointInfoPersistent().getEdhocSessionsPersistent()); LOGGER.debug("Successful processing of EDHOC Message 1"); return true; From 0c177d6745837644d3c338465ed0b45cd96f6e24 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:28:40 +0200 Subject: [PATCH 101/169] Update log4j2 ci skip --- src/main/resources/log4j2.xml | 19 ++----------------- 1 file changed, 2 insertions(+), 17 deletions(-) diff --git a/src/main/resources/log4j2.xml b/src/main/resources/log4j2.xml index 2eb1250e..d6531b32 100644 --- a/src/main/resources/log4j2.xml +++ b/src/main/resources/log4j2.xml @@ -12,31 +12,16 @@ - + - - - - - - - - - - - - - - - - + From fb2e18fbf64e0dc1e5030c47c9ecc4e0353187e7 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:34:28 +0200 Subject: [PATCH 102/169] Remove unused alphabet xml files and add dummy ci skip --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- .../client_linux_edhoc_oscore_ra | 2 +- .../server_linux_edhoc_oscore_ra | 2 +- .../args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- src/main/resources/alphabet_placeholder.xml | 2 + src/main/resources/alphabet_ra.xml | 138 ------------------ src/main/resources/small_alphabet.xml | 106 -------------- 20 files changed, 19 insertions(+), 261 deletions(-) create mode 100644 src/main/resources/alphabet_placeholder.xml delete mode 100644 src/main/resources/alphabet_ra.xml delete mode 100644 src/main/resources/small_alphabet.xml diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index eaae10c4..6efd6fd1 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 4cf4ffea..cdca13ec 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 5bc53673..cb5272e3 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 5f94385d..c3754ce7 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 94a86d48..84be4a9a 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 39e806cc..03ff3837 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 10 -maxRuns diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 20654d21..ee3328dc 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 15d65d63..22ba09e8 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index cf37a17c..ce465b3d 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index bb8908c0..226ba4b2 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 7fb6c658..9ef67ad7 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 1e6a9c70..adf51f0d 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 65e7bb45..9ae15855 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 59471abc..fa3801de 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 70ffd3d1..6bdf786f 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -12,7 +12,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 812ff60c..edc00265 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index abec6cff..98a60459 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -13,7 +13,7 @@ RaLambda IO_RANDOM_WALK -logQueries -alphabet -./src/main/resources/small_alphabet.xml +./src/main/resources/alphabet_placeholder.xml -maxDepthRA 4 -probNewDataValue diff --git a/src/main/resources/alphabet_placeholder.xml b/src/main/resources/alphabet_placeholder.xml new file mode 100644 index 00000000..6368ffac --- /dev/null +++ b/src/main/resources/alphabet_placeholder.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/main/resources/alphabet_ra.xml b/src/main/resources/alphabet_ra.xml deleted file mode 100644 index 2ba0ab3b..00000000 --- a/src/main/resources/alphabet_ra.xml +++ /dev/null @@ -1,138 +0,0 @@ - - - EDHOC_MESSAGE_1 - INPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_2 - INPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_3 - INPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_3_OSCORE_APP - INPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_4 - INPUT - - C_I - java.lang.Integer - - - - OSCORE_APP_MESSAGE - INPUT - - - COAP_APP_MESSAGE - INPUT - - - COAP_EMPTY_MESSAGE - INPUT - - - DISABLED - OUTPUT - - - SOCKET_CLOSED - OUTPUT - - - UNKNOWN - OUTPUT - - - TIMEOUT - OUTPUT - - - COAP_ERROR_MESSAGE - OUTPUT - - - COAP_EMPTY_MESSAGE - OUTPUT - - - UNSUPPORTED_MESSAGE - OUTPUT - - - EDHOC_ERROR_MESSAGE - OUTPUT - - - EDHOC_MESSAGE_1 - OUTPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_2 - OUTPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_3 - OUTPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_3_OSCORE_APP - OUTPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_4 - OUTPUT - - C_I - java.lang.Integer - - - - OSCORE_APP_MESSAGE - OUTPUT - - - COAP_APP_MESSAGE - OUTPUT - - - COAP_EMPTY_MESSAGE - OUTPUT - - \ No newline at end of file diff --git a/src/main/resources/small_alphabet.xml b/src/main/resources/small_alphabet.xml deleted file mode 100644 index 5a3b9a90..00000000 --- a/src/main/resources/small_alphabet.xml +++ /dev/null @@ -1,106 +0,0 @@ - - - - EDHOC_MESSAGE_1 - INPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_2 - OUTPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_3 - INPUT - - C_I - java.lang.Integer - - - - EDHOC_MESSAGE_4 - OUTPUT - - C_I - java.lang.Integer - - - - EDHOC_ERROR_MESSAGE - OUTPUT - - - - EDHOC_MESSAGE_3_OSCORE_APP - INPUT - - C_I - java.lang.Integer - - - - OSCORE_APP_MESSAGE - INPUT - - - OSCORE_APP_MESSAGE_RESPONDER - OUTPUT - - - - COAP_APP_MESSAGE - INPUT - - - COAP_APP_MESSAGE_RESPONDER - OUTPUT - - - COAP_MESSAGE - OUTPUT - - - COAP_EMPTY_MESSAGE - INPUT - - - COAP_EMPTY_MESSAGE_RESPONDER - OUTPUT - - - COAP_ERROR_MESSAGE - OUTPUT - - - - DISABLED - OUTPUT - - - SOCKET_CLOSED - OUTPUT - - - UNKNOWN - OUTPUT - - - TIMEOUT - OUTPUT - - - UNSUPPORTED_MESSAGE - OUTPUT - - - UNSUCCESSFUL_MESSAGE - OUTPUT - - \ No newline at end of file From f8ec510c9f5c7a9519eb974b1a8c3ab60faa1b07 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 15:36:07 +0200 Subject: [PATCH 103/169] Remove unused enums ci skip --- .../sul/mapper/symbols/outputs/MessageOutputType.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java index e5de339d..26fecbe3 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java @@ -12,13 +12,10 @@ public enum MessageOutputType { EDHOC_ERROR_MESSAGE, EDHOC_MESSAGE_3_OSCORE_APP, OSCORE_APP_MESSAGE, - OSCORE_APP_MESSAGE_RESPONDER, COAP_APP_MESSAGE, - COAP_APP_MESSAGE_RESPONDER, COAP_MESSAGE, COAP_ERROR_MESSAGE, COAP_EMPTY_MESSAGE, - COAP_EMPTY_MESSAGE_RESPONDER, UNSUPPORTED_MESSAGE, UNSUCCESSFUL_MESSAGE, TIMEOUT, From 83f1bebcf3beb53df9e3e091e5df1c9585328798 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:01:57 +0200 Subject: [PATCH 104/169] Update CI to enable downloading results Co-authored-by: 00oskpet <00oskpet@users.noreply.github.com> --- .github/workflows/ci.yml | 137 +++++++++++++++--- experiments/args/lakers/client | 2 +- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server | 2 +- experiments/args/rise/client | 2 +- experiments/args/rise/client_m4_app | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server | 2 +- experiments/args/rise/server_m4_app | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1 | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2 | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3 | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4 | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1 | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2 | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3 | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4 | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- .../args/uoscore-uedhoc/client_linux_edhoc | 2 +- .../uoscore-uedhoc/client_linux_edhoc_oscore | 2 +- .../client_linux_edhoc_oscore_ra | 2 +- .../args/uoscore-uedhoc/client_linux_edhoc_ra | 2 +- .../args/uoscore-uedhoc/server_linux_edhoc | 2 +- .../uoscore-uedhoc/server_linux_edhoc_oscore | 2 +- .../server_linux_edhoc_oscore_ra | 2 +- .../args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- src/main/resources/default_fuzzer.properties | 6 +- 37 files changed, 159 insertions(+), 54 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 247fee05..6fb5c906 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,12 +30,25 @@ jobs: - name: Test Lakers Client (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 - ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/mealy/lakers 3 - name: Test Lakers Client (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/lakers 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/ra/lakers 3 + + - name: Compress results + run: | + tar -czf lakers_client_mealy.tar.gz experiments/results/clients/mealy/lakers + tar -czf lakers_client_ra.tar.gz experiments/results/clients/ra/lakers + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + lakers_client_mealy.tar.gz + lakers_client_ra.tar.gz Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -65,12 +78,25 @@ jobs: - name: Test Lakers Server (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/lakers 2 - name: Test Lakers Server (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/lakers 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/lakers 2 + + - name: Compress results + run: | + tar -czf lakers_server_mealy.tar.gz experiments/results/servers/mealy/lakers + tar -czf lakers_server_ra.tar.gz experiments/results/servers/ra/lakers + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + lakers_server_mealy.tar.gz + lakers_server_ra.tar.gz RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -96,12 +122,25 @@ jobs: - name: Test RISE Client (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 - ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 - name: Test RISE Client (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/rise_m4_app 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/ra/rise_m4_app 4 + + - name: Compress results + run: | + tar -czf rise_m4_client_mealy.tar.gz experiments/results/clients/mealy/rise_m4_app + tar -czf rise_m4_client_ra.tar.gz experiments/results/clients/ra/rise_m4_app + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + rise_m4_client_mealy.tar.gz + rise_m4_client_ra.tar.gz RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -127,13 +166,26 @@ jobs: - name: Test RISE Server (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 - ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 - name: Test RISE Server (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/rise_m4_app 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/ra/rise_m4_app 5 + - name: Compress results + run: | + tar -czf rise_m4_server_mealy.tar.gz experiments/results/servers/mealy/rise_m4_app + tar -czf rise_m4_server_ra.tar.gz experiments/results/servers/ra/rise_m4_app + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + rise_m4_server_mealy.tar.gz + rise_m4_server_ra.tar.gz + SIFIS-HOME-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -158,12 +210,25 @@ jobs: - name: Test SIFIS-HOME Client (phase_1, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 - ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 - name: Test SIFIS-HOME Client (phase_1, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/sifis-home_phase_1 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 4 + + - name: Compress results + run: | + tar -czf sifis-home_phase_1_client_mealy.tar.gz experiments/results/clients/mealy/sifis-home_phase_1 + tar -czf sifis-home_phase_1_client_ra.tar.gz experiments/results/clients/ra/sifis-home_phase_1 + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + sifis-home_phase_1_client_mealy.tar.gz + sifis-home_phase_1_client_ra.tar.gz SIFIS-HOME-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -189,14 +254,26 @@ jobs: - name: Test SIFIS-HOME Server (phase_1, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 - ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 - name: Test SIFIS-HOME Server (phase_1, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/sifis-home_phase_1 5 - + ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 5 + - name: Compress results + run: | + tar -czf sifis-home_phase_1_server_mealy.tar.gz experiments/results/servers/mealy/sifis-home_phase_1 + tar -czf sifis-home_phase_1_server_ra.tar.gz experiments/results/servers/ra/sifis-home_phase_1 + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + sifis-home_phase_1_server_mealy.tar.gz + sifis-home_phase_1_server_ra.tar.gz + uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -221,13 +298,26 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 - ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/uoscore-uedhoc_linux_edhoc_oscore 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + - name: Compress results + run: | + tar -czf uoscore-uedhoc_linux_edhoc_client_mealy.tar.gz experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc + tar -czf uoscore-uedhoc_linux_edhoc_client_ra.tar.gz experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + uoscore-uedhoc_linux_edhoc_client_mealy.tar.gz + uoscore-uedhoc_linux_edhoc_client_ra.tar.gz + uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -252,9 +342,22 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 - ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/uoscore-uedhoc_linux_edhoc_oscore 2 \ No newline at end of file + ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 2 + + - name: Compress results + run: | + tar -czf uoscore-uedhoc_linux_edhoc_server_mealy.tar.gz experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc + tar -czf uoscore-uedhoc_linux_edhoc_server_ra.tar.gz experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Results + path: | + uoscore-uedhoc_linux_edhoc_server_mealy.tar.gz + uoscore-uedhoc_linux_edhoc_server_ra.tar.gz \ No newline at end of file diff --git a/experiments/args/lakers/client b/experiments/args/lakers/client index bffdd01c..57ad4cce 100644 --- a/experiments/args/lakers/client +++ b/experiments/args/lakers/client @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/lakers +${results.learning.clients.mealy}/lakers ##### LearnerConfig ##### diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index 6efd6fd1..12675662 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/lakers +${results.learning.clients.ra}/lakers ##### LearnerConfig ##### diff --git a/experiments/args/lakers/server b/experiments/args/lakers/server index 0ae7e3f1..7c9389e4 100644 --- a/experiments/args/lakers/server +++ b/experiments/args/lakers/server @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/lakers +${results.learning.servers.mealy}/lakers ##### LearnerConfig ##### diff --git a/experiments/args/rise/client b/experiments/args/rise/client index ef83749c..548e0f63 100644 --- a/experiments/args/rise/client +++ b/experiments/args/rise/client @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/rise +${results.learning.clients.mealy}/rise ##### LearnerConfig ##### diff --git a/experiments/args/rise/client_m4_app b/experiments/args/rise/client_m4_app index 0a1a61e3..8f888f3e 100644 --- a/experiments/args/rise/client_m4_app +++ b/experiments/args/rise/client_m4_app @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/rise_m4_app +${results.learning.clients.mealy}/rise_m4_app ##### LearnerConfig ##### diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index cb5272e3..204ed7d3 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/rise_m4_app +${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index c3754ce7..6845f77b 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/rise +${results.learning.clients.ra}/rise ##### LearnerConfig ##### diff --git a/experiments/args/rise/server b/experiments/args/rise/server index 73f4f104..acee39c8 100644 --- a/experiments/args/rise/server +++ b/experiments/args/rise/server @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/rise +${results.learning.servers.mealy}/rise ##### LearnerConfig ##### diff --git a/experiments/args/rise/server_m4_app b/experiments/args/rise/server_m4_app index 5e43df5b..918aecdf 100644 --- a/experiments/args/rise/server_m4_app +++ b/experiments/args/rise/server_m4_app @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/rise_m4_app +${results.learning.servers.mealy}/rise_m4_app ##### LearnerConfig ##### diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 84be4a9a..59f141ee 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/rise_m4_app +${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 03ff3837..4f833f3d 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/rise +${results.learning.servers.ra}/rise ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_1 b/experiments/args/sifis-home/client_phase_1 index d49dac5f..279f46aa 100644 --- a/experiments/args/sifis-home/client_phase_1 +++ b/experiments/args/sifis-home/client_phase_1 @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_1 +${results.learning.clients.mealy}/sifis-home_phase_1 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index ee3328dc..0690dae6 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_1 +${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_2 b/experiments/args/sifis-home/client_phase_2 index 63cc508d..3c2c7ea4 100644 --- a/experiments/args/sifis-home/client_phase_2 +++ b/experiments/args/sifis-home/client_phase_2 @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_2 +${results.learning.clients.mealy}/sifis-home_phase_2 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 22ba09e8..ff46af89 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_2 +${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_3 b/experiments/args/sifis-home/client_phase_3 index fd198932..50724545 100644 --- a/experiments/args/sifis-home/client_phase_3 +++ b/experiments/args/sifis-home/client_phase_3 @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_3 +${results.learning.clients.mealy}/sifis-home_phase_3 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index ce465b3d..ae858adc 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_3 +${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_4 b/experiments/args/sifis-home/client_phase_4 index b313237b..4afabf5d 100644 --- a/experiments/args/sifis-home/client_phase_4 +++ b/experiments/args/sifis-home/client_phase_4 @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_4 +${results.learning.clients.mealy}/sifis-home_phase_4 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 226ba4b2..d73c2ed1 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -3,7 +3,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/sifis-home_phase_4 +${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_1 b/experiments/args/sifis-home/server_phase_1 index 0af465bc..46a3b065 100644 --- a/experiments/args/sifis-home/server_phase_1 +++ b/experiments/args/sifis-home/server_phase_1 @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_1 +${results.learning.servers.mealy}/sifis-home_phase_1 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 9ef67ad7..1d19cded 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_1 +${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_2 b/experiments/args/sifis-home/server_phase_2 index 6041779e..70bdeece 100644 --- a/experiments/args/sifis-home/server_phase_2 +++ b/experiments/args/sifis-home/server_phase_2 @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_2 +${results.learning.servers.mealy}/sifis-home_phase_2 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index adf51f0d..014d8a30 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_2 +${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_3 b/experiments/args/sifis-home/server_phase_3 index 0188482d..b8d2c22b 100644 --- a/experiments/args/sifis-home/server_phase_3 +++ b/experiments/args/sifis-home/server_phase_3 @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_3 +${results.learning.servers.mealy}/sifis-home_phase_3 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 9ae15855..9f80cd60 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_3 +${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_4 b/experiments/args/sifis-home/server_phase_4 index 1a63e047..5d7e485c 100644 --- a/experiments/args/sifis-home/server_phase_4 +++ b/experiments/args/sifis-home/server_phase_4 @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_4 +${results.learning.servers.mealy}/sifis-home_phase_4 ##### LearnerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index fa3801de..01956225 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/sifis-home_phase_4 +${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc b/experiments/args/uoscore-uedhoc/client_linux_edhoc index 4c7045bd..b9138e41 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc @@ -2,7 +2,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/uoscore-uedhoc_linux_edhoc +${results.learning.clients.mealy}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore index 206f8d4f..5d7e5e0e 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore @@ -2,7 +2,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/uoscore-uedhoc_linux_edhoc_oscore +${results.learning.clients.mealy}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 6bdf786f..85db378a 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -2,7 +2,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/uoscore-uedhoc_linux_edhoc_oscore +${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_ra index 4c7045bd..799bfba4 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_ra @@ -2,7 +2,7 @@ state-fuzzer-client ##### StateFuzzerConfig ##### -output -${results.learning.clients}/uoscore-uedhoc_linux_edhoc +${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc b/experiments/args/uoscore-uedhoc/server_linux_edhoc index 596d0f90..4b7a61ab 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/uoscore-uedhoc_linux_edhoc +${results.learning.servers.mealy}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore index a114795c..458fe055 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/uoscore-uedhoc_linux_edhoc_oscore +${results.learning.servers.mealy}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index edc00265..3651ec21 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/uoscore-uedhoc_linux_edhoc_oscore +${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 98a60459..39d82e75 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -${results.learning.servers}/uoscore-uedhoc_linux_edhoc +${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### diff --git a/src/main/resources/default_fuzzer.properties b/src/main/resources/default_fuzzer.properties index 06f75aa7..70698e22 100644 --- a/src/main/resources/default_fuzzer.properties +++ b/src/main/resources/default_fuzzer.properties @@ -1,6 +1,8 @@ # Properties file storing definitions for various variables used in arguments files -results.learning.clients=experiments/results/clients -results.learning.servers=experiments/results/servers +results.learning.clients.mealy=experiments/results/clients/mealy +results.learning.servers.mealy=experiments/results/servers/mealy +results.learning.clients.ra=experiments/results/clients/ra +results.learning.servers.ra=experiments/results/servers/ra models.clients=experiments/models/clients models.servers=experiments/models/servers alphabets=experiments/alphabets From 10ef57d0ec89bcf63eb826ed705c5c207ca6de42 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:17:59 +0200 Subject: [PATCH 105/169] CI fix incorrect filepath --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6fb5c906..630801fd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -78,12 +78,12 @@ jobs: - name: Test Lakers Server (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/lakers 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/mealy/lakers 2 - name: Test Lakers Server (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/lakers 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/ra/lakers 2 - name: Compress results run: | From da8c8448db7bed40a73384c37f68ea38df397bd9 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:25:27 +0200 Subject: [PATCH 106/169] Decrease maxRuns for RISE server & uoscore-uedhoc --- experiments/args/rise/server_m4_app_ra | 2 ++ experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 ++ 2 files changed, 4 insertions(+) diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 59f141ee..964f2d50 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -23,6 +23,8 @@ IO_RANDOM_WALK -socketClosedAsTimeout -memQueryRuns 3 +-maxRuns +1000 ##### EdhocMapperConfig ##### -protocolVersion diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 3651ec21..703e2567 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -20,6 +20,8 @@ IO_RANDOM_WALK 0.5 -seed 7 +-maxRuns +1000 ##### EdhocMapperConfig ##### From c1c9dd1276ec2c0027d244c638d2b6b360214862 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:35:38 +0200 Subject: [PATCH 107/169] Run CI with RaStar again --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index 12675662..b71fc75a 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index cdca13ec..09c735ea 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ experiments/results/server/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 204ed7d3..8a59d543 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 6845f77b..703dbd0f 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 964f2d50..c88068cf 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 4f833f3d..45911892 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 0690dae6..e3e82c60 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index ff46af89..12d7b6d7 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index ae858adc..b0dca3c5 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index d73c2ed1..f0d25175 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 1d19cded..5734b41e 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 014d8a30..9b99869d 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 9f80cd60..e21272bc 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 01956225..caa724a7 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 85db378a..fc909ff3 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,7 +7,7 @@ ${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 703e2567..1597b76e 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 39d82e75..7254fd49 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries From d05b280dfbe852d1feb46aa0815c241d688df0df Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 4 Jun 2024 16:54:08 +0200 Subject: [PATCH 108/169] Run RISE & uOSCORE Server impl with time limit --- experiments/args/rise/server_m4_app_ra | 4 ++-- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index c88068cf..338fdcb4 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -23,8 +23,8 @@ IO_RANDOM_WALK -socketClosedAsTimeout -memQueryRuns 3 --maxRuns -1000 +-timelimit +PT5H50M ##### EdhocMapperConfig ##### -protocolVersion diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 1597b76e..a579a6ed 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -20,8 +20,8 @@ IO_RANDOM_WALK 0.5 -seed 7 --maxRuns -1000 +-timelimit +PT5H50M ##### EdhocMapperConfig ##### From 00d57bed6390722830361fb39983c08ccb360d2c Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Tue, 4 Jun 2024 23:38:06 +0200 Subject: [PATCH 109/169] Do the diffing last to not fail artifact upload before it can run. --- .github/workflows/ci.yml | 82 +++++++++++++++++++++++++++++++--------- 1 file changed, 64 insertions(+), 18 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 630801fd..f5406b71 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,12 +30,12 @@ jobs: - name: Test Lakers Client (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 - ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/mealy/lakers 3 + - name: Test Lakers Client (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/ra/lakers 3 + - name: Compress results run: | @@ -50,6 +50,12 @@ jobs: lakers_client_mealy.tar.gz lakers_client_ra.tar.gz + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/mealy/lakers 3 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/ra/lakers 3 + Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -78,12 +84,12 @@ jobs: - name: Test Lakers Server (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/mealy/lakers 2 + - name: Test Lakers Server (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/ra/lakers 2 + - name: Compress results run: | @@ -97,6 +103,12 @@ jobs: path: | lakers_server_mealy.tar.gz lakers_server_ra.tar.gz + + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/mealy/lakers 2 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/ra/lakers 2 RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -122,12 +134,12 @@ jobs: - name: Test RISE Client (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 - ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 + - name: Test RISE Client (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/ra/rise_m4_app 4 + - name: Compress results run: | @@ -142,6 +154,12 @@ jobs: rise_m4_client_mealy.tar.gz rise_m4_client_ra.tar.gz + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/ra/rise_m4_app 4 + RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -166,12 +184,12 @@ jobs: - name: Test RISE Server (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 - ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 + - name: Test RISE Server (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/ra/rise_m4_app 5 + - name: Compress results run: | @@ -185,6 +203,12 @@ jobs: path: | rise_m4_server_mealy.tar.gz rise_m4_server_ra.tar.gz + + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/ra/rise_m4_app 5 SIFIS-HOME-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -210,12 +234,12 @@ jobs: - name: Test SIFIS-HOME Client (phase_1, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 - ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 + - name: Test SIFIS-HOME Client (phase_1, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 4 + - name: Compress results run: | @@ -230,6 +254,12 @@ jobs: sifis-home_phase_1_client_mealy.tar.gz sifis-home_phase_1_client_ra.tar.gz + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 4 + SIFIS-HOME-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -254,12 +284,12 @@ jobs: - name: Test SIFIS-HOME Server (phase_1, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 - ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 + - name: Test SIFIS-HOME Server (phase_1, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 5 + - name: Compress results run: | @@ -273,6 +303,12 @@ jobs: path: | sifis-home_phase_1_server_mealy.tar.gz sifis-home_phase_1_server_ra.tar.gz + + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 5 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -298,12 +334,11 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 - ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 - + - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra - ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + - name: Compress results run: | @@ -317,6 +352,12 @@ jobs: path: | uoscore-uedhoc_linux_edhoc_client_mealy.tar.gz uoscore-uedhoc_linux_edhoc_client_ra.tar.gz + + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -342,12 +383,12 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 - ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 + - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra - ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 2 + - name: Compress results run: | @@ -360,4 +401,9 @@ jobs: name: Results path: | uoscore-uedhoc_linux_edhoc_server_mealy.tar.gz - uoscore-uedhoc_linux_edhoc_server_ra.tar.gz \ No newline at end of file + uoscore-uedhoc_linux_edhoc_server_ra.tar.gz + + - name: Diff Mealy + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 2 From ed4b6ce81aeb63343a20bdca675e6e61f5dac4d1 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 5 Jun 2024 13:25:23 +0200 Subject: [PATCH 110/169] Fix arg files for lakers, rise and uoscore server (timelimit & filepath) --- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/server_m4_app_ra | 4 ++-- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 09c735ea..4b63ca64 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -3,7 +3,7 @@ state-fuzzer-server ##### StateFuzzerConfig ##### -output -experiments/results/server/lakers +${results.learning.servers.ra}/lakers ##### LearnerConfig ##### diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 338fdcb4..96557421 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -23,8 +23,8 @@ IO_RANDOM_WALK -socketClosedAsTimeout -memQueryRuns 3 --timelimit -PT5H50M +-timeLimit +PT5H45M ##### EdhocMapperConfig ##### -protocolVersion diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index a579a6ed..245aa527 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -20,8 +20,8 @@ IO_RANDOM_WALK 0.5 -seed 7 --timelimit -PT5H50M +-timeLimit +PT5H45M ##### EdhocMapperConfig ##### From f0760db2e1344ea67ec1392631042e05d2409344 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Wed, 5 Jun 2024 13:33:56 +0200 Subject: [PATCH 111/169] Update artifact upload with new paths and unique names. --- .github/workflows/ci.yml | 89 +++++++++++----------------------------- 1 file changed, 24 insertions(+), 65 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f5406b71..ee744d17 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,20 +35,14 @@ jobs: - name: Test Lakers Client (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra - - - - name: Compress results - run: | - tar -czf lakers_client_mealy.tar.gz experiments/results/clients/mealy/lakers - tar -czf lakers_client_ra.tar.gz experiments/results/clients/ra/lakers - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: Lakers Client path: | - lakers_client_mealy.tar.gz - lakers_client_ra.tar.gz + experiments/results/clients/mealy/lakers + experiments/results/clients/ra/lakers - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/mealy/lakers 3 @@ -89,20 +83,14 @@ jobs: - name: Test Lakers Server (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra - - - - name: Compress results - run: | - tar -czf lakers_server_mealy.tar.gz experiments/results/servers/mealy/lakers - tar -czf lakers_server_ra.tar.gz experiments/results/servers/ra/lakers - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: Lakers Server path: | - lakers_server_mealy.tar.gz - lakers_server_ra.tar.gz + experiments/results/servers/mealy/lakers + experiments/results/servers/ra/lakers - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/mealy/lakers 2 @@ -139,20 +127,14 @@ jobs: - name: Test RISE Client (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra - - - - name: Compress results - run: | - tar -czf rise_m4_client_mealy.tar.gz experiments/results/clients/mealy/rise_m4_app - tar -czf rise_m4_client_ra.tar.gz experiments/results/clients/ra/rise_m4_app - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: RISE Client path: | - rise_m4_client_mealy.tar.gz - rise_m4_client_ra.tar.gz + experiments/results/clients/mealy/rise_m4_app + experiments/results/clients/ra/rise_m4_app - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 @@ -189,20 +171,14 @@ jobs: - name: Test RISE Server (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra - - - - name: Compress results - run: | - tar -czf rise_m4_server_mealy.tar.gz experiments/results/servers/mealy/rise_m4_app - tar -czf rise_m4_server_ra.tar.gz experiments/results/servers/ra/rise_m4_app - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: RISE Server path: | - rise_m4_server_mealy.tar.gz - rise_m4_server_ra.tar.gz + experiments/results/servers/mealy/rise_m4_app + experiments/results/servers/ra/rise_m4_app - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 @@ -239,20 +215,14 @@ jobs: - name: Test SIFIS-HOME Client (phase_1, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra - - - - name: Compress results - run: | - tar -czf sifis-home_phase_1_client_mealy.tar.gz experiments/results/clients/mealy/sifis-home_phase_1 - tar -czf sifis-home_phase_1_client_ra.tar.gz experiments/results/clients/ra/sifis-home_phase_1 - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: SIFIS-HOME Client path: | - sifis-home_phase_1_client_mealy.tar.gz - sifis-home_phase_1_client_ra.tar.gz + experiments/results/clients/mealy/sifis-home_phase_1 + experiments/results/clients/ra/sifis-home_phase_1 - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 @@ -301,8 +271,8 @@ jobs: with: name: Results path: | - sifis-home_phase_1_server_mealy.tar.gz - sifis-home_phase_1_server_ra.tar.gz + experiments/results/servers/mealy/sifis-home_phase_1 + experiments/results/servers/ra/sifis-home_phase_1 - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 @@ -338,20 +308,14 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra - - - - name: Compress results - run: | - tar -czf uoscore-uedhoc_linux_edhoc_client_mealy.tar.gz experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc - tar -czf uoscore-uedhoc_linux_edhoc_client_ra.tar.gz experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: uOSCORE-uEDHOC Client path: | - uoscore-uedhoc_linux_edhoc_client_mealy.tar.gz - uoscore-uedhoc_linux_edhoc_client_ra.tar.gz + experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore + experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 @@ -389,21 +353,16 @@ jobs: run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra - - - name: Compress results - run: | - tar -czf uoscore-uedhoc_linux_edhoc_server_mealy.tar.gz experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc - tar -czf uoscore-uedhoc_linux_edhoc_server_ra.tar.gz experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc - - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: uOSCORE-uEDHOC Server path: | - uoscore-uedhoc_linux_edhoc_server_mealy.tar.gz - uoscore-uedhoc_linux_edhoc_server_ra.tar.gz + experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore + experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 + - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 2 From 3348ae419d1ce7485dbfa112451087a6ebecea27 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:35:32 +0200 Subject: [PATCH 112/169] Run experiments with RaLambda --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index b71fc75a..12675662 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 4b63ca64..fb5a331d 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 8a59d543..204ed7d3 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 703dbd0f..6845f77b 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 96557421..70d63ae8 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 45911892..4f833f3d 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index e3e82c60..0690dae6 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 12d7b6d7..ff46af89 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index b0dca3c5..ae858adc 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index f0d25175..d73c2ed1 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 5734b41e..1d19cded 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 9b99869d..014d8a30 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index e21272bc..9f80cd60 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index caa724a7..01956225 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index fc909ff3..85db378a 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,7 +7,7 @@ ${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 245aa527..02415469 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 7254fd49..39d82e75 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries From bc5cad063402548725a7be5114f6ea1c89eae61c Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:36:29 +0200 Subject: [PATCH 113/169] RaLambda -> RaStar & Depth 4 -> 10 --- experiments/args/lakers/client_ra | 4 ++-- experiments/args/lakers/server_ra | 4 ++-- experiments/args/rise/client_m4_app_ra | 4 ++-- experiments/args/rise/client_ra | 4 ++-- experiments/args/rise/server_m4_app_ra | 4 ++-- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 4 ++-- experiments/args/sifis-home/client_phase_2_ra | 4 ++-- experiments/args/sifis-home/client_phase_3_ra | 4 ++-- experiments/args/sifis-home/client_phase_4_ra | 4 ++-- experiments/args/sifis-home/server_phase_1_ra | 4 ++-- experiments/args/sifis-home/server_phase_2_ra | 4 ++-- experiments/args/sifis-home/server_phase_3_ra | 4 ++-- experiments/args/sifis-home/server_phase_4_ra | 4 ++-- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 4 ++-- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 4 ++-- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 4 ++-- 17 files changed, 33 insertions(+), 33 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index 12675662..a4fe96f3 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,14 +8,14 @@ ${results.learning.clients.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index fb5a331d..2163fb5a 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 204ed7d3..686625f2 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,14 +8,14 @@ ${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 6845f77b..c70cc165 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,14 +8,14 @@ ${results.learning.clients.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 70d63ae8..9b3c85f9 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 4f833f3d..45911892 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 0690dae6..e9199d5c 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,14 +8,14 @@ ${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index ff46af89..6a224cee 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,14 +8,14 @@ ${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index ae858adc..2509fc70 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,14 +8,14 @@ ${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index d73c2ed1..5d3b6a63 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,14 +8,14 @@ ${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 1d19cded..e99c0d64 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 014d8a30..6b12b90e 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 9f80cd60..7c5c268e 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 01956225..3398dae9 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 85db378a..ae82acab 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,14 +7,14 @@ ${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 02415469..dda8e9aa 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 39d82e75..56f444af 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,14 +8,14 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed From 15fd3e1288c21aea091652438ec5fa35f46fa06e Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 5 Jun 2024 17:37:33 +0200 Subject: [PATCH 114/169] Put depth back to 4 ci skip --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index a4fe96f3..b71fc75a 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 2163fb5a..4b63ca64 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 686625f2..8a59d543 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index c70cc165..703dbd0f 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 9b3c85f9..96557421 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 45911892..48019a8d 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -maxRuns 10000 -probNewDataValue diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index e9199d5c..e3e82c60 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 6a224cee..12d7b6d7 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index 2509fc70..b0dca3c5 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 5d3b6a63..f0d25175 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index e99c0d64..5734b41e 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 6b12b90e..9b99869d 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 7c5c268e..e21272bc 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 3398dae9..caa724a7 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index ae82acab..fc909ff3 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -14,7 +14,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index dda8e9aa..245aa527 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 56f444af..7254fd49 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed From 240cab2c336e10504e499282ccf38f026937ce22 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 6 Jun 2024 15:18:33 +0200 Subject: [PATCH 115/169] Decrease timeLimit for RISE & uOSCORE server --- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 96557421..668a5d9e 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -24,7 +24,7 @@ IO_RANDOM_WALK -memQueryRuns 3 -timeLimit -PT5H45M +PT5H30M ##### EdhocMapperConfig ##### -protocolVersion diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 245aa527..7d00d52f 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -21,7 +21,7 @@ IO_RANDOM_WALK -seed 7 -timeLimit -PT5H45M +PT5H30M ##### EdhocMapperConfig ##### From c38cf84e59eff49459bdb66484af2f9fefada783 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 6 Jun 2024 15:17:51 +0200 Subject: [PATCH 116/169] give SIFIS-HOME artifact proper name ci skip --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ee744d17..57d15743 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -269,7 +269,7 @@ jobs: - name: Upload results uses: actions/upload-artifact@v4 with: - name: Results + name: SIFIS-HOME Server path: | experiments/results/servers/mealy/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 From 15437344845d12fa8e2499b1bef464db7c1c9ab5 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 6 Jun 2024 15:20:55 +0200 Subject: [PATCH 117/169] Run CI experiments with RaLambda --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index b71fc75a..12675662 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 4b63ca64..fb5a331d 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 8a59d543..204ed7d3 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 703dbd0f..6845f77b 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 668a5d9e..c136413d 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 48019a8d..6b5f2a29 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index e3e82c60..0690dae6 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 12d7b6d7..ff46af89 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index b0dca3c5..ae858adc 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index f0d25175..d73c2ed1 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 5734b41e..1d19cded 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 9b99869d..014d8a30 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index e21272bc..9f80cd60 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index caa724a7..01956225 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index fc909ff3..85db378a 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,7 +7,7 @@ ${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 7d00d52f..43ff9a8b 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 7254fd49..39d82e75 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries From 7aa845cb523b3df187a541c4a8ae2d7a988efdee Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 6 Jun 2024 15:34:09 +0200 Subject: [PATCH 118/169] Remove socket_closed from sifis-home client --- experiments/args/sifis-home/client_phase_1_ra | 1 + 1 file changed, 1 insertion(+) diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 0690dae6..10a39fc5 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -20,6 +20,7 @@ IO_RANDOM_WALK 0.5 -seed 7 +-socketClosedAsTimeout From 8e5d2ad52739be561a1a6ad4949a29f8c6cb7a69 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 6 Jun 2024 16:15:14 +0200 Subject: [PATCH 119/169] Update maxDepthRA to 10 for all arg files ci skip Co-authored-by: 00oskpet <00oskpet@users.noreply.github.com> --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index 12675662..a683f98d 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index fb5a331d..eb86ca32 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 204ed7d3..b4100106 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 6845f77b..847cd623 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index c136413d..9bfb5376 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 6b5f2a29..4f833f3d 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -maxRuns 10000 -probNewDataValue diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 10a39fc5..5a759c43 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index ff46af89..f0194c3e 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index ae858adc..3208e1bb 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index d73c2ed1..3480d6a4 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 1d19cded..8cfaf665 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 014d8a30..f3733a3b 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 9f80cd60..f514aa98 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 01956225..10fe1753 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 85db378a..8944b646 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -14,7 +14,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 43ff9a8b..2e2d3eea 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 39d82e75..79ce5603 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed From aac6d953901f4b3be968cbd3e26d499d0430cabc Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 6 Jun 2024 16:16:20 +0200 Subject: [PATCH 120/169] Add all RA results and setup RA Diff in CI --- .github/workflows/ci.yml | 32 ++-- .../clients/{ => mealy}/lakers/alphabet.xml | 0 .../clients/{ => mealy}/lakers/hyp1.dot | 0 .../clients/{ => mealy}/lakers/hyp2.dot | 0 .../clients/{ => mealy}/lakers/hyp3.dot | 0 .../{ => mealy}/lakers/learnedModel.dot | 0 .../{ => mealy}/lakers/learnedModel.pdf | Bin .../{ => mealy}/rise_m4_app/alphabet.xml | 0 .../clients/{ => mealy}/rise_m4_app/hyp1.dot | 0 .../clients/{ => mealy}/rise_m4_app/hyp2.dot | 0 .../clients/{ => mealy}/rise_m4_app/hyp3.dot | 0 .../clients/{ => mealy}/rise_m4_app/hyp4.dot | 0 .../{ => mealy}/rise_m4_app/learnedModel.dot | 0 .../{ => mealy}/rise_m4_app/learnedModel.pdf | Bin .../sifis-home_phase_1/alphabet.xml | 0 .../{ => mealy}/sifis-home_phase_1/hyp1.dot | 0 .../{ => mealy}/sifis-home_phase_1/hyp2.dot | 0 .../{ => mealy}/sifis-home_phase_1/hyp3.dot | 0 .../{ => mealy}/sifis-home_phase_1/hyp4.dot | 0 .../sifis-home_phase_1/learnedModel.dot | 0 .../sifis-home_phase_1/learnedModel.pdf | Bin .../alphabet.xml | 0 .../hyp1.dot | 0 .../hyp2.dot | 0 .../hyp3.dot | 0 .../learnedModel.dot | 0 .../learnedModel.pdf | Bin .../clients/ra/lakers/command.args | 71 ++++++++ .../saved_results/clients/ra/lakers/hyp1.dot | 22 +++ .../saved_results/clients/ra/lakers/hyp2.dot | 34 ++++ .../saved_results/clients/ra/lakers/hyp3.dot | 44 +++++ .../saved_results/clients/ra/lakers/hyp4.dot | 46 +++++ .../clients/ra/lakers/learnedModel.dot | 46 +++++ .../clients/ra/lakers/learnedModel.pdf | Bin 0 -> 14619 bytes .../clients/ra/lakers/learnedModelbtf.dot | 46 +++++ .../ra/lakers/mapper_connection.config | 153 ++++++++++++++++ .../clients/ra/lakers/statistics.txt | 121 ++++++++++++ .../clients/ra/rise_m4_app/command.args | 79 ++++++++ .../clients/ra/rise_m4_app/hyp1.dot | 22 +++ .../clients/ra/rise_m4_app/hyp10.dot | 100 ++++++++++ .../clients/ra/rise_m4_app/hyp11.dot | 102 +++++++++++ .../clients/ra/rise_m4_app/hyp2.dot | 34 ++++ .../clients/ra/rise_m4_app/hyp3.dot | 48 +++++ .../clients/ra/rise_m4_app/hyp4.dot | 58 ++++++ .../clients/ra/rise_m4_app/hyp5.dot | 82 +++++++++ .../clients/ra/rise_m4_app/hyp6.dot | 84 +++++++++ .../clients/ra/rise_m4_app/hyp7.dot | 86 +++++++++ .../clients/ra/rise_m4_app/hyp8.dot | 88 +++++++++ .../clients/ra/rise_m4_app/hyp9.dot | 90 +++++++++ .../clients/ra/rise_m4_app/learnedModel.dot | 102 +++++++++++ .../clients/ra/rise_m4_app/learnedModel.pdf | Bin 0 -> 21937 bytes .../ra/rise_m4_app/learnedModelbtf.dot | 102 +++++++++++ .../ra/rise_m4_app/mapper_connection.config | 153 ++++++++++++++++ .../clients/ra/rise_m4_app/statistics.txt | 128 +++++++++++++ .../ra/sifis-home_phase_1/command.args | 79 ++++++++ .../clients/ra/sifis-home_phase_1/hyp1.dot | 22 +++ .../clients/ra/sifis-home_phase_1/hyp10.dot | 110 +++++++++++ .../clients/ra/sifis-home_phase_1/hyp11.dot | 112 ++++++++++++ .../clients/ra/sifis-home_phase_1/hyp12.dot | 114 ++++++++++++ .../clients/ra/sifis-home_phase_1/hyp2.dot | 34 ++++ .../clients/ra/sifis-home_phase_1/hyp3.dot | 46 +++++ .../clients/ra/sifis-home_phase_1/hyp4.dot | 48 +++++ .../clients/ra/sifis-home_phase_1/hyp5.dot | 60 ++++++ .../clients/ra/sifis-home_phase_1/hyp6.dot | 84 +++++++++ .../clients/ra/sifis-home_phase_1/hyp7.dot | 86 +++++++++ .../clients/ra/sifis-home_phase_1/hyp8.dot | 88 +++++++++ .../clients/ra/sifis-home_phase_1/hyp9.dot | 100 ++++++++++ .../ra/sifis-home_phase_1/learnedModel.dot | 114 ++++++++++++ .../ra/sifis-home_phase_1/learnedModel.pdf | Bin 0 -> 22880 bytes .../ra/sifis-home_phase_1/learnedModelbtf.dot | 114 ++++++++++++ .../mapper_connection.config | 153 ++++++++++++++++ .../ra/sifis-home_phase_1/statistics.txt | 129 +++++++++++++ .../command.args | 81 +++++++++ .../hyp1.dot | 22 +++ .../hyp2.dot | 34 ++++ .../hyp3.dot | 46 +++++ .../hyp4.dot | 70 +++++++ .../hyp5.dot | 72 ++++++++ .../hyp6.dot | 82 +++++++++ .../hyp7.dot | 84 +++++++++ .../hyp8.dot | 86 +++++++++ .../hyp9.dot | 88 +++++++++ .../learnedModel.dot | 88 +++++++++ .../learnedModel.pdf | Bin 0 -> 19588 bytes .../learnedModelbtf.dot | 88 +++++++++ .../mapper_connection.config | 153 ++++++++++++++++ .../statistics.txt | 126 +++++++++++++ .../servers/{ => mealy}/lakers/alphabet.xml | 0 .../servers/{ => mealy}/lakers/hyp1.dot | 0 .../servers/{ => mealy}/lakers/hyp2.dot | 0 .../{ => mealy}/lakers/learnedModel.dot | 0 .../{ => mealy}/lakers/learnedModel.pdf | Bin .../{ => mealy}/rise_m4_app/alphabet.xml | 0 .../servers/{ => mealy}/rise_m4_app/hyp1.dot | 0 .../servers/{ => mealy}/rise_m4_app/hyp2.dot | 0 .../servers/{ => mealy}/rise_m4_app/hyp3.dot | 0 .../servers/{ => mealy}/rise_m4_app/hyp4.dot | 0 .../servers/{ => mealy}/rise_m4_app/hyp5.dot | 0 .../{ => mealy}/rise_m4_app/learnedModel.dot | 0 .../{ => mealy}/rise_m4_app/learnedModel.pdf | Bin .../sifis-home_phase_1/alphabet.xml | 0 .../{ => mealy}/sifis-home_phase_1/hyp1.dot | 0 .../{ => mealy}/sifis-home_phase_1/hyp2.dot | 0 .../{ => mealy}/sifis-home_phase_1/hyp3.dot | 0 .../{ => mealy}/sifis-home_phase_1/hyp4.dot | 0 .../{ => mealy}/sifis-home_phase_1/hyp5.dot | 0 .../sifis-home_phase_1/learnedModel.dot | 0 .../sifis-home_phase_1/learnedModel.pdf | Bin .../alphabet.xml | 0 .../hyp1.dot | 0 .../hyp2.dot | 0 .../learnedModel.dot | 0 .../learnedModel.pdf | Bin .../servers/ra/lakers/command.args | 72 ++++++++ .../saved_results/servers/ra/lakers/error.msg | 12 ++ .../saved_results/servers/ra/lakers/hyp1.dot | 22 +++ .../saved_results/servers/ra/lakers/hyp2.dot | 34 ++++ .../saved_results/servers/ra/lakers/hyp3.dot | 46 +++++ .../saved_results/servers/ra/lakers/hyp4.dot | 60 ++++++ .../saved_results/servers/ra/lakers/hyp5.dot | 62 +++++++ .../saved_results/servers/ra/lakers/hyp6.dot | 64 +++++++ .../saved_results/servers/ra/lakers/hyp7.dot | 66 +++++++ .../servers/ra/lakers/learnedModel.dot | 66 +++++++ .../servers/ra/lakers/learnedModel.pdf | Bin 0 -> 18204 bytes .../servers/ra/lakers/learnedModelbtf.dot | 66 +++++++ .../ra/lakers/mapper_connection.config | 153 ++++++++++++++++ .../servers/ra/lakers/statistics.txt | 125 +++++++++++++ .../ra/sifis-home_phase_1/command.args | 84 +++++++++ .../servers/ra/sifis-home_phase_1/hyp1.dot | 22 +++ .../servers/ra/sifis-home_phase_1/hyp10.dot | 128 +++++++++++++ .../servers/ra/sifis-home_phase_1/hyp11.dot | 132 ++++++++++++++ .../servers/ra/sifis-home_phase_1/hyp12.dot | 136 ++++++++++++++ .../servers/ra/sifis-home_phase_1/hyp13.dot | 138 ++++++++++++++ .../servers/ra/sifis-home_phase_1/hyp14.dot | 151 +++++++++++++++ .../servers/ra/sifis-home_phase_1/hyp15.dot | 155 ++++++++++++++++ .../servers/ra/sifis-home_phase_1/hyp16.dot | 172 ++++++++++++++++++ .../servers/ra/sifis-home_phase_1/hyp2.dot | 47 +++++ .../servers/ra/sifis-home_phase_1/hyp3.dot | 51 ++++++ .../servers/ra/sifis-home_phase_1/hyp4.dot | 78 ++++++++ .../servers/ra/sifis-home_phase_1/hyp5.dot | 82 +++++++++ .../servers/ra/sifis-home_phase_1/hyp6.dot | 86 +++++++++ .../servers/ra/sifis-home_phase_1/hyp7.dot | 107 +++++++++++ .../servers/ra/sifis-home_phase_1/hyp8.dot | 111 +++++++++++ .../servers/ra/sifis-home_phase_1/hyp9.dot | 124 +++++++++++++ .../ra/sifis-home_phase_1/learnedModel.dot | 172 ++++++++++++++++++ .../ra/sifis-home_phase_1/learnedModel.pdf | Bin 0 -> 31319 bytes .../ra/sifis-home_phase_1/learnedModelbtf.dot | 172 ++++++++++++++++++ .../mapper_connection.config | 153 ++++++++++++++++ .../ra/sifis-home_phase_1/statistics.txt | 132 ++++++++++++++ .../command.args | 84 +++++++++ .../hyp1.dot | 20 ++ .../hyp2.dot | 32 ++++ .../hyp3.dot | 42 +++++ .../hyp4.dot | 58 ++++++ .../hyp5.dot | 61 +++++++ .../learnedModel.dot | 61 +++++++ .../learnedModel.pdf | Bin 0 -> 17287 bytes .../learnedModelbtf.dot | 61 +++++++ .../mapper_connection.config | 153 ++++++++++++++++ .../statistics.txt | 122 +++++++++++++ 160 files changed, 8545 insertions(+), 16 deletions(-) rename experiments/saved_results/clients/{ => mealy}/lakers/alphabet.xml (100%) rename experiments/saved_results/clients/{ => mealy}/lakers/hyp1.dot (100%) rename experiments/saved_results/clients/{ => mealy}/lakers/hyp2.dot (100%) rename experiments/saved_results/clients/{ => mealy}/lakers/hyp3.dot (100%) rename experiments/saved_results/clients/{ => mealy}/lakers/learnedModel.dot (100%) rename experiments/saved_results/clients/{ => mealy}/lakers/learnedModel.pdf (100%) rename experiments/saved_results/clients/{ => mealy}/rise_m4_app/alphabet.xml (100%) rename experiments/saved_results/clients/{ => mealy}/rise_m4_app/hyp1.dot (100%) rename experiments/saved_results/clients/{ => mealy}/rise_m4_app/hyp2.dot (100%) rename experiments/saved_results/clients/{ => mealy}/rise_m4_app/hyp3.dot (100%) rename experiments/saved_results/clients/{ => mealy}/rise_m4_app/hyp4.dot (100%) rename experiments/saved_results/clients/{ => mealy}/rise_m4_app/learnedModel.dot (100%) rename experiments/saved_results/clients/{ => mealy}/rise_m4_app/learnedModel.pdf (100%) rename experiments/saved_results/clients/{ => mealy}/sifis-home_phase_1/alphabet.xml (100%) rename experiments/saved_results/clients/{ => mealy}/sifis-home_phase_1/hyp1.dot (100%) rename experiments/saved_results/clients/{ => mealy}/sifis-home_phase_1/hyp2.dot (100%) rename experiments/saved_results/clients/{ => mealy}/sifis-home_phase_1/hyp3.dot (100%) rename experiments/saved_results/clients/{ => mealy}/sifis-home_phase_1/hyp4.dot (100%) rename experiments/saved_results/clients/{ => mealy}/sifis-home_phase_1/learnedModel.dot (100%) rename experiments/saved_results/clients/{ => mealy}/sifis-home_phase_1/learnedModel.pdf (100%) rename experiments/saved_results/clients/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml (100%) rename experiments/saved_results/clients/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot (100%) rename experiments/saved_results/clients/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot (100%) rename experiments/saved_results/clients/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot (100%) rename experiments/saved_results/clients/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot (100%) rename experiments/saved_results/clients/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf (100%) create mode 100644 experiments/saved_results/clients/ra/lakers/command.args create mode 100644 experiments/saved_results/clients/ra/lakers/hyp1.dot create mode 100644 experiments/saved_results/clients/ra/lakers/hyp2.dot create mode 100644 experiments/saved_results/clients/ra/lakers/hyp3.dot create mode 100644 experiments/saved_results/clients/ra/lakers/hyp4.dot create mode 100644 experiments/saved_results/clients/ra/lakers/learnedModel.dot create mode 100644 experiments/saved_results/clients/ra/lakers/learnedModel.pdf create mode 100644 experiments/saved_results/clients/ra/lakers/learnedModelbtf.dot create mode 100644 experiments/saved_results/clients/ra/lakers/mapper_connection.config create mode 100644 experiments/saved_results/clients/ra/lakers/statistics.txt create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/command.args create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp1.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp10.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp11.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp2.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp3.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp4.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp5.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp6.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp7.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp8.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/hyp9.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/learnedModel.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/learnedModel.pdf create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/learnedModelbtf.dot create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/mapper_connection.config create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/statistics.txt create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/command.args create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp1.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp10.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp11.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp12.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp2.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp3.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp4.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp5.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp6.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp7.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp8.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/hyp9.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModel.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModel.pdf create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModelbtf.dot create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/mapper_connection.config create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/statistics.txt create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp6.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp7.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp8.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp9.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelbtf.dot create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt rename experiments/saved_results/servers/{ => mealy}/lakers/alphabet.xml (100%) rename experiments/saved_results/servers/{ => mealy}/lakers/hyp1.dot (100%) rename experiments/saved_results/servers/{ => mealy}/lakers/hyp2.dot (100%) rename experiments/saved_results/servers/{ => mealy}/lakers/learnedModel.dot (100%) rename experiments/saved_results/servers/{ => mealy}/lakers/learnedModel.pdf (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/alphabet.xml (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/hyp1.dot (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/hyp2.dot (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/hyp3.dot (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/hyp4.dot (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/hyp5.dot (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/learnedModel.dot (100%) rename experiments/saved_results/servers/{ => mealy}/rise_m4_app/learnedModel.pdf (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/alphabet.xml (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/hyp1.dot (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/hyp2.dot (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/hyp3.dot (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/hyp4.dot (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/hyp5.dot (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/learnedModel.dot (100%) rename experiments/saved_results/servers/{ => mealy}/sifis-home_phase_1/learnedModel.pdf (100%) rename experiments/saved_results/servers/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml (100%) rename experiments/saved_results/servers/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot (100%) rename experiments/saved_results/servers/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot (100%) rename experiments/saved_results/servers/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot (100%) rename experiments/saved_results/servers/{ => mealy}/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf (100%) create mode 100644 experiments/saved_results/servers/ra/lakers/command.args create mode 100644 experiments/saved_results/servers/ra/lakers/error.msg create mode 100644 experiments/saved_results/servers/ra/lakers/hyp1.dot create mode 100644 experiments/saved_results/servers/ra/lakers/hyp2.dot create mode 100644 experiments/saved_results/servers/ra/lakers/hyp3.dot create mode 100644 experiments/saved_results/servers/ra/lakers/hyp4.dot create mode 100644 experiments/saved_results/servers/ra/lakers/hyp5.dot create mode 100644 experiments/saved_results/servers/ra/lakers/hyp6.dot create mode 100644 experiments/saved_results/servers/ra/lakers/hyp7.dot create mode 100644 experiments/saved_results/servers/ra/lakers/learnedModel.dot create mode 100644 experiments/saved_results/servers/ra/lakers/learnedModel.pdf create mode 100644 experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot create mode 100644 experiments/saved_results/servers/ra/lakers/mapper_connection.config create mode 100644 experiments/saved_results/servers/ra/lakers/statistics.txt create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/command.args create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp1.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp10.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp11.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp12.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp13.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp14.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp15.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp16.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp2.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp3.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp4.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp5.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp6.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp7.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp8.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/hyp9.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModel.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModel.pdf create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModelbtf.dot create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/mapper_connection.config create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/statistics.txt create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelbtf.dot create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 57d15743..a7dbb38a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -45,10 +45,10 @@ jobs: experiments/results/clients/ra/lakers - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/mealy/lakers 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/lakers experiments/results/clients/mealy/lakers 3 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/lakers experiments/results/clients/ra/lakers 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 4 Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -93,10 +93,10 @@ jobs: experiments/results/servers/ra/lakers - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/mealy/lakers 2 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/mealy/lakers 2 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/lakers experiments/results/servers/ra/lakers 2 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 7 RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -137,10 +137,10 @@ jobs: experiments/results/clients/ra/rise_m4_app - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/rise_m4_app experiments/results/clients/ra/rise_m4_app 4 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 11 RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -181,10 +181,10 @@ jobs: experiments/results/servers/ra/rise_m4_app - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/rise_m4_app experiments/results/servers/ra/rise_m4_app 5 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 12 SIFIS-HOME-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -225,10 +225,10 @@ jobs: experiments/results/clients/ra/sifis-home_phase_1 - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 4 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 12 SIFIS-HOME-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -275,10 +275,10 @@ jobs: experiments/results/servers/ra/sifis-home_phase_1 - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 5 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 16 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -318,10 +318,10 @@ jobs: experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 9 uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -362,7 +362,7 @@ jobs: experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 2 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 5 diff --git a/experiments/saved_results/clients/lakers/alphabet.xml b/experiments/saved_results/clients/mealy/lakers/alphabet.xml similarity index 100% rename from experiments/saved_results/clients/lakers/alphabet.xml rename to experiments/saved_results/clients/mealy/lakers/alphabet.xml diff --git a/experiments/saved_results/clients/lakers/hyp1.dot b/experiments/saved_results/clients/mealy/lakers/hyp1.dot similarity index 100% rename from experiments/saved_results/clients/lakers/hyp1.dot rename to experiments/saved_results/clients/mealy/lakers/hyp1.dot diff --git a/experiments/saved_results/clients/lakers/hyp2.dot b/experiments/saved_results/clients/mealy/lakers/hyp2.dot similarity index 100% rename from experiments/saved_results/clients/lakers/hyp2.dot rename to experiments/saved_results/clients/mealy/lakers/hyp2.dot diff --git a/experiments/saved_results/clients/lakers/hyp3.dot b/experiments/saved_results/clients/mealy/lakers/hyp3.dot similarity index 100% rename from experiments/saved_results/clients/lakers/hyp3.dot rename to experiments/saved_results/clients/mealy/lakers/hyp3.dot diff --git a/experiments/saved_results/clients/lakers/learnedModel.dot b/experiments/saved_results/clients/mealy/lakers/learnedModel.dot similarity index 100% rename from experiments/saved_results/clients/lakers/learnedModel.dot rename to experiments/saved_results/clients/mealy/lakers/learnedModel.dot diff --git a/experiments/saved_results/clients/lakers/learnedModel.pdf b/experiments/saved_results/clients/mealy/lakers/learnedModel.pdf similarity index 100% rename from experiments/saved_results/clients/lakers/learnedModel.pdf rename to experiments/saved_results/clients/mealy/lakers/learnedModel.pdf diff --git a/experiments/saved_results/clients/rise_m4_app/alphabet.xml b/experiments/saved_results/clients/mealy/rise_m4_app/alphabet.xml similarity index 100% rename from experiments/saved_results/clients/rise_m4_app/alphabet.xml rename to experiments/saved_results/clients/mealy/rise_m4_app/alphabet.xml diff --git a/experiments/saved_results/clients/rise_m4_app/hyp1.dot b/experiments/saved_results/clients/mealy/rise_m4_app/hyp1.dot similarity index 100% rename from experiments/saved_results/clients/rise_m4_app/hyp1.dot rename to experiments/saved_results/clients/mealy/rise_m4_app/hyp1.dot diff --git a/experiments/saved_results/clients/rise_m4_app/hyp2.dot b/experiments/saved_results/clients/mealy/rise_m4_app/hyp2.dot similarity index 100% rename from experiments/saved_results/clients/rise_m4_app/hyp2.dot rename to experiments/saved_results/clients/mealy/rise_m4_app/hyp2.dot diff --git a/experiments/saved_results/clients/rise_m4_app/hyp3.dot b/experiments/saved_results/clients/mealy/rise_m4_app/hyp3.dot similarity index 100% rename from experiments/saved_results/clients/rise_m4_app/hyp3.dot rename to experiments/saved_results/clients/mealy/rise_m4_app/hyp3.dot diff --git a/experiments/saved_results/clients/rise_m4_app/hyp4.dot b/experiments/saved_results/clients/mealy/rise_m4_app/hyp4.dot similarity index 100% rename from experiments/saved_results/clients/rise_m4_app/hyp4.dot rename to experiments/saved_results/clients/mealy/rise_m4_app/hyp4.dot diff --git a/experiments/saved_results/clients/rise_m4_app/learnedModel.dot b/experiments/saved_results/clients/mealy/rise_m4_app/learnedModel.dot similarity index 100% rename from experiments/saved_results/clients/rise_m4_app/learnedModel.dot rename to experiments/saved_results/clients/mealy/rise_m4_app/learnedModel.dot diff --git a/experiments/saved_results/clients/rise_m4_app/learnedModel.pdf b/experiments/saved_results/clients/mealy/rise_m4_app/learnedModel.pdf similarity index 100% rename from experiments/saved_results/clients/rise_m4_app/learnedModel.pdf rename to experiments/saved_results/clients/mealy/rise_m4_app/learnedModel.pdf diff --git a/experiments/saved_results/clients/sifis-home_phase_1/alphabet.xml b/experiments/saved_results/clients/mealy/sifis-home_phase_1/alphabet.xml similarity index 100% rename from experiments/saved_results/clients/sifis-home_phase_1/alphabet.xml rename to experiments/saved_results/clients/mealy/sifis-home_phase_1/alphabet.xml diff --git a/experiments/saved_results/clients/sifis-home_phase_1/hyp1.dot b/experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp1.dot similarity index 100% rename from experiments/saved_results/clients/sifis-home_phase_1/hyp1.dot rename to experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp1.dot diff --git a/experiments/saved_results/clients/sifis-home_phase_1/hyp2.dot b/experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp2.dot similarity index 100% rename from experiments/saved_results/clients/sifis-home_phase_1/hyp2.dot rename to experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp2.dot diff --git a/experiments/saved_results/clients/sifis-home_phase_1/hyp3.dot b/experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp3.dot similarity index 100% rename from experiments/saved_results/clients/sifis-home_phase_1/hyp3.dot rename to experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp3.dot diff --git a/experiments/saved_results/clients/sifis-home_phase_1/hyp4.dot b/experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp4.dot similarity index 100% rename from experiments/saved_results/clients/sifis-home_phase_1/hyp4.dot rename to experiments/saved_results/clients/mealy/sifis-home_phase_1/hyp4.dot diff --git a/experiments/saved_results/clients/sifis-home_phase_1/learnedModel.dot b/experiments/saved_results/clients/mealy/sifis-home_phase_1/learnedModel.dot similarity index 100% rename from experiments/saved_results/clients/sifis-home_phase_1/learnedModel.dot rename to experiments/saved_results/clients/mealy/sifis-home_phase_1/learnedModel.dot diff --git a/experiments/saved_results/clients/sifis-home_phase_1/learnedModel.pdf b/experiments/saved_results/clients/mealy/sifis-home_phase_1/learnedModel.pdf similarity index 100% rename from experiments/saved_results/clients/sifis-home_phase_1/learnedModel.pdf rename to experiments/saved_results/clients/mealy/sifis-home_phase_1/learnedModel.pdf diff --git a/experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml b/experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml similarity index 100% rename from experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml rename to experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml diff --git a/experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot b/experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot similarity index 100% rename from experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot rename to experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot diff --git a/experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot b/experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot similarity index 100% rename from experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot rename to experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot diff --git a/experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot b/experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot similarity index 100% rename from experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot rename to experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot diff --git a/experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot b/experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot similarity index 100% rename from experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot rename to experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot diff --git a/experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf b/experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf similarity index 100% rename from experiments/saved_results/clients/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf rename to experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf diff --git a/experiments/saved_results/clients/ra/lakers/command.args b/experiments/saved_results/clients/ra/lakers/command.args new file mode 100644 index 00000000..a4fe96f3 --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/command.args @@ -0,0 +1,71 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients.ra}/lakers + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +10 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +## Mapper Auth ## + +-mapCredType +CCS + +-mapIdCredType +KID + +## Sul Auth ## + +-sulCredType +CCS + +-sulIdCredType +KID + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_lakers.json + +-testVectorJsonKey +test_vector_p256 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Responder + +##### SulConfig ##### +-responseWait +300 +-processDir +${models.clients}/lakers +-cmd +./coapclient +-startWait +50 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/saved_results/clients/ra/lakers/hyp1.dot b/experiments/saved_results/clients/ra/lakers/hyp1.dot new file mode 100644 index 00000000..e2669d1c --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/hyp1.dot @@ -0,0 +1,22 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/lakers/hyp2.dot b/experiments/saved_results/clients/ra/lakers/hyp2.dot new file mode 100644 index 00000000..aac1c653 --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/hyp2.dot @@ -0,0 +1,34 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +} diff --git a/experiments/saved_results/clients/ra/lakers/hyp3.dot b/experiments/saved_results/clients/ra/lakers/hyp3.dot new file mode 100644 index 00000000..2790561f --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/hyp3.dot @@ -0,0 +1,44 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +} diff --git a/experiments/saved_results/clients/ra/lakers/hyp4.dot b/experiments/saved_results/clients/ra/lakers/hyp4.dot new file mode 100644 index 00000000..67085162 --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/hyp4.dot @@ -0,0 +1,46 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +} diff --git a/experiments/saved_results/clients/ra/lakers/learnedModel.dot b/experiments/saved_results/clients/ra/lakers/learnedModel.dot new file mode 100644 index 00000000..67085162 --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/learnedModel.dot @@ -0,0 +1,46 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +} diff --git a/experiments/saved_results/clients/ra/lakers/learnedModel.pdf b/experiments/saved_results/clients/ra/lakers/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5bd74cc2cf6d6def5dd3307bfedecec5d598cb0e GIT binary patch literal 14619 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 literal 0 HcmV?d00001 diff --git a/experiments/saved_results/clients/ra/lakers/learnedModelbtf.dot b/experiments/saved_results/clients/ra/lakers/learnedModelbtf.dot new file mode 100644 index 00000000..3f2dcf56 --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/learnedModelbtf.dot @@ -0,0 +1,46 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +} diff --git a/experiments/saved_results/clients/ra/lakers/mapper_connection.config b/experiments/saved_results/clients/ra/lakers/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/clients/ra/lakers/statistics.txt b/experiments/saved_results/clients/ra/lakers/statistics.txt new file mode 100644 index 00000000..b355cdc4 --- /dev/null +++ b/experiments/saved_results/clients/ra/lakers/statistics.txt @@ -0,0 +1,121 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/clients/ra/lakers +Fuzzing Client: true + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 1 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: null +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 10 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulClientConfig Parameters +Client Wait: 50 +Port: 5683 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: false +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v23 +Combined Message Version: v06 +Edhoc Role: Responder +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: applicationEndpoint +App Message Code To Coap Server: GET +App Message Payload To Coap Server: +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: true +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: null +Force Oscore Recipient Id: null + +AuthenticationConfig Parameters +Map Cred Type: CCS +Map Id Cred Type: KID +Sul Cred Type: CCS +Sul Id Cred Type: KID +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_lakers.json +Test Vector Key: test_vector_p256 +Test Vector Peer Key Curve: P256 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: true +Size of the input alphabet: 26 +Number of states: 10 +Number of hypotheses: 4 +Number of inputs: 100215 +Number of tests: 10132 +Number of learning inputs: 237 +Number of learning tests: 132 +Number of inputs up to last hypothesis: 2285 +Number of tests up to last hypothesis: 339 +Time (ms) to learn model: 4613865 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] +CE 2:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] TIMEOUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] TIMEOUT[] / true] +Number of inputs when hypothesis was generated: [27, 110, 2118, 2285] +Number of tests when hypothesis was generated: [27, 70, 303, 339] +Time (ms) when hypothesis was generated: [10406, 30189, 132762, 145730] +Number of inputs when counterexample was found: [29, 2043, 2231] +Number of tests when counterexample was found: [28, 264, 315] +Time (ms) when counterexample was found: [10871, 119305, 138258] diff --git a/experiments/saved_results/clients/ra/rise_m4_app/command.args b/experiments/saved_results/clients/ra/rise_m4_app/command.args new file mode 100644 index 00000000..686625f2 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/command.args @@ -0,0 +1,79 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients.ra}/rise_m4_app + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +10 +-probNewDataValue +0.5 +-seed +7 +-socketClosedAsTimeout + + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_rise.json + +-testVectorJsonKey +test_vector_ed25519 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Responder + +-appCoapResource +helloWorld + + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.clients}/rise +-cmd +java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocClient 5 +-startWait +100 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp1.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp1.dot new file mode 100644 index 00000000..e2669d1c --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp1.dot @@ -0,0 +1,22 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp10.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp10.dot new file mode 100644 index 00000000..0bf9841e --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp10.dot @@ -0,0 +1,100 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l18" [label=] +"l8" -> "l18" [label=] +"l9" -> "l11" [label=] +"l10" -> "l20" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l19" [label=] +"l11" -> "l19" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +"l17" -> "l0" [label=] +"l18" -> "l8" [label=] +"l19" -> "l11" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l19" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp11.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp11.dot new file mode 100644 index 00000000..b77c7913 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp11.dot @@ -0,0 +1,102 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l18" [label=] +"l8" -> "l18" [label=] +"l9" -> "l11" [label=] +"l10" -> "l20" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l19" [label=] +"l11" -> "l19" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +"l17" -> "l0" [label=] +"l18" -> "l8" [label=] +"l19" -> "l11" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l21" [label=] +"l21" -> "l20" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp2.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp2.dot new file mode 100644 index 00000000..aac1c653 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp2.dot @@ -0,0 +1,34 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp3.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp3.dot new file mode 100644 index 00000000..90aae8c5 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp3.dot @@ -0,0 +1,48 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l9" -> "l0" [label=] +"l10" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp4.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp4.dot new file mode 100644 index 00000000..c9c7fe67 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp4.dot @@ -0,0 +1,58 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l11" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l5" [label=] +"l11" -> "l5" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp5.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp5.dot new file mode 100644 index 00000000..271a795d --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp5.dot @@ -0,0 +1,82 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l11" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l5" [label=] +"l11" -> "l5" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l5" [label=] +"l14" -> "l5" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l15" -> "l11" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp6.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp6.dot new file mode 100644 index 00000000..a5e775d6 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp6.dot @@ -0,0 +1,84 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l11" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l5" [label=] +"l11" -> "l5" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp7.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp7.dot new file mode 100644 index 00000000..d451d408 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp7.dot @@ -0,0 +1,86 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l11" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l5" [label=] +"l11" -> "l5" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +"l17" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp8.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp8.dot new file mode 100644 index 00000000..3d5bb62d --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp8.dot @@ -0,0 +1,88 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l18" [label=] +"l8" -> "l18" [label=] +"l9" -> "l11" [label=] +"l10" -> "l11" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l5" [label=] +"l11" -> "l5" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +"l17" -> "l0" [label=] +"l18" -> "l8" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/hyp9.dot b/experiments/saved_results/clients/ra/rise_m4_app/hyp9.dot new file mode 100644 index 00000000..e536990c --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/hyp9.dot @@ -0,0 +1,90 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l18" [label=] +"l8" -> "l18" [label=] +"l9" -> "l11" [label=] +"l10" -> "l11" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l19" [label=] +"l11" -> "l19" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +"l17" -> "l0" [label=] +"l18" -> "l8" [label=] +"l19" -> "l11" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/learnedModel.dot b/experiments/saved_results/clients/ra/rise_m4_app/learnedModel.dot new file mode 100644 index 00000000..b77c7913 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/learnedModel.dot @@ -0,0 +1,102 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l18" [label=] +"l8" -> "l18" [label=] +"l9" -> "l11" [label=] +"l10" -> "l20" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l19" [label=] +"l11" -> "l19" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +"l17" -> "l0" [label=] +"l18" -> "l8" [label=] +"l19" -> "l11" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l21" [label=] +"l21" -> "l20" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/learnedModel.pdf b/experiments/saved_results/clients/ra/rise_m4_app/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52d367323d92d9460db8c7555e372127ab6a97bb GIT binary patch literal 21937 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 literal 0 HcmV?d00001 diff --git a/experiments/saved_results/clients/ra/rise_m4_app/learnedModelbtf.dot b/experiments/saved_results/clients/ra/rise_m4_app/learnedModelbtf.dot new file mode 100644 index 00000000..2753ee7a --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/learnedModelbtf.dot @@ -0,0 +1,102 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l12" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l18" [label=] +"l8" -> "l18" [label=] +"l9" -> "l11" [label=] +"l10" -> "l20" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l1" [label=] +"l11" -> "l19" [label=] +"l11" -> "l19" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l1" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l1" [label=] +"l14" -> "l9" [label=] +"l14" -> "l9" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l11" [label=] +"l16" -> "l14" [label=] +"l17" -> "l0" [label=] +"l18" -> "l8" [label=] +"l19" -> "l11" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l1" [label=] +"l20" -> "l21" [label=] +"l21" -> "l20" [label=] +} diff --git a/experiments/saved_results/clients/ra/rise_m4_app/mapper_connection.config b/experiments/saved_results/clients/ra/rise_m4_app/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/clients/ra/rise_m4_app/statistics.txt b/experiments/saved_results/clients/ra/rise_m4_app/statistics.txt new file mode 100644 index 00000000..9e2fce18 --- /dev/null +++ b/experiments/saved_results/clients/ra/rise_m4_app/statistics.txt @@ -0,0 +1,128 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/clients/ra/rise_m4_app +Fuzzing Client: true + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 1 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: null +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 10 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulClientConfig Parameters +Client Wait: 50 +Port: 5683 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: true +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v23 +Combined Message Version: v07 +Edhoc Role: Responder +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: helloWorld +App Message Code To Coap Server: GET +App Message Payload To Coap Server: +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: true +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: null +Force Oscore Recipient Id: null + +AuthenticationConfig Parameters +Map Cred Type: X509 +Map Id Cred Type: X5T +Sul Cred Type: X509 +Sul Id Cred Type: X5T +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_rise.json +Test Vector Key: test_vector_ed25519 +Test Vector Peer Key Curve: Ed25519 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: true +Size of the input alphabet: 26 +Number of states: 22 +Number of hypotheses: 11 +Number of inputs: 101125 +Number of tests: 10444 +Number of learning inputs: 1191 +Number of learning tests: 444 +Number of inputs up to last hypothesis: 18825 +Number of tests up to last hypothesis: 2214 +Time (ms) to learn model: 10500455 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] +CE 2:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] TIMEOUT[] / true] +CE 4:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] UNSUCCESSFUL_MESSAGE[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_4_INPUT[] UNSUCCESSFUL_MESSAGE[] / true] +CE 6:Query[ε|OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 7:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 8:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_3_INPUT[] EDHOC_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] TIMEOUT[] / true] +CE 9:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 10:Query[ε|OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] OSCORE_APP_MESSAGE_INPUT[] TIMEOUT[] / true] +Number of inputs when hypothesis was generated: [27, 110, 367, 754, 1091, 1329, 3378, 3698, 8479, 13271, 18825] +Number of tests when hypothesis was generated: [27, 70, 134, 209, 292, 353, 582, 624, 1117, 1632, 2214] +Time (ms) when hypothesis was generated: [23821, 67516, 126177, 195225, 265706, 312883, 538180, 576613, 1074422, 1589191, 2169689] +Number of inputs when counterexample was found: [29, 262, 631, 917, 1155, 3252, 3671, 8413, 13112, 18696] +Number of tests when counterexample was found: [28, 86, 161, 226, 299, 546, 612, 1096, 1581, 2175] +Time (ms) when counterexample was found: [24850, 83515, 153853, 212014, 272309, 508492, 568123, 1056148, 1546409, 2139940] diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/command.args b/experiments/saved_results/clients/ra/sifis-home_phase_1/command.args new file mode 100644 index 00000000..e9199d5c --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/command.args @@ -0,0 +1,79 @@ +state-fuzzer-client + + +##### StateFuzzerConfig ##### +-output +${results.learning.clients.ra}/sifis-home_phase_1 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +10 +-probNewDataValue +0.5 +-seed +7 + + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_ed25519_phases_1_3 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Responder + +-appCoapResource +light + + +##### SulConfig ##### +-responseWait +400 +-processDir +${models.clients}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Client -server coap://localhost:5683 1q +-startWait +100 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp1.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp1.dot new file mode 100644 index 00000000..e2669d1c --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp1.dot @@ -0,0 +1,22 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp10.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp10.dot new file mode 100644 index 00000000..63605148 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp10.dot @@ -0,0 +1,110 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l5" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l12" -> "l19" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l15" -> "l18" [label=] +"l15" -> "l18" [label=] +"l16" -> "l21" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l20" -> "l19" [label=] +"l21" -> "l5" [label=] +"l21" -> "l5" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp11.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp11.dot new file mode 100644 index 00000000..753a9752 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp11.dot @@ -0,0 +1,112 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l22" [label=] +"l12" -> "l19" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l15" -> "l18" [label=] +"l15" -> "l18" [label=] +"l16" -> "l21" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l20" -> "l19" [label=] +"l21" -> "l5" [label=] +"l21" -> "l5" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l22" -> "l11" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp12.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp12.dot new file mode 100644 index 00000000..f9acf845 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp12.dot @@ -0,0 +1,114 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l22" [label=] +"l12" -> "l19" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l15" -> "l18" [label=] +"l15" -> "l18" [label=] +"l16" -> "l21" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l20" -> "l19" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l23" [label=] +"l21" -> "l23" [label=] +"l22" -> "l11" [label=] +"l23" -> "l21" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp2.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp2.dot new file mode 100644 index 00000000..aac1c653 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp2.dot @@ -0,0 +1,34 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp3.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp3.dot new file mode 100644 index 00000000..421d5240 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp3.dot @@ -0,0 +1,46 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l9" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp4.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp4.dot new file mode 100644 index 00000000..9b18872a --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp4.dot @@ -0,0 +1,48 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l0" [label=] +"l10" -> "l8" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp5.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp5.dot new file mode 100644 index 00000000..3d949be6 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp5.dot @@ -0,0 +1,60 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l5" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l12" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp6.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp6.dot new file mode 100644 index 00000000..4f0a57fa --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp6.dot @@ -0,0 +1,84 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l5" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l12" -> "l0" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l5" [label=] +"l15" -> "l5" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l16" -> "l11" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp7.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp7.dot new file mode 100644 index 00000000..525e33ff --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp7.dot @@ -0,0 +1,86 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l5" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l12" -> "l0" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l5" [label=] +"l15" -> "l5" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l16" -> "l11" [label=] +"l17" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp8.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp8.dot new file mode 100644 index 00000000..557595fa --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp8.dot @@ -0,0 +1,88 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l5" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l12" -> "l0" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l15" -> "l18" [label=] +"l15" -> "l18" [label=] +"l16" -> "l11" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp9.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp9.dot new file mode 100644 index 00000000..db023fcf --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/hyp9.dot @@ -0,0 +1,100 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l5" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l12" -> "l19" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l15" -> "l18" [label=] +"l15" -> "l18" [label=] +"l16" -> "l11" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l20" -> "l19" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModel.dot b/experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModel.dot new file mode 100644 index 00000000..f9acf845 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModel.dot @@ -0,0 +1,114 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l22" [label=] +"l12" -> "l19" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l15" -> "l18" [label=] +"l15" -> "l18" [label=] +"l16" -> "l21" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l20" -> "l19" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l23" [label=] +"l21" -> "l23" [label=] +"l22" -> "l11" [label=] +"l23" -> "l21" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModel.pdf b/experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c26419be9055ce2833b81dff21f2c29193129451 GIT binary patch literal 22880 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] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l13" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l1" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l10" [label=] +"l8" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l8" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l12" [label=] +"l11" -> "l22" [label=] +"l12" -> "l19" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l1" [label=] +"l13" -> "l5" [label=] +"l13" -> "l5" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l1" [label=] +"l15" -> "l16" [label=] +"l15" -> "l16" [label=] +"l15" -> "l18" [label=] +"l15" -> "l18" [label=] +"l16" -> "l21" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l19" -> "l20" [label=] +"l20" -> "l19" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l12" [label=] +"l21" -> "l23" [label=] +"l21" -> "l23" [label=] +"l22" -> "l11" [label=] +"l23" -> "l21" [label=] +} diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/mapper_connection.config b/experiments/saved_results/clients/ra/sifis-home_phase_1/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/statistics.txt b/experiments/saved_results/clients/ra/sifis-home_phase_1/statistics.txt new file mode 100644 index 00000000..814f3d27 --- /dev/null +++ b/experiments/saved_results/clients/ra/sifis-home_phase_1/statistics.txt @@ -0,0 +1,129 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/clients/ra/sifis-home_phase_1 +Fuzzing Client: true + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 1 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: null +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 10 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulClientConfig Parameters +Client Wait: 50 +Port: 5683 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: false +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v22 +Combined Message Version: v07 +Edhoc Role: Responder +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: light +App Message Code To Coap Server: GET +App Message Payload To Coap Server: +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: true +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: null +Force Oscore Recipient Id: null + +AuthenticationConfig Parameters +Map Cred Type: X509 +Map Id Cred Type: X5T +Sul Cred Type: X509 +Sul Id Cred Type: X5T +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_sifis_home.json +Test Vector Key: test_vector_ed25519_phases_1_3 +Test Vector Peer Key Curve: Ed25519 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: true +Size of the input alphabet: 26 +Number of states: 24 +Number of hypotheses: 12 +Number of inputs: 104882 +Number of tests: 11182 +Number of learning inputs: 4944 +Number of learning tests: 1182 +Number of inputs up to last hypothesis: 9282 +Number of tests up to last hypothesis: 1622 +Time (ms) to learn model: 10489696 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] +CE 2:Query[ε|OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] COAP_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 4:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] UNSUCCESSFUL_MESSAGE[] / true] +CE 6:Query[ε|OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 7:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] COAP_APP_MESSAGE_INPUT[] UNSUCCESSFUL_MESSAGE[] / true] +CE 8:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] COAP_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_ERROR_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] / true] +CE 9:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_APP_MESSAGE_INPUT[] UNSUCCESSFUL_MESSAGE[] OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] / true] +CE 10:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] COAP_EMPTY_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] OSCORE_APP_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 11:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] UNSUCCESSFUL_MESSAGE[] OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_3_INPUT[] TIMEOUT[] COAP_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] / true] +Number of inputs when hypothesis was generated: [27, 110, 222, 341, 1263, 1851, 2066, 2476, 5399, 6700, 7601, 9282] +Number of tests when hypothesis was generated: [27, 70, 111, 149, 330, 490, 538, 625, 1094, 1278, 1392, 1622] +Time (ms) when hypothesis was generated: [22621, 61992, 96396, 125024, 297690, 438038, 476196, 545048, 1003701, 1173733, 1280285, 1499111] +Number of inputs when counterexample was found: [29, 153, 266, 855, 1356, 1934, 2182, 3383, 6244, 7415, 8577] +Number of tests when counterexample was found: [28, 75, 116, 201, 340, 499, 550, 716, 1179, 1350, 1490] +Time (ms) when counterexample was found: [23562, 66436, 100979, 173900, 306770, 446078, 487155, 630110, 1082826, 1241506, 1372534] diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args new file mode 100644 index 00000000..ae82acab --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args @@ -0,0 +1,81 @@ +state-fuzzer-client + +##### StateFuzzerConfig ##### +-output +${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +10 +-probNewDataValue +0.5 +-seed +7 + + +##### EdhocMapperConfig ##### +-protocolVersion +v16 +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_v16_p256.json + +-testVectorJsonKey +test_vector_1 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Responder + +-appCoapResource +tv1 + +-disableCXCorrelation + +-forceOscoreSenderId +01 + +-forceOscoreRecipientId +[] + + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.clients}/uoscore-uedhoc +-cmd +./linux-edhoc-oscore-initiator-client +-startWait +100 + + +##### EdhocSulClientConfig ##### +-port +5683 diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot new file mode 100644 index 00000000..e2669d1c --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot @@ -0,0 +1,22 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot new file mode 100644 index 00000000..aac1c653 --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot @@ -0,0 +1,34 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot new file mode 100644 index 00000000..01454af4 --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot @@ -0,0 +1,46 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot new file mode 100644 index 00000000..5a1013ae --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot @@ -0,0 +1,70 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l13" -> "l12" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot new file mode 100644 index 00000000..4d0ced0b --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot @@ -0,0 +1,72 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l14" [label=] +"l8" -> "l14" [label=] +"l9" -> "l8" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l13" -> "l12" [label=] +"l14" -> "l8" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp6.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp6.dot new file mode 100644 index 00000000..e3995344 --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp6.dot @@ -0,0 +1,82 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l14" [label=] +"l8" -> "l14" [label=] +"l9" -> "l15" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l5" [label=] +"l12" -> "l5" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l13" -> "l12" [label=] +"l14" -> "l8" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l14" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp7.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp7.dot new file mode 100644 index 00000000..8114550a --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp7.dot @@ -0,0 +1,84 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l14" [label=] +"l8" -> "l14" [label=] +"l9" -> "l15" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l16" [label=] +"l12" -> "l16" [label=] +"l13" -> "l12" [label=] +"l14" -> "l8" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l14" [label=] +"l16" -> "l12" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp8.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp8.dot new file mode 100644 index 00000000..0696329b --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp8.dot @@ -0,0 +1,86 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l14" [label=] +"l8" -> "l14" [label=] +"l9" -> "l15" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l16" [label=] +"l12" -> "l16" [label=] +"l13" -> "l12" [label=] +"l14" -> "l8" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l14" [label=] +"l16" -> "l12" [label=] +"l17" -> "l0" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp9.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp9.dot new file mode 100644 index 00000000..577b2db7 --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp9.dot @@ -0,0 +1,88 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l14" [label=] +"l8" -> "l14" [label=] +"l9" -> "l15" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l16" [label=] +"l12" -> "l16" [label=] +"l13" -> "l12" [label=] +"l14" -> "l8" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l18" [label=] +"l16" -> "l12" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot new file mode 100644 index 00000000..577b2db7 --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot @@ -0,0 +1,88 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l14" [label=] +"l8" -> "l14" [label=] +"l9" -> "l15" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l16" [label=] +"l12" -> "l16" [label=] +"l13" -> "l12" [label=] +"l14" -> "l8" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l18" [label=] +"l16" -> "l12" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..509a369ff666b36ceb13a77ff5cc8f428d17819a GIT binary patch literal 19588 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] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l17" [label=] +"l1" -> "l6" [label=] +"l4" -> "l8" [label=] +"l5" -> "l10" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l9" [label=] +"l8" -> "l14" [label=] +"l8" -> "l14" [label=] +"l9" -> "l15" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l1" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l11" [label=] +"l11" -> "l12" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l13" [label=] +"l12" -> "l16" [label=] +"l12" -> "l16" [label=] +"l13" -> "l12" [label=] +"l14" -> "l8" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l9" [label=] +"l15" -> "l18" [label=] +"l16" -> "l12" [label=] +"l17" -> "l0" [label=] +"l18" -> "l15" [label=] +} diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt new file mode 100644 index 00000000..62672be9 --- /dev/null +++ b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt @@ -0,0 +1,126 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore +Fuzzing Client: true + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 1 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: null +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 10 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulClientConfig Parameters +Client Wait: 50 +Port: 5683 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: false +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v16 +Combined Message Version: v06 +Edhoc Role: Responder +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: tv1 +App Message Code To Coap Server: GET +App Message Payload To Coap Server: +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: false +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: 01 +Force Oscore Recipient Id: [] + +AuthenticationConfig Parameters +Map Cred Type: X509 +Map Id Cred Type: X5T +Sul Cred Type: X509 +Sul Id Cred Type: X5T +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_v16_p256.json +Test Vector Key: test_vector_1 +Test Vector Peer Key Curve: P256 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: true +Size of the input alphabet: 26 +Number of states: 19 +Number of hypotheses: 9 +Number of inputs: 101213 +Number of tests: 10459 +Number of learning inputs: 1254 +Number of learning tests: 459 +Number of inputs up to last hypothesis: 2623 +Number of tests up to last hypothesis: 600 +Time (ms) to learn model: 7034190 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] +CE 2:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_ERROR_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] UNSUCCESSFUL_MESSAGE[] / true] +CE 4:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_1_INPUT[0[C_I]] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_3_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 6:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] UNSUCCESSFUL_MESSAGE[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] UNSUCCESSFUL_MESSAGE[] / true] +CE 7:Query[ε|OSCORE_APP_MESSAGE_INPUT[] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +CE 8:Query[ε|EDHOC_MESSAGE_2_INPUT[] EDHOC_MESSAGE_3_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] EDHOC_MESSAGE_1_INPUT[1[C_I]] OSCORE_APP_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] UNSUPPORTED_MESSAGE[] OSCORE_APP_MESSAGE_INPUT[] OSCORE_APP_MESSAGE_OUTPUT[] / true] +Number of inputs when hypothesis was generated: [27, 110, 222, 479, 847, 1085, 1419, 1517, 2623] +Number of tests when hypothesis was generated: [27, 70, 120, 206, 291, 349, 421, 454, 600] +Time (ms) when hypothesis was generated: [16871, 48115, 68113, 100743, 141384, 162969, 188323, 202518, 281397] +Number of inputs when counterexample was found: [29, 123, 236, 637, 941, 1230, 1442, 2437] +Number of tests when counterexample was found: [28, 72, 122, 222, 301, 364, 424, 546] +Time (ms) when counterexample was found: [17635, 49153, 69148, 112398, 148482, 172887, 190108, 266899] diff --git a/experiments/saved_results/servers/lakers/alphabet.xml b/experiments/saved_results/servers/mealy/lakers/alphabet.xml similarity index 100% rename from experiments/saved_results/servers/lakers/alphabet.xml rename to experiments/saved_results/servers/mealy/lakers/alphabet.xml diff --git a/experiments/saved_results/servers/lakers/hyp1.dot b/experiments/saved_results/servers/mealy/lakers/hyp1.dot similarity index 100% rename from experiments/saved_results/servers/lakers/hyp1.dot rename to experiments/saved_results/servers/mealy/lakers/hyp1.dot diff --git a/experiments/saved_results/servers/lakers/hyp2.dot b/experiments/saved_results/servers/mealy/lakers/hyp2.dot similarity index 100% rename from experiments/saved_results/servers/lakers/hyp2.dot rename to experiments/saved_results/servers/mealy/lakers/hyp2.dot diff --git a/experiments/saved_results/servers/lakers/learnedModel.dot b/experiments/saved_results/servers/mealy/lakers/learnedModel.dot similarity index 100% rename from experiments/saved_results/servers/lakers/learnedModel.dot rename to experiments/saved_results/servers/mealy/lakers/learnedModel.dot diff --git a/experiments/saved_results/servers/lakers/learnedModel.pdf b/experiments/saved_results/servers/mealy/lakers/learnedModel.pdf similarity index 100% rename from experiments/saved_results/servers/lakers/learnedModel.pdf rename to experiments/saved_results/servers/mealy/lakers/learnedModel.pdf diff --git a/experiments/saved_results/servers/rise_m4_app/alphabet.xml b/experiments/saved_results/servers/mealy/rise_m4_app/alphabet.xml similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/alphabet.xml rename to experiments/saved_results/servers/mealy/rise_m4_app/alphabet.xml diff --git a/experiments/saved_results/servers/rise_m4_app/hyp1.dot b/experiments/saved_results/servers/mealy/rise_m4_app/hyp1.dot similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/hyp1.dot rename to experiments/saved_results/servers/mealy/rise_m4_app/hyp1.dot diff --git a/experiments/saved_results/servers/rise_m4_app/hyp2.dot b/experiments/saved_results/servers/mealy/rise_m4_app/hyp2.dot similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/hyp2.dot rename to experiments/saved_results/servers/mealy/rise_m4_app/hyp2.dot diff --git a/experiments/saved_results/servers/rise_m4_app/hyp3.dot b/experiments/saved_results/servers/mealy/rise_m4_app/hyp3.dot similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/hyp3.dot rename to experiments/saved_results/servers/mealy/rise_m4_app/hyp3.dot diff --git a/experiments/saved_results/servers/rise_m4_app/hyp4.dot b/experiments/saved_results/servers/mealy/rise_m4_app/hyp4.dot similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/hyp4.dot rename to experiments/saved_results/servers/mealy/rise_m4_app/hyp4.dot diff --git a/experiments/saved_results/servers/rise_m4_app/hyp5.dot b/experiments/saved_results/servers/mealy/rise_m4_app/hyp5.dot similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/hyp5.dot rename to experiments/saved_results/servers/mealy/rise_m4_app/hyp5.dot diff --git a/experiments/saved_results/servers/rise_m4_app/learnedModel.dot b/experiments/saved_results/servers/mealy/rise_m4_app/learnedModel.dot similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/learnedModel.dot rename to experiments/saved_results/servers/mealy/rise_m4_app/learnedModel.dot diff --git a/experiments/saved_results/servers/rise_m4_app/learnedModel.pdf b/experiments/saved_results/servers/mealy/rise_m4_app/learnedModel.pdf similarity index 100% rename from experiments/saved_results/servers/rise_m4_app/learnedModel.pdf rename to experiments/saved_results/servers/mealy/rise_m4_app/learnedModel.pdf diff --git a/experiments/saved_results/servers/sifis-home_phase_1/alphabet.xml b/experiments/saved_results/servers/mealy/sifis-home_phase_1/alphabet.xml similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/alphabet.xml rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/alphabet.xml diff --git a/experiments/saved_results/servers/sifis-home_phase_1/hyp1.dot b/experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp1.dot similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/hyp1.dot rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp1.dot diff --git a/experiments/saved_results/servers/sifis-home_phase_1/hyp2.dot b/experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp2.dot similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/hyp2.dot rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp2.dot diff --git a/experiments/saved_results/servers/sifis-home_phase_1/hyp3.dot b/experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp3.dot similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/hyp3.dot rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp3.dot diff --git a/experiments/saved_results/servers/sifis-home_phase_1/hyp4.dot b/experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp4.dot similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/hyp4.dot rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp4.dot diff --git a/experiments/saved_results/servers/sifis-home_phase_1/hyp5.dot b/experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp5.dot similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/hyp5.dot rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/hyp5.dot diff --git a/experiments/saved_results/servers/sifis-home_phase_1/learnedModel.dot b/experiments/saved_results/servers/mealy/sifis-home_phase_1/learnedModel.dot similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/learnedModel.dot rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/learnedModel.dot diff --git a/experiments/saved_results/servers/sifis-home_phase_1/learnedModel.pdf b/experiments/saved_results/servers/mealy/sifis-home_phase_1/learnedModel.pdf similarity index 100% rename from experiments/saved_results/servers/sifis-home_phase_1/learnedModel.pdf rename to experiments/saved_results/servers/mealy/sifis-home_phase_1/learnedModel.pdf diff --git a/experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml b/experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml similarity index 100% rename from experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml rename to experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/alphabet.xml diff --git a/experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot b/experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot similarity index 100% rename from experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot rename to experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot diff --git a/experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot b/experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot similarity index 100% rename from experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot rename to experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot diff --git a/experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot b/experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot similarity index 100% rename from experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot rename to experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot diff --git a/experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf b/experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf similarity index 100% rename from experiments/saved_results/servers/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf rename to experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf diff --git a/experiments/saved_results/servers/ra/lakers/command.args b/experiments/saved_results/servers/ra/lakers/command.args new file mode 100644 index 00000000..4b63ca64 --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/command.args @@ -0,0 +1,72 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers.ra}/lakers + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 +-socketClosedAsTimeout + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +## Mapper Auth ## + +-mapCredType +CCS + +-mapIdCredType +KID + +## Sul Auth ## + +-sulCredType +CCS + +-sulIdCredType +KID + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_lakers.json + +-testVectorJsonKey +test_vector_p256 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Initiator + + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.servers}/lakers +-cmd +./coapserver +-startWait +200 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 diff --git a/experiments/saved_results/servers/ra/lakers/error.msg b/experiments/saved_results/servers/ra/lakers/error.msg new file mode 100644 index 00000000..237cf89b --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/error.msg @@ -0,0 +1,12 @@ +Index -1 out of bounds for length 6 +java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 6 + at de.learnlib.ralib.learning.CounterexampleAnalysis.binarySearch(CounterexampleAnalysis.java:263) + at de.learnlib.ralib.learning.CounterexampleAnalysis.analyzeCounterexample(CounterexampleAnalysis.java:75) + at de.learnlib.ralib.learning.rastar.RaStar.analyzeCounterExample(RaStar.java:173) + at de.learnlib.ralib.learning.rastar.RaStar.learn(RaStar.java:113) + at com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerRA.inferRegisterAutomata(StateFuzzerRA.java:148) + at com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerRA.startFuzzing(StateFuzzerRA.java:89) + at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.executeCommand(CommandLineParser.java:355) + at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.parseAndExecuteCommand(CommandLineParser.java:226) + at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.parse(CommandLineParser.java:168) + at com.github.protocolfuzzing.edhocfuzzer.MainRA.main(MainRA.java:15) diff --git a/experiments/saved_results/servers/ra/lakers/hyp1.dot b/experiments/saved_results/servers/ra/lakers/hyp1.dot new file mode 100644 index 00000000..9df4a2a5 --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/hyp1.dot @@ -0,0 +1,22 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +} diff --git a/experiments/saved_results/servers/ra/lakers/hyp2.dot b/experiments/saved_results/servers/ra/lakers/hyp2.dot new file mode 100644 index 00000000..cb587b2b --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/hyp2.dot @@ -0,0 +1,34 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l0" [label=] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +} diff --git a/experiments/saved_results/servers/ra/lakers/hyp3.dot b/experiments/saved_results/servers/ra/lakers/hyp3.dot new file mode 100644 index 00000000..8ea80bd2 --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/hyp3.dot @@ -0,0 +1,46 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l8" [label=] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l9" [label=] +"l9" -> "l0" [label=] +} diff --git a/experiments/saved_results/servers/ra/lakers/hyp4.dot b/experiments/saved_results/servers/ra/lakers/hyp4.dot new file mode 100644 index 00000000..943fd84a --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/hyp4.dot @@ -0,0 +1,60 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l1" -> "l8" [label=[r1:=r1,]>] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l9" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l5" [label=] +"l11" -> "l5" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l5" [label=] +} diff --git a/experiments/saved_results/servers/ra/lakers/hyp5.dot b/experiments/saved_results/servers/ra/lakers/hyp5.dot new file mode 100644 index 00000000..e4063bac --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/hyp5.dot @@ -0,0 +1,62 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l12" [label=[r1:=p1,]>] +"l1" -> "l8" [label=[r1:=r1,]>] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l9" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/lakers/hyp6.dot b/experiments/saved_results/servers/ra/lakers/hyp6.dot new file mode 100644 index 00000000..3890fbca --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/hyp6.dot @@ -0,0 +1,64 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l12" [label=[r1:=p1,]>] +"l1" -> "l8" [label=[r1:=r1,]>] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l9" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l13" -> "l8" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/lakers/hyp7.dot b/experiments/saved_results/servers/ra/lakers/hyp7.dot new file mode 100644 index 00000000..c880f427 --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/hyp7.dot @@ -0,0 +1,66 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l12" [label=[r1:=p1,]>] +"l1" -> "l8" [label=[r1:=r1,]>] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l9" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l14" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l13" -> "l8" [label=[r1:=r1,]>] +"l14" -> "l8" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.dot b/experiments/saved_results/servers/ra/lakers/learnedModel.dot new file mode 100644 index 00000000..c880f427 --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/learnedModel.dot @@ -0,0 +1,66 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l12" [label=[r1:=p1,]>] +"l1" -> "l8" [label=[r1:=r1,]>] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l9" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l14" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l13" -> "l8" [label=[r1:=r1,]>] +"l14" -> "l8" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.pdf b/experiments/saved_results/servers/ra/lakers/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8e56f460c2a94b9905130eacc7a996e31b1b178b GIT binary patch literal 18204 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] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l5" [label=] +"l0" -> "l12" [label=[r1:=p1,]>] +"l1" -> "l8" [label=[r1:=r1,]>] +"l4" -> "l6" [label=] +"l5" -> "l0" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l6" -> "l7" [label=] +"l7" -> "l6" [label=] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l9" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l14" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l13" -> "l8" [label=[r1:=r1,]>] +"l14" -> "l8" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/lakers/mapper_connection.config b/experiments/saved_results/servers/ra/lakers/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/servers/ra/lakers/statistics.txt b/experiments/saved_results/servers/ra/lakers/statistics.txt new file mode 100644 index 00000000..3df49f50 --- /dev/null +++ b/experiments/saved_results/servers/ra/lakers/statistics.txt @@ -0,0 +1,125 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/servers/ra/lakers +Fuzzing Client: false + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 1 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: null +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 4 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulServerConfigStandard Parameters +Connect to: localhost:5683 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: true +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v23 +Combined Message Version: v06 +Edhoc Role: Initiator +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: applicationEndpoint +App Message Code To Coap Server: GET +App Message Payload To Coap Server: +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: true +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: null +Force Oscore Recipient Id: null + +AuthenticationConfig Parameters +Map Cred Type: CCS +Map Id Cred Type: KID +Sul Cred Type: CCS +Sul Id Cred Type: KID +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_lakers.json +Test Vector Key: test_vector_p256 +Test Vector Peer Key Curve: P256 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: false +Reason: Index -1 out of bounds for length 6 +Size of the input alphabet: 26 +Number of states: 15 +Number of hypotheses: 7 +Number of inputs: 5613 +Number of tests: 1548 +Number of learning inputs: 1245 +Number of learning tests: 447 +Number of inputs up to last hypothesis: 1500 +Number of tests up to last hypothesis: 512 +Time (ms) to learn model: 1414689 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] +CE 2:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 4:Query[ε|COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +CE 6:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +CE 7:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] TIMEOUT[] / true] +Number of inputs when hypothesis was generated: [27, 110, 206, 809, 1039, 1270, 1500] +Number of tests when hypothesis was generated: [27, 70, 116, 296, 373, 440, 512] +Time (ms) when hypothesis was generated: [19194, 58341, 90800, 268367, 323453, 378905, 457396] +Number of inputs when counterexample was found: [29, 113, 266, 853, 1150, 1305, 5571] +Number of tests when counterexample was found: [28, 71, 131, 307, 401, 449, 1530] +Time (ms) when counterexample was found: [20105, 58758, 104447, 278357, 350886, 388081, 1407311] diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/command.args b/experiments/saved_results/servers/ra/sifis-home_phase_1/command.args new file mode 100644 index 00000000..5734b41e --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/command.args @@ -0,0 +1,84 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers.ra}/sifis-home_phase_1 + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 +-socketClosedAsTimeout + + +##### EdhocMapperConfig ##### +-protocolVersion +v22 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_sifis_home.json + +-testVectorJsonKey +test_vector_ed25519_phases_1_3 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Initiator + +-appCoapResource +light + +-appMessageCodeToCoapServer +POST + +-appMessagePayloadToCoapServer +1 + +##### SulConfig ##### +-responseWait +500 +-processDir +${models.servers}/sifis-home +-cmd +java -cp edhoc-applications.jar se.sics.edhocapps.Phase1Server +-startWait +400 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5694 diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp1.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp1.dot new file mode 100644 index 00000000..3541636b --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp1.dot @@ -0,0 +1,22 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp10.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp10.dot new file mode 100644 index 00000000..5679076d --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp10.dot @@ -0,0 +1,128 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l13" [label=] +"l21" -> "l15" [label=] +"l21" -> "l27" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l25" [label=[r1:=p1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp11.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp11.dot new file mode 100644 index 00000000..0a4e73a9 --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp11.dot @@ -0,0 +1,132 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l29" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l29" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp12.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp12.dot new file mode 100644 index 00000000..0f9cb16a --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp12.dot @@ -0,0 +1,136 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l29" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l29" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +"l31" -> "l21" [label=] +"l32" -> "l12" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp13.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp13.dot new file mode 100644 index 00000000..1448336d --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp13.dot @@ -0,0 +1,138 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l29" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l33" [label=[r1:=r1,]>] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l29" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +"l31" -> "l21" [label=] +"l32" -> "l12" [label=[r1:=r1,]>] +"l33" -> "l6" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp14.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp14.dot new file mode 100644 index 00000000..16a8cc5b --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp14.dot @@ -0,0 +1,151 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l29" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l33" [label=[r1:=r1,]>] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l29" [label=[r1:=r1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +"l31" -> "l21" [label=] +"l32" -> "l12" [label=[r1:=r1,]>] +"l33" -> "l6" [label=[r1:=r1,]>] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l1" [label=[r1:=p1,]>] +"l35" -> "l4" [label=] +"l35" -> "l4" [label=] +"l35" -> "l4" [label=] +"l35" -> "l4" [label=] +"l35" -> "l4" [label=] +"l35" -> "l4" [label=] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp15.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp15.dot new file mode 100644 index 00000000..06afdc80 --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp15.dot @@ -0,0 +1,155 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"l36" [shape=doublecircle] +"l37" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l29" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l33" [label=[r1:=r1,]>] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l29" [label=[r1:=r1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +"l31" -> "l21" [label=] +"l32" -> "l12" [label=[r1:=r1,]>] +"l33" -> "l6" [label=[r1:=r1,]>] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l1" [label=[r1:=p1,]>] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l36" -> "l35" [label=[r1:=r1,]>] +"l37" -> "l26" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp16.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp16.dot new file mode 100644 index 00000000..beee386f --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp16.dot @@ -0,0 +1,172 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"l36" [shape=doublecircle] +"l37" [shape=doublecircle] +"l38" [shape=doublecircle] +"l39" [shape=doublecircle] +"l40" [shape=doublecircle] +"l41" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l29" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l33" [label=[r1:=r1,]>] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l38" [label=[r1:=r1,]>] +"l26" -> "l39" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +"l31" -> "l21" [label=] +"l32" -> "l12" [label=[r1:=r1,]>] +"l33" -> "l6" [label=[r1:=r1,]>] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l1" [label=[r1:=p1,]>] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l36" -> "l35" [label=[r1:=r1,]>] +"l37" -> "l26" [label=[r1:=r1,]>] +"l38" -> "l40" [label=[r1:=r1,]>] +"l39" -> "l35" [label=[r1:=r1,]>] +"l40" -> "l9" [label=[r1:=r1,]>] +"l40" -> "l23" [label=[r1:=r1,]>] +"l40" -> "l13" [label=] +"l40" -> "l39" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l41" -> "l40" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp2.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp2.dot new file mode 100644 index 00000000..3914ebbb --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp2.dot @@ -0,0 +1,47 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l1" [label=[r1:=p1,]>] +"l6" -> "l4" [label=] +"l6" -> "l4" [label=] +"l6" -> "l4" [label=] +"l6" -> "l5" [label=] +"l6" -> "l4" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l5" [label=] +"l7" -> "l5" [label=] +"l8" -> "l6" [label=[r1:=r1,]>] +"l9" -> "l6" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp3.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp3.dot new file mode 100644 index 00000000..d648e757 --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp3.dot @@ -0,0 +1,51 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l1" [label=[r1:=p1,]>] +"l6" -> "l5" [label=] +"l6" -> "l11" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l11" [label=[r1:=r1,]>] +"l6" -> "l11" [label=[r1:=r1,]>] +"l6" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l5" [label=] +"l7" -> "l5" [label=] +"l8" -> "l6" [label=[r1:=r1,]>] +"l9" -> "l6" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l6" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp4.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp4.dot new file mode 100644 index 00000000..6e9bf993 --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp4.dot @@ -0,0 +1,78 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l1" [label=[r1:=p1,]>] +"l6" -> "l5" [label=] +"l6" -> "l11" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l11" [label=[r1:=r1,]>] +"l6" -> "l11" [label=[r1:=r1,]>] +"l6" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l5" [label=] +"l7" -> "l5" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l12" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l5" [label=] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=[r1:=p1,]>] +"l14" -> "l4" [label=] +"l14" -> "l4" [label=] +"l14" -> "l4" [label=] +"l14" -> "l5" [label=] +"l14" -> "l15" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l15" -> "l7" [label=] +"l16" -> "l7" [label=] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp5.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp5.dot new file mode 100644 index 00000000..0bb4bd8e --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp5.dot @@ -0,0 +1,82 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l1" [label=[r1:=p1,]>] +"l6" -> "l5" [label=] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l5" [label=] +"l7" -> "l5" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l12" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l5" [label=] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=[r1:=p1,]>] +"l14" -> "l5" [label=] +"l14" -> "l15" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l15" -> "l7" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp6.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp6.dot new file mode 100644 index 00000000..83a190de --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp6.dot @@ -0,0 +1,86 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l1" [label=[r1:=p1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l12" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l19" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=[r1:=p1,]>] +"l14" -> "l15" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l20" [label=] +"l15" -> "l7" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp7.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp7.dot new file mode 100644 index 00000000..8096ef1c --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp7.dot @@ -0,0 +1,107 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l1" [label=[r1:=p1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l19" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=[r1:=p1,]>] +"l14" -> "l15" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l20" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l13" [label=] +"l21" -> "l15" [label=] +"l21" -> "l20" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l19" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l19" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp8.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp8.dot new file mode 100644 index 00000000..039ae838 --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp8.dot @@ -0,0 +1,111 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l1" [label=[r1:=p1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l1" [label=[r1:=p1,]>] +"l14" -> "l15" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l13" [label=] +"l21" -> "l15" [label=] +"l21" -> "l20" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l23" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l23" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp9.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp9.dot new file mode 100644 index 00000000..8d862a08 --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/hyp9.dot @@ -0,0 +1,124 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l13" [label=] +"l21" -> "l15" [label=] +"l21" -> "l20" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l23" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l23" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l8" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l9" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l17" [label=] +"l26" -> "l25" [label=[r1:=p1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModel.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModel.dot new file mode 100644 index 00000000..beee386f --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModel.dot @@ -0,0 +1,172 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"l36" [shape=doublecircle] +"l37" [shape=doublecircle] +"l38" [shape=doublecircle] +"l39" [shape=doublecircle] +"l40" [shape=doublecircle] +"l41" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l29" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l33" [label=[r1:=r1,]>] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l38" [label=[r1:=r1,]>] +"l26" -> "l39" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +"l31" -> "l21" [label=] +"l32" -> "l12" [label=[r1:=r1,]>] +"l33" -> "l6" [label=[r1:=r1,]>] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l1" [label=[r1:=p1,]>] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l36" -> "l35" [label=[r1:=r1,]>] +"l37" -> "l26" [label=[r1:=r1,]>] +"l38" -> "l40" [label=[r1:=r1,]>] +"l39" -> "l35" [label=[r1:=r1,]>] +"l40" -> "l9" [label=[r1:=r1,]>] +"l40" -> "l23" [label=[r1:=r1,]>] +"l40" -> "l13" [label=] +"l40" -> "l39" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l41" -> "l40" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModel.pdf b/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..df8ae204137d0531e415bb0de87f723edd009fda GIT binary patch literal 31319 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 DG8OAx literal 0 HcmV?d00001 diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModelbtf.dot b/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModelbtf.dot new file mode 100644 index 00000000..106ee1bd --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModelbtf.dot @@ -0,0 +1,172 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"l36" [shape=doublecircle] +"l37" [shape=doublecircle] +"l38" [shape=doublecircle] +"l39" [shape=doublecircle] +"l40" [shape=doublecircle] +"l41" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l10" [label=] +"l0" -> "l11" [label=[r1:=p1,]>] +"l1" -> "l6" [label=[r1:=r1,]>] +"l4" -> "l7" [label=] +"l5" -> "l0" [label=] +"l6" -> "l8" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l9" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l19" [label=[r1:=r1,]>] +"l6" -> "l18" [label=[r1:=r1,]>] +"l6" -> "l25" [label=[r1:=p1,]>] +"l6" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l20" [label=] +"l7" -> "l20" [label=] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l22" [label=[r1:=r1,]>] +"l10" -> "l0" [label=] +"l11" -> "l22" [label=[r1:=r1,]>] +"l12" -> "l13" [label=] +"l12" -> "l23" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l29" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l12" -> "l32" [label=[r1:=r1,]>] +"l13" -> "l14" [label=] +"l14" -> "l15" [label=] +"l14" -> "l16" [label=] +"l14" -> "l16" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l17" [label=] +"l14" -> "l24" [label=] +"l14" -> "l25" [label=[r1:=p1,]>] +"l14" -> "l30" [label=] +"l15" -> "l21" [label=] +"l16" -> "l7" [label=] +"l17" -> "l14" [label=] +"l18" -> "l6" [label=[r1:=r1,]>] +"l19" -> "l6" [label=[r1:=r1,]>] +"l20" -> "l7" [label=] +"l21" -> "l13" [label=] +"l21" -> "l27" [label=] +"l21" -> "l30" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l21" -> "l31" [label=] +"l22" -> "l1" [label=[r1:=p1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l22" -> "l11" [label=[r1:=r1,]>] +"l22" -> "l28" [label=[r1:=r1,]>] +"l23" -> "l12" [label=[r1:=r1,]>] +"l24" -> "l14" [label=] +"l25" -> "l26" [label=[r1:=r1,]>] +"l26" -> "l19" [label=[r1:=r1,]>] +"l26" -> "l33" [label=[r1:=r1,]>] +"l26" -> "l25" [label=[r1:=p1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l34" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l37" [label=[r1:=r1,]>] +"l26" -> "l38" [label=[r1:=r1,]>] +"l26" -> "l39" [label=[r1:=r1,]>] +"l27" -> "l21" [label=] +"l28" -> "l22" [label=[r1:=r1,]>] +"l29" -> "l22" [label=[r1:=r1,]>] +"l30" -> "l7" [label=] +"l31" -> "l21" [label=] +"l32" -> "l12" [label=[r1:=r1,]>] +"l33" -> "l6" [label=[r1:=r1,]>] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l1" [label=[r1:=p1,]>] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l28" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l35" -> "l36" [label=[r1:=r1,]>] +"l36" -> "l35" [label=[r1:=r1,]>] +"l37" -> "l26" [label=[r1:=r1,]>] +"l38" -> "l40" [label=[r1:=r1,]>] +"l39" -> "l35" [label=[r1:=r1,]>] +"l40" -> "l9" [label=[r1:=r1,]>] +"l40" -> "l23" [label=[r1:=r1,]>] +"l40" -> "l13" [label=] +"l40" -> "l39" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l40" -> "l41" [label=[r1:=r1,]>] +"l41" -> "l40" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/mapper_connection.config b/experiments/saved_results/servers/ra/sifis-home_phase_1/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/servers/ra/sifis-home_phase_1/statistics.txt b/experiments/saved_results/servers/ra/sifis-home_phase_1/statistics.txt new file mode 100644 index 00000000..fd97fa9f --- /dev/null +++ b/experiments/saved_results/servers/ra/sifis-home_phase_1/statistics.txt @@ -0,0 +1,132 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/servers/ra/sifis-home_phase_1 +Fuzzing Client: false + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 1 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: null +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 4 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulServerConfigStandard Parameters +Connect to: localhost:5694 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: true +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v22 +Combined Message Version: v07 +Edhoc Role: Initiator +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: light +App Message Code To Coap Server: POST +App Message Payload To Coap Server: 1 +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: true +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: null +Force Oscore Recipient Id: null + +AuthenticationConfig Parameters +Map Cred Type: X509 +Map Id Cred Type: X5T +Sul Cred Type: X509 +Sul Id Cred Type: X5T +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_sifis_home.json +Test Vector Key: test_vector_ed25519_phases_1_3 +Test Vector Peer Key Curve: Ed25519 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: true +Size of the input alphabet: 26 +Number of states: 42 +Number of hypotheses: 16 +Number of inputs: 46482 +Number of tests: 11665 +Number of learning inputs: 6489 +Number of learning tests: 1665 +Number of inputs up to last hypothesis: 29994 +Number of tests up to last hypothesis: 7543 +Time (ms) to learn model: 13819934 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] / true] +CE 2:Query[ε|EDHOC_MESSAGE_2_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 4:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] / true] +CE 6:Query[ε|EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 7:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_4_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 8:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 9:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 10:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 11:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +CE 12:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] EDHOC_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 13:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] EDHOC_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 14:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 15:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +Number of inputs when hypothesis was generated: [27, 280, 461, 1306, 1634, 1848, 3093, 3360, 4016, 4382, 4967, 9586, 13503, 15000, 17993, 29994] +Number of tests when hypothesis was generated: [27, 136, 205, 410, 511, 575, 843, 915, 1094, 1188, 1338, 2498, 3481, 3823, 4575, 7543] +Time (ms) when hypothesis was generated: [25091, 143795, 221057, 479728, 573482, 680462, 1036584, 1131784, 1358846, 1482714, 1661585, 3023182, 4161999, 4589182, 5477949, 9001809] +Number of inputs when counterexample was found: [31, 290, 475, 1337, 1638, 1863, 3165, 3452, 4259, 4838, 9067, 13362, 14139, 17924, 29121] +Number of tests when counterexample was found: [28, 139, 209, 418, 512, 579, 861, 938, 1155, 1302, 2363, 3442, 3640, 4554, 7357] +Time (ms) when counterexample was found: [26443, 146342, 226046, 487611, 575331, 685442, 1056810, 1162003, 1431520, 1616081, 2869622, 4122003, 4343425, 5455747, 8767257] diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args new file mode 100644 index 00000000..245aa527 --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/command.args @@ -0,0 +1,84 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +4 +-probNewDataValue +0.5 +-seed +7 +-timeLimit +PT5H45M + + +##### EdhocMapperConfig ##### +-protocolVersion +v16 +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_v16_p256.json + +-testVectorJsonKey +test_vector_1 + +-testVectorPeerKeyCurve +P256 + +-edhocRole +Initiator + +-appCoapResource +tv1 + +-disableCXCorrelation + +-forceOscoreSenderId +[] + +-forceOscoreRecipientId +01 + + +##### SulConfig ##### +-responseWait +3000 +-processDir +${models.servers}/uoscore-uedhoc +-cmd +./linux-edhoc-oscore-responder-server +-startWait +50 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot new file mode 100644 index 00000000..fb8ed139 --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp1.dot @@ -0,0 +1,20 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +} diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot new file mode 100644 index 00000000..b20ecdbb --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp2.dot @@ -0,0 +1,32 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l1" -> "l0" [label=] +"l4" -> "l5" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l6" -> "l5" [label=] +} diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot new file mode 100644 index 00000000..69e83d6f --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp3.dot @@ -0,0 +1,42 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l1" -> "l7" [label=] +"l4" -> "l5" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l6" -> "l5" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +} diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot new file mode 100644 index 00000000..1b9c4c6a --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp4.dot @@ -0,0 +1,58 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l1" -> "l7" [label=] +"l4" -> "l5" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l6" -> "l5" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l8" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +"l9" -> "l8" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l9" [label=] +"l11" -> "l9" [label=] +} diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot new file mode 100644 index 00000000..c88a87eb --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/hyp5.dot @@ -0,0 +1,61 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l5" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l6" -> "l5" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l12" [label=[r1:=r1,]>] +"l7" -> "l8" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +"l9" -> "l8" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l9" [label=] +"l11" -> "l9" [label=] +"l12" -> "l7" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot new file mode 100644 index 00000000..c88a87eb --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.dot @@ -0,0 +1,61 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l5" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l6" -> "l5" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l12" [label=[r1:=r1,]>] +"l7" -> "l8" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +"l9" -> "l8" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l9" [label=] +"l11" -> "l9" [label=] +"l12" -> "l7" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..30cd134a45136837b6a40346c81c1828bdc6b768 GIT binary patch literal 17287 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 NEC`g85=xQ?{|^l3PF4T_ literal 0 HcmV?d00001 diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelbtf.dot b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelbtf.dot new file mode 100644 index 00000000..ff8678a1 --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelbtf.dot @@ -0,0 +1,61 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l5" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l5" -> "l6" [label=] +"l6" -> "l5" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l12" [label=[r1:=r1,]>] +"l7" -> "l8" [label=] +"l8" -> "l9" [label=] +"l9" -> "l8" [label=] +"l9" -> "l8" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l10" [label=] +"l9" -> "l11" [label=] +"l10" -> "l9" [label=] +"l11" -> "l9" [label=] +"l12" -> "l7" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt new file mode 100644 index 00000000..c5b75ade --- /dev/null +++ b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/statistics.txt @@ -0,0 +1,122 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore +Fuzzing Client: false + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 1 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: PT5H45M +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 4 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulServerConfigStandard Parameters +Connect to: localhost:5683 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: false +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v16 +Combined Message Version: v06 +Edhoc Role: Initiator +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: tv1 +App Message Code To Coap Server: GET +App Message Payload To Coap Server: +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: false +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: [] +Force Oscore Recipient Id: 01 + +AuthenticationConfig Parameters +Map Cred Type: X509 +Map Id Cred Type: X5T +Sul Cred Type: X509 +Sul Id Cred Type: X5T +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_v16_p256.json +Test Vector Key: test_vector_1 +Test Vector Peer Key Curve: P256 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: false +Reason: time limit reached +Size of the input alphabet: 26 +Number of states: 13 +Number of hypotheses: 5 +Number of inputs: 25476 +Number of tests: 6483 +Number of learning inputs: 1242 +Number of learning tests: 423 +Number of inputs up to last hypothesis: 1796 +Number of tests up to last hypothesis: 563 +Time (ms) to learn model: 20700921 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] +CE 2:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] TIMEOUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_MESSAGE_OUTPUT[] / true] +CE 4:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] TIMEOUT[] / true] +Number of inputs when hypothesis was generated: [27, 104, 184, 870, 1796] +Number of tests when hypothesis was generated: [27, 67, 107, 308, 563] +Time (ms) when hypothesis was generated: [75556, 199976, 306560, 968022, 2007341] +Number of inputs when counterexample was found: [29, 106, 507, 1097] +Number of tests when counterexample was found: [28, 68, 188, 365] +Time (ms) when counterexample was found: [78665, 203093, 558318, 1148117] From 94134c17ae621b14666c979ae8754d26ffa05e59 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Thu, 6 Jun 2024 22:25:45 +0200 Subject: [PATCH 121/169] Run with RaStar instead --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index a683f98d..a4fe96f3 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index eb86ca32..2163fb5a 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index b4100106..686625f2 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 847cd623..c70cc165 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 9bfb5376..b1fc4761 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 4f833f3d..45911892 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 5a759c43..2331d0c4 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index f0194c3e..6a224cee 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index 3208e1bb..2509fc70 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 3480d6a4..5d3b6a63 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 8cfaf665..e99c0d64 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index f3733a3b..6b12b90e 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index f514aa98..7c5c268e 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 10fe1753..3398dae9 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 8944b646..ae82acab 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,7 +7,7 @@ ${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 2e2d3eea..a6a29eec 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 79ce5603..56f444af 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries From cd8cb2d0ca410af441584fd6b0b5731411ddcd5e Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:57:20 +0200 Subject: [PATCH 122/169] Update saved results ci skip --- .../servers/ra/lakers/command.args | 2 +- .../saved_results/servers/ra/lakers/error.msg | 4 +- .../saved_results/servers/ra/lakers/hyp4.dot | 34 ++-- .../saved_results/servers/ra/lakers/hyp5.dot | 42 ++--- .../saved_results/servers/ra/lakers/hyp6.dot | 38 ++--- .../servers/ra/lakers/learnedModel.dot | 40 ++--- .../servers/ra/lakers/learnedModel.pdf | Bin 18204 -> 18166 bytes .../servers/ra/lakers/learnedModelbtf.dot | 40 ++--- .../servers/ra/lakers/statistics.txt | 41 +++-- .../servers/ra/rise_m4_app/command.args | 81 ++++++++++ .../servers/ra/rise_m4_app/hyp1.dot | 24 +++ .../servers/ra/rise_m4_app/hyp10.dot | 129 +++++++++++++++ .../servers/ra/rise_m4_app/hyp11.dot | 142 ++++++++++++++++ .../servers/ra/rise_m4_app/hyp2.dot | 51 ++++++ .../servers/ra/rise_m4_app/hyp3.dot | 55 +++++++ .../servers/ra/rise_m4_app/hyp4.dot | 59 +++++++ .../servers/ra/rise_m4_app/hyp5.dot | 74 +++++++++ .../servers/ra/rise_m4_app/hyp6.dot | 78 +++++++++ .../servers/ra/rise_m4_app/hyp7.dot | 96 +++++++++++ .../servers/ra/rise_m4_app/hyp8.dot | 117 ++++++++++++++ .../servers/ra/rise_m4_app/hyp9.dot | 121 ++++++++++++++ .../servers/ra/rise_m4_app/learnedModel.dot | 142 ++++++++++++++++ .../servers/ra/rise_m4_app/learnedModel.pdf | Bin 0 -> 27855 bytes .../ra/rise_m4_app/learnedModelbtf.dot | 142 ++++++++++++++++ .../ra/rise_m4_app/mapper_connection.config | 153 ++++++++++++++++++ .../servers/ra/rise_m4_app/statistics.txt | 129 +++++++++++++++ 26 files changed, 1713 insertions(+), 121 deletions(-) create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/command.args create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp1.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp10.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp11.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp2.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp3.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp4.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp5.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp6.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp7.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp8.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/hyp9.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/learnedModel.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/learnedModel.pdf create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/learnedModelbtf.dot create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/mapper_connection.config create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/statistics.txt diff --git a/experiments/saved_results/servers/ra/lakers/command.args b/experiments/saved_results/servers/ra/lakers/command.args index 4b63ca64..2163fb5a 100644 --- a/experiments/saved_results/servers/ra/lakers/command.args +++ b/experiments/saved_results/servers/ra/lakers/command.args @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -4 +10 -probNewDataValue 0.5 -seed diff --git a/experiments/saved_results/servers/ra/lakers/error.msg b/experiments/saved_results/servers/ra/lakers/error.msg index 237cf89b..8417ca6b 100644 --- a/experiments/saved_results/servers/ra/lakers/error.msg +++ b/experiments/saved_results/servers/ra/lakers/error.msg @@ -1,5 +1,5 @@ -Index -1 out of bounds for length 6 -java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 6 +Index -1 out of bounds for length 16 +java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 16 at de.learnlib.ralib.learning.CounterexampleAnalysis.binarySearch(CounterexampleAnalysis.java:263) at de.learnlib.ralib.learning.CounterexampleAnalysis.analyzeCounterexample(CounterexampleAnalysis.java:75) at de.learnlib.ralib.learning.rastar.RaStar.analyzeCounterExample(RaStar.java:173) diff --git a/experiments/saved_results/servers/ra/lakers/hyp4.dot b/experiments/saved_results/servers/ra/lakers/hyp4.dot index 943fd84a..8e72c5bf 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp4.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp4.dot @@ -11,7 +11,6 @@ digraph RA { "l8" [shape=doublecircle] "l9" [shape=doublecircle] "l10" [shape=doublecircle] -"l11" [shape=doublecircle] "" -> "l0" "l0" -> "l1" [label=[r1:=p1,]>] "l0" -> "l4" [label=] @@ -36,25 +35,24 @@ digraph RA { "l6" -> "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] "l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l5" [label=] "l8" -> "l5" [label=] "l8" -> "l5" [label=] -"l8" -> "l5" [label=] -"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] -"l10" -> "l11" [label=[r1:=r1,]>] -"l11" -> "l1" [label=[r1:=p1,]>] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l5" [label=] -"l11" -> "l5" [label=] -"l11" -> "l10" [label=[r1:=r1,]>] -"l11" -> "l5" [label=] +"l9" -> "l10" [label=[r1:=r1,]>] +"l10" -> "l1" [label=[r1:=p1,]>] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] } diff --git a/experiments/saved_results/servers/ra/lakers/hyp5.dot b/experiments/saved_results/servers/ra/lakers/hyp5.dot index e4063bac..18f7e526 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp5.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp5.dot @@ -21,8 +21,8 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l4" [label=] "l0" -> "l5" [label=] +"l0" -> "l5" [label=] "l0" -> "l5" [label=] -"l0" -> "l12" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -38,25 +38,25 @@ digraph RA { "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l11" [label=[r1:=r1,]>] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] -"l10" -> "l11" [label=[r1:=r1,]>] -"l11" -> "l1" [label=[r1:=p1,]>] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l10" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l12" -> "l11" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l10" [label=[r1:=r1,]>] +"l10" -> "l1" [label=[r1:=p1,]>] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l5" [label=] +"l10" -> "l5" [label=] +"l10" -> "l12" [label=[r1:=r1,]>] +"l10" -> "l5" [label=] +"l11" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l10" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/hyp6.dot b/experiments/saved_results/servers/ra/lakers/hyp6.dot index 3890fbca..3a5b1bf9 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp6.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp6.dot @@ -14,6 +14,7 @@ digraph RA { "l11" [shape=doublecircle] "l12" [shape=doublecircle] "l13" [shape=doublecircle] +"l14" [shape=doublecircle] "" -> "l0" "l0" -> "l1" [label=[r1:=p1,]>] "l0" -> "l4" [label=] @@ -23,7 +24,7 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l5" [label=] "l0" -> "l5" [label=] -"l0" -> "l12" [label=[r1:=p1,]>] +"l0" -> "l14" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -40,25 +41,26 @@ digraph RA { "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l11" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] -"l10" -> "l11" [label=[r1:=r1,]>] -"l11" -> "l1" [label=[r1:=p1,]>] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l10" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l12" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l10" [label=[r1:=r1,]>] +"l10" -> "l1" [label=[r1:=p1,]>] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l12" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l11" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l10" [label=[r1:=r1,]>] "l13" -> "l8" [label=[r1:=r1,]>] +"l14" -> "l10" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.dot b/experiments/saved_results/servers/ra/lakers/learnedModel.dot index c880f427..3a5b1bf9 100644 --- a/experiments/saved_results/servers/ra/lakers/learnedModel.dot +++ b/experiments/saved_results/servers/ra/lakers/learnedModel.dot @@ -24,7 +24,7 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l5" [label=] "l0" -> "l5" [label=] -"l0" -> "l12" [label=[r1:=p1,]>] +"l0" -> "l14" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -41,26 +41,26 @@ digraph RA { "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l11" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l8" -> "l13" [label=[r1:=r1,]>] -"l8" -> "l14" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] -"l10" -> "l11" [label=[r1:=r1,]>] -"l11" -> "l1" [label=[r1:=p1,]>] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l10" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l12" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l10" [label=[r1:=r1,]>] +"l10" -> "l1" [label=[r1:=p1,]>] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l12" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l11" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l10" [label=[r1:=r1,]>] "l13" -> "l8" [label=[r1:=r1,]>] -"l14" -> "l8" [label=[r1:=r1,]>] +"l14" -> "l10" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.pdf b/experiments/saved_results/servers/ra/lakers/learnedModel.pdf index 8e56f460c2a94b9905130eacc7a996e31b1b178b..81811beff74ceb93fe505fadf716698bac6350f3 100644 GIT binary patch delta 8304 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 C2fI1| delta 8342 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 diff --git a/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot b/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot index dc240879..bd276713 100644 --- a/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot +++ b/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot @@ -24,7 +24,7 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l5" [label=] "l0" -> "l5" [label=] -"l0" -> "l12" [label=[r1:=p1,]>] +"l0" -> "l14" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -41,26 +41,26 @@ digraph RA { "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l11" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l8" -> "l13" [label=[r1:=r1,]>] -"l8" -> "l14" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] -"l10" -> "l11" [label=[r1:=r1,]>] -"l11" -> "l1" [label=[r1:=p1,]>] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l4" [label=] -"l11" -> "l10" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l11" -> "l12" [label=[r1:=r1,]>] -"l12" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l10" [label=[r1:=r1,]>] +"l10" -> "l1" [label=[r1:=p1,]>] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l4" [label=] +"l10" -> "l12" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l10" -> "l14" [label=[r1:=r1,]>] +"l11" -> "l8" [label=[r1:=r1,]>] +"l12" -> "l10" [label=[r1:=r1,]>] "l13" -> "l8" [label=[r1:=r1,]>] -"l14" -> "l8" [label=[r1:=r1,]>] +"l14" -> "l10" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/statistics.txt b/experiments/saved_results/servers/ra/lakers/statistics.txt index 3df49f50..54734138 100644 --- a/experiments/saved_results/servers/ra/lakers/statistics.txt +++ b/experiments/saved_results/servers/ra/lakers/statistics.txt @@ -34,7 +34,7 @@ Round Limit: null IOMode: true Probability of Choosing a New DataValue: 0.5 Max Runs: 10000 -Max Depth for Register Automata: 4 +Max Depth for Register Automata: 10 Reset Runs: false Seed transitions: false Draw symbols uniformly: false @@ -98,28 +98,27 @@ Adapter Address: localhost === STATISTICS === Learning finished: false -Reason: Index -1 out of bounds for length 6 +Reason: Index -1 out of bounds for length 16 Size of the input alphabet: 26 Number of states: 15 -Number of hypotheses: 7 -Number of inputs: 5613 -Number of tests: 1548 -Number of learning inputs: 1245 -Number of learning tests: 447 -Number of inputs up to last hypothesis: 1500 -Number of tests up to last hypothesis: 512 -Time (ms) to learn model: 1414689 +Number of hypotheses: 6 +Number of inputs: 3990 +Number of tests: 761 +Number of learning inputs: 1254 +Number of learning tests: 441 +Number of inputs up to last hypothesis: 1324 +Number of tests up to last hypothesis: 451 +Time (ms) to learn model: 764786 Counterexamples: CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] CE 2:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] -CE 3:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] -CE 4:Query[ε|COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] / true] -CE 5:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] -CE 6:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] -CE 7:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] TIMEOUT[] / true] -Number of inputs when hypothesis was generated: [27, 110, 206, 809, 1039, 1270, 1500] -Number of tests when hypothesis was generated: [27, 70, 116, 296, 373, 440, 512] -Time (ms) when hypothesis was generated: [19194, 58341, 90800, 268367, 323453, 378905, 457396] -Number of inputs when counterexample was found: [29, 113, 266, 853, 1150, 1305, 5571] -Number of tests when counterexample was found: [28, 71, 131, 307, 401, 449, 1530] -Time (ms) when counterexample was found: [20105, 58758, 104447, 278357, 350886, 388081, 1407311] +CE 3:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 4:Query[ε|OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 6:Query[ε|COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +Number of inputs when hypothesis was generated: [27, 110, 206, 386, 855, 1324] +Number of tests when hypothesis was generated: [27, 70, 116, 175, 323, 451] +Time (ms) when hypothesis was generated: [19191, 58331, 90793, 130651, 283407, 397862] +Number of inputs when counterexample was found: [29, 113, 218, 390, 904, 3382] +Number of tests when counterexample was found: [28, 71, 118, 176, 328, 657] +Time (ms) when counterexample was found: [20102, 58748, 92116, 131567, 288954, 608377] diff --git a/experiments/saved_results/servers/ra/rise_m4_app/command.args b/experiments/saved_results/servers/ra/rise_m4_app/command.args new file mode 100644 index 00000000..b1fc4761 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/command.args @@ -0,0 +1,81 @@ +state-fuzzer-server + + +##### StateFuzzerConfig ##### +-output +${results.learning.servers.ra}/rise_m4_app + + +##### LearnerConfig ##### +-learningAlgorithm +RaStar +-equivalenceAlgorithms +IO_RANDOM_WALK +-logQueries +-alphabet +./src/main/resources/alphabet_placeholder.xml +-maxDepthRA +10 +-probNewDataValue +0.5 +-seed +7 +-socketClosedAsTimeout +-memQueryRuns +3 +-timeLimit +PT5H30M + +##### EdhocMapperConfig ##### +-protocolVersion +v23 + +-combinedMessageVersion +v07 + +## Mapper Auth ## + +-mapCredType +X509 + +-mapIdCredType +X5T + +## Sul Auth ## + +-sulCredType +X509 + +-sulIdCredType +X5T + +# TestVector +-testVectorJson +${authentication.test_vectors}/test_vectors_rise.json + +-testVectorJsonKey +test_vector_ed25519 + +-testVectorPeerKeyCurve +Ed25519 + +-edhocRole +Initiator + +-appCoapResource +helloWorld + +##### SulConfig ##### +-responseWait +600 +-processDir +${models.servers}/rise +-cmd +java -cp cf-edhoc.jar org.eclipse.californium.edhoc.EdhocServer 5 +-startWait +400 + + +##### EdhocSulServerConfig ##### +-connect +localhost:5683 diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp1.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp1.dot new file mode 100644 index 00000000..a1209ede --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp1.dot @@ -0,0 +1,24 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l1" -> "l0" [label=] +"l4" -> "l0" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp10.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp10.dot new file mode 100644 index 00000000..06088ec4 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp10.dot @@ -0,0 +1,129 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l27" [label=[r1:=r1,]>] +"l11" -> "l27" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l27" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l21" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +"l21" -> "l1" [label=[r1:=p1,]>] +"l21" -> "l22" [label=] +"l21" -> "l23" [label=] +"l21" -> "l24" [label=] +"l21" -> "l24" [label=] +"l21" -> "l25" [label=] +"l21" -> "l28" [label=] +"l21" -> "l28" [label=] +"l21" -> "l33" [label=] +"l22" -> "l26" [label=] +"l23" -> "l8" [label=] +"l24" -> "l8" [label=] +"l25" -> "l21" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l17" [label=] +"l26" -> "l23" [label=] +"l26" -> "l30" [label=] +"l26" -> "l33" [label=] +"l27" -> "l1" [label=[r1:=p1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l32" [label=[r1:=r1,]>] +"l28" -> "l21" [label=] +"l29" -> "l7" [label=[r1:=r1,]>] +"l30" -> "l26" [label=] +"l31" -> "l27" [label=[r1:=r1,]>] +"l32" -> "l27" [label=[r1:=r1,]>] +"l33" -> "l21" [label=] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp11.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp11.dot new file mode 100644 index 00000000..8a5bbecf --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp11.dot @@ -0,0 +1,142 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l34" [label=[r1:=p1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l27" [label=[r1:=r1,]>] +"l11" -> "l27" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l27" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l21" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +"l21" -> "l22" [label=] +"l21" -> "l23" [label=] +"l21" -> "l24" [label=] +"l21" -> "l24" [label=] +"l21" -> "l25" [label=] +"l21" -> "l28" [label=] +"l21" -> "l28" [label=] +"l21" -> "l33" [label=] +"l21" -> "l34" [label=[r1:=p1,]>] +"l22" -> "l26" [label=] +"l23" -> "l8" [label=] +"l24" -> "l8" [label=] +"l25" -> "l21" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l17" [label=] +"l26" -> "l23" [label=] +"l26" -> "l30" [label=] +"l26" -> "l33" [label=] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l32" [label=[r1:=r1,]>] +"l27" -> "l34" [label=[r1:=p1,]>] +"l28" -> "l21" [label=] +"l29" -> "l7" [label=[r1:=r1,]>] +"l30" -> "l26" [label=] +"l31" -> "l27" [label=[r1:=r1,]>] +"l32" -> "l27" [label=[r1:=r1,]>] +"l33" -> "l21" [label=] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l10" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l14" [label=[r1:=r1,]>] +"l35" -> "l19" [label=[r1:=r1,]>] +"l35" -> "l28" [label=] +"l35" -> "l28" [label=] +"l35" -> "l34" [label=[r1:=p1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp2.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp2.dot new file mode 100644 index 00000000..f5f8b360 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp2.dot @@ -0,0 +1,51 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l4" [label=] +"l7" -> "l4" [label=] +"l7" -> "l6" [label=] +"l7" -> "l4" [label=] +"l7" -> "l5" [label=] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l5" [label=] +"l8" -> "l6" [label=] +"l8" -> "l6" [label=] +"l9" -> "l7" [label=[r1:=r1,]>] +"l10" -> "l7" [label=[r1:=r1,]>] +"l11" -> "l7" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp3.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp3.dot new file mode 100644 index 00000000..4ee3450f --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp3.dot @@ -0,0 +1,55 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l5" [label=] +"l7" -> "l6" [label=] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l5" [label=] +"l8" -> "l6" [label=] +"l8" -> "l6" [label=] +"l9" -> "l7" [label=[r1:=r1,]>] +"l10" -> "l7" [label=[r1:=r1,]>] +"l11" -> "l7" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l7" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp4.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp4.dot new file mode 100644 index 00000000..41812b0d --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp4.dot @@ -0,0 +1,59 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l5" [label=] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l5" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l9" -> "l7" [label=[r1:=r1,]>] +"l10" -> "l7" [label=[r1:=r1,]>] +"l11" -> "l7" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l7" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp5.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp5.dot new file mode 100644 index 00000000..fe67b7b4 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp5.dot @@ -0,0 +1,74 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l5" [label=] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l5" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l16" [label=[r1:=r1,]>] +"l11" -> "l16" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l16" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l5" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l17" -> "l8" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp6.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp6.dot new file mode 100644 index 00000000..d3f9ceb0 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp6.dot @@ -0,0 +1,78 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l16" [label=[r1:=r1,]>] +"l11" -> "l16" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l16" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l8" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp7.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp7.dot new file mode 100644 index 00000000..4b7dcd45 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp7.dot @@ -0,0 +1,96 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l16" [label=[r1:=r1,]>] +"l11" -> "l16" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l16" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l21" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +"l21" -> "l1" [label=[r1:=p1,]>] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l20" [label=] +"l21" -> "l22" [label=] +"l21" -> "l23" [label=] +"l21" -> "l24" [label=] +"l21" -> "l24" [label=] +"l21" -> "l25" [label=] +"l22" -> "l8" [label=] +"l23" -> "l8" [label=] +"l24" -> "l8" [label=] +"l25" -> "l21" [label=] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp8.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp8.dot new file mode 100644 index 00000000..baf95ee8 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp8.dot @@ -0,0 +1,117 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l13" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l27" [label=[r1:=r1,]>] +"l11" -> "l27" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l27" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l21" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +"l21" -> "l1" [label=[r1:=p1,]>] +"l21" -> "l4" [label=] +"l21" -> "l4" [label=] +"l21" -> "l20" [label=] +"l21" -> "l22" [label=] +"l21" -> "l23" [label=] +"l21" -> "l24" [label=] +"l21" -> "l24" [label=] +"l21" -> "l25" [label=] +"l22" -> "l26" [label=] +"l23" -> "l8" [label=] +"l24" -> "l8" [label=] +"l25" -> "l21" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l15" [label=] +"l26" -> "l17" [label=] +"l26" -> "l20" [label=] +"l26" -> "l23" [label=] +"l27" -> "l1" [label=[r1:=p1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l18" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l18" [label=[r1:=r1,]>] +"l27" -> "l19" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/hyp9.dot b/experiments/saved_results/servers/ra/rise_m4_app/hyp9.dot new file mode 100644 index 00000000..91aa1bcb --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/hyp9.dot @@ -0,0 +1,121 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l1" [label=[r1:=p1,]>] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l27" [label=[r1:=r1,]>] +"l11" -> "l27" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l27" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l21" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +"l21" -> "l1" [label=[r1:=p1,]>] +"l21" -> "l20" [label=] +"l21" -> "l22" [label=] +"l21" -> "l23" [label=] +"l21" -> "l24" [label=] +"l21" -> "l24" [label=] +"l21" -> "l25" [label=] +"l21" -> "l28" [label=] +"l21" -> "l28" [label=] +"l22" -> "l26" [label=] +"l23" -> "l8" [label=] +"l24" -> "l8" [label=] +"l25" -> "l21" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l15" [label=] +"l26" -> "l17" [label=] +"l26" -> "l20" [label=] +"l26" -> "l23" [label=] +"l27" -> "l1" [label=[r1:=p1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l18" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l18" [label=[r1:=r1,]>] +"l27" -> "l19" [label=[r1:=r1,]>] +"l28" -> "l21" [label=] +"l29" -> "l7" [label=[r1:=r1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/learnedModel.dot b/experiments/saved_results/servers/ra/rise_m4_app/learnedModel.dot new file mode 100644 index 00000000..8a5bbecf --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/learnedModel.dot @@ -0,0 +1,142 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l34" [label=[r1:=p1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l27" [label=[r1:=r1,]>] +"l11" -> "l27" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l27" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l21" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +"l21" -> "l22" [label=] +"l21" -> "l23" [label=] +"l21" -> "l24" [label=] +"l21" -> "l24" [label=] +"l21" -> "l25" [label=] +"l21" -> "l28" [label=] +"l21" -> "l28" [label=] +"l21" -> "l33" [label=] +"l21" -> "l34" [label=[r1:=p1,]>] +"l22" -> "l26" [label=] +"l23" -> "l8" [label=] +"l24" -> "l8" [label=] +"l25" -> "l21" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l17" [label=] +"l26" -> "l23" [label=] +"l26" -> "l30" [label=] +"l26" -> "l33" [label=] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l32" [label=[r1:=r1,]>] +"l27" -> "l34" [label=[r1:=p1,]>] +"l28" -> "l21" [label=] +"l29" -> "l7" [label=[r1:=r1,]>] +"l30" -> "l26" [label=] +"l31" -> "l27" [label=[r1:=r1,]>] +"l32" -> "l27" [label=[r1:=r1,]>] +"l33" -> "l21" [label=] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l10" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l14" [label=[r1:=r1,]>] +"l35" -> "l19" [label=[r1:=r1,]>] +"l35" -> "l28" [label=] +"l35" -> "l28" [label=] +"l35" -> "l34" [label=[r1:=p1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/learnedModel.pdf b/experiments/saved_results/servers/ra/rise_m4_app/learnedModel.pdf new file mode 100644 index 0000000000000000000000000000000000000000..0d9d9625cab552b6f4ee30e952c7437ee0b557d9 GIT binary patch literal 27855 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 U*I(8J3GhN7n2e0lDl(Y=52&u}MF0Q* literal 0 HcmV?d00001 diff --git a/experiments/saved_results/servers/ra/rise_m4_app/learnedModelbtf.dot b/experiments/saved_results/servers/ra/rise_m4_app/learnedModelbtf.dot new file mode 100644 index 00000000..65f7a799 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/learnedModelbtf.dot @@ -0,0 +1,142 @@ +digraph RA { +"" [shape=none,label=<>] +"l0" [shape=doublecircle] +"l1" [shape=doublecircle] +"l2" [shape=circle] +"l3" [shape=circle] +"l4" [shape=doublecircle] +"l5" [shape=doublecircle] +"l6" [shape=doublecircle] +"l7" [shape=doublecircle] +"l8" [shape=doublecircle] +"l9" [shape=doublecircle] +"l10" [shape=doublecircle] +"l11" [shape=doublecircle] +"l12" [shape=doublecircle] +"l13" [shape=doublecircle] +"l14" [shape=doublecircle] +"l15" [shape=doublecircle] +"l16" [shape=doublecircle] +"l17" [shape=doublecircle] +"l18" [shape=doublecircle] +"l19" [shape=doublecircle] +"l20" [shape=doublecircle] +"l21" [shape=doublecircle] +"l22" [shape=doublecircle] +"l23" [shape=doublecircle] +"l24" [shape=doublecircle] +"l25" [shape=doublecircle] +"l26" [shape=doublecircle] +"l27" [shape=doublecircle] +"l28" [shape=doublecircle] +"l29" [shape=doublecircle] +"l30" [shape=doublecircle] +"l31" [shape=doublecircle] +"l32" [shape=doublecircle] +"l33" [shape=doublecircle] +"l34" [shape=doublecircle] +"l35" [shape=doublecircle] +"" -> "l0" +"l0" -> "l1" [label=[r1:=p1,]>] +"l0" -> "l4" [label=] +"l0" -> "l5" [label=] +"l0" -> "l6" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l12" [label=] +"l0" -> "l13" [label=[r1:=p1,]>] +"l1" -> "l7" [label=[r1:=r1,]>] +"l4" -> "l8" [label=] +"l5" -> "l0" [label=] +"l6" -> "l0" [label=] +"l7" -> "l9" [label=[r1:=r1,]>] +"l7" -> "l10" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l11" [label=[r1:=r1,]>] +"l7" -> "l14" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l19" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l29" [label=[r1:=r1,]>] +"l7" -> "l34" [label=[r1:=p1,]>] +"l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l4" [label=] +"l8" -> "l15" [label=] +"l8" -> "l15" [label=] +"l8" -> "l20" [label=] +"l9" -> "l16" [label=[r1:=r1,]>] +"l10" -> "l27" [label=[r1:=r1,]>] +"l11" -> "l27" [label=[r1:=r1,]>] +"l12" -> "l0" [label=] +"l13" -> "l27" [label=[r1:=r1,]>] +"l14" -> "l7" [label=[r1:=r1,]>] +"l15" -> "l8" [label=] +"l16" -> "l10" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l18" [label=[r1:=r1,]>] +"l16" -> "l13" [label=[r1:=r1,]>] +"l16" -> "l17" [label=] +"l16" -> "l19" [label=[r1:=r1,]>] +"l17" -> "l21" [label=] +"l18" -> "l16" [label=[r1:=r1,]>] +"l19" -> "l7" [label=[r1:=r1,]>] +"l20" -> "l8" [label=] +"l21" -> "l22" [label=] +"l21" -> "l23" [label=] +"l21" -> "l24" [label=] +"l21" -> "l24" [label=] +"l21" -> "l25" [label=] +"l21" -> "l28" [label=] +"l21" -> "l28" [label=] +"l21" -> "l33" [label=] +"l21" -> "l34" [label=[r1:=p1,]>] +"l22" -> "l26" [label=] +"l23" -> "l8" [label=] +"l24" -> "l8" [label=] +"l25" -> "l21" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l4" [label=] +"l26" -> "l17" [label=] +"l26" -> "l23" [label=] +"l26" -> "l30" [label=] +"l26" -> "l33" [label=] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l13" [label=[r1:=r1,]>] +"l27" -> "l31" [label=[r1:=r1,]>] +"l27" -> "l32" [label=[r1:=r1,]>] +"l27" -> "l34" [label=[r1:=p1,]>] +"l28" -> "l21" [label=] +"l29" -> "l7" [label=[r1:=r1,]>] +"l30" -> "l26" [label=] +"l31" -> "l27" [label=[r1:=r1,]>] +"l32" -> "l27" [label=[r1:=r1,]>] +"l33" -> "l21" [label=] +"l34" -> "l35" [label=[r1:=r1,]>] +"l35" -> "l9" [label=[r1:=r1,]>] +"l35" -> "l10" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l11" [label=[r1:=r1,]>] +"l35" -> "l14" [label=[r1:=r1,]>] +"l35" -> "l19" [label=[r1:=r1,]>] +"l35" -> "l28" [label=] +"l35" -> "l28" [label=] +"l35" -> "l34" [label=[r1:=p1,]>] +} diff --git a/experiments/saved_results/servers/ra/rise_m4_app/mapper_connection.config b/experiments/saved_results/servers/ra/rise_m4_app/mapper_connection.config new file mode 100644 index 00000000..97827755 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/mapper_connection.config @@ -0,0 +1,153 @@ +# Californium3 CoAP Properties file for EdhocMapper +# +# Random factor for initial CoAP acknowledge timeout. +# Default: 1.5 +COAP.ACK_INIT_RANDOM=1.5 +# Initial CoAP acknowledge timeout. +# Default: 2[s] +# Adjust MAX_ACK_TIMEOUT to add more time +COAP.ACK_TIMEOUT=10[s] +# Scale factor for CoAP acknowledge backoff-timeout. +# Default: 2.0 +COAP.ACK_TIMEOUT_SCALE=2.0 +# Enable automatic failover on "entity too large" response. +# Default: true +COAP.BLOCKWISE_ENTITY_TOO_LARGE_AUTO_FAILOVER=true +# Reuse token for blockwise requests. Ease traceability but may introduce +# vulnerability. +# Default: false +COAP.BLOCKWISE_REUSE_TOKEN=false +# Interval to validate lifetime of blockwise status. +# Default: 5[s] +COAP.BLOCKWISE_STATUS_INTERVAL=5[s] +# Lifetime of blockwise status. +# Default: 5[min] +COAP.BLOCKWISE_STATUS_LIFETIME=5[min] +# Use block2 option strictly, even if block2 is not required. +# Default: false +COAP.BLOCKWISE_STRICT_BLOCK2_OPTION=false +# CoAP port. +# Default: 5683 +COAP.COAP_PORT=5683 +# CoAP DTLS port. +# Default: 5684 +COAP.COAP_SECURE_PORT=5684 +# Congestion-Control algorithm (still experimental). +# [NULL, COCOA, COCOA_STRONG, BASIC_RTO, LINUX_RTO, PEAKHOPPER_RTO]. +# Default: NULL +COAP.CONGESTION_CONTROL_ALGORITHM=NULL +# Crop rotation period. +# Default: 247[s] +COAP.CROP_ROTATION_PERIOD=247[s] +# Deduplicator algorithm. +# [MARK_AND_SWEEP, PEERS_MARK_AND_SWEEP, CROP_ROTATION, NO_DEDUPLICATOR]. +# Default: MARK_AND_SWEEP +COAP.DEDUPLICATOR=MARK_AND_SWEEP +# Automatic replace entries in deduplicator. +# Default: true +COAP.DEDUPLICATOR_AUTO_REPLACE=true +# CoAP maximum exchange lifetime for CON requests. +# Default: 247[s] +COAP.EXCHANGE_LIFETIME=247[s] +# Timespan a multicast server may spread the response. +# Default: 5[s] +COAP.LEISURE=5[s] +# Mark and sweep interval. +# Default: 10[s] +COAP.MARK_AND_SWEEP_INTERVAL=10[s] +# Maximum CoAP acknowledge timeout. +# Default: 1[min] +# Should be: ACK_TIMEOUT <= MAX_ACK_TIMEOUT +COAP.MAX_ACK_TIMEOUT=10[s] +# Maximum number of active peers. +# Default: 150000 +COAP.MAX_ACTIVE_PEERS=150000 +# Maximum transmission latency for messages. +# Default: 100[s] +COAP.MAX_LATENCY=100[s] +# Maximum payload size. +# Default: 1024 +COAP.MAX_MESSAGE_SIZE=1024 +# Maximum inactive period of peer. +# Default: 10[min] +COAP.MAX_PEER_INACTIVITY_PERIOD=10[min] +# Maximum size of resource body. 0 to disable transparent blockwise +# mode. +# Default: 8192 +COAP.MAX_RESOURCE_BODY_SIZE=8192 +# Maximum number of CoAP retransmissions. +# Default: 4 +# Should be >= 0 (0: no retransmissions) +COAP.MAX_RETRANSMIT=0 +# Maximum number of observes on server-side. 0 to disable this limitation. +# Default: 50000 +COAP.MAX_SERVER_OBSERVES=50000 +# Maximum server response delay. +# Default: 250[s] +COAP.MAX_SERVER_RESPONSE_DELAY=250[s] +# Maximum time to wait for ACK or RST after the first transmission of +# a CON message. +# Default: 93[s] +COAP.MAX_TRANSMIT_WAIT=93[s] +# MID tracker. +# [NULL, GROUPED, MAPBASED]. +# Default: GROUPED +COAP.MID_TACKER=GROUPED +# Number of MID tracker groups. +# Default: 16 +COAP.MID_TRACKER_GROUPS=16 +# Base MID for multicast requests. +# Default: 65000 +COAP.MULTICAST_BASE_MID=65000 +# CoAP maximum lifetime for NON requests. +# Default: 145[s] +COAP.NON_LIFETIME=145[s] +# Interval time to check notifications receiver using a CON message. +# Default: 2[min] +COAP.NOTIFICATION_CHECK_INTERVAL=2[min] +# Interval counter to check notifications receiver using a CON message. +# Default: 100 +COAP.NOTIFICATION_CHECK_INTERVAL_COUNT=100 +# Additional time (backoff) to the max-age option +# for waiting for the next notification before reregister. +# Default: 2[s] +COAP.NOTIFICATION_REREGISTRATION_BACKOFF=2[s] +# Maximum concurrent transmissions. +# Default: 1 +COAP.NSTART=1 +# Maximum messages kept per peer for PEERS_MARK_AND_SWEEP. +# Default: 64 +COAP.PEERS_MARK_AND_SWEEP_MESSAGES=64 +# Preferred blocksize for blockwise transfer. +# Default: 512 +COAP.PREFERRED_BLOCK_SIZE=512 +# Probing rate to peers, which didn't response before. Currently not +# used. +# Default: 1.0 +COAP.PROBING_RATE=1.0 +# Protocol stage thread count. +# Default: 1 +COAP.PROTOCOL_STAGE_THREAD_COUNT=1 +# Response matching mode. +# [STRICT, RELAXED, PRINCIPAL, PRINCIPAL_IDENTITY]. +# Default: STRICT +COAP.RESPONSE_MATCHING=STRICT +# Process empty messages strictly according RFC7252, 4.1 as format error. +# Disable to ignore additional data as tokens or options. +# Default: true +COAP.STRICT_EMPTY_MESSAGE_FORMAT=false +# Number of block per TCP-blockwise bulk transfer. +# Default: 1 +COAP.TCP_NUMBER_OF_BULK_BLOCKS=1 +# Limit of token size. +# Default: 8 +COAP.TOKEN_SIZE_LIMIT=8 +# Use message off-loading, when data is not longer required. +# Default: false +COAP.USE_MESSAGE_OFFLOADING=false +# Use initially a random value for MID. +# Default: true +COAP.USE_RANDOM_MID_START=true +# Health status interval. 0 to disable the health status. +# Default: 0[ms] +SYS.HEALTH_STATUS_INTERVAL=0[ms] diff --git a/experiments/saved_results/servers/ra/rise_m4_app/statistics.txt b/experiments/saved_results/servers/ra/rise_m4_app/statistics.txt new file mode 100644 index 00000000..5c4f4a97 --- /dev/null +++ b/experiments/saved_results/servers/ra/rise_m4_app/statistics.txt @@ -0,0 +1,129 @@ +=== RUN DESCRIPTION === +Alphabet: [?EDHOC_MESSAGE_1_INPUT[C_I], !EDHOC_MESSAGE_1_OUTPUT[C_I], !EDHOC_MESSAGE_2_OUTPUT[], ?EDHOC_MESSAGE_3_INPUT[], !EDHOC_MESSAGE_3_OUTPUT[], !EDHOC_MESSAGE_4_OUTPUT[], !UNSUCCESSFUL_MESSAGE[], !COAP_EMPTY_MESSAGE_OUTPUT[], !EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT[C_I], ?EDHOC_ERROR_MESSAGE_INPUT[], !COAP_APP_MESSAGE_OUTPUT[], !COAP_MESSAGE_OUTPUT[], !COAP_ERROR_MESSAGE_OUTPUT[], ?COAP_APP_MESSAGE_INPUT[], ?COAP_EMPTY_MESSAGE_INPUT[], !OSCORE_APP_MESSAGE_OUTPUT[], !SOCKET_CLOSED[], !EDHOC_ERROR_MESSAGE_OUTPUT[], ?EDHOC_MESSAGE_2_INPUT[], !DISABLED[], ?EDHOC_MESSAGE_4_INPUT[], !UNSUPPORTED_MESSAGE[], !TIMEOUT[], !UNKNOWN[], ?EDHOC_MESSAGE_3_OSCORE_APP_INPUT[C_I], ?OSCORE_APP_MESSAGE_INPUT[]] + +StateFuzzerConfig Parameters +Help: false +Debug: false +Quiet: false +Output Directory: experiments/results/servers/ra/rise_m4_app +Fuzzing Client: false + +LearnerConfigStandard Parameters +Alphabet: ./src/main/resources/alphabet_placeholder.xml +Learning Algorithm: RASTAR +Equivalence Algorithms: [IO_RANDOM_WALK] +Max Depth: 1 +Min Length: 5 +Max Length: 15 +Max Equivalence Queries: 1000 +Runs Per Membership Query: 3 +Random Length: 5 +Membership Query Retries: 3 +Log Queries: true +Prob Reset: 0.0 +Test File: null +Seed: 7 +Cache Tests: false +Ce Sanitization: true +Skip Non Det Tests: false +Ce Reruns: 3 +Probabilistic Sanitization: true +Time Limit: PT5H30M +Test Limit: null +Round Limit: null +IOMode: true +Probability of Choosing a New DataValue: 0.5 +Max Runs: 10000 +Max Depth for Register Automata: 10 +Reset Runs: false +Seed transitions: false +Draw symbols uniformly: false + +SulConfig Parameters +Fuzzing Role: client +Fuzzing Client: true +Response Wait: 100 +Input Response Timeout: null +Command: null +Terminate Command: null +Process Dir: null +Redirect Output Streams: false +Process Trigger: NEW_TEST +Start Wait: 0 + +SulServerConfigStandard Parameters +Connect to: localhost:5683 + +MapperConfig Parameters +Mapper Connection Config: null +Repeating Outputs: null +Socket Closed as Timeout: true +Disabled as Timeout: false +Merge Repeating: true + +EdhocMapperConfig Parameters +Protocol Version: v23 +Combined Message Version: v07 +Edhoc Role: Initiator +Edhoc Coap Resource: .well-known/edhoc +App Coap Resource: helloWorld +App Message Code To Coap Server: GET +App Message Payload To Coap Server: +App Message Code To Coap Client: CHANGED +App Message Payload To Coap Client: Server Application Data +Coap Error As Edhoc Error: false +use Content Format: true +use Session Reset: false +use CX Correlation: true +Own Connection Id: 36 +Generate Own Connection Id: true +Force Oscore Sender Id: null +Force Oscore Recipient Id: null + +AuthenticationConfig Parameters +Map Cred Type: X509 +Map Id Cred Type: X5T +Sul Cred Type: X509 +Sul Id Cred Type: X5T +Trust Model: STRICT + +TestVectorAuthenticationConfig Parameters +Test Vector File: experiments/authentication/test_vectors/test_vectors_rise.json +Test Vector Key: test_vector_ed25519 +Test Vector Peer Key Curve: Ed25519 + +SulAdapterConfig Parameters +Adapter Port: null +Adapter Address: localhost + +=== STATISTICS === +Learning finished: false +Reason: time limit reached +Size of the input alphabet: 26 +Number of states: 36 +Number of hypotheses: 11 +Number of inputs: 79401 +Number of tests: 12639 +Number of learning inputs: 10591 +Number of learning tests: 2821 +Number of inputs up to last hypothesis: 11027 +Number of tests up to last hypothesis: 2869 +Time (ms) to learn model: 19800566 +Counterexamples: +CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] / true] +CE 2:Query[ε|EDHOC_MESSAGE_4_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 3:Query[ε|EDHOC_MESSAGE_3_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] EDHOC_MESSAGE_4_OUTPUT[] / true] +CE 4:Query[ε|EDHOC_MESSAGE_4_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_3_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] TIMEOUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] TIMEOUT[] / true] +CE 6:Query[ε|EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_2_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 7:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 8:Query[ε|EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_APP_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 9:Query[ε|EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] COAP_APP_MESSAGE_INPUT[] COAP_APP_MESSAGE_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] / true] +CE 10:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] EDHOC_ERROR_MESSAGE_OUTPUT[] / true] +CE 11:Query[ε|COAP_EMPTY_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_APP_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] +Number of inputs when hypothesis was generated: [63, 662, 1021, 1486, 2743, 2973, 4723, 7350, 8407, 9294, 11027] +Number of tests when hypothesis was generated: [63, 323, 459, 593, 924, 1002, 1416, 1991, 2265, 2462, 2869] +Time (ms) when hypothesis was generated: [58485, 350341, 510970, 728018, 1124524, 1217187, 1789729, 2642203, 2907739, 3211994, 3779995] +Number of inputs when counterexample was found: [67, 685, 1031, 1504, 2749, 2980, 4725, 7357, 8412, 9648, 11152] +Number of tests when counterexample was found: [64, 326, 460, 595, 925, 1003, 1417, 1992, 2266, 2498, 2882] +Time (ms) when counterexample was found: [59939, 356010, 512570, 730339, 1127170, 1219338, 1791168, 2643748, 2910366, 3287408, 3810571] From ed11055570b950b45ce9612ffc9d09e642562094 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Mon, 10 Jun 2024 16:58:40 +0200 Subject: [PATCH 123/169] Increase lakers server timeout and put timeLimit on sifis-home server --- experiments/args/lakers/server_ra | 4 ++-- experiments/args/sifis-home/server_phase_1_ra | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 2163fb5a..8a192d44 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -58,13 +58,13 @@ Initiator ##### SulConfig ##### -responseWait -500 +600 -processDir ${models.servers}/lakers -cmd ./coapserver -startWait -200 +500 ##### EdhocSulServerConfig ##### diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index e99c0d64..2e99dd60 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -21,6 +21,8 @@ IO_RANDOM_WALK -seed 7 -socketClosedAsTimeout +-timeLimit +PT5H50M ##### EdhocMapperConfig ##### From 28e02b5e4aac3efd91c933c2140a9d46c2d6f7db Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:44:55 +0200 Subject: [PATCH 124/169] Update CI diff for RISE server ci skip --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a7dbb38a..fb44c68d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -184,7 +184,7 @@ jobs: run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 12 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 11 SIFIS-HOME-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} From 5ff6475be1bdfcfd118fd665c0b84bbc2fa95611 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 11 Jun 2024 13:45:33 +0200 Subject: [PATCH 125/169] Put maxDepthRA back to 4 for sifis-home & lakers server --- experiments/args/lakers/server_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 8a192d44..66ed118e 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 2e99dd60..5734b41e 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -15,14 +15,12 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed 7 -socketClosedAsTimeout --timeLimit -PT5H50M ##### EdhocMapperConfig ##### From 293ba4b9f3b01d7c9ce3acbcdeace9d9d7dc3069 Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Tue, 11 Jun 2024 20:49:54 +0200 Subject: [PATCH 126/169] Update saved results for lakers server --- .../servers/ra/lakers/command.args | 6 +-- .../saved_results/servers/ra/lakers/error.msg | 12 ----- .../saved_results/servers/ra/lakers/hyp4.dot | 34 +++++++------- .../saved_results/servers/ra/lakers/hyp5.dot | 42 +++++++++--------- .../saved_results/servers/ra/lakers/hyp6.dot | 38 ++++++++-------- .../servers/ra/lakers/learnedModel.dot | 40 ++++++++--------- .../servers/ra/lakers/learnedModel.pdf | Bin 18166 -> 18204 bytes .../servers/ra/lakers/learnedModelbtf.dot | 40 ++++++++--------- .../servers/ra/lakers/statistics.txt | 41 +++++++++-------- 9 files changed, 120 insertions(+), 133 deletions(-) delete mode 100644 experiments/saved_results/servers/ra/lakers/error.msg diff --git a/experiments/saved_results/servers/ra/lakers/command.args b/experiments/saved_results/servers/ra/lakers/command.args index 2163fb5a..66ed118e 100644 --- a/experiments/saved_results/servers/ra/lakers/command.args +++ b/experiments/saved_results/servers/ra/lakers/command.args @@ -15,7 +15,7 @@ IO_RANDOM_WALK -alphabet ./src/main/resources/alphabet_placeholder.xml -maxDepthRA -10 +4 -probNewDataValue 0.5 -seed @@ -58,13 +58,13 @@ Initiator ##### SulConfig ##### -responseWait -500 +600 -processDir ${models.servers}/lakers -cmd ./coapserver -startWait -200 +500 ##### EdhocSulServerConfig ##### diff --git a/experiments/saved_results/servers/ra/lakers/error.msg b/experiments/saved_results/servers/ra/lakers/error.msg deleted file mode 100644 index 8417ca6b..00000000 --- a/experiments/saved_results/servers/ra/lakers/error.msg +++ /dev/null @@ -1,12 +0,0 @@ -Index -1 out of bounds for length 16 -java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 16 - at de.learnlib.ralib.learning.CounterexampleAnalysis.binarySearch(CounterexampleAnalysis.java:263) - at de.learnlib.ralib.learning.CounterexampleAnalysis.analyzeCounterexample(CounterexampleAnalysis.java:75) - at de.learnlib.ralib.learning.rastar.RaStar.analyzeCounterExample(RaStar.java:173) - at de.learnlib.ralib.learning.rastar.RaStar.learn(RaStar.java:113) - at com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerRA.inferRegisterAutomata(StateFuzzerRA.java:148) - at com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerRA.startFuzzing(StateFuzzerRA.java:89) - at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.executeCommand(CommandLineParser.java:355) - at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.parseAndExecuteCommand(CommandLineParser.java:226) - at com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser.parse(CommandLineParser.java:168) - at com.github.protocolfuzzing.edhocfuzzer.MainRA.main(MainRA.java:15) diff --git a/experiments/saved_results/servers/ra/lakers/hyp4.dot b/experiments/saved_results/servers/ra/lakers/hyp4.dot index 8e72c5bf..943fd84a 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp4.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp4.dot @@ -11,6 +11,7 @@ digraph RA { "l8" [shape=doublecircle] "l9" [shape=doublecircle] "l10" [shape=doublecircle] +"l11" [shape=doublecircle] "" -> "l0" "l0" -> "l1" [label=[r1:=p1,]>] "l0" -> "l4" [label=] @@ -35,24 +36,25 @@ digraph RA { "l6" -> "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] -"l8" -> "l4" [label=] "l8" -> "l4" [label=] -"l8" -> "l4" [label=] -"l8" -> "l4" [label=] -"l8" -> "l4" [label=] -"l8" -> "l5" [label=] "l8" -> "l5" [label=] "l8" -> "l5" [label=] +"l8" -> "l5" [label=] +"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l9" [label=[r1:=r1,]>] -"l9" -> "l10" [label=[r1:=r1,]>] -"l10" -> "l1" [label=[r1:=p1,]>] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l5" [label=] -"l10" -> "l5" [label=] -"l10" -> "l5" [label=] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l5" [label=] +"l11" -> "l5" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l5" [label=] } diff --git a/experiments/saved_results/servers/ra/lakers/hyp5.dot b/experiments/saved_results/servers/ra/lakers/hyp5.dot index 18f7e526..e4063bac 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp5.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp5.dot @@ -21,8 +21,8 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l4" [label=] "l0" -> "l5" [label=] -"l0" -> "l5" [label=] "l0" -> "l5" [label=] +"l0" -> "l12" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -38,25 +38,25 @@ digraph RA { "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] -"l8" -> "l5" [label=] -"l8" -> "l5" [label=] -"l8" -> "l5" [label=] -"l8" -> "l11" [label=[r1:=r1,]>] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l9" -> "l10" [label=[r1:=r1,]>] -"l10" -> "l1" [label=[r1:=p1,]>] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l5" [label=] -"l10" -> "l5" [label=] -"l10" -> "l12" [label=[r1:=r1,]>] -"l10" -> "l5" [label=] -"l11" -> "l8" [label=[r1:=r1,]>] -"l12" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l12" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/hyp6.dot b/experiments/saved_results/servers/ra/lakers/hyp6.dot index 3a5b1bf9..3890fbca 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp6.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp6.dot @@ -14,7 +14,6 @@ digraph RA { "l11" [shape=doublecircle] "l12" [shape=doublecircle] "l13" [shape=doublecircle] -"l14" [shape=doublecircle] "" -> "l0" "l0" -> "l1" [label=[r1:=p1,]>] "l0" -> "l4" [label=] @@ -24,7 +23,7 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l5" [label=] "l0" -> "l5" [label=] -"l0" -> "l14" [label=[r1:=p1,]>] +"l0" -> "l12" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -41,26 +40,25 @@ digraph RA { "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l11" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l9" -> "l10" [label=[r1:=r1,]>] -"l10" -> "l1" [label=[r1:=p1,]>] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l12" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l11" -> "l8" [label=[r1:=r1,]>] -"l12" -> "l10" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] "l13" -> "l8" [label=[r1:=r1,]>] -"l14" -> "l10" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.dot b/experiments/saved_results/servers/ra/lakers/learnedModel.dot index 3a5b1bf9..c880f427 100644 --- a/experiments/saved_results/servers/ra/lakers/learnedModel.dot +++ b/experiments/saved_results/servers/ra/lakers/learnedModel.dot @@ -24,7 +24,7 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l5" [label=] "l0" -> "l5" [label=] -"l0" -> "l14" [label=[r1:=p1,]>] +"l0" -> "l12" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -41,26 +41,26 @@ digraph RA { "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l11" [label=[r1:=r1,]>] -"l8" -> "l13" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l9" -> "l10" [label=[r1:=r1,]>] -"l10" -> "l1" [label=[r1:=p1,]>] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l12" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l11" -> "l8" [label=[r1:=r1,]>] -"l12" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l14" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] "l13" -> "l8" [label=[r1:=r1,]>] -"l14" -> "l10" [label=[r1:=r1,]>] +"l14" -> "l8" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.pdf b/experiments/saved_results/servers/ra/lakers/learnedModel.pdf index 81811beff74ceb93fe505fadf716698bac6350f3..a086a6642582eca8a12977342b1e0be7b96f945a 100644 GIT binary patch delta 8343 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 delta 8305 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 C+Pi81 diff --git a/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot b/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot index bd276713..dc240879 100644 --- a/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot +++ b/experiments/saved_results/servers/ra/lakers/learnedModelbtf.dot @@ -24,7 +24,7 @@ digraph RA { "l0" -> "l4" [label=] "l0" -> "l5" [label=] "l0" -> "l5" [label=] -"l0" -> "l14" [label=[r1:=p1,]>] +"l0" -> "l12" [label=[r1:=p1,]>] "l1" -> "l8" [label=[r1:=r1,]>] "l4" -> "l6" [label=] "l5" -> "l0" [label=] @@ -41,26 +41,26 @@ digraph RA { "l8" -> "l1" [label=[r1:=p1,]>] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l11" [label=[r1:=r1,]>] -"l8" -> "l13" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] -"l8" -> "l12" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l9" -> "l10" [label=[r1:=r1,]>] -"l10" -> "l1" [label=[r1:=p1,]>] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l4" [label=] -"l10" -> "l12" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l10" -> "l14" [label=[r1:=r1,]>] -"l11" -> "l8" [label=[r1:=r1,]>] -"l12" -> "l10" [label=[r1:=r1,]>] +"l8" -> "l13" [label=[r1:=r1,]>] +"l8" -> "l14" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] +"l10" -> "l11" [label=[r1:=r1,]>] +"l11" -> "l1" [label=[r1:=p1,]>] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l4" [label=] +"l11" -> "l10" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l11" -> "l12" [label=[r1:=r1,]>] +"l12" -> "l11" [label=[r1:=r1,]>] "l13" -> "l8" [label=[r1:=r1,]>] -"l14" -> "l10" [label=[r1:=r1,]>] +"l14" -> "l8" [label=[r1:=r1,]>] } diff --git a/experiments/saved_results/servers/ra/lakers/statistics.txt b/experiments/saved_results/servers/ra/lakers/statistics.txt index 54734138..853ba992 100644 --- a/experiments/saved_results/servers/ra/lakers/statistics.txt +++ b/experiments/saved_results/servers/ra/lakers/statistics.txt @@ -34,7 +34,7 @@ Round Limit: null IOMode: true Probability of Choosing a New DataValue: 0.5 Max Runs: 10000 -Max Depth for Register Automata: 10 +Max Depth for Register Automata: 4 Reset Runs: false Seed transitions: false Draw symbols uniformly: false @@ -97,28 +97,27 @@ Adapter Port: null Adapter Address: localhost === STATISTICS === -Learning finished: false -Reason: Index -1 out of bounds for length 16 +Learning finished: true Size of the input alphabet: 26 Number of states: 15 -Number of hypotheses: 6 -Number of inputs: 3990 -Number of tests: 761 -Number of learning inputs: 1254 -Number of learning tests: 441 -Number of inputs up to last hypothesis: 1324 -Number of tests up to last hypothesis: 451 -Time (ms) to learn model: 764786 +Number of hypotheses: 7 +Number of inputs: 41240 +Number of tests: 10447 +Number of learning inputs: 1245 +Number of learning tests: 447 +Number of inputs up to last hypothesis: 1500 +Number of tests up to last hypothesis: 512 +Time (ms) to learn model: 16982028 Counterexamples: CE 1:Query[ε|EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] COAP_EMPTY_MESSAGE_INPUT[] SOCKET_CLOSED[] / true] CE 2:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] -CE 3:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] -CE 4:Query[ε|OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] -CE 5:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] / true] -CE 6:Query[ε|COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_ERROR_MESSAGE_INPUT[] TIMEOUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_2_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] -Number of inputs when hypothesis was generated: [27, 110, 206, 386, 855, 1324] -Number of tests when hypothesis was generated: [27, 70, 116, 175, 323, 451] -Time (ms) when hypothesis was generated: [19191, 58331, 90793, 130651, 283407, 397862] -Number of inputs when counterexample was found: [29, 113, 218, 390, 904, 3382] -Number of tests when counterexample was found: [28, 71, 118, 176, 328, 657] -Time (ms) when counterexample was found: [20102, 58748, 92116, 131567, 288954, 608377] +CE 3:Query[ε|EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_1_INPUT[1[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_4_INPUT[] TIMEOUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] / true] +CE 4:Query[ε|COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] OSCORE_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[0[C_I]] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] / true] +CE 5:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] COAP_APP_MESSAGE_INPUT[] COAP_ERROR_MESSAGE_OUTPUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +CE 6:Query[ε|EDHOC_MESSAGE_1_INPUT[0[C_I]] EDHOC_MESSAGE_2_OUTPUT[] EDHOC_MESSAGE_3_OSCORE_APP_INPUT[1[C_I]] TIMEOUT[] EDHOC_MESSAGE_3_INPUT[] COAP_EMPTY_MESSAGE_OUTPUT[] / true] +Number of inputs when hypothesis was generated: [27, 110, 206, 809, 1039, 1270, 1500] +Number of tests when hypothesis was generated: [27, 70, 116, 296, 373, 440, 512] +Time (ms) when hypothesis was generated: [36940, 106176, 168941, 475163, 581146, 682372, 813825] +Number of inputs when counterexample was found: [29, 113, 266, 853, 1150, 1305] +Number of tests when counterexample was found: [28, 71, 131, 307, 401, 449] +Time (ms) when counterexample was found: [38551, 107193, 193086, 492855, 628569, 698040] From f0cb770653b1b66fc9da68a7f706f8a8afaf51fb Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:52:58 +0200 Subject: [PATCH 127/169] Add pdfs with shortened names to saved results ci skip --- .../ra/lakers/learnedModelShortNames.pdf | Bin 0 -> 38130 bytes .../ra/rise_m4_app/learnedModelShortNames.pdf | Bin 0 -> 45608 bytes .../learnedModelShortNames.pdf | Bin 0 -> 46756 bytes .../learnedModelShortNames.pdf | Bin 0 -> 43426 bytes .../ra/lakers/learnedModelShortNames.pdf | Bin 0 -> 41992 bytes .../ra/rise_m4_app/learnedModelShortNames.pdf | Bin 0 -> 51222 bytes .../learnedModelShortNames.pdf | Bin 0 -> 54791 bytes .../learnedModelShortNames.pdf | Bin 0 -> 42291 bytes 8 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 experiments/saved_results/clients/ra/lakers/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/clients/ra/rise_m4_app/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/servers/ra/lakers/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/servers/ra/rise_m4_app/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/servers/ra/sifis-home_phase_1/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelShortNames.pdf diff --git a/experiments/saved_results/clients/ra/lakers/learnedModelShortNames.pdf b/experiments/saved_results/clients/ra/lakers/learnedModelShortNames.pdf new file mode 100644 index 0000000000000000000000000000000000000000..52407b064545121a85e5e9830e486e9c4b41b017 GIT binary patch literal 38130 zcmZ^K1CSt1w`JS5ZQHhOPTRJpyQgj2wr$(CZM%Et`|;xKMr>8a&B{}!^4`pfM4gBt zRS*%QWu#+;B5k^={(xd8U?8wFw1nc}A)uEru{CoxCt&#tDM1ks5YUTRSUa0I{>`lo zoJ~YbjO>g}p!oQpoSYp^3~Zp>GpDqrV`#T(=^;M#T@Mh42iFqXg<%QYXgi z5iG$F&h>g}R&NhZK8Tnq>f7bB_-MBxYE53s#EnIL5HWAwKlatWKL-42_%EI5h$7a$YUR)$4f}Ld16ak+E2D#oTxy`fm#i77?Z5pP4(FayG0iTd%`F)yv zJwNP=!rzi7|L%}_LS!G7cK+=0_0{zKK9Rphw$8UW`ugSQYWS$<~%RYIknb2;xLr1Jh z1Qh70+=v5F#p;t*UJ*)E6>7A4{b~%4DQEB;atX6Bb`?VRS&yk#FItm`*gzk;DYNEIqgIQprH-Y5|Wah{7 z@oev71OuSF2A-eq{r0wEM1GF<6YxhKzQ_0RdyhQ(YsJVKKF5KH=kxZJvN2?bKlt-@ zOH~oXdK=}Th;8c`Z(Y^Bn8MKColSAB5XOTWIhX}%U;s_nCRx?7^H2-0hXMxag0wXh zd!B?_pTL9CYVf<1ad%Z;s8<@CN2GZug{})hIR&o}6pyHNGHTuuokyU~ku~*^WD_YH znk;D1q@-MWO%PJXy-WpFkFw*^w48Zv4ck}1)gfU^Uj1l}XYM&AGiXwb0h5J>zeL$i zI%5dYKxr2O$XE^w2ss}JB*nU40p@7Fd=m-m6Qis(N*2o-KGt78A*eC8UO=E0`ar;i z4A!gXqwsFaX!gqg>mg7|=;rP#Ti-j-=K=a8^T)KKd5-^G2JzjBXi^SV0Ek>bUlbw% zRD>WuB9H>IVzFG0sMi=YwN{r55ouymNthxoKH9P!=UGC=m&qRS1Fp0(uOE5=CfTzr z$uch;$KWS-HI|@}CDENKsWh1FuzaI5;VeCvt6Vr6xDtZ2s#Dc{uTgY0n2ses+$^kdw;K> zV2Z*KQebJenoDgFc0uLG?@_0VY(m(=TZC6V>yttW;k!0CJZdy}K zZsGNSY4}S3Rw;cXbAlo^7>Na?uF`WA3}QlKjsbPG9y&#RmCiToU;r3T7U*6u2?%Y& z{zT40}gQi~F5HHWL5_{N-g9QZVk=B}~FkZ@ZWUk(v?ww=!PX$#nb_AbJek*>C2efO>@ zz0P2!b+=7)D6AkdRC^+IcydfkamC{iPYsMJPqcM57`%#fqOWiwIEobez+N`P;)_7N zdmEaT!wCLpvgS8`<|sk&-&$2zxO|uOLnA2lbrqk!VYkZmsW*ZVX8rW<24II~IAzWo za9v=h5w;XQX_zQ|O#zlr`9r)_K7I40J-N@ZI^%>oT0~XvJ`QB=*#9*<<;`&7bIgDb zg`nAn_c&FKvWWR(u93Dx2NF460 zAx$glycLybE6^C)1D8lx{^Ot+L7j>yUg{LvkHj_{x(n#a2OyeO&MU|Qnulda4c4tZ znduaJq}3Gbxqm5j1SsIbE2xDrupo4*#AK^QF>OlY6!V2+0d02+0l~hevxs|(di)vu zIlLIrEm-QV96W|M_$$dY)NdBKr+F%*;l~r@g)2yAMM=U`c~xri*vF^{jPr}s3X^KL zsOk4%RXrNXO?mnJq(LD)L_Y{5#|zF@OYZ{MpDs?VrkLUBHs+TsL@b7WI!rNDH%vK_ zaZE8PGpImluXd162h*`_g)B&Lpl)preF2h{$sG#HHVns% zI8MJ^@7h_oA$ol>4ylX?eNT&9rcn}H4!@SyqXq7uX$Dw?d9j`C$Y_I69N>@#t=mr`aw;Sk>5fD!(bTHl^;T)P2s?|uB_!)!e? zPl9y0VZg}kKIG>i{%^Oht@jOJP>OXxww?jBSWS))eh@f#Fy_ya z>YSfH71Pz}>S-cK&0m>+AX*&Om$Y!kN($scm^94Wzj24?xJioun{>B0vUBx z+N0)JUoZ!ai5o@5jYZlcG$04VGCb#AC0AaviO$OMegG2{l_JOH`cJ_d6x7T)Qn&9Z>>I6~|C zPY099g^7**GnPe}OM`+oM81ndKztxn5{6Z3K-f8MjQeo^j^$LrEr|yZaW#(1|Lj$0 zz^7{_>IS>a>26l{JV|4wwTAPlrNbqplEWBrM1O}#v{@Pild`IHLuZ9ckCWEuvk!uD zok9npHU_`v=hilgw=o2G=s^Q(CqLQ`dr>=d7jeUi^&k7$CL#NZ5wjBwIcBShR-H5A z6*Gz-4%VX^j4opVFsl^`rs`t!Eb)xkXIZC`@$NiMpS(?1R_vi=%(ksNU~$?ixxTCJ?~!mg96lH#T3jiwqAGvRxt zeAp~bG)hr=UNX5>9AD1YLFaU(c-YLP8TmHe+Ub(plKjinp&i*a?rvaB+a8mh&^F+# z;f0wAR$81Vl?K8()PT(q#0X%T0YgJJb?Vt1l&79#vUp0O`6TicyD`2A+9hr~&Zk!nMC6f9%t>V>t$xmh!hL_#c-y z^DIO(0Pm*yE(YILfuEV8-1teY(QBpH!hCBRD-0!wP6LQN0jG8P$~PmW)+Kt9`bXOB z_1RsPJ`OU=T6HIEm5+2P8Y^nS{mMES#$1k|VdQR%F#)*pd_2EbDVl`?hDJweBTWfO zdkdrZ;5=;rBL~aK2Hn;1>RRS0ixr9eEe)S6TRcFt6xM|a!4q{2Bd~oXhx{|TliBEy zobgMdHqQknYN&8;h(a&v%-A$bA!$|I|qO+w3s8f`kO_8Ywd{1BV zRUFA}%B0C_lfYdS#UF8!qzR4@F1)%7hC0hmZuUiPB5|nfxV^haV!96N`^G*!L=qOq znQ{PVCFL`Cxu|3a(X)s`G?xMV+7QuOz0GD+@C$zzy?1MMW7^@lv)G0@d<0)-^ z^L-@nzTpjU(w4#c+w<#y=-iQMzEEO;Q?6auaa4=HZ3A5tTZ{5-_K|CEd7d#5?`A!_ zH5k_zXZCeMT#YBe)k3x@{993p${1w?;k9w#bgno}jYQNGjbL6CoKTKGa*-wJ$8ro=7y@w{F z$8WHQR@v*?(Xgzn7z8rRsyv<#2yth!7XmwIe5VFyW1ZCI;2va;dW z!8eivAVrtRrM~)cF_Hs4P)7!-;Y+!Q&NE@8wv@eHSgI&48gV|`hX$L!ZnReTeR&(p zrefnJc|rEcqI7RH$E$HCt_(7FdnNlG67iUn)O3&iEYx*j=I|EHaY_CFdAed;IoO}c z%Y?O2DCep(s>Xh`OaA%H_b>u&&aN+RWYK&om`nh?k}Lo#Sj#~OYA3(=;`I^R~a4WeR;@W|k(4xnqat8ATOQL24x_lW~ z1ts&4Jl2@~#zDxz;ygxG2A;lIs0Y7?PCGmExSvGor&zYhqqQ-K2~Aar!cAO$r!vpy zojcQVD=l*^N!iz2wqWjS(br)Na!_QJLDNkbFahe%ZiWOD!V4mX z2WG0)J1viPPkL_lb*36AOvv)ZfJ5eaaJj~>|VZyYK>3O+-gEqD@ zCJn8GKYYo!$^b5c)BtDQH+n!?*`mmyI7JW0@}0)dGn&bK_c=Jaz-{{uxDkZCP zbdMD#|4v75vlXk5dF7-Fo5#TFtouV(v!k9qUvAVswr91uRBI-h%NQ)EAKG4B+*6&W zVCYRbe7OPyx~FLN8Yo}XpmUPw4^ZqoIbAHAHrL8a(01|@G4q_jc~Hq^Ld-Yo9P_k< z>PUYT2a9`@Bi<2>9$LiDfTmZp*Sk;{JvkFRA%m{CtXKhIyJqayZS3YCwB*8;jbp$R>@s z+*tE{Xta3@wRp5JxnkmQS)N&!v;bh+E1%eDEU`}U2Sl-|C8}$?GdaMQ5BEXNUH$60 zpN*p*!2FpoAt)1DlGpUM%dKO#cx6DKh*II{z=WDJ=sn0|D!Q^|gO0 z_y=MnVEexz#=k7~|3ZJO`kVd}63739L_n|NVQ)e}uV7$i@~`j|3>;1VdSm?WbM&$% z#uf%bcJ2h)e<20}Mn+C{0ycIg0^NVnh5v^3m+wUIj{^8_xli2D&c*(Jh5K&@|3d%U zUgf`T9Sv-q?Ei6Q3=ng^Kbe8Q6U-siTVF8L;mCE-+Cn@0TUA^8^ix4OkQ<*cq6Yov3p;4F{j5> znHaAn8;@yK4n=vX&k+J{di#|k*0Ng2iqB(Qk(SxB*&$C;o3 zS_nUoSTr;e>ekbfkXpnK)7nU;v;5*ciH7;J^W1%N^1$cEn>E)q(RQ)vb&K3PP^8+ozaol4W{6TCD3N!@e*E9ZRs!#nmQX6q^0I; zqs3R`FfCGPz%MYjku|ZN@@-`CodBSmBe;DkXRKj1euTjvawl-2dQqeKpzQ_XwtH@I^f$97n$i&$<$rod7P z3zHxnuhhh4EB-yPQDM2kojdt0yIF-5ogbK)+pLBR0gxCmqT1j7IHKL8%Uvv{1@c7u zH-K|SI7Q!jg9XxV#4Dm=S^#KQd7P{i}q&eKlM7Khqu_x3aGu3J8zt{k9~Y-b?=EHEgJ zv2ehf1X7Ggz6^9vNd$XNx7UQ7rm8bGHA^vjqnZ$lscuyHBlOKf$uCjuq#}b^T}C;@ z=yAyjie`vt_tWm$x4J1nP~yp_jGr1`@Y>;UOCclgI~g6Cl`8p4O zO>YV(IHfQ(TY6e3dk%wi3w{rzA`VHcLJq1sty8iw=DZxsnTl7>Z4Foc0GSMTd+Nv~ zQ4A@(1_lEf+7ifN;>?s-31?rJHz4}QzC@xRKmQ^NIG>%+$Fo)%B}xR$NGd(+wZz3KwJiMRF5Kf`b3?(s>T zS6P3F*|V#I1*?<_M_rw>Dd74$m1VkY>*4a&eU0P?TwcJW>K)k_x2ROC#G&-=WZmKxlP;y!{YTo+oOk7}Ztje@boq%rt4cL!EJbxOuN zM2^CgDMcydG3E1Ba}!Y#Eo7TWx@g;RTS6OL4L1 zw9#k_`v;2R&yO$;tiR_yz9Y`l^YYXT$7)p_fDY9) ztyQsv6E<)%q}ezE&s>e@PMr#M3~P&ykk*3W3jf@`Ur1V|K5{Iv1n9cFLNDN2K%T|i z(OuG~^g32DA?;l(@nebpU8g|d%ITXPJmUT;)+LtPPb;4fiXA*4;5o ztC`d|tB6^RV@+`FX|0;?9BSZS1!`Yzrd;LB?W!y?dY?oJfom0Uhhs9@s}a!hF2a>a9-WkR5Az-Ua2Y zN~pG0%R(ewP!Lv%Rx)YPF29r#LmhplY7`@fUn{qso1~(1h|NcvhpLiW61YSxb~9Fv z#ii4kEANI@wWy7?xbUj25TGx>Ne;0wp@?MFspTXRIPm9+)sDHZXDkq3_AH7)&_`1b z(flDys~tO;;R=+U+Y2}i5O6InGoU*o&52tmWUpt4y@FyBoz4lRdo;`W(OI>(JwTIJ zWYE~tonWJ*8l8go{YuUioq5ugIsNbqAxnvYt;x43r6+lfBTI2rl^2+27KC9emuN?b zh3T3~9+-_EUXq%^9_i9s;xAS*&|9AJOq-o>Wn7sFxMTNr zp5xLCZg%1Qq&c-4Y_>#S@d0rHT@r0X(T~oTgLnckM_Sl}cS(e)A|qk8udC8#E&*X! zN<*^F#*;)6yhG|SP(d>Px)fN(%EtTFZ9Z%U8GEkqB#2+Tu36V{^xg)I}IzE<(Q%{Nny?N zdf3`^opOi&0P{!V?mQ_arLAs-<^}!o^CS+}#(<0A%-V7T{t}Fjt7|BQa4CJx3Q8XP zL>Y7LGkj4w6k}J}2+j-ns69!ecYHYnpL;)8oR3ijWC?KJSU!n;mJGA0PD@ zqqGpbkCi$n`go6#5>xFgMLx5!9yob4rr;ZK8NIQSOA3YL8mzv_UyTxDPzK{FAQn05 z#G7Ez#tJ;JBxhX=H;L?E2LV6>(?jN@tYrLgQ zCDTNX$l7F0BaV>oCDX>R$Wol#**N1ql>!ejFw~qp792ZTHdZ3uBSn2=yV>v$)}t(? zU{Zjj0Q5>jmiLu<6`)uOACcX%?qs0D*T6&CX%>akf-y=ng<$rWaDMNyt3nu3st~2H zKun``9e>`PcE)a{9#ck(S$vhY5r!~MVMl`n_9<>#X|6!!5D!!b&1@9~H8m|VbjCBu z(qAqOGv=OuJT=P7D=?oHA^?h_2ql^S#<2$j| zwtuBhR#>*KAqRk9s6!T}ZRNK~R3Az=u6w8_tG2MzR3gd%MDv04_{VZ7fuWR5SvDARs1q_oz1194g(yrQO#MYN>pHC#3fa^UoYu1E$Gg;@F#z(H31@#VE(14jX`JSWm zL1MA`J=Ff$F%*lZ0Z4Ot?!B`ryrn1Ud{AKw%N=hFkWAu9+wr{hp~1N;b^S@?o_ zy+VQE+@VGr#Ym~&xVQ>@OW^mISYo9q9f?wDG`)Qv2sCyB{u;kvLvDsE`gn%G)Xl*jGfS$dGM8k6`d~nvSKe%buc=cDZ*8q9AHZZ(^C!OA9*0 zb8x1_)JM}7N7p(2u^wxhV07r3Sj^H1(Un_CSK?vBO(T0ivGeLu7g{+&pf??dnkNY)sUqf-0w^ zNXHM}KBT|~aYr53+1c)!!dk z18J%%4!65$!cwX#jOv2pLO>z5I!$2Vih14vzpGkTFZ*RhMTNM~Zyb~UE-SewB80q~ zNBN*&4f$ggoTN1rwR?$Eizu}-;;+$!Km5R4)e#f*O;w{pAB!1%a_`30b@k0_1^HK$MYmZkAa z=~6W~Nt9S)4dtZF2@_dlfm~C+h+gc+3oUu8D#}#y3%S?vqeSIJgGxs#AS=}qWNXN3 zw>u+YHcPAfU~|b@)R5&H+C9>j5IH{zpoKQd&+O=0KL3z>2AO)d(NGf)yHSufQvz=? zcrEl|V1hCoQcE-(?!kqePxgKO>OG_d971A3NsfJF$w8v=4{&yFU9Nz$DvEe*ZUooL z3yH{lh}{MGD@+7uu9h)|mNRUd$N(~Qv+u6o#2+nNAffJ;NbRtk+G=HUSqZHf*2F3w z$?jFI3Db9dC@yOAH)P7yq@vp&POq-DU9~VPCJ%o8vX3u0`OKj2`kDP=Z}gU9Zk~h! zqXxE`foJJ%bbWspu36YsvvYvrM$e1l3T0B3bG2Bn6RXnMYhQm7cy##qKD|3Flk)H{ z&|aanNoqOwa_O3v^C;27zvXc9@eqt*zI>R#nvVA&OAxaYvZxRNT+%5RtgVh&B&({9 zD*A{R$c~3VyBc4+aVejE$(-bDDXZ_O?}=9p$d?TMcZx@cF(*QtO$C%q0(Di-Kz`t^Ng&V1Es0&+3}O7r-$^1eR6goyX2uE+Vyz7Hv-=U1z%V)qnwTCIt@-)wQI zw8qTSb-?beRYgYqq>kD#8NVs?pd1CUw(>ivta6tp-^o&Nxt5R5`r%_R&z=b{B@K>t zsam6Ir;bDUevSo_O03qG+D}uFJV-QHbP}Kbd-hM)u69w*u@4f9Oae6W;c{O95a`_G zSzm%8l5B0bu#8H*q-($>XJSP#F=`tmlZ65!8X69HRxG6FyEtpt*v3UsN9UK`xoquy zU#dR_k}>+dw5RlGb-XW~dFAJL#x7H^lQ1 z^k@b72js=&JhjcJJSVOuKuGwiDojh<{Sfu_VryrML0lr$+z}6{@`=S%KSQei$x^+RGVI5yzF2jBnUWc!z^|W0r0qS#{#fAVOS=n8IT63Xh zqHWY99h-sT$jmZF%CX%Mh~+ur5OpMW=J;v1J09wdWG1#ZN`avnWY&QNPTSq$5Og`7 z=AxF5=so_OdXjyoLyhV>(1_%ngPFTOH`zxvo6Jw|&EQ-?XDy$L=AmN8%5h+b`R=V1GbZKbbLXs%Jm# z%Z^8&m96b4hNc}#R@tI(XQcd#y-=)z<}#y`)YD2b$f*}Lqq@-^giL%*8@!S{g67Y* zOCO;&WPOgW#-Ag#H`%@L82EEH%{+R27QI#8G^Z6`B974$^^dxDeJ4KK@68@Y#z(Ge zCiSWGk9?2lmNT$37Z1q1V+mHST+d`J76+ zglM4hxoxFs7o&D(ug12ZW3gI6I190ihbHUm8%#9mJCF|b%eNyJs>;e1Gn1KmE_Srbd%^CHa_(>$i`y4B!s+(gnz0UrxYN4)SswS_a2>QT;5IM4 z;_uir^ijwRr<3| zroRu~{Hc>^#j7Nz6ms~yUG#{X#T1(~UE!gO+_&xr4J-%<*%-23$oJVf#gxxDslaK$< zGa|wf+VV5X_xwd#Qxvqdw2Wp9GqzxNTX5=Z8qujZ$#E=GK{@PJjy5W3p0|ixNsFu?ZhL%nhmIR)mmyut~?@Rxx^WLA}^GOcR4y9*A#_3v%9OVl#wMgRa9KI zdRFSLby#FEI9J{DgYV`{9LMwD)&Y&j?+{|9W*N;oJBQU};*O zhJq=PEK(ZH&{awtK)3}F&_{7=hQ2+KKXU5Y-+k(h7^ZWY;^bx zeFN-O&Z@081+Q726oc|z-%w1IpOpwtd9tFWT~70vB)#-JU)$Sag29q86>71(ANg46 zg2x2G#CncYFDrWyKOZUP?-qgYb{pm8(K?y0NgRLF@=Dt+6`(LAv^qE7HN!87Dzc_Qwr_Gq27i*_qJTYE2czjdg2fqD%$aorIIEM$5VM`dx1726WkUXM$)OK*y0 z@o|3}Uop^9VK6fbu71R!R}gnZgOkB=gCGygEnu@4OYlXoz@^S5%B4cJmMpYTOVx&} zlgbcjx!3?{#Ni%wIyXKJnXxH)uIK`Sxrvg4yQYz9D1W(LUmU4ZOG|wY-V9=?t?vY^C`= zkgEI51&EDYVOk*>7!C*`XB5(HCOu<*$ z-q$D=1; zaIiU;6_HeuQ-0w4qq3z=J|r$g%x5D&W9AMu&UUCR=gr64RGZ1vs`FAi-fTM^vn}gQ zikpY)avzTGI`9o6k6+))zRa&-nsvq+4fQsT#c@o-=*dGD6OT-N7ZVQcsmACchu4^o zo<7S)9LTPwst%y>@V|X`AN&DEMnUZ3DMLJ)1`&&1u7B1htthyi zAAvv7GRx-Yy?+{5TlDpnVAi%`7Sp4Sp^10SQWkF_6lYeuggR$-L@ZItA~lBreexAK z4{reWCW8T;7s4G(+PnJA1I%T=cL5H!tz7c}eux0{C~TfO={m?(gMV2cVOsNywr<_& zZCfuR(_S0@+JcZA9@%^9n7@}1aU#s+`XU>{*U43T@xiU9Rrgked&S=qnA)S`^Ia54 znJ`g8+j(?Mn-^qgHoN*-pub&zsB#&mozvxbHagVd_q_bm>oKtb|2xigWRy&`Q@LkB62e${ z%4%p+t@%l(FB?%J2h?T8%_g_-RJ&xHMAa?s_kCuMk$zt|m6N6Eq}Z5Ucx>{F&i((JXkm^ zIFp=6T-iU?>kVf$m<^;7#9YKvb0=olHk^V+vx@?@r0iHNX?WlZ?ik`&x&AWL8ZzBU zekN~J8lr0RsClYySw|~zQ*YQ2>?t=WuHjuuHQs?o!I4>M+zmIV*U2~an^|`P&%}8- zhd+fpggD9kl0S>LVP^@S^5amX1$=%uDsgothFLJdncjjhU3F>*9}*-NR~72+g$ zBTK!M;Rc{pJwQp8q^i^#R3Fsxs!&Pa4sQbK5S3C2>Kw#hY#WP_JdhwV`zt!x$=*0zs1L|2!_%`aTU`2JC=9=TWV~-@8mf; z3W14|;}c(FM)`L-EO)C=m$_mNF$nZ)&lN8Dc~*;%t4JZwzT8uu0zR#7x*VqTQ{A%? zZKS7o{8~7;UZd!lt<`W}#Mo*NlS8!hJwHc!&ezc^((jIY>D$q)i3+L}+3EDRwK**x zH;Xr_&)W%Eg04Ht{Q6|&hgPOnyWWpAC%jy{Tg!a5^8M92npvtlJ&lY+&5U2=6JDBi ze|npsOVq07FJ~eTEt=7<wM;{(t z?zwnPM25ev=kiKEe&41rA9fFXosn!AAjHhY z_|Nf|fgzv>qNe}x6-3D{#P>H438dWoZNA`|yzyPjgi>9$O_vR_G4#}) zF__`pA37$m(Vgrk>c&9}3o=LoxrTfbkf=C1E7P`=BKkR)60*$w!~WQ`cW!$hxQEL- z=W*1wA359OOUH9TVtHj3{Nq35gnjlFN>VRs0f)lcRS;a&A@IlwwB zyIj%5eTZFU;pt&Uh)W;w=BnSVYkZvx5bqvI1IVoif6PvZCTdf2PTa>Thy@dn5z!(k z(&cv{m;oEKn97iyrFo0ej)DjdwelXfPx)xvb*MavRB#dig@5L;rm zx85y!(2Zxi<>mrDm|eFg9Iwkj?c-zR@#cGL3A*t?n{Eo`b)}U;!x`<}Rw33XpemNc z39(RDxLf)`#dA&y4!}kMR4CNs2r7Jj^XY+p6v^h(vdcGuGL`-r1N_DD~$+MSKZ{ z-^*hHA`nFXRxLP?eQ;zz$sUMIhAOVxJKL30`8z*e_zD zO>n#3q*^q-KgtRKu(xz$y`JZJ*hPg@Z;^dWOpuKgs1&V@W|Mlao+TAv9ITC;`h zK_>%TWxC+D3DlUv%f>zr2M>KleNevT1|B)d4EXyQV9^F_ZV{q~E9|lO#3Pg>eI=gv zzM$SBUb&vD0NHw*W+Qn0Kqjt33XD-OMQs*?3rqrqQe!N*4d|QsA;=|xEeOd+>1T^Y zL#*P{#wrhU>|xObnV;?9KY=zlr1Mk3wSRe7ckQArN0^+{jF9U7}Si_snkQffkEaRBcO&2Ws_@?h)CUr=?&fM&)zk{-Gn$8ebH?U zyF#4|-oWNyeLvi;jPWfJxlp)Gaiq)dQhX*E8{tEZQPoF(B6@X4;2Dz@Gw@d!H(BFZ z8L&5Wtk$gB{b}mw+mm%jU!}WFSP$u8{*U;?r*Nw>vU@vxP%1+5tIlwahFGR3ynF~ zON1&cQwsT(~<@cH7-6A=k(A$F!98se~GHHJzHevx6qzIk(}CyBVVCC4p9zNsoq*%YuP zVUOFe_nN%%x?6jW9~m>~jLAji7yB02CdQAGAKRgXVl<(c5=@sTZiLElM#>VxKEvr$ zpJjD-TWE47o}Mjmj>RjgVWNhvM_QitT=lsuxwLrpdQK7uG9)BYfrkEr+8@|Rl%M6q2UIHsF1KoXp`(qPkKaPS)sr0gx@Z6BH-nDQ= zV$8teyOl|C-lxxPwP*A1-<;Zm5v*BPb)E1DP4_jBlA;y7#1T(oai=1_} zmRyiZE8fhAd`Tj5)&xLEirZKWblZq}#mPP>px*-z(kuS-{MPF6{{*cj)6>x;&lT9E zY=L?zOvDo&E{DUjQ^ZfOsxI?TJ+#(6ierYeJsu?T&^kA!oW}p0_Q0_-#Hf zJfF+F7L@)Xxk?>Y>gCx-do8-QMMzVkcxgvyoB-iigYr_lvbyu<`ln!bZ)c^a#!vsJ z``hR1YV;IuQ2wh`+#6$V-B*M&u(d&=SMineI>g zYnUFfuM2>l2+a%9H}GR-r~k(O=8mj0X!TOp9e!?!a?lLF47#OCzoogvYs#(qT&v5{ zGc5b5ULK+SHSaTux0BmnluynRpHG~wiTz42TWYIy*5?Wiq4hkpg_ErjA3&?NlsU2Jat0Zg|0-0X7^Bl zgTDx8&|v6zx<6BCtbM^fG9>Z*6Wd9Xw9T-x!{DXZ(9&IFV{DCmtcxaH6w{T;hD1~b zf^(aSFc_D9EIyafP@2YkOAbc!7%rcHJ8Z z5Ind$f#3{-ySpT~yK8WF3l`ipxJz(%cXtTx4uiuXd0u(mefB=*RDJ(^wTh|gUfs=F zclWHCnf_hZt@Ptb+qKG=(2VuGDIiNW_B9VyLKJ+Cy@!h|`2{u>Jm}EfO-q6+~>tX-V^f0gjLMD-30J09>vn^ox?E&&U4YOZbxr;V>mU>#D z6UxE#}-_RfFolv9V_1 zTGF>RXO1N|?>8?3nW8;2L9IY-_jOHLcy<)Jv7`W83)e>`KAklHZ&lHx+(G^UAZZyN z(nKe-ok6rRtaC64rv$mz;fL8uw~q6|dRusR)DC_it(2PhaXBkz3#&=%`n;c->1RAC zeD=6Pq*L01E#iV&x^ObRgW>%v<(nUd^_$t~f>M|@8xSDswLxvG;^lPgZh@pe13J|& z)H%EZKz-K}tWYfsLeqG^MD`^c8TNR!IrCXd?a~85Oo>OmEK2;Gx~ilBqKvPeX;Wh! z=RLoe@wGAXh6bhF4II|KRTHzHq>9+_{~7d>(xk8bvCl-lUVpf1LaRtNMu}zm^!GreB|gyv4M*b+JfBCM zizWGZwBJdI_kTr6NDk8zQH62E29aWrITEuNBv0?#h^F{5yXTI&ex=y-Mj&}QSUxS<>(ed7vXhFkON%(TKQCUbn+=CkQ2?lTCysS zKgoT2+fnlBTPt`ZA>tlzVaPa{kzb3DOJhgH=3&LarlqEGuV9U6h4&W8KGp&eqUTB? zV#Xz;7qO7~SDyJLe>msobBECvM^^;x>Jlr~?NNbH^V>Tz`Xf*nKprcmRNZjigWvg~ zdDrxuOv!g9vIga$YmdJ6!KU%wl21{Q(?dd(>P2=b=cbFpM7?9oIT8pZX0bzB?g#1d z-Ripnn^1CD#JQs1;V)7~wWl;61M1)|E04>L=?4V8VVV`Lyu-ba9{2>?@ScMi$DVn} zE?_414sIjQ&$?Y$A8xX=NdY`@v4pQ>$l8+kwDR-l z@n-PYofmawt%v$GODtq8VKsw=NzhioX@3`+)>6VIVD(DRJ5-y9f&mIV%|3l4Cn>UjVy5bM{Ias zp&^S6GxISFJPX;1$u45spSZYzxz}N@@`#_20M4`U1d0XJ{mCaF_uW1>i$s}6;YMSU zg{W>)dW>ct;Ye&f@u=e>UpTm_adw+55D}@YsdAy+Ea>O*h$9@WMIJoXt`tpxM-U0! z#`W3Y53W~S@a$`U>aJnZbf(3%BQ4~uS!7IsOd6K-venvX1pDZ)Ddi|N4JXpN%F z+FdJYtT(le*o9V{cG$w2j^N9*ep+)d z;Dt5?pV9BqN;y)PwupeSh={1|>ryA1GlnF>HcQw&Y>;{>ZLDUlR~@~^X}`pI-2lFf znmqj&U)Ta_Z*1*oHqeGME7(srN}bNF9HijMPxJKcarXrhZed4O&51jqSrSl~muuLk zuYC08Gc5=Dzp&qP&FIOHYisQb`7c=OqN33 zlM=F@6pfOa3^M!nzXCR2Bc%O3_cH~&p&lanSzxnYw_I*+xL>@A3PH)*-UygvPg<@}=_NVrX)iBUm+ zIio%R_x^K+GweI6v%&Ca%mV#Ut$jHOjPgjVD|yEj-*?IAw~>MjnYWh`o52)i9C9la zJcjglwbYuw<~dISvUXFysU5YTT)^G#G`zZ%ia0a6EM1KsZasBw*z12k13g_xc(g%b zKl@0Bon5uq#UZP#T-n+By+d~Q+TuHPWsM?+-^@Vkg~dV3pqBk?HvshUfBPU2hY!O4 zq`h$;q9e6>)UTL!$TRyf1Li4=`xXj7c&n-NM1BUX87S8R7ON3T>0+#Sb|sBO@t&e& zb|EQc7iUlBs7MgB@GhCPVH`*u^-C*6pWqS6J+!hnim2IcLV?5kCCQ)$mHejwUBa9c z!4!m99kVudq9l1m98F`cG>4F~VXS4;w4vJEpr5o+6tMP8fJkPU0q!0xChmA|Gcj)DNHVg)%}a~wOox5s1Mg&rth89 z>~_;@ml>XIcOt#}U25W+n*aDTsB!dSh%#d!eF2qbx@(X;2v1+(4t({?lFu5;@-oUVwkz0!N zR`TcX8FNf!;Nz0i`T!V=ZyC_3ns zw9%K6uWQ--mlex-9pM+E$tCk7U^Fu`3-SPCmC;l@m3LHr!NyP1ZqM5u%RG0#I?=wz z<8?(hD(tu9w z_MfMlHmgmJNAtEO-9d~^M{El$yKb5-ZH(TyPDg!8eLAVr#$1&_)e+0=%HG+7JEC- zT?hU#y0pKfP4?&%`ud_j=ZNhbMy>x9TrssxW4**Abgd-vP{}h^TeG|FXL`7+YQSuz zXkC)oE0`p%%Ghgy;ZJML`||6TYt@I4>(~Q*X=g!ad1pyyQA#(*FX_b=Q?&<8j;&2v zO*W+azpYxZYip==S5{u#E{eFv~Y4g$dv#|I=w@|rk z(YzuLSTO@bs>#atK{L3PYA{D#?});@P1`cKj=GLuU;F(6hQ}TpHyBH$o~s4?E_0uO zOT#LFC`UZqRZji`L1duWiet+H^r=n*qrhVh;@x^?FC+f{ErB5&F+uL-Cu1dd1$C$_FqzVj(?FED(aBPLo9V zK=7P{s<(<`oxol<7reP_W9+Y1?rdWR-IJ`~Q}IR5AWE-TRHJw_MHzl-HceXBD?Ke2 zX$bobp0rsrvUnv00+{YQMjhdsxw#t~gJDSWq}TlX86U#9J<>ItYUhpaePN#{6u!() zb^6#btX?k35XUBYSmK{XE_?OVw0|4-1W)dF?4w&;>}+zt6x?GVmQIEYaXQsT#I=tr;bBk0JqVx3$FdQX!Q8`S~ zxifB~pCfxP>_tXQ1cb2Mn+2Nm-QaH*7cJhi*WKxEwwTK21V5&#?*{(dyoL8}E>ZYz zX7HaP@waIKGPC|`{{HT(_?M3Qw-#L3$lk!t?5l%~-5(A1?0hk{|B`*v zv9Pie(*YS-iJ2IgS%?9QK#qT?za<>>EX@oAtW7M9h#CKM6R>Y$m_3Zu`25G&2lmSf4 ze+K%`_!9&Et$P=-esi`ovo;}SP%*O>u(mh*XT_g>DrSZbruKhC^g!V6PXF`q_6{cg zfBF0O2+YjCM`UCAy^2^_f7<}C{&^<+Zt?H`#?JmbjBjJJ{Auy8c7OHz=V*Vm|LgVl zRs2r}6WecZf&bIN^w#^2OTe4j-$u#W?6>jfn}5JtpTAEf;Geb$fAbCn{L9?nzkNpi zU9}H*TbJzrsoHmQcTt?3ylNCKg_C(R8^x)8EW0FsIJCzwqAL_qurB& z*h8-U?7nT!_0=`AzuKg%_E!B3YyfduR8)_Td?3pvKO_?Xm5<`h`sF<-kq%RlJ~}7d z(CRd^9;e7{Yf8r9Yq#wl8nJmk=#X6Bp*Y~GI5^Wj_fJjAeZWBURjGvtFXd2XTY434 zcIjP;P{CLk?f+nQZ@O2ZHa{y6#|3#JVOnCrRelH{8aEfx_+A9E+&{%RUw`1KsUVeX zk6;(#Q)mm(O%I&gU-tarHAc867n4l;RD_)zC-AbJ;}=8s^AbDfi*oe=)c^-9Yf#LB zxzk4uPtdse*sP}YYp(HFBW|(Csu!lIW?o5VoWO7iq{TNi{>OPnJLNlSkNB;w3*@offjohpf!R?^z@eh91G>6= zTMJPEQQvMg>A>FJK=MBJDNUy<><#@vMfV46UYzfP7#J8J1Dsd^wO%~2lfCatIvk)O zz@vthl?@?*%HnRV3&r2lLoU01si1vRjy?IK zYOA_Z==kjX20{xG{yV43n!wTv5bit)&N_;Ip-JjggT&1q^uc$`H^v~?A#!5GW zDMxV#llY2t@5XDLOoUAI(>w2UdY?Cm8_gtiEo&{B!YT%htAApdTw%b$(~M+9N5>yz zNYV0J;sdyfzP6goWSzsvk0x`hh1VE{HTx8NKB>Yok3>p$_f<-(Yo7`lejTd1!04~! zc6A-i$e#R&MyaS0ace;Ea(JPp9-?dr*fYeFv3;%E@NR8*4$^QY(!r&YCQQ{%0OsF6 z^U&SU!QT=#KJ>n}fR-6re?I2h9{6tPczaFvi6J{xc)j24->Q5iuvNw1Zv2Mbm@#wL zze%=IkNRMsn=&i^Syk22)=+~MsXv!??_IEYtqk^&E)nO;&M%Db>M->jaQNIZ=;{Pr zg1z*K^&OTH!(X9}2NOE)_#j`%9|PQ^3If;7^%5YeX<8SwM#4-ml&4BbfKqHgd#b!e z6ev=wgjy!u%$=_YeZdg2?sM;EI|uZf3%`>DZxSc2<~0SBWS3=IwMKHB*sl$8-D*F^ zTb<87+>W)*Cq#3&+ATv9aadgKrh!yukkUbqC>#@}LNMz{P+A`OWuP1qm=glEQYMJ$fkf#97Ah%7oR!NLLFfPloeBz;JZtm99!-`kQ^AU<&4kz6EvJibpl30of zLrBKfrHsmnL0cx&(ccCef2nzV|?erCv~(Yqn<(``r>q0y2$E_ zD!(2jxwR6hWTahKHjVL4MG^RW$Rc+IS92jfq3Y>i?$%DWJ?2d}{|YsR^!3vEF|CzM zb@uA@vXQiU_G@^{O%i#q)4PdWiP$d0AC#Zu?oa|2yIy^tA>UMd)1c{%XebsK}ORJ9Vdt}FGhjNqu50Nt>$O0pE#PAG5nPRTWInGGd zPdjkR!caw&8;^JQ;<8NnZyQ8Ptj9uPuV%9H+_eKE@%Pnfe_Z9KC(F`Lgv&Le6uam2f;D|8Wi zaeE*U_=QdMf%PPy7l6B&7y>=b%iSiqZ{fh<$p1j+7GYFnOZtI`pdxY|@f7kJaC@P% z`6Wt#H$~#a0c{oDrbX~>?0RvMK!)7zSU7{?s(&WI!5AN#6Y)VM;ebrkW7q=Jh@T5po8xk}6@G~nV_jRGa zkh4+;4vEITt~jc0$fxzoPDoX5(cL{OJW%3=U9z?(*n}~J@?m>p)u~<}WD47x0m^bl zuVo$pr-wj?I9`37b8=Hcl?)aw15UJdj5fL-ZVPJ=C->OySf}#g&|kDWsewtMO49m? z)vlHt%cG~d{>LmJTsC`TopC<&CKv6NABxG+7gX3(SmW>5vJFwnItUst*V-_SJfkx5 z_EeE*^mbGyY4%@nGKcWKoNo2sYv?yGl%=tFI^WHl>jbrb6N|pXMR6u^xgv4dIHSd4 z4c9ACWq3rRZ4cz5o(j-1)z2P z2aJImFR-KxnL;R$c_omfD0jCJ#v#@Omgjt04R>jb2Tg*PK2o`T_mZ=j(y@j4=Bj%o zInsvtr9OQ%+>XsXiDxv5VsZHxsOEwqNma2~+v3Z1vE#utbn^7hJMdL)JB+?c=K9Am zN^p+_991YP+x-{gB&XyzsgVs;?MS7Ax(>Vh!^(pFhP@5q^w+iX`QS5bFSonrJB*7G zy>=|h@nPKqBvn^7{jYpOLf?9XuBF_3wOK5mlWdIzd$^K=Oh0vNl^9JgO2=_n(hmv7 ziC6+8VU7%GKG#+8f~=f)9+8?uJl8)t>sdW6$}N(_Wmc1YYB!-=bUzjX0mMGo`TiU>a_ka2jZw=<4VC!!`b%{z~8~bJT>+Sc(QoQ-ij> zx~ELrutZ01HFC07CGej8h{cFTnsU8qW> z+<%59^OUJi(Co+88yc|8EJB-uM>U3YUVl&du&;<%Xkm0z&O}^ z2GfsEFACF2=eNvlu@M;U3ZRK*!L3(alLdkS-2MgHyd<4L%4*1ghCNl1bmOC(m5i9>5-zc@T93NBTw78T+wHII9`IrmeWMi%^yr|Lzz;<;%E9Y3#bb4j}0KIU$RnF7I@|0i$%@*d!x zToPZTx$e4tlM0ppEH%@W+x6Y#IRadkM`DIaT3y$!*}`7g5Q5)@Fzb1=V|Fk1w~hk#%fkCgQwd#NN@B`p>&tfHX(}xoAYG^fbdo@!`|}+ z#iT#wj6@2aH}Pp7xU+}{BGVaK&APte=|PU*v{%n5y%A1DK&!#~0*kMSNuW@bUNK2z zPshI>&*RN@U+~%A_FO}4Hwc^%Wbq9yj7i6DG1!--I~H?rZLDK$y^=%i$L7C=7WFq4 zz!roovYXUqjfkmzb1r3EYf1doG7}X0g=sh_xUW)CSuQ;dG?-5)dBznL+?jCFw_E8~Uw5UdGIakfj12o5W|w*!l7|{sHz@hwFJ>ii3a*zk2?KYOpvw z2HqF?{=Vt->cF6X2&{_v*Y~bIGf{Va*Tr3datj_OjCZFw%6D~S+<6dVw=UZ!t1Q@A zvdq_ScP^}vC#w<;fzehuMkdeXpdC~FS@K~_iryj8^xKx0#EWTCj)oMy$J9xqS|^5r zL&BpsiZkW*=vD1*W0;URBQDN`)s>%=I_!Ne{Lg4ysrSFWYF%_G09gXoT6#$aJNmb+ zru=BgfR(elIT^DbQ0WO}XBwoig-E;-HL=xL1&i!xdo5Tuy$`Z_L%~?trLCq;qH$pH zWkD`4L|lk{;{)2z_dk~hQm(1mq?Q#J%yjg%%@sRz^8(lyRPiGybVw}(e};;tGS^b! zhBzVgJ#wVMZFhs_lv%&_h$4mOq8-|0)&f{>b`xMW~K@eO$5cB)4x9eSK$Lv z&muN=xrH&59;EY*<^(nYBwo=aZ)m?UXZ01e=@@YBfnXNK?!$zFPlON0pnhPRw2;UX zoiYT`I;ehx!`7s4jG@9Sw*19Hp_aRtVLL6eR7UR4WR$E7~*+F<2E<{W6`-co%!}n+^d^qhH*mR zL92<6n_m^hNixVf3Gn~T*5AFjC+2(!TSxiOFo*Qu7ZBva=U_z7t0kbtQP zhY0H;C>@|g=xC;DZpOs9P4L1;T@@B*xCVrdTq?-0sfxzLy%WCKNn};gG-Z|OfSh$# z)AuLNh*-GZFVTERc|#~9gV*MZL{WMa49VpHoN|dDI{PxpZyg;6c)rW5=lKHQ5m;sp zE&~8r9_7M225lvft8p>#z=QR3EhcimOuCMl6`I7H+uGvjO59FkJ$s>r!eVO(rNj-j z3daG&sT5T?8aoVeF$dlURBPddJdLQT1V;x8JNKi@K8lvi0hwxt6r!m?j0p2D>7Bwh zXmJ3K5NrBmDp+0~-m)AGLZO5~1##z1SXg_+vw=xXfl;&|xLe$|fUOT-(or2nc1Q~7 zHvK7?vXj3!+M!3U2FVn~IcTADLMxw`$C|GkB4Me2?UG)EGsp_ik5Qq{ZoimK zU$k`cKA(bxbo_ z>lC@NoYKCkhkkEr7ttxU`lpt?u!ueD8XdEAsmo0Ik$t`EYL_7YngLlI%crM$5RKTK zjyC3%VFH77zTE{A6h?N|9abJS1=HZew=pg3LS)ysuMG95A(_7j5r$s-$d5N8H+o)B z)pT1{?}v24WpcW7WUwG z?`?KK&59zx=Q6MLA)MI)Q}7UP;rW2@0O_CAHjIEvL$Jk13su$P@ygJ%{G^9V=S`16 zY0yY7bg5k0=9MeYLiGg)TjP{ZEs=IDyB)H@MJg?KO1Q#zYWT_I&{CJtmM#w{YQ03c zMo!Q{MXXKqiT>iuQ?do@-loUinfl$Vz*@hXP0yu(`KW=q@0Va}_CC zLiCct_ntQB^$JM)^tP!2-ViA;4+iJ(0%sx`Q>|ntM1GR@$f9@7IqC3j^Y2^HJh1i& z`YMX8FP@`8##Mv+^|k@0XsuO(^{wR}>@YsVekff1zI5_+^~4l~5p6z2nLAsA(k6k@(D)`4!(kW-n5WvvFr%-I z{Iq!3O25{hjcBOUph-=a-peF5tp?S&6H_VKHN#xOp`xpo98C#hdBS&4;Wc10f=|5v zEUZ%6(B&ztDQi)NE^cqLwcNvMlqykVX_zbr%U7#E-%ONB)KB<2PI9UlB?JesV6w72bsE0YOo7?1NUA3BmFs9;ww~KhHlE$-3!j9KJHH z27=Tl1EuKRZ`*^Y$XiqrEQdq}k`1wh8_Gj;4y=0O=i4^>FmxH(6D@5GWQmWm52H%~ zSc7-Ro>4s6<@*lHfpKikJtOeN#7xAv2twTMYk=iCw$m^+W?@m;6-=lP6A)N`mf`so zq);6>uDoPYk=kliS4bF+jM(E5@8yr_`q7h?m3mw!U7IbQD8T5X!yTLw+;61=!$-Y? z)29m=qB(k%8m!g_lb@?2fG~1^2mY8aTH-}ph{8gCj3FAnbYo*7?t;$IKB|8S+#MXk zfDhrmJIE>9Y2w#WM*)J@@V6IU|1)UbbunyD!&6mmzf~V~ey%JS-Rv!Wl*?064&F+< z2}t($pL_JRDo4D7E&B>eKDVTJdB3(vB>|rm^0v^MB8Q8w6 z5ic7&t{6N9_k*JQog(||)(jp~#6ZLSb(I&EkOkr+r;O*ckcsc)SL$?{tio36% z`ap~$vNzE5%#~95po^S?h=aIm_Qxb#0BYE5xa}6X{s+v+*%@Die)D|)w6NJ@@Ozcg zUDjK)V|!z6x&@P}P3ILyj$<@dh3FIS@QKI;X-+UVXa|n{XT|Q8EWVIgP0E`yp;w}; zX9Mb=lF#l%v-|alqs(`=;n$B}N=wnIUl^60Sd5>+<8i9jaA@3NR+jaR*nC!SX*3{z za_z=Lmxs=VJI)(b?kJArS!202));~Y!hwvJxDy8&^W;g2Wb3`6q-*VwV)?AVkfhd6Q(6j$phb3}2aJqn&r>_6G zfU>fUX5vYX73kFQJf(L~p7iLlNPIQ(0wrG;XT9FM3@;!d~D&Gud^BE|cz+OiM6u|61r{Al>k58Yvo1tajvARuQ z_yNY8QH^+!M`Za|1_CHofYtt&kGtkY7IPk|0Y3XSVHl1SbJAs@`({_*tk|9K&q^6z zreRU3f*rVF&0)o17pX>(T6EP*y2Ux^lGPMrnOcgs&7W$eDmxmrYM8A82wqpxVbJk3PG#`1!Pj?=00!Z5OTt>wW1e|W={vKOq6M&wqQ#asFq;l};lt(sTM3*0HG zV(-W=BG@&Od}Bh-2~meAjq?6DrSBYyg?f|ca}KUV?h+V=1Pir3WYChO5aNY8y5%tg zwd5zBZez)hJ(IwosmmVK-XsWvT1f~NZSmed)!vrR#UzZV{&_mws?=2u29?)}OwhxL zlF!-vu(9(={li^-+~J-@3Mmr;jN$uVX&gLW(^Z_G zUxS(O_FW9j5}$CHvZ0#6Q9S2&F=X#Ui$M&Y2HTH=G2$lka1s|WprEvIzxgPLrbNhNyA?KqaH_@x44j^0=8 zC~Q&}&vxa;94ggmM=u@EeVU_Jhidi~h3k?x8$lmoIXe_$s^~~vD$2%dZ>52t0maBG z^?8)Q^C!uRz#GLf?RxOs!j|$D+0aUfyiYP-liZ|s+FY|+oLz+YD2ttA6NiIhW50&_ z;4|0O)*@O_t(LYS*BS=R7}@l%+;-WHWG>ySa9b$~VMrtNw!9NRBR~}|)jHX@n>~6N zrPqx$mpiO_<%w8a)Wy{utC-iS+gO>Mc;yL}oGZsEAFHgSEFaN3o~f|ns5FqESMn*@ zw**y`EGkzw8{3R_;wt#1-z!dDkgjRhl$&Zyo@Td-z=Vy+SCTt?`dnSVe;c(m_d z0K;(?mkd=hyHr~?5{rr11qgX*;(&u)k}KFNswr;JW^riELA^ zM_8bkyqo-kd;pJ#Op!EfZcTpD3Z|&41_S?t=`@8(hc$q$Ng)Pr)sL+ywlu=}psms- zwt_@aMOcfS2$;4rOa-3>-Uqo0DSb`U!2tR4?hc0k$C0lMWfOI5T2dknG@zjk2N751F{`po+&=kvA-$M)Z!+kjO-^1ge5*G2W( zV1r(dTkzk|KD+_YO1+pl3g0d=$od zABSLFaa<=cb%ph=PsiiH8$69lFxOC_;qwLk6@zxil&O; z9NQ;cla+yRaD46eyF~4d4C&Rdckb84{qOoX32Z@9iti!6&s7yeTPZD3wVTKI+A`f9 zrF}h2yC^mD@s46IXz1EddjyX}0K3ze!7jtwICnf6R%s77_eX1b=T}Q-${cq}-(8aS z!G$%GQ>IDgD8$kmCDVex5U7&(affA0fI56CVgOg5Ah2)342Sbst{r_|ccwm^qbYk| zGRz{ih~9zzT5$lK6D{PS$s#d3MAK-zes($G3i~Zn=oG%IzpGD~5he1;U7mODT!U{C@*s{>^**|A&M5155k| zJ@NOP2mccZBP1dGJ6gX_{{{E_n}+#62I{S!f~)--kt1PkZ1X$9zYz_2BNMZ?Rr>}J z3B0X)qd(}-Zy-a?&d|v2H~#WT!tf3GF>`SJ*C_?ZuU{>VtbT()e<+`SBy#xA86*b$ zo@4pHU>RZ!#y3=k?F}(uW@diNrosLPh+%$9J;B2GmU=?#Z%H5i{+ciA^qZ9VFOLVN ze`neF?@+wIV=nCM%>RXQQM2$+oUPSyKLbWeGYuLJ7*JFs4-UGcq7wSPqZka}<|jP^ z17aIN1O#J|WAh6HeiH%s5Z5KZDZQCmiENW+QT$M9$&SaIq3%^~oK-I^OPX>MSQgw} zdF22So3%dQpLjKzjJqAz&Uux!f_UA>NkoM)56J~i18LNk*PpwcZ77)5WPA4LG@F;6 z6+JXiqwmq9&6YPoA8FLv)^X(w;X8Ntq!KDLJT?c13<@{QNV`Mwtjfa1%Bu;&L;O<|PS5V58Z33$O@*6q+>)uHybhCEqs$12yXtG^%HJTeQiN+D`bM4HFK^ zDRM@DzWiCW%KZ!R&MI)ON0VwfCL=>J-s&66XQF2C7a9U?K(Vo|qFFXi?N3W#H=?}4 z_8Y8%z3_~7fM;*Wj&Hha1`a}6t1jzPTzVdMsFAY%aZon^kkC-0 z4Z7`C&)k3ShAxF~cXftZVrNn2@iG20b*@@v9@j}<$P{8?d3HDqN?h;vxjB|i1!JnOvZfp*L~}x< z{XMD;l2&c+(R0R?S(-B%w-O4{`jXf+^bdcw&7FBAId?CeS3IWjsF|6mS)4v~XR6Sr zD_1^+AhK~vCn#zxB3rxFTWDJJAD$YU(N@fvD@VyD2oE-w>-cv`EXOtD0R z#-hlPjc}UQAG~~tKc;9B3S3OyX2u3i0jH~{v<_kbd=2oe!9;}dGRGZ<%SDqIp9SB!9TIIiOzlYk`Kkej}rGw zANbin7pLkY&rA;-JeZ`upUH%yAfcMgi?^Ho8b(*esU#G=hUi&i4Wsr`207x1`)O#{ z%AgiZLZ)+^88^m57+FqMR*;v)Xhz(<@osC?DpI=5dPkukra zkmcK1R|2T`*t(OgvsRp!qa5e&47bO{Dbp7e)n*pIA)6^B(ZT5cm;1mwW8&+a-Xr4)_pwECn$H& z8%hLCu}YU3Yk8W6u7YcCe9Hx^bwisC~~kgh8%up2kFSD{kA_>S#7G=lEV0K zFSRI&!5cF{%Ff?{X^{7jC~A}>-N&PqiZerwHM)QVC;4vnkIHeHsp z?~_;-hItfjq?ndlZ)V_;FNX}lHqA!GeB*jj_@I-F;P1SXuH!t`B|L$0bIJuZG%LGy z&!ENm7v&7DxmbPYrFx>*Nk|x6%kSvg*>tv{E~-%=PzYIw9MmW&9{EL0v?6O*?a$>! z=(@1>q49>R6{Azz(*mBw;^I~;Q=-&C!HIQ@S!DmV%i;t9T z`2~yDI>YS^H-aUywxF9=zE?5iIa-P4PXx?Tv>j=&4_@fJ2sYpLyZwuY)_ra5(Mjci zQ}qrjBl*Ig=&}`R{0MVxgjhpcW#5ttq7w6o_@Tf@MG|H&@2fCtJk#V7x}}X7j2GtS znJ1y5jOsaI@ro`RS1{ZwjxlO1zfX`F}iX=SGeJO%Qp; z3g6}?()R@@c_b;-qEs%hW*;XDz#b~2GYWJVD}?309W$fNt!J&yh%rpyU0XbS10;07 zsZzS9rZY|asyYYUa60-n#o(G!%M{3(0@dhCcCLE3ZTVY(caP^V=9q`p`LzyQs{&l6 zl(KSXZ%!9H6b*rFSBslqc?uY#IZ)@jLi^LP4ryy9#;hq323}4K?kN@VJ-+~@^dT`D zof1vAM7ccY2gnD+1UYO6iG^1c=S8}*yGGS&@J_y?$KW6tkPwL3Jt%z(`o)5zXLYJ% zs`1=xHk&t_H^gb03X)5V#5mutyx$`uSB|lbRC&aFL1Se&3@UaLx_jfxp|E4lL+At2 zU>x!?b#Z@E!Gz|u8^NlO*uGL6kHp&+=03cO1S5QPHCDU55Yg|D7YI2(q$cz4s97)tsD?DQOYs~bfd7#ph_LWib~p>56Pdzq8s zTOVYqslGL_b*4s6DHrdrxD-GA`->n1#&E#2rv@j`IAUKwFxsh;6BG4;% zBO}H&H$^iL_+0M=+d}wykgp7$nE7bLM^M45Bv(iXQGbHVSzLn94^ zNJ3LGK~%gtH)3iWp{sJ>yizZ6BWZ)Bn^H9OB50p*(&OZXO!ho6*SsnXH0eO!L-|B^ zYT$e!bu7jm+Zr&()aw99pTD?Z&m$6utH>gsCd}#I-;gi_2G(%iIlF`;(d>kE084)fSGOweo zRfeT2Qc0=!ZAs*MJMahS$og~ZhEBX`R{Uw@S!Jd0^|1m@akA$yW(XE&44O_zm|vY- zeH_CiW=82H`t!Cl1!WjIQ;imQp1wu(SBZ`E4PAfZ7M6j+ae0#(iXQvSE0DGioNf=B z;Vjd=^mq+enBmrjAgv7$BI(4L_kMCIC2E#PubPsE&LmO5jlg+LDn^NDu)$4~Ji}u( zYjM%g{On&$$-Vx8h*#)nBVA%)wN9T-CfivJt~q2hN^y<6=n#Kt99hz2MiH~0`&tTv zhW3f}stSL0RJo|i5}NdhVk_2vJ-SXZHIHQ~-Gxo7tK600BwK8s?}GInd`;v2eCy`i z7#@^i_szzwZ-T=`yVUI&JCYxv)YJ)J%QXf_LZR>yh6v$W?X4pB4MCb5WnZ$SO*5K zAWCj6TB7~fJ7X0Bg$FMy5x?B5X3jE=ld;5Do*KItDobT%=jp#0 zcT`LGiM0NQV>FYeXx0zj)h*ZrbedA@A1(YOu6{AUW@QRxZA1ZcR1|MoMi%d?J| z8jEaXU(4olHgrEYX3>sYAvm&RA6R|WpQdF~-%9ld53~}EwYDN(DkR;qh{a=;*f*|6 zC6kLvbXvvln#pyfVzy5&prjjJFYw|wLp&|t^*R1xKDDE3;VJ5j>Nu+DJaFL56>KgU z+H4hq((lwyDV)rHR4cu#lsJ;I|?q`%qrxqx;L4&DvIvOx%)aqJ^2&H4D^7F@x+_S(uRC>*hpBhZ;&0baPa}D0@M;=5z(AG@k56gO_r^UcQlnEBbY4^2!tt>&+D4tcg3AN*B^`bg9{ zWcCvl6L40&>Wt=E_%jg`H|R!v3GuBD1=0LgIVPYUR)oE@hFFRyW|*w$gk%tW*ZgyG zj5F8vC=X|9W9TQY;N5W!n65BzaspeqNvlP0ho>7B7^={WoI4_)%V76 zLs3*CLMa-FQqgR8FhYe9QPfnDC1f{-F%*%lqQX?jmgP%HvXv&X)i+tD6*I`FY{_VB z$=)}8?+pED)VJ5~{xPrDJolV)&wZZr+&|9y^?A-^BZk;Y-}`RjtJPOi_cr{5gkl$9CS7o(C;UR(WGYnTWr7|W}1MQ99E|2IOkoUWAp{L4AQ(XleFmV~>_+gTX_6*1KNkK2> z7R#1CH8#a+8=ef33?7JR=(lx!ed@?=!m{CrR|0qVqVD$hC#Vrlq`rz6?R}B5^{QqV z%(D?&Wi{fm-H$3&&b(xmEaZ^o4gGK$)+R71YgrK%ZxwqBZhk1Hr8WApSZvU3YIs_F zXmp&&`1K{pTR)COkju^1iWQoU?vfc4fB9I0yu-SNPA)TTc4th+VjmsoaV1wMK65P| zk?w2o3^`wAgb;C5iHnz0WRpvr(k$wnYhB6N#rtj@e5#vl1$`)Rf2og89WCATwRM=k zCTrsd0BedKW0XE~X}yvPmC-+)SSA~grJwq#W25msfdc4Ig-QanY~_&PPS!OehJ2%3 z<3;nBp^O#U=rdwZDELska`s=hLkJQD))OO$spH)`d$lH>g(U{W%f1!jQ|u7%xkTC` zFae=MJQQ|C}x?gRz3TO}S*?{Efb1Dm}+=c?^0)s<{xMt2W4R}WPdN6KW1 zrpeUNpyR9imQoE0=x%!RQ(@ACYW^a-?_T!{#D(qG;i>tb}) z;RMdff?0c(c}!34Eq)ILvZ%x&Tt&(@>j+7OPoMRHekn+mZ%_ao)>FA=(gUX@7*83V zEQvKO(tw&k_;qV~dXf%an;KT!5W4(8o}k0L*kXWX1=K(9 ziOb*CW>%5$&)wnB?(Nr-qJ|FN5QR=E$6O70M^ACucZb?B^=9|sF{sS?y3e`TF}7M` zYLl&It8GAT)l{-1yU08zSdz_F5f$%*?fQ+HEb?Y z-o(_Ed}`lfxSe$>Buf92+Oe7hH+M>`?V0p|WpKO21^-m0lv=L$^;2l-DygBn3bw4G zy%Uw|0y@0%kgvs#cub(Jqo>rnc(Zfv}3T}MCJX6<${Z$GS+sxXce*{3P!%YU%Xn8Dcb_g@jCn9)Q=g5kL$g9`~~bkdUU3Wd}v z`HSq6co}S!>5~4km$^8DvU=@{9X5S??uc~VH z-$AnYs$jr2$Q<^d=L8Mo9Zc5TMz}Z>EKQ*g$On{#P@J;{yX*k5Wg|zizIv5L#_qj2 z&@;~Z?zQZ%wHYhlMZHawdH9{Ca*5K|M*_s|K5yv1cm9p{5nt&~rJ5;QF^5Ww8%>fF zbO_g2n7!$k4YpkmtE)#KzT~x(-q66iv?*!KLu+TRNYz$F|EijjJ5Y88t&e>2onJpv z>grl1pPW6Ld2>ZSyn7%6>x1=s{ai%ZtQen>ODONV|MqY`gEl%aKx2PDl%Lbgi0+

ktCrX*siF0m5M1mhh;5}yPT{nDG7 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 literal 0 HcmV?d00001 diff --git a/experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModelShortNames.pdf b/experiments/saved_results/clients/ra/sifis-home_phase_1/learnedModelShortNames.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e0f6543ffc8119f2029ca9aea3cd6c2a4c6138ce GIT binary patch literal 46756 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

v-D?L=yV61eYfq@qiPoM&F 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 literal 0 HcmV?d00001 diff --git a/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelShortNames.pdf b/experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelShortNames.pdf new file mode 100644 index 0000000000000000000000000000000000000000..dac7d031eed227d248f5a85a812fb5b6ad9d5759 GIT binary patch literal 43426 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%0DOYRuZi?>?zHs#~!!k&d2CUi&JD38d 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 literal 0 HcmV?d00001 diff --git a/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelShortNames.pdf b/experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore/learnedModelShortNames.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8250098b7fecce9db3ec5ed4124257979acb7b42 GIT binary patch literal 42291 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 literal 0 HcmV?d00001 From 20b04c2ac7821c70d862533cae257e51a7e5ea7e Mon Sep 17 00:00:00 2001 From: Kax-y <56028244+Kax-y@users.noreply.github.com> Date: Wed, 12 Jun 2024 17:54:22 +0200 Subject: [PATCH 128/169] Run CI tests with RaLambda --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index a4fe96f3..a683f98d 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 66ed118e..002a5e29 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index 686625f2..b4100106 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index c70cc165..847cd623 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index b1fc4761..9bfb5376 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 45911892..4f833f3d 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 2331d0c4..5a759c43 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index 6a224cee..f0194c3e 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index 2509fc70..3208e1bb 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 5d3b6a63..3480d6a4 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 5734b41e..1d19cded 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index 6b12b90e..f3733a3b 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index 7c5c268e..f514aa98 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 3398dae9..10fe1753 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index ae82acab..8944b646 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,7 +7,7 @@ ${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index a6a29eec..2e2d3eea 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 56f444af..79ce5603 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaStar +RaLambda -equivalenceAlgorithms IO_RANDOM_WALK -logQueries From 5f69add317250855c679eee9e5bddb13d69a69ca Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 9 Feb 2025 19:04:21 +0100 Subject: [PATCH 129/169] use RaStar for experiments again to clear PR checks --- experiments/args/lakers/client_ra | 2 +- experiments/args/lakers/server_ra | 2 +- experiments/args/rise/client_m4_app_ra | 2 +- experiments/args/rise/client_ra | 2 +- experiments/args/rise/server_m4_app_ra | 2 +- experiments/args/rise/server_ra | 2 +- experiments/args/sifis-home/client_phase_1_ra | 2 +- experiments/args/sifis-home/client_phase_2_ra | 2 +- experiments/args/sifis-home/client_phase_3_ra | 2 +- experiments/args/sifis-home/client_phase_4_ra | 2 +- experiments/args/sifis-home/server_phase_1_ra | 2 +- experiments/args/sifis-home/server_phase_2_ra | 2 +- experiments/args/sifis-home/server_phase_3_ra | 2 +- experiments/args/sifis-home/server_phase_4_ra | 2 +- experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra | 2 +- experiments/args/uoscore-uedhoc/server_linux_edhoc_ra | 2 +- 17 files changed, 17 insertions(+), 17 deletions(-) diff --git a/experiments/args/lakers/client_ra b/experiments/args/lakers/client_ra index a683f98d..a4fe96f3 100644 --- a/experiments/args/lakers/client_ra +++ b/experiments/args/lakers/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/lakers/server_ra b/experiments/args/lakers/server_ra index 002a5e29..66ed118e 100644 --- a/experiments/args/lakers/server_ra +++ b/experiments/args/lakers/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/lakers ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_m4_app_ra b/experiments/args/rise/client_m4_app_ra index b4100106..686625f2 100644 --- a/experiments/args/rise/client_m4_app_ra +++ b/experiments/args/rise/client_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/client_ra b/experiments/args/rise/client_ra index 847cd623..c70cc165 100644 --- a/experiments/args/rise/client_ra +++ b/experiments/args/rise/client_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_m4_app_ra b/experiments/args/rise/server_m4_app_ra index 9bfb5376..b1fc4761 100644 --- a/experiments/args/rise/server_m4_app_ra +++ b/experiments/args/rise/server_m4_app_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise_m4_app ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/rise/server_ra b/experiments/args/rise/server_ra index 4f833f3d..45911892 100644 --- a/experiments/args/rise/server_ra +++ b/experiments/args/rise/server_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/rise ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_1_ra b/experiments/args/sifis-home/client_phase_1_ra index 5a759c43..2331d0c4 100644 --- a/experiments/args/sifis-home/client_phase_1_ra +++ b/experiments/args/sifis-home/client_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_2_ra b/experiments/args/sifis-home/client_phase_2_ra index f0194c3e..6a224cee 100644 --- a/experiments/args/sifis-home/client_phase_2_ra +++ b/experiments/args/sifis-home/client_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra.}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_3_ra b/experiments/args/sifis-home/client_phase_3_ra index 3208e1bb..2509fc70 100644 --- a/experiments/args/sifis-home/client_phase_3_ra +++ b/experiments/args/sifis-home/client_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/client_phase_4_ra b/experiments/args/sifis-home/client_phase_4_ra index 3480d6a4..5d3b6a63 100644 --- a/experiments/args/sifis-home/client_phase_4_ra +++ b/experiments/args/sifis-home/client_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.clients.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_1_ra b/experiments/args/sifis-home/server_phase_1_ra index 1d19cded..5734b41e 100644 --- a/experiments/args/sifis-home/server_phase_1_ra +++ b/experiments/args/sifis-home/server_phase_1_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_1 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_2_ra b/experiments/args/sifis-home/server_phase_2_ra index f3733a3b..6b12b90e 100644 --- a/experiments/args/sifis-home/server_phase_2_ra +++ b/experiments/args/sifis-home/server_phase_2_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_2 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_3_ra b/experiments/args/sifis-home/server_phase_3_ra index f514aa98..7c5c268e 100644 --- a/experiments/args/sifis-home/server_phase_3_ra +++ b/experiments/args/sifis-home/server_phase_3_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_3 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/sifis-home/server_phase_4_ra b/experiments/args/sifis-home/server_phase_4_ra index 10fe1753..3398dae9 100644 --- a/experiments/args/sifis-home/server_phase_4_ra +++ b/experiments/args/sifis-home/server_phase_4_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/sifis-home_phase_4 ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra index 8944b646..ae82acab 100644 --- a/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra @@ -7,7 +7,7 @@ ${results.learning.clients.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra index 2e2d3eea..a6a29eec 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc_oscore ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries diff --git a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra index 79ce5603..56f444af 100644 --- a/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra +++ b/experiments/args/uoscore-uedhoc/server_linux_edhoc_ra @@ -8,7 +8,7 @@ ${results.learning.servers.ra}/uoscore-uedhoc_linux_edhoc ##### LearnerConfig ##### -learningAlgorithm -RaLambda +RaStar -equivalenceAlgorithms IO_RANDOM_WALK -logQueries From 3f7b0bc10582386b804e61ff4674172ea693df1c Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:16:31 -0500 Subject: [PATCH 130/169] Updates inputs, outputs and add two new classes --- .../sul/mapper/symbols/outputs/MessageOutputType.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java index 26fecbe3..7f834f91 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/MessageOutputType.java @@ -1,7 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs; -/** - * Messages that can be received. +/** Messages that can be received. * The last four are from the OutputBuilder. */ public enum MessageOutputType { From e17754823437a423b4eece1424a499ceda95daba Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:18:30 -0500 Subject: [PATCH 131/169] Update mapper related classes --- .../components/sul/mapper/mappers/EdhocInputMapper.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java index c9ad2889..0bb9a9b4 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java @@ -6,7 +6,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; import org.eclipse.californium.core.coap.MediaTypeRegistry; @@ -14,7 +14,7 @@ public class EdhocInputMapper extends InputMapper { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapper(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + public EdhocInputMapper(MapperConfig mapperConfig, OutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } From 3e7f733ea0550a32a844f990d53153c857ad9d10 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:19:06 -0500 Subject: [PATCH 132/169] Update sul related classes --- .../components/sul/core/EdhocSul.java | 71 ++++++++----------- 1 file changed, 29 insertions(+), 42 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java index 002690ea..a04af1bf 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java @@ -1,6 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ClientMapperConnector; @@ -21,7 +22,11 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.Mapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -30,14 +35,10 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSul implements AbstractSul { +public class EdhocSul extends AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); - - protected SulConfig sulConfig; - protected CleanupTasks cleanupTasks; - protected EdhocMapperConfig edhocMapperConfig; - protected EdhocMapperComposer edhocMapperComposer; protected EdhocExecutionContext edhocExecutionContext; + protected ProtocolVersion protocolVersion; protected Long originalTimeout; protected EdhocMapperState edhocMapperState; protected EdhocMapperConnector edhocMapperConnector; @@ -90,34 +91,11 @@ public EdhocSul initialize() { return this; } - @Override - public SulConfig getSulConfig() { - return sulConfig; - } - - @Override - public CleanupTasks getCleanupTasks() { - return cleanupTasks; - } - - @Override - public EdhocMapperComposer getMapper() { - return edhocMapperComposer; - } - - @Override - public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) { - throw new RuntimeException("No dynamic port provider available"); - } - - @Override - public DynamicPortProvider getDynamicPortProvider() { - throw new RuntimeException("No dynamic port provider available"); - } - - @Override - public SulAdapter getSulAdapter() { - throw new RuntimeException("No sul adapter available"); + protected Mapper buildMapper(MapperConfig mapperConfig, EdhocMapperConnector edhocMapperConnector) { + return new EdhocMapperComposer ( + new EdhocInputMapper(mapperConfig, new EdhocOutputChecker(), edhocMapperConnector), + new EdhocOutputMapper(mapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), edhocMapperConnector) + ); } @Override @@ -175,12 +153,12 @@ public EdhocOutput step(EdhocInput abstractInput) { edhocExecutionContext.addStepContext(); if (!edhocExecutionContext.isExecutionEnabled()) { - return edhocMapperComposer.getOutputMapper().disabled(); + return ((EdhocMapperComposer) mapper).getOutputMapper().disabled(); } - EdhocOutput abstractOutput = executeInput(abstractInput); + EdhocOutput abstractOutput = executeInput(abstractInput, mapper); - if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { + if (mapper.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { // this should lead to a disabled sink state edhocExecutionContext.disableExecution(); } @@ -190,7 +168,7 @@ public EdhocOutput step(EdhocInput abstractInput) { return abstractOutput; } - protected EdhocOutput executeInput(EdhocInput abstractInput) { + protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper mapper) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse @@ -203,7 +181,7 @@ protected EdhocOutput executeInput(EdhocInput abstractInput) { timeoutChanged = true; } - EdhocOutput abstractOutput = edhocMapperComposer.execute(abstractInput, edhocExecutionContext); + EdhocOutput abstractOutput = mapper.execute(abstractInput, edhocExecutionContext); // reset timeout if (timeoutChanged) { @@ -223,11 +201,12 @@ protected void serverWaitForInitialMessage() { return; } + EdhocMapperComposer mapperComposer = (EdhocMapperComposer) mapper; ServerMapperConnector serverMapperConnector = (ServerMapperConnector) edhocMapperConnector; - EdhocOutputChecker edhocOutputChecker = edhocMapperComposer.getOutputChecker(); + EdhocOutputChecker edhocOutputChecker = (EdhocOutputChecker) mapperComposer.getOutputChecker(); serverMapperConnector.waitForClientMessage(); - EdhocOutput abstractOutput = edhocMapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); + EdhocOutput abstractOutput = mapperComposer.getOutputMapper().receiveOutput(edhocExecutionContext); boolean isExpectedMessage = edhocOutputChecker.isMessage(abstractOutput, expectedMessageType); if (!isExpectedMessage) { @@ -239,4 +218,12 @@ protected void serverWaitForInitialMessage() { serverWaitForInitialMessageDone = true; } + + protected static class EdhocMapperComposer extends MapperComposer { + public EdhocMapperComposer( + InputMapper inputMapper, + OutputMapper outputMapper) { + super(inputMapper, outputMapper); + } + } } From 7e523213f5783692e4aed6ab5387910ff90ad1bf Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:20:09 -0500 Subject: [PATCH 133/169] Update outer classes --- .../protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java | 6 +----- .../java/com/github/protocolfuzzing/edhocfuzzer/Main.java | 4 +++- .../github/protocolfuzzing/edhocfuzzer/MultiBuilder.java | 8 ++------ 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java index 3dbbdef2..0b41031f 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java @@ -16,11 +16,7 @@ public class EdhocDotProcessor { private static final Logger LOGGER = LogManager.getLogger(); - public static void beautify(LearnerResult learnerResult) { - if (learnerResult.isFromTest()) { - return; - } - + public static void beautify(LearnerResult learnerResult) { if (learnerResult.isEmpty()) { LOGGER.warn("Provided empty LearnerResult"); return; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index e1b8bc0f..e11fb732 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -1,5 +1,7 @@ package com.github.protocolfuzzing.edhocfuzzer; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser; import java.util.List; @@ -9,7 +11,7 @@ public static void main(String[] args) { MultiBuilder mb = new MultiBuilder(); String[] parentLoggers = { Main.class.getPackageName() }; - CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); + CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); commandLineParser.setExternalParentLoggers(parentLoggers); commandLineParser.parse(args, true, List.of(EdhocDotProcessor::beautify)); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java index 07e70c31..d57a3224 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java @@ -35,11 +35,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; -public class MultiBuilder implements - StateFuzzerConfigBuilder, - StateFuzzerBuilder>, - TestRunnerBuilder, - TimingProbeBuilder { +public class MultiBuilder implements StateFuzzerConfigBuilder, StateFuzzerBuilder, TestRunnerBuilder, TimingProbeBuilder { protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) @@ -68,7 +64,7 @@ public StateFuzzerServerConfig buildServerConfig() { } @Override - public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { + public StateFuzzer build(StateFuzzerEnabler stateFuzzerEnabler) { return new StateFuzzerStandard<>( new StateFuzzerComposerStandard<>(stateFuzzerEnabler, alphabetBuilder, sulBuilder).initialize() ); From 719c91e23f556246ff02ab632c6bec9a6f4aa273 Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 16:20:26 -0500 Subject: [PATCH 134/169] Update setup_fuzzer pointing to generics branch --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index e56d8d31..3f20d5cd 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,7 +8,7 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="main" + CHECKOUT="generics" set -e cd "${BASE_DIR}" From 5e17c8afb629725e169703deaea1137cf0686c8a Mon Sep 17 00:00:00 2001 From: actyp Date: Wed, 14 Feb 2024 23:28:00 -0500 Subject: [PATCH 135/169] Update according to generic machine model --- .../protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java | 6 +++++- .../java/com/github/protocolfuzzing/edhocfuzzer/Main.java | 4 +--- .../github/protocolfuzzing/edhocfuzzer/MultiBuilder.java | 8 ++++++-- 3 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java index 0b41031f..3dbbdef2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/EdhocDotProcessor.java @@ -16,7 +16,11 @@ public class EdhocDotProcessor { private static final Logger LOGGER = LogManager.getLogger(); - public static void beautify(LearnerResult learnerResult) { + public static void beautify(LearnerResult learnerResult) { + if (learnerResult.isFromTest()) { + return; + } + if (learnerResult.isEmpty()) { LOGGER.warn("Provided empty LearnerResult"); return; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java index e11fb732..e1b8bc0f 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/Main.java @@ -1,7 +1,5 @@ package com.github.protocolfuzzing.edhocfuzzer; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; import com.github.protocolfuzzing.protocolstatefuzzer.entrypoints.CommandLineParser; import java.util.List; @@ -11,7 +9,7 @@ public static void main(String[] args) { MultiBuilder mb = new MultiBuilder(); String[] parentLoggers = { Main.class.getPackageName() }; - CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); + CommandLineParser commandLineParser = new CommandLineParser<>(mb, mb, mb, mb); commandLineParser.setExternalParentLoggers(parentLoggers); commandLineParser.parse(args, true, List.of(EdhocDotProcessor::beautify)); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java index d57a3224..07e70c31 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilder.java @@ -35,7 +35,11 @@ import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeConfigStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.testrunner.timingprobe.config.TimingProbeEnabler; -public class MultiBuilder implements StateFuzzerConfigBuilder, StateFuzzerBuilder, TestRunnerBuilder, TimingProbeBuilder { +public class MultiBuilder implements + StateFuzzerConfigBuilder, + StateFuzzerBuilder>, + TestRunnerBuilder, + TimingProbeBuilder { protected AlphabetBuilder alphabetBuilder = new AlphabetBuilderStandard<>( new AlphabetSerializerXml(EdhocInput.class, EdhocAlphabetPojoXml.class) @@ -64,7 +68,7 @@ public StateFuzzerServerConfig buildServerConfig() { } @Override - public StateFuzzer build(StateFuzzerEnabler stateFuzzerEnabler) { + public StateFuzzer> build(StateFuzzerEnabler stateFuzzerEnabler) { return new StateFuzzerStandard<>( new StateFuzzerComposerStandard<>(stateFuzzerEnabler, alphabetBuilder, sulBuilder).initialize() ); From b6ba1f99452761674744d3e71c84bb56a779f0e6 Mon Sep 17 00:00:00 2001 From: actyp Date: Fri, 16 Feb 2024 21:19:23 -0500 Subject: [PATCH 136/169] Introduce EdhocMapperComposer and simplify some things --- .../components/sul/mapper/context/EdhocMapperState.java | 6 ++---- .../components/sul/mapper/mappers/EdhocInputMapper.java | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java index 07dacaa8..586fe2a5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/context/EdhocMapperState.java @@ -27,8 +27,7 @@ /** Adapted from test files EdhocClient / EdhocServer from edhoc repo */ public abstract class EdhocMapperState { - // The authentication method to include in EDHOC message_1 (relevant only when - // Initiator) + // The authentication method to include in EDHOC message_1 (relevant only when Initiator) protected int authenticationMethod; // Authentication credentials of this peer @@ -98,8 +97,7 @@ public abstract class EdhocMapperState { protected CleanupTasks cleanupTasks; - public EdhocMapperState(EdhocMapperConfig edhocMapperConfig, String edhocSessionUri, String oscoreUri, - CleanupTasks cleanupTasks) { + public EdhocMapperState(EdhocMapperConfig edhocMapperConfig, String edhocSessionUri, String oscoreUri, CleanupTasks cleanupTasks) { this.edhocMapperConfig = edhocMapperConfig; this.cleanupTasks = cleanupTasks; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java index 0bb9a9b4..c9ad2889 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java @@ -6,7 +6,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContext; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputChecker; +import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; import org.eclipse.californium.core.coap.MediaTypeRegistry; @@ -14,7 +14,7 @@ public class EdhocInputMapper extends InputMapper { EdhocMapperConnector edhocMapperConnector; - public EdhocInputMapper(MapperConfig mapperConfig, OutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { + public EdhocInputMapper(MapperConfig mapperConfig, EdhocOutputChecker outputChecker, EdhocMapperConnector edhocMapperConnector) { super(mapperConfig, outputChecker); this.edhocMapperConnector = edhocMapperConnector; } From b43d7ee2644416d19f2007c1168b07be574de70a Mon Sep 17 00:00:00 2001 From: actyp Date: Fri, 16 Feb 2024 21:19:55 -0500 Subject: [PATCH 137/169] Simplify EdhocSul --- .../components/sul/core/EdhocSul.java | 71 +++++++++++-------- 1 file changed, 42 insertions(+), 29 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java index a04af1bf..002690ea 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSul.java @@ -1,7 +1,6 @@ package com.github.protocolfuzzing.edhocfuzzer.components.sul.core; import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.config.EdhocSulClientConfig; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.config.EdhocMapperConnectionConfig; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.connectors.ClientMapperConnector; @@ -22,11 +21,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulAdapter; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.Mapper; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.config.MapperConfig; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.InputMapper; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.OutputMapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.sulwrappers.DynamicPortProvider; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -35,10 +30,14 @@ import java.io.IOException; import java.util.concurrent.TimeUnit; -public class EdhocSul extends AbstractSul { +public class EdhocSul implements AbstractSul { private static final Logger LOGGER = LogManager.getLogger(); + + protected SulConfig sulConfig; + protected CleanupTasks cleanupTasks; + protected EdhocMapperConfig edhocMapperConfig; + protected EdhocMapperComposer edhocMapperComposer; protected EdhocExecutionContext edhocExecutionContext; - protected ProtocolVersion protocolVersion; protected Long originalTimeout; protected EdhocMapperState edhocMapperState; protected EdhocMapperConnector edhocMapperConnector; @@ -91,11 +90,34 @@ public EdhocSul initialize() { return this; } - protected Mapper buildMapper(MapperConfig mapperConfig, EdhocMapperConnector edhocMapperConnector) { - return new EdhocMapperComposer ( - new EdhocInputMapper(mapperConfig, new EdhocOutputChecker(), edhocMapperConnector), - new EdhocOutputMapper(mapperConfig, new EdhocOutputBuilder(), new EdhocOutputChecker(), edhocMapperConnector) - ); + @Override + public SulConfig getSulConfig() { + return sulConfig; + } + + @Override + public CleanupTasks getCleanupTasks() { + return cleanupTasks; + } + + @Override + public EdhocMapperComposer getMapper() { + return edhocMapperComposer; + } + + @Override + public void setDynamicPortProvider(DynamicPortProvider dynamicPortProvider) { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public DynamicPortProvider getDynamicPortProvider() { + throw new RuntimeException("No dynamic port provider available"); + } + + @Override + public SulAdapter getSulAdapter() { + throw new RuntimeException("No sul adapter available"); } @Override @@ -153,12 +175,12 @@ public EdhocOutput step(EdhocInput abstractInput) { edhocExecutionContext.addStepContext(); if (!edhocExecutionContext.isExecutionEnabled()) { - return ((EdhocMapperComposer) mapper).getOutputMapper().disabled(); + return edhocMapperComposer.getOutputMapper().disabled(); } - EdhocOutput abstractOutput = executeInput(abstractInput, mapper); + EdhocOutput abstractOutput = executeInput(abstractInput); - if (mapper.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { + if (edhocMapperComposer.getOutputChecker().isDisabled(abstractOutput) || !edhocExecutionContext.isExecutionEnabled()) { // this should lead to a disabled sink state edhocExecutionContext.disableExecution(); } @@ -168,7 +190,7 @@ public EdhocOutput step(EdhocInput abstractInput) { return abstractOutput; } - protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper mapper) { + protected EdhocOutput executeInput(EdhocInput abstractInput) { boolean timeoutChanged = false; // handle timeout from extendedWait and from inputResponse @@ -181,7 +203,7 @@ protected EdhocOutput executeInput(EdhocInput abstractInput, Mapper { - public EdhocMapperComposer( - InputMapper inputMapper, - OutputMapper outputMapper) { - super(inputMapper, outputMapper); - } - } } From 8ddf6b7c4176c4226cf94b9f1ef9d4f315b52e51 Mon Sep 17 00:00:00 2001 From: actyp Date: Sun, 29 Dec 2024 15:21:58 -0500 Subject: [PATCH 138/169] Update protocol-state-fuzzer setup --- scripts/setup_fuzzer.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 3f20d5cd..30c8b186 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,7 +8,7 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="generics" + CHECKOUT="d665cb9d4396ced98131df70adb445150b4d3704" set -e cd "${BASE_DIR}" @@ -32,7 +32,7 @@ setup_ralib() { git clone "https://github.com/LearnLib/ralib" cd ralib git checkout ${CHECKOUT} - mvn install + bash ./install.sh cd "${BASE_DIR}" rm -rf ./ralib/ From bfe33fdaca47a2ea9b014566ad7194856ab3f4eb Mon Sep 17 00:00:00 2001 From: unknown Date: Sun, 9 Feb 2025 20:22:27 +0100 Subject: [PATCH 139/169] update from fork to real psf --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 30c8b186..a2813d10 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -12,7 +12,7 @@ setup_psf() { set -e cd "${BASE_DIR}" - git clone "https://github.com/Kax-y/protocol-state-fuzzer.git" + git clone "https://github.com/protocol-fuzzing/protocol-state-fuzzer.git" cd protocol-state-fuzzer git checkout "${CHECKOUT}" bash ./install.sh From b03adc04ad804da5ee9a0531366f701c74ffb46b Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 17:03:49 +0200 Subject: [PATCH 140/169] Update dependency hashes in setup_fuzzer.sh --- scripts/setup_fuzzer.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index a2813d10..c7855aec 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,7 +8,7 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="d665cb9d4396ced98131df70adb445150b4d3704" + CHECKOUT="469ced8267e28f4670be24f15982449829a26422" set -e cd "${BASE_DIR}" @@ -43,7 +43,7 @@ setup_cf_edhoc() { # setup cf-edhoc library PATCH_FILE="${SCRIPT_DIR}/cf-edhoc.patch" - CHECKOUT="9bdb7561147a36a2064c2f7968291436b742d2e9" + CHECKOUT="b08bf12dae965044925eb58ee25717a4d2f8105b" set -e cd "${BASE_DIR}" From a54b2e737119cd3003ca6a91692beed77476ad13 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 17:09:37 +0200 Subject: [PATCH 141/169] Latest psf --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index c7855aec..c13f2b56 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,7 +8,7 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="469ced8267e28f4670be24f15982449829a26422" + CHECKOUT="2ec09644043e66b9f5139b18d489763c4fc0e8ec" set -e cd "${BASE_DIR}" From 16a9298385b60cfa295a38f1b5dd6964a60d0a6f Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 17:18:31 +0200 Subject: [PATCH 142/169] install ralib with mvn install --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index c13f2b56..295744a0 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -32,7 +32,7 @@ setup_ralib() { git clone "https://github.com/LearnLib/ralib" cd ralib git checkout ${CHECKOUT} - bash ./install.sh + mvn install cd "${BASE_DIR}" rm -rf ./ralib/ From 552b1b92fafdcb43178955cf8a82e5f360e7cc77 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 17:30:57 +0200 Subject: [PATCH 143/169] Fix --- scripts/setup_fuzzer.sh | 2 +- .../components/sul/mapper/mappers/EdhocInputMapper.java | 2 +- .../components/sul/mapper/mappers/EdhocInputMapperRA.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 295744a0..bb19d018 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -32,7 +32,7 @@ setup_ralib() { git clone "https://github.com/LearnLib/ralib" cd ralib git checkout ${CHECKOUT} - mvn install + mvn install -DskipTests=true cd "${BASE_DIR}" rm -rf ./ralib/ diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java index c9ad2889..00fd5a5f 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapper.java @@ -27,7 +27,7 @@ protected void sendMessage(EdhocProtocolMessage message, EdhocExecutionContext c // enable or disable content format EdhocMapperConfig edhocMapperConfig = (EdhocMapperConfig) mapperConfig; - int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat() : MediaTypeRegistry.UNDEFINED; + int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat(edhocMapperConfig.useOldContentFormat()) : MediaTypeRegistry.UNDEFINED; edhocMapperConnector.send(message.getPayload(), message.getPayloadType(), message.getMessageCode(), contentFormat); } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index e634b596..e41c0f3e 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -56,7 +56,7 @@ public void sendMessage(EdhocProtocolMessage message, EdhocExecutionContextRA co // enable or disable content format EdhocMapperConfig edhocMapperConfig = (EdhocMapperConfig) mapperConfig; - int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat() + int contentFormat = edhocMapperConfig.useContentFormat() ? message.getContentFormat(edhocMapperConfig.useOldContentFormat()) : MediaTypeRegistry.UNDEFINED; edhocMapperConnector.send(message.getPayload(), message.getPayloadType(), message.getMessageCode(), From 16fad574e1679aabd9fa8282b1b4a38c22a3cfb3 Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 17:44:56 +0200 Subject: [PATCH 144/169] Update to new outputBuilder --- .../components/sul/mapper/mappers/EdhocMapperComposer.java | 5 +++-- .../components/sul/mapper/mappers/EdhocMapperComposerRA.java | 5 +++-- .../sul/mapper/symbols/outputs/EdhocOutputBuilder.java | 2 +- .../sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java index f688f2ac..aa59ff83 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java @@ -8,6 +8,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilder; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; public class EdhocMapperComposer extends MapperComposer { public EdhocMapperComposer(EdhocInputMapper edhocInputMapper, EdhocOutputMapper edhocOutputMapper) { @@ -20,7 +21,7 @@ public EdhocOutputChecker getOutputChecker() { } @Override - public EdhocOutputBuilder getOutputBuilder() { - return (EdhocOutputBuilder) super.getOutputBuilder(); + public OutputBuilder getOutputBuilder() { + return super.getOutputBuilder(); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java index 77c73b0d..713f1e79 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java @@ -7,6 +7,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposerRA; import de.learnlib.ralib.words.PSymbolInstance; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; public class EdhocMapperComposerRA extends MapperComposerRA { @@ -20,7 +21,7 @@ public EdhocOutputCheckerRA getOutputChecker() { } @Override - public EdhocOutputBuilderRA getOutputBuilder() { - return (EdhocOutputBuilderRA) super.getOutputBuilder(); + public OutputBuilder getOutputBuilder() { + return super.getOutputBuilder(); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java index 7571e2cd..9a922514 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java @@ -2,7 +2,7 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; -public class EdhocOutputBuilder implements OutputBuilder { +public class EdhocOutputBuilder extends OutputBuilder { @Override public EdhocOutput buildOutput(String name) { return new EdhocOutput(name); diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java index 6b73b3f1..381c61fe 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java @@ -5,7 +5,7 @@ import de.learnlib.ralib.words.OutputSymbol; import de.learnlib.ralib.words.PSymbolInstance; -public class EdhocOutputBuilderRA implements OutputBuilder { +public class EdhocOutputBuilderRA extends OutputBuilder { @Override public PSymbolInstance buildOutput(String name) { From 189987c9dd58318e171ab37e9e7e196b21ba8c6b Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 17:52:23 +0200 Subject: [PATCH 145/169] BuildOutputExact --- .../sul/mapper/symbols/outputs/EdhocOutputBuilder.java | 2 +- .../sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java index 9a922514..cc32871b 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilder.java @@ -4,7 +4,7 @@ public class EdhocOutputBuilder extends OutputBuilder { @Override - public EdhocOutput buildOutput(String name) { + public EdhocOutput buildOutputExact(String name) { return new EdhocOutput(name); } } diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java index 381c61fe..c774dfa5 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/symbols/outputs/EdhocOutputBuilderRA.java @@ -8,7 +8,7 @@ public class EdhocOutputBuilderRA extends OutputBuilder { @Override - public PSymbolInstance buildOutput(String name) { + public PSymbolInstance buildOutputExact(String name) { OutputSymbol baseSymbol = new OutputSymbol(name); return new PSymbolInstance(baseSymbol); } From 53420fc556fd9c2ee86be5e018c855ee2dcc4d4c Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 18:00:02 +0200 Subject: [PATCH 146/169] sideprocessor --- .../sul/core/protocol/EdhocSessionPersistent.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java index c2aba33c..60b22d44 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/protocol/EdhocSessionPersistent.java @@ -67,10 +67,13 @@ public EdhocSessionPersistent( this.forceOscoreRecipientId = forceOscoreRecipientId; this.connectionId = connectionId; + SideProcessor sideProcessor = new SideProcessor( - edhocEndpointInfoPersistent.getTrustModel(), - edhocEndpointInfoPersistent.getPeerCredentials(), - edhocEndpointInfoPersistent.getEadProductionInput()); + edhocEndpointInfoPersistent.getTrustModel(), + edhocEndpointInfoPersistent.getPeerPublicKeys(), + edhocEndpointInfoPersistent.getPeerCredentials(), + edhocEndpointInfoPersistent.getEadProductionInput() + ); sideProcessor.setEdhocSession(this); this.setSideProcessor(sideProcessor); From 8f7355bb7ad284038375c0ae2b19d1280336b6ed Mon Sep 17 00:00:00 2001 From: 00oskpet <42684085+00oskpet@users.noreply.github.com> Date: Thu, 8 May 2025 18:06:18 +0200 Subject: [PATCH 147/169] Yeet! --- .../edhocfuzzer/AlphabetTransformerRA.java | 48 ------------------- 1 file changed, 48 deletions(-) delete mode 100644 src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java deleted file mode 100644 index 1a55a019..00000000 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/AlphabetTransformerRA.java +++ /dev/null @@ -1,48 +0,0 @@ -package com.github.protocolfuzzing.edhocfuzzer; - -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.*; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderStandard; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderTransformer; -import de.learnlib.ralib.words.InputSymbol; -import de.learnlib.ralib.words.OutputSymbol; -import de.learnlib.ralib.words.ParameterizedSymbol; - -import java.util.Arrays; - -public class AlphabetTransformerRA extends AlphabetBuilderTransformer { - public AlphabetTransformerRA(AlphabetBuilderStandard alphabetBuilderStandard) { - super(alphabetBuilderStandard); - } - - @Override - public SymbolXml fromTransformedInput(ParameterizedSymbol symbol) { - DataTypeXml[] types = Arrays.stream(symbol.getPtypes()) - .map(type -> new DataTypeXml(type.getName(), type.getBase())).toArray(DataTypeXml[]::new); - - if (symbol instanceof InputSymbol) { - return new SymbolXml(symbol.getName(), SymbolXml.Type.INPUT, types); - } else if (symbol instanceof OutputSymbol) { - return new SymbolXml(symbol.getName(), SymbolXml.Type.OUTPUT, types); - } else { - throw new RuntimeException("Invalid type for ParameterizedSymbol, not InputSymbol or OutputSymbol"); - } - } - - @Override - public ParameterizedSymbol toTransformedInput(SymbolXml symbol) { - // DataType[] types = Arrays.stream(symbol.getDataTypes()) - // .map(type -> new DataType(type.getName(), type.getBase())) - // .toArray(DataType[]::new); - - switch (symbol.getSymbolType()) { - case INPUT: - return new InputSymbol(symbol.getName()); - - case OUTPUT: - return new OutputSymbol(symbol.getName()); - - default: - throw new RuntimeException("Invalid SymbolType for SymbolXml, not INPUT or OUTPUT"); - } - } -} From e0f82601adec9e22080d63de83fbaf8ae2d566d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 15 Jan 2026 16:30:01 +0100 Subject: [PATCH 148/169] Build SulWrapper in EdhocSulBuilderRA --- .../protocolfuzzing/edhocfuzzer/MultiBuilderRA.java | 4 +--- .../components/sul/core/EdhocSulBuilderRA.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 9355ff65..1f264d2f 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -69,9 +69,7 @@ public class MultiBuilderRA implements protected AlphabetBuilderWrapper dummyBuilder = new AlphabetBuilderWrapper( alphabet); - protected SulBuilder sulBuilder = new EdhocSulBuilderRA( - alphabet); - protected SulWrapper sulWrapper = new SulWrapperStandard<>(); + protected SulBuilder sulBuilder = new EdhocSulBuilderRA(alphabet); @Override public StateFuzzerClientConfig buildClientConfig() { diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java index e1a55189..d99398de 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/core/EdhocSulBuilderRA.java @@ -4,6 +4,8 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.AbstractSul; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulWrapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulWrapperStandard; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.config.SulConfig; import com.github.protocolfuzzing.protocolstatefuzzer.utils.CleanupTasks; import de.learnlib.ralib.words.PSymbolInstance; @@ -16,8 +18,12 @@ public EdhocSulBuilderRA(EnumAlphabet alphabet) { } @Override - public AbstractSul build(SulConfig sulConfig, - CleanupTasks cleanupTasks) { + public AbstractSul buildSul(SulConfig sulConfig, CleanupTasks cleanupTasks) { return new EdhocSulRA(sulConfig, cleanupTasks, alphabet).initialize(); } + + @Override + public SulWrapper buildWrapper() { + return new SulWrapperStandard<>(); + } } From 0f586c751b4e40c1257e3d96fcf4e80231ff7587 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 15 Jan 2026 16:30:30 +0100 Subject: [PATCH 149/169] Update protocol message switches to new best practice (fix warning) --- .../mapper/mappers/EdhocInputMapperRA.java | 93 ++++++++++--------- 1 file changed, 47 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java index e41c0f3e..5ff0305d 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocInputMapperRA.java @@ -69,32 +69,30 @@ public void preSendUpdate(PSymbolInstance input, EdhocExecutionContextRA context EdhocMapperState mapperState = context.getState(); switch (MessageInputTypeRA.valueOf(symbolName)) { - case EDHOC_MESSAGE_1_INPUT: + case EDHOC_MESSAGE_1_INPUT -> { if (mapperState.getEdhocSessionPersistent().isInitiator()) { // Initiator by sending message 1 starts a new key exchange session // so previous session state must be cleaned unless reset is disabled mapperState.getEdhocSessionPersistent().resetIfEnabled(); } updateConnectionId(mapperState, input); - break; - - case EDHOC_MESSAGE_2_INPUT: - break; - - case EDHOC_MESSAGE_3_OSCORE_APP_INPUT: + } + case EDHOC_MESSAGE_3_OSCORE_APP_INPUT -> { updateConnectionId(mapperState, input); // construct Message3 in order to store it in session 'message3' field, // derive new oscore context and make Message3 available to oscore layer - new MessageProcessorPersistent(context.getState()).writeMessage3(); - break; - - case EDHOC_MESSAGE_3_INPUT: - case EDHOC_MESSAGE_4_INPUT: - case OSCORE_APP_MESSAGE_INPUT: - case COAP_APP_MESSAGE_INPUT: - case COAP_EMPTY_MESSAGE_INPUT: - case EDHOC_ERROR_MESSAGE_INPUT: - break; + new MessageProcessorPersistent( + context.getState() + ).writeMessage3(); + } + case + EDHOC_MESSAGE_2_INPUT, + EDHOC_MESSAGE_3_INPUT, + EDHOC_MESSAGE_4_INPUT, + OSCORE_APP_MESSAGE_INPUT, + COAP_APP_MESSAGE_INPUT, + COAP_EMPTY_MESSAGE_INPUT, + EDHOC_ERROR_MESSAGE_INPUT -> {} } } @@ -105,35 +103,38 @@ public EdhocProtocolMessage generateProtocolMessage(PSymbolInstance input, Edhoc if (baseSymbol instanceof InputSymbol) { // We can construct this here since the switch should always dispatch to only // one instance. - MessageProcessorPersistent messageProcessor = new MessageProcessorPersistent(context.getState()); - switch (MessageInputTypeRA.valueOf(symbolName)) { - case EDHOC_MESSAGE_1_INPUT: - return new EdhocMessage1(messageProcessor); - - case EDHOC_MESSAGE_2_INPUT: - return new EdhocMessage2(messageProcessor); - - case EDHOC_MESSAGE_3_INPUT: - return new EdhocMessage3(messageProcessor); - - case EDHOC_MESSAGE_3_OSCORE_APP_INPUT: - return new EdhocMessage3OscoreApp(messageProcessor); - - case EDHOC_MESSAGE_4_INPUT: - return new EdhocMessage4(messageProcessor); - - case OSCORE_APP_MESSAGE_INPUT: - return new OscoreAppMessage(messageProcessor); - - case EDHOC_ERROR_MESSAGE_INPUT: - return new EdhocErrorMessage(messageProcessor); - - case COAP_APP_MESSAGE_INPUT: - return new CoapAppMessage(messageProcessor); - - case COAP_EMPTY_MESSAGE_INPUT: - return new CoapEmptyMessage(messageProcessor); - } + MessageProcessorPersistent messageProcessor = + new MessageProcessorPersistent(context.getState()); + + return switch (MessageInputTypeRA.valueOf(symbolName)) { + case EDHOC_MESSAGE_1_INPUT -> new EdhocMessage1( + messageProcessor + ); + case EDHOC_MESSAGE_2_INPUT -> new EdhocMessage2( + messageProcessor + ); + case EDHOC_MESSAGE_3_INPUT -> new EdhocMessage3( + messageProcessor + ); + case EDHOC_MESSAGE_3_OSCORE_APP_INPUT -> new EdhocMessage3OscoreApp( + messageProcessor + ); + case EDHOC_MESSAGE_4_INPUT -> new EdhocMessage4( + messageProcessor + ); + case OSCORE_APP_MESSAGE_INPUT -> new OscoreAppMessage( + messageProcessor + ); + case EDHOC_ERROR_MESSAGE_INPUT -> new EdhocErrorMessage( + messageProcessor + ); + case COAP_APP_MESSAGE_INPUT -> new CoapAppMessage( + messageProcessor + ); + case COAP_EMPTY_MESSAGE_INPUT -> new CoapEmptyMessage( + messageProcessor + ); + }; } throw new RuntimeException( From f017401e61800d271a0cc52ac48ef912ab89bb6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 15 Jan 2026 16:31:23 +0100 Subject: [PATCH 150/169] Temporarily suppress this-escape to allow compiling and testing --- pom.xml | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 6aab5ac5..eee95b98 100644 --- a/pom.xml +++ b/pom.xml @@ -1,7 +1,9 @@ - - + + 4.0.0 com.github.protocolfuzzing @@ -265,10 +267,12 @@ -Werror -Xlint:all + -Xlint:-this-escape -XDcompilePolicy=simple --should-stop=ifError=FLOW -XDaddTypeAnnotationsToSymbol=true - -Xplugin:ErrorProne -Xep:AddressSelection:OFF -Xep:NonApiType:OFF -Xep:WaitNotInLoop:OFF + -Xplugin:ErrorProne -Xep:AddressSelection:OFF -Xep:NonApiType:OFF -Xep:WaitNotInLoop:OFF @@ -307,16 +311,19 @@ - com.github.protocolfuzzing.edhocfuzzer.Main + com.github.protocolfuzzing.edhocfuzzer.Main true - jar-with-dependencies + jar-with-dependencies - ${project.artifactId}-${project.version}-mealy + ${project.artifactId}-${project.version}-mealy single @@ -328,16 +335,19 @@ - com.github.protocolfuzzing.edhocfuzzer.MainRA + com.github.protocolfuzzing.edhocfuzzer.MainRA true - jar-with-dependencies + jar-with-dependencies - ${project.artifactId}-${project.version}-ra + ${project.artifactId}-${project.version}-ra single From 94afd7a5b458a59b282e4adb25467b1a923d1e02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 15 Jan 2026 16:32:57 +0100 Subject: [PATCH 151/169] mvn spotless:apply --- .../com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java | 2 -- .../components/sul/mapper/mappers/EdhocMapperComposer.java | 3 +-- .../components/sul/mapper/mappers/EdhocMapperComposerRA.java | 3 +-- src/main/resources/alphabet_placeholder.xml | 2 +- 4 files changed, 3 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index 1f264d2f..cca30414 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -15,8 +15,6 @@ import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.config.LearnerConfigRA; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.statistics.RegisterAutomatonWrapper; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulBuilder; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulWrapper; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.core.SulWrapperStandard; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzer; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.statefuzzer.core.StateFuzzerComposerRA; diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java index aa59ff83..e3af0371 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposer.java @@ -5,10 +5,9 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.EdhocInput; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutput; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilder; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputChecker; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposer; public class EdhocMapperComposer extends MapperComposer { public EdhocMapperComposer(EdhocInputMapper edhocInputMapper, EdhocOutputMapper edhocOutputMapper) { diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java index 713f1e79..ddd9c8c4 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/components/sul/mapper/mappers/EdhocMapperComposerRA.java @@ -3,11 +3,10 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.core.protocol.messages.EdhocProtocolMessage; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocExecutionContextRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.context.EdhocMapperState; -import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputBuilderRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.EdhocOutputCheckerRA; +import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.mappers.MapperComposerRA; import de.learnlib.ralib.words.PSymbolInstance; -import com.github.protocolfuzzing.protocolstatefuzzer.components.sul.mapper.abstractsymbols.OutputBuilder; public class EdhocMapperComposerRA extends MapperComposerRA { diff --git a/src/main/resources/alphabet_placeholder.xml b/src/main/resources/alphabet_placeholder.xml index 6368ffac..49ced98d 100644 --- a/src/main/resources/alphabet_placeholder.xml +++ b/src/main/resources/alphabet_placeholder.xml @@ -1,2 +1,2 @@ - \ No newline at end of file + From 1017757e8e7094beb782dcb2650ddd1a1845e56d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 15 Jan 2026 17:01:02 +0100 Subject: [PATCH 152/169] Update psf version to the same as mainline edhocfuzzer --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index bb19d018..aeeed3e7 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,7 +8,7 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="2ec09644043e66b9f5139b18d489763c4fc0e8ec" + CHECKOUT="42392348464ab4cebb3a4c7b149c21caf6ee9c4e" set -e cd "${BASE_DIR}" From cdbb4742a3c79508a30230da887bb4e9b58ffd9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 15 Jan 2026 17:07:54 +0100 Subject: [PATCH 153/169] Actually remove sulWrapper --- .../com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index cca30414..d16302b1 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -96,7 +96,7 @@ public StateFuzzer( new StateFuzzerComposerRA( stateFuzzerEnabler, - dummyBuilder, sulBuilder, sulWrapper, teachers).initialize()); + dummyBuilder, sulBuilder, teachers).initialize()); } @Override From 155edb096ed4b0a705cbbc84a45f456a41d66995 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Thu, 15 Jan 2026 19:28:46 +0100 Subject: [PATCH 154/169] Use my psf fork with hotfixed AlphabetBuilderWrapper --- scripts/setup_fuzzer.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index aeeed3e7..cb6c9a44 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -8,11 +8,11 @@ readonly BASE_DIR setup_psf() { # setup protocol-state-fuzzer library - CHECKOUT="42392348464ab4cebb3a4c7b149c21caf6ee9c4e" + CHECKOUT="2f7afdbcd3a7664e8204896f608a2b9b4d14b71a" set -e cd "${BASE_DIR}" - git clone "https://github.com/protocol-fuzzing/protocol-state-fuzzer.git" + git clone "https://github.com/00oskpet/protocol-state-fuzzer.git" cd protocol-state-fuzzer git checkout "${CHECKOUT}" bash ./install.sh From 78a8bf20f3868e9c953d517e187b79d31b70d9e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 30 Jan 2026 15:27:10 +0100 Subject: [PATCH 155/169] Remove SIFIS-Home jobs --- .github/workflows/ci.yml | 138 +++++++-------------------------------- 1 file changed, 22 insertions(+), 116 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fb44c68d..a7fed72d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,8 +30,8 @@ jobs: - name: Test Lakers Client (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 - - + + - name: Test Lakers Client (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra @@ -78,8 +78,8 @@ jobs: - name: Test Lakers Server (Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - - + + - name: Test Lakers Server (RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra @@ -91,7 +91,7 @@ jobs: path: | experiments/results/servers/mealy/lakers experiments/results/servers/ra/lakers - + - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/mealy/lakers 2 @@ -122,9 +122,9 @@ jobs: - name: Test RISE Client (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 - - - - name: Test RISE Client (m4_app, RA) + + + - name: Test RISE Client (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra @@ -166,12 +166,12 @@ jobs: - name: Test RISE Server (m4_app, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 - - + + - name: Test RISE Server (m4_app, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra - + - name: Upload results uses: actions/upload-artifact@v4 with: @@ -185,101 +185,7 @@ jobs: - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 11 - - SIFIS-HOME-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup SIFIS-HOME - run: ./scripts/setup_sul.sh sifis-home - - - name: Test SIFIS-HOME Client (phase_1, Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 - - - - name: Test SIFIS-HOME Client (phase_1, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra - - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: SIFIS-HOME Client - path: | - experiments/results/clients/mealy/sifis-home_phase_1 - experiments/results/clients/ra/sifis-home_phase_1 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 12 - SIFIS-HOME-Server: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup SIFIS-HOME - run: ./scripts/setup_sul.sh sifis-home - - - name: Test SIFIS-HOME Server (phase_1, Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 - - - - name: Test SIFIS-HOME Server (phase_1, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra - - - - name: Compress results - run: | - tar -czf sifis-home_phase_1_server_mealy.tar.gz experiments/results/servers/mealy/sifis-home_phase_1 - tar -czf sifis-home_phase_1_server_ra.tar.gz experiments/results/servers/ra/sifis-home_phase_1 - - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: SIFIS-HOME Server - path: | - experiments/results/servers/mealy/sifis-home_phase_1 - experiments/results/servers/ra/sifis-home_phase_1 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 16 - uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -304,25 +210,25 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 - + - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra - + - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Client path: | - experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore - experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore + experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore + experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 9 - + uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -347,22 +253,22 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 - - + + - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra - + - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Server path: | - experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore - experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore + experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore + experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 - + - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 5 From 7f70c732ca915e87950489c12d84c551f07be732 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 30 Jan 2026 15:35:20 +0100 Subject: [PATCH 156/169] Move RA-testing to a separate CI-workflow --- .github/workflows/ci-ra.yml | 222 ++++++++++++++++++++++++++++++++++++ 1 file changed, 222 insertions(+) create mode 100644 .github/workflows/ci-ra.yml diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml new file mode 100644 index 00000000..b06d4d82 --- /dev/null +++ b/.github/workflows/ci-ra.yml @@ -0,0 +1,222 @@ +name: CI RA-learning +on: [push, pull_request] + +jobs: + Lakers-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup Lakers + run: | + curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + source "${HOME}/.cargo/env" + rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu + ./scripts/setup_sul.sh lakers + + + - name: Test Lakers Client (RA) + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Lakers Client + path: | + experiments/results/clients/ra/lakers + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 4 + + Lakers-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup Lakers + run: | + curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + source "${HOME}/.cargo/env" + rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu + ./scripts/setup_sul.sh lakers + + - name: Test Lakers Server (RA) + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: Lakers Server + path: | + experiments/results/servers/ra/lakers + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 7 + + RISE-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup RISE + run: ./scripts/setup_sul.sh rise + + - name: Test RISE Client (m4_app, RA) + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: RISE Client + path: | + experiments/results/clients/ra/rise_m4_app + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 11 + + RISE-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup RISE + run: ./scripts/setup_sul.sh rise + + - name: Test RISE Server (m4_app, RA) + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: RISE Server + path: | + experiments/results/servers/ra/rise_m4_app + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 11 + + uOSCORE-uEDHOC-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup uOSCORE-uEDHOC + run: ./scripts/setup_sul.sh uoscore-uedhoc + + - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: uOSCORE-uEDHOC Client + path: | + experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 9 + + uOSCORE-uEDHOC-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: '21' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup uOSCORE-uEDHOC + run: ./scripts/setup_sul.sh uoscore-uedhoc + + - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: uOSCORE-uEDHOC Server + path: | + experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 5 From 447a25a692cd1540a99cadfdc1efeed2605756a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oskar=20Pettersson=20L=C3=B6fstedt?= <00oskpet@gmail.com> Date: Fri, 30 Jan 2026 15:41:33 +0100 Subject: [PATCH 157/169] Remove duplicate RA-workflows --- .github/workflows/ci.yml | 52 ---------------------------------------- 1 file changed, 52 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a7fed72d..8b5ad774 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,25 +31,16 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 - - - name: Test Lakers Client (RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra - - name: Upload results uses: actions/upload-artifact@v4 with: name: Lakers Client path: | experiments/results/clients/mealy/lakers - experiments/results/clients/ra/lakers - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/lakers experiments/results/clients/mealy/lakers 3 - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 4 - Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -79,25 +70,16 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - - - name: Test Lakers Server (RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra - - name: Upload results uses: actions/upload-artifact@v4 with: name: Lakers Server path: | experiments/results/servers/mealy/lakers - experiments/results/servers/ra/lakers - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/mealy/lakers 2 - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 7 - RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -123,25 +105,16 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 - - - name: Test RISE Client (m4_app, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra - - name: Upload results uses: actions/upload-artifact@v4 with: name: RISE Client path: | experiments/results/clients/mealy/rise_m4_app - experiments/results/clients/ra/rise_m4_app - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 11 - RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -167,24 +140,16 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 - - - name: Test RISE Server (m4_app, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra - - name: Upload results uses: actions/upload-artifact@v4 with: name: RISE Server path: | experiments/results/servers/mealy/rise_m4_app - experiments/results/servers/ra/rise_m4_app - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 11 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -211,24 +176,16 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 - - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra - - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Client path: | experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore - experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 9 - uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -254,21 +211,12 @@ jobs: run: | java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 - - - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra - - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Server path: | experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore - experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 5 From 9b3580847b8c3ef2eeb689a9af5466f3a37260b3 Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Fri, 30 Jan 2026 16:58:51 +0100 Subject: [PATCH 158/169] add ra round limits --- .github/workflows/ci-ra.yml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index b06d4d82..6ad9d503 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -30,7 +30,7 @@ jobs: - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -40,7 +40,7 @@ jobs: experiments/results/clients/ra/lakers - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 4 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 3 Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -69,7 +69,7 @@ jobs: - name: Test Lakers Server (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -79,7 +79,7 @@ jobs: experiments/results/servers/ra/lakers - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 7 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -104,7 +104,7 @@ jobs: - name: Test RISE Client (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -114,7 +114,7 @@ jobs: experiments/results/clients/ra/rise_m4_app - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 11 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -139,7 +139,7 @@ jobs: - name: Test RISE Server (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -149,7 +149,7 @@ jobs: experiments/results/servers/ra/rise_m4_app - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 11 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 3 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -174,7 +174,7 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -184,7 +184,7 @@ jobs: experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 9 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -209,7 +209,7 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -219,4 +219,4 @@ jobs: experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 5 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 From c1eff8148f0b2a2a982919ea58f1243e02362560 Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Fri, 30 Jan 2026 16:59:18 +0100 Subject: [PATCH 159/169] update lakers saved results --- .../saved_results/servers/ra/lakers/alphabet | 0 .../saved_results/servers/ra/lakers/hyp3.dot | 2 +- .../saved_results/servers/ra/lakers/hyp4.dot | 4 +-- .../saved_results/servers/ra/lakers/hyp5.dot | 4 +-- .../saved_results/servers/ra/lakers/hyp6.dot | 4 +-- .../saved_results/servers/ra/lakers/hyp7.dot | 4 +-- .../servers/ra/lakers/learnedModel.dot | 4 +-- .../servers/ra/lakers/learnedModel.pdf | Bin 18204 -> 18481 bytes .../ra/lakers/learnedModelShortNames.pdf | Bin 41992 -> 0 bytes .../servers/ra/lakers/learnedModelbtf.dot | 4 +-- .../servers/ra/lakers/learnedModelbtf.pdf | Bin 0 -> 21013 bytes .../servers/ra/lakers/statistics.txt | 27 ++++++++++-------- 12 files changed, 28 insertions(+), 25 deletions(-) create mode 100644 experiments/saved_results/servers/ra/lakers/alphabet delete mode 100644 experiments/saved_results/servers/ra/lakers/learnedModelShortNames.pdf create mode 100644 experiments/saved_results/servers/ra/lakers/learnedModelbtf.pdf diff --git a/experiments/saved_results/servers/ra/lakers/alphabet b/experiments/saved_results/servers/ra/lakers/alphabet new file mode 100644 index 00000000..e69de29b diff --git a/experiments/saved_results/servers/ra/lakers/hyp3.dot b/experiments/saved_results/servers/ra/lakers/hyp3.dot index 8ea80bd2..f89a27c2 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp3.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp3.dot @@ -42,5 +42,5 @@ digraph RA { "l8" -> "l5" [label=] "l8" -> "l5" [label=] "l8" -> "l9" [label=] -"l9" -> "l0" [label=] +"l9" -> "l0" [label=] } diff --git a/experiments/saved_results/servers/ra/lakers/hyp4.dot b/experiments/saved_results/servers/ra/lakers/hyp4.dot index 943fd84a..69a45633 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp4.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp4.dot @@ -36,16 +36,16 @@ digraph RA { "l6" -> "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] "l8" -> "l4" [label=] "l8" -> "l5" [label=] "l8" -> "l5" [label=] "l8" -> "l5" [label=] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] "l10" -> "l11" [label=[r1:=r1,]>] "l11" -> "l1" [label=[r1:=p1,]>] "l11" -> "l4" [label=] diff --git a/experiments/saved_results/servers/ra/lakers/hyp5.dot b/experiments/saved_results/servers/ra/lakers/hyp5.dot index e4063bac..de559f89 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp5.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp5.dot @@ -37,16 +37,16 @@ digraph RA { "l6" -> "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l12" [label=[r1:=r1,]>] "l8" -> "l12" [label=[r1:=r1,]>] "l8" -> "l12" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] "l10" -> "l11" [label=[r1:=r1,]>] "l11" -> "l1" [label=[r1:=p1,]>] "l11" -> "l4" [label=] diff --git a/experiments/saved_results/servers/ra/lakers/hyp6.dot b/experiments/saved_results/servers/ra/lakers/hyp6.dot index 3890fbca..91851f42 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp6.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp6.dot @@ -38,16 +38,16 @@ digraph RA { "l6" -> "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] "l10" -> "l11" [label=[r1:=r1,]>] "l11" -> "l1" [label=[r1:=p1,]>] "l11" -> "l4" [label=] diff --git a/experiments/saved_results/servers/ra/lakers/hyp7.dot b/experiments/saved_results/servers/ra/lakers/hyp7.dot index c880f427..330fc5e0 100644 --- a/experiments/saved_results/servers/ra/lakers/hyp7.dot +++ b/experiments/saved_results/servers/ra/lakers/hyp7.dot @@ -39,16 +39,16 @@ digraph RA { "l6" -> "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l14" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] "l10" -> "l11" [label=[r1:=r1,]>] "l11" -> "l1" [label=[r1:=p1,]>] "l11" -> "l4" [label=] diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.dot b/experiments/saved_results/servers/ra/lakers/learnedModel.dot index c880f427..330fc5e0 100644 --- a/experiments/saved_results/servers/ra/lakers/learnedModel.dot +++ b/experiments/saved_results/servers/ra/lakers/learnedModel.dot @@ -39,16 +39,16 @@ digraph RA { "l6" -> "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l14" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] "l10" -> "l11" [label=[r1:=r1,]>] "l11" -> "l1" [label=[r1:=p1,]>] "l11" -> "l4" [label=] diff --git a/experiments/saved_results/servers/ra/lakers/learnedModel.pdf b/experiments/saved_results/servers/ra/lakers/learnedModel.pdf index a086a6642582eca8a12977342b1e0be7b96f945a..1dfc4e4e8f7eea79798e6ec8905293d109bb908c 100644 GIT binary patch delta 15754 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 delta 15538 zcma*Mby!@z+C7YGareR926uONcX#)~palxW1}GGFcXuf6P@Lkf#i3|F`n>0ySAPF| zJG1v(Sy^{-C%JPad#}0#$jmrM1Zq`DX=Zj7u0#ZBkU>1PoLf+h$!ySRYMR6bYbw(? zG6E4%nAxi-GovLJ)cChl$CoXz?WU()Y zUsC>*H3PkW5Xr+k@_o%S_y?~?u9lu}9u%ZVd#vfOB zNg`1Ul&`HH*o|k;92yUClp-uB$vH5stV)R$T*PyTC?HhDoEOis(Z|Z}PVY^^QE~L8xf47_u z&DVgqbz-S!LOzJ6evL$wf7>zlbFC+Fj~l;^gc5c8XaSGlWt0jE`*H|CZ)d7#JiO08 zL_`G6J=TRY9gygGc9%kCf1SK#x9A8=hn623g8H%-N|KL~yhC01xruURWZzekQ(002 zhdWck)p5LDI>30w5#6lER>MFP*L^?O5?T<%N_1>7r2R|*@7a7~$ehFHUG1%wReSkg$@>-nht0I7h0*x!Fd~`G_71Y$8qoFaQ2H?0pK~w> zCBDbE{`g8pgrj&^?2@e+2Kyd;C{FW?W-omKi#-^l6Emo7bb% zpKgv;x6PB~Y`_FwnV4^asOL_0L4sYNE2J05x4Uz$vaT@s{{R7{<;5cL{Jz`ap4_6Lsywy4^E-6D~HVi8P9dZTL|fIdG0eit zhQrPA`N(2O`6nT~<%R^)$f<(};!2EkVwm9>N*%g$6s+33yQUOVRQHE@Z}Op-h7nFZue2FtBckH%dbnW0wbmKraE9$ zHE;dRRNvPMEg*TML)MF$f0d6D+l89=2fpv=#xjy}@3Ir6*D?|^5mazsC7_))6Rkda z?N@dv$~djz@VKbc3dzqJ(~Wym?jbQIN5FV6g~F~4DMheP!*f=Wy$84c4DTBDcC4e4 z{b!%-DxN5_UP(LJG^Mt7%;*iF<~kAqZyyZ<4jb=Iy?2MLVZYxd<6D7dgxJANp?8=g zv?uY89NH!UNi>lWW)MpvrerB`uOk)4V2J8q$Ih|zS#OFZ2aJ_Hvsy}{r*LD-@PZ1 zU>f=@;6h6NA{2&VZH!%Zs|$bFA))tKbrI0#OS*9r%z4qx${q%DBSk68#=|jmdmd+X zPgju`el38`jatrJYUEnyH3q=(YF z7wSexvmP$t_5$xU695}Xm{C~vnq4vqA*zzPG&zW4?zn-WO(x8DT?m%(TYDQ2Yafx^ zN0?sR3yvTFk<$eIZ5Bxl{n4_;Gr67=sO7vU!ck`>B#7jpQlV+zgv(Szyt|oEc_*Z| z0eNBaT#uk{P)LM+vN+eGGSNT3%)m*Dk*=lrtCJ#xO6>KYDLsT@JT$#r$Nnke`ubr0 zT|+TS$wxtX4HNZ3{TF~|1jZeYx`kNalCMkXqbGDcgcwC$E?(GphUev-lG*>b^}2@(W5}2JEkt2JfFE|JOD*maedBo?E>ESSxt>^tS_!h zl>$f2b+TU}F>F zb49JPAzZYprbIm}2Ly68i6zJ8j1FY=Hl~rWn^x~leGYr^g)dXX@JS$cI9Td5+BGrI zUt^%Vlb#!&M>=>!|5K8gNDQ}VJ{-H^q4+q+(KiZ(&zpX^VA(Y)Ld(|!ok+@C8-^gP zfNby-Jw{%$>jW`RpaAvS&R+6tpZqgnDDBapa|dtQm%1@C+{};klYVs3q@{`s*Y`)v zfr6I_wlF9*M~7GyQ018Q=nz*B%>h5)%Jb}X>7G{85s{D`EaF{$0uu9GaV$J&t8KDD zDO?L5B3N)Mk7iXc1$PMf8x^WOCESgUnQ&x&GCI?E0h$cr6G|}1(LP2@%|NvAe&m8x zqa$M#XE{{6u_M(sqMxAiO8CteMH%g|WgCTbkxmj0*;S2x%new?kj z?X2u&niu34bUp+qkC;TwkHl+u`f(*}Ft;x*FBVIz8+$UVAL3NV#@Us+%1t4CMSS0F zz52_GwXrZ|s4`3rKpxx^d8=zv?krVl1zF*S(p@rmh!#;}vEAYUd&t?t1^4`q+wAh=Z`$!GKj-ubW>#?H=g(C+bB)| z*e^a?fZ1Ig13=O?jOuHgRO^vYZ1+s@sm7l?s}oVQZtd!kCU+og2|F-; z2Eu!K%dO!I!eQtz=Wi4rD#ys?3B{pYzSK4mpAqL1tky|`j8!#*qcjUqo<1g=2b-oL zGzW6dtl63Dfr2M|px@|kzx0kYtq&$cX9Fjpl z^nGTj7|@W=9xZU$P%so#QcyAi}|MF?DQu3IhgSDUK~!#I+}JbG==i}_#qWUaRUIYBAe z=}Cc*ur2WX3yTnR=#Cw>ltbJxIwm6n+5pl*6d2lj=HqH9hB&P0x*$n`TqG!{u=s0Dg5BdVhnc?m)X|6x$=P78 zGH8kl#xn#z?V1Ib8mg*6>8cH2<|7b&TaZT{8~syh_pqSBlt0gvW5o9n=M?*2_64k+ zjlVu$=ite}Xpqxe^mB$Riiz_0m=0<^?Fs2mlML%Bk>mEs7<84BYL9kB{WPzY- z3!&#I6X`#w=DF;xA^JoouUn@eAw<{SI%qKv3~+UMw^D|un`xIJ*lX$fC8L^53ugVO z%}Ib4F0_rdA!i^VpA^-na?LDaP7%j$_!(o3bt0pr2|($hbP`u%q5J+sbI30$$9V9R zHY*oHt%j*)b}pT`T#p9#`nyQUX#gZe_+d}_<8Kx>0{1=18oS?dm{G_I4On=0II*R1 zn1#FZ;CU@i;i&eUDuie<8D)$(;0c$Q3%&)5+UH#Wu4L?I;eyP(Z(+7W(YFK)s{}M` z149iA3|!M?)a3q}bL%6Yk#u)?Q5M*`(h}-dC_#KD(emWyl?GNf&L=C^m>wWyevn$5 zH1;}xI#Obl36Iv9yuKdRD!+2OACbXzwX?MdcDVIyv>CDJ7#(4qqN2$%WeiFC ze|DsF6PbF@B>GfgPQm`8Hl73%LP=Kyr^|$(f+&@VaF+B-!gm&Qg$W{gSxFJq=E%jo zBt(W43T{~<$*BEw*+zOplIGc?@X7)QmRLhx z*2A6y^F3u$*SZtR0tX=f6FmxK6%a1Roq}AvaZUhlp)nDAuMC2l*Y2_q?=VHDd=c`} zV4LGe4NAAgrEH1;5dCmjA}F-9DPPdrZp2nlC*h77_LV0itc0Y#!xwkGQd<;D&nVu zCE7`S3cb+LAiE*Q$W)Uirc(WdbvAW?piPq9nFc+#)$nFPtLUio&P%fu%iOMrAYTVk z6z=oO6_2dz29pd3-G!@f-y8dU#3IL6C&4k@7$rw&3+A#mANy!%3SAcO=M5Zi zT7qb{AP2?ZU@r@ugVH2MJNq5et31i~KTS+Gc%&syznODE`hg+*CCOD>cai`6#*2GussxwY#(Tlz$)pGDti?e1s2zGFI;+xzd!3qry%NR zOcP=UU295$s%+i%7bhW2iZc%UuAppn!{M?Ar=c~Qd?pK2QQIP;Hb~J#8PiT7umz;A zmJ;F8!!XC!4jIndx{mzBEotK1Ow0oiuHkVrZt=W&Z`LO8Ihucd<;$Hf=l4s5Gn=gg;>1Z}W+d{01lYyNev2-2wv7GP zu_niTDh<9rpGTpPTYkA_j{Gie$1T+y3iWGLGy@?`eX_z}IG&SeObE3TotHu%$zb>d z&+YFfJh(eK45@UqOX|kr5qlLYS+$;*^AmYP?9dqD(9SNlujjLcFd0}m3_$D?j801n z5Pg0Qxr5*S-TY0{b3fAW@Vk_fNtm zr`5LtTjMoFn^C+c;Edg06EPi))9d^S&L?&ch8?Q z4h)?ICwpS~Nb$%<3f0?xJ(H`Ake!IE8Dv06Y+2mJPJvIWFMdQd$h{9H`Zj+A0u~x# z=p^S2Qw7wzYPyWm5R{N4AY}GY`Kw*`wL?@fNen^8;U%f+GV?JWM4*5oXDu3x)|C(WWMkRDf+9d2^ zBR?gEZgiFPk?JI5c4ch6qH_K^PS?3*)@hlIo{ij9pw8ms+xG=BlR7&$UsdVZ-tG~a zJ(tQc8sZ?{x{`ZnVPb& zVV-OSi?q&Kp_BLi=FC5nJ%MO)>Y>AuJ6gVT-yTov*2~Ff+ppxl8b&#V+#W9^PKMA8 zMA#bDIXnLRYYgP>?HVytK{CJ;$~b@^_`2bZSBlKc)4-;*^+h*C4EIP3h-(DjwT@`C zT!$n0S??pyU`YWnm7=9_-PMP3H*vSB`;4baS<}c#C ztWBLEwbOSK4Up@$A~L>*9D9+Vo7O`%;F9+ULE-SGpq)vTg~|Ew-jC3j#(V7r2rmx= z6n=q<@cR4p=k)gg83qPa`r9!3b3ABk z!J~MTZb?>aFZ6oVmCILzrG+`J7-*5y?yQQf6WdoXX)g?T>1qXvcqq!4|MM1JS-!LD zS8?)0Bj4_FQlYhRf0eIrZ4A4%zBeK$cL7487pp2)udZS!tWi709>{`gMm=`e`yA?f z(-{Ndv$|DIAf2<*l}{b?;hQkK7jzlmbGR&o{Ra|`Z>Cr=V&)M zL^%YY+8~b}0z%Ii-wBGiu`9dAFJgi7 zE%y>|&0QORYOW*3S=EjWKs&ZXX7+Vz z7JQ(hk&Zcg1lC!#x)H;qXewv3gquUiH- zg7EjL#f4m1H~txkdzVr8;MK+Jc4o%%n%|9AmVgg=p3ayERv;e&ImS11sEALFnc-t- zQ+tDY{PL&}t(XObv?L|jpzckYSeWLG2feeZpze$LUop9U&A$pxP#yucL>7?=OT_ry zi4yt2M%1l?Gjj}4YA#~OTEH0Ei&^o}ICH+++M!N~3;$jt$q+A%jpphxz1n>Y{IHBE z8u+zT9knBK*Rp(kFJEehO4Z6}WCcLzFI-1EBvjZux@iYkgHKCvpr=&u7TveO*~Tbz z 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≧%a7 z7*1zPdU^)UHi|FU<%PY<(yB?If|&7=y&*wbpMsb@DJhm|xqKc3LrtpL@IYsDSt_3N zm{{tz{&hoV;HXd^stR7)wllCZn}lYd)eObbHZF#UKYgzk0CG2^lCg;lK9Vq}3UCb{ zCsl$AGYzApLgv;>wv3}P3jpG=Q0L_iMOY^Q1aaqORc$ybskT%Opo#`AH26Tks~pq7 zOJI)t$2-S%*&kkuL{wpxNw^ec^cXB&aB?BW8WdFNm}s5z5^_o6Yb8zm`1qGMz=#hwE{a0mvod2}pJ@xda#J zo%P>|gO3gH_x_tW*#Fk>H*s@t|Npu<-g$rdyc~Zmx&F!V0RPG|JltFWUN&|B5Abit zc=&h$ygb17mbd`o?^#YB05>-$;9cF}c*ozF?0f+3_wx55E+BxLm+QTl8^Fu?7x~8@ z?!V9f^7H)(Mwg=acQ?2>{}yrb{2kZ-oBq1@kGAtJ(YRomLIVBwIJ5sP|92It?k<*I7FO;6Itw#9cNYLV z3p+Op8-UK%)6><1pOy6=)W+S+)z;3!gT=+&hMxYPrX=2j#M92jS<=kY3P2~x4`c&! zvT?JsvvYIs0@?NH|EI?s@9lxVh#-LeOOBE-^E7jGvH7Q(zXF)Yza+2!_R!be${L9c zz|M)p_MZ#D&BevR1+WJE7sk%R&GtTte=mUZzc4ml4&eI){~rwaH%$J)K>s1Kv9WXg zKSXxEcO~tA8ME`S|Ba6Sg|YE+asFT1_fE6Fck+Mn-m$;&^*=EX8#^~I@ZaA2+nINa z>pc?wCz0*FcYnj{|6n}4|HDB~cQZRjEBAlIL=8KCtG}c5k3{F<@;={xhx{J_l2y*x i`h8aa2?@f#lj7lN=I;5=0JHPFuLC4%YAF?Ir2h}J+Olo{ diff --git a/experiments/saved_results/servers/ra/lakers/learnedModelShortNames.pdf b/experiments/saved_results/servers/ra/lakers/learnedModelShortNames.pdf deleted file mode 100644 index 8732572aa5d4f418e8b1f7202b452a80b4fbcbcf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41992 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 P`nbUNXlb7)NZk7$cw "l7" [label=] "l7" -> "l6" [label=] "l8" -> "l1" [label=[r1:=p1,]>] +"l8" -> "l4" [label=] "l8" -> "l4" [label=] "l8" -> "l9" [label=[r1:=r1,]>] -"l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l10" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l13" [label=[r1:=r1,]>] "l8" -> "l14" [label=[r1:=r1,]>] -"l9" -> "l11" [label=[r1:=r1,]>] +"l9" -> "l11" [label=[r1:=r1,]>] "l10" -> "l11" [label=[r1:=r1,]>] "l11" -> "l1" [label=[r1:=p1,]>] "l11" -> "l4" [label=] diff --git a/experiments/saved_results/servers/ra/lakers/learnedModelbtf.pdf b/experiments/saved_results/servers/ra/lakers/learnedModelbtf.pdf new file mode 100644 index 0000000000000000000000000000000000000000..86f653e8ef8851d1298cfddfd81df499d8f3a85f GIT binary patch literal 21013 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 Date: Fri, 30 Jan 2026 17:11:50 +0100 Subject: [PATCH 160/169] adjust rount limits for ra ci --- .github/workflows/ci-ra.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index 6ad9d503..f2d3020c 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -30,7 +30,7 @@ jobs: - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -69,7 +69,7 @@ jobs: - name: Test Lakers Server (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -104,7 +104,7 @@ jobs: - name: Test RISE Client (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -174,7 +174,7 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -209,7 +209,7 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 From 55332f907caa64b63324ed338d82c31b62172de5 Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Fri, 30 Jan 2026 17:52:54 +0100 Subject: [PATCH 161/169] time limits instead of round limits --- .github/workflows/ci-ra.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index f2d3020c..24c92a51 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -30,7 +30,7 @@ jobs: - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -timeLimit PT3M - name: Upload results uses: actions/upload-artifact@v4 @@ -40,7 +40,7 @@ jobs: experiments/results/clients/ra/lakers - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 4 Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -69,7 +69,7 @@ jobs: - name: Test Lakers Server (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -timeLimit PT15M - name: Upload results uses: actions/upload-artifact@v4 @@ -79,7 +79,7 @@ jobs: experiments/results/servers/ra/lakers - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 7 RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -104,7 +104,7 @@ jobs: - name: Test RISE Client (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -timeLimit PT10M - name: Upload results uses: actions/upload-artifact@v4 @@ -114,7 +114,7 @@ jobs: experiments/results/clients/ra/rise_m4_app - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 9 RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -139,7 +139,7 @@ jobs: - name: Test RISE Server (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -timeLimit PT13M - name: Upload results uses: actions/upload-artifact@v4 @@ -149,7 +149,7 @@ jobs: experiments/results/servers/ra/rise_m4_app - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 4 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -174,7 +174,7 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -timeLimit PT5M - name: Upload results uses: actions/upload-artifact@v4 @@ -184,7 +184,7 @@ jobs: experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 9 uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -209,7 +209,7 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -timeLimit PT6M - name: Upload results uses: actions/upload-artifact@v4 From faab17c63bae1bd46610da5039be1ecd7867a6aa Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Fri, 30 Jan 2026 18:03:27 +0100 Subject: [PATCH 162/169] Revert "time limits instead of round limits" This reverts commit 55332f907caa64b63324ed338d82c31b62172de5. --- .github/workflows/ci-ra.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index 24c92a51..f2d3020c 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -30,7 +30,7 @@ jobs: - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -timeLimit PT3M + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -40,7 +40,7 @@ jobs: experiments/results/clients/ra/lakers - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 4 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 3 Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -69,7 +69,7 @@ jobs: - name: Test Lakers Server (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -timeLimit PT15M + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -79,7 +79,7 @@ jobs: experiments/results/servers/ra/lakers - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 7 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -104,7 +104,7 @@ jobs: - name: Test RISE Client (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -timeLimit PT10M + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -114,7 +114,7 @@ jobs: experiments/results/clients/ra/rise_m4_app - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 9 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -139,7 +139,7 @@ jobs: - name: Test RISE Server (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -timeLimit PT13M + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -149,7 +149,7 @@ jobs: experiments/results/servers/ra/rise_m4_app - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 4 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 3 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -174,7 +174,7 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -timeLimit PT5M + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 @@ -184,7 +184,7 @@ jobs: experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 9 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -209,7 +209,7 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -timeLimit PT6M + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 From 3ec4c25d25f68dc72a060ea85d4bacef5a00d83b Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Fri, 30 Jan 2026 18:07:54 +0100 Subject: [PATCH 163/169] adjust round limits further --- .github/workflows/ci-ra.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index f2d3020c..51a6447c 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -30,7 +30,7 @@ jobs: - name: Test Lakers Client (RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 @@ -40,7 +40,7 @@ jobs: experiments/results/clients/ra/lakers - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 2 Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -139,7 +139,7 @@ jobs: - name: Test RISE Server (m4_app, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 3 + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 - name: Upload results uses: actions/upload-artifact@v4 @@ -149,7 +149,7 @@ jobs: experiments/results/servers/ra/rise_m4_app - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 2 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -209,7 +209,7 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 5 + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 - name: Upload results uses: actions/upload-artifact@v4 From 9ca3a26e171e8f83f35bdff6228ddc295aacfadb Mon Sep 17 00:00:00 2001 From: Kostis Sagonas Date: Mon, 2 Feb 2026 11:49:35 +0100 Subject: [PATCH 164/169] Update setup_fuzzer.sh Use official PSF repo instead of its clone. --- scripts/setup_fuzzer.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/setup_fuzzer.sh b/scripts/setup_fuzzer.sh index 65743cae..26a41636 100755 --- a/scripts/setup_fuzzer.sh +++ b/scripts/setup_fuzzer.sh @@ -12,7 +12,7 @@ setup_psf() { set -e cd "${BASE_DIR}" - git clone "https://github.com/00oskpet/protocol-state-fuzzer.git" + git clone "https://github.com/protocol-fuzzing/protocol-state-fuzzer.git" cd protocol-state-fuzzer git checkout "${CHECKOUT}" bash ./install.sh From f8bf1374d5d6ac86ba78dd10eb5ea81f531a8d3d Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Mon, 2 Feb 2026 20:59:33 +0100 Subject: [PATCH 165/169] re-add sifis-home in ci but commented out --- .github/workflows/ci-ra.yml | 116 ++++++++++++++++++++++++++---------- .github/workflows/ci.yml | 111 ++++++++++++++++++++++++++-------- 2 files changed, 171 insertions(+), 56 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index 51a6447c..4a01972c 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -21,23 +21,19 @@ jobs: run: ./scripts/setup_fuzzer.sh -l - name: Setup Lakers - run: | - curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + run: curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y source "${HOME}/.cargo/env" rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu ./scripts/setup_sul.sh lakers - - name: Test Lakers Client (RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 + run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 with: name: Lakers Client - path: | - experiments/results/clients/ra/lakers + path: experiments/results/clients/ra/lakers - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 2 @@ -61,22 +57,19 @@ jobs: run: ./scripts/setup_fuzzer.sh -l - name: Setup Lakers - run: | - curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + run: curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y source "${HOME}/.cargo/env" rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu ./scripts/setup_sul.sh lakers - name: Test Lakers Server (RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 + run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 with: name: Lakers Server - path: | - experiments/results/servers/ra/lakers + path: experiments/results/servers/ra/lakers - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 @@ -103,15 +96,13 @@ jobs: run: ./scripts/setup_sul.sh rise - name: Test RISE Client (m4_app, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 + run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 with: name: RISE Client - path: | - experiments/results/clients/ra/rise_m4_app + path: experiments/results/clients/ra/rise_m4_app - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 @@ -138,15 +129,13 @@ jobs: run: ./scripts/setup_sul.sh rise - name: Test RISE Server (m4_app, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 + run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 - name: Upload results uses: actions/upload-artifact@v4 with: name: RISE Server - path: | - experiments/results/servers/ra/rise_m4_app + path: experiments/results/servers/ra/rise_m4_app - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 2 @@ -173,18 +162,16 @@ jobs: run: ./scripts/setup_sul.sh uoscore-uedhoc - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 + run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Client - path: | - experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore + path: experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -208,15 +195,82 @@ jobs: run: ./scripts/setup_sul.sh uoscore-uedhoc - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) - run: | - java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 + run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Server - path: | - experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore + path: experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + + SIFIS-HOME-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + java-version: '17' + distribution: 'temurin' + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup SIFIS-HOME + run: ./scripts/setup_sul.sh sifis-home + + - name: Test SIFIS-HOME Client (phase_1, RA) + run: java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra + + - name: Upload results + uses: actions/upload-artifact@v4 + with: + name: SIFIS-HOME Client + path: experiments/results/clients/ra/sifis-home_phase_1 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 3 + + # SIFIS-HOME-Server: + # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + # runs-on: ubuntu-latest + # strategy: + # fail-fast: true + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-java@v4 + # with: + # java-version: '17' + # distribution: 'temurin' + # - uses: ts-graphviz/setup-graphviz@v2 + # - name: Install pydot + # run: pip3 install pydot + + # - name: Setup EDHOC-Fuzzer + # run: ./scripts/setup_fuzzer.sh -l + + # - name: Setup SIFIS-HOME + # run: ./scripts/setup_sul.sh sifis-home + + # - name: Test SIFIS-HOME Server (phase_1, RA) + # run: java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra + + # - name: Compress results + # run: tar -czf sifis-home_phase_1_server_ra.tar.gz experiments/results/servers/ra/sifis-home_phase_1 + + # - name: Upload results + # uses: actions/upload-artifact@v4 + # with: + # name: SIFIS-HOME Server + # path: experiments/results/servers/ra/sifis-home_phase_1 + + # - name: Diff RA + # run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 16 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8b5ad774..ccda8bc2 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,15 +28,13 @@ jobs: ./scripts/setup_sul.sh lakers - name: Test Lakers Client (Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 + run: java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 with: name: Lakers Client - path: | - experiments/results/clients/mealy/lakers + path: experiments/results/clients/mealy/lakers - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/lakers experiments/results/clients/mealy/lakers 3 @@ -67,15 +65,13 @@ jobs: ./scripts/setup_sul.sh lakers - name: Test Lakers Server (Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 + run: java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 with: name: Lakers Server - path: | - experiments/results/servers/mealy/lakers + path: experiments/results/servers/mealy/lakers - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/mealy/lakers 2 @@ -102,15 +98,13 @@ jobs: run: ./scripts/setup_sul.sh rise - name: Test RISE Client (m4_app, Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 + run: java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 - name: Upload results uses: actions/upload-artifact@v4 with: name: RISE Client - path: | - experiments/results/clients/mealy/rise_m4_app + path: experiments/results/clients/mealy/rise_m4_app - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 @@ -137,20 +131,17 @@ jobs: run: ./scripts/setup_sul.sh rise - name: Test RISE Server (m4_app, Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 + run: java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 - name: Upload results uses: actions/upload-artifact@v4 with: name: RISE Server - path: | - experiments/results/servers/mealy/rise_m4_app + path: experiments/results/servers/mealy/rise_m4_app - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 - uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} runs-on: ubuntu-latest @@ -173,15 +164,13 @@ jobs: run: ./scripts/setup_sul.sh uoscore-uedhoc - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 + run: java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Client - path: | - experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore + path: experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 @@ -208,15 +197,87 @@ jobs: run: ./scripts/setup_sul.sh uoscore-uedhoc - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) - run: | - java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 + run: java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 - name: Upload results uses: actions/upload-artifact@v4 with: name: uOSCORE-uEDHOC Server - path: | - experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore + path: experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 + + # SIFIS-HOME-Client: + # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + # runs-on: ubuntu-latest + # strategy: + # fail-fast: true + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-java@v4 + # with: + # java-version: '17' + # distribution: 'temurin' + # - uses: ts-graphviz/setup-graphviz@v2 + # - name: Install pydot + # run: pip3 install pydot + + # - name: Setup EDHOC-Fuzzer + # run: ./scripts/setup_fuzzer.sh -l + + # - name: Setup SIFIS-HOME + # run: ./scripts/setup_sul.sh sifis-home + + # - name: Test SIFIS-HOME Client (phase_1, Mealy) + # run: | + # java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 + + # - name: Upload results + # uses: actions/upload-artifact@v4 + # with: + # name: SIFIS-HOME Client + # path: | + # experiments/results/clients/mealy/sifis-home_phase_1 + + # - name: Diff Mealy + # run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 + + # SIFIS-HOME-Server: + # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + # runs-on: ubuntu-latest + # strategy: + # fail-fast: true + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-java@v4 + # with: + # java-version: '17' + # distribution: 'temurin' + # - uses: ts-graphviz/setup-graphviz@v2 + # - name: Install pydot + # run: pip3 install pydot + + # - name: Setup EDHOC-Fuzzer + # run: ./scripts/setup_fuzzer.sh -l + + # - name: Setup SIFIS-HOME + # run: ./scripts/setup_sul.sh sifis-home + + # - name: Test SIFIS-HOME Server (phase_1, Mealy) + # run: | + # java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 + + # - name: Compress results + # run: | + # tar -czf sifis-home_phase_1_server_mealy.tar.gz experiments/results/servers/mealy/sifis-home_phase_1 + + # - name: Upload results + # uses: actions/upload-artifact@v4 + # with: + # name: SIFIS-HOME Server + # path: | + # experiments/results/servers/mealy/sifis-home_phase_1 + + # - name: Diff Mealy + # run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 From 210219582d2347e81ed0d0ce94dbbb4b1e623032 Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Thu, 5 Feb 2026 17:05:18 +0100 Subject: [PATCH 166/169] remove uploading artifacts step in ci --- .github/workflows/ci-ra.yml | 42 ------------------------------------- .github/workflows/ci.yml | 36 ------------------------------- 2 files changed, 78 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index 4a01972c..f00193fd 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -29,12 +29,6 @@ jobs: - name: Test Lakers Client (RA) run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: Lakers Client - path: experiments/results/clients/ra/lakers - - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 2 @@ -65,12 +59,6 @@ jobs: - name: Test Lakers Server (RA) run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: Lakers Server - path: experiments/results/servers/ra/lakers - - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 @@ -98,12 +86,6 @@ jobs: - name: Test RISE Client (m4_app, RA) run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: RISE Client - path: experiments/results/clients/ra/rise_m4_app - - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 @@ -131,12 +113,6 @@ jobs: - name: Test RISE Server (m4_app, RA) run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: RISE Server - path: experiments/results/servers/ra/rise_m4_app - - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 2 @@ -164,12 +140,6 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: uOSCORE-uEDHOC Client - path: experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore - - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 @@ -197,12 +167,6 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: uOSCORE-uEDHOC Server - path: experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore - - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 @@ -230,12 +194,6 @@ jobs: - name: Test SIFIS-HOME Client (phase_1, RA) run: java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: SIFIS-HOME Client - path: experiments/results/clients/ra/sifis-home_phase_1 - - name: Diff RA run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 3 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ccda8bc2..73323670 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,12 +30,6 @@ jobs: - name: Test Lakers Client (Mealy) run: java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: Lakers Client - path: experiments/results/clients/mealy/lakers - - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/lakers experiments/results/clients/mealy/lakers 3 @@ -67,12 +61,6 @@ jobs: - name: Test Lakers Server (Mealy) run: java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: Lakers Server - path: experiments/results/servers/mealy/lakers - - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/mealy/lakers 2 @@ -100,12 +88,6 @@ jobs: - name: Test RISE Client (m4_app, Mealy) run: java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: RISE Client - path: experiments/results/clients/mealy/rise_m4_app - - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 @@ -133,12 +115,6 @@ jobs: - name: Test RISE Server (m4_app, Mealy) run: java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: RISE Server - path: experiments/results/servers/mealy/rise_m4_app - - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 @@ -166,12 +142,6 @@ jobs: - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) run: java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: uOSCORE-uEDHOC Client - path: experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore - - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 @@ -199,12 +169,6 @@ jobs: - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) run: java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 - - name: Upload results - uses: actions/upload-artifact@v4 - with: - name: uOSCORE-uEDHOC Server - path: experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore - - name: Diff Mealy run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 From 58696fa9ca7a339f3c6c9b68dde668660a1a2a6d Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Thu, 5 Feb 2026 17:25:16 +0100 Subject: [PATCH 167/169] remove unnecessary steps in ci --- .github/workflows/ci-ra.yml | 451 +++++++++++++++++------------------ .github/workflows/ci.yml | 458 +++++++++++++++++------------------- 2 files changed, 436 insertions(+), 473 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index f00193fd..fd814c90 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -2,233 +2,224 @@ name: CI RA-learning on: [push, pull_request] jobs: - Lakers-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup Lakers - run: curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y - source "${HOME}/.cargo/env" - rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu - ./scripts/setup_sul.sh lakers - - - name: Test Lakers Client (RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 2 - - Lakers-Server: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup Lakers - run: curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y - source "${HOME}/.cargo/env" - rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu - ./scripts/setup_sul.sh lakers - - - name: Test Lakers Server (RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 - - RISE-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup RISE - run: ./scripts/setup_sul.sh rise - - - name: Test RISE Client (m4_app, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 - - RISE-Server: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup RISE - run: ./scripts/setup_sul.sh rise - - - name: Test RISE Server (m4_app, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 2 - - uOSCORE-uEDHOC-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup uOSCORE-uEDHOC - run: ./scripts/setup_sul.sh uoscore-uedhoc - - - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 - - uOSCORE-uEDHOC-Server: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup uOSCORE-uEDHOC - run: ./scripts/setup_sul.sh uoscore-uedhoc - - - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 - - SIFIS-HOME-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-java@v4 - with: - java-version: '17' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup SIFIS-HOME - run: ./scripts/setup_sul.sh sifis-home - - - name: Test SIFIS-HOME Client (phase_1, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 3 - - # SIFIS-HOME-Server: - # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - # runs-on: ubuntu-latest - # strategy: - # fail-fast: true - # steps: - # - uses: actions/checkout@v4 - # - uses: actions/setup-java@v4 - # with: - # java-version: '17' - # distribution: 'temurin' - # - uses: ts-graphviz/setup-graphviz@v2 - # - name: Install pydot - # run: pip3 install pydot - - # - name: Setup EDHOC-Fuzzer - # run: ./scripts/setup_fuzzer.sh -l - - # - name: Setup SIFIS-HOME - # run: ./scripts/setup_sul.sh sifis-home - - # - name: Test SIFIS-HOME Server (phase_1, RA) - # run: java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra - - # - name: Compress results - # run: tar -czf sifis-home_phase_1_server_ra.tar.gz experiments/results/servers/ra/sifis-home_phase_1 - - # - name: Upload results - # uses: actions/upload-artifact@v4 - # with: - # name: SIFIS-HOME Server - # path: experiments/results/servers/ra/sifis-home_phase_1 - - # - name: Diff RA - # run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 16 + Lakers-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup Lakers + run: + curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + source "${HOME}/.cargo/env" + rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu + ./scripts/setup_sul.sh lakers + + - name: Test Lakers Client (RA) + run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 2 + + Lakers-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup Lakers + run: + curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + source "${HOME}/.cargo/env" + rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu + ./scripts/setup_sul.sh lakers + + - name: Test Lakers Server (RA) + run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 + + RISE-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup RISE + run: ./scripts/setup_sul.sh rise + + - name: Test RISE Client (m4_app, RA) + run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 + + RISE-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup RISE + run: ./scripts/setup_sul.sh rise + + - name: Test RISE Server (m4_app, RA) + run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 2 + + uOSCORE-uEDHOC-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup uOSCORE-uEDHOC + run: ./scripts/setup_sul.sh uoscore-uedhoc + + - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) + run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + + uOSCORE-uEDHOC-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup uOSCORE-uEDHOC + run: ./scripts/setup_sul.sh uoscore-uedhoc + + - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) + run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 + + - name: Diff RA + run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + + # SIFIS-HOME-Client: + # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + # runs-on: ubuntu-latest + # strategy: + # fail-fast: true + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-java@v4 + # with: + # java-version: '17' + # distribution: 'temurin' + # - uses: ts-graphviz/setup-graphviz@v2 + # - name: Install pydot + # run: pip3 install pydot + + # - name: Setup EDHOC-Fuzzer + # run: ./scripts/setup_fuzzer.sh -l + + # - name: Setup SIFIS-HOME + # run: ./scripts/setup_sul.sh sifis-home + + # - name: Test SIFIS-HOME Client (phase_1, RA) + # run: | + # java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/client_phase_1_ra + # ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/sifis-home_phase_1 experiments/results/clients/ra/sifis-home_phase_1 3 + + # SIFIS-HOME-Server: + # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + # runs-on: ubuntu-latest + # strategy: + # fail-fast: true + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-java@v4 + # with: + # java-version: '17' + # distribution: 'temurin' + # - uses: ts-graphviz/setup-graphviz@v2 + # - name: Install pydot + # run: pip3 install pydot + + # - name: Setup EDHOC-Fuzzer + # run: ./scripts/setup_fuzzer.sh -l + + # - name: Setup SIFIS-HOME + # run: ./scripts/setup_sul.sh sifis-home + + # - name: Test SIFIS-HOME Server (phase_1, RA) + # run: | + # java -jar edhoc-fuzzerRA.jar @experiments/args/sifis-home/server_phase_1_ra + # ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/sifis-home_phase_1 experiments/results/servers/ra/sifis-home_phase_1 16 diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 73323670..14ba5c19 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -2,246 +2,218 @@ name: CI on: [push, pull_request] jobs: - Lakers-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup Lakers - run: | - curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y - source "${HOME}/.cargo/env" - rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu - ./scripts/setup_sul.sh lakers - - - name: Test Lakers Client (Mealy) - run: java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/lakers experiments/results/clients/mealy/lakers 3 - - Lakers-Server: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup Lakers - run: | - curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y - source "${HOME}/.cargo/env" - rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu - ./scripts/setup_sul.sh lakers - - - name: Test Lakers Server (Mealy) - run: java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/mealy/lakers 2 - - RISE-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup RISE - run: ./scripts/setup_sul.sh rise - - - name: Test RISE Client (m4_app, Mealy) - run: java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 - - RISE-Server: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup RISE - run: ./scripts/setup_sul.sh rise - - - name: Test RISE Server (m4_app, Mealy) - run: java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 - - uOSCORE-uEDHOC-Client: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup uOSCORE-uEDHOC - run: ./scripts/setup_sul.sh uoscore-uedhoc - - - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) - run: java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit 3 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 - - uOSCORE-uEDHOC-Server: - if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - runs-on: ubuntu-latest - strategy: - fail-fast: true - steps: - - uses: actions/checkout@v6 - - uses: actions/setup-java@v5 - with: - java-version: '21' - distribution: 'temurin' - - uses: ts-graphviz/setup-graphviz@v2 - - name: Install pydot - run: pip3 install pydot - - - name: Setup EDHOC-Fuzzer - run: ./scripts/setup_fuzzer.sh -l - - - name: Setup uOSCORE-uEDHOC - run: ./scripts/setup_sul.sh uoscore-uedhoc - - - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) - run: java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 - - - name: Diff Mealy - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 - - # SIFIS-HOME-Client: - # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - # runs-on: ubuntu-latest - # strategy: - # fail-fast: true - # steps: - # - uses: actions/checkout@v4 - # - uses: actions/setup-java@v4 - # with: - # java-version: '17' - # distribution: 'temurin' - # - uses: ts-graphviz/setup-graphviz@v2 - # - name: Install pydot - # run: pip3 install pydot - - # - name: Setup EDHOC-Fuzzer - # run: ./scripts/setup_fuzzer.sh -l - - # - name: Setup SIFIS-HOME - # run: ./scripts/setup_sul.sh sifis-home - - # - name: Test SIFIS-HOME Client (phase_1, Mealy) - # run: | - # java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 - - # - name: Upload results - # uses: actions/upload-artifact@v4 - # with: - # name: SIFIS-HOME Client - # path: | - # experiments/results/clients/mealy/sifis-home_phase_1 - - # - name: Diff Mealy - # run: ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 - - # SIFIS-HOME-Server: - # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} - # runs-on: ubuntu-latest - # strategy: - # fail-fast: true - # steps: - # - uses: actions/checkout@v4 - # - uses: actions/setup-java@v4 - # with: - # java-version: '17' - # distribution: 'temurin' - # - uses: ts-graphviz/setup-graphviz@v2 - # - name: Install pydot - # run: pip3 install pydot - - # - name: Setup EDHOC-Fuzzer - # run: ./scripts/setup_fuzzer.sh -l - - # - name: Setup SIFIS-HOME - # run: ./scripts/setup_sul.sh sifis-home - - # - name: Test SIFIS-HOME Server (phase_1, Mealy) - # run: | - # java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 - - # - name: Compress results - # run: | - # tar -czf sifis-home_phase_1_server_mealy.tar.gz experiments/results/servers/mealy/sifis-home_phase_1 - - # - name: Upload results - # uses: actions/upload-artifact@v4 - # with: - # name: SIFIS-HOME Server - # path: | - # experiments/results/servers/mealy/sifis-home_phase_1 - - # - name: Diff Mealy - # run: ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 + Lakers-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup Lakers + run: | + curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + source "${HOME}/.cargo/env" + rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu + ./scripts/setup_sul.sh lakers + + - name: Test Lakers Client (Mealy) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/lakers/client -roundLimit 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/lakers experiments/results/clients/mealy/lakers 3 + + Lakers-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup Lakers + run: | + curl --proto '=https' --tlsv1.3 https://sh.rustup.rs -sSf | sh -s -- -y + source "${HOME}/.cargo/env" + rustup toolchain install nightly-2025-05-10-x86_64-unknown-linux-gnu + ./scripts/setup_sul.sh lakers + + - name: Test Lakers Server (Mealy) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/lakers/server -roundLimit 3 + ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/lakers experiments/results/servers/mealy/lakers 2 + + RISE-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup RISE + run: ./scripts/setup_sul.sh rise + + - name: Test RISE Client (m4_app, Mealy) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/rise/client_m4_app -roundLimit 4 + ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/rise_m4_app experiments/results/clients/mealy/rise_m4_app 4 + + RISE-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup RISE + run: ./scripts/setup_sul.sh rise + + - name: Test RISE Server (m4_app, Mealy) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/rise/server_m4_app -roundLimit 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/rise_m4_app experiments/results/servers/mealy/rise_m4_app 5 + + # SIFIS-HOME-Client: + # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + # runs-on: ubuntu-latest + # strategy: + # fail-fast: true + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-java@v4 + # with: + # java-version: '17' + # distribution: 'temurin' + # - uses: ts-graphviz/setup-graphviz@v2 + # - name: Install pydot + # run: pip3 install pydot + + # - name: Setup EDHOC-Fuzzer + # run: ./scripts/setup_fuzzer.sh -l + + # - name: Setup SIFIS-HOME + # run: ./scripts/setup_sul.sh sifis-home + + # - name: Test SIFIS-HOME Client (phase_1, Mealy) + # run: | + # java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/client_phase_1 -roundLimit 4 + # ./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/sifis-home_phase_1 experiments/results/clients/mealy/sifis-home_phase_1 4 + + # SIFIS-HOME-Server: + # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + # runs-on: ubuntu-latest + # strategy: + # fail-fast: true + # steps: + # - uses: actions/checkout@v4 + # - uses: actions/setup-java@v4 + # with: + # java-version: '17' + # distribution: 'temurin' + # - uses: ts-graphviz/setup-graphviz@v2 + # - name: Install pydot + # run: pip3 install pydot + + # - name: Setup EDHOC-Fuzzer + # run: ./scripts/setup_fuzzer.sh -l + + # - name: Setup SIFIS-HOME + # run: ./scripts/setup_sul.sh sifis-home + + # - name: Test SIFIS-HOME Server (phase_1, Mealy) + # run: | + # java -jar edhoc-fuzzer.jar @experiments/args/sifis-home/server_phase_1 -roundLimit 5 + # ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/sifis-home_phase_1 experiments/results/servers/mealy/sifis-home_phase_1 5 + + uOSCORE-uEDHOC-Client: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup uOSCORE-uEDHOC + run: ./scripts/setup_sul.sh uoscore-uedhoc + + - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, Mealy) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore -roundLimit + 3./scripts/diff_hyps.sh experiments/saved_results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/mealy/uoscore-uedhoc_linux_edhoc_oscore 3 + + uOSCORE-uEDHOC-Server: + if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} + runs-on: ubuntu-latest + strategy: + fail-fast: true + steps: + - uses: actions/checkout@v6 + - uses: actions/setup-java@v5 + with: + java-version: "21" + distribution: "temurin" + - uses: ts-graphviz/setup-graphviz@v2 + - name: Install pydot + run: pip3 install pydot + + - name: Setup EDHOC-Fuzzer + run: ./scripts/setup_fuzzer.sh -l + + - name: Setup uOSCORE-uEDHOC + run: ./scripts/setup_sul.sh uoscore-uedhoc + + - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, Mealy) + run: | + java -jar edhoc-fuzzer.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore -roundLimit 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/mealy/uoscore-uedhoc_linux_edhoc_oscore 2 From 02f0dfd3273d42dbaca741de34f43ca91fd850b8 Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Thu, 5 Feb 2026 17:34:01 +0100 Subject: [PATCH 168/169] combine a few diff steps --- .github/workflows/ci-ra.yml | 42 ++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci-ra.yml b/.github/workflows/ci-ra.yml index fd814c90..2da51f1f 100644 --- a/.github/workflows/ci-ra.yml +++ b/.github/workflows/ci-ra.yml @@ -28,10 +28,9 @@ jobs: ./scripts/setup_sul.sh lakers - name: Test Lakers Client (RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 2 + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/client_ra -roundLimit 3 + ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/lakers experiments/results/clients/ra/lakers 2 Lakers-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -59,10 +58,9 @@ jobs: ./scripts/setup_sul.sh lakers - name: Test Lakers Server (RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/lakers/server_ra -roundLimit 5 + ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/lakers experiments/results/servers/ra/lakers 3 RISE-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -86,10 +84,9 @@ jobs: run: ./scripts/setup_sul.sh rise - name: Test RISE Client (m4_app, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/client_m4_app_ra -roundLimit 5 + ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/rise_m4_app experiments/results/clients/ra/rise_m4_app 3 RISE-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -113,10 +110,9 @@ jobs: run: ./scripts/setup_sul.sh rise - name: Test RISE Server (m4_app, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 2 + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/rise/server_m4_app_ra -roundLimit 2 + ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/rise_m4_app experiments/results/servers/ra/rise_m4_app 2 uOSCORE-uEDHOC-Client: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -140,10 +136,9 @@ jobs: run: ./scripts/setup_sul.sh uoscore-uedhoc - name: Test uOSCORE-uEDHOC Client (linux_edhoc_oscore, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/client_linux_edhoc_oscore_ra -roundLimit 5 + ./scripts/diff_hyps.sh experiments/saved_results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/clients/ra/uoscore-uedhoc_linux_edhoc_oscore 3 uOSCORE-uEDHOC-Server: if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} @@ -167,10 +162,9 @@ jobs: run: ./scripts/setup_sul.sh uoscore-uedhoc - name: Test uOSCORE-uEDHOC Server (linux_edhoc_oscore, RA) - run: java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 - - - name: Diff RA - run: ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 + run: | + java -jar edhoc-fuzzerRA.jar @experiments/args/uoscore-uedhoc/server_linux_edhoc_oscore_ra -roundLimit 4 + ./scripts/diff_hyps.sh experiments/saved_results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore experiments/results/servers/ra/uoscore-uedhoc_linux_edhoc_oscore 3 # SIFIS-HOME-Client: # if: ${{ !contains(github.event.head_commit.message, 'ci skip') }} From b6eabcc93d3da930264a830bfd9c023548297a15 Mon Sep 17 00:00:00 2001 From: Linus Olofsson Date: Thu, 5 Feb 2026 18:19:02 +0100 Subject: [PATCH 169/169] AlphabetBuilderWrapper rename to AlphabetBuilderEnum --- .../github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java index d16302b1..a3cd92e2 100644 --- a/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java +++ b/src/main/java/com/github/protocolfuzzing/edhocfuzzer/MultiBuilderRA.java @@ -8,7 +8,7 @@ import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.EdhocDataTypes; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.inputs.MessageInputTypeRA; import com.github.protocolfuzzing.edhocfuzzer.components.sul.mapper.symbols.outputs.MessageOutputTypeRA; -import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderWrapper; +import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.AlphabetBuilderEnum; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.DataTypeMap; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.EnumAlphabet; import com.github.protocolfuzzing.protocolstatefuzzer.components.learner.alphabet.PSFOutputSymbols; @@ -64,7 +64,7 @@ public class MultiBuilderRA implements .withOutput(MessageOutputTypeRA.EDHOC_MESSAGE_3_OSCORE_APP_OUTPUT, T_CI) .build(); - protected AlphabetBuilderWrapper dummyBuilder = new AlphabetBuilderWrapper( + protected AlphabetBuilderEnum dummyBuilder = new AlphabetBuilderEnum( alphabet); protected SulBuilder sulBuilder = new EdhocSulBuilderRA(alphabet);