]> git.proxmox.com Git - cargo.git/commitdiff
Use external crates for Windows FFI
authorPeter Atashian <retep998@gmail.com>
Tue, 20 Jan 2015 16:01:52 +0000 (11:01 -0500)
committerPeter Atashian <retep998@gmail.com>
Tue, 20 Jan 2015 16:01:52 +0000 (11:01 -0500)
Signed-off-by: Peter Atashian <retep998@gmail.com>
Cargo.lock
Cargo.toml
src/cargo/util/sha256.rs

index 68a69f0768f4583fee1c56d52e2ee3af01a47df8..632455a26a4353aea2f113c561086086a6662281 100644 (file)
@@ -2,6 +2,7 @@
 name = "cargo"
 version = "0.1.0"
 dependencies = [
+ "advapi32-sys 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)",
  "curl 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)",
  "docopt 0.6.30 (registry+https://github.com/rust-lang/crates.io-index)",
  "flate2 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
@@ -17,6 +18,15 @@ dependencies = [
  "time 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)",
  "toml 0.1.13 (registry+https://github.com/rust-lang/crates.io-index)",
  "url 0.2.16 (registry+https://github.com/rust-lang/crates.io-index)",
+ "winapi 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
+]
+
+[[package]]
+name = "advapi32-sys"
+version = "0.0.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+dependencies = [
+ "winapi 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
 [[package]]
@@ -224,3 +234,8 @@ dependencies = [
  "rustc-serialize 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)",
 ]
 
+[[package]]
+name = "winapi"
+version = "0.1.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+
index d6215a66beda68a9530ffdeaadfbeaebfeee2933..43d881da54e4605e8ef1ee5c5d28e2097d39404d 100644 (file)
@@ -24,6 +24,14 @@ url = "0.2"
 rustc-serialize = "0.2"
 term = "0.1"
 
+[target.i686-pc-windows-gnu.dependencies]
+winapi = "0.1"
+advapi32-sys = "*"
+
+[target.x86_64-pc-windows-gnu.dependencies]
+winapi = "0.1"
+advapi32-sys = "*"
+
 [dev-dependencies.hamcrest]
 git = "https://github.com/carllerche/hamcrest-rust.git"
 
index b9646c4a4a1ffa0133868bf3c9b03638637c30a4..40d7518bfba73e1f4a19ce85f8f85479b7f459b0 100644 (file)
@@ -70,42 +70,15 @@ mod imp {
 // Leverage the crypto APIs that windows has built in.
 #[cfg(windows)]
 mod imp {
+    extern crate winapi;
+    extern crate "advapi32-sys" as advapi32;
     use std::os;
+    use std::ptr;
 
-    use libc;
-    use libc::{DWORD, BYTE, LPCSTR, BOOL};
-    use libc::types::os::arch::extra::{LONG_PTR};
-
-    type HCRYPTPROV = LONG_PTR;
-    type HCRYPTHASH = LONG_PTR;
-    type HCRYPTKEY = LONG_PTR;
-    type ALG_ID = libc::c_uint;
-
-    static PROV_RSA_AES: DWORD = 24;
-    static CRYPT_SILENT: DWORD = 64;
-    static CRYPT_VERIFYCONTEXT: DWORD = 0xF0000000;
-    static CALG_SHA_256: ALG_ID = 0x800c;
-    static HP_HASHVAL: DWORD = 0x00000002;
-
-    #[allow(non_snake_case)]
-    extern "system" {
-        fn CryptAcquireContextA(phProv: *mut HCRYPTPROV,
-                                pszContainer: LPCSTR,
-                                pszProvider: LPCSTR,
-                                dwProvType: DWORD,
-                                dwFlags: DWORD) -> BOOL;
-        fn CryptReleaseContext(hProv: HCRYPTPROV, dwFlags: DWORD) -> BOOL;
-
-
-        fn CryptCreateHash(hProv: HCRYPTPROV, Algid: ALG_ID, hKey: HCRYPTKEY,
-                           dwFlag: DWORD, phHash: *mut HCRYPTHASH) -> BOOL;
-        fn CryptHashData(hHash: HCRYPTHASH, pbData: *mut BYTE, dwDataLen: DWORD,
-                         dwFlags: DWORD) -> BOOL;
-        fn CryptGetHashParam(hHash: HCRYPTHASH, dwParam: DWORD, pbData: *mut BYTE,
-                             pdwDataLen: *mut DWORD, dwFlags: DWORD) -> BOOL;
-
-        fn CryptDestroyHash(hHash: HCRYPTHASH) -> BOOL;
-    }
+    use self::winapi::{DWORD, HCRYPTPROV, HCRYPTHASH};
+    use self::winapi::{PROV_RSA_AES, CRYPT_SILENT, CRYPT_VERIFYCONTEXT, CALG_SHA_256, HP_HASHVAL};
+    use self::advapi32::{CryptAcquireContextW, CryptCreateHash, CryptDestroyHash};
+    use self::advapi32::{CryptGetHashParam, CryptHashData, CryptReleaseContext};
 
     macro_rules! call{ ($e:expr) => ({
         if $e == 0 {
@@ -122,7 +95,7 @@ mod imp {
         pub fn new() -> Sha256 {
             let mut hcp = 0;
             call!(unsafe {
-                CryptAcquireContextA(&mut hcp, 0 as LPCSTR, 0 as LPCSTR,
+                CryptAcquireContextW(&mut hcp, ptr::null(), ptr::null(),
                                      PROV_RSA_AES,
                                      CRYPT_VERIFYCONTEXT | CRYPT_SILENT)
             });
@@ -143,7 +116,7 @@ mod imp {
 
         pub fn finish(&mut self) -> [u8; 32] {
             let mut ret = [0u8; 32];
-            let mut len = ret.len() as libc::DWORD;
+            let mut len = ret.len() as DWORD;
             call!(unsafe {
                 CryptGetHashParam(self.hcrypthash, HP_HASHVAL, ret.as_mut_ptr(),
                                   &mut len, 0)