using System;

namespace SharpCompress.Crypto
{
    public class KeyParameter
        : ICipherParameters
    {
        private readonly byte[] key;

        public KeyParameter(
            byte[] key)
        {
            if (key is null)
            {
                throw new ArgumentNullException(nameof(key));
            }

            this.key = (byte[])key.Clone();
        }

        public KeyParameter(
            byte[] key,
            int keyOff,
            int keyLen)
        {
            if (key is null)
            {
                throw new ArgumentNullException(nameof(key));
            }
            if (keyOff < 0 || keyOff > key.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(keyOff));
            }
            if (keyLen < 0 || (keyOff + keyLen) > key.Length)
            {
                throw new ArgumentOutOfRangeException(nameof(keyLen));
            }

            this.key = new byte[keyLen];
            Array.Copy(key, keyOff, this.key, 0, keyLen);
        }

        public byte[] GetKey()
        {
            return (byte[])key.Clone();
        }
    }
}