コード例 #1
0
		public RSACryptoServiceProvider(KeySpec keySpec, bool genKey)
		{
			IntPtr prov = IntPtr.Zero;
			IntPtr rsaKey = IntPtr.Zero;
			try
			{
				this.keySpec = keySpec;
				if(genKey == false) //faster
				{
					prov = Context.AcquireContext("rSaContainer");
					rsaKey = Key.GetUserKey(prov, keySpec);

				}
				else //new key
				{
					prov = Context.AcquireContext("rSaContainerImp");
					Calg calg = Calg.RSA_KEYX;
					if(keySpec == KeySpec.SIGNATURE) 
					{calg = Calg.RSA_SIGN;}
					rsaKey = Key.GenKey(prov, calg, GenKeyParam.EXPORTABLE);
				}
				byte [] baPrivKey = Key.ExportKey(rsaKey, IntPtr.Zero, KeyBlob.PRIVATEKEYBLOB);
				_rsa = new Rsa(baPrivKey);
			}
			finally
			{
				Key.DestroyKey(rsaKey);
				Context.ReleaseContext(prov);
			}
		}
コード例 #2
0
ファイル: KeyFactory.cs プロジェクト: LunarLanding/ngit
		public override PrivateKey GeneratePrivate (KeySpec key)
		{
			DSAPrivateKeySpec spec = (DSAPrivateKeySpec) key;
			DSAParameters dsp = new DSAParameters ();
			dsp.G = spec.GetG ().GetBytes ();
			dsp.P = spec.GetP ().GetBytes ();
			dsp.Q = spec.GetQ ().GetBytes ();
			dsp.X = spec.GetX ().GetBytes ();
			return new DSAPrivateKey (dsp);
		}
コード例 #3
0
 internal override NCryptKeyOrCryptProviderSafeHandle CreateKey(string keyName, int keySize, Algorithm algorithm, bool overwrite, KeyUsage keyUsage, out KeySpec keySpec)
 {
     const int ALREADY_EXISTS = unchecked((int)0x8009000f);
     if (algorithm != Algorithm.RSA)
     {
         throw new ArgumentException("CAPI does not support algorithms other than RSA.", nameof(algorithm));
     }
     NCryptKeyOrCryptProviderSafeHandle provider;
     if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, CryptAcquireContextFlags.CRYPT_NEWKEYSET))
     {
         var lastError = Marshal.GetLastWin32Error();
         if (lastError == ALREADY_EXISTS && overwrite)
         {
             if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, CryptAcquireContextFlags.CRYPT_DELETEKEYSET))
             {
                 throw new Win32Exception(Marshal.GetLastWin32Error());
             }
             if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, CryptAcquireContextFlags.CRYPT_NEWKEYSET))
             {
                 throw new Win32Exception(Marshal.GetLastWin32Error());
             }
         }
         else
         {
             throw new Win32Exception(Marshal.GetLastWin32Error());
         }
     }
     var flags = CryptGenKeyFlags.CRYPT_EXPORTABLE;
     var keySizeFlags = ((uint)keySize & 0xFFFFU) << 16;
     var genKeyFlags = ((ushort)flags) | keySizeFlags;
     CryptKeySafeHandle key;
     KeySpec algorithmKeySpec;
     switch (keyUsage)
     {
         case KeyUsage.KeyExchange:
             algorithmKeySpec = KeySpec.AT_KEYEXCHANGE;
             break;
         case KeyUsage.Signature:
             algorithmKeySpec = KeySpec.AT_SIGNATURE;
             break;
         default:
             throw new ArgumentException(nameof(keyUsage));
     }
     if (!AdvApi32.CryptGenKey(provider, algorithmKeySpec, genKeyFlags, out key))
     {
         throw new Win32Exception(Marshal.GetLastWin32Error());
     }
     key.Close();
     keySpec = algorithmKeySpec;
     return provider;
 }
コード例 #4
0
 internal override NCryptKeyOrCryptProviderSafeHandle OpenExisting(string keyName, out KeySpec keySpec)
 {
     keySpec = KeySpec.NONE;
     NCryptKeyOrCryptProviderSafeHandle keyHandle;
     var result = NCrypt.NCryptOpenKey(_storageProvider.Handle, out keyHandle, keyName, KeySpec.NONE, 0u);
     if (result == SECURITY_STATUS.ERROR_SUCCESS)
     {
         return keyHandle;
     }
     if (result == SECURITY_STATUS.NTE_BAD_KEYSET)
     {
         return null;
     }
     throw new InvalidOperationException("Failed to open key.");
 }
コード例 #5
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual object Get(KeySpec spec)
 {
     lock (this)
     {
         var value = _delegate.Get(spec);
         if (value == null)
         {
             value = spec.DefaultValue();
             if (value != null)
             {
                 _delegate.Put(spec, value);
             }
         }
         return value;
     }
 }
コード例 #6
0
 internal override NCryptKeyOrCryptProviderSafeHandle CreateKey(string keyName, int keySize, Algorithm algorithm, bool overwrite, KeyUsage keyUsage, out KeySpec keySpec)
 {
     NCryptKeyOrCryptProviderSafeHandle keyHandle;
     var flags = overwrite ? NCryptCreatePersistedKeyFlags.NCRYPT_OVERWRITE_KEY_FLAG : NCryptCreatePersistedKeyFlags.NONE;
     var result = NCrypt.NCryptCreatePersistedKey(_storageProvider.Handle, out keyHandle, algorithm.Name, keyName, KeySpec.NONE, flags);
     if (result != SECURITY_STATUS.ERROR_SUCCESS)
     {
         throw new InvalidOperationException("Failed to generate a key.");
     }
     if (algorithm == Algorithm.RSA)
     {
         NCryptPropertyWriter.WriteUInt32(keyHandle, CngProperties.NCRYPT_LENGTH_PROPERTY, (uint) keySize);
     }
     NCryptPropertyWriter.WriteEnum(keyHandle, CngProperties.NCRYPT_EXPORT_POLICY_PROPERTY, CngExportPolicy.NCRYPT_ALLOW_EXPORT_FLAG);
     var finalizeResult = NCrypt.NCryptFinalizeKey(keyHandle, 0u);
     if (finalizeResult != SECURITY_STATUS.ERROR_SUCCESS)
     {
         throw new InvalidOperationException("Failed to finalize key.");
     }
     keySpec = KeySpec.NONE;
     return keyHandle;
 }
コード例 #7
0
 public virtual byte GetAsByte(KeySpec spec)
 {
     return((byte)Get(spec));
 }
コード例 #8
0
 public virtual void Put(KeySpec spec, bool value)
 {
     _delegate.Put(spec, value);
 }
コード例 #9
0
 internal abstract NCryptKeyOrCryptProviderSafeHandle OpenExisting(string keyName, out KeySpec keySpec);
コード例 #10
0
 public override PrivateKey GeneratePrivate(KeySpec key)
 {
     throw new NotSupportedException();
 }
コード例 #11
0
 public PublicKey generatePublic(KeySpec keySpec)
 {
     return default(PublicKey);
 }
コード例 #12
0
 public static extern bool CryptAcquireCertificatePrivateKey([In] SafeHandle pCert, [In] uint dwFlags, [In] IntPtr pvReserved, [In, Out] ref IntPtr phCryptProv, [In, Out] ref KeySpec pdwKeySpec, [In, Out] ref bool pfCallerFreeProv);
コード例 #13
0
 internal abstract NCryptKeyOrCryptProviderSafeHandle CreateKey(string keyName, int keySize, Algorithm algorithm, bool overwrite, KeyUsage keyUsage, out KeySpec keySpec);
コード例 #14
0
ファイル: PrivateKey.cs プロジェクト: vcsjones/FiddlerCertGen
 internal PrivateKey(NCryptKeyOrCryptProviderSafeHandle handle, KeyProviderBase keyProvider, KeySpec keySpec)
 {
     _handle      = handle;
     _keyProvider = keyProvider;
     _keySpec     = keySpec;
 }
コード例 #15
0
ファイル: Mac.cs プロジェクト: TetradogOther/NSch
        public void Init(KeySpec key)
        {
            SecretKeySpec k = (SecretKeySpec)key;

            mac.Key = k.Key;
        }
コード例 #16
0
ファイル: KeyFactory.cs プロジェクト: gaijenbon/ngit
 public override PublicKey GeneratePublic(KeySpec key)
 {
     DSAPublicKeySpec spec = (DSAPublicKeySpec) key;
     DSAParameters dsp = new DSAParameters ();
     dsp.G = spec.GetG ().ToByteArray();
     dsp.P = spec.GetP().ToByteArray();
     dsp.Q = spec.GetQ().ToByteArray();
     dsp.Y = spec.GetY().ToByteArray();
     return new DSAPublicKey (dsp);
 }
コード例 #17
0
ファイル: KeyFactory.cs プロジェクト: gaijenbon/ngit
 public override PrivateKey GeneratePrivate(KeySpec key)
 {
     RSAPrivateKeySpec spec = (RSAPrivateKeySpec) key;
     RSAParameters dparams = new RSAParameters ();
     dparams.Modulus = spec.GetModulus().ToByteArray();
     dparams.D = spec.GetPrivateExponent().ToByteArray();
     dparams.Exponent = spec.GetPublicExponent().ToByteArray();
     return new RSAPrivateKey (dparams);
 }
コード例 #18
0
ファイル: Mac.cs プロジェクト: LunarLanding/ngit
		public void Init (KeySpec key)
		{
			SecretKeySpec k = (SecretKeySpec) key;
			mac.Key = k.Key;
		}
コード例 #19
0
 public virtual int GetAsInt(KeySpec spec)
 {
     return((int)Get(spec));
 }
コード例 #20
0
        internal override unsafe NCryptKeyOrCryptProviderSafeHandle OpenExisting(string keyName, out KeySpec keySpec)
        {
            keySpec = KeySpec.NONE;
            const int DOES_NOT_EXIST = unchecked ((int)0x80090016);
            NCryptKeyOrCryptProviderSafeHandle provider;

            if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, 0u))
            {
                var result = Marshal.GetLastWin32Error();
                if (result == DOES_NOT_EXIST)
                {
                    return(null);
                }
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
            const uint PP_KEYSPEC    = 0x27;
            uint *     keySpecBuffer = stackalloc uint[1];
            var        dataLength    = (uint)Marshal.SizeOf(typeof(uint));

            if (!AdvApi32.CryptGetProvParam(provider, PP_KEYSPEC, keySpecBuffer, ref dataLength, 0u))
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
            keySpec = (KeySpec)(*keySpecBuffer);
            return(provider);
        }
コード例 #21
0
 public virtual string GetAsString(KeySpec spec)
 {
     return((string)Get(spec));
 }
コード例 #22
0
        internal override NCryptKeyOrCryptProviderSafeHandle CreateKey(string keyName, int keySize, Algorithm algorithm, bool overwrite, KeyUsage keyUsage, out KeySpec keySpec)
        {
            const int ALREADY_EXISTS = unchecked ((int)0x8009000f);

            if (algorithm != Algorithm.RSA)
            {
                throw new ArgumentException("CAPI does not support algorithms other than RSA.", nameof(algorithm));
            }
            NCryptKeyOrCryptProviderSafeHandle provider;

            if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, CryptAcquireContextFlags.CRYPT_NEWKEYSET))
            {
                var lastError = Marshal.GetLastWin32Error();
                if (lastError == ALREADY_EXISTS && overwrite)
                {
                    if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, CryptAcquireContextFlags.CRYPT_DELETEKEYSET))
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                    if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, CryptAcquireContextFlags.CRYPT_NEWKEYSET))
                    {
                        throw new Win32Exception(Marshal.GetLastWin32Error());
                    }
                }
                else
                {
                    throw new Win32Exception(Marshal.GetLastWin32Error());
                }
            }
            var flags        = CryptGenKeyFlags.CRYPT_EXPORTABLE;
            var keySizeFlags = ((uint)keySize & 0xFFFFU) << 16;
            var genKeyFlags  = ((ushort)flags) | keySizeFlags;
            CryptKeySafeHandle key;
            KeySpec            algorithmKeySpec;

            switch (keyUsage)
            {
            case KeyUsage.KeyExchange:
                algorithmKeySpec = KeySpec.AT_KEYEXCHANGE;
                break;

            case KeyUsage.Signature:
                algorithmKeySpec = KeySpec.AT_SIGNATURE;
                break;

            default:
                throw new ArgumentException(nameof(keyUsage));
            }
            if (!AdvApi32.CryptGenKey(provider, algorithmKeySpec, genKeyFlags, out key))
            {
                throw new Win32Exception(Marshal.GetLastWin32Error());
            }
            key.Close();
            keySpec = algorithmKeySpec;
            return(provider);
        }
コード例 #23
0
        public override SecretKey GenerateSecret(KeySpec key)
        {
            DESedeKeySpec ks = (DESedeKeySpec)key;

            return(new SecretKey(ks.Key));
        }
コード例 #24
0
 protected virtual void PutThreeValued(KeySpec spec, bool flag)
 {
     _config.Put(spec, TernaryBool.ForBoolean(flag));
 }
コード例 #25
0
ファイル: Hash.cs プロジェクト: ericleigh007/flickr-net
 public static byte[] SignHash(IntPtr hash, KeySpec keySpec)
 {
     string desc = null; //String.Empty
     uint flags = 0;
     byte [] sig = new byte[0];
     uint sigLen = 0;
     //length
     bool retVal = Crypto.CryptSignHash(hash, (uint) keySpec, desc, flags, sig, ref sigLen);
     ErrCode ec = Error.HandleRetVal(retVal, ErrCode.MORE_DATA);
     if(ec == ErrCode.MORE_DATA)
     {
         //sign
         sig = new byte[sigLen];
         retVal = Crypto.CryptSignHash(hash, (uint) keySpec, desc, flags, sig, ref sigLen);
         ec = Error.HandleRetVal(retVal);
     }
     return sig;
 }
コード例 #26
0
 protected virtual void PutThreeValuedInt(KeySpec spec, bool flag)
 {
     _config.Put(spec, flag ? 1 : -1);
 }
コード例 #27
0
 public abstract PrivateKey GeneratePrivate(KeySpec key);
コード例 #28
0
 private TernaryBool Cascade(KeySpec spec)
 {
     return(_config.GetAsTernaryBool(spec));
 }
コード例 #29
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual string GetAsString(KeySpec spec)
 {
     return (string) Get(spec);
 }
コード例 #30
0
ファイル: KeyFactory.cs プロジェクト: wclwksn/code
 public PublicKey generatePublic(KeySpec keySpec)
 {
     return(default(PublicKey));
 }
コード例 #31
0
        internal override NCryptKeyOrCryptProviderSafeHandle OpenExisting(string keyName, out KeySpec keySpec)
        {
            keySpec = KeySpec.NONE;
            NCryptKeyOrCryptProviderSafeHandle keyHandle;
            var result = NCrypt.NCryptOpenKey(_storageProvider.Handle, out keyHandle, keyName, KeySpec.NONE, 0u);

            if (result == SECURITY_STATUS.ERROR_SUCCESS)
            {
                return(keyHandle);
            }
            if (result == SECURITY_STATUS.NTE_BAD_KEYSET)
            {
                return(null);
            }
            throw new InvalidOperationException("Failed to open key.");
        }
コード例 #32
0
 internal override unsafe NCryptKeyOrCryptProviderSafeHandle OpenExisting(string keyName, out KeySpec keySpec)
 {
     keySpec = KeySpec.NONE;
     const int DOES_NOT_EXIST = unchecked((int)0x80090016);
     NCryptKeyOrCryptProviderSafeHandle provider;
     if (!AdvApi32.CryptAcquireContext(out provider, keyName, _providerName, ProviderType.PROV_RSA_AES, 0u))
     {
         var result = Marshal.GetLastWin32Error();
         if (result == DOES_NOT_EXIST)
         {
             return null;
         }
         throw new Win32Exception(Marshal.GetLastWin32Error());
     }
     const uint PP_KEYSPEC = 0x27;
     uint* keySpecBuffer = stackalloc uint[1];
     var dataLength = (uint)Marshal.SizeOf(typeof(uint));
     if (!AdvApi32.CryptGetProvParam(provider, PP_KEYSPEC, keySpecBuffer, ref dataLength, 0u))
     {
         throw new Win32Exception(Marshal.GetLastWin32Error());
     }
     keySpec = (KeySpec)(*keySpecBuffer);
     return provider;
 }
コード例 #33
0
 public virtual void Put(KeySpec spec, object value)
 {
     _delegate.Put(spec, value);
 }
コード例 #34
0
 internal abstract NCryptKeyOrCryptProviderSafeHandle CreateKey(string keyName, int keySize, Algorithm algorithm, bool overwrite, KeyUsage keyUsage, out KeySpec keySpec);
コード例 #35
0
 public virtual bool GetAsBoolean(KeySpec spec)
 {
     return((bool)Get(spec));
 }
コード例 #36
0
 generatePrivate(KeySpec keySpec);
コード例 #37
0
 public virtual TernaryBool GetAsTernaryBool(KeySpec spec)
 {
     return((TernaryBool)Get(spec));
 }
コード例 #38
0
 generatePublic(KeySpec keySpec);
コード例 #39
0
 internal abstract NCryptKeyOrCryptProviderSafeHandle OpenExisting(string keyName, out KeySpec keySpec);
コード例 #40
0
 public GenerateDataKeyRequest(string keyId, KeySpec keySpec, JsonObject encryptionContext)
 {
     KeyId             = keyId ?? throw new ArgumentNullException(nameof(keyId));
     KeySpec           = keySpec;
     EncryptionContext = encryptionContext;
 }
コード例 #41
0
 public abstract SecretKey GenerateSecret(KeySpec key);
コード例 #42
0
ファイル: KeyFactory.cs プロジェクト: LunarLanding/ngit
		public abstract PublicKey GeneratePublic (KeySpec key);
コード例 #43
0
        public override PublicKey GeneratePublic(KeySpec key)
        {
            DHPublicKeySpec spec = (DHPublicKeySpec)key;

            return(new DHPublicKey(spec.Y));
        }
コード例 #44
0
ファイル: KeyFactory.cs プロジェクト: LunarLanding/ngit
		public abstract PrivateKey GeneratePrivate (KeySpec key);
コード例 #45
0
ファイル: Key.cs プロジェクト: simm0n/Synchronizr
 public static IntPtr GetUserKey(IntPtr prov, KeySpec keySpec)
 {
     IntPtr key;
     bool retVal = Crypto.CryptGetUserKey(prov, (uint) keySpec, out key);
     ErrCode ec = Error.HandleRetVal(retVal, ErrCode.NTE_NO_KEY);
     if(ec == ErrCode.NTE_NO_KEY) //2148073485
     {
         retVal = Crypto.CryptGenKey(prov, (uint)keySpec, (uint)GenKeyParam.EXPORTABLE, out key);
         ec = Error.HandleRetVal(retVal);
         //is this necessary? why not just use key from GenKey?
         //retVal = Crypto.CryptGetUserKey(prov, (uint) keySpec, out key);
     }
     if(key == IntPtr.Zero)
         throw new Exception(ec.ToString());
     return key;
 }
コード例 #46
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual void Put(KeySpec spec, bool value)
 {
     _delegate.Put(spec, value);
 }
コード例 #47
0
 public PrivateKey generatePrivate(KeySpec keySpec)
 {
     throw null;
 }
コード例 #48
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual byte GetAsByte(KeySpec spec)
 {
     return ((byte) Get(spec));
 }
コード例 #49
0
 public abstract PublicKey GeneratePublic(KeySpec key);
コード例 #50
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual int GetAsInt(KeySpec spec)
 {
     return ((int) Get(spec));
 }
コード例 #51
0
ファイル: CapiHelper.cs プロジェクト: SGuyGe/corefx
 public static extern bool CryptSignHash(SafeHashHandle hHash, KeySpec dwKeySpec, String sDescription, CryptSignAndVerifyHashFlags dwFlags, [Out] byte[] pbSignature, [In, Out] ref int pdwSigLen);
コード例 #52
0
ファイル: KeyFactory.cs プロジェクト: yayanyang/monodevelop
		public override PrivateKey GeneratePrivate (KeySpec key)
		{
			RSAPrivateKeySpec spec = (RSAPrivateKeySpec) key;
			RSAParameters dparams = new RSAParameters ();
			dparams.Modulus = spec.GetModulus ().GetBytes ();
			dparams.D = spec.GetPrivateExponent ().GetBytes ();
			dparams.Exponent = new BigInteger (35).GetBytes ();
			return new RSAPrivateKey (dparams);
		}
コード例 #53
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual void Put(KeySpec spec, object value)
 {
     _delegate.Put(spec, value);
 }
コード例 #54
0
ファイル: KeyFactory.cs プロジェクト: LunarLanding/ngit
		public override PublicKey GeneratePublic (KeySpec key)
		{
			DHPublicKeySpec spec = (DHPublicKeySpec) key;
			return new DHPublicKey (spec.Y);
		}
コード例 #55
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual bool GetAsBoolean(KeySpec spec)
 {
     return ((bool) Get(spec));
 }
コード例 #56
0
ファイル: KeyFactory.cs プロジェクト: LunarLanding/ngit
		public override PrivateKey GeneratePrivate (KeySpec key)
		{
			throw new NotSupportedException ();
		}
コード例 #57
0
ファイル: KeySpecHashtable4.cs プロジェクト: masroore/db4o
 public virtual TernaryBool GetAsTernaryBool(KeySpec spec)
 {
     return (TernaryBool) Get(spec);
 }
コード例 #58
0
ファイル: KeyFactory.cs プロジェクト: LunarLanding/ngit
		public override PublicKey GeneratePublic (KeySpec key)
		{
			RSAPublicKeySpec spec = (RSAPublicKeySpec) key;
			RSAParameters dparams = new RSAParameters ();
			dparams.Modulus = spec.GetModulus ().GetBytes ();
			dparams.Exponent = spec.GetPublicExponent ().GetBytes ();
			return new RSAPublicKey (dparams);
		}
コード例 #59
0
        internal override NCryptKeyOrCryptProviderSafeHandle CreateKey(string keyName, int keySize, Algorithm algorithm, bool overwrite, KeyUsage keyUsage, out KeySpec keySpec)
        {
            NCryptKeyOrCryptProviderSafeHandle keyHandle;
            var flags  = overwrite ? NCryptCreatePersistedKeyFlags.NCRYPT_OVERWRITE_KEY_FLAG : NCryptCreatePersistedKeyFlags.NONE;
            var result = NCrypt.NCryptCreatePersistedKey(_storageProvider.Handle, out keyHandle, algorithm.Name, keyName, KeySpec.NONE, flags);

            if (result != SECURITY_STATUS.ERROR_SUCCESS)
            {
                throw new InvalidOperationException("Failed to generate a key.");
            }
            if (algorithm == Algorithm.RSA)
            {
                NCryptPropertyWriter.WriteUInt32(keyHandle, CngProperties.NCRYPT_LENGTH_PROPERTY, (uint)keySize);
            }
            NCryptPropertyWriter.WriteEnum(keyHandle, CngProperties.NCRYPT_EXPORT_POLICY_PROPERTY, CngExportPolicy.NCRYPT_ALLOW_EXPORT_FLAG);
            var finalizeResult = NCrypt.NCryptFinalizeKey(keyHandle, 0u);

            if (finalizeResult != SECURITY_STATUS.ERROR_SUCCESS)
            {
                throw new InvalidOperationException("Failed to finalize key.");
            }
            keySpec = KeySpec.NONE;
            return(keyHandle);
        }
コード例 #60
0
 internal static extern bool CryptGetUserKey([In] IntPtr CryptProv, [In] KeySpec KeySpec, [In, Out] ref IntPtr Key);