voile/Sophia.Net.DRM/SophiaNetEntitlements.cs
2026-01-14 20:07:31 +01:00

89 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Sophia.Net.DRM
{
public class SophiaNetEntitlementCollection
{
public SophiaNetEntitlementCollection(params Guid[] guids)
{
_backend = new Guid[guids.Length];
Array.Copy(guids,0,_backend,0, guids.Length);
}
public SophiaNetEntitlementCollection(byte[] buffer)
{
_backend = new Guid[buffer.Length / 16];
for (int i = 0; i < buffer.Length; i += 16)
{
Span<byte> part = new Span<byte>(buffer, i, 16);
_backend[i / 16] = new Guid(part);
}
}
public byte[] Serialize()
{
byte[] outBuffer = new byte[_backend.Length * 16];
for (int i = 0; i < _backend.Length; i++)
{
byte[] iBuffer = _backend[i].ToByteArray();
Array.Copy(iBuffer, 0, outBuffer, i * 16, 16);
}
return outBuffer;
}
private Guid[] _backend;
public bool HasEntitlement(Guid check)
{
for (int i = 0; i < _backend.Length; i++)
{
if (_backend[i].Equals(check))
return true;
}
return false;
}
protected bool Equals(SophiaNetEntitlementCollection that)
{
if (this._backend.Length != that._backend.Length)
return false;
for (int i = 0; i < this._backend.Length; i++)
{
Guid mine = this._backend[i];
Guid theirs = that._backend[i];
if (!mine.Equals(theirs))
return false;
}
return true;
}
public override bool Equals(object? obj)
{
if (ReferenceEquals(null, obj))
return false;
if (ReferenceEquals(this, obj))
return true;
if (obj.GetType() != this.GetType())
return false;
return Equals((SophiaNetEntitlementCollection)obj);
}
public override int GetHashCode()
{
long result = 0;
for (int i = 0; i < _backend.Length; i++)
{
result += _backend[i].GetHashCode();
}
return (int)result;
}
}
}