Mixe for Privacy and Anonymity in the Internet
XML structs

This is the index of all XML structs used in the project.

1. XML Message send from LastMix to Mix n-1 during cascade init

<?xml version="1.0" encoding="utf-8" ?>
<Mixes count="1"> 
	<!-- <Mixes> contains an ordered list of the Mixes of the cascade --> 
	<!-- count gives the number of <Mix> elements -->
  <Mix id="..."> <!-- describes a single Mix -->
    <MixProtocolVersion>
      0.3|0.5|0.6
      <!-- Protocal Version / features of this Mix-->
     <!-- 0.3 is the normal "old" protocal; 0.4 was used only for testing; 0.5  simulated 1:n channels;0.6 indicates new flow control-->
    </MixProtocolVersion> 
    <RSAKeyValue> <!-- The public encryption key used by that Mix -->
      <Modulus></Modulus>
      <Exponent></Exponent>
    </RSAKeyValue>
    <Nonce>...</Nonce> <!-- A nonce used to detect reply attacks -->
    <Signature>...</Signature> <!-- digital signature of the <Mix>-element -->
    <KeepAlive>
      <!-- Gives information about the "Keep-Alive"-protocol 
		    between Mixes -->
      <SendInterval>
        <!-- minimum packet send interval (in seconds)
			     from Mix n to Mix n-1 -->
        ...
      </SendInterval>
      <ReceiveInterval>
        <!-- minimum packet receive interval (in seconds)
			     from Mix n-1 to Mix n -->
        ...
      </ReceiveInterval>
    </KeepAlive>
    <FlowControl>
      <!-- Information related to new flow control-->
      <UpstreamSendMe>
        <!-- Number of packets send in upstram direction which could be sent without wating of a SENDME-message from last mix-->
      </UpstreamSendMe>
      <DownstreamSendMe>
        <!-- Number of packets the last Mix will sent, before  he wait for a SENDME-message from JAP-->
      </DownstreamSendMe>
    </FlowControl>
  </Mix>
</Mixes>
2. Answer send from Mix n-1 to Mix n during cascade init

<?xml version="1.0" encoding="utf-8" ?>
<EncryptedKey>
  <EncryptionMethod Algorithm="RSA" />
  <CipherData>
    <CipherValue>...</CipherValue>
  </CipherData>
  <Nonce>...</Nonce>
  <KeepAlive>
    <!-- Gives information about the "Keep-Alive"-protocol 
		    between Mixes -->
    <SendInterval>
      <!-- minimum packet send interval (in seconds)
			     from Mix n-1 to Mix n -->
      ...
    </SendInterval>
    <ReceiveInterval>
      <!-- minimum packet receive interval (in seconds)
			     from Mix n to Mix n-1 -->
      ...
    </ReceiveInterval>
  </KeepAlive>
  <Signature>...</Signature>
</EncryptedKey>
3. Mix-Cascade info (and info about the FirstMix) send from the FirstMix to the InfoService.

<?xml version="1.0" ?>
<MixCascade id="...">
  <Name>...</Name>
  <Network>
    <ListenerInterfaces>
      <ListenerInterface>
        <Type>RAW/TCP</Type>
        <Port>..</Port>
        <Host>..</Host>
        <IP>..</IP>
      </ListenerInterface>
    </ListenerInterfaces>
  </Network>
  <Mixes count="..">
    <Mix id=".." />
    <!--- all the Information about the FirstMix -->
    <Mix id="." />
    <!-- only the id's of all other mixes of the cascade -->
  </Mixes>
  <LastUpdate>..</LastUpdate>
  <Payment required="true|false">
    <!--Gives payment related information to the JAP
      if required=="true" payment is required
      if required=="false" no paymetn is required
    -->
  </Payment>
  <Signature>..</Signature>
</MixCascade>
4. Mix-Cascade status send from the FirstMix to the InfoService.

<?xml version="1.0" encoding="utf-8" ?> 
<MixCascadeStatus id=".." 
                  currentRisk=".."
                  mixedPackets=".."
                  nrOfActiveUsers=".."
                  trafficSituation=".."
                  LastUpdate="..">
  <Signature>..</Signature>                  
</MixCascadeStatus>
5. Mix-HELO send from the Middle- or LastMix to the InfoService to announce itself.

<?xml version="1.0" encoding="utf-8" ?>
<Mix id="...">
  <Name>..</Name>
  <Location>
  ...
  </Location>
  <Proxies> <!-- Only for the Last Mix -->
    <Proxy>
      <VisibleAddresses> <!-- Describes the visible addresses from the 'outside world' -->
        <VisibleAddress>
          <Host> <!-- Host or IP -->
          </Host>
        </VisibleAddress>
      </VisibleAddresses>
    </Proxy>
  </Proxies>
  <Operator>
    <Organisation>..</Organisation>
    <URL>..</URL>
  </Operator>
  <Software>
    <Version>..</Version>
  </Software>
  <LastUpdate>..</LastUpdate>
  <DataRetention>
    <!--Data retention related information. this element is given, iff the Mix supports data retention-->
    <LoggedElements>
      <!--Describes which elements are logged-->
      <InputTime>TRUE|FALSE</InputTime> <!--If TRUE, the time of packet arrival is logged-->
      <OutputTime>TRUE|FALSE</OutputTime> <!--If TRUE, the time of packet sending / connetcion establishment is logged-->
      <InputChannelID>TRUE|FALSE</InputChannelID>  <!--If TRUE, the cahnnel id of incoming packet is logged-->
      <OutputChannelID>TRUE|FALSE</OutputChannelID> <!--If TRUE, the cahnnel id of outgoing packet is logged-->
      <InputSourceIPAddress>TRUE|FALSE</InputSourceIPAddress><!--If TRUE, the source IP address of incoming connection is logged-->
      <InputSourceIPPort>TRUE|FALSE</InputSourceIPPort> <!--If TRUE, the source IP port of incoming connection is logged-->
      <OutputSourceIPAddress>TRUE|FALSE</OutputSourceIPAddress> <!--If TRUE, the source IP address of outgoing connection is logged-->
      <OutputSourceIPPort>TRUE|FALSE</OutputSourceIPPort>    <!--If TRUE, the source IP port of outgoing connection is logged-->
    </LoggedElements>
    <RetentionPeriod>
      <!-- The periof od time the log are retained;
      given as xs:duration (see: http://www.w3.org/TR/xmlschema-2/#duration)
      -->
    </RetentionPeriod>
    <Description lang="LANGID"><!--Contains information about dat retention -->
      <URL></URL><!--URL of a Web-Site with information about data retention-->
    </Description>
  </DataRetention>
  <Signature>..</Signature>
</Mix>
6. Mix-KeyInfo send from the FirstMix to the JAP.

<?xml version="1.0" ?>
<MixCascade version="0.2">
	<MixProtocolVersion>
		<!-- "0.4" ==> "normal" mix proctocol
				 "0.8" ==> with timestamp/replay detection
         "0.9" ==> with new payment protocol
		-->
    ...
	</MixProtocolVersion>
	<Mixes count="..">
		<Mix id="..">
			<MixProtocolVersion>
        <!-- specifies which sub protocol this Mix uses, if ther is a difference to the gerneral cascade protocol-->
        ...
      </MixProtocolVersion>
			<RSAKeyValue>
				<!--- PubKey of FirstMix -->
				...
			</RSAKeyValue>
			<Replay>
				<!-- information for replay detection mechanisms
						 if supported by protocol -->
				<ReplayTimestamp interval=".." offset="..">
					<!-- replay timestamp on the mix -->
					<!-- interval give the number of the current
							 interval on the mix; offset gives the 
							 seconds since start of this interval -->
				</ReplayTimestamp>
			</Replay>
		</Mix>
		<Mix id="..">
				...
		</Mix>
    ...
	</Mixes>
	<Payment required="true|false">
		<!-- Since Version 0.2 -->
		<!-- Gives payment related information to the JAP
				 if required=="true" payment is required
				 if required=="false" no payment is required
		-->
	</Payment>
	<Signature>
		<!--- from FirstMix -->
		...
	</Signature>
</MixCascade>
7. Signature Element

<Signature>
  <SignedInfo>
    <Reference URI=""> <!--what is signed ?-->
      <DigestValue>.....</DigestValue> <!--base64 SHA1 digest -->
    </Reference>
  </SignedInfo>
  <SignatureValue>
    <!--base64 of r,s of DSA signature -->
  </SignatureValue>
  <KeyInfo>
    <!-- info abnout the key used -->
    <X509Data>
      <X509Certificate>
        <!-- base64 cert of the public test key for the signature -->
      </X509Certificate>
    </X509Data>
  </KeyInfo>
</Signature>
8. Mix description

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
	targetNamespace="anon" elementFormDefault="unqualified"
	xmlns:anon="anon">
	<include schemaLocation="Signature.xsd" />
	<include schemaLocation="LocationType.xsd" />
	<include schemaLocation="OperatorType.xsd" />
	<include schemaLocation="ListenerInterfaceType.xsd" />
	<include schemaLocation="DataRetentionType.xsd" />
	<include schemaLocation="KeepAliveType.xsd" />
	<include schemaLocation="RSAKeyType.xsd" />
	<include schemaLocation="ProxyType.xsd" />
	<include schemaLocation="SoftwareType.xsd" />

	<complexType name="MixType">
		<all>
			<element name="MixProtocolVersion" type="string"
				minOccurs="0" />
			<element name="MixType">
				<simpleType>
					<restriction base="string">
						<enumeration value="FirstMix" />
						<enumeration value="MiddleMix" />
						<enumeration value="LastMix" />
					</restriction>
				</simpleType>
			</element>
			<element name="Name" type="string" />
			<element name="Location" type="anon:LocationType" />
			<element name="Operator" type="anon:OperatorType" />
			<element name="Software" type="anon:SoftwareType" />
			<element name="DataRetention" type="anon:DataRetentionType" />
			<element name="KeepAlive" type="anon:KeepAliveType"
				minOccurs="0" />
			<element name="RSAKeyValue" type="anon:RSAKeyType" />
			<element name="ChannelSymmetricChipher"> <!-- The symmetric cipher used by the Mix for symmetric channel recoding -->
				<simpleType>
					<restriction base="string">
						<enumeration value="AES/OFB/ANON" /> <!-- The original cipher, AES128-OFB with some AN.ON specific data handling (this is the default) --> 
						<enumeration value="AES/CTR" /> <!-- AES128-CTR -->
					</restriction>
				</simpleType>
			</element>	
			<element name="LastUpdate" type="integer" />
			<element name="ListenerInterfaces">
				<complexType>
					<sequence minOccurs="1" maxOccurs="unbounded">
						<element name="ListenerInterface" 
						type="anon:ListenerInterfaceType" />
					</sequence>
				</complexType>
			</element>
			<element name="Proxies" minOccurs="0">
				<complexType>
					<sequence minOccurs="1" maxOccurs="unbounded">
						<element name="Proxy" type="anon:ProxyType" />
					</sequence>
				</complexType>
			</element>
			<element name="Nonce" type="string" minOccurs="0" />
			<element name="SupportsEncrypedControlChannels"
				type="boolean" minOccurs="0" />
			<element name="Signature" type="anon:SignatureType" />
		</all>
		<attribute name="id" type="string" />
		<attribute name="serial" type="integer" />
	</complexType>
</schema>