mirror of
https://github.com/SabreTools/BinaryObjectScanner.git
synced 2026-02-11 05:35:15 +00:00
870 lines
34 KiB
C#
870 lines
34 KiB
C#
using System.Linq;
|
|
using System.Text;
|
|
|
|
namespace BinaryObjectScanner.ASN1
|
|
{
|
|
#pragma warning disable IDE0011
|
|
|
|
/// <summary>
|
|
/// Methods related to Object Identifiers (OID) and OID-IRI formatting
|
|
/// </summary>
|
|
public static partial class ObjectIdentifier
|
|
{
|
|
/// <summary>
|
|
/// Parse an OID in separated-value notation into OID-IRI notation
|
|
/// </summary>
|
|
/// <param name="values">List of values to check against</param>
|
|
/// <param name="index">Current index into the list</param>
|
|
/// <returns>OID-IRI formatted string, if possible</returns>
|
|
/// <see href="http://www.oid-info.com/index.htm"/>
|
|
public static string ParseOIDToOIDIRINotation(ulong[] values)
|
|
{
|
|
// If we have an invalid set of values, we can't do anything
|
|
if (values == null || values.Length == 0)
|
|
return null;
|
|
|
|
// Set the initial index
|
|
int index = 0;
|
|
|
|
// Get a string builder for the path
|
|
var nameBuilder = new StringBuilder();
|
|
|
|
// Try to parse the standard value
|
|
string standard = ParseOIDToOIDIRINotation(values, ref index);
|
|
if (standard == null)
|
|
return null;
|
|
|
|
// Add the standard value to the output
|
|
nameBuilder.Append(standard);
|
|
|
|
// If we have no more items
|
|
if (index == values.Length)
|
|
return nameBuilder.ToString();
|
|
|
|
// Add trailing items as just values
|
|
nameBuilder.Append("/");
|
|
nameBuilder.Append(string.Join("/", values.Skip(index)));
|
|
|
|
// Create and return the string
|
|
return nameBuilder.ToString();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Parse an OID in separated-value notation into OID-IRI notation
|
|
/// </summary>
|
|
/// <param name="values">List of values to check against</param>
|
|
/// <param name="index">Current index into the list</param>
|
|
/// <returns>OID-IRI formatted string, if possible</returns>
|
|
/// <see href="http://www.oid-info.com/index.htm"/>
|
|
private static string ParseOIDToOIDIRINotation(ulong[] values, ref int index)
|
|
{
|
|
// If we have an invalid set of values, we can't do anything
|
|
if (values == null || values.Length == 0)
|
|
return null;
|
|
|
|
// If we have an invalid index, we can't do anything
|
|
if (index < 0 || index >= values.Length)
|
|
return null;
|
|
|
|
#region Start
|
|
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_0;
|
|
case 1: goto oid_1;
|
|
case 2: goto oid_2;
|
|
default: return $"/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// itu-t, ccitt, itu-r
|
|
#region 0.*
|
|
|
|
oid_0:
|
|
|
|
if (index == values.Length) return "/ITU-T";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_0_0;
|
|
case 2: return "/ITU-T/Administration";
|
|
case 3: return "/ITU-T/Network-Operator";
|
|
case 4: return "/ITU-T/Identified-Organization";
|
|
case 5: return "/ITU-R/R-Recommendation";
|
|
case 9: return "/ITU-T/Data";
|
|
default: return $"/ITU-T/{values[index - 1]}";
|
|
};
|
|
|
|
// recommendation
|
|
#region 0.0.*
|
|
|
|
oid_0_0:
|
|
|
|
if (index == values.Length) return "/ITU-T/Recommendation";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/ITU-T/Recommendation/A";
|
|
case 2: return "/ITU-T/Recommendation/B";
|
|
case 3: return "/ITU-T/Recommendation/C";
|
|
case 4: return "/ITU-T/Recommendation/D";
|
|
case 5: return "/ITU-T/Recommendation/E";
|
|
case 6: return "/ITU-T/Recommendation/F";
|
|
case 7: return "/ITU-T/Recommendation/G";
|
|
case 8: return "/ITU-T/Recommendation/H";
|
|
case 9: return "/ITU-T/Recommendation/I";
|
|
case 10: return "/ITU-T/Recommendation/J";
|
|
case 11: return "/ITU-T/Recommendation/K";
|
|
case 12: return "/ITU-T/Recommendation/L";
|
|
case 13: return "/ITU-T/Recommendation/M";
|
|
case 14: return "/ITU-T/Recommendation/N";
|
|
case 15: return "/ITU-T/Recommendation/O";
|
|
case 16: return "/ITU-T/Recommendation/P";
|
|
case 17: return "/ITU-T/Recommendation/Q";
|
|
case 18: return "/ITU-T/Recommendation/R";
|
|
case 19: return "/ITU-T/Recommendation/S";
|
|
case 20: return "/ITU-T/Recommendation/T";
|
|
case 21: return "/ITU-T/Recommendation/U";
|
|
case 22: return "/ITU-T/Recommendation/V";
|
|
case 24: return "/ITU-T/Recommendation/X";
|
|
case 25: return "/ITU-T/Recommendation/Y";
|
|
case 26: return "/ITU-T/Recommendation/Z";
|
|
default: return $"/ITU-T/Recommendation/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// iso
|
|
#region 1.*
|
|
|
|
oid_1:
|
|
|
|
if (index == values.Length) return "/ISO";
|
|
switch (values[index++])
|
|
{
|
|
case 0: return "/ISO/Standard";
|
|
case 1: return "/ISO/Registration-Authority";
|
|
case 2: goto oid_1_2;
|
|
case 3: return "/ISO/Identified-Organization";
|
|
default: return $"/ISO/{values[index - 1]}";
|
|
}
|
|
|
|
// member-body
|
|
#region 1.2.*
|
|
|
|
oid_1_2:
|
|
|
|
if (index == values.Length) return "/ISO/Member-Body";
|
|
switch (values[index++])
|
|
{
|
|
case 36: return "/ISO/Member-Body/AU";
|
|
case 40: return "/ISO/Member-Body/AT";
|
|
case 56: return "/ISO/Member-Body/BE";
|
|
case 124: return "/ISO/Member-Body/CA";
|
|
case 156: return "/ISO/Member-Body/CN";
|
|
case 203: return "/ISO/Member-Body/CZ";
|
|
case 208: return "/ISO/Member-Body/DK";
|
|
case 246: return "/ISO/Member-Body/FI";
|
|
case 250: return "/ISO/Member-Body/FR";
|
|
case 276: return "/ISO/Member-Body/DE";
|
|
case 300: return "/ISO/Member-Body/GR";
|
|
case 344: return "/ISO/Member-Body/HK";
|
|
case 372: return "/ISO/Member-Body/IE";
|
|
case 392: return "/ISO/Member-Body/JP";
|
|
case 398: return "/ISO/Member-Body/KZ";
|
|
case 410: return "/ISO/Member-Body/KR";
|
|
case 498: return "/ISO/Member-Body/MD";
|
|
case 528: return "/ISO/Member-Body/NL";
|
|
case 566: return "/ISO/Member-Body/NG";
|
|
case 578: return "/ISO/Member-Body/NO";
|
|
case 616: return "/ISO/Member-Body/PL";
|
|
case 643: return "/ISO/Member-Body/RU";
|
|
case 702: return "/ISO/Member-Body/SG";
|
|
case 752: return "/ISO/Member-Body/SE";
|
|
case 804: return "/ISO/Member-Body/UA";
|
|
case 826: return "/ISO/Member-Body/GB";
|
|
case 840: return "/ISO/Member-Body/US";
|
|
default: return $"/ISO/Member-Body/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// joint-iso-itu-t, joint-iso-ccitt
|
|
#region 2.*
|
|
|
|
oid_2:
|
|
|
|
if (index == values.Length) return "/Joint-ISO-ITU-T";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/ASN.1";
|
|
case 16: goto oid_2_16;
|
|
case 17: return "/Joint-ISO-ITU-T/Registration-Procedures";
|
|
case 23: return "/Joint-ISO-ITU-T/International-Organizations";
|
|
case 25: goto oid_2_25;
|
|
case 27: return "/Tag-Based";
|
|
case 28: return "/Joint-ISO-ITU-T/ITS";
|
|
case 41: return "/BIP";
|
|
case 42: goto oid_2_42;
|
|
case 48: goto oid_2_48;
|
|
case 49: goto oid_2_49;
|
|
case 50: return "/OIDResolutionSystem";
|
|
case 51: return "/GS1";
|
|
case 52: return "/Joint-ISO-ITU-T/UAV";
|
|
case 999: return "/Joint-ISO-ITU-T/Example";
|
|
default: return $"/Joint-ISO-ITU-T/{values[index - 1]}";
|
|
}
|
|
|
|
// country
|
|
#region 2.16.*
|
|
|
|
oid_2_16:
|
|
|
|
if (index == values.Length) return "/Country";
|
|
switch (values[index++])
|
|
{
|
|
case 4: return "/Country/AF";
|
|
case 8: return "/Country/AL";
|
|
case 12: return "/Country/DZ";
|
|
case 20: return "/Country/AD";
|
|
case 24: return "/Country/AO";
|
|
case 28: return "/Country/AG";
|
|
case 31: return "/Country/AZ";
|
|
case 32: return "/Country/AR";
|
|
case 36: return "/Country/AU";
|
|
case 40: return "/Country/AT";
|
|
case 44: return "/Country/BS";
|
|
case 48: return "/Country/BH";
|
|
case 50: return "/Country/BD";
|
|
case 51: return "/Country/AM";
|
|
case 52: return "/Country/BB";
|
|
case 56: return "/Country/BE";
|
|
case 60: return "/Country/BM";
|
|
case 64: return "/Country/BT";
|
|
case 68: return "/Country/BO";
|
|
case 70: return "/Country/BA";
|
|
case 72: return "/Country/BW";
|
|
case 76: return "/Country/BR";
|
|
case 84: return "/Country/BZ";
|
|
case 90: return "/Country/SB";
|
|
case 96: return "/Country/BN";
|
|
case 100: return "/Country/BG";
|
|
case 104: return "/Country/MM";
|
|
case 108: return "/Country/BI";
|
|
case 112: return "/Country/BY";
|
|
case 116: return "/Country/KH";
|
|
case 120: return "/Country/CM";
|
|
case 124: return "/Country/CA";
|
|
case 132: return "/Country/CV";
|
|
case 140: return "/Country/CF";
|
|
case 144: return "/Country/LK";
|
|
case 148: return "/Country/TD";
|
|
case 152: return "/Country/CL";
|
|
case 156: return "/Country/CN";
|
|
case 158: return "/Country/TW";
|
|
case 170: return "/Country/CO";
|
|
case 174: return "/Country/KM";
|
|
case 178: return "/Country/CG";
|
|
case 180: return "/Country/CD";
|
|
case 188: return "/Country/CR";
|
|
case 191: return "/Country/HR";
|
|
case 192: return "/Country/CU";
|
|
case 196: return "/Country/CY";
|
|
case 203: return "/Country/CZ";
|
|
case 204: return "/Country/BJ";
|
|
case 208: return "/Country/DK";
|
|
case 212: return "/Country/DM";
|
|
case 214: return "/Country/DO";
|
|
case 218: return "/Country/EC";
|
|
case 222: return "/Country/SV";
|
|
case 226: return "/Country/GQ";
|
|
case 231: return "/Country/ET";
|
|
case 232: return "/Country/ER";
|
|
case 233: return "/Country/EE";
|
|
case 242: return "/Country/FJ";
|
|
case 246: return "/Country/FI";
|
|
case 250: return "/Country/FR";
|
|
case 262: return "/Country/DJ";
|
|
case 266: return "/Country/GA";
|
|
case 268: return "/Country/GE";
|
|
case 270: return "/Country/GM";
|
|
case 275: return "/Country/PS";
|
|
case 276: return "/Country/DE";
|
|
case 288: return "/Country/GH";
|
|
case 296: return "/Country/KI";
|
|
case 300: return "/Country/GR";
|
|
case 308: return "/Country/GD";
|
|
case 320: return "/Country/GT";
|
|
case 324: return "/Country/GN";
|
|
case 328: return "/Country/GY";
|
|
case 332: return "/Country/HT";
|
|
case 336: return "/Country/VA";
|
|
case 340: return "/Country/HN";
|
|
case 344: return "/Country/HK";
|
|
case 348: return "/Country/HU";
|
|
case 352: return "/Country/IS";
|
|
case 356: return "/Country/IN";
|
|
case 360: return "/Country/ID";
|
|
case 364: return "/Country/IR";
|
|
case 368: return "/Country/IQ";
|
|
case 372: return "/Country/IE";
|
|
case 376: return "/Country/IL";
|
|
case 380: return "/Country/IT";
|
|
case 384: return "/Country/CI";
|
|
case 388: return "/Country/JM";
|
|
case 392: return "/Country/JP";
|
|
case 398: return "/Country/KZ";
|
|
case 400: return "/Country/JO";
|
|
case 404: return "/Country/KE";
|
|
case 408: return "/Country/KP";
|
|
case 410: return "/Country/KR";
|
|
case 414: return "/Country/KW";
|
|
case 417: return "/Country/KG";
|
|
case 418: return "/Country/LA";
|
|
case 422: return "/Country/LB";
|
|
case 426: return "/Country/LS";
|
|
case 428: return "/Country/LV";
|
|
case 430: return "/Country/LR";
|
|
case 434: return "/Country/LY";
|
|
case 438: return "/Country/LI";
|
|
case 440: return "/Country/LT";
|
|
case 442: return "/Country/LU";
|
|
case 450: return "/Country/MG";
|
|
case 454: return "/Country/MW";
|
|
case 458: return "/Country/MY";
|
|
case 462: return "/Country/MV";
|
|
case 466: return "/Country/ML";
|
|
case 470: return "/Country/MT";
|
|
case 478: return "/Country/MR";
|
|
case 480: return "/Country/MU";
|
|
case 484: return "/Country/MX";
|
|
case 492: return "/Country/MC";
|
|
case 496: return "/Country/MN";
|
|
case 498: return "/Country/MD";
|
|
case 499: return "/Country/ME";
|
|
case 504: return "/Country/MA";
|
|
case 508: return "/Country/MZ";
|
|
case 512: return "/Country/OM";
|
|
case 516: return "/Country/NA";
|
|
case 520: return "/Country/NR";
|
|
case 524: return "/Country/NP";
|
|
case 528: return "/Country/NL";
|
|
case 530: return "/Country/AN";
|
|
case 548: return "/Country/VU";
|
|
case 554: return "/Country/NZ";
|
|
case 558: return "/Country/NI";
|
|
case 562: return "/Country/NE";
|
|
case 566: return "/Country/NG";
|
|
case 578: return "/Country/NO";
|
|
case 583: return "/Country/FM";
|
|
case 584: return "/Country/MH";
|
|
case 585: return "/Country/PW";
|
|
case 586: return "/Country/PK";
|
|
case 591: return "/Country/PA";
|
|
case 598: return "/Country/PG";
|
|
case 600: return "/Country/PY";
|
|
case 604: return "/Country/PE";
|
|
case 608: return "/Country/PH";
|
|
case 616: return "/Country/PL";
|
|
case 620: return "/Country/PT";
|
|
case 624: return "/Country/GW";
|
|
case 626: return "/Country/TL";
|
|
case 634: return "/Country/QA";
|
|
case 642: return "/Country/RO";
|
|
case 643: return "/Country/RU";
|
|
case 646: return "/Country/RW";
|
|
case 659: return "/Country/KN";
|
|
case 662: return "/Country/LC";
|
|
case 670: return "/Country/VC";
|
|
case 674: return "/Country/SM";
|
|
case 678: return "/Country/ST";
|
|
case 682: return "/Country/SA";
|
|
case 686: return "/Country/SN";
|
|
case 688: return "/Country/RS";
|
|
case 690: return "/Country/SC";
|
|
case 694: return "/Country/SL";
|
|
case 702: return "/Country/SG";
|
|
case 703: return "/Country/SK";
|
|
case 704: return "/Country/VN";
|
|
case 705: return "/Country/SI";
|
|
case 706: return "/Country/SO";
|
|
case 710: return "/Country/ZA";
|
|
case 716: return "/Country/ZW";
|
|
case 724: return "/Country/ES";
|
|
case 728: return "/Country/SS";
|
|
case 729: return "/Country/SD";
|
|
case 740: return "/Country/SR";
|
|
case 748: return "/Country/SZ";
|
|
case 752: return "/Country/SE";
|
|
case 756: return "/Country/CH";
|
|
case 760: return "/Country/SY";
|
|
case 762: return "/Country/TJ";
|
|
case 764: return "/Country/TH";
|
|
case 768: return "/Country/TG";
|
|
case 776: return "/Country/TO";
|
|
case 780: return "/Country/TT";
|
|
case 784: return "/Country/AE";
|
|
case 788: return "/Country/TN";
|
|
case 792: return "/Country/TR";
|
|
case 795: return "/Country/TM";
|
|
case 798: return "/Country/TV";
|
|
case 800: return "/Country/UG";
|
|
case 804: return "/Country/UA";
|
|
case 807: return "/Country/MK";
|
|
case 818: return "/Country/EG";
|
|
case 826: return "/Country/GB";
|
|
case 834: return "/Country/TZ";
|
|
case 840: return "/Country/US";
|
|
case 854: return "/Country/BF";
|
|
case 858: return "/Country/UY";
|
|
case 860: return "/Country/UZ";
|
|
case 862: return "/Country/VE";
|
|
case 882: return "/Country/WS";
|
|
case 887: return "/Country/YE";
|
|
case 894: return "/Country/ZM";
|
|
default: return $"/Country/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// uuid [TODO: Requires 128-bit values]
|
|
#region 2.25.*
|
|
|
|
oid_2_25:
|
|
|
|
if (index == values.Length) return "/Joint-ISO-ITU-T/UUID";
|
|
switch (values[index++])
|
|
{
|
|
case 0: return "/Joint-ISO-ITU-T/UUID/00000000-0000-0000-0000-000000000000";
|
|
//case 288786655511405443130567505384701230: return "/Joint-ISO-ITU-T/UUID/00379e48-0a2b-1085-b288-0002a5d5fd2e";
|
|
//case 987895962269883002155146617097157934: return "/Joint-ISO-ITU-T/UUID/00be4308-0c89-1085-8ea0-0002a5d5fd2e";
|
|
//case 1858228783942312576083372383319475483: return "/Joint-ISO-ITU-T/UUID/0165e1c0-a655-11e0-95b8-0002a5d5c51b";
|
|
//case 2474299330026746002885628159579243803: return "/Joint-ISO-ITU-T/UUID/01dc8860-25fb-11da-82b2-0002a5d5c51b";
|
|
//case 3263645701162998421821186056373271854: return "/Joint-ISO-ITU-T/UUID/02748e28-08c4-1085-b21d-0002a5d5fd2e";
|
|
//case 3325839809379844461264382260940242222: return "/Joint-ISO-ITU-T/UUID/02808890-0ad8-1085-9bdf-0002a5d5fd2e";
|
|
// TODO: Left off at http://www.oid-info.com/get/2.25.3664154270495270126161055518190585115
|
|
default: return $"/Joint-ISO-ITU-T/UUID/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// telebiometrics
|
|
#region 2.42.*
|
|
|
|
oid_2_42:
|
|
|
|
if (index == values.Length) return "/Telebiometrics";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_0;
|
|
case 1: goto oid_2_42_1;
|
|
case 2: goto oid_2_42_2;
|
|
case 3: goto oid_2_42_3;
|
|
default: return $"/Telebiometrics/{values[index - 1]}";
|
|
}
|
|
|
|
// modules
|
|
#region 2.42.0.*
|
|
|
|
oid_2_42_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/Modules";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_0_0;
|
|
default: return $"/Telebiometrics/Modules/{values[index - 1]}";
|
|
}
|
|
|
|
// main
|
|
#region 2.42.0.0.*
|
|
|
|
oid_2_42_0_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/Modules/Main_Module";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/Modules/Main_Module/Version1";
|
|
default: return $"/Telebiometrics/Modules/Main_Module/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// tmm
|
|
#region 2.42.1.*
|
|
|
|
oid_2_42_1:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_1_0;
|
|
case 1: goto oid_2_42_1_1;
|
|
case 2: goto oid_2_42_1_2;
|
|
case 3: goto oid_2_42_1_3;
|
|
case 4: return "/Telebiometrics/TMM/Practitioners";
|
|
default: return $"/Telebiometrics/TMM/{values[index - 1]}";
|
|
}
|
|
|
|
// modules
|
|
#region 2.42.1.0.*
|
|
|
|
oid_2_42_1_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM/Modules";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_1_0_0;
|
|
default: return $"/Telebiometrics/TMM/Modules/{values[index - 1]}";
|
|
}
|
|
|
|
// main
|
|
#region 2.42.1.0.0.*
|
|
|
|
oid_2_42_1_0_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM/Modules/Main";
|
|
switch (values[index++])
|
|
{
|
|
case 0: return "/Telebiometrics/TMM/Modules/Main/First_Version";
|
|
default: return $"/Telebiometrics/TMM/Modules/Main/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// measures, metric
|
|
#region 2.42.1.1.*
|
|
|
|
oid_2_42_1_1:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM/Measures";
|
|
switch (values[index++])
|
|
{
|
|
case 1: goto oid_2_42_1_1_1;
|
|
case 2: return "/Telebiometrics/TMM/Measures/Units";
|
|
case 3: return "/Telebiometrics/TMM/Measures/Symbols";
|
|
case 4: return "/Telebiometrics/TMM/Measures/Conditions";
|
|
case 5: goto oid_2_42_1_1_5;
|
|
default: return $"/Telebiometrics/TMM/Measures/{values[index - 1]}";
|
|
}
|
|
|
|
// quantities
|
|
#region 2.42.1.1.1.*
|
|
|
|
oid_2_42_1_1_1:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM/Measures/Quantities";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/TMM/Measures/Quantities/Physics";
|
|
case 2: return "/Telebiometrics/TMM/Measures/Quantities/Chemistry";
|
|
case 3: return "/Telebiometrics/TMM/Measures/Quantities/Biology";
|
|
case 4: return "/Telebiometrics/TMM/Measures/Quantities/Culturology";
|
|
case 5: return "/Telebiometrics/TMM/Measures/Quantities/Psychology";
|
|
default: return $"/Telebiometrics/TMM/Measures/Quantities/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// methods
|
|
#region 2.42.1.1.5.*
|
|
|
|
oid_2_42_1_1_5:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM/Measures/Methods";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/TMM/Measures/Methods/Physics";
|
|
case 2: return "/Telebiometrics/TMM/Measures/Methods/Chemistry";
|
|
case 3: return "/Telebiometrics/TMM/Measures/Methods/Biology";
|
|
case 4: return "/Telebiometrics/TMM/Measures/Methods/Culturology";
|
|
case 5: return "/Telebiometrics/TMM/Measures/Methods/Psychology";
|
|
default: return $"/Telebiometrics/TMM/Measures/Methods/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// fields-of-study, scientific
|
|
#region 2.42.1.2.*
|
|
|
|
oid_2_42_1_2:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM/Fields_of_Study";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/TMM/Fields_of_Study/Physics";
|
|
case 2: return "/Telebiometrics/TMM/Fields_of_Study/Chemistry";
|
|
case 3: return "/Telebiometrics/TMM/Fields_of_Study/Biology";
|
|
case 4: return "/Telebiometrics/TMM/Fields_of_Study/Culturology";
|
|
case 5: return "/Telebiometrics/TMM/Fields_of_Study/Psychology";
|
|
default: return $"/Telebiometrics/TMM/Fields_of_Study/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// modalities, sensory
|
|
#region 2.42.1.3.*
|
|
|
|
oid_2_42_1_3:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/TMM/Modalities";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/TMM/Modalities/Tango";
|
|
case 2: return "/Telebiometrics/TMM/Modalities/Video";
|
|
case 3: return "/Telebiometrics/TMM/Modalities/Audio";
|
|
case 4: return "/Telebiometrics/TMM/Modalities/Chemo";
|
|
case 5: return "/Telebiometrics/TMM/Modalities/Radio";
|
|
case 6: return "/Telebiometrics/TMM/Modalities/Calor";
|
|
case 7: return "/Telebiometrics/TMM/Modalities/Electro";
|
|
default: return $"/Telebiometrics/TMM/Modalities/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// human-physiology
|
|
#region 2.42.2.*
|
|
|
|
oid_2_42_2:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/Human_Physiology";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_2_0;
|
|
case 1: goto oid_2_42_2_1;
|
|
case 2: return "/Telebiometrics/Human_Physiology/Symbol_Combinations";
|
|
default: return $"/Telebiometrics/Human_Physiology/{values[index - 1]}";
|
|
}
|
|
|
|
// modules
|
|
#region 2.42.2.0.*
|
|
|
|
oid_2_42_2_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/Human_Physiology/Modules";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_2_0_0;
|
|
default: return $"/Telebiometrics/Human_Physiology/Modules/{values[index - 1]}";
|
|
}
|
|
|
|
// main
|
|
#region 2.42.2.0.0.*
|
|
|
|
oid_2_42_2_0_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/Human_Physiology/Modules/Main_Module";
|
|
switch (values[index++])
|
|
{
|
|
case 0: return "/Telebiometrics/Human_Physiology/Modules/Main_Module/First_Version";
|
|
default: return $"/Telebiometrics/Human_Physiology/Modules/Main_Module/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// symbols
|
|
#region 2.42.2.1.*
|
|
|
|
oid_2_42_2_1:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/Human_Physiology/Symbols";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/Human_Physiology/Symbols/Tango_in";
|
|
case 2: return "/Telebiometrics/Human_Physiology/Symbols/Video_in";
|
|
case 3: return "/Telebiometrics/Human_Physiology/Symbols/Audio_in";
|
|
case 4: return "/Telebiometrics/Human_Physiology/Symbols/Chemo_in";
|
|
case 5: return "/Telebiometrics/Human_Physiology/Symbols/Radio_in";
|
|
case 6: return "/Telebiometrics/Human_Physiology/Symbols/Calor_in";
|
|
case 7: return "/Telebiometrics/Human_Physiology/Symbols/Tango_out";
|
|
case 8: return "/Telebiometrics/Human_Physiology/Symbols/Video_out";
|
|
case 9: return "/Telebiometrics/Human_Physiology/Symbols/Audio_out";
|
|
case 10: return "/Telebiometrics/Human_Physiology/Symbols/Chemo_out";
|
|
case 11: return "/Telebiometrics/Human_Physiology/Symbols/Radio_out";
|
|
case 12: return "/Telebiometrics/Human_Physiology/Symbols/Calor_out";
|
|
case 13: return "/Telebiometrics/Human_Physiology/Symbols/Safe";
|
|
case 14: return "/Telebiometrics/Human_Physiology/Symbols/Threshold";
|
|
default: return $"/Telebiometrics/Human_Physiology/Symbols/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// obj-cat, telehealth, e-health-protocol, th
|
|
#region 2.42.3.*
|
|
|
|
oid_2_42_3:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_3_0;
|
|
case 1: return "/Telebiometrics/E_Health_Protocol/[Patient schemes]";
|
|
case 2: return "/Telebiometrics/E_Health_Protocol/[Medical staff schemes]";
|
|
case 3: return "/Telebiometrics/E_Health_Protocol/[Observer schemes]";
|
|
case 4: return "/Telebiometrics/E_Health_Protocol/[Pharmaceutical schemes]";
|
|
case 5: return "/Telebiometrics/E_Health_Protocol/[Laboratory schemes]";
|
|
case 6: return "/Telebiometrics/E_Health_Protocol/[Drug manufacturer schemes]";
|
|
case 7: return "/Telebiometrics/E_Health_Protocol/[Medical device schemes]";
|
|
case 8: return "/Telebiometrics/E_Health_Protocol/[Medical software schemes]";
|
|
case 9: return "/Telebiometrics/E_Health_Protocol/[Medical insurance schemes]";
|
|
case 10: return "/Telebiometrics/E_Health_Protocol/[Medical record schemes]";
|
|
default: return $"/Telebiometrics/E_Health_Protocol/{values[index - 1]}";
|
|
}
|
|
|
|
// obj-cat, telehealth, e-health-protocol, th
|
|
#region 2.42.3.0.*
|
|
|
|
oid_2_42_3_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol/Modules";
|
|
switch (values[index++])
|
|
{
|
|
case 0: goto oid_2_42_3_0_0;
|
|
case 1: goto oid_2_42_3_0_1;
|
|
case 2: goto oid_2_42_3_0_2;
|
|
case 3: goto oid_2_42_3_0_3;
|
|
case 4: goto oid_2_42_3_0_4;
|
|
case 5: goto oid_2_42_3_0_5;
|
|
default: return $"/Telebiometrics/E_Health_Protocol/Modules/{values[index - 1]}";
|
|
}
|
|
|
|
// identification
|
|
#region 2.42.3.0.0.*
|
|
|
|
oid_2_42_3_0_0:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol/Modules/Identification";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/E_Health_Protocol/Modules/Identification/Version1";
|
|
default: return $"/Telebiometrics/E_Health_Protocol/Modules/Identification/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// set-up
|
|
#region 2.42.3.0.1.*
|
|
|
|
oid_2_42_3_0_1:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol/Modules/Setup";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/E_Health_Protocol/Modules/Setup/Version1";
|
|
default: return $"/Telebiometrics/E_Health_Protocol/Modules/Setup/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// send-and-ack
|
|
#region 2.42.3.0.2.*
|
|
|
|
oid_2_42_3_0_2:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol/Modules/Send-and-ack";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/E_Health_Protocol/Modules/Send-and-ack/Version1";
|
|
default: return $"/Telebiometrics/E_Health_Protocol/Modules/Send-and-ack/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// command-response
|
|
#region 2.42.3.0.3.*
|
|
|
|
oid_2_42_3_0_3:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol/Modules/Command-response";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/E_Health_Protocol/Modules/Command-response/Version1";
|
|
default: return $"/Telebiometrics/E_Health_Protocol/Modules/Command-response/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// quantity-and-units
|
|
#region 2.42.3.0.4.*
|
|
|
|
oid_2_42_3_0_4:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol/Modules/Quantities_And_Units";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Telebiometrics/E_Health_Protocol/Modules/Quantities_And_Units/Version1";
|
|
default: return $"/Telebiometrics/E_Health_Protocol/Modules/Quantities_And_Units/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// examples
|
|
#region 2.42.3.0.5.*
|
|
|
|
oid_2_42_3_0_5:
|
|
|
|
if (index == values.Length) return "/Telebiometrics/E_Health_Protocol/Modules/Examples";
|
|
switch (values[index++])
|
|
{
|
|
case 0: return "/Telebiometrics/E_Health_Protocol/Modules/Examples/Command_Response";
|
|
case 1: return "/Telebiometrics/E_Health_Protocol/Modules/Examples/Data_Message";
|
|
default: return $"/Telebiometrics/E_Health_Protocol/Modules/Examples/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
|
|
// cybersecurity
|
|
#region 2.48.*
|
|
|
|
oid_2_48:
|
|
|
|
if (index == values.Length) return "/Cybersecurity";
|
|
switch (values[index++])
|
|
{
|
|
case 1: return "/Cybersecurity/Country";
|
|
case 2: return "/Cybersecurity/International-Org";
|
|
default: return $"/Cybersecurity/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
// alerting
|
|
#region 2.49.*
|
|
|
|
oid_2_49:
|
|
|
|
if (index == values.Length) return "/Alerting";
|
|
switch (values[index++])
|
|
{
|
|
case 0: return "/Alerting/WMO";
|
|
default: return $"/Alerting/{values[index - 1]}";
|
|
}
|
|
|
|
#endregion
|
|
|
|
#endregion
|
|
}
|
|
}
|
|
|
|
#pragma warning restore IDE0011
|
|
} |