protected unsafe override void Deserialize(
            ReadOnlySpan <byte> span,
            out SecureMemoryHandle?keyHandle,
            out PublicKeyBytes publicKeyBytes)
        {
            if (Unsafe.SizeOf <PublicKeyBytes>() != crypto_sign_ed25519_PUBLICKEYBYTES)
            {
                throw Error.InvalidOperation_InternalError();
            }

            Debug.Assert(span.Length == crypto_sign_ed25519_SEEDBYTES);

            keyHandle = SecureMemoryHandle.Create(crypto_sign_ed25519_SECRETKEYBYTES);

            fixed(PublicKeyBytes *pk = &publicKeyBytes)
            fixed(byte *seed_ = span)
            {
                int error = crypto_sign_ed25519_seed_keypair(pk, keyHandle, seed_);

                Debug.Assert(error == 0);
            }
        }
示例#2
0
        internal override unsafe void CreateKey(
            ReadOnlySpan <byte> seed,
            out SecureMemoryHandle keyHandle,
            out PublicKey?publicKey)
        {
            if (Unsafe.SizeOf <PublicKeyBytes>() != crypto_sign_ed25519_PUBLICKEYBYTES)
            {
                throw Error.InvalidOperation_InternalError();
            }

            Debug.Assert(seed.Length == crypto_sign_ed25519_SEEDBYTES);

            publicKey = new PublicKey(this);
            keyHandle = SecureMemoryHandle.Create(crypto_sign_ed25519_SECRETKEYBYTES);

            fixed(PublicKeyBytes *pk = publicKey)
            fixed(byte *seed_ = seed)
            {
                int error = crypto_sign_ed25519_seed_keypair(pk, keyHandle, seed_);

                Debug.Assert(error == 0);
            }
        }