Пример #1
0
        internal unsafe override void InitializeCore(
            ReadOnlySpan <byte> key,
            out IncrementalMacState state)
        {
            Debug.Assert(key.Length >= crypto_generichash_blake2b_KEYBYTES_MIN);
            Debug.Assert(key.Length <= crypto_generichash_blake2b_KEYBYTES_MAX);
            Debug.Assert(MacSize >= crypto_generichash_blake2b_BYTES_MIN);
            Debug.Assert(MacSize <= crypto_generichash_blake2b_BYTES_MAX);

            byte *buffer = stackalloc byte[63 + Unsafe.SizeOf <crypto_generichash_blake2b_state>()];
            crypto_generichash_blake2b_state *state_ = Align64(buffer);

            fixed(byte *k = key)
            {
                int error = crypto_generichash_blake2b_init(
                    state_,
                    k,
                    (UIntPtr)key.Length,
                    (UIntPtr)MacSize);

                Debug.Assert(error == 0);
            }

            state.blake2b = *state_;
        }
Пример #2
0
        internal unsafe override bool FinalizeAndVerifyCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> mac)
        {
            Debug.Assert(mac.Length >= crypto_generichash_blake2b_BYTES_MIN);
            Debug.Assert(mac.Length <= crypto_generichash_blake2b_BYTES_MAX);

            byte *buffer = stackalloc byte[63 + Unsafe.SizeOf <crypto_generichash_blake2b_state>()];
            crypto_generichash_blake2b_state *state_ = Align64(buffer);

            *state_ = state.blake2b;

            byte *temp = stackalloc byte[mac.Length];

            int error = crypto_generichash_blake2b_final(
                state_,
                temp,
                (UIntPtr)mac.Length);

            Debug.Assert(error == 0);

            fixed(byte * @out = mac)
            {
                return(CryptographicOperations.FixedTimeEquals(temp, @out, mac.Length));
            }
        }
Пример #3
0
        internal override bool FinalizeAndVerifyCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> mac)
        {
            Debug.Assert(mac.Length >= crypto_generichash_blake2b_BYTES_MIN);
            Debug.Assert(mac.Length <= crypto_generichash_blake2b_BYTES_MAX);

            Span <byte> buffer = stackalloc byte[63 + Unsafe.SizeOf <crypto_generichash_blake2b_state>()];
            ref crypto_generichash_blake2b_state state_ = ref AlignPinnedReference(ref buffer.GetPinnableReference());
Пример #4
0
        internal override void UpdateCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> data)
        {
            int error = crypto_auth_hmacsha256_update(
                ref state.hmacsha256,
                in data.GetPinnableReference(),
                (ulong)data.Length);

            Debug.Assert(error == 0);
        }
Пример #5
0
        internal override void FinalizeCore(
            ref IncrementalMacState state,
            Span <byte> mac)
        {
            Debug.Assert(mac.Length == crypto_auth_hmacsha256_BYTES);

            int error = crypto_auth_hmacsha256_final(
                ref state.hmacsha256,
                ref mac.GetPinnableReference());

            Debug.Assert(error == 0);
        }
Пример #6
0
        internal override void InitializeCore(
            ReadOnlySpan <byte> key,
            out IncrementalMacState state)
        {
            Debug.Assert(key.Length == crypto_hash_sha256_BYTES);

            int error = crypto_auth_hmacsha256_init(
                out state.hmacsha256,
                in key.GetPinnableReference(),
                (UIntPtr)key.Length);

            Debug.Assert(error == 0);
        }
Пример #7
0
        internal unsafe override void UpdateCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> data)
        {
            fixed(crypto_generichash_blake2b_state *state_ = &state.blake2b)
            fixed(byte * @in = data)
            {
                int error = crypto_generichash_blake2b_update(
                    state_,
                    @in,
                    (ulong)data.Length);

                Debug.Assert(error == 0);
            }
        }
Пример #8
0
        internal unsafe override void UpdateCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> data)
        {
            fixed(crypto_auth_hmacsha512_state *state_ = &state.hmacsha512)
            fixed(byte * @in = data)
            {
                int error = crypto_auth_hmacsha512_update(
                    state_,
                    @in,
                    (ulong)data.Length);

                Debug.Assert(error == 0);
            }
        }
Пример #9
0
        internal override void FinalizeCore(
            ref IncrementalMacState state,
            Span <byte> mac)
        {
            Debug.Assert(mac.Length <= crypto_auth_hmacsha256_BYTES);

            Span <byte> temp = stackalloc byte[crypto_auth_hmacsha256_BYTES];

            int error = crypto_auth_hmacsha256_final(
                ref state.hmacsha256,
                ref temp.GetPinnableReference());

            Debug.Assert(error == 0);

            temp.Slice(0, mac.Length).CopyTo(mac);
        }
Пример #10
0
        internal unsafe override void InitializeCore(
            SecureMemoryHandle keyHandle,
            out IncrementalMacState state)
        {
            Debug.Assert(keyHandle.Size == crypto_hash_sha256_BYTES);

            fixed(crypto_auth_hmacsha256_state *state_ = &state.hmacsha256)
            {
                int error = crypto_auth_hmacsha256_init(
                    state_,
                    keyHandle,
                    (UIntPtr)keyHandle.Size);

                Debug.Assert(error == 0);
            }
        }
Пример #11
0
        internal override bool FinalizeAndVerifyCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> mac)
        {
            Debug.Assert(mac.Length == crypto_auth_hmacsha256_BYTES);

            Span <byte> temp = stackalloc byte[crypto_auth_hmacsha256_BYTES];

            int error = crypto_auth_hmacsha256_final(
                ref state.hmacsha256,
                ref temp.GetPinnableReference());

            Debug.Assert(error == 0);

            return(CryptographicOperations.FixedTimeEquals(temp, mac));
        }
Пример #12
0
        internal unsafe override void InitializeCore(
            ReadOnlySpan <byte> key,
            out IncrementalMacState state)
        {
            Debug.Assert(key.Length == crypto_hash_sha256_BYTES);

            fixed(crypto_auth_hmacsha256_state *state_ = &state.hmacsha256)
            fixed(byte *k = key)
            {
                int error = crypto_auth_hmacsha256_init(
                    state_,
                    k,
                    (UIntPtr)key.Length);

                Debug.Assert(error == 0);
            }
        }
Пример #13
0
        internal unsafe override void FinalizeCore(
            ref IncrementalMacState state,
            Span <byte> mac)
        {
            Debug.Assert(mac.Length >= crypto_generichash_blake2b_BYTES_MIN);
            Debug.Assert(mac.Length <= crypto_generichash_blake2b_BYTES_MAX);

            fixed(crypto_generichash_blake2b_state *state_ = &state.blake2b)
            fixed(byte * @out = mac)
            {
                int error = crypto_generichash_blake2b_final(
                    state_,
                    @out,
                    (UIntPtr)mac.Length);

                Debug.Assert(error == 0);
            }
        }
Пример #14
0
        internal unsafe override void InitializeCore(
            SecureMemoryHandle keyHandle,
            out IncrementalMacState state)
        {
            Debug.Assert(keyHandle.Size >= crypto_generichash_blake2b_KEYBYTES_MIN);
            Debug.Assert(keyHandle.Size <= crypto_generichash_blake2b_KEYBYTES_MAX);
            Debug.Assert(MacSize >= crypto_generichash_blake2b_BYTES_MIN);
            Debug.Assert(MacSize <= crypto_generichash_blake2b_BYTES_MAX);

            fixed(crypto_generichash_blake2b_state *state_ = &state.blake2b)
            {
                int error = crypto_generichash_blake2b_init(
                    state_,
                    keyHandle,
                    (UIntPtr)keyHandle.Size,
                    (UIntPtr)MacSize);

                Debug.Assert(error == 0);
            }
        }
Пример #15
0
        internal unsafe override void InitializeCore(
            ReadOnlySpan <byte> key,
            out IncrementalMacState state)
        {
            Debug.Assert(key.Length >= crypto_generichash_blake2b_KEYBYTES_MIN);
            Debug.Assert(key.Length <= crypto_generichash_blake2b_KEYBYTES_MAX);
            Debug.Assert(MacSize >= crypto_generichash_blake2b_BYTES_MIN);
            Debug.Assert(MacSize <= crypto_generichash_blake2b_BYTES_MAX);

            fixed(crypto_generichash_blake2b_state *state_ = &state.blake2b)
            fixed(byte *k = key)
            {
                int error = crypto_generichash_blake2b_init(
                    state_,
                    k,
                    (UIntPtr)key.Length,
                    (UIntPtr)MacSize);

                Debug.Assert(error == 0);
            }
        }
Пример #16
0
        internal unsafe override void UpdateCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> data)
        {
            byte *buffer = stackalloc byte[63 + Unsafe.SizeOf <crypto_generichash_blake2b_state>()];
            crypto_generichash_blake2b_state *state_ = Align64(buffer);

            *state_ = state.blake2b;

            fixed(byte * @in = data)
            {
                int error = crypto_generichash_blake2b_update(
                    state_,
                    @in,
                    (ulong)data.Length);

                Debug.Assert(error == 0);
            }

            state.blake2b = *state_;
        }
Пример #17
0
        internal unsafe override bool FinalizeAndVerifyCore(
            ref IncrementalMacState state,
            ReadOnlySpan <byte> mac)
        {
            Debug.Assert(mac.Length <= crypto_auth_hmacsha256_BYTES);

            byte *temp = stackalloc byte[crypto_auth_hmacsha256_BYTES];

            fixed(crypto_auth_hmacsha256_state *state_ = &state.hmacsha256)
            {
                int error = crypto_auth_hmacsha256_final(
                    state_,
                    temp);

                Debug.Assert(error == 0);
            }

            fixed(byte * @out = mac)
            {
                return(CryptographicOperations.FixedTimeEquals(temp, @out, mac.Length));
            }
        }
Пример #18
0
        internal unsafe override void FinalizeCore(
            ref IncrementalMacState state,
            Span <byte> mac)
        {
            Debug.Assert(mac.Length <= crypto_auth_hmacsha256_BYTES);

            byte *temp = stackalloc byte[crypto_auth_hmacsha256_BYTES];

            fixed(crypto_auth_hmacsha256_state *state_ = &state.hmacsha256)
            {
                int error = crypto_auth_hmacsha256_final(
                    state_,
                    temp);

                Debug.Assert(error == 0);
            }

            fixed(byte * @out = mac)
            {
                Unsafe.CopyBlockUnaligned(@out, temp, (uint)mac.Length);
            }
        }
Пример #19
0
        internal unsafe override void FinalizeCore(
            ref IncrementalMacState state,
            Span <byte> mac)
        {
            Debug.Assert(mac.Length >= crypto_generichash_blake2b_BYTES_MIN);
            Debug.Assert(mac.Length <= crypto_generichash_blake2b_BYTES_MAX);

            byte *buffer = stackalloc byte[63 + Unsafe.SizeOf <crypto_generichash_blake2b_state>()];
            crypto_generichash_blake2b_state *state_ = Align64(buffer);

            *state_ = state.blake2b;

            fixed(byte * @out = mac)
            {
                int error = crypto_generichash_blake2b_final(
                    state_,
                    @out,
                    (UIntPtr)mac.Length);

                Debug.Assert(error == 0);
            }

            state.blake2b = *state_;
        }
Пример #20
0
 internal abstract void UpdateCore(
     ref IncrementalMacState state,
     ReadOnlySpan <byte> data);
Пример #21
0
 internal abstract void InitializeCore(
     ReadOnlySpan <byte> key,
     out IncrementalMacState state);
Пример #22
0
 internal abstract void FinalizeCore(
     ref IncrementalMacState state,
     Span <byte> mac);
Пример #23
0
 internal abstract bool FinalizeAndVerifyCore(
     ref IncrementalMacState state,
     ReadOnlySpan <byte> mac);
Пример #24
0
 internal abstract void InitializeCore(
     SecureMemoryHandle keyHandle,
     out IncrementalMacState state);