-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCryptProtect.nim
51 lines (42 loc) · 1.37 KB
/
CryptProtect.nim
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
import winim, base64
var
inputString = "Hello, World!"
encryptBlob: DATA_BLOB
encryptedBlob: DATA_BLOB
decryptedBlob: DATA_BLOB
# CryptProtectData
encryptBlob.cbData = (int32)inputString.len
encryptBlob.pbData = cast[ptr BYTE](cstring(inputString))
let successProtectData: bool = CryptProtectData(
pDataIn = addr encryptBlob,
szDataDescr = NULL,
pOptionalEntropy = NULL,
pvReserved = NULL,
pPromptStruct = NULL,
dwFlags = CRYPTPROTECT_UI_FORBIDDEN,
pDataOut = addr encryptedBlob
)
if successProtectData:
var encryptedData: string
encryptedData.setLen(encryptedBlob.cbData)
copyMem(&encryptedData, encryptedBlob.pbData, encryptedBlob.cbData)
echo "> Successfully encrypted data! Output: ", encode(encryptedData)
else:
echo "> Failed to encrypt data!"
# CryptUnprotectData
let sucessUnprotectData: bool = CryptUnprotectData(
pDataIn = addr encryptedBlob,
ppszDataDescr = NULL,
pOptionalEntropy = NULL,
pvReserved = NULL,
pPromptStruct = NULL,
dwFlags = CRYPTPROTECT_UI_FORBIDDEN,
pDataOut = addr decryptedBlob
)
if sucessUnprotectData:
var decryptedData: string
decryptedData.setLen(decryptedBlob.cbData)
copyMem(&decryptedData, decryptedBlob.pbData, decryptedBlob.cbData)
echo "> Successfully decrypted data! Output: ", decryptedData
else:
echo "> Failed to decrypt data!"