You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

854 lines
63 KiB
XML

<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentStyleType="text/css" height="1432.8px" preserveAspectRatio="none" style="width:1843px;height:1432px;background:#FFFFFF;" version="1.1" viewBox="0 0 1843 1432" width="1843.2px" zoomAndPan="magnify"><defs/><g><!--MD5=[ef20b3fe45c502f37db21f37a527870c]
cluster Signer--><g id="cluster_Signer"><rect fill="none" height="1062" rx="2.25" ry="2.25" style="stroke:#444444;stroke-width:0.9;stroke-dasharray:7.0,7.0;" width="1393.2" x="6.3" y="150.3"/><text fill="#444444" font-family="sans-serif" font-size="5.4" font-style="italic" lengthAdjust="spacing" textLength="34.2" x="685.8" y="157.1124">«boundary»</text><text fill="#444444" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="109.8" x="648" y="174.4664">Signer server</text><text fill="#444444" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="54.9" x="675.45" y="187.8873">[System]</text></g><!--MD5=[1bab5bcae8e0c09a8d95c3a3ae22aa87]
cluster SignerSoftware--><g id="cluster_SignerSoftware"><rect fill="none" height="978.3" rx="2.25" ry="2.25" style="stroke:#444444;stroke-width:0.9;stroke-dasharray:7.0,7.0;" width="1216.8" x="27.9" y="212.4"/><text fill="#444444" font-family="sans-serif" font-size="5.4" font-style="italic" lengthAdjust="spacing" textLength="34.2" x="619.2" y="219.2124">«boundary»</text><text fill="#444444" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="132.3" x="570.15" y="236.5664">Signer Software</text></g><!--MD5=[4e4416bf7ebbd0afd89bc8fc82d4e864]
cluster Signer2--><g id="cluster_Signer2"><rect fill="none" height="471.6" rx="2.25" ry="2.25" style="stroke:#444444;stroke-width:0.9;stroke-dasharray:7.0,7.0;" width="416.7" x="1421.1" y="955.8"/><text fill="#444444" font-family="sans-serif" font-size="5.4" font-style="italic" lengthAdjust="spacing" textLength="34.2" x="1612.35" y="962.6124">«boundary»</text><text fill="#444444" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="102.6" x="1578.15" y="979.9664">Other signer</text><text fill="#444444" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="54.9" x="1602" y="993.3873">[System]</text></g><!--MD5=[fd28193bdccf8ac8e7e1a1a0fe20b8a9]
cluster SignerSoftware2--><g id="cluster_SignerSoftware2"><rect fill="none" height="387.9" rx="2.25" ry="2.25" style="stroke:#444444;stroke-width:0.9;stroke-dasharray:7.0,7.0;" width="221.4" x="1594.8" y="1017.9"/><text fill="#444444" font-family="sans-serif" font-size="5.4" font-style="italic" lengthAdjust="spacing" textLength="34.2" x="1688.4" y="1024.7124">«boundary»</text><text fill="#444444" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="132.3" x="1639.35" y="1042.0664">Signer Software</text></g><!--MD5=[8f869394a97c4ccf4e0e1a7d0f555823]
entity NATS--><g id="elem_NATS"><path d="M1263.6,1094.85 L1380.6,1094.85 C1385.1,1094.85 1385.1,1120.3031 1385.1,1120.3031 C1385.1,1120.3031 1385.1,1145.7563 1380.6,1145.7563 L1263.6,1145.7563 C1259.1,1145.7563 1259.1,1120.3031 1259.1,1120.3031 C1259.1,1120.3031 1259.1,1094.85 1263.6,1094.85 " fill="#85BBF0" style="stroke:#78A8D8;stroke-width:0.45;"/><path d="M1380.6,1094.85 C1376.1,1094.85 1376.1,1120.3031 1376.1,1120.3031 C1376.1,1145.7563 1380.6,1145.7563 1380.6,1145.7563 " fill="none" style="stroke:#78A8D8;stroke-width:0.45;"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="1280.25" y="1109.3748">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="108" x="1263.6" y="1125.2883">NATS Service</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="37.8" x="1298.7" y="1138.7092">[NATS]</text></g><!--MD5=[1b07182dd713ed4e3be3a95ab68a0fd5]
entity SerialHandler--><g id="elem_SerialHandler"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="174.6" x="273.6" y="254.7"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="323.55" y="273.7248">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="147.6" x="287.1" y="289.6383">Serial link handler</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="349.2" y="303.0592">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="359.1" y="317.3019"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="149.4" x="286.2" y="331.969">Reads and writes to the</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="96.3" x="312.75" y="346.6362">serial interface</text></g><!--MD5=[ba1642c7c3a493b3e7478514b208a0b1]
entity Framer--><g id="elem_Framer"><rect fill="#85BBF0" height="89.2406" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="190.8" x="197.1" y="432.9"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="255.15" y="451.9248">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="59.4" x="262.8" y="467.8383">Framer</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="280.8" y="481.2592">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="290.7" y="495.5019"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="169.2" x="209.7" y="510.169">Parses and creates frames</text></g><!--MD5=[deb8adcbb2c5b1682b59342c487f75be]
entity ServerProtocol--><g id="elem_ServerProtocol"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="159.3" x="419.85" y="425.7"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="462.15" y="444.7248">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="126" x="436.5" y="460.6383">Server protocol</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="487.8" y="474.0592">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="497.7" y="488.3019"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="134.1" x="432.45" y="502.969">Server protocol state</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="55.8" x="471.6" y="517.6362">machine</text></g><!--MD5=[3d42f30e2a78c2aed96731e8102a93c9]
entity ProtocolHandler--><g id="elem_ProtocolHandler"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="152.1" x="423.45" y="596.7"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="462.15" y="615.7248">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="134.1" x="432.45" y="631.6383">Protocol handler</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="487.8" y="645.0592">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="497.7" y="659.3019"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="120.6" x="439.2" y="673.969">Parses and creates</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="120.6" x="439.2" y="688.6362">protocol messages</text></g><!--MD5=[1011eedbd8ff904aa9b61ed64da000c5]
entity X509SigningHandler--><g id="elem_X509SigningHandler"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="186.3" x="612.45" y="776.25"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="668.25" y="795.2748">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="108.9" x="651.15" y="811.1883">X.509 signing</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="693.9" y="824.6092">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="703.8" y="838.8519"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="161.1" x="625.05" y="853.519">Handles X.509 certificate</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="120.6" x="645.3" y="868.1862">signing commands</text></g><!--MD5=[1c6dc598b8ad1e32344a0fe24eeaf662]
entity X509RevocationHandler--><g id="elem_X509RevocationHandler"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="186.3" x="830.25" y="776.25"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="886.05" y="795.2748">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="136.8" x="855" y="811.1883">X.509 revocation</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="911.7" y="824.6092">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="921.6" y="838.8519"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="161.1" x="842.85" y="853.519">Handles X.509 certificate</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="143.1" x="851.85" y="868.1862">revocation commands</text></g><!--MD5=[6f59e0a59673b0784d2b49aad5931220]
entity OpenPGPSigningHandler--><g id="elem_OpenPGPSigningHandler"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="165.6" x="42.3" y="776.25"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="87.75" y="795.2748">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="138.6" x="55.8" y="811.1883">OpenPGP signing</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="113.4" y="824.6092">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="123.3" y="838.8519"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="140.4" x="54.9" y="853.519">Handles OpenPGP key</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="126" x="62.1" y="868.1862">signing commands"</text></g><!--MD5=[ac60de3e2d5367fb8173a39d1f6f967e]
entity X509CRLHandler--><g id="elem_X509CRLHandler"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="146.7" x="239.85" y="776.25"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="275.85" y="795.2748">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="71.1" x="277.65" y="811.1883">X.509 crl</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="301.5" y="824.6092">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="311.4" y="838.8519"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="121.5" x="252.45" y="853.519">Handles X.509 CRL</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="128.7" x="248.85" y="868.1862">retrieval commands</text></g><!--MD5=[04880e5e31ecc78df75a393e279e8df9]
entity HealthHandler--><g id="elem_HealthHandler"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="162.9" x="418.05" y="776.25"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="462.15" y="795.2748">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="104.4" x="447.3" y="811.1883">Health check</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="487.8" y="824.6092">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="497.7" y="838.8519"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="137.7" x="430.65" y="853.519">Handles health check</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="71.1" x="463.95" y="868.1862">commands</text></g><!--MD5=[58d078c34e72bc75166669b12cea25ab]
entity HSMAccess--><g id="elem_HSMAccess"><rect fill="#85BBF0" height="103.9078" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="174.6" x="232.2" y="1068.75"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="282.15" y="1087.7748">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="96.3" x="271.35" y="1103.6883">HSM access</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="307.8" y="1117.1092">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="317.7" y="1131.3519"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="149.4" x="244.8" y="1146.019">Handles HSM hardware</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="43.2" x="297.9" y="1160.6862">access</text></g><!--MD5=[2db99c1383d9a8197df41033e0363f36]
entity SyncHandler--><g id="elem_SyncHandler"><rect fill="#85BBF0" height="120.6703" rx="2.25" ry="2.25" style="stroke:#78A8D8;stroke-width:0.45;" width="181.8" x="1048.5" y="767.7"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="1102.05" y="786.7248">«component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="128.7" x="1072.35" y="802.6383">Synchronization</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="61.2" x="1108.8" y="819.4008">handler</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="1127.7" y="832.8217">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="1137.6" y="847.0644"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="156.6" x="1061.1" y="861.7315">Handles synchronization</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="107.1" x="1085.85" y="876.3987">with other signer</text></g><!--MD5=[e834ab3daed066426c91d2e7962575e2]
entity SignerDB--><g id="elem_SignerDB"><path d="M563.4,1073.7 C563.4,1064.7 659.7,1064.7 659.7,1064.7 C659.7,1064.7 756,1064.7 756,1073.7 L756,1166.9063 C756,1175.9063 659.7,1175.9063 659.7,1175.9063 C659.7,1175.9063 563.4,1175.9063 563.4,1166.9063 L563.4,1073.7 " fill="#85BBF0" style="stroke:#78A8D8;stroke-width:0.45;"/><path d="M563.4,1073.7 C563.4,1082.7 659.7,1082.7 659.7,1082.7 C659.7,1082.7 756,1082.7 756,1073.7 " fill="none" style="stroke:#78A8D8;stroke-width:0.45;"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="74.7" x="622.35" y="1096.3248">«component»</text><image height="43.2" width="43.2" x="638.1" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACtklEQVR4Xu2XrUqFQRCGTzUIYhOLQWyCGKzHZrAYtYnYLApWwfIVk8kseAHaLV6Cl+AleAk+nMFhndmf72/xE3x5kXPW3dl3Z2Zn58ya189JceaHfpfdBF0/vZ/dvRxd3e8dnm7PjzZ39+H61s7q2gZ/IV8Zh/PjS6ZdPLzdPH94OxmWBWH04PyWnWZ9sbS8gkT0cR5v3zApiMW4AVvW/DDgRZT57ZRxQUixlkYF5yT0ft+4IA5hDdQBmeB3t4JIRruuJnzKW0FDkrcHfOD+Bf3EHxREkbCLqoHLb3aPCGrqFyEFb4DfPSIIntw88jxZA+OBl8Rf+JwglTVuShEj6lz+RbOCorPxLYYQ1+Npw9OZl9X7yQqSjiK6WMl/cR57UPshWkk7/kK+Mg65Pn6zkMyJvmgRQXIyPrAmb7QHOQy61dMdBCl4azHByrzbUuRIRFx6On9R+ggywChzJEYaICKoQZTYkTecpJhzZUGTe+2bqfVDwtrFOnq/coKaqfXUIaUqDonjoF8dstLPE474uwxTTPOBs4Lk2nMmMi5layARgRRxXltBCq2K3m4nymvjk9JbLggKgS0piTgP69giIuwE8SXkAyOMQyZoebSGApQF1b7wBj7NrSBmjH7VU8B/ZveIINHkX8HRQUD91nFBQi5tJVk4xkeqLEg4vCoKtDYWS4kVNE/3vFIS54teFuelUo1xyBlQIPcxZVAaSzNoBcm1x1b0N0qKcu39eIqaD20FCViDPzopyxDFeEtrtKCboBBhCDIvlJIJJsTW4gJlQeYERZAubCaU7LEzsvDut4KQbBdVA2cwu0cENYsfrHZpBZAD0bhHBDXfzYq1MRIIa6bligsScgKyeHhVFEhtxP1+o5A5QSHJrTbtRAhtV1o2r8K2ggx996MdkjRJfklL9hRUj5MT9AU1SPnpo3eZPgAAAABJRU5ErkJggg==" y="1098.8719"/><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="174.6" x="572.4" y="1155.4383">Certificate repository</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="165.6" x="576.9" y="1168.8592">[Go, Embedded Key-Value DB]</text></g><!--MD5=[8940efdef782accd207644e2a21c9a46]
entity NATS2--><g id="elem_NATS2"><path d="M1440,1309.95 L1573.2,1309.95 C1577.7,1309.95 1577.7,1335.4031 1577.7,1335.4031 C1577.7,1335.4031 1577.7,1360.8563 1573.2,1360.8563 L1440,1360.8563 C1435.5,1360.8563 1435.5,1335.4031 1435.5,1335.4031 C1435.5,1335.4031 1435.5,1309.95 1440,1309.95 " fill="#CCCCCC" style="stroke:#BFBFBF;stroke-width:0.45;"/><path d="M1573.2,1309.95 C1568.7,1309.95 1568.7,1335.4031 1568.7,1335.4031 C1568.7,1360.8563 1573.2,1360.8563 1573.2,1360.8563 " fill="none" style="stroke:#BFBFBF;stroke-width:0.45;"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="124.2" x="1440" y="1324.4748">«external_component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="108" x="1448.1" y="1340.3883">NATS Service</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="37.8" x="1483.2" y="1353.8092">[NATS]</text></g><!--MD5=[3d669a59ee04a28ec5dc9358aab5f1b1]
entity SyncHandler2--><g id="elem_SyncHandler2"><rect fill="#CCCCCC" height="120.6703" rx="2.25" ry="2.25" style="stroke:#BFBFBF;stroke-width:0.45;" width="181.8" x="1611.9" y="1060.2"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="124.2" x="1640.7" y="1079.2248">«external_component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="128.7" x="1635.75" y="1095.1383">Synchronization</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="61.2" x="1672.2" y="1111.9008">handler</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="23.4" x="1691.1" y="1125.3217">[Go]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="1701" y="1139.5644"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="156.6" x="1624.5" y="1154.2315">Handles synchronization</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="107.1" x="1649.25" y="1168.8987">with other signer</text></g><!--MD5=[d6aaf1a0f5c32983fa5796596196f201]
entity SignerDB2--><g id="elem_SignerDB2"><path d="M1609.2,1288.8 C1609.2,1279.8 1705.5,1279.8 1705.5,1279.8 C1705.5,1279.8 1801.8,1279.8 1801.8,1288.8 L1801.8,1382.0063 C1801.8,1391.0063 1705.5,1391.0063 1705.5,1391.0063 C1705.5,1391.0063 1609.2,1391.0063 1609.2,1382.0063 L1609.2,1288.8 " fill="#CCCCCC" style="stroke:#BFBFBF;stroke-width:0.45;"/><path d="M1609.2,1288.8 C1609.2,1297.8 1705.5,1297.8 1705.5,1297.8 C1705.5,1297.8 1801.8,1297.8 1801.8,1288.8 " fill="none" style="stroke:#BFBFBF;stroke-width:0.45;"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="124.2" x="1643.4" y="1311.4248">«external_component»</text><image height="43.2" width="43.2" x="1683.9" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACl0lEQVR4Xu2XbZHCMBCGUYACDKDgDKAABTWAghpAAQowgAIMRNQ9kx0yvXeT9DNzvZl7fpWSbN7sbjbbQ9gZB33x28wT9Hq9Ho9H3/fX6/VyuXxFzufz6XQ6R/h5iXRdx7Dn8/l+v9VKlXFBGL3dbqx0WMrxeEQi+tiPWncUBTEZN2BLza8DL6JMFxuQF4QUtbQp7JPQ66qRjCA2oQbaQCbo2l4QyajzWuJTXgWtSd4F+MD9C/rJHxREkdBJzeDwy+rBCwrti1CCO0DXzgqC+/3O9aQGtoObxB94Iy/IQNa2KUWMqHP1G00FZUfjWwwhbsHVhqcrN6v3kwqyjiI7OcG/OI81bhG0knZdhJ99hOPjFxvCmOyNlhFkO+OBOXWjC2Az6E6eniEowV2LCWbW3VaCLRFx6+n8QVkiSMAoYyxGKUD3iAXRYkfesJPRnBsXtLvbPuytHzJaF+vs+TLygsLeeuohVhXXxHHVV4fNlJeJDb/LMMUwHzgVZMeePZFxJVsrQQRSzHlTBSVSVZRhc7HbxieltzwiaAi2rCTiPKxji4i8Iu8ID7x5RBiQyqMaGjAuqPWBF3yaqyBGbH7US+A/WT14QSFq8rfg5hBQXTiSEWRwaBvJwjE+UomiIGN9VTRSbRwtJSqoK/e8VhK72MvivFKqHSPsAQV2HksG+9hYyksVZMceW9lvlBJ27PVtmZQPUwUZzMEfs5RVQDHeSjXamCdoyDAElRsqwQAJsVqMjAuSHYxCupw+WPboiCre/SoIyTqpGexBVg9eUIgfrDq1AeRANu4ZQeHTrKiNjSCslZYrL8hgB2Tx+qpoWG3E/brMT2qChpBbU9qJIaldmdi8GlMFCb77SR2SNUk6YTILBbVjd4K+Ab755zzpVjRDAAAAAElFTkSuQmCC" y="1313.9719"/><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="174.6" x="1618.2" y="1370.5383">Certificate repository</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="165.6" x="1622.7" y="1383.9592">[Go, Embedded Key-Value DB]</text></g><!--MD5=[c25eb3bb2a673e49b4700e0aa1b6b6c8]
entity SignerClient--><g id="elem_SignerClient"><rect fill="#999999" height="76.6688" rx="2.25" ry="2.25" style="stroke:#8A8A8A;stroke-width:0.45;" width="188.1" x="266.85" y="6.3"/><text fill="#FFFFFF" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="100.8" x="310.5" y="25.3248">«external_system»</text><text fill="#FFFFFF" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="101.7" x="310.05" y="41.2383">Signer client</text><text fill="#FFFFFF" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="359.1" y="56.33"> </text><text fill="#FFFFFF" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="166.5" x="279.45" y="70.9972">Send commands to signer</text></g><!--MD5=[ff028a7ac4eed75d9278e76cd9053439]
entity HSM--><g id="elem_HSM"><rect fill="#CCCCCC" height="89.2406" rx="2.25" ry="2.25" style="stroke:#BFBFBF;stroke-width:0.45;" width="190.8" x="224.1" y="1291.05"/><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="124.2" x="257.4" y="1310.0748">«external_component»</text><text fill="#000000" font-family="sans-serif" font-size="14.4" font-weight="bold" lengthAdjust="spacing" textLength="36.9" x="301.05" y="1325.9883">HSM</text><text fill="#000000" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="60.3" x="289.35" y="1339.4092">[PKCS#11]</text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="3.6" x="317.7" y="1353.6519"> </text><text fill="#000000" font-family="sans-serif" font-size="12.6" lengthAdjust="spacing" textLength="169.2" x="236.7" y="1368.319">Hardware security module</text></g><!--MD5=[c4211f20d77779d002d0636fe4eff351]
link SignerClient to SerialHandler--><g id="link_SignerClient_SerialHandler"><path d="M360.9,82.989 C360.9,126.036 360.9,197.109 360.9,247.338 " fill="none" id="SignerClient-to-SerialHandler" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="360.9,254.592,363.6,247.392,358.2,247.392,360.9,254.592" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="390.15" y="120.7248">Uses</text><text fill="#666666" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="85.5" x="361.8" y="133.2967">[USB serial link]</text></g><!--MD5=[de40622977f577968ad15aec8c744a51]
link SerialHandler to Framer--><g id="link_SerialHandler_Framer"><path d="M340.281,358.344 C331.623,379.773 321.579,404.622 312.939,425.997 " fill="none" id="SerialHandler-to-Framer" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="310.185,432.81,315.3885,427.1484,310.3827,425.1229,310.185,432.81" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="330.3" y="396.1248">Uses</text></g><!--MD5=[1211b684f0f4acfb9ea05d642655511a]
link SerialHandler to ServerProtocol--><g id="link_SerialHandler_ServerProtocol"><path d="M402.669,358.344 C418.563,377.739 436.752,399.951 453.051,419.841 " fill="none" id="SerialHandler-to-ServerProtocol" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="457.812,425.655,455.3351,418.3753,451.1591,421.7989,457.812,425.655" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="435.6" y="396.1248">Uses</text></g><!--MD5=[eb969237a50a57975d692cb125e88891]
link ServerProtocol to ProtocolHandler--><g id="link_ServerProtocol_ProtocolHandler"><path d="M499.5,529.344 C499.5,548.244 499.5,569.808 499.5,589.302 " fill="none" id="ServerProtocol-to-ProtocolHandler" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="499.5,596.655,502.2,589.455,496.8,589.455,499.5,596.655" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="500.4" y="567.1248">Uses</text></g><!--MD5=[6904b7103d89ba041a727edd177c7033]
link ProtocolHandler to X509SigningHandler--><g id="link_ProtocolHandler_X509SigningHandler"><path d="M558.558,700.29 C584.325,722.502 614.601,748.62 640.971,771.354 " fill="none" id="ProtocolHandler-to-X509SigningHandler" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="646.533,776.16,642.847,769.4114,639.3184,773.4991,646.533,776.16" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="603.9" y="738.1248">Uses</text></g><!--MD5=[6e0d1b21c46cf0a1aeb331a2c465700e]
link ProtocolHandler to X509CRLHandler--><g id="link_ProtocolHandler_X509CRLHandler"><path d="M446.112,700.29 C422.919,722.412 395.685,748.404 371.925,771.075 " fill="none" id="ProtocolHandler-to-X509CRLHandler" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="366.597,776.16,373.6678,773.1379,369.9372,769.2337,366.597,776.16" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="418.5" y="738.1248">Uses</text></g><!--MD5=[8bd9096c966b0786426f772de5ff586e]
link ProtocolHandler to X509RevocationHandler--><g id="link_ProtocolHandler_X509RevocationHandler"><path d="M575.811,674.658 C640.368,696.861 734.823,731.223 814.5,767.7 C818.172,769.383 821.889,771.138 825.624,772.938 " fill="none" id="ProtocolHandler-to-X509RevocationHandler" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="832.374,776.241,827.0923,770.6523,824.7199,775.5032,832.374,776.241" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="747.9" y="738.1248">Uses</text></g><!--MD5=[7630a6f192d59137aef045c59458f3ad]
link ProtocolHandler to OpenPGPSigningHandler--><g id="link_ProtocolHandler_OpenPGPSigningHandler"><path d="M423.432,678.825 C367.416,701.298 289.881,734.022 224.1,767.7 C220.977,769.302 217.818,770.958 214.641,772.659 " fill="none" id="ProtocolHandler-to-OpenPGPSigningHandler" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="208.098,776.214,215.7124,775.1409,213.1293,770.3988,208.098,776.214" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="306.9" y="738.1248">Uses</text></g><!--MD5=[dd0964938e0e2c1d6f26fa00fb2a70e5]
link ProtocolHandler to HealthHandler--><g id="link_ProtocolHandler_HealthHandler"><path d="M499.5,700.29 C499.5,721.665 499.5,746.658 499.5,768.78 " fill="none" id="ProtocolHandler-to-HealthHandler" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="499.5,776.16,502.2,768.96,496.8,768.96,499.5,776.16" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="500.4" y="738.1248">Uses</text></g><!--MD5=[c03f96c452f26815ba38daf1adeb88ce]
link X509SigningHandler to HSMAccess--><g id="link_X509SigningHandler_HSMAccess"><path d="M677.52,879.966 C662.283,902.655 641.277,927.36 615.6,941.4 C588.78,956.07 575.649,937.422 547.2,948.6 C481.68,974.358 418.59,1024.371 375.507,1063.692 " fill="none" id="X509SigningHandler-to-HSMAccess" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="370.089,1068.669,377.2159,1065.7816,373.56,1061.8074,370.089,1068.669" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="648" y="932.5248">Uses</text></g><!--MD5=[049c56c40f5ce55919cf848cfeae4412]
link X509SigningHandler to SignerDB--><g id="link_X509SigningHandler_SignerDB"><path d="M703.953,880.029 C702.9,899.325 701.19,921.438 698.4,941.4 C692.955,980.334 683.694,1023.417 675.585,1057.473 " fill="none" id="X509SigningHandler-to-SignerDB" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="673.884,1064.601,678.1946,1058.2332,672.9447,1056.969,673.884,1064.601" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="39.6" x="702.9" y="932.5248">Writes</text></g><!--MD5=[82b942a05dde6d4abd870be92d5b79e1]
link X509RevocationHandler to SignerDB--><g id="link_X509RevocationHandler_SignerDB"><path d="M840.087,879.831 C812.448,899.19 782.847,922.842 759.6,948.6 C730.332,981.027 705.519,1023.372 687.933,1057.815 " fill="none" id="X509RevocationHandler-to-SignerDB" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="684.513,1064.592,690.1646,1059.3776,685.3424,1056.9473,684.513,1064.592" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="39.6" x="792.9" y="932.5248">Writes</text></g><!--MD5=[f3fbeda310f19b6def0836f108fb90ae]
link X509CRLHandler to HSMAccess--><g id="link_X509CRLHandler_HSMAccess"><path d="M292.59,879.804 C288.819,891.288 285.462,903.564 283.5,915.3 C275.256,964.665 286.569,1020.636 298.638,1061.496 " fill="none" id="X509CRLHandler-to-HSMAccess" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="300.735,1068.426,301.2234,1060.7519,296.057,1062.323,300.735,1068.426" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="284.4" y="932.5248">Uses</text></g><!--MD5=[1be83cc4a91ae3618c25e12be491020b]
link X509CRLHandler to SignerDB--><g id="link_X509CRLHandler_SignerDB"><path d="M386.784,879.858 C391.959,882.846 397.161,885.69 402.3,888.3 C433.449,904.095 447.174,895.734 476.1,915.3 C491.85,925.956 559.26,1002.663 607.833,1058.958 " fill="none" id="X509CRLHandler-to-SignerDB" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="612.774,1064.682,610.1229,1057.4639,606.0304,1060.9869,612.774,1064.682" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="36.9" x="502.2" y="932.5248">Reads</text></g><!--MD5=[1531770e9c84b9a37109fc722a3e41bc]
link OpenPGPSigningHandler to HSMAccess--><g id="link_OpenPGPSigningHandler_HSMAccess"><path d="M159.183,879.867 C193.365,930.987 245.898,1009.53 281.421,1062.666 " fill="none" id="OpenPGPSigningHandler-to-HSMAccess" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="285.453,1068.687,283.6946,1061.2012,279.2059,1064.2032,285.453,1068.687" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="200.7" y="932.5248">Uses</text></g><!--MD5=[5647650e77d9b601644db74356963c93]
link OpenPGPSigningHandler to SignerDB--><g id="link_OpenPGPSigningHandler_SignerDB"><path d="M204.021,879.804 C210.672,882.99 217.404,885.879 224.1,888.3 C297.945,914.994 327.816,881.514 398.7,915.3 C414.297,922.734 414.234,930.33 427.5,941.4 C476.604,982.377 533.538,1026.126 578.745,1060.029 " fill="none" id="OpenPGPSigningHandler-to-SignerDB" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="584.766,1064.529,580.6167,1058.0549,577.3829,1062.3796,584.766,1064.529" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="39.6" x="428.4" y="932.5248">Writes</text></g><!--MD5=[01fcd97973dce0a15ca3f22ec6f9a33e]
link HealthHandler to HSMAccess--><g id="link_HealthHandler_HSMAccess"><path d="M417.816,879.39 C412.587,882.441 407.385,885.438 402.3,888.3 C379.539,901.116 365.301,894.06 350.1,915.3 C319.914,957.483 314.073,1017.216 314.694,1061.199 " fill="none" id="HealthHandler-to-HSMAccess" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="314.865,1068.669,317.3972,1061.4083,311.9986,1061.5336,314.865,1068.669" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="43.2" x="351" y="932.5248">Checks</text></g><!--MD5=[8e666ca13f2e292cf801466daea72d33]
link HealthHandler to SignerDB--><g id="link_HealthHandler_SignerDB"><path d="M530.271,879.84 C537.129,891.441 544.293,903.744 550.8,915.3 C577.566,962.838 606.564,1017.405 627.903,1058.175 " fill="none" id="HealthHandler-to-SignerDB" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="631.26,1064.601,630.3086,1056.9705,625.5259,1059.4776,631.26,1064.601" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="43.2" x="564.3" y="932.5248">Checks</text></g><!--MD5=[f6d0a255b9300fdc869edf618776ea20]
link SyncHandler to SignerDB--><g id="link_SyncHandler_SignerDB"><path d="M1048.374,881.235 C1043.001,883.755 1037.61,886.122 1032.3,888.3 C950.472,921.771 927.585,925.623 840.6,941.4 C822.816,944.622 774.855,938.916 759.6,948.6 C720.432,973.449 694.809,1019.592 679.32,1057.689 " fill="none" id="SyncHandler-to-SignerDB" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="676.647,1064.457,681.809,1058.7576,676.7886,1056.7687,676.647,1064.457" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="958.5" y="932.5248">Uses</text></g><!--MD5=[ce0bb68167ca79996a54c04fb7a06609]
link SyncHandler to NATS--><g id="link_SyncHandler_NATS"><path d="M1203.021,894.204 C1217.754,911.142 1232.631,929.898 1244.7,948.6 C1274.031,994.032 1297.854,1052.415 1310.994,1087.866 " fill="none" id="SyncHandler-NATS" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="1313.478,1094.643,1313.5326,1086.9536,1308.4631,1088.8137,1313.478,1094.643" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="1198.035,888.525,1200.76,895.7156,1204.8161,892.1508,1198.035,888.525" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="75.6" x="1242.45" y="926.2248">Synchronize</text><text fill="#666666" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="85.5" x="1237.5" y="938.7967">[NATS protocol]</text></g><!--MD5=[ac10af24f910bae24644d4ccf6ac738e]
link NATS to NATS2--><g id="link_NATS_NATS2"><path d="M1345.383,1152.081 C1366.218,1179.135 1397.943,1219.356 1427.4,1252.8 C1442.889,1270.386 1460.997,1289.232 1475.991,1304.406 " fill="none" id="NATS-NATS2" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="1481.364,1309.824,1478.1997,1302.8156,1474.3717,1306.6244,1481.364,1309.824" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="1340.847,1146.177,1343.0912,1153.5318,1347.3739,1150.2427,1340.847,1146.177" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="75.6" x="1428.3" y="1237.6248">Synchronize</text><text fill="#666666" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="61.2" x="1435.5" y="1250.1967">[NATS/TLS]</text></g><!--MD5=[06c6604c5c35b105f23e33e7e3e4aba5]
link SyncHandler2 to NATS2--><g id="link_SyncHandler2_NATS2"><path d="M1643.04,1186.362 C1606.959,1225.593 1562.661,1273.752 1534.527,1304.334 " fill="none" id="SyncHandler2-NATS2" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="1529.469,1309.842,1536.3264,1306.3627,1532.3478,1302.7116,1529.469,1309.842" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="1648.143,1180.818,1641.2814,1184.289,1645.2556,1187.9449,1648.143,1180.818" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="75.6" x="1610.55" y="1237.6248">Synchronize</text><text fill="#666666" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="85.5" x="1605.6" y="1250.1967">[NATS protocol]</text></g><!--MD5=[19a8c02a4a6c3e2efd241ec79f03fa40]
link SyncHandler2 to SignerDB2--><g id="link_SyncHandler2_SignerDB2"><path d="M1703.556,1180.818 C1703.916,1209.339 1704.348,1243.512 1704.708,1272.402 " fill="none" id="SyncHandler2-to-SignerDB2" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="1704.807,1279.629,1707.4168,1272.3958,1702.0172,1272.4633,1704.807,1279.629" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="1704.6" y="1243.9248">Uses</text></g><!--MD5=[c3f60d65e94da5508ad0c196407a2043]
link HSMAccess to HSM--><g id="link_HSMAccess_HSM"><path d="M319.5,1172.493 C319.5,1206.063 319.5,1249.83 319.5,1283.436 " fill="none" id="HSMAccess-to-HSM" style="stroke:#666666;stroke-width:0.9;"/><polygon fill="#666666" points="319.5,1290.879,322.2,1283.679,316.8,1283.679,319.5,1290.879" style="stroke:#666666;stroke-width:0.9;"/><text fill="#666666" font-family="sans-serif" font-size="10.8" font-weight="bold" lengthAdjust="spacing" textLength="28.8" x="336.15" y="1237.6248">Uses</text><text fill="#666666" font-family="sans-serif" font-size="10.8" font-style="italic" lengthAdjust="spacing" textLength="60.3" x="320.4" y="1250.1967">[PKCS#11]</text></g><!--MD5=[5a23765b41eba2fb33cbd44d9ccde792]
@startuml
!include <C4/C4_Component.puml>
!include <tupadr3/font-awesome/database>
LAYOUT_TOP_DOWN()
System_Ext(SignerClient, "Signer client", "Send commands to signer")
System_Boundary(Signer, "Signer server") {
Boundary(SignerSoftware, "Signer Software") {
Component(SerialHandler, "Serial link handler", "Go", "Reads and writes to the serial interface")
Component(Framer, "Framer", "Go", "Parses and creates frames")
Component(ServerProtocol, "Server protocol", "Go", "Server protocol state machine")
Component(ProtocolHandler, "Protocol handler", "Go", "Parses and creates protocol messages")
Component(X509SigningHandler, "X.509 signing", "Go", "Handles X.509 certificate signing commands")
Component(X509RevocationHandler, "X.509 revocation", "Go", "Handles X.509 certificate revocation commands")
Component(OpenPGPSigningHandler, "OpenPGP signing", "Go", Handles OpenPGP key signing commands")
Component(X509CRLHandler, "X.509 crl", "Go", "Handles X.509 CRL retrieval commands")
Component(HealthHandler, "Health check", "Go", "Handles health check commands")
Component(HSMAccess, "HSM access", "Go", "Handles HSM hardware access")
Component(SyncHandler, "Synchronization handler", "Go", "Handles synchronization with other signer")
ComponentDb(SignerDB, "Certificate repository", "Go, Embedded Key-Value DB", $sprite="database")
}
ComponentQueue(NATS, "NATS Service", "NATS")
}
System_Boundary(Signer2, "Other signer") {
Boundary(SignerSoftware2, "Signer Software") {
Component_Ext(SyncHandler2, "Synchronization handler", "Go", "Handles synchronization with other signer")
ComponentDb_Ext(SignerDB2, "Certificate repository", "Go, Embedded Key-Value DB", $sprite="database")
}
ComponentQueue_Ext(NATS2, "NATS Service", "NATS")
}
Component_Ext(HSM, "HSM", "PKCS#11", "Hardware security module")
Rel(SignerClient, SerialHandler, "Uses", "USB serial link")
Rel(SerialHandler, Framer, "Uses")
Rel(SerialHandler, ServerProtocol, "Uses")
Rel(ServerProtocol, ProtocolHandler, "Uses")
Rel(ProtocolHandler, X509SigningHandler, "Uses")
Rel(ProtocolHandler, X509CRLHandler, "Uses")
Rel(ProtocolHandler, X509RevocationHandler, "Uses")
Rel(ProtocolHandler, OpenPGPSigningHandler, "Uses")
Rel(ProtocolHandler, HealthHandler, "Uses")
Rel(X509SigningHandler, HSMAccess, "Uses")
Rel(X509SigningHandler, SignerDB, "Writes")
Rel(X509RevocationHandler, SignerDB, "Writes")
Rel(X509CRLHandler, HSMAccess, "Uses")
Rel(X509CRLHandler, SignerDB, "Reads")
Rel(OpenPGPSigningHandler, HSMAccess, "Uses")
Rel(OpenPGPSigningHandler, SignerDB, "Writes")
Rel(HealthHandler, HSMAccess, "Checks")
Rel(HealthHandler, SignerDB, "Checks")
Rel(SyncHandler, SignerDB, "Uses")
BiRel(SyncHandler, NATS, "Synchronize", "NATS protocol")
BiRel(NATS, NATS2, "Synchronize", "NATS/TLS")
BiRel(SyncHandler2, NATS2, "Synchronize", "NATS protocol")
Rel(SyncHandler2, SignerDB2, "Uses")
Rel(HSMAccess, HSM, "Uses", "PKCS#11")
@enduml
@startuml
skinparam defaultTextAlignment center
skinparam wrapWidth 200
skinparam maxMessageSize 150
skinparam LegendBorderColor transparent
skinparam LegendBackgroundColor transparent
skinparam LegendFontColor #FFFFFF
skinparam shadowing<<legendArea>> false
skinparam rectangle<<legendArea>> {
backgroundcolor #00000000
bordercolor #00000000
}
skinparam rectangle {
StereotypeFontSize 12
shadowing false
}
skinparam database {
StereotypeFontSize 12
shadowing false
}
skinparam queue {
StereotypeFontSize 12
shadowing false
}
skinparam arrow {
Color #666666
FontColor #666666
FontSize 12
}
skinparam actor {
StereotypeFontSize 12
shadowing false
style awesome
}
skinparam person {
StereotypeFontSize 12
shadowing false
}
skinparam package {
StereotypeFontSize 6
StereotypeFontColor transparent
FontStyle plain
BackgroundColor transparent
}
skinparam rectangle<<boundary>> {
Shadowing false
StereotypeFontSize 6
StereotypeFontColor transparent
FontColor #444444
BorderColor #444444
BackgroundColor transparent
BorderStyle dashed
}
skinparam rectangle<<person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #08427B
BorderColor #073B6F
}
skinparam database<<person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #08427B
BorderColor #073B6F
}
skinparam queue<<person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #08427B
BorderColor #073B6F
}
skinparam actor<<person>> {
StereotypeFontColor #08427B
FontColor #08427B
BackgroundColor #08427B
BorderColor #073B6F
}
skinparam person<<person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #08427B
BorderColor #073B6F
}
skinparam rectangle<<external_person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #686868
BorderColor #8A8A8A
}
skinparam database<<external_person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #686868
BorderColor #8A8A8A
}
skinparam queue<<external_person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #686868
BorderColor #8A8A8A
}
skinparam actor<<external_person>> {
StereotypeFontColor #686868
FontColor #686868
BackgroundColor #686868
BorderColor #8A8A8A
}
skinparam person<<external_person>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #686868
BorderColor #8A8A8A
}
skinparam rectangle<<system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #1168BD
BorderColor #3C7FC0
}
skinparam database<<system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #1168BD
BorderColor #3C7FC0
}
skinparam queue<<system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #1168BD
BorderColor #3C7FC0
}
skinparam actor<<system>> {
StereotypeFontColor #1168BD
FontColor #1168BD
BackgroundColor #1168BD
BorderColor #3C7FC0
}
skinparam person<<system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #1168BD
BorderColor #3C7FC0
}
skinparam rectangle<<external_system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #999999
BorderColor #8A8A8A
}
skinparam database<<external_system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #999999
BorderColor #8A8A8A
}
skinparam queue<<external_system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #999999
BorderColor #8A8A8A
}
skinparam actor<<external_system>> {
StereotypeFontColor #999999
FontColor #999999
BackgroundColor #999999
BorderColor #8A8A8A
}
skinparam person<<external_system>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #999999
BorderColor #8A8A8A
}
sprite $person [48x48/16] {
000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
0000000000000000000049BCCA7200000000000000000000
0000000000000000006EFFFFFFFFB3000000000000000000
00000000000000001CFFFFFFFFFFFF700000000000000000
0000000000000001EFFFFFFFFFFFFFF80000000000000000
000000000000000CFFFFFFFFFFFFFFFF6000000000000000
000000000000007FFFFFFFFFFFFFFFFFF100000000000000
00000000000001FFFFFFFFFFFFFFFFFFF900000000000000
00000000000006FFFFFFFFFFFFFFFFFFFF00000000000000
0000000000000BFFFFFFFFFFFFFFFFFFFF40000000000000
0000000000000EFFFFFFFFFFFFFFFFFFFF70000000000000
0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
0000000000000DFFFFFFFFFFFFFFFFFFFF60000000000000
0000000000000AFFFFFFFFFFFFFFFFFFFF40000000000000
00000000000006FFFFFFFFFFFFFFFFFFFE00000000000000
00000000000000EFFFFFFFFFFFFFFFFFF800000000000000
000000000000007FFFFFFFFFFFFFFFFFF100000000000000
000000000000000BFFFFFFFFFFFFFFFF5000000000000000
0000000000000001DFFFFFFFFFFFFFF70000000000000000
00000000000000000BFFFFFFFFFFFF500000000000000000
0000000000000000005DFFFFFFFFA1000000000000000000
0000000000000000000037ABB96100000000000000000000
000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
000000000000025788300000000005886410000000000000
000000000007DFFFFFFD9643347BFFFFFFFB400000000000
0000000004EFFFFFFFFFFFFFFFFFFFFFFFFFFB1000000000
000000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFD200000000
00000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE10000000
0000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0000000
000000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5000000
000003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD000000
000009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF200000
00000DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF600000
00000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF800000
00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA00000
00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
00001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA00000
00000EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF700000
000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE100000
0000008FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD3000000
000000014555555555555555555555555555555300000000
000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
}
sprite $person2 [48x48/16] {
0000000000000000000049BCCA7200000000000000000000
0000000000000000006EFFFFFFFFB3000000000000000000
00000000000000001CFFFFFFFFFFFF700000000000000000
0000000000000001EFFFFFFFFFFFFFF80000000000000000
000000000000000CFFFFFFFFFFFFFFFF6000000000000000
000000000000007FFFFFFFFFFFFFFFFFF100000000000000
00000000000001FFFFFFFFFFFFFFFFFFF900000000000000
00000000000006FFFFFFFFFFFFFFFFFFFF00000000000000
0000000000000BFFFFFFFFFFFFFFFFFFFF40000000000000
0000000000000EFFFFFFFFFFFFFFFFFFFF70000000000000
0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
0000000000000FFFFFFFFFFFFFFFFFFFFF80000000000000
0000000000000DFFFFFFFFFFFFFFFFFFFF60000000000000
0000000000000AFFFFFFFFFFFFFFFFFFFF40000000000000
00000000000006FFFFFFFFFFFFFFFFFFFE00000000000000
00000000000000EFFFFFFFFFFFFFFFFFF800000000000000
000000000000007FFFFFFFFFFFFFFFFFF100000000000000
000000000000000BFFFFFFFFFFFFFFFF5000000000000000
0000000000000001DFFFFFFFFFFFFFF70000000000000000
00000000000000000BFFFFFFFFFFFF500000000000000000
0000000000000000005DFFFFFFFFA1000000000000000000
0000000000000000000037ABB96100000000000000000000
000000000002578888300000000005888864100000000000
0000000007DFFFFFFFFD9643347BFFFFFFFFFB4000000000
00000004EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB10000000
0000007FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD2000000
000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE100000
00003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB00000
0000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50000
0003FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0000
0009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2000
000DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000
000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000
001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB000
001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB000
001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB000
001FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA000
000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8000
000DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6000
0009FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFFF2000
0003FFFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFFD0000
0000BFFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFF50000
00003FFFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFFB00000
000006FFFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFFE100000
0000007FFFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFFD2000000
00000004EFFF8FFFFFFFFFFFFFFFFFFFFFF8FFFB10000000
0000000007DF8FFFFFFFFFFFFFFFFFFFFFF8FB4000000000
000000000002578888888888888888888864100000000000
}
skinparam rectangle<<container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #438DD5
BorderColor #3C7FC0
}
skinparam database<<container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #438DD5
BorderColor #3C7FC0
}
skinparam queue<<container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #438DD5
BorderColor #3C7FC0
}
skinparam actor<<container>> {
StereotypeFontColor #438DD5
FontColor #438DD5
BackgroundColor #438DD5
BorderColor #3C7FC0
}
skinparam person<<container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #438DD5
BorderColor #3C7FC0
}
skinparam rectangle<<external_container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #B3B3B3
BorderColor #A6A6A6
}
skinparam database<<external_container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #B3B3B3
BorderColor #A6A6A6
}
skinparam queue<<external_container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #B3B3B3
BorderColor #A6A6A6
}
skinparam actor<<external_container>> {
StereotypeFontColor #B3B3B3
FontColor #B3B3B3
BackgroundColor #B3B3B3
BorderColor #A6A6A6
}
skinparam person<<external_container>> {
StereotypeFontColor #FFFFFF
FontColor #FFFFFF
BackgroundColor #B3B3B3
BorderColor #A6A6A6
}
skinparam rectangle<<component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #85BBF0
BorderColor #78A8D8
}
skinparam database<<component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #85BBF0
BorderColor #78A8D8
}
skinparam queue<<component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #85BBF0
BorderColor #78A8D8
}
skinparam actor<<component>> {
StereotypeFontColor #85BBF0
FontColor #85BBF0
BackgroundColor #85BBF0
BorderColor #78A8D8
}
skinparam person<<component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #85BBF0
BorderColor #78A8D8
}
skinparam rectangle<<external_component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #CCCCCC
BorderColor #BFBFBF
}
skinparam database<<external_component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #CCCCCC
BorderColor #BFBFBF
}
skinparam queue<<external_component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #CCCCCC
BorderColor #BFBFBF
}
skinparam actor<<external_component>> {
StereotypeFontColor #CCCCCC
FontColor #CCCCCC
BackgroundColor #CCCCCC
BorderColor #BFBFBF
}
skinparam person<<external_component>> {
StereotypeFontColor #000000
FontColor #000000
BackgroundColor #CCCCCC
BorderColor #BFBFBF
}
sprite $database [48x48/16] {
000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
0000000000000002469ABBCDCCBAA8631000000000000000
0000000000037BFFFFFFFFFFFFFFFFFFFEA6200000000000
0000000029EFFFFFFFFFFFFFFFFFFFFFFFFFFC6000000000
00000009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE40000000
000000CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7000000
000008FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF100000
00000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000
00000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000
00000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000
00000BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF400000
000006FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE000000
0000009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3000000
00000005DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA10000000
0000000005BFFFFFFFFFFFFFFFFFFFFFFFFFE82000000000
00000200000038BEFFFFFFFFFFFFFFFFDA62000000100000
00000BB2000000000256778988766410000000006E400000
00000BFFB610000000000000000000000000028EFF400000
00000BFFFFFC842000000000000000001369DFFFFF400000
00000BFFFFFFFFFFDB98766556788ACEFFFFFFFFFF400000
000008FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF100000
000000CFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7000000
00000009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE40000000
0000000029EFFFFFFFFFFFFFFFFFFFFFFFFFFC6000000000
0000000000038CFFFFFFFFFFFFFFFFFFFEA6200000000000
00000A6000000002469ABBCDCCBAA863100000002A400000
00000BFE7100000000000000000000000000004AFF400000
00000BFFFFC84000000000000000000000259EFFFF400000
00000BFFFFFFFFEB975432211234458ACFFFFFFFFF400000
000009FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF200000
000002EFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA000000
0000002DFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80000000
000000006DFFFFFFFFFFFFFFFFFFFFFFFFFFFFA200000000
000000000038CFFFFFFFFFFFFFFFFFFFFFEA610000000000
00000820000000468BDEFFFFFFFEECA75200000006400000
00000BFA30000000000000011000000000000006DF400000
00000BFFFD830000000000000000000000015AFFFF400000
00000BFFFFFFFCA753100000000001468BDFFFFFFF400000
00000AFFFFFFFFFFFFFFFEDDDEEFFFFFFFFFFFFFFF300000
000004FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD000000
0000005FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC1000000
00000002AFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE600000000
00000000017CFFFFFFFFFFFFFFFFFFFFFFFEA50000000000
000000000000048ACFFFFFFFFFFFFFEB9620000000000000
000000000000000000123445543320000000000000000000
000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000
}
skinparam folderBackgroundColor<<FA DATABASE>> White
top to bottom direction
rectangle "==Signer client\n\n Send commands to signer" <<external_system>> as SignerClient
rectangle "==Signer server\n<size:12>[System]</size>" <<boundary>> as Signer {
rectangle "==Signer Software" <<boundary>> as SignerSoftware {
rectangle "==Serial link handler\n//<size:12>[Go]</size>//\n\n Reads and writes to the serial interface" <<component>> as SerialHandler
rectangle "==Framer\n//<size:12>[Go]</size>//\n\n Parses and creates frames" <<component>> as Framer
rectangle "==Server protocol\n//<size:12>[Go]</size>//\n\n Server protocol state machine" <<component>> as ServerProtocol
rectangle "==Protocol handler\n//<size:12>[Go]</size>//\n\n Parses and creates protocol messages" <<component>> as ProtocolHandler
rectangle "==X.509 signing\n//<size:12>[Go]</size>//\n\n Handles X.509 certificate signing commands" <<component>> as X509SigningHandler
rectangle "==X.509 revocation\n//<size:12>[Go]</size>//\n\n Handles X.509 certificate revocation commands" <<component>> as X509RevocationHandler
rectangle "==OpenPGP signing\n//<size:12>[Go]</size>//\n\n Handles OpenPGP key signing commands"" <<component>> as OpenPGPSigningHandler
rectangle "==X.509 crl\n//<size:12>[Go]</size>//\n\n Handles X.509 CRL retrieval commands" <<component>> as X509CRLHandler
rectangle "==Health check\n//<size:12>[Go]</size>//\n\n Handles health check commands" <<component>> as HealthHandler
rectangle "==HSM access\n//<size:12>[Go]</size>//\n\n Handles HSM hardware access" <<component>> as HSMAccess
rectangle "==Synchronization handler\n//<size:12>[Go]</size>//\n\n Handles synchronization with other signer" <<component>> as SyncHandler
database "<$database>\n==Certificate repository\n//<size:12>[Go, Embedded Key-Value DB]</size>//" <<component>> as SignerDB
}
queue "==NATS Service\n//<size:12>[NATS]</size>//" <<component>> as NATS
}
rectangle "==Other signer\n<size:12>[System]</size>" <<boundary>> as Signer2 {
rectangle "==Signer Software" <<boundary>> as SignerSoftware2 {
rectangle "==Synchronization handler\n//<size:12>[Go]</size>//\n\n Handles synchronization with other signer" <<external_component>> as SyncHandler2
database "<$database>\n==Certificate repository\n//<size:12>[Go, Embedded Key-Value DB]</size>//" <<external_component>> as SignerDB2
}
queue "==NATS Service\n//<size:12>[NATS]</size>//" <<external_component>> as NATS2
}
rectangle "==HSM\n//<size:12>[PKCS#11]</size>//\n\n Hardware security module" <<external_component>> as HSM
SignerClient - ->> SerialHandler : **Uses**\n//<size:12>[USB serial link]</size>//
SerialHandler - ->> Framer : **Uses**
SerialHandler - ->> ServerProtocol : **Uses**
ServerProtocol - ->> ProtocolHandler : **Uses**
ProtocolHandler - ->> X509SigningHandler : **Uses**
ProtocolHandler - ->> X509CRLHandler : **Uses**
ProtocolHandler - ->> X509RevocationHandler : **Uses**
ProtocolHandler - ->> OpenPGPSigningHandler : **Uses**
ProtocolHandler - ->> HealthHandler : **Uses**
X509SigningHandler - ->> HSMAccess : **Uses**
X509SigningHandler - ->> SignerDB : **Writes**
X509RevocationHandler - ->> SignerDB : **Writes**
X509CRLHandler - ->> HSMAccess : **Uses**
X509CRLHandler - ->> SignerDB : **Reads**
OpenPGPSigningHandler - ->> HSMAccess : **Uses**
OpenPGPSigningHandler - ->> SignerDB : **Writes**
HealthHandler - ->> HSMAccess : **Checks**
HealthHandler - ->> SignerDB : **Checks**
SyncHandler - ->> SignerDB : **Uses**
SyncHandler <<- ->> NATS : **Synchronize**\n//<size:12>[NATS protocol]</size>//
NATS <<- ->> NATS2 : **Synchronize**\n//<size:12>[NATS/TLS]</size>//
SyncHandler2 <<- ->> NATS2 : **Synchronize**\n//<size:12>[NATS protocol]</size>//
SyncHandler2 - ->> SignerDB2 : **Uses**
HSMAccess - ->> HSM : **Uses**\n//<size:12>[PKCS#11]</size>//
@enduml
PlantUML version 1.2022.7(Mon Aug 22 19:01:30 CEST 2022)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Default Encoding: UTF-8
Language: de
Country: DE
--></g></svg>