Esempio n. 1
0
        public static EVP_MD_CTX EVP_MD_CTX_copy_ex(EVP_MD_CTX original)
        {
            var copy   = EVP_MD_CTX_new();
            var result = EVP_MD_CTX_copy_ex_internal(copy, original);

            ThrowOnErrorReturnCode(result);
            return(copy);
        }
Esempio n. 2
0
        public unsafe static int EVP_DigestUpdate(EVP_MD_CTX ctx, ReadOnlySpan <byte> span)
        {
            fixed(void *ptr = &span.DangerousGetPinnableReference())
            {
                var result = EVP_DigestUpdate(ctx, ptr, span.Length);

                ThrowOnErrorReturnCode(result);
                return(result);
            }
        }
Esempio n. 3
0
        public unsafe static int EVP_DigestFinal_ex(EVP_MD_CTX ctx, Span <byte> output)
        {
            fixed(void *ptr = &output.DangerousGetPinnableReference())
            {
                var size   = output.Length;
                var result = EVP_DigestFinal_ex(ctx, ptr, ref size);

                ThrowOnErrorReturnCode(result);
                return(size);
            }
        }
Esempio n. 4
0
 internal OpenSslHash(EVP_HashType hashTypePointer, int size, HashType hashType)
 {
     _hashType = hashType;
     _ctx      = EVP_MD_CTX_new(hashTypePointer);
     _size     = size;
 }
Esempio n. 5
0
File: OpenSSL.cs Progetto: haf/miTLS
 public static extern int EVP_DigestFinal_ex(EVP_MD_CTX* handle, byte[] array, IntPtr psize);
Esempio n. 6
0
File: OpenSSL.cs Progetto: haf/miTLS
 public static extern int EVP_DigestUpdate(EVP_MD_CTX* handle, byte[] array, UIntPtr size);
Esempio n. 7
0
File: OpenSSL.cs Progetto: haf/miTLS
 public static extern int EVP_DigestInit_ex(EVP_MD_CTX* handle, EVP_MD* type, IntPtr engine);
Esempio n. 8
0
 internal static extern unsafe int EVP_SignUpdate(EVP_MD_CTX ctx, void *d, int cnt);
Esempio n. 9
0
 private static extern unsafe int EVP_DigestUpdate(EVP_MD_CTX ctx, void *d, int cnt);
Esempio n. 10
0
 private static extern int EVP_DigestInit_ex(EVP_MD_CTX ctx, EVP_HashType type, IntPtr impl);
Esempio n. 11
0
 internal static extern unsafe int EVP_DigestSignFinal(EVP_MD_CTX ctx, void *out_sig, ref UIntPtr out_sig_len);
Esempio n. 12
0
 internal static extern int EVP_MD_CTX_copy_ex(EVP_MD_CTX copy, EVP_MD_CTX original);
Esempio n. 13
0
 private static extern int EVP_MD_CTX_copy_ex_internal(EVP_MD_CTX copy, EVP_MD_CTX original);
Esempio n. 14
0
 private static extern unsafe int EVP_DigestFinal_ex(EVP_MD_CTX ctx, void *md, ref int s);
Esempio n. 15
0
        public unsafe int SignHash(IHashProvider provider, SignatureScheme scheme, ref WritableBuffer writer, byte *message, int messageLength)
        {
            var    keySize = SignatureSize(scheme);
            IntPtr hashType;

            switch (scheme)
            {
            case SignatureScheme.rsa_pkcs1_sha256:
            case SignatureScheme.rsa_pss_sha256:
                hashType = EVP_sha256;
                break;

            case SignatureScheme.rsa_pkcs1_sha512:
            case SignatureScheme.rsa_pss_sha512:
                hashType = EVP_sha512;
                break;

            case SignatureScheme.rsa_pkcs1_sha384:
            case SignatureScheme.rsa_pss_sha384:
                hashType = EVP_sha384;
                break;

            default:
                ExceptionHelper.ThrowException(new ArgumentOutOfRangeException(nameof(scheme)));
                hashType = IntPtr.Zero;
                break;
            }

            EVP_MD_CTX   ctx = EVP_MD_CTX_new();
            EVP_PKEY_CTX pctx;
            GCHandle     handle;

            try
            {
                ThrowOnError(EVP_DigestSignInit(ctx, &pctx, hashType, IntPtr.Zero, _key));
                ThrowIfNegative(EVP_PKEY_CTX_ctrl(pctx, EVP_PKEY_type.EVP_PKEY_RSA, EVP_PKEY_Ctrl_OP.EVP_PKEY_OP_TYPE_SIG,
                                                  EVP_PKEY_Ctrl_Command.EVP_PKEY_CTRL_MD, 0, (void *)hashType));
                if ((((ushort)scheme) & 0x00FF) == 1)
                {
                    ThrowIfNegative(EVP_PKEY_CTX_ctrl(pctx, EVP_PKEY_type.EVP_PKEY_RSA, EVP_PKEY_Ctrl_OP.EVP_PKEY_OP_NONE
                                                      , EVP_PKEY_Ctrl_Command.EVP_PKEY_CTRL_RSA_PADDING, (int)RSA_PADDING.RSA_PKCS1_PADDING, null));
                }
                else
                {
                    //PSS Padding
                    ThrowIfNegative(EVP_PKEY_CTX_ctrl(pctx, EVP_PKEY_type.EVP_PKEY_RSA, EVP_PKEY_Ctrl_OP.EVP_PKEY_OP_SIGN
                                                      , EVP_PKEY_Ctrl_Command.EVP_PKEY_CTRL_RSA_PADDING, (int)RSA_PADDING.RSA_PKCS1_PSS_PADDING, null));
                    ThrowIfNegative(EVP_PKEY_CTX_ctrl(pctx, EVP_PKEY_type.EVP_PKEY_RSA, EVP_PKEY_Ctrl_OP.EVP_PKEY_OP_SIGN
                                                      , EVP_PKEY_Ctrl_Command.EVP_PKEY_CTRL_RSA_PSS_SALTLEN, 32, null));
                }
                ThrowOnError(EVP_DigestUpdate(ctx, message, messageLength));
                var size = UIntPtr.Zero;
                ThrowOnError(EVP_DigestSignFinal(ctx, null, ref size));
                writer.Ensure((int)size);
                var output = writer.Memory.GetPointer(out handle);
                ThrowOnError(EVP_DigestSignFinal(ctx, output, ref size));
                writer.Advance((int)size);
                return((int)size);
            }
            finally
            {
                ctx.Free();
                if (handle.IsAllocated)
                {
                    handle.Free();
                }
            }
        }
Esempio n. 16
0
 internal static extern int EVP_DigestInit_ex(EVP_MD_CTX ctx, IntPtr type, IntPtr impl);
Esempio n. 17
0
File: OpenSSL.cs Progetto: haf/miTLS
 public static extern void EVP_MD_CTX_destroy(EVP_MD_CTX* handle);
Esempio n. 18
0
 internal static extern unsafe int EVP_SignFinal(EVP_MD_CTX ctx, void *sig, ref int s, EVP_PKEY pkey);
Esempio n. 19
0
File: OpenSSL.cs Progetto: haf/miTLS
 public static extern EVP_MD* EVP_MD_CTX_md(EVP_MD_CTX* handle);
Esempio n. 20
0
 internal static extern unsafe int EVP_DigestSignInit(EVP_MD_CTX ctx, EVP_PKEY_CTX *pctx, IntPtr type, IntPtr engine, EVP_PKEY pkey);
Esempio n. 21
0
 internal HashInstance(EVP_MD_CTX ctx, int size, HashType hashType)
 {
     _hashType = hashType;
     _ctx      = ctx;
     _size     = size;
 }