Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ AndroidO to akoko lati ṣafihan bii ibi-iṣẹ iṣẹ cryptographic kan ti o da lori awọn iṣedede bọtini gbangba cryptoarmpkcs ṣiṣẹ lori ọkan ninu awọn iru ẹrọ alagbeka, eyun Android.

Agbekale ti a fi lelẹ nigbati o ndagba ohun elo cryptoarmpkcs ni pe olumulo yẹ ki o ni iriri airọrun o kere ju nigbati o ṣẹda ati ijẹrisi ibuwọlu itanna kan. Ti o ni idi ti a fi daba ni lilo awọn ami-ami cryptographic gẹgẹbi gbigbe bọtini fun ijẹrisi ti ara ẹni PKCS # 11 ati/tabi awọn apoti to ni aabo PKCS # 12. O gbọdọ wa ni wi pe awọn lilo ti PKCS # 12 ni ọpọlọpọ igba wa ni jade a fere awọn nikan ṣee ṣe, Fun apẹẹrẹ, nigbati awọn kanna PKCS # 11 aami ko ni support fun awọn iru ẹrọ. Nitorinaa a pinnu lati bẹrẹ gbigbe ohun elo cryptoarmpkcs si pẹpẹ Android pẹlu atilẹyin fun awọn apoti aabo PKCS#12.

Jẹ ki a ṣe akiyesi lẹsẹkẹsẹ pe niwọn igba ti a ti ṣe iṣẹ akanṣe lori pẹpẹ C ati Tcl/Tk, gbigbe gbigbe ko fa awọn iṣoro ipilẹ eyikeyi. Eyi ṣee ṣe ọpẹ si imọ-ẹrọ Androwish. Pẹlu unfolding ati eto ayika Ko si awọn iṣoro (Ayika iṣẹ mi jẹ Linux - Mageia-7.0). Emi yoo fun ni iwe afọwọkọ kan nikan fun gbigbe Awọn irinṣẹ Laini Laini aṣẹ Android (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"  

Ohun ti o ṣe pataki julọ ni pe agbegbe Androwish pẹlu awọn onitumọ meji, undrowish-xxx ati vanillawish-xxx, eyiti o jẹ aami kanna ni akojọpọ si "balalaikas" (awọn idii) ti o wa ninu Androwish funrararẹ. Iyatọ laarin aifọwọyi ati fanilawish ni pe vanillawish ni SDL/AGG/ẹyin orisun ọfẹ:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

Iwaju awọn ohun elo meji wọnyi gba ọ laaye lati ṣe agbekalẹ ohun elo kan laisi lilo Android funrararẹ ati emulator rẹ pẹlu isunmọ ti o pọju si ẹrọ gidi kan. Ni akọkọ, eyi jẹ, dajudaju, unroidwish-xxx.

Aṣa aṣa gangan fun Android ni a ṣe ni agbegbe AWSDK. Igi akanṣe rẹ yẹ ki o gbe lọ si ~/AWSDK/awọn ohun-ini / folda app. Ni idi eyi, module akọkọ ti agbese rẹ gbọdọ wa ni lorukọmii si main.tcl. Ti o ba lo afikun balalaikas pẹlu awọn ile-ikawe ti o ni agbara, lẹhinna awọn ile-ikawe gbọdọ wa ni gbe sinu awọn folda ~/AWSDK/libs/x86 fun emulator ati ~/AWSDK/libs/armeabi fun ẹrọ gidi.

Lẹhin eyi, kan ṣiṣẹ aṣẹ naa:

$wish ~/AWSDK/tools/bones

ki o si tẹle awọn ilana rẹ:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

Apopọ apk ti o pejọ yoo wa ni ~/AWSDK/build/outputs/apk folda.

Ti o ba ni ẹrọ gidi kan tabi emulator ti o sopọ, package le fi sii lẹsẹkẹsẹ.
Ni idi eyi, ẹrọ gidi gbọdọ wa ni ipo yokokoro.

Ṣugbọn jẹ ki a pada si ohun elo funrararẹ. Kini lati yipada ninu rẹ?

Nipa ti, awọn ayipada jẹ nipataki ni ibatan si iwọn iboju. Mo ni lati tun ṣe akọkọ (window ibẹrẹ). Bi abajade, dipo window kan lori kọnputa deede:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

Awọn window mẹta han lori Android:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

Ferese akọkọ jẹ alaye. Ni aṣa, o pin si awọn ẹya pupọ. Apa akọkọ, ti o wa ni oke, ni orukọ ohun elo ati aami rẹ ninu.

Nigbamii ti aami ti olupese, iwe alaye ati awọn bọtini mẹta pari oju-iwe naa.
Oju-iwe naa ti kọ nipa lilo paati kanfasi. Oju-iwe naa nlo awọn oriṣi awọn bọtini meji: ọkan ni irisi onigun mẹrin translucent (arin), ati awọn meji miiran ni irisi onigun mẹta pẹlu awọn igun yika. A lo balalaika lati ṣẹda awọn bọtini pẹlu awọn igun yika tkpath. Tikalararẹ, balalaika yii ṣe iwunilori pupọ si mi. Nipa ti, nigba ṣiṣẹ pẹlu kanfasi, geometry gba ipin kiniun ti koodu naa. Ni isalẹ ni iwe afọwọkọ create_titul_page.tcl lati ṣẹda oju-iwe akọkọ ti ohun elo naa. Ẹnikẹni le ṣatunkọ rẹ lati ba iran ara wọn mu.

Iwe afọwọkọ 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

Lati mu iwe afọwọkọ yii ṣiṣẹ, lo ọkan ninu awọn ohun elo aifọwọyi tabi vanillawish:

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

tabi

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

Abajade yoo han ni sikirinifoto akọkọ.

Oju-iwe keji ṣe atokọ iṣẹ ṣiṣe ti o ni atilẹyin nipasẹ ohun elo cryptoarmpkcs-A. Laini kọọkan jẹ bọtini kan, nigbati o ba tẹ, oju-iwe iṣẹ kan yoo han. Jiometirika ti bọtini gbigbe lori oju-iwe yii jẹ ipinnu nipasẹ fonti ti o lo. Ni isalẹ ni create_page_functions.tcl script lati ṣẹda oju-iwe keji/iṣẹ ṣiṣe ti ohun elo naa. Ẹnikẹni tun le ṣatunkọ rẹ lati ba awọn iṣẹ wọn mu.

Iwe afọwọkọ 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 

Iwe afọwọkọ yii tun mura awọn ofo fun bọtini iṣẹ kọọkan:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

Awọn òfo ti kun pẹlu Ayebaye ati awọn ẹrọ ailorukọ thematic (labelframe, bọtini, ati be be lo). Ọkan ninu awọn ṣofo ti o kun ni a le rii ni sikirinifoto akọkọ ni apa ọtun. Niwọn bi ni ipele akọkọ a dojukọ lori ṣiṣẹ pẹlu apoti PKCS#12, koodu naa ti lo fere ko yipada fun cryptoarmpkcs-A. Ni ipele yii, awọn iṣẹ wọnyi ni a ṣe:

  • fowo si iwe (Cades-BES, CAdes-T, CAdes-XLT1);
  • A ṣiṣẹ pẹlu itanna Ibuwọlu (PKCS7), pẹlu fifi a signer;
  • Wo awọn iwe-ẹri/awọn ibeere iwe-ẹri:

    Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

  • A ṣiṣẹ pẹlu PKCS12 / PFX;
  • nipa IwUlO/Pinpin:

    Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

Awọn iṣẹ ti o ku ni ibatan si awọn ami PKCS # 11. A ti sun gbigbe gbigbe wọn siwaju titi di ọdun Tuntun. O ti wa ni ngbero lati so a software àmi ki o si sopọ si àmi awọsanma.

Lati oju wiwo iṣẹ, o fẹrẹ jẹ ohun gbogbo ni iru si ohun elo cryptoarmpkcs. Ṣugbọn awọn iyatọ kan wa. Fun apẹẹrẹ, lẹhin ti fowo si iwe kan, ohun elo naa beere boya ibuwọlu naa yoo jẹri lori oju opo wẹẹbu Awọn iṣẹ Ipinle:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android
Nigbati o ba tẹ bọtini “Bẹẹni”, ẹrọ aṣawakiri yoo ṣajọpọ pẹlu oju-iwe kan fun ijẹrisi ibuwọlu ti awọn iwe aṣẹ ati awọn iwe-ẹri. Jẹ ki a sọ lẹsẹkẹsẹ pe oju-iwe yii ko ṣe apẹrẹ gaan fun iboju foonuiyara kan. Eyi yoo jẹ akiyesi nigbati o ba yan ibuwọlu ati, ti ibuwọlu naa ba ya sọtọ, faili pẹlu iwe-ipamọ naa. Ṣugbọn ti ohun gbogbo ba dara, lẹhinna a yoo gba abajade rere:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android

O yẹ ki o gbe ni lokan pe ṣayẹwo mejeeji ibuwọlu ati ijẹrisi lori oju opo wẹẹbu Awọn iṣẹ Ipinle nikan ni oye ti o ba gba ijẹrisi naa ni ile-iṣẹ iwe-ẹri ti o ni ifọwọsi (УЦ). Bibẹẹkọ, ibuwọlu yoo ma jẹ aiṣedeede nigbagbogbo.

Lati pe ẹrọ aṣawakiri naa, Mo ni lati ṣafikun awọn laini meji si ilana openUrl:

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

Ẹrọ aṣawakiri lori Android ni a pe bi atẹle:

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

Iyatọ kekere kan wa nigbati o nfi ami-ami tuntun kun si iwe ti o fowo si tẹlẹ. Ijẹrisi ami ami tuntun (tabi dipo, paapaa PKCS#12 eiyan pẹlu ijẹrisi ati bọtini ikọkọ) gbọdọ jẹ ti yan ni ilosiwaju lori oju-iwe “Wọle iwe kan” tabi “Nṣiṣẹ pẹlu PKCS12/PFX”, eyiti ohun elo naa yoo leti rẹ. :

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android
Lakoko awọn iṣẹ igba pipẹ, aago yoo tẹsiwaju lati fi ami si:

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ Android
Gbogbo ohun ti o ku ni lati sọ ibiti o ti ṣe igbasilẹ awọn pinpin lati ki o yọ fun ọ lori Ọdun Tuntun ti n bọ ati ki gbogbo eniyan ni gbogbo ohun ti o dara julọ ni 2020!

Ibi-iṣẹ iṣẹ cryptographic ti o da lori awọn iṣedede bọtini gbangba fun pẹpẹ AndroidNitorinaa, awọn pinpin fun Lainos, OS X, Windows ati Android:

orisun: www.habr.com

Fi ọrọìwòye kun