ARM kriptografik mbi standardet me çelës të hapur për platformën Android

ARM kriptografik mbi standardet me çelës të hapur për platformën AndroidKa ardhur koha për të demonstruar se si funksionon ARM-i kriptografik i bazuar në standardet me çelës të hapur. cryptoarmpkcs punon në një nga platformët mobile, konkretisht Android.

Koncepcioni që është vendosur gjatë zhvillimit të utilitarit cryptoarmpkcs konsiston në faktin se përdoruesi duhet të përjetojë minimumin e mundimeve gjatë krijimit dhe verifikimit të nënshkrimit elektronik. Pikërisht për këtë arsye, ne propozoni si bartës kryesor të çertifikatës personale të përdoren tokenët kriptografikë. PKCS#11 dhe/ose kontejnerë të sigurt. PKCS#12. Duhet thënë se përdorimi i PKCS#12 në shumë raste rezulton të jetë pothuajse zgjidhja e vetme e mundshme, për shembull, kur tokenët e PKCS#11 nuk kanë mbështetje për platformat e caktuara. Kështu ne vendosëm të fillojmë portimin e utilitarit cryptoarmpkcs në platformën Android me mbështetje për kontejnerët e sigurt PKCS#12.

Menjëherë shënojmë se, për shkak se projekti u zhvillua në platformën C dhe Tcl/Tk, portimi nuk shkaktoi ndonjë vështirësi të principi. Androwish. Me vendosjen dhe konfigurimin e mjedisit nuk pati probleme (mënyra ime e punës është Linux — Mageia-7.0). Do të përmend vetëm një skript, për vendosjen e Android 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"  

E thesarit është se në mjedisin Androwish bëjnë pjesë dy interpretuese undrowish-xxx dhe vanillawish-xxx, të cilat janë plotësisht identike në përbërjen e ‘balalaikave’ (paketave) që përbëjnë Androwish. Diferenca midis undrowish dhe vanillawish konsiston në faktin se në vanillawish backend-i është i bazuar në SDL / AGG / freetype:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android

Prania e këtyre dy utilitarëve lejon zhvillimin e aplikacioneve pa përdorimin e Android-it dhe emulatorit të tij, me një afërsi maksimale me pajisjen reale. Në radhë të parë, sigurisht, është undroidwish-xxx.

Paketë përdoruesi për Android ndërttohet në mjedisin AWSDK. Strukturën e projektit tuaj duhet ta transferoni në folderin ~ / AWSDK / assets / app. Ndërsa moduli kryesor i projektit tuaj duhet të riemërohet si main.tcl. Nëse përdorni balalaika shtesë me biblioteka dinamike, atëherë bibliotekat duhet të vendosen në folderat ~ / AWSDK / libs / x86 për emulatorin dhe ~ / AWSDK / libs / armeabi për pajisjen reale.

Pas kësaj, mjafton të ekzekutoni komandën:

$wish ~ / AWSDK / tools / bones

dhe të ndiqni udhëzimet e saj:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android

Paketa apk e ndërtuar do të ndodhet në folderin ~ / AWSDK / build / outputs / apk.

Nëse keni lidhur një aparat të vërtetë ose një emulator, paketa mund të instalohet menjëherë.
Në këtë rast, aparati i vërtetë duhet të jetë në modin e debug.

Por le të kthehemi te aplikacioni. Çfarë duhej të ndryshonte në të?

Natyrisht, së pari ndryshimet lidhen me përmasat e ekranit. Duhej të riprojektuar dritarja kryesore (fillestare). Si rezultat, në vend të një dritareje në një kompjuter të zakonshëm:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android

Shfaqen tri dritare në Android:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android

Dritarja e parë është informuese. Ajo ndahen në disa pjesë. Pjesa e parë, që ndodhet në krye, përmban emrin e utilitarit dhe logon e tij.

Më pas vjen logo e prodhuesit, informatat dhe përfundojnë faqen tri butona.
Faqja është shkruar duke përdorur komponentin canvas. Në faqen përdoren dy lloje butonash: një në formën e një drejtkëndëshi të tejdukshëm (të mesëm), dhe dy të tjera në formën e një drejtkëndëshi me qoshe të rrumbullakosura. Për krijimin e butonave me qoshe të rrumbullakosura është përdorur "balalaika" tkpath. Personalish, kjo balalaikë më la një përshtypje shumë të mirë. Natyrisht, kur punoni me canvas, pjesa më e madhe e kodit merret nga gjeometria. Më poshtë është skenari create_titul_page.tcl për krijimin e faqes së parë të aplikacionit. Çdo kush mund ta redaktojë atë sipas vizionit të tij.

Skenari create_titul_page.tcl

paket kërkon Tk
paket kërkon tkpath 0.3.0

global mydir
set mydir [file dirname [info script]]
#Ngarko imazhet
#Logoja e produktit
image create photo logo_product -file [file join $mydir "imageme" "validcertkey_51x24.png"] 
#Logoja e prodhuesit
image create photo logo_orel -file [file join $mydir "imageme" "я_орел_425x200.png"] -format "png -alpha 1.0"
#Android me tcl/tk
image create photo logo_and -file [file join $mydir "imageme" "AndTk_inv_147x173.png"] -format "png -alpha 1.0"
#Rrotulli i vulosur
image create photo svitok -file [file join $mydir "imageme" "blue_svitok.png"] -format "png -alpha 1.0"
#Plakate
image create photo tileand -file [file join $mydir "imageme" "tile_green_and_32x32.png"] -format "png -alpha 1.0"
#Zmadho/reduko (vlera negative - ulje)
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
# Domosdho tela
 $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 "#xxx" $cr $cg $cb ]
#Krijo një drejtkëndësh me ngjyrë
 $img put $fill -to 0 0 [expr {$x2 - $x1}] [expr {$y2 -$y1}]
#Ruaj imazhin
 set dimg [$img data -format png]
#Krijo image me llogarinë e kanaleve alfa
 image create photo $img -data $dimg -format "png -alpha $alfa"
# $img put [list $rgb1] -to 0 0 [expr {$x2 - $x1}] [expr {$y2 - $y1}]
#Shfaq drejtkëndëshin me ngjyrë
 set imgr [$canv create image $x1 $y1 -image $img -anchor nw] 
 set cc [subst {butImg $img}]
 $canv bind $imgr  $cc
#Rrethimi rreth drejtkëndëshit me ngjyrë
 if {$wbd > 0 } {
	set item [$canv create rect $x1 $y1 $x2 $y2 -outline $colorline -width $wbd ]
	$canv bind $item  $cc
 }
 return $imgr
}

proc butImg {img} {
 tk_messageBox -title "Butoni" -icon info -message "Shtypi butonin=$img" -detail "::screenwidth=$::scrwidthn::screenheight=$::scrheight" -parent .
 if {$img == "exit"} {
	set answer [tk_dialog .dialog2 "Mbarimi i punës" "A jeni të sigurtëshqip?" question 0 "Po" "Jo" ]
	if {$answer == 0} {
 	 exit
	}	
 }
}

proc page_titul {fr logo_manufacturer} {
 global mydir
#Krijoni kanavacën për të gjithë ekranin
 tkp::canvas $fr.can -borderwidth 0 -height [winfo screenheight .] -width [winfo screenwidth .] -relief flat
#Pavijoni pllaka në tel
 createtile "$fr.can" "tileand"
 pack $fr.can -anchor center -expand 1 -fill both -side top -padx 0 -pady 0
#Llogarit koordinatat për logon e prodhuesit
#update për të përditësuar informacionin në DB për dritaret
 update
# set aa [winfo height $fr.labtitul]
 set aa $::padly
#Qendroni logon e zhvilluesit
 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 "Nënshkrim elektronik" -fill black -font {{Roboto Condensed Medium} 15 }
	$fr.can create text $dlx [expr {$wexit + $::padly}] -anchor nw -text "Nënshkrim elektronik" -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 "për platformën Android" -fill black -font {{Roboto Condensed Medium} 13}
	$fr.can create text $dlx [expr {$wexit + $::padly - 80}] -anchor nw -text "për platformën 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 "No. 63 FZ "Për nënshkrimin elektronik" nga 6 prilli 2011" -fill black -font {{Roboto} 10}
	$fr.can create text $dlx [expr {$wexit + $::padly - 50}] -anchor nw -text "No. 63 FZ "Për nënshkrimin elektronik" nga 6 prilli 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 "Autoret: V.N. Orlovnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: support@lissi.runn" 
	-anchor nw -fill black -font {{Roboto} 9}
	$fr.can create text $dlx [expr {$wexit + $::padly - 40}] -text "Autoret: V.N. Orlovnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: support@lissi.runn" 
	-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 "Nënshkrim elektronik" -fill black -font {{Nimbus Sans Narrow} 20}
	$fr.can create text $::padlx [expr {$wexit + $::padly}] -anchor nw -text "Nënshkrim elektronik" -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 "për platformën Android" -fill black -font {{Nimbus Sans Narrow} 18}
	$fr.can create text $::padlx [expr {$wexit + $::padly - 20}] -anchor nw -text "për platformën 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 "No. 63 FZ "Për nënshkrimin elektronik" nga 6 prilli 2011" -fill black -font {{Nimbus Sans Narrow} 14}
	$fr.can create text $::padlx [expr {$wexit + $::padly}] -anchor nw -text "No. 63 FZ "Për nënshkrimin elektronik" nga 6 prilli 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 "Autoret: V.N. Orlovnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: support@lissi.runn" 
	-anchor nw -fill black -font {{Nimbus Sans Narrow} 12}
	$fr.can create text $::padlx [expr {$wexit + $::padly}] -text "Autoret: V.N. Orlovnhttp://soft.lissi.ru, http://www.lissi.run+7(495)589-99-53ne-mail: support@lissi.runn" 
	-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  {butImg "img1"}
#Printoni tekstin
 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 "Faqja e zhvilluesit" -fill black -font {{Arial} 10 normal}] 
#Qendroni tekstin
 set btxt1 [$fr.can bbox $txt1]
#Zgjerimi në boshnjak
 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)}]
#Zgjerimi në boshnjak
 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  {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"]
#Printoni tekstin
 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 "Shkoni në menusë kryesore" -fill black -font {{Roboto Condensed Medium} 12}] 
#Qendroni tekstin
 set btxt1 [$fr.can bbox $txt1]
#Zgjerimi në boshnjak
 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)}]
#Zgjerimi në boshnjak
 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  {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  {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 "Mbarimi i punës" -fill black -font {Arial 10 normal}]
 $fr.can bind $txt1  {butImg "exit"}
 set btxt1 [$fr.can bbox $txt1]
#Zgjerimi në boshnjak
 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)}]
#Zgjerimi në boshnjak
 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
}
#Skripti përkatës
#Lexoni përmasat e ekranit
set ::scrwidth [winfo screenwidth .]
set ::scrheight [winfo screenheight .]
set ::typetlf 0
#Kontrolloni, nëse është telefoni
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
#Logoja e prodhuesit
	scaleImage logo_orel 2
#Logoja e produktit
	scaleImage logo_product 2
#Android me tcl/tk
	scaleImage logo_and 3
#Rrotulli i vulosur
	scaleImage svitok 4
	set ::padls 50
	set ::padlx 75
	set ::padly 50
} else {
#Konfiguroi widgetin për smartphone
 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
}
#Krijoni emrin e produktit
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
#Krijoni faqen e fillimit
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

Për të ekzekutuar këtë skript, përdorim një nga utilitetet undroidwish ose vanillawish:

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

ose

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

Rezultati paraqitet në skrinin e parë.

Në faqen e dytë renditen funksionalitetet e mbështetura nga utiliteti cryptoarmpkcs-A. Çdo rresht është një buton, që kur klikoni do të shfaqë faqen funksionale. Gjeometria e vendosjes së butonave në këtë faqe përcaktohet nga fonti që përdoret. Më poshtë është skripti create_page_functions.tcl për krijimin e faqes së dytë/funksionale të aplikacionit. Çdo kush mund ta redaktojë atë për funksionet e tij.

Skripti 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 

Ky skript gjithashtu përgatit modele për çdo buton funksional:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android

Plotësimi i modeleve bëhet me widget-e klasike dhe tematike (labelframe, button etj.). Një nga këto modele të mbushura mund të shikohet në skrinën e parë nga e djathta. Pasi në fazën e parë u përqendruam në punën me kontejnerin PKCS#12, kodi u përdor pothuajse pa ndryshime edhe për cryptoarmpkcs-A. Në këtë fazë janë realizuar funksionet e mëposhtme:

  • nënshkrimi i dokumentit (Cades-BES, CAdes-T, CAdes-XLT1);
  • punojmë me EP (PKCS7), duke përfshirë shtimin e nënshkrueseve;
  • shikimi i certifikatave/çrequestave për certifikatë:

    ARM kriptografik mbi standardet me çelës të hapur për platformën Android

  • punojmë me PKCS12/PFX;
  • për utilitetin/Distribucione:

    ARM kriptografik mbi standardet me çelës të hapur për platformën Android

Funksionet e tjera lidhen më shumë me tokenat PKCS#11. Portimi i tyre është shtyrë për Vitin e Ri. Planifikohet lidhja e tokenit softuerik dhe lidhu me rekuperimin e tokenave.

Nga pikëpamja e funksionalitetit, pothuajse gjithçka është analogjike me utilitetin cryptoarmpkcs. Por ka dallime të veçanta. Për shembull, pasi dokumenti është nënshkruar, utiliteti pyet nëse nënshkrimi do të kontrollohet në faqen e Shërbimeve Publike:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android
Duke klikuar butonin 'Po', do të hapet një shfletues me faqen e verifikimit të nënshkrimeve të dokumenteve dhe certifikatave. Të theksojmë se kjo faqe nuk është shumë e përshtatshme për ekranin e smartfonëve. Kjo do të jetë e dukshme kur zgjidhni nënshkrimin dhe, nëse nënshkrimi është i shkëputur, skedarin me dokumentin. Por nëse gjithçka shkon mirë, ne do të marrim një rezultat pozitiv:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android

Duhet të kihet parasysh se verifikimi si i nënshkrimit, ashtu dhe i certifikatës në faqen e Shërbimeve Publike ka kuptim vetëm nëse certifikata është marrë në një qendër akredituese (QAC). Në të kundërt, nënshkrimi gjithmonë do të jetë i pavlefshëm.

Për të thirrur shfletuesin, duhet të shtojmë disa rreshta në procedurën openUrl:

proc openURL {url} {
  global typesys
  global macos
  #  global windowsOS
#kontrolli, që utilita po ekzekutohet në smartphone Android
  if {$::typetlf} {
# Nisja e shfletuesit
 	borg activity android.intent.action.VIEW $url text/html
 	return
  }
. . .
}

Shfletuesi në Android thirret si më poshtë:

borg activity android.intent.action.VIEW  text/html

Ka një veçanti të vogël kur shtohet një nënshkruese e re në një dokument të nënshkruar më parë. Certifikata e nënshkruese së re (në fakt, konteneri PKCS#12 me certifikatën dhe çelësin privat) duhet të jetë përzgjedhur paraprakisht në faqen "Nënshkruaj dokumentin" ose "Puna me PKCS12/PFX", për të cilën utilita do të kujtojë:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android
Për operacione të gjata do të vazhdojnë orët si më parë:

ARM kriptografik mbi standardet me çelës të hapur për platformën Android
Mbetej të thuash se nga ku të shkarkosh distribucione dhe të Uroj për Vitin e Ri dhe t'u uroj të gjithëve më të mirat në vitin 2020!

ARM kriptografik mbi standardet me çelës të hapur për platformën AndroidPra, distribucionet për Linux, OS X, Windows dhe Android:

Burimi: habr.com

Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS 🔥 Blini hosting të besueshëm për faqe interneti me mbrojtje nga DDoS, serverë VPS VDS | ProHoster