Skip to content

Commit 78461df

Browse files
authored
Merge pull request #14 from virot/YubiKeyPolicies
Fix YubiKeyPolicy spelling
2 parents 60b363a + 8b7f3be commit 78461df

File tree

4 files changed

+48
-14
lines changed

4 files changed

+48
-14
lines changed

TameMyCerts.Tests/XMLPolicyTests.cs

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -103,21 +103,16 @@ public void Test_Yubikey_Policies()
103103

104104
string sampleXML = @"<CertificateRequestPolicy xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance""
105105
xmlns:xsd=""http://www.w3.org/2001/XMLSchema"">
106-
<YubikeyPolicies>
107-
<YubikeyPolicy>
106+
<YubiKeyPolicies>
107+
<YubiKeyPolicy>
108108
<Action>Allow</Action>
109-
<PinPolicy>
110-
<string>Always</string>
111-
<string>Once</string>
112-
</PinPolicy>
113-
<TouchPolicy>
114-
<string>Always</string>
115-
<string>Cached</string>
116-
</TouchPolicy>
117-
</YubikeyPolicy>
118-
</YubikeyPolicies>
119-
109+
<Slot>
110+
<string>9A</string>
111+
</Slot>
112+
</YubiKeyPolicy>
113+
</YubiKeyPolicies>
120114
</CertificateRequestPolicy>
115+
121116
";
122117
File.WriteAllText(filename, sampleXML);
123118
_listener.ClearEvents();

TameMyCerts.Tests/YubikeyValidatorTests.cs

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -738,6 +738,42 @@ public void Validate_Slot_Allow_if_Wrong_slot_is_denied_10020()
738738
Assert.False(result.DeniedForIssuance);
739739
PrintResult(result);
740740

741+
output.WriteLine(policy.SaveToString());
742+
}
743+
[Fact]
744+
public void Validate_Slot_with_0x_10021()
745+
{
746+
CertificateDatabaseRow dbRow = new CertificateDatabaseRow(_yubikey_valid_5_4_3_Once_Never_UsbAKeychain_9a_Normal_RSA_2048_CSR, CertCli.CR_IN_PKCS10, null, 10020);
747+
CertificateRequestPolicy policy = _policy;
748+
var result = new CertificateRequestValidationResult(dbRow);
749+
750+
// Required slot 0x9a, which needs to match 9a
751+
policy = _policy;
752+
policy.YubikeyPolicy[0].Slot = new List<string> { "0x9a" };
753+
result = new CertificateRequestValidationResult(dbRow);
754+
result = _YKvalidator.ExtractAttestion(result, _policy, dbRow, out var yubikeyInfo);
755+
result = _YKvalidator.VerifyRequest(result, policy, yubikeyInfo, dbRow.RequestID);
756+
Assert.False(result.DeniedForIssuance);
757+
PrintResult(result);
758+
759+
output.WriteLine(policy.SaveToString());
760+
}
761+
[Fact]
762+
public void Validate_Slot_incorrect_with_0x_10022()
763+
{
764+
CertificateDatabaseRow dbRow = new CertificateDatabaseRow(_yubikey_valid_5_4_3_Once_Never_UsbAKeychain_9a_Normal_RSA_2048_CSR, CertCli.CR_IN_PKCS10, null, 10020);
765+
CertificateRequestPolicy policy = _policy;
766+
var result = new CertificateRequestValidationResult(dbRow);
767+
768+
// Should not match the csr which is 9A
769+
policy = _policy;
770+
policy.YubikeyPolicy[0].Slot = new List<string> { "0x9e" };
771+
result = new CertificateRequestValidationResult(dbRow);
772+
result = _YKvalidator.ExtractAttestion(result, _policy, dbRow, out var yubikeyInfo);
773+
result = _YKvalidator.VerifyRequest(result, policy, yubikeyInfo, dbRow.RequestID);
774+
Assert.True(result.DeniedForIssuance);
775+
PrintResult(result);
776+
741777
output.WriteLine(policy.SaveToString());
742778
}
743779
}

TameMyCerts/Models/CertificateRequestPolicy.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ public class CertificateRequestPolicy
8585
public DirectoryServicesMapping DirectoryServicesMapping { get; set; }
8686

8787
[XmlArray(ElementName = "YubiKeyPolicies")]
88+
[XmlArrayItem(ElementName = "YubiKeyPolicy")]
8889
public List<YubikeyPolicy> YubikeyPolicy { get; set; } = new();
8990

9091
[XmlElement(ElementName = "SupplementDnsNames")]

TameMyCerts/Validators/YubikeyValidator.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,9 @@ private bool ObjectMatchesPolicy(YubikeyPolicy policy, YubikeyObject yubikey)
186186
#endregion
187187

188188
#region Slot
189-
if (policy.Slot.Any() && !policy.Slot.Contains(yubikey.Slot))
189+
// Look if the slot is in the policy, if not, say that we arent matching
190+
// Look for both 0xXX and XX
191+
if (policy.Slot.Any() && !(policy.Slot.Any(s => s.Equals(yubikey.Slot, StringComparison.OrdinalIgnoreCase)) || policy.Slot.Any(s => s.Equals($"0x{yubikey.Slot}", StringComparison.OrdinalIgnoreCase))))
190192
{
191193
return false;
192194
}

0 commit comments

Comments
 (0)