Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporoOge erugo iji gosipụta otu ebe a na-arụ ọrụ cryptographic dabere na ụkpụrụ igodo ọha cryptoarmpkcs na-arụ ọrụ na otu n'ime mobile nyiwe, ya bụ Android.

Echiche nke edobere mgbe ị na-etolite akụrụngwa cryptoarmpkcs bụ na onye ọrụ kwesịrị inwe obere nsogbu mgbe ị na-eke ma na-enyocha mbinye aka elektrọnik. Ọ bụ ya mere anyị ji tụọ aro iji akara ngosi cryptographic dị ka isi ihe na-ebu maka asambodo nkeonwe PKCS#11 na/ma ọ bụ akpa nchekwa PKCS#12. Ekwesịrị ikwu na iji PKCS # 12 n'ọtụtụ ọnọdụ na-apụta na ọ fọrọ nke nta ka ọ bụrụ naanị ihe enwere ike, dịka ọmụmaatụ, mgbe otu akara PKCS # 11 enweghị nkwado maka nyiwe ụfọdụ. Ya mere, anyị kpebiri ibido ibuga ọrụ cryptoarmpkcs na ikpo okwu gam akporo na nkwado maka arịa echekwara PKCS#12.

Ka anyị mara ozugbo na ebe ọ bụ na a rụrụ ọrụ ahụ n'elu ikpo okwu C na Tcl/Tk, Porting emeghị ihe isi ike ọ bụla. Emere nke a site na teknụzụ Androwish. Na mkpughe na guzobe gburugburu ebe obibi Enweghị nsogbu ọ bụla (ebe m na-arụ ọrụ bụ Linux - Mageia-7.0). M ga-enye naanị otu edemede maka ibuga gam akporo Command Line Tools (sdk-tools-linux-xxxx.zip):

#!/bin/sh
if [ $# -ne 1   ]
    then 
	echo "./InstallAndroidSDK.sh <sdk-tools-linux-xxxxxxxx.zip>"
	echo "Не указан архив или число параметров больше 1"
	exit 1
fi
if [ ! -f $1 ]
    then 
	echo "./InstallAndroidSDK.sh <sdk-tools-linux-xxxxxxxx.zip>"
	echo "архив $1 отсутствует"
	exit 1
fi
#Распаковываем SDK-TOOLS в папку tools
#unzip sdk-tools-linux-4333796.zip
unzip $1
#Создаем папку android-sdk-linux
mkdir android-sdk-linux
#Перемещвем папку tools в android-sdk-linux
mv tools android-sdk-linux
cd android-sdk-linux/tools/bin
./sdkmanager "platform-tools" "platforms;android-29"  

Ihe kachasị dị ịrịba ama bụ na gburugburu Androwish gụnyere ndị ntụgharị okwu abụọ, undrowish-xxx na vanillawish-xxx, bụ ndị yiri kpamkpam na nhazi na "balalaikas" (ngwugwu) gụnyere na Androwish n'onwe ya. Ọdịiche dị n'etiti mwepu na vanillawish bụ na vanillawish nwere SDL/AGG/ụdị ndabere ndabere:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Ọnụnọ nke akụrụngwa abụọ a na-enye gị ohere ịmepụta ngwa na-ejighi gam akporo n'onwe ya na emulator ya na oke ruru na ngwaọrụ n'ezie. Nke mbụ, nke a bụ, n'ezie, unroidwish-xxx.

Ewubere ngwugwu omenala maka gam akporo na gburugburu AWSDK. Ekwesịrị ịkwaga osisi ọrụ gị na ~/AWSDK/assets/app folder. N'okwu a, a ga-emerịrị aha modul nke ọrụ gị na main.tcl. Ọ bụrụ na ị na-eji balalaikas ndị ọzọ nwere ọba akwụkwọ dị ike, mgbe ahụ, a ga-edobe ọba akwụkwọ na nchekwa ~/AWSDK/libs/x86 maka emulator na ~/AWSDK/libs/armeabi maka ezigbo ngwaọrụ.

Mgbe nke a gasịrị, mee naanị iwu:

$wish ~/AWSDK/tools/bones

ma soro ntuziaka ya:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Ngwa ngwa a gbakọtara ga-adị na ~/AWSDK/build/outputs/apk folder.

Ọ bụrụ na ị nwere ezigbo ngwaọrụ ma ọ bụ emulator ejikọrọ, enwere ike itinye ngwugwu ahụ ozugbo.
N'okwu a, ezigbo ngwaọrụ ga-adị na ọnọdụ debug.

Ma ka anyị laghachi na ngwa n'onwe ya. Gịnị ka a ga-agbanwe na ya?

Dị ka o kwesịrị ịdị, mgbanwe ndị ahụ bụ isi metụtara nha ihuenyo. Ekwesịrị m imegharị isi (window mmalite). N'ihi ya, kama otu windo na kọmputa mgbe niile:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Window atọ pụtara na gam akporo:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Window nke mbụ bụ ozi. N'usoro iwu, a na-ekewa ya n'ọtụtụ akụkụ. Akụkụ nke mbụ, nke dị n'elu, nwere aha njirimara na logo ya.

Na-esote akara ngosi nke onye nrụpụta, mpempe ozi na bọtịnụ atọ mezue ibe ahụ.
Edere ibe a site na iji ihe akụrụngwa. Ibe ahụ na-eji ụdị bọtịnụ abụọ: otu n'ụdị rectangle translucent (n'etiti), na nke ọzọ n'ụdị rectangle nwere akụkụ gburugburu. A na-eji balalaika mepụta bọtịnụ nwere akụkụ gburugburu tkpat. Onwe ya, balalaika a nwere mmetụta dị mma n'ahụ m. Dị ka o kwesịrị ịdị, mgbe ị na-eji kwaaji arụ ọrụ, geometry na-ewere oke ọdụm nke koodu ahụ. N'okpuru ebe a bụ script Create_titul_page.tcl iji mepụta ibe mbụ nke ngwa ahụ. Onye ọ bụla nwere ike dezie ya ka ọ dabara n'ọhụụ nke ya.

Edemede create_titul_page.tcl

package require Tk
package require tkpath 0.3.0
global mydir
set mydir [file dirname [info script]]
#Грузим картинки
#Логотип продукта
image create photo logo_product -file [file join $mydir "imageme" "validcertkey_51x24.png"] 
#Логотип производителя
image create photo logo_orel -file [file join $mydir "imageme" "я_орел_425x200.png"] -format "png -alpha 1.0"
#Андроида с tcl/tk
image create photo logo_and -file [file join $mydir "imageme" "AndTk_inv_147x173.png"] -format "png -alpha 1.0"
#Свиток опечатанный
image create photo svitok -file [file join $mydir "imageme" "blue_svitok.png"] -format "png -alpha 1.0"
#Плитка
image create photo tileand -file [file join $mydir "imageme" "tile_green_and_32x32.png"] -format "png -alpha 1.0"
#Увеличить/уменьшить (отрицательное значение - уменьшение)
proc scaleImage {im xfactor {yfactor 0}} {
set mode -subsample
if {$xfactor>=0 && $yfactor>=0} {
set mode -zoom
} else {
set xfactor [expr $xfactor * -1]
}
if {$yfactor == 0} {set yfactor $xfactor}
set t [image create photo]
$t copy $im
$im blank
$im copy $t -shrink $mode $xfactor $yfactor
image delete $t
}
proc createtile {w  backg} {
image create photo tiled
tiled copy $backg -to 0 0 $::scrwidth $::scrheight -shrink
$backg copy tiled
image delete tiled
# Мостим холст
$w create image 0 0  
-image $backg  
-anchor nw
}
proc create_rectangle  {canv img x1 y1 x2 y2 color alfa {wbd 0} {colorline black} } {
image create photo $img -format "default -colorformat  rgb"
set rgb1 [winfo rgb $canv $color]
set cr  [lindex $rgb1 0]
set cg  [lindex $rgb1 1]
set cb  [lindex $rgb1 2]
set fill [format "#%04x%04x%04x" $cr $cg $cb ]
#Создаем цветной праямоугольник
$img put $fill -to 0 0 [expr {$x2 - $x1}] [expr {$y2 -$y1}]
#Сохраняем картинку
set dimg [$img data -format png]
#Создаем image с учетом alpha канала
image create photo $img -data $dimg -format "png -alpha $alfa"
#    $img put [list $rgb1] -to 0 0 [expr {$x2 - $x1}] [expr {$y2 -$y1}]
#Отображаем цветной прямоугольник
set imgr [$canv create image $x1 $y1 -image $img -anchor nw] 
set cc [subst {butImg $img}]
$canv bind $imgr <ButtonPress-1> $cc
#Оконтовка вокруг цветного прямоугольника
if {$wbd > 0 } {
set item [$canv create rect $x1 $y1 $x2 $y2 -outline $colorline -width $wbd ]
$canv bind $item <ButtonPress-1> $cc
}
return $imgr
}
proc butImg {img} {
tk_messageBox -title "Кнопка" -icon info -message "Нажали кнопку=$img" -detail "::screenwidth=$::scrwidthn::screenheight=$::scrheight" -parent .
if {$img == "exit"} {
set answer [tk_dialog .dialog2 "Конец работы" "Вы действительноnхотите выйти?" question 0 "Да" "Нет" ]
if {$answer == 0} {
exit
}	
}
}
proc page_titul {fr  logo_manufacturer} {
global mydir
#Создаем холст на весь экран
tkp::canvas $fr.can -borderwidth 0 -height [winfo screenheight .] -width [winfo screenwidth .] -relief flat
#Мостим холст плиткой 
createtile "$fr.can"  "tileand"
pack $fr.can  -anchor center -expand 1 -fill both -side top  -padx 0 -pady 0
#Вычисляем координаты для логотипа производителя
#update чтобы обновилась информация в БД об окнах
update
#    set aa [winfo height $fr.labtitul]
set aa $::padly
#Центрируем логотип разработчика
set ha [image width $logo_manufacturer]
set xman [expr {($::scrwidth - $ha) / 2 }]
$fr.can create image $xman $aa -image $logo_manufacturer -anchor nw -tag tag_logo
set blogo [$fr.can bbox tag_logo]
set wexit [lindex $blogo 3]
if {$::typetlf } {
set dlx [expr {$::padlx / 1}]
$fr.can create text [expr $dlx + 6] [expr {$wexit + $::padly + 6}] -anchor nw -text "Электронная подпись" -fill black -font {{Roboto Condensed Medium} 15 }
$fr.can create text $dlx [expr {$wexit + $::padly}] -anchor nw -text "Электронная подпись" -fill white -font {{Roboto Condensed Medium} 15 } -tag id_text0
update
set blogo [$fr.can bbox id_text0]
set wexit [lindex $blogo 3]
$fr.can create text [expr $dlx + 4] [expr {$wexit + $::padly + 4 - 80}] -anchor nw -text "для платформы Android" -fill black -font {{Roboto Condensed Medium} 13}
$fr.can create text $dlx [expr {$wexit + $::padly - 80}] -anchor nw -text "для платформы Android" -fill white -font {{Roboto Condensed Medium} 13} -tag id_text1
set blogo [$fr.can bbox id_text1]
set wexit [lindex $blogo 3]
$fr.can create text [expr $dlx + 3] [expr {$wexit + $::padly + 3 - 50}] -anchor nw -text "№ 63 ФЗ "Об электроннойnподписи от 6 апреля 2011 года"" -fill black -font {{Roboto} 10}
$fr.can create text $dlx [expr {$wexit + $::padly - 50}] -anchor nw -text "№ 63 ФЗ "Об электроннойnподписи от 6 апреля 2011 года"" -fill white -font {{Roboto} 10} -tag id_text2
set blogo [$fr.can bbox id_text2]
set wexit [lindex $blogo 3]
$fr.can create text [expr $dlx + 2] [expr {$wexit + $::padly + 2 - 40}] -text "Авторы: В.Н. Орловnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: [email protected]" 
-anchor nw -fill black  -font {{Roboto} 9}
$fr.can create text $dlx [expr {$wexit + $::padly - 40}] -text "Авторы: В.Н. Орловnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: [email protected]" 
-anchor nw -fill white -tag id_text3  -font {{Roboto} 9}
} else {
$fr.can create text [expr $::padlx + 2] [expr {$wexit + $::padly + 2}] -anchor nw -text "Электронная подпись" -fill black -font {{Nimbus Sans Narrow} 20}
$fr.can create text $::padlx [expr {$wexit + $::padly}] -anchor nw -text "Электронная подпись" -fill white -font {{Nimbus Sans Narrow} 20} -tag id_text0
set blogo [$fr.can bbox id_text0]
set wexit [lindex $blogo 3]
$fr.can create text [expr $::padlx + 2] [expr {$wexit + $::padly + 2 - 20}] -anchor nw -text "для платформы Android" -fill black -font {{Nimbus Sans Narrow} 18}
$fr.can create text $::padlx [expr {$wexit + $::padly - 20}] -anchor nw -text "для платформы Android" -fill white -font {{Nimbus Sans Narrow} 18} -tag id_text1
set blogo [$fr.can bbox id_text1]
set wexit [lindex $blogo 3]
$fr.can create text [expr $::padlx + 2] [expr {$wexit + $::padly + 2}] -anchor nw -text "№ 63 ФЗ "Об электроннойnподписи от 6 апреля 2011 года"" -fill black -font {{Nimbus Sans Narrow} 14}
$fr.can create text $::padlx [expr {$wexit + $::padly}] -anchor nw -text "№ 63 ФЗ "Об электроннойnподписи от 6 апреля 2011 года"" -fill white -font {{Nimbus Sans Narrow} 14} -tag id_text2
set blogo [$fr.can bbox id_text2]
set wexit [lindex $blogo 3]
$fr.can create text [expr $::padlx + 1] [expr {$wexit + $::padly + 1}] -text "Авторы: В.Н. Орловnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: [email protected]" 
-anchor nw -fill black  -font {{Nimbus Sans Narrow} 12}
$fr.can create text $::padlx [expr {$wexit + $::padly}] -text "Авторы: В.Н. Орловnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: [email protected]" 
-anchor nw -fill white -tag id_text3  -font {{Nimbus Sans Narrow} 12} -tag id_text3
set blogo [$fr.can bbox id_text2]
}
set blogo [$fr.can bbox id_text3]
set wland [lindex $blogo 3]
$fr.can create image $::padlx $wland -image logo_and -anchor nw -tag tag_land
set ha [image height logo_and]
set wa [image width logo_and]
set ha1 [expr {$ha - ($ha / 2 ) }]
$fr.can create image [expr {$wa - 80 }] [expr {$wland + $ha1}] -image svitok -anchor nw -tag tag_land
if {$::typetlf} {
set x1 [expr {$::padlx / 2}]
set y1 [expr {$wland + 120}]
set x2 [expr {$::::scrwidth - $x1}]
set y2 [expr {$y1 + 120}]
set wd 8
set rr 18
} else {
set x1 [expr {$::padlx / 2}]
set y1 [expr {$wland + 40}]
set x2 [expr {$::::scrwidth - $x1}]
set y2 [expr {$y1 + 40}]
set wd 4
set rr 6
}
set g5 [$fr.can gradient create linear -stops {{0 lightgreen} {1 green}}] 
set S3 [$fr.can style create -stroke "skyblue" -fill  $g5 -strokewidth $wd  -fillopacity 0.6]
set im1 [$fr.can create prect $x1 $y1 $x2 $y2 -rx $rr -style $S3]
$fr.can bind $im1 <ButtonPress-1> {butImg "img1"}
#Печатаем техт
set blogo [$fr.can bbox $im1]
set by2 [lindex $blogo 3]
set by1 [lindex $blogo 1]
set bb [expr {($by2 - $by1) / 2}]
set bx2 [lindex $blogo 2]
set bx1 [lindex $blogo 0]
set bbx [expr {($bx2 - $bx1) / 2}]
set txt1 [$fr.can create text [expr {$x1 + $::padlx * 2}] [expr {$y1 + 1 }] -anchor nw -text "Сайт разработчика" -fill black -font {{Arial} 10 normal}] 
#Центрируем техт
set btxt1 [$fr.can bbox $txt1]
#Смещение по оси Y
set ty2 [lindex $btxt1 3]
set ty1 [lindex $btxt1 1]
set tt [expr {$ty2 - $ty1}]
set tt [expr {$tt / 2}]
set offsy [expr {($by1 + $bb) - ($ty1 + $tt)}]
#Смещение по оси X
set tx2 [lindex $btxt1 2]
set tx1 [lindex $btxt1 0]
set ttx [expr {$tx2 - $tx1}]
set ttx [expr {$ttx / 2}]
set offsx [expr {($bx1 + $bbx) - ($tx1 + $ttx)}]
$fr.can move $txt1 $offsx $offsy
$fr.can bind $txt1 <ButtonPress-1> {butImg "img1"}
if {$::typetlf} {
set y1 [expr $y2 + 40]
set x2 [expr {$::::scrwidth - $x1}]
set y2 [expr {$y1 + 120}]
} else {
set y1 [expr {$y1 + 60}]
set x2 [expr {$::::scrwidth - $x1}]
set y2 [expr {$y1 + 40}]
}
set im1 [create_rectangle $fr.can "but2" $x1 $y1 $x2 $y2 "#2b972d" 0.6 $wd "skyblue"]
#Печатаем техт
set blogo [$fr.can bbox $im1]
set by2 [lindex $blogo 3]
set by1 [lindex $blogo 1]
set bb [expr {($by2 - $by1) / 2}]
set bx2 [lindex $blogo 2]
set bx1 [lindex $blogo 0]
set bbx [expr {($bx2 - $bx1) / 2}]
set txt1 [$fr.can create text [expr {$x1 + $::padlx * 2}] [expr {$y1 + 1 }] -anchor nw -text "Переход в основное меню" -fill black -font {{Roboto Condensed Medium} 12}] 
#Центрируем текст
set btxt1 [$fr.can bbox $txt1]
#Смещение по оси Y
set ty2 [lindex $btxt1 3]
set ty1 [lindex $btxt1 1]
set tt [expr {$ty2 - $ty1}]
set tt [expr {$tt / 2}]
set offsy [expr {($by1 + $bb) - ($ty1 + $tt)}]
#Смещение по оси X
set tx2 [lindex $btxt1 2]
set tx1 [lindex $btxt1 0]
set ttx [expr {$tx2 - $tx1}]
set ttx [expr {$ttx / 2}]
set offsx [expr {($bx1 + $bbx) - ($tx1 + $ttx)}]
$fr.can move $txt1 $offsx $offsy
$fr.can bind $txt1 <ButtonPress-1> {butImg "but2"}
if {$::typetlf} {
set x1 [expr {$::padlx / 2}]
set y1 [expr $y2 + 40]
set x2 [expr {$::::scrwidth - $x1}]
set y2 [expr {$y1 + 120}]
} else {
set x1 [expr {$::padlx / 2}]
set y1 [expr {$y1 + 60}]
set x2 [expr {$::::scrwidth - $x1}]
set y2 [expr {$y1 + 40}]
}
set S3 [$fr.can style create -stroke skyblue -fill  $g5 -strokewidth $wd  -fillopacity 0.6]
set im1 [$fr.can create prect $x1 $y1 $x2 $y2 -rx $rr -style $S3]
set blogo [$fr.can bbox $im1]
$fr.can bind $im1 <ButtonPress-1> {butImg "exit"}
set by2 [lindex $blogo 3]
set by1 [lindex $blogo 1]
set bb [expr {($by2 - $by1) / 2}]
set bx2 [lindex $blogo 2]
set bx1 [lindex $blogo 0]
set bbx [expr {($bx2 - $bx1) / 2}]
set txt1 [$fr.can create text [expr {$x1 + $::padlx * 2}] [expr {$y1 + 1 }] -anchor nw -text "Конец работы" -fill black  -font {Arial 10 normal}]
$fr.can bind $txt1 <ButtonPress-1> {butImg "exit"}
set btxt1 [$fr.can bbox $txt1]
#Смещение по оси Y
set ty2 [lindex $btxt1 3]
set ty1 [lindex $btxt1 1]
set tt [expr {$ty2 - $ty1}]
set tt [expr {$tt / 2}]
set offsy [expr {($by1 + $bb) - ($ty1 + $tt)}]
#Смещение по оси X
set tx2 [lindex $btxt1 2]
set tx1 [lindex $btxt1 0]
set ttx [expr {$tx2 - $tx1}]
set ttx [expr {$ttx / 2}]
set offsx [expr {($bx1 + $bbx) - ($tx1 + $ttx)}]
$fr.can move $txt1 $offsx $offsy
}
#Собственно скрипт
#Считываем размеры экрана
set ::scrwidth [winfo screenwidth .]
set ::scrheight [winfo screenheight .]
set ::typetlf 0
#Проверяем, что это телефон
if {$::scrwidth < $::scrheight} {
set ::typetlf 1
}
set ::padls 20
set ::padlx 15
set ::padly 15
if {$::typetlf} {
wm attributes . -fullscreen 1
scaleImage icon_openfile_18x16 3
scaleImage ::img::view_18x16 3
#Логотип производителя
scaleImage logo_orel 2
#Логотип продуктв
scaleImage logo_product 2
#Андроида tcl/tk
scaleImage logo_and 3
#Свиток опечатанный
scaleImage svitok 4
set ::padls 50
set ::padlx 75
set ::padly 50
} else {
#Конфигурирование виджета под смартфон
scaleImage logo_orel -2
set ::scrwidth 370
set ::scrheight 700
wm minsize . $::scrwidth $::scrheight
set geometr $::scrwidth
append geometr "x"
append geometr $::scrheight
append geometr "+0+0"
wm geometry . $geometr
}
#Создаем название продукта
set name_product "CryptoArmPKCS-A" 
label .labtitul -image logo_product -compound left -fg snow -text $name_product -font {Arial 10 bold} -anchor w  -width [winfo screenwidth .] -pady $::padls -padx 10 -bg #222222 
pack .labtitul -anchor nw -expand 0 -fill x -side top  -padx 1 -pady 0
#Создаем стартовую страницу
set i 0
ttk::frame .fr$i -pad 0 -padding 0
page_titul ".fr$i"  "logo_orel"
pack .fr$i -side top -anchor center -expand 1 -fill both -side top  -padx 0 -pady 0 
update

Iji mebe edemede a, jiri otu n'ime ihe ndị na-adịghị mma ma ọ bụ vanillawish:

$ /usr/local/bin64/undroidwish-e5dc71ed9d-linux64   create_titul_page.tcl 

ma ọ bụ

$/usr/local/bin64/vanillawish-e5dc71ed9d-linux64  create_titul_page.tcl 

E gosipụtara nsonaazụ ya na nseta ihuenyo mbụ.

Ibe nke abụọ depụtara ọrụ ndị ọrụ cryptoarmpkcs-A na-akwado. Ahịrị ọ bụla bụ bọtịnụ, mgbe ịpịrị ya, a ga-egosipụta ibe na-arụ ọrụ. A na-ekpebi geometry nke ntinye bọtịnụ na ibe a site na mkpụrụedemede ejiri. N'okpuru bụ create_page_functions.tcl script imepụta ibe nke abụọ/arụ ọrụ nke ngwa ahụ. Onye ọ bụla nwekwara ike dezie ya ka ọ dabara ọrụ ha.

Edemede create_page_functions.tcl

package require Tk
package require tkpath 0.3.0
global mydir
set mydir [file dirname [info script]]
#Увеличить/уменьшить (отрицательное значение - уменьшение)
proc scaleImage {im xfactor {yfactor 0}} {
set mode -subsample
if {$xfactor>=0 && $yfactor>=0} {
set mode -zoom
} else {
set xfactor [expr $xfactor * -1]
}
if {$yfactor == 0} {set yfactor $xfactor}
set t [image create photo]
$t copy $im
$im blank
$im copy $t -shrink $mode $xfactor $yfactor
image delete $t
}
proc createtile {w  backg} {
image create photo tiled
tiled copy $backg -to 0 0 $::scrwidth $::scrheight -shrink
$backg copy tiled
image delete tiled
# Мостим холст
$w create image 0 0  
-image $backg  
-anchor nw
}
proc butCliked {num fr} {
pack forget  .fr1
set ::tekFrfunc $fr
pack $fr -side top -anchor center -expand 1 -fill both -side top  -padx 0 -pady 0 
tk_dialog .dialog1 "Dear user:" "Button $num was clickednFr=$fr" info 0 OK 
}
proc butImg {img} {
tk_messageBox -title "Кнопка" -icon info -message "Нажали кнопку=$img" -detail "::screenwidth=$::scrwidthn::screenheight=$::scrheight" -parent .
if {$img == "exit"} {
set answer [tk_dialog .dialog2 "Конец работы" "Вы действительноnхотите выйти?" question 0 "Да" "Нет" ]
if {$answer == 0} {
exit
}	
}
}
proc butReturn {} {
pack forget  $::tekFrfunc
pack .fr1 -side top -anchor center -expand 1 -fill both -side top  -padx 0 -pady 0 
#    tk_dialog .dialog1 "Dear user:" "Button $num was clickednFr=$fr" info 0 OK 
}
proc page_func {fr tile titul functions} {
#Кнопки  меню
upvar $functions but
#Создаем шрифт для кнопок
if {$::typetlf} {
set feFONT_button "-family {Roboto} -size 9 -weight bold -slant roman"
set widl 10
} else {
set feFONT_button "-family {Arial} -size 12 -weight bold -slant roman"
set widl 5
}
catch {font delete fontTEMP_drawer}
eval font create fontTEMP_drawer  $feFONT_button
#Вычисляем максимальныю длину текста
set drawerCNT 0
set strMaxWidthPx 15
set Ndrawers [expr {[array size but] - 1}]
while { $drawerCNT <= $Ndrawers } {
set strWidthPx [font measure fontTEMP_drawer "$but($drawerCNT)"]
if { $strWidthPx > $strMaxWidthPx } {
set strMaxWidthPx $strWidthPx
}
incr drawerCNT
}
set drawerWidthPx [expr $strMaxWidthPx + 10]
set xxx [expr {($::::scrwidth - $drawerWidthPx) / 2}]
if {$fr != ".fr1"} {
set hret [expr $::scrheight / 4]
} else {
set hret $::scrheight
}
set hret [expr $::scrheight / 4]
tkp::canvas $fr.can -borderwidth 0 -height $hret -width $::scrwidth -relief flat
#Мостим холст плиткой 
createtile "$fr.can"  $tile
pack $fr.can  -anchor center -expand 1 -fill both -side top  -padx 0 -pady 0
if {$titul != "" } {
set allfunc $titul
catch {font delete fontTEMP_titul}
set font_titul "-family {Roboto Condensed Medium} -size 15"
eval font create fontTEMP_titul  $font_titul
set funcWidthPx [font measure fontTEMP_titul "$allfunc"]
set dlx [expr {($::::scrwidth - $funcWidthPx) / 2}]
$fr.can create text [expr $dlx + 6] [expr {6 + 6}] -anchor nw -text "$allfunc" -fill black -font fontTEMP_titul
$fr.can create text $dlx 6 -anchor nw -text "$allfunc" -fill white -font fontTEMP_titul -tag id_text0
set blogo [$fr.can bbox id_text0]
set boxbut [expr ([lindex $blogo 3] + 6 + 6)]
} else {
set boxbut [expr 6 + 6]
}
#Вычисляем самый широкий текст у кнопок
#См. выше
#Размещаем кнопки
set BDwidth_canvas 0
set maxTextHeightPx [font metrics fontTEMP_drawer -linespace] 
set maxTextHeightPx [expr {$maxTextHeightPx + ( $maxTextHeightPx / 2)}]
set drawerHeightPx $maxTextHeightPx
set xLocTextPx [expr {($::::scrwidth - $drawerWidthPx) / 2}]
set yLocTextPx [expr $BDwidth_canvas + ($drawerHeightPx / 2) + $boxbut]
set canvasHeightPx [expr $Ndrawers * $drawerHeightPx]
set drawerCNT 0
set Ndrawers [expr {[array size but] - 1}]
while { $drawerCNT <= $Ndrawers } {
set yLineLocPx [ expr (( $drawerCNT ) * $drawerHeightPx + $boxbut)]
#Линия перед текстом
$fr.can create line 
$xLocTextPx $yLineLocPx 
[expr $drawerWidthPx + $xLocTextPx] $yLineLocPx 
-fill "#a0a0a0" -width $widl
$fr.can create text [expr $xLocTextPx + 5] $yLocTextPx 
-anchor w 
-font fontTEMP_drawer 
-text "$but($drawerCNT)" 
-tag textlineTag($drawerCNT)
if {$drawerCNT == 0} {
if {$fr == ".fr1"} {
$fr.can bind textlineTag($drawerCNT)  <ButtonRelease-1>   {butImg "but1"}
} else {
$fr.can bind textlineTag($drawerCNT)  <ButtonRelease-1>   {butReturn}
}
} else {
frame .fn$drawerCNT -background white -relief flat -pady 0 -padx 0
set titul $but($drawerCNT)
set cmd "$fr.can bind textlineTag($drawerCNT)  <ButtonRelease-1>   {butCliked $drawerCNT .fn$drawerCNT}"
set cmd [subst "$cmd"]
eval $cmd 
set but1(0) "Возврат в основное меню"
page_func ".fn$drawerCNT" voda "$titul" "but1"
}
incr drawerCNT
set yLocTextPx [ expr $yLocTextPx + $drawerHeightPx]
#Завершаюшая линия
if { $drawerCNT > $Ndrawers } {
set yLineLocPx [ expr (( $drawerCNT ) * $drawerHeightPx + $boxbut)]
$fr.can create line $xLocTextPx $yLineLocPx 
[expr $drawerWidthPx + $xLocTextPx] $yLineLocPx 
-fill "#a0a0a0" -width $widl
}
}
}
#Собственно скрипт
#Считываем размеры экрана
set ::scrwidth [winfo screenwidth .]
set ::scrheight [winfo screenheight .]
set ::typetlf 0
#Проверяем, что это телефон
if {$::scrwidth < $::scrheight} {
set ::typetlf 1
}
set ::padls 20
set ::padlx 15
set ::padly 15
if {$::typetlf} {
wm attributes . -fullscreen 1
#Логотип продуктв
scaleImage logo_product 2
set ::padls 50
set ::padlx 75
set ::padly 50
} else {
#Конфигурирование виджета под смартфон
set ::scrwidth 370
set ::scrheight 700
wm minsize . $::scrwidth $::scrheight
set geometr $::scrwidth
append geometr "x"
append geometr $::scrheight
append geometr "+0+0"
wm geometry . $geometr
}
#Грузим картинки
image create photo voda -file [file join $mydir "imageme" "voda_400x800.png"]
#Логотип продукта
image create photo logo_product -file [file join $mydir "imageme" "validcertkey_51x24.png"] 
#Создаем название продукта
set name_product "CryptoArmPKCS-A" 
label .labtitul -image logo_product -compound left -fg snow -text $name_product -font {Arial 10 bold} -anchor w  -width [winfo screenwidth .] -pady $::padls -padx 10 -bg #222222 
pack .labtitul -anchor nw -expand 0 -fill x -side top  -padx 1 -pady 0
#Создаем страницы с функционалом
set i 1
ttk::frame .fr$i -pad 0 -padding 0
#Кнопки основного меню
set but(0) "Стартовая страница" 
set but(1) "Подписать документ"
set but(2) "Работаем с ЭП (PKCS7)" 
set but(3) "Запрос на сертификат" 
set but(4) "Просмотр запроса/сертификата" 
set but(5) "Список криптомеханизмов"
set but(6) "Просмотр ASN1-структуры" 
set but(7) "Объекты токена" 
set but(8) "Работаем с PKCS12/PFX" 
set but(9) "Самоподписанный сертификат"
set but(10) "Об Утилите/Дистрибутивы" 
set but(11) "Создать Токены"
set but(12) "Конфигурировние токена"
if {$::typetlf} {
scaleImage voda 3 2
}
#Создаем страницу с функционалом
page_func ".fr$i" voda "Функционал" "but"
#Отображаем страницу с функционалом
pack .fr$i -side top -anchor center -expand 1 -fill both -side top  -padx 0 -pady 0 

Edemede a na-akwadokwa oghere maka bọtịnụ ọrụ ọ bụla:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Oghere ahụ jupụtara na wijetị kpochapụwo na isiokwu (labelframe, bọtịnụ, wdg). Enwere ike ịhụ otu n'ime oghere ndị a jupụtara na nseta ihuenyo mbụ dị n'aka nri. Ebe ọ bụ na na mbụ ogbo anyị lekwasịrị anya na-arụ ọrụ na PKCS#12 akpa, koodu na-eji fọrọ nke nta ka agbanweghị maka cryptoarmpkcs-A. N'oge a, a na-arụ ọrụ ndị a:

  • bịanye aka n'akwụkwọ ahụ (Cades-BES, CAdes-T, CAdes-XLT1);
  • Anyị na mbinye aka eletrọnịkị (PKCS7) na-arụ ọrụ, gụnyere ịgbakwunye onye nbinye aka;
  • Lelee asambodo/arịrịọ asambodo:

    Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

  • Anyị na-arụ ọrụ na PKCS12/PFX;
  • gbasara akụrụngwa/nkesa:

    Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Ọrụ ndị fọdụrụ nwere njikọ na akara PKCS#11. E yigharịrị ọdụ ụgbọ mmiri ha ruo afọ ọhụrụ. A na-eme atụmatụ ijikọ token ngwanrọ wee jikọọ na igwe ojii akara.

Site n'echiche ọrụ, ihe fọrọ nke nta ka ọ bụrụ ihe niile yiri ọrụ cryptoarmpkcs. Ma enwere ụfọdụ ndịiche. Dịka ọmụmaatụ, mgbe ha binyechara aka na akwụkwọ, ụlọ ọrụ na-ajụ ma a ga-enyocha mbinye aka na webụsaịtị Ọrụ Ọchịchị:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo
Mgbe ị pịrị bọtịnụ “Ee”, ihe nchọgharị ahụ ga-ebu ibe ya maka ịchọpụta mbinye aka nke akwụkwọ na asambodo. Ka anyị kwuo ozugbo na emeghị ibe a maka ihuenyo smartphone. Nke a ga-apụta ìhè mgbe ị na-ahọrọ mbinye aka na, ọ bụrụ na mbinye aka na-ewepụ, faịlụ nwere akwụkwọ ahụ. Mana ọ bụrụ na ihe niile dị mma, mgbe ahụ anyị ga-enweta nsonaazụ dị mma:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo

Ekwesịrị iburu n'uche na ịlele ma mbinye aka na asambodo na webụsaịtị gọọmentị steeti nwere ezi uche ma ọ bụrụ na enwetara asambodo ahụ n'ụlọ ọrụ asambodo akwadoro (УЦ). Ma ọ bụghị ya, mbinye aka ga-abụ ihe na-abaghị uru mgbe niile.

Iji kpọọ ihe nchọgharị ahụ, ekwesịrị m itinye ahịrị abụọ na usoro openUrl:

proc openURL {url} {
global typesys
global macos
#  global windowsOS
#проверка, что утилита выполняется на смартфоне Android
if {$::typetlf} {
#Запуск браузера
borg activity android.intent.action.VIEW $url text/html
return
}
. . .
}

A na-akpọ ihe nchọgharị dị na android dị ka ndị a:

borg activity android.intent.action.VIEW <URL> text/html

Enwere obere miche mgbe ị na-agbakwunye onye nbinye aka ọhụrụ na akwụkwọ mbinye aka na mbụ. A ga-ahọpụtarịrị akwụkwọ asambodo ọhụrụ ahụ (ma ọ bụ karịa, ọbụlagodi akpa PKCS#12 nwere asambodo yana igodo nzuzo) n'ihu na ibe “Bịnye aka n'akwụkwọ” ma ọ bụ “Na-arụ ọrụ na PKCS12/PFX” nke ndị ọrụ ga-echetara gị. :

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo
N'oge arụ ọrụ ogologo oge, elekere ga-aga n'ihu na-akụ:

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporo
Naanị ihe fọdụrụ bụ ikwu ebe ị ga-ebudata nkesa na kelee gị maka afọ ọhụrụ na-abịa ma na-achọ onye ọ bụla ihe kacha mma na 2020!

Nrụ ọrụ Cryptographic dabere na ụkpụrụ igodo ọha maka ikpo okwu gam akporoYabụ, nkesa maka Linux, OS X, Windows na gam akporo:

isi: www.habr.com

Tinye a comment