aptos-labs / Aptos-Unity-SDK

Aptos Labs Unity SDK
Other
38 stars 12 forks source link

Implement Authenticator #25

Closed kPatch closed 1 year ago

kPatch commented 1 year ago

Class blueprint:


using Aptos.Utilities.BCS;

namespace Aptos.Authenticator
{
    public interface IAuthenticator
    {
        public bool Verify(byte[] data);

        public Serialization Serialize(Serialization serializer);
    }

    public class Authenticator : IAuthenticator
    {
        public const int ED25519 = 1;
        public const int MULTI_ED25519 = 1;
        public const int MULTI_AGENT = 2;

        private int Variant;
        private readonly IAuthenticator authenticator;

        public Authenticator(IAuthenticator authenticator)
        {
            // TODO: Fix comparison
            if(authenticator == typeof(Ed25519Authenticator))
            {
                this.Variant = Authenticator.ED25519;
            }
            else if (authenticator == typeof(MultiEd25519Authenticator))
            {
                this.Variant = Authenticator.MULTI_ED25519;
            }
            else if(authenticator == typeof(MultiAgentAuthenticator))
            {
                this.Variant = Authenticator.MULTI_AGENT;
            }
            else
            {
                // TODO: Return exception: Invalid type
            }
        }

        // TODO: Review Authenticator serialization implementation
        public Serialization Serialize(Serialization serializer)
        {
            serializer.SerializeU32AsUleb128((uint)this.Variant);
            //serializer.Serialize(authenticator.Serialize());
            Serialization authSerializer = authenticator.Serialize(serializer);
            byte[] output = authSerializer.GetBytes();
            serializer.SerializeFixedBytes(output);
            return serializer;
        }

        public bool Verify(byte[] data)
        {
            //throw new System.NotImplementedException();
            return this.authenticator.Verify(data);
        }
    }

    public class Ed25519Authenticator : IAuthenticator
    {
        public Serialization Serialize(Serialization serializer)
        {
            throw new System.NotImplementedException();
        }

        public bool Verify(byte[] data)
        {
            throw new System.NotImplementedException();
        }
    }

    public class MultiAgentAuthenticator : IAuthenticator
    {
        public Serialization Serialize(Serialization serializer)
        {
            throw new System.NotImplementedException();
        }

        public bool Verify(byte[] data)
        {
            throw new System.NotImplementedException();
        }
    }

    public class MultiEd25519Authenticator : IAuthenticator
    {
        public Serialization Serialize(Serialization serializer)
        {
            throw new System.NotImplementedException();
        }

        public bool Verify(byte[] data)
        {
            throw new System.NotImplementedException();
        }
    }
}
kPatch commented 1 year ago

ad87db12142c6cff0b4866aceb715b41d3afa60f