PskIdentity.cs 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. #if !BESTHTTP_DISABLE_ALTERNATE_SSL && (!UNITY_WEBGL || UNITY_EDITOR)
  2. #pragma warning disable
  3. using System;
  4. using System.IO;
  5. using BestHTTP.SecureProtocol.Org.BouncyCastle.Utilities;
  6. namespace BestHTTP.SecureProtocol.Org.BouncyCastle.Tls
  7. {
  8. public sealed class PskIdentity
  9. {
  10. private readonly byte[] m_identity;
  11. private readonly long m_obfuscatedTicketAge;
  12. public PskIdentity(byte[] identity, long obfuscatedTicketAge)
  13. {
  14. if (null == identity)
  15. throw new ArgumentNullException("identity");
  16. if (identity.Length < 1 || !TlsUtilities.IsValidUint16(identity.Length))
  17. throw new ArgumentException("should have length from 1 to 65535", "identity");
  18. if (!TlsUtilities.IsValidUint32(obfuscatedTicketAge))
  19. throw new ArgumentException("should be a uint32", "obfuscatedTicketAge");
  20. this.m_identity = identity;
  21. this.m_obfuscatedTicketAge = obfuscatedTicketAge;
  22. }
  23. public int GetEncodedLength()
  24. {
  25. return 6 + m_identity.Length;
  26. }
  27. public byte[] Identity
  28. {
  29. get { return m_identity; }
  30. }
  31. public long ObfuscatedTicketAge
  32. {
  33. get { return m_obfuscatedTicketAge; }
  34. }
  35. public void Encode(Stream output)
  36. {
  37. TlsUtilities.WriteOpaque16(Identity, output);
  38. TlsUtilities.WriteUint32(ObfuscatedTicketAge, output);
  39. }
  40. public static PskIdentity Parse(Stream input)
  41. {
  42. byte[] identity = TlsUtilities.ReadOpaque16(input, 1);
  43. long obfuscatedTicketAge = TlsUtilities.ReadUint32(input);
  44. return new PskIdentity(identity, obfuscatedTicketAge);
  45. }
  46. public override bool Equals(object obj)
  47. {
  48. PskIdentity that = obj as PskIdentity;
  49. if (null == that)
  50. return false;
  51. return this.m_obfuscatedTicketAge == that.m_obfuscatedTicketAge
  52. && Arrays.ConstantTimeAreEqual(this.m_identity, that.m_identity);
  53. }
  54. public override int GetHashCode()
  55. {
  56. return Arrays.GetHashCode(m_identity) ^ m_obfuscatedTicketAge.GetHashCode();
  57. }
  58. }
  59. }
  60. #pragma warning restore
  61. #endif