
konya
Active Members-
Posts
30 -
Joined
-
Last visited
Recent Profile Visitors
The recent visitors block is disabled and is not being shown to other users.
konya's Achievements

Seeker (1/7)
3
Reputation
-
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
I use both Crypt.au3 and CryptoNG.au3 and often operate conversion and creation and non-file usage. I would like to share some codes that I have improved or generated, hoping to be helpful to you. #include "..\CryptoNG.au3" #include <bignum.au3> #include <string.au3> #include <array.au3> Local $c_data = FileOpenDialog("Select a license data", @ScriptDir & "\", "c data (*.*)", 1) If @error Then MsgBox(4096,"","No File(s) choose") Exit EndIf Local $hFileOpen = FileOpen($c_data, 0) Local $c = FileRead($hFileOpen) $Private_c =_WinAPI_Base64Decode($c) $n_binary = Binary("0xput in data") $Public_key = Create_to_Blob(@ScriptDir&"\Test.blob","public", 2048, 65537, $n_binary, 0x0, 0x0, 0, 0 ) $m = _CryptoNG_RSA_EncryptData($Private_c , $Public_key, $CNG_BCRYPT_PAD_NONE, Default, "binary" ) ;Read_to_Blob(@ScriptDir&"\example_legacy_privatekey.blob", "Private", "Legacy") ;Read_to_Blob(@ScriptDir&"\example_legacy_publickey.blob", "Public", "Legacy") ;Read_to_Blob(@ScriptDir&"\example_rsa_privatekey.blob","Private") ;Read_to_Blob(@ScriptDir&"\example_rsa_publickey.blob","public") ;Create_to_Blob(@ScriptDir&"\Test20250227.blob","public",2048,65537,Binary("0x" & _BigHex_Swap_endian("092E57E9A31BB37F89222D15A2449594A4ED5705BF395A4469218881CA8C8A27437F7CE2B1ADEF8D93AE19BF381489DD7D06ED674FF945BF932F3FD81CEDB875F8A677CD4A4468A5DF249B9C0611F5E31DE60DBA86BCB69C38D0EED3931A61E379136E52FB7D39B30B5FA29CA5205D8B6A8101E666779EF3D99B196B4F54AA43F682B53FA5BE8986A7086D4C75975DCB22640DD8ACFAEBA7C8D72058AC997F4EB72F824FD45C55C29C0834AB0D629B56F191A4BB16CDA0694141DC64DAACEF8F923FDC8F3734FA5CE59E7034C2D9237358084259D10134C0A13C2098847630B656179B1F7DB61674D1B705A10E41A7F215D0D865A46E6BC2850642BA413C55C5")),Binary("0x" & _BigHex_Swap_endian("C7C6000BB7C3E10D0440AB2BE592D5F0A7D7899A721A256C0554CF3989D77C1AC1BCC27F9CF4884033A16D0CA8B478A9B2DCB92B6A5993AD3E303D971F1539C8AD306697BA08B340EEAD98D4C462B5E77DF9615F0DA5ED5DFA5B6167AD19D6C6A06AAD1ED71E8E1B7A99F9F3E3838DE7F51F0B2C5AE3D2B784C55A29AAB8A8CF")),Binary("0x" & _BigHex_Swap_endian("AF54BA9A2567F5AD9BC29158786F9E7264DDB487E8750B1E2455121383CE487EA2F1E43842D42864830063FCD906B521F6DE05CACBD8CC5886486DFA51DFB6D404F5168F26B5508F6F71D937C27A0EF90300A60B9293AB00B3D2917C65D2B7AFDC5635F0AC721622307DF3D846F501CA1125D567D4178929CFF93281202345F3")),0,1,"Legacy") ;Create_to_Blob(@ScriptDir&"\Test20250227.blob","PRIVATE",2048,65537,Binary("0x" & _BigHex_Swap_endian("092E57E9A31BB37F89222D15A2449594A4ED5705BF395A4469218881CA8C8A27437F7CE2B1ADEF8D93AE19BF381489DD7D06ED674FF945BF932F3FD81CEDB875F8A677CD4A4468A5DF249B9C0611F5E31DE60DBA86BCB69C38D0EED3931A61E379136E52FB7D39B30B5FA29CA5205D8B6A8101E666779EF3D99B196B4F54AA43F682B53FA5BE8986A7086D4C75975DCB22640DD8ACFAEBA7C8D72058AC997F4EB72F824FD45C55C29C0834AB0D629B56F191A4BB16CDA0694141DC64DAACEF8F923FDC8F3734FA5CE59E7034C2D9237358084259D10134C0A13C2098847630B656179B1F7DB61674D1B705A10E41A7F215D0D865A46E6BC2850642BA413C55C5")),Binary("0x" & _BigHex_Swap_endian("C7C6000BB7C3E10D0440AB2BE592D5F0A7D7899A721A256C0554CF3989D77C1AC1BCC27F9CF4884033A16D0CA8B478A9B2DCB92B6A5993AD3E303D971F1539C8AD306697BA08B340EEAD98D4C462B5E77DF9615F0DA5ED5DFA5B6167AD19D6C6A06AAD1ED71E8E1B7A99F9F3E3838DE7F51F0B2C5AE3D2B784C55A29AAB8A8CF")),Binary("0x" & _BigHex_Swap_endian("AF54BA9A2567F5AD9BC29158786F9E7264DDB487E8750B1E2455121383CE487EA2F1E43842D42864830063FCD906B521F6DE05CACBD8CC5886486DFA51DFB6D404F5168F26B5508F6F71D937C27A0EF90300A60B9293AB00B3D2917C65D2B7AFDC5635F0AC721622307DF3D846F501CA1125D567D4178929CFF93281202345F3")),0,1,"Legacy") Global Const $tagRSAPUBKEY = _ "align 1;" & _ "char magic[4];" & _ "uint bitlen;" & _ "uint PubExpLength;" & _ "uint ModulusLength;" & _ "uint PLength;" & _ "uint QLength;" & _ "byte PubExp[3];" & _ "byte Modulus[1];" Global Const $tagRSAPRIVATEKEY = _ "align 1;" & _ "char magic[4];" & _ "uint bitlen;" & _ "uint PubExpLength;" & _ "uint ModulusLength;" & _ "uint PLength;" & _ "uint QLength;" & _ "byte PubExp[3];" & _ "byte Modulus[1];" & _ "byte P[1];" & _ "byte q[1];" Global Const $tagRSAPRIVATEKEY_Legacy = _ "byte bType[1];" & _ "byte bVersion[1];" & _ "word reserved[1];" & _ "byte aiKeyAlg[4];" & _ "char magic[4];" & _ "uint bitlen;" & _ "byte PubExp[4];" & _ "byte Modulus[1];" & _ "byte p[1];" & _ "byte q[1];" & _ "byte exponent1[1];" & _ "byte exponent2[1];" & _ "byte coefficient[1];" & _ "byte privateExponent[1];" Global Const $tagRSAPUBKEY_Legacy = _ "byte bType[1];" & _ "byte bVersion[1];" & _ "word reserved[1];" & _ "byte aiKeyAlg[4];" & _ "char magic[4];" & _ "uint bitlen;" & _ "byte PubExp[4];" & _ "byte Modulus[1];" Func _BigNum_inverse($a, $b) $result = 0 Local $array[0][2], $cc = 1 While 1 If Mod($cc, 2) = 1 Then _ArrayAdd($array, $b & "|" & $a) Else _ArrayAdd($array, $a & "|" & $b) EndIf $cc += 1 $result = _BigNum_Mod($a, $b) If $result <> 0 Then $a = $b $b = $result Else ExitLoop EndIf WEnd $cc = 1 Local $d = "", $k = "" For $i = UBound($array) - 1 To 0 Step -1 If $cc = 1 Then If $array[$i][0] = 1 Then $d = 1 Else $d = 1 $k = $array[$i][0] - 1 EndIf EndIf If $cc <> 1 Then If $k = "" Then $k = _BigNum_Div((_BigNum_Sub(_BigNum_Mul($array[$i][0], $d), 1)), $array[$i][1]) Else $d = _BigNum_Div((_BigNum_Add(_BigNum_Mul($array[$i][1], $k), 1)), $array[$i][0]) $k = "" EndIf EndIf $cc += 1 Next Return $d EndFunc Func _BigHex_Swap_endian($data) $result = "" if IsBinary($data) Then $data = Hex($data,BinaryLen($data)) EndIf if Mod(StringLen($data),2) <> 0 Then $data = "0" & $data EndIf for $i = 1 to StringLen($data) step 2 $result = StringMid($data,$i,2) & $result Next Return $result EndFunc Func _BigNum_ToBase2($iDec, $base = 16 , $checkfirstzero = 0) $base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" ;base64 ;Sexagesimal $base60_2 = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx" ;sexagesimal $base32 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567" ;base32 $base24 = "0123456789ABCDEFGHJKLMNP" ;base24 $base16 = "0123456789ABCDEF" ;hex ;Duodecimal system or dozenal $base12 = "0123456789AB" ;duodecimal $base10 = "0123456789" ;base10 $base8 = "01234567" ;oct $base2 = "01" ;binary If $base = 2 Then $Symbol = $base2 ElseIf $base = 8 Then $Symbol = $base8 ElseIf $base = 10 Then $Symbol = $base10 ElseIf $base = 16 Then $Symbol = $base16 ElseIf $base = 60 Then $Symbol = $base60_2 ElseIf $base = 64 Then $Symbol = $base64 EndIf Local $Out, $ost $Symbol = StringSplit($Symbol, '') If @error Or $Symbol[0] < 2 Then Return SetError(1, 0, $iDec) Do $ost = _BigNum_Mod($iDec, $Symbol[0]) $iDec = _BigNum_Div(_BigNum_Sub($iDec, $ost), $Symbol[0]) $Out = $Symbol[$ost + 1] & $Out Until Not Number($iDec) if $checkfirstzero = 1 Then if Mod(StringLen($Out),2) <> 0 Then $Out = "0" & $Out EndIf EndIf Return SetError(0, $Symbol[0], $Out) EndFunc Func _BigHex_ToBase2($sDecimal, $iBase) Local $vDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~" ; 96 ASCII symbols, use Unicode for more 94個字元 If $iBase > StringLen($vDigits) Then SetError(1, 0, 0) $vDigits = StringSplit($vDigits, '', 2) Local $sResult = 0 For $i = 1 To StringLen($sDecimal) $nn = _ArraySearch($vDigits, StringMid($sDecimal, $i, 1)) $sResult = _BigNum_Add(_BigNum_Mul($iBase, $sResult), $nn) Next Return $sResult EndFunc Func Read_to_Blob($key_path ,$tag = "Public", $tag2 = "new" , $type = "File" , $showdata = 1) Local $returndata[2] if $type <> "File" Then $blob_b = $key_path Else Local $hFile = FileOpen($key_path,$FO_BINARY) Local $blob_b = FileRead($hFile) FileClose($hFile) EndIf Local $blob_handle = DllStructCreate("byte a["&BinaryLen($blob_b)&"];") $blob_handle.a = $blob_b if $tag2 = "new" Then if $tag = "Public" Then Local $blob_data = DllStructCreate($tagRSAPUBKEY,DllStructGetPtr($blob_handle)) Local $tagRSAPUBKEY2 = StringReplace($tagRSAPUBKEY,"Modulus[1]","Modulus["&$blob_data.bitlen/8&"]") $blob_data = DllStructCreate($tagRSAPUBKEY2,DllStructGetPtr($blob_handle)) $returndata[1] = $tagRSAPUBKEY2 if $showdata = 1 Then _WinAPI_DisplayStruct($blob_data,$tagRSAPUBKEY2) EndIf Else Local $blob_data = DllStructCreate($tagRSAPRIVATEKEY,DllStructGetPtr($blob_handle)) Local $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY,"Modulus[1]","Modulus["&$blob_data.bitlen/8&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"p[1]","p["&$blob_data.bitlen/8/2&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"q[1]","q["&$blob_data.bitlen/8/2&"]") $blob_data = DllStructCreate($tagRSAPRIVATEKEY2,DllStructGetPtr($blob_handle)) $returndata[1] = $tagRSAPRIVATEKEY2 if $showdata = 1 Then _WinAPI_DisplayStruct($blob_data,$tagRSAPRIVATEKEY2) EndIf EndIf Else if $tag = "Public" Then Local $blob_data = DllStructCreate($tagRSAPUBKEY_Legacy,DllStructGetPtr($blob_handle)) Local $tagRSAPUBKEY2_Legacy = StringReplace($tagRSAPUBKEY_Legacy,"Modulus[1]","Modulus["&$blob_data.bitlen/8&"]") $blob_data = DllStructCreate($tagRSAPUBKEY2_Legacy,DllStructGetPtr($blob_handle)) $returndata[1] = $tagRSAPUBKEY2_Legacy if $showdata = 1 Then _WinAPI_DisplayStruct($blob_data,$tagRSAPUBKEY2_Legacy) EndIf Else Local $blob_data = DllStructCreate($tagRSAPRIVATEKEY_Legacy,DllStructGetPtr($blob_handle)) Local $tagRSAPRIVATEKEY2_Legacy = StringReplace($tagRSAPRIVATEKEY_Legacy,"Modulus[1]","Modulus["&$blob_data.bitlen/8&"]") $tagRSAPRIVATEKEY2_Legacy = StringReplace($tagRSAPRIVATEKEY2_Legacy,"p[1]","p["&$blob_data.bitlen/8/2&"]") $tagRSAPRIVATEKEY2_Legacy = StringReplace($tagRSAPRIVATEKEY2_Legacy,"q[1]","q["&$blob_data.bitlen/8/2&"]") $tagRSAPRIVATEKEY2_Legacy = StringReplace($tagRSAPRIVATEKEY2_Legacy,"exponent1[1]","exponent1["&$blob_data.bitlen/8/2&"]") $tagRSAPRIVATEKEY2_Legacy = StringReplace($tagRSAPRIVATEKEY2_Legacy,"exponent2[1]","exponent2["&$blob_data.bitlen/8/2&"]") $tagRSAPRIVATEKEY2_Legacy = StringReplace($tagRSAPRIVATEKEY2_Legacy,"coefficient[1]","coefficient["&$blob_data.bitlen/8/2&"]") $tagRSAPRIVATEKEY2_Legacy = StringReplace($tagRSAPRIVATEKEY2_Legacy,"privateExponent[1]","privateExponent["&$blob_data.bitlen/8&"]") $blob_data = DllStructCreate($tagRSAPRIVATEKEY2_Legacy,DllStructGetPtr($blob_handle)) $returndata[1] = $tagRSAPRIVATEKEY2_Legacy if $showdata = 1 Then _WinAPI_DisplayStruct($blob_data,$tagRSAPRIVATEKEY2_Legacy) EndIf EndIf EndIf $returndata[0] = $blob_data Return $returndata EndFunc Func Create_to_Blob($key_path,$tag = "Public" , $bitlen = 2048, $e = 65537, $Modulus = Binary("0x00"), $p = Binary("0x00"), $q = Binary("0x00") ,$write_or_binary = 1, $show = 0, $tag2 = "new") if $tag2 = "new" Then if $tag = "Public" Then Local $tagRSAPUBKEY2 = StringReplace($tagRSAPUBKEY,"Modulus[1]","Modulus["&$bitlen/8&"]") Local $blob_data = DllStructCreate($tagRSAPUBKEY2) $blob_data.magic = "RSA1" $blob_data.bitlen = $bitlen $blob_data.PubExpLength = 3 $blob_data.ModulusLength = $blob_data.bitlen/8 $blob_data.PLength = 0 $blob_data.QLength = 0 $blob_data.PubExp = $e $blob_data.Modulus = $Modulus if $show = 1 Then _WinAPI_DisplayStruct($blob_data,$tagRSAPUBKEY2) EndIf Else Local $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY,"Modulus[1]","Modulus["&$bitlen/8&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"p[1]","p["&$bitlen/8/2&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"q[1]","q["&$bitlen/8/2&"]") Local $blob_data = DllStructCreate($tagRSAPRIVATEKEY2) $blob_data.magic = "RSA2" $blob_data.bitlen = $bitlen $blob_data.PubExpLength = 3 $blob_data.ModulusLength = $blob_data.bitlen/8 $blob_data.PLength = $blob_data.bitlen/8/2 $blob_data.QLength = $blob_data.bitlen/8/2 $blob_data.PubExp = $e $blob_data.Modulus = $Modulus $blob_data.p = $p $blob_data.q = $q if $show = 1 then _WinAPI_DisplayStruct($blob_data,$tagRSAPRIVATEKEY2) EndIf EndIf Else if $tag = "Public" Then Local $tagRSAPUBKEY_Legacy2 = StringReplace($tagRSAPUBKEY_Legacy,"Modulus[1]","Modulus["&$bitlen/8&"]") Local $blob_data = DllStructCreate($tagRSAPUBKEY_Legacy2) $blob_data.bType = 0x06 $blob_data.bVersion = 0x02 $blob_data.aiKeyAlg = Binary("0x00A40000") $blob_data.magic = "RSA1" $blob_data.bitlen = $bitlen $blob_data.PubExp = Binary("0x" & _BigHex_Swap_endian(_BigNum_ToBase2($e,16,1))) $blob_data.Modulus = Binary("0x" & _BigHex_Swap_endian($Modulus)) if $show = 1 Then _WinAPI_DisplayStruct($blob_data,$tagRSAPUBKEY_Legacy2) EndIf Else Local $tagRSAPRIVATEKEY_Legacy2 = StringReplace($tagRSAPRIVATEKEY_Legacy,"Modulus[1]","Modulus["&$bitlen/8&"]") $tagRSAPRIVATEKEY_Legacy2 = StringReplace($tagRSAPRIVATEKEY_Legacy2,"p[1]","p["&$bitlen/8/2&"]") $tagRSAPRIVATEKEY_Legacy2 = StringReplace($tagRSAPRIVATEKEY_Legacy2,"q[1]","q["&$bitlen/8/2&"]") $tagRSAPRIVATEKEY_Legacy2 = StringReplace($tagRSAPRIVATEKEY_Legacy2,"exponent1[1]","exponent1["&$bitlen/8/2&"]") $tagRSAPRIVATEKEY_Legacy2 = StringReplace($tagRSAPRIVATEKEY_Legacy2,"exponent2[1]","exponent2["&$bitlen/8/2&"]") $tagRSAPRIVATEKEY_Legacy2 = StringReplace($tagRSAPRIVATEKEY_Legacy2,"coefficient[1]","coefficient["&$bitlen/8/2&"]") $tagRSAPRIVATEKEY_Legacy2 = StringReplace($tagRSAPRIVATEKEY_Legacy2,"privateExponent[1]","privateExponent["&$bitlen/8&"]") Local $blob_data = DllStructCreate($tagRSAPRIVATEKEY_Legacy2) $blob_data.bType = 0x07 $blob_data.bVersion = 0x02 $blob_data.aiKeyAlg = Binary("0x00A40000") $blob_data.magic = "RSA2" $blob_data.bitlen = $bitlen $blob_data.PubExp = Binary("0x" & _BigHex_Swap_endian(_BigNum_ToBase2($e,16,1))) $blob_data.Modulus = Binary("0x" & _BigHex_Swap_endian($Modulus)) $blob_data.p = Binary("0x" & _BigHex_Swap_endian($p)) $blob_data.q = Binary("0x" & _BigHex_Swap_endian($q)) Local $D = _BigNum_inverse(_BigNum_Mul(_BigNum_Sub(_BigHex_ToBase2(Hex($p), 16),1),_BigNum_Sub(_BigHex_ToBase2(Hex($q), 16),1)),$e) $blob_data.exponent1 = Binary("0x" &_BigHex_Swap_endian(_BigNum_ToBase2(_BigNum_mod($D,_BigNum_Sub(_BigHex_ToBase2(Hex($p), 16),1)),16,1))) $blob_data.exponent2 = Binary("0x" &_BigHex_Swap_endian(_BigNum_ToBase2(_BigNum_mod($D,_BigNum_Sub(_BigHex_ToBase2(Hex($q), 16),1)),16,1))) $blob_data.coefficient = Binary("0x" &_BigHex_Swap_endian(_BigNum_ToBase2(_BigNum_inverse(_BigHex_ToBase2(Hex($p), 16) , _BigHex_ToBase2(Hex($q), 16)),16,1))) $blob_data.privateExponent = Binary("0x" &_BigHex_Swap_endian(_BigNum_ToBase2($D,16,1))) if $show = 1 then _WinAPI_DisplayStruct($blob_data,$tagRSAPRIVATEKEY_Legacy2) EndIf EndIf EndIf Local $blob_binary = DllStructCreate("byte a["&DllStructGetSize($blob_data)&"];",DllStructGetPtr($blob_data)) if $write_or_binary = 1 Then $hFile = FileOpen($key_path,$FO_BINARY+$FO_OVERWRITE) FileWrite($hFile,$blob_binary.a) FileClose($hFile) Else Return $blob_binary.a EndIf EndFunc Func __CryptoNG_BcryptImportKeyPair($hAlgorithmProvider, $sKeyBlobFile, $sKeyBlobType, $Key_type = "file" ) If $__gbDebugging Then _DebugOut(@CRLF & "Function: __CryptoNG_BcryptImportKeyPair()") Local $aResult[0] Local $iError = 0, _ $iStatusCode = 0 Local $tBuffer = "" Local $hFile = -1, _ $hKey = -1 Local $xKeyBlob = Binary("") ;Make sure file exists if $Key_type = "file" Then If Not FileExists($sKeyBlobFile) Then Return SetError(3, 0, "") ;Read binary blob file $hFile = FileOpen($sKeyBlobFile, $FO_BINARY) If $hFile = -1 Then Return SetError(4, 0, "") $xKeyBlob = FileRead($hFile) FileClose($hFile) Else $xKeyBlob = $sKeyBlobFile EndIf ;Create a binary buffer, containing key blob, to pass to function $tBuffer = DllStructCreate(StringFormat("byte data[%i]", BinaryLen($xKeyBlob))) $tBuffer.data = $xKeyBlob If $__gbDebugging Then _DebugReportVar("Public/Private Key Blob", $tBuffer.data) ;Import key pair $aResult = DllCall(__CryptoNG_GetBcryptDllHandle(), "int", "BCryptImportKeyPair", _ "handle", $hAlgorithmProvider, _ "handle", Null, _ "wstr", $sKeyBlobType, _ "handle*", Null, _ "struct*", $tBuffer, _ "ulong", DllStructGetSize($tBuffer), _ "ulong", $CNG_BCRYPT_NO_KEY_VALIDATION _ ) If @error Then $iError = @error $__gsLastErrorMessage = __CryptoNG_DllCallErrorMessage($iError) Return SetError(1, $iError, "") EndIf If $__gbDebugging Then _DebugReportVar("BCryptImportKeyPair $aResult", $aResult) ;Get returned values from dllcall $iStatusCode = $aResult[0] $hKey = $aResult[4] ;Check status code from dllcall If $iStatusCode <> $CNG_STATUS_SUCCESS Then $__gsLastErrorMessage = __CryptoNG_StatusMessage($iStatusCode) Return SetError(2, $iStatusCode, "") EndIf ;All is good, return handle pointer Return $hKey EndFunc Func _CryptoNG_RSA_EncryptData($sText, $sPublicKeyBlobFile, $iPadding = Default, $sProvider = Default ,$Key_type = "file") If $__gbDebugging Then _DebugOut(@CRLF & "Function: _CryptoNG_RSA_EncryptData()") Local $hAlgorithmProvider = -1, _ $hEncryptionKey = -1 Local $xEncryptedText = "" ;Resolve defaults If $sProvider = Default Then $sProvider = "Microsoft Primitive Provider" If $iPadding = Default Then $iPadding = $CNG_BCRYPT_PAD_PKCS1 ;Make sure that text is not blank If $sText = "" Then $__gsLastErrorMessage = "Invalid parameter - Text cannot be blank." Return SetError(-1, 0, "") EndIf ;Make sure that key blob file exists if $Key_type = "file" Then If Not FileExists($sPublicKeyBlobFile) Then $__gsLastErrorMessage = "Public key blob file does not exist." Return SetError(-2, 0, "") EndIf EndIf ;Open algorithm provider $hAlgorithmProvider = __CryptoNG_BCryptOpenEncryptionAlgorithmProvider($CNG_BCRYPT_RSA_ALGORITHM, $sProvider) If @error Then Return SetError(2, 0, "") ;Import rsa public key $hEncryptionKey = __CryptoNG_BcryptImportKeyPair($hAlgorithmProvider, $sPublicKeyBlobFile, $CNG_BCRYPT_RSAPUBLIC_BLOB, $Key_type) If @error Then If $hAlgorithmProvider <> -1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) Return SetError(3, 0, "") EndIf ;Encrypt data $xEncryptedText = __CryptoNG_BCryptEncrypt_RSA($CNG_BCRYPT_RSA_ALGORITHM, $sText, $hEncryptionKey, $iPadding) If @error Then If $hAlgorithmProvider <> -1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) If $hEncryptionKey <> -1 Then __CryptoNG_BcryptDestroyKey($hEncryptionKey) Return SetError(4, 0, "") EndIf ;Clean up If $hAlgorithmProvider <> -1 Then __CryptoNG_BcryptCloseAlgorithmProvider($hAlgorithmProvider) If $hEncryptionKey <> -1 Then __CryptoNG_BcryptDestroyKey($hEncryptionKey) Return $xEncryptedText EndFunc -
GMP Lib very fast more BigNum UDF. Modify _GMPz_get_Str have memory leak bug as below. Func _GMPz_get_Str($pVal1, $iBase = 10) Local $aRet = DllCall($hDLL_GMP, "none:cdecl", "__gmpz_get_str", "str", "", "int", $iBase, "ptr", $pVal1) Return $aRet[1] EndFunc
-
Share fast power module usage table value. 1._BigNum_Calculate_Last_E($n, $e, $k) get last e value. 2._BigNum_PowerMod_Specified_ciphertext($c, $Last_c, $mod) Func _BigNum_Calculate_Last_E($c, $e, $mod) if $mod = 1 then Return 0 $e = _BigNum_Mod($e,_BigNum_Sub($mod,"1")) $c = _BigNum_Mod($c, $mod) While $e > "0" While _BigNum_Mod($e, 2) = "0" $c = _BigNum_Mod(_BigNum_Mul($c, $c), $mod) $e = _BigNum_Div($e, "2", 0) WEnd $e = _BigNum_Sub($e, "1") WEnd Return $c EndFunc Func _BigNum_PowerMod_Specified_ciphertext($c, $Last_c, $mod) $res = _BigNum_Mod($c, $mod) $res = _BigNum_Mod(_BigNum_Mul($res, $Last_c), $mod) ConsoleWrite("Result = " & $res & @CRLF ) Return $res EndFunc
-
Danyfirex reacted to a post in a topic: Read Public or Pravite key information data tool
-
#include "bignum.au3" #include <Array.au3> #include <String.au3> Global Const $ANS1_Tags[35][2] = [ _ ["01","BOOLEAN"], _ ["02","INTEGER"], _ ["03","BIT STRING"], _ ["04","OCTET STRING"], _ ["05","NULL"], _ ["06","OBJECT IDENTIFIER"], _ ["07","ObjectDescriptor"], _ ["08","EXTERNAL"], _ ["09","REAL"], _ ["0A","ENUMERATED"], _ ["0B","EMBEDDED PDV"], _ ["0C","UTF8String"], _ ["0D","RELATIVE-OID"], _ ["0E","TIME"], _ ["0F","unknow"], _ ["10","SEQUENCE"], _ ["11","SET"], _ ["12","NumericString"], _ ["13","PrintableString"], _ ["14","TeletexString, T61String"], _ ["15","VideotexString"], _ ["16","IA5String"], _ ["17","UTCTime"], _ ["18","GeneralizedTime"], _ ["19","GraphicString"], _ ["1A","VisibleString"], _ ["1B","GeneralString"], _ ["1C","UniversalString"], _ ["1D","CHARACTER STRING"], _ ["1E","BMPString"], _ ["A0","[0]"], _ ["A2","[2]"], _ ["A5","[5]"], _ ["40","Application"], _ ["30","SEQUENCE"]] ;_ArrayDisplay($ANS1_Tags) Local $exponent1, $exponent2, $coefficient, $prime1, $prime2, $privateExponent, $publicExponent, $modulus Local $sFilePath = FileOpenDialog("Please select Key file", "", "Key File(*.*)", 1) If @error Then Exit Local $hFileOpen = FileOpen($sFilePath, 0) Local $sFileRead = FileRead($hFileOpen) if StringInStr($sFileRead,"-----BEGIN PRIVATE KEY-----") <> 0 Then $PEM = Hex(_WinAPI_Base64Decode(_StringBetween($sFileRead,"-----BEGIN PRIVATE KEY-----","-----END PRIVATE KEY-----")[0])) $arrayin = ASN1_Parse($PEM) Private_MAP($arrayin) ElseIf StringInStr($sFileRead,"-----BEGIN RSA PRIVATE KEY-----") <> 0 Then $PEM = Hex(_WinAPI_Base64Decode(_StringBetween($sFileRead,"-----BEGIN RSA PRIVATE KEY-----","-----END RSA PRIVATE KEY-----")[0])) $arrayin = ASN1_Parse($PEM) Private_MAP($arrayin) ElseIf StringInStr($sFileRead,"-----BEGIN PUBLIC KEY-----") <> 0 Then $PEM = Hex(_WinAPI_Base64Decode(_StringBetween($sFileRead,"-----BEGIN PUBLIC KEY-----","-----END PUBLIC KEY-----")[0])) $arrayin = ASN1_Parse($PEM) Puplic_MAP($arrayin) ElseIf StringInStr($sFileRead,"-----BEGIN PUBLIC KEY-----") <> 0 Then $PEM = Hex(_WinAPI_Base64Decode(_StringBetween($sFileRead,"-----BEGIN RSA PUBLIC KEY-----","-----END RSA PUBLIC KEY-----")[0])) $arrayin = ASN1_Parse($PEM) Puplic_MAP($arrayin) EndIf Func ASN1_Parse($data) Local $dataLen, $selectstring, $selectstring_tag, $selectstring_len, $selectstring_len_Dec, $selectstring_data_start, $selectstring_data, $tag_offset, $hr, $result[0][8], $class = 0, $Data_offset = 0 Local $FC = 0, $temp_i, $temp_offset, $CD, $temp_data, $zero_add, $temp_original_len, $temp_original_data $dataLen = StringLen($data) $temp_original_data = $data $temp_original_len = $dataLen ;MsgBox(0,"",$dataLen) _ArrayAdd($result,"Class|ANS.1 TAG|Len TAG|Len Hex|Data String|TAG's Len|Len Dec|Data offset") While $dataLen <> 0 for $i = 1 to $dataLen Step 2 $selectstring = StringMid($data,$i,2) if $selectstring = "" Then ExitLoop EndIf if $selectstring = "00" Then $zero_add += 1 EndIf $hr = _ArraySearch($ANS1_Tags, $selectstring) if $selectstring = "30" or $selectstring = "04" or $selectstring = "03" or $selectstring = "A0" or $selectstring = "A5" or $selectstring = "A2" Then $FC = 1 Else $FC = 0 EndIf ;msgbox(0,$FC,$selectstring) if $hr <> -1 Then $selectstring_tag = StringMid($data,$i+2,2) if $selectstring_tag = "82" Then $selectstring_len = StringMid($data,$i+4,4) $selectstring_len_Dec = Dec(Hex(Binary("0x"&$selectstring_len))) $tag_offset = 8 $selectstring_data_start = $i + 8 ElseIf $selectstring_tag = "81" Then $selectstring_len = StringMid($data,$i+4,2) $selectstring_len_Dec = Dec(Hex(Binary("0x"&$selectstring_len))) $tag_offset = 6 $selectstring_data_start = $i + 6 Else $selectstring_len = $selectstring_tag $selectstring_len_Dec = Dec(Hex(Binary("0x"&$selectstring_len))) $tag_offset = 4 $selectstring_data_start = $i + 4 EndIf if UBound($result) >= 2 Then if $class <> $result[UBound($result)-1][0] Then $Data_offset-=$result[UBound($result)-1][6] EndIf EndIf $Data_offset+=$zero_add $selectstring_data = StringMid($data,$selectstring_data_start,$selectstring_len_Dec*2) _ArrayAdd($result,$class&"|"&$selectstring&"|"&$selectstring_tag&"|"&$selectstring_len&"|"&$selectstring_data&"|"&$tag_offset/2&"|"&$selectstring_len_Dec&"|"&$Data_offset) $zero_add = 0 ;if $FC = 1 Then if $FC = 1 and $class <> 0 Then $CD = $selectstring_len_Dec $temp_data = $data $class+=1 $data = $selectstring_data $dataLen = StringLen($data) $i+=$tag_offset+$selectstring_len_Dec*2 - 2 $temp_i = $i $Data_offset+=$tag_offset/2 + $selectstring_len_Dec $temp_Data_offset = $Data_offset $i = 1 - 2 ContinueLoop EndIf if $CD <> 0 Then $CD = $CD - $selectstring_len_Dec - ($tag_offset/2) if $CD = 0 Then $i = $temp_i $Data_offset = $temp_Data_offset $data = $temp_data $dataLen = StringLen($data) $class-=1 ContinueLoop EndIf EndIf $Data_offset+=$tag_offset/2 + $selectstring_len_Dec $i+=$tag_offset+$selectstring_len_Dec*2 - 2 ;_ArrayDisplay($result) EndIf Next $class+=1 $data = $selectstring_data $dataLen = StringLen($data) if $FC = 0 Then ;MsgBox(0,"",$Data_offset) if $Data_offset*2 >= $temp_original_len Then ExitLoop Else $data = StringMid( $temp_original_data ,2*($i)+1,$temp_original_len-2*($i)) $dataLen = StringLen($data) $class-=2 EndIf EndIf WEnd _ArrayDisplay($result) Return $result EndFunc Func Puplic_MAP($data) Local $CC = 0 For $i = UBound($data) - 1 to 0 step -1 if $data[$i][1] = "02" Then $CC+=1 if $CC = 2 Then $modulus = $data[$i][4] MsgBox(0,"modulus - n (HEX)",$modulus) MsgBox(0,"modulus - n (DEC)",_BigHex_ToBase2($modulus,16)) elseif $CC = 1 Then $publicExponent = $data[$i][4] MsgBox(0,"publicExponent - e",Dec(Hex("0x"&$publicExponent))) EndIf EndIf Next EndFunc Func Private_MAP($data) Local $CC = 0 For $i = UBound($data) - 1 to 0 step -1 if $data[$i][1] = "02" Then $CC+=1 if $CC = 8 Then $modulus = $data[$i][4] MsgBox(0,"modulus - n (HEX)",$modulus) MsgBox(0,"modulus - n (DEC)",_BigHex_ToBase2($modulus,16)) elseif $CC = 7 Then $publicExponent = $data[$i][4] MsgBox(0,"publicExponent - e",Dec(Hex("0x"&$publicExponent))) elseif $CC = 6 Then $privateExponent = $data[$i][4] MsgBox(0,"privateExponent - d",$privateExponent) elseif $CC = 5 Then $prime1 = $data[$i][4] MsgBox(0,"prime1 - p (HEX)",$prime1) MsgBox(0,"prime1 - p (DEC)",_BigHex_ToBase2($prime1,16)) elseif $CC = 4 Then $prime2 = $data[$i][4] MsgBox(0,"prime2 - q (HEX)",$prime2) MsgBox(0,"prime2 - q (DEC)",_BigHex_ToBase2($prime2,16)) elseif $CC = 3 Then $exponent1 = $data[$i][4] MsgBox(0,"exponent1 - d mod (p - 1)",$exponent1) elseif $CC = 2 Then $exponent2 = $data[$i][4] MsgBox(0,"exponent2 - d mod (q - 1)",$exponent2) elseif $CC = 1 Then $coefficient = $data[$i][4] MsgBox(0,"coefficient - q–1 mod p",$coefficient) EndIf EndIf Next EndFunc Func _WinAPI_Base64Decode($sB64String) Local $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "ptr", 0, "dword*", 0, "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(1, 0, "") Local $bBuffer = DllStructCreate("byte[" & $aCrypt[5] & "]") $aCrypt = DllCall("Crypt32.dll", "bool", "CryptStringToBinaryA", "str", $sB64String, "dword", 0, "dword", 1, "struct*", $bBuffer, "dword*", $aCrypt[5], "ptr", 0, "ptr", 0) If @error Or Not $aCrypt[0] Then Return SetError(2, 0, "") Return DllStructGetData($bBuffer, 1) EndFunc 1.Execute process 2.Select key file 3.Pop the information 1.pem 2.pem
-
- read pem
- asn1 parser
-
(and 1 more)
Tagged with:
-
Very like this UDF. Share some math function. Func _BigNum_EXP($a) $Euler_number = "2.71828182845904523536028747135266249" Return _BigNum_FastPow($Euler_number, $a) EndFunc Func _BigNum_FastPow($a, $b) $check = StringSplit($b,".") if $check[0] = "1" Then Local $ans = 1 While $b > "0" If _BigNum_Mod($b, 2) = "1" Then $ans = _BigNum_Mul($ans, $a) $b = _BigNum_Sub($b, "1") Else $a = _BigNum_Mul($a, $a) $b = _BigNum_Div($b, "2", 0) EndIf WEnd Return StringLeft($ans,32) Else $Denominator = "1"&_StringRepeat("0", StringLen($check[2])) $Numerator = _BigNum_add($check[2] ,_BigNum_mul(String($check[1]),$Denominator)) While 1 $GCD = _BigNum_GCD($Denominator, $Numerator) if $GCD <> 1 Then $Denominator/= $GCD $Numerator/= $GCD Else ExitLoop EndIf WEnd $a = _BigNum_n_Root($a,$Denominator,"35") $b = $Numerator Local $ans = 1 While $b > "0" If _BigNum_Mod($b, 2) = "1" Then $ans = _BigNum_Mul($ans, $a) $b = _BigNum_Sub($b, "1") Else $a = _BigNum_Mul($a, $a) $b = _BigNum_Div($b, "2", 0) EndIf WEnd Return $ans EndIf EndFunc Func _BigNum_LCM($a, $b) Local $result = 0, $c = $a , $d = $b While 1 $result = _BigNum_Mod($a, $b) If $result <> 0 Then $a = $b $b = $result Else ExitLoop EndIf WEnd Return _BigNum_Mul(_BigNum_Div($c, $b), $d) EndFunc Func _BigNum_GCD($a, $b) $result = 0 Local $array[0][2], $cc = 1 While 1 $result = _BigNum_Mod($a, $b) If $result <> 0 Then $a = $b $b = $result Else ExitLoop EndIf WEnd Return $b EndFunc Func _BigNum_PowerMod($n, $e, $k) Local $res = "1" While $e > "0" While _BigNum_Mod($e, 2) = "0" $n = _BigNum_Mod(_BigNum_Mul($n, $n), $k) $e = _BigNum_Div($e, "2", 0) WEnd $res = _BigNum_Mod(_BigNum_Mul($res, $n), $k) $e = _BigNum_Sub($e, "1") WEnd Return $res EndFunc Func _BigHex_ToBase_Fast($sDecimal, $iBase) Local $vDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!""#$%&'()*+,-./:;<=>?@[\]^_`{|}~" If $iBase > StringLen($vDigits) Then SetError(1, 0, 0) $vDigits = StringSplit($vDigits, '', 2) Local $sResult = 0 For $i = 1 To StringLen($sDecimal) $nn = _ArraySearch($vDigits, StringMid($sDecimal, $i, 1)) $sResult = _BigNum_Add(_BigNum_Mul($iBase, $sResult), $nn) Next Return $sResult EndFunc Func _BigNum_inverse($a, $b) $result = 0 Local $array[0][2], $cc = 1 While 1 If Mod($cc, 2) = 1 Then _ArrayAdd($array, $b & "|" & $a) Else _ArrayAdd($array, $a & "|" & $b) EndIf $cc += 1 $result = _BigNum_Mod($a, $b) If $result <> 0 Then $a = $b $b = $result Else ExitLoop EndIf WEnd $cc = 1 Local $d = "", $k = "" For $i = UBound($array) - 1 To 0 Step -1 If $cc = 1 Then If $array[$i][0] = 1 Then $d = 1 Else $d = 1 $k = $array[$i][0] - 1 EndIf EndIf If $cc <> 1 Then If $k = "" Then $k = _BigNum_Div((_BigNum_Sub(_BigNum_Mul($array[$i][0], $d), 1)), $array[$i][1]) Else $d = _BigNum_Div((_BigNum_Add(_BigNum_Mul($array[$i][1], $k), 1)), $array[$i][0]) $k = "" EndIf EndIf $cc += 1 Next Return $d EndFunc
-
Wish can use GDI+ bitmap to OCR. Found OcrLiteCApi.cpp support bitmap but I'm not have VS build dll. Global Const $tagOCR_POINT = _ "double x;" & _ "double y;" Global Const $tagOCR_INPUT = _ "ptr bitmap;" & _ "int type;" & _ "int channels;" & _ "int width;" & _ "int height;" & _ "long dataLength;" Global Const $tagTEXT_BLOCK = _ "ptr boxPoint;" & _ "float boxScore;" & _ "int angleIndex;" & _ "float angleScore;" & _ "double angleTime;" & _ "ptr text;" & _ "float charScores;" & _ "uint64 charScoresLength;" & _ "uint64 boxPointLength;" & _ "uint64 textLength;" & _ "double crnnTime;" & _ "double blockTime;" Global Const $tagOCR_RESULT = _ "double dbNetTime;" & _ "ptr textBlocks;" & _ "uint64 textBlocksLength;" & _ "double detectTime;"
- 3 replies
-
- ocr
- text recognition
-
(and 2 more)
Tagged with:
-
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
@TheXman It is can use private key encrypt and public key decrypt no issue. Only share information and help any one. -
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
@TheXman I use your example blob key make a sample,you can check. $hex_c = Binary("0x598218CBE9826AAF525FA728DB78DCFE2A81F886FC2C35BD40A29662BCCA5FBB224814C1C97157DB619E19A6980BBC39510663B0289F49E8F7551C02F918D44119E7A41B669A31D4A9AB72AFA9531626D25767FE108822A8444318A3A2046ACD7CCE91B358FBEB9E643EFDD1A4688FED197188579AFD563CD1E184D21F837B685402BF633FF9B371F19EB466F2C8290683C447803E3D1CA0AFB516CC8FF1B333EACCB0D453E33886C0CAD933B9A198BC7A43C20651BA04935D73E1AA0503D6BE5574FB35D5FCCF62D5D68930332F3B8D568CDF1540F03E3A9C863704509AD973E12D05812FE4E425BD745B59DAF531F0E4B1D5D89E569C543FCFBF75BF1A70BA") $m = _CryptoNG_RSA_EncryptData($hex_c , "example_rsa_publickey.blob", $CNG_BCRYPT_PAD_NONE, Default ) If @error Then MsgBox(0,"",_CryptoNG_LastErrorMessage()) Else $m = Hex($m) $search_zero = StringInStr($m,"FF00") MsgBox(0,"",BinaryToString("0x"&StringMid($m,$search_zero+4,StringLen($m)-$search_zero))) EndIf -
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
@TheXman When I use the default setting $CNG_BCRYPT_PAD_PKCS1 , public key decryption will return An invalid parameter was passed to a service of function, but when setting $CNG_BCRYPT_PAD_NONE it is decryption success,result the same openssl_public_decrypt function and I don't know why PHP & openssl want support public key decryption private key ciphertext. When I use other UDF like bignum ,verify result as below : $m = "I like autoit" $c = _BigNum_PowerMod($m, $d, $n) ;Private key encrypt $m = _BigNum_PowerMod($c, $e, $n) ;Public key decrypt Result $m = "I like autoit" or $m = "" $c = _BigNum_PowerMod($m, $e, $n) ;Public key encrypt $m = _BigNum_PowerMod($c, $d, $n) ;Private key decrypt Result $m = "I like autoit" It would be great if the _BigNum_PowerMod performance could be improved,it is need 10second provide the result. -
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
Use _CryptoNG_RSA_EncryptData($Private_c , $Public_key, $CNG_BCRYPT_PAD_NONE ) it is can let public key decrypt. -
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
Share my good idea, manual create key to file or return binary data, use key from memory no need to read files. ;tagRSAPUBKEY Global Const $tagRSAPUBKEY = _ "align 1;" & _ "char magic[4];" & _ "uint bitlen;" & _ "uint PubExpLength;" & _ "uint ModulusLength;" & _ "uint PLength;" & _ "uint QLength;" & _ "byte PubExp[3];" & _ "byte Modulus[1];" Global Const $tagRSAPRIVATEKEY = _ "align 1;" & _ "char magic[4];" & _ "uint bitlen;" & _ "uint PubExpLength;" & _ "uint ModulusLength;" & _ "uint PLength;" & _ "uint QLength;" & _ "byte PubExp[3];" & _ "byte Modulus[1];" & _ "byte P[1];" & _ "byte q[1];" ;RSAPUBKEY Func Read_to_Blob($key_path,$tag = "Public") Local $hFile = FileOpen($key_path,$FO_BINARY) Local $blob_b = FileRead($hFile) FileClose($hFile) Local $blob_handle = DllStructCreate("byte a["&BinaryLen($blob_b)&"];") $blob_handle.a = $blob_b if $tag = "Public" Then Local $blob_data = DllStructCreate($tagRSAPUBKEY,DllStructGetPtr($blob_handle)) Local $tagRSAPUBKEY2 = StringReplace($tagRSAPUBKEY,"Modulus[1]","Modulus["&$blob_data.bitlen/8&"]") $blob_data = DllStructCreate($tagRSAPUBKEY2,DllStructGetPtr($blob_handle)) _WinAPI_DisplayStruct($blob_data,$tagRSAPUBKEY2) Else Local $blob_data = DllStructCreate($tagRSAPRIVATEKEY,DllStructGetPtr($blob_handle)) Local $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY,"Modulus[1]","Modulus["&$blob_data.bitlen/8&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"p[1]","p["&$blob_data.bitlen/8/2&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"q[1]","q["&$blob_data.bitlen/8/2&"]") $blob_data = DllStructCreate($tagRSAPRIVATEKEY2,DllStructGetPtr($blob_handle)) _WinAPI_DisplayStruct($blob_data,$tagRSAPRIVATEKEY2) EndIf Return $blob_handle.a EndFunc Func Create_to_Blob($key_path,$tag = "Public" , $bitlen = 2048, $e = 65537, $Modulus = 0x0, $p = 0x0, $q = 0x0 ,$write_or_binary = 1) if $tag = "Public" Then Local $tagRSAPUBKEY2 = StringReplace($tagRSAPUBKEY,"Modulus[1]","Modulus["&$bitlen/8&"]") Local $blob_data = DllStructCreate($tagRSAPUBKEY2) $blob_data.magic = "RSA1" $blob_data.bitlen = $bitlen $blob_data.PubExpLength = 3 $blob_data.ModulusLength = $blob_data.bitlen/8 $blob_data.PLength = 0 $blob_data.QLength = 0 $blob_data.PubExp = $e $blob_data.Modulus = $Modulus _WinAPI_DisplayStruct($blob_data,$tagRSAPUBKEY2) Else Local $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY,"Modulus[1]","Modulus["&$bitlen/8&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"p[1]","p["&$bitlen/8/2&"]") $tagRSAPRIVATEKEY2 = StringReplace($tagRSAPRIVATEKEY2,"q[1]","q["&$bitlen/8/2&"]") Local $blob_data = DllStructCreate($tagRSAPRIVATEKEY2) $blob_data.magic = "RSA2" $blob_data.bitlen = $bitlen $blob_data.PubExpLength = 3 $blob_data.ModulusLength = $blob_data.bitlen/8 $blob_data.PLength = $blob_data.bitlen/8/2 $blob_data.QLength = $blob_data.bitlen/8/2 $blob_data.PubExp = $e $blob_data.Modulus = $Modulus _WinAPI_DisplayStruct($blob_data,$tagRSAPRIVATEKEY2) EndIf Local $blob_binary = DllStructCreate("byte a["&DllStructGetSize($blob_data)&"];",DllStructGetPtr($blob_data)) if $write_or_binary = 1 Then $hFile = FileOpen($key_path,$FO_BINARY+$FO_OVERWRITE) FileWrite($hFile,$blob_binary.a) FileClose($hFile) Else Return $blob_binary.a EndIf EndFunc -
I'm have use autoit call the winscard to connect contact and contact less device to use, autoit is perfact . Func Cardapi_getreader($nonui = False) if $mszGroups = "" Then $mszGroups = "SCard$AllReaders" EndIf Dim $aReaderList[0][2] $Readerslenth = 0 ;SCardListReaders ;1獲取Readers list lenth $result = DllCall($WinScard_DLL, "long", "SCardListReaders", "ptr", DllStructGetData($hContext,1) , "str", "", "str", "", "long*", 0) ;_ArrayDisplay($result) $Readerslenth = $result[4] Local $szReadername2 = DllStructCreate("byte a["&$Readerslenth&"];") ;2帶入Readers list lenth 獲取List $result = DllCall($WinScard_DLL, "long", "SCardListReaders", "ptr", DllStructgetdata($hContext,1) , "str", $mszGroups, "ptr", DllStructGetPtr($szReadername2) , "long*", $Readerslenth) ;有in out 才要加* 原本就有out 定義就不用 Local $Meger_reader_name = "" for $i = 1 to $Readerslenth if hex(StringToBinary(StringMid(BinaryToString($szReadername2.a),$i,1))) <> "00" Then $Meger_reader_name &=StringMid(BinaryToString($szReadername2.a),$i,1) ;msgbox(0,"",StringMid(BinaryToString($szReadername2.a),$i,1)) Else _ArrayAdd($aReaderList, $Meger_reader_name) $Meger_reader_name = "" EndIf Next ;_ArrayDisplay($aReaderList) ;msgbox(0,"",UBound($aReaderList)) if UBound($aReaderList) > 2 Then While 1 $iReader = Input_GUI("Reader list",$aReaderList,0,1) if $iReader <> -1 Then ExitLoop EndIf WEnd $szReadername = $aReaderList[$iReader][0] ;msgbox(0,"",$szReadername) Else if $Readerslenth <> 0 Then $szReadername = BinaryToString($szReadername2.a) ;msgbox(0,"",$szReadername) EndIf EndIf ;_ArrayDisplay($result,"getreader") ;ConsoleWrite($result[0]&@CRLF) if $nonui = False Then if $result[0] = -2146435026 Then msgbox(0,"Getreader","沒有可用的智慧卡讀取裝置。") ;Exit elseif $result[0] = -2146435043 Then msgbox(0,"Getreader","智慧卡資源管理員並未執行。") Cardapi_unini() $steprec -= 1 Return True ;Exit elseif $result[0] = -2146435042 Then msgbox(0,"Getreader","智慧卡資源管理員已關閉。") Cardapi_unini() $steprec -= 1 Return True ;Exit EndIf if $result[0] <> 0 Then Return False EndIf Else if $result[0] = -2146435026 Then Return False ;msgbox(0,"getreader","沒有可用的智慧卡讀取裝置。") ;Exit elseif $result[0] = -2146435043 Then Cardapi_unini() $steprec -= 1 Return True ;msgbox(0,"getreader","智慧卡資源管理員並未執行。") ;Exit elseif $result[0] = -2146435042 Then ;msgbox(0,"getreader","智慧卡資源管理員已關閉。") Cardapi_unini() $steprec -= 1 Return True ;Exit EndIf if $result[0] <> 0 Then Return False EndIf EndIf $steprec +=1 Return True EndFunc
-
konya reacted to a post in a topic: CryptoNG UDF - Cryptography API: Next Gen
-
TheXman reacted to a post in a topic: CryptoNG UDF - Cryptography API: Next Gen
-
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
-
CryptoNG UDF - Cryptography API: Next Gen
konya replied to TheXman's topic in AutoIt Example Scripts
The Func __CryptoNG_IsKeyBitLengthValid($hAlgorithmProvider, $vEncryptionKey) have some issue, When I execute example it is fail and I'm found the issue is $tKeyLengthsStruct.dwIncrement = 0, Suggestion modify to ElseIf Mod($iEncryptKeyBitLength, $tKeyLengthsStruct.dwIncrement) <> 0 and $tKeyLengthsStruct.dwIncrement <> 0 Then. , -
junkew reacted to a post in a topic: Autoit & graphedit
-
It is only reply the question let everybody know autoit can do it.