| 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 09.01.2014(UTC) Сообщений: 25  Откуда: МоскваСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                При попытки подписи небольшого (16 байт) куска данных происходит падение. Сертификат и ключ с заданым _keyAlias  существуют Код, вызывающий падение
 
 Код:
    public String getSign(byte[] data, String pin, int slotNum) throws ModuleException
    {
        String keyStoreType = JCSP.HD_STORE_NAME;
        Log.i(TAG, "Default container type: " + keyStoreType);
        // Загрузка ключа и сертификата. Всегда используем
        // только провайдер JCSP (2001).
        byte[] sign = new byte[0];
        try
        {
            X509Certificate certificate;
            PrivateKey privateKey;
            KeyStore keyStore =
                    KeyStore.getInstance(keyStoreType, JCSP.PROVIDER_NAME);
            keyStore.load(null, null);
/*
            KeyStore.ProtectionParameter protectedParam =
                    new KeyStore.PasswordProtection(stringToChars(pin));
            KeyStore.Entry entry = keyStore.getEntry(_keyAlias, protectedParam);
            JCPPrivateKeyEntry keyEntry = (JCPPrivateKeyEntry) entry;
            privateKey = keyEntry.getPrivateKey();
            certificate = (X509Certificate) keyEntry.getCertificate();
*/
            privateKey = (PrivateKey) keyStore.getKey(_keyAlias, stringToChars(pin));
            certificate = (X509Certificate) keyStore.getCertificate(_keyAlias);
            // Отображение информации о ключе.
            if (privateKey == null || certificate == null)
            {
                throw new Exception("Private key or/and certificate is null.");
            } // if
            else
            {
                Log.i(TAG, "Certificate: " + certificate.getSubjectDN());
            } // else
            final String privateKeyAlgorithm = privateKey.getAlgorithm();
            String signAlgorithm = JCP.GOST_EL_SIGN_NAME; //mb GOST_SIGN_NAME
            if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_256_NAME))
            {
                signAlgorithm = JCP.GOST_SIGN_2012_256_NAME;
            }
            else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_256_NAME))
            {
                signAlgorithm = JCP.GOST_SIGN_DH_2012_256_NAME;
            }
            else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_EL_2012_512_NAME))
            {
                signAlgorithm = JCP.GOST_SIGN_2012_512_NAME;
            }
            else if (privateKeyAlgorithm.equalsIgnoreCase(JCP.GOST_DH_2012_512_NAME))
            {
                signAlgorithm = JCP.GOST_SIGN_DH_2012_512_NAME;
            }
            Log.i(TAG, "Init Signature: " + signAlgorithm);
            Signature sn = Signature.getInstance(signAlgorithm, JCSP.PROVIDER_NAME);
            Log.i(TAG, "Init signature by private key: " + privateKey);
            sn.initSign(privateKey);
            sn.update(data);
            // Формируем подпись.
            sign = sn.sign();
        } catch (SignatureException e)
        {
            e.printStackTrace();
        } catch (InvalidKeyException e)
        {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        } catch (NoSuchProviderException e)
        {
            e.printStackTrace();
        } catch (CertificateException e)
        {
            e.printStackTrace();
        } catch (UnrecoverableEntryException e)
        {
            e.printStackTrace();
        } catch (KeyStoreException e)
        {
            e.printStackTrace();
        } catch (IOException e)
        {
            e.printStackTrace();
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return Base64.encodeToString(sign, Base64.DEFAULT);
    }
Дамп 
 
 Код:
01-23 17:49:06.704: INFO/DEBUG(16639): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-23 17:49:06.704: INFO/DEBUG(16639): Build fingerprint: 'samsung/espressorfxx/espressorf:4.1.2/JZO54K/P3100XXCLL2:user/release-keys'
01-23 17:49:06.704: INFO/DEBUG(16639): pid: 16916, tid: 16984, name: AsyncTask #4  >>> ru.example.jctest <<<
01-23 17:49:06.704: INFO/DEBUG(16639): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000014
01-23 17:49:06.868: INFO/DEBUG(16639): r0 00000000  r1 00000000  r2 41242d90  r3 4081fc98
01-23 17:49:06.868: INFO/DEBUG(16639): r4 00000000  r5 39f00009  r6 5f6063f8  r7 0000012d
01-23 17:49:06.868: INFO/DEBUG(16639): r8 00000000  r9 00000000  sl 00000000  fp 57cceae0
01-23 17:49:06.868: INFO/DEBUG(16639): ip 41242960  sp 5f606238  lr 407c4ec3  pc 407ce82a  cpsr 60000030
01-23 17:49:06.868: INFO/DEBUG(16639): d0  7470656378456569  d1  7574616e6769536f
01-23 17:49:06.868: INFO/DEBUG(16639): d2  776f646e69772f6e  d3  3b6e69505053433b
01-23 17:49:06.868: INFO/DEBUG(16639): d4  72646e612e72656b  d5  737070612e64696f
01-23 17:49:06.868: INFO/DEBUG(16639): d6  696f72646873732e  d7  3eaaaaab3f800000
01-23 17:49:06.868: INFO/DEBUG(16639): d8  0000000000000000  d9  0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d10 0000000000000000  d11 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d12 0000000000000000  d13 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d14 0000000000000000  d15 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d16 000000c141eae3a8  d17 000000c1423d6e88
01-23 17:49:06.868: INFO/DEBUG(16639): d18 0000000003d78d20  d19 0000000000000001
01-23 17:49:06.868: INFO/DEBUG(16639): d20 0000000000000000  d21 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d22 0000000000000000  d23 0000000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d24 3ff0000000000000  d25 3ff0000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d26 0000000000000000  d27 411ffcb800000000
01-23 17:49:06.868: INFO/DEBUG(16639): d28 8000000000000000  d29 3ff0000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): d30 3ff0000000000000  d31 3ff0000000000000
01-23 17:49:06.868: INFO/DEBUG(16639): scr 80000013
01-23 17:49:06.868: INFO/DEBUG(16639): backtrace:
01-23 17:49:06.868: INFO/DEBUG(16639): #00  pc 0005482a  /system/lib/libdvm.so (StringObject::utfLength() const+53)
01-23 17:49:06.868: INFO/DEBUG(16639): #01  pc 0004aebf  /system/lib/libdvm.so
01-23 17:49:06.868: INFO/DEBUG(16639): #02  pc 002502c0  /data/data/ru.cprocsp.ACSP/lib/libcspjni.so (JniQueryPin+572)
01-23 17:49:06.868: INFO/DEBUG(16639): stack:
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6061f8  00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6061fc  407c6885  /system/lib/libdvm.so
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606200  5f606210
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606204  5f606244
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606208  5f606234
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60620c  00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606210  5f60623c
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606214  39f00009
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606218  5f6063f8
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60621c  407c2ecd  /system/lib/libdvm.so
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606220  5f60623c
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606224  41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606228  00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60622c  39f00009
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606230  df0027ad
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606234  00000000
01-23 17:49:06.876: INFO/DEBUG(16639): #00  5f606238  41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): ........  ........
01-23 17:49:06.876: INFO/DEBUG(16639): #01  5f606238  41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60623c  41242940
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606240  5f606348
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606244  5ee082c4  /data/data/ru.cprocsp.ACSP/lib/libcspjni.so (JniQueryPin+576)
01-23 17:49:06.876: INFO/DEBUG(16639): #02  5f606248  00000002
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60624c  39f00009
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606250  ffffffff
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606254  57cce110  /dev/ashmem/dalvik-LinearAlloc (deleted)
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606258  5f4febac
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60625c  41242d90
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606260  00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606264  5f6063f8
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606268  5f606330
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60626c  5f606348
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606270  00000000
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606274  00000018
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606278  578cfee8
01-23 17:49:06.876: INFO/DEBUG(16639): 5f60627c  57824238
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606280  578242f0
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606284  5eebd76c  /data/data/ru.cprocsp.ACSP/lib/libcspjni.so (CPQueryPin+96)
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r2:
01-23 17:49:06.876: INFO/DEBUG(16639): 41242d70 00000000 00000000 00000000 00000000  ................
01-23 17:49:06.876: INFO/DEBUG(16639): 41242d80 00000000 00000000 00000005 0000002b  ............+...
01-23 17:49:06.876: INFO/DEBUG(16639): 41242d90 4081ddd8 00000000 00000011 41242940  ...@........@)$A
01-23 17:49:06.876: INFO/DEBUG(16639): 41242da0 00000000 5788c9d0 5788d0c8 00000000  .......W...W....
01-23 17:49:06.876: INFO/DEBUG(16639): 41242db0 00000028 0000003b 00000000 40f9f128  (...;.......(..@
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r3:
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fc78 407a1dfc 407a1e88 407a1efc 407a1f38  ..z@..z@..z@8.z@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fc88 407cc061 407ce9b5 407e5351 407e1651  a.|@..|@QS~@Q.~@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fc98 00000000 00000000 00000000 400cd02d  ............-..@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fca8 400c0748 400bfe44 400bf9b8 400bfa94  H..@D..@...@...@
01-23 17:49:06.876: INFO/DEBUG(16639): 4081fcb8 400c0ba4 401068dc 40106538 401139f4  ...@.h.@8e.@.9.@
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r5:
01-23 17:49:06.876: INFO/DEBUG(16639): 39efffe8 ffffffff ffffffff ffffffff ffffffff  ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39effff8 ffffffff ffffffff ffffffff ffffffff  ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39f00008 ffffffff ffffffff ffffffff ffffffff  ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39f00018 ffffffff ffffffff ffffffff ffffffff  ................
01-23 17:49:06.876: INFO/DEBUG(16639): 39f00028 ffffffff ffffffff ffffffff ffffffff  ................
01-23 17:49:06.876: INFO/DEBUG(16639): memory near r6:
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6063d8 79724320 506f7470 43206f72 65205053   CryptoPro CSP e
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6063e8 72697078 69207365 006c206e 00000000  xpires in l.....
01-23 17:49:06.876: INFO/DEBUG(16639): 5f6063f8 00000000 00000000 00000000 00000000  ................
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606408 00000000 00000000 00000000 00000000  ................
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606418 00000000 00000000 00000000 00000000  ................
01-23 17:49:06.876: INFO/DEBUG(16639): memory near fp:
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceac0 000005db 5dcfe9ee 5dc40f38 00000000  .......]8..]....
01-23 17:49:06.876: INFO/DEBUG(16639): 57ccead0 00000000 00000000 5ddc7b87 00000000  .........{.]....
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceae0 424cc7c0 00000001 0002007a 00010002  ..LB....z.......
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceaf0 5dd23db2 4121e918 00000019 5dccad8d  .=.]..!A.......]
01-23 17:49:06.876: INFO/DEBUG(16639): 57cceb00 5dc40f4c 00000000 00000000 00000000  L..]............
01-23 17:49:06.876: INFO/DEBUG(16639): memory near ip:
01-23 17:49:06.876: INFO/DEBUG(16639): 41242940 5dc3daae 57834ca8 57ccd470 415cc000  ...].L.Wp..W..\A
01-23 17:49:06.876: INFO/DEBUG(16639): 41242950 42314cd0 00000007 5f606da8 00000000  .L1B.....m`_....
01-23 17:49:06.876: INFO/DEBUG(16639): 41242960 5f606ddc 00000011 00010008 4079cec0  .m`_..........y@
01-23 17:49:06.876: INFO/DEBUG(16639): 41242970 00000000 00000000 56ddf070 57831300  ........p..V...W
01-23 17:49:06.876: INFO/DEBUG(16639): 41242980 00000000 42356440 00000000 00004000  ....@d5B.....@..
01-23 17:49:06.876: INFO/DEBUG(16639): memory near sp:
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606218 5f6063f8 407c2ecd 5f60623c 41242d90  .c`_..|@<b`_.-$A
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606228 00000000 39f00009 df0027ad 00000000  .......9.'......
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606238 41242d90 41242940 5f606348 5ee082c4  .-$A@)$AHc`_...^
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606248 00000002 39f00009 ffffffff 57cce110  .......9.......W
01-23 17:49:06.876: INFO/DEBUG(16639): 5f606258 5f4febac 41242d90 00000000 5f6063f8  ..O_.-$A.....c`_
01-23 17:49:06.876: INFO/DEBUG(16639): code around pc:
01-23 17:49:06.876: INFO/DEBUG(16639): 407ce808 f832e00b 1e4d1b02 d9052d7e d90142a1  ..2...M.~-...B..
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce818 e0023003 e0003002 f1133001 d2f033ff  .0...0...0...3..
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce828 6940bd30 68834770 33106900 0040eb03  0.@ipG.h.i.3..@.
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce838 b5704770 4614460d f7ff461e 4622fff4  pGp..F.F.F...."F
01-23 17:49:06.884: INFO/DEBUG(16639): 407ce848 0145eb00 e8bd4630 f7ff4070 b530be97  ..E.0F..p@....0.
01-23 17:49:06.884: INFO/DEBUG(16639): code around lr:
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ea0 f81cf7fe bd3e4620 b5134603 a801460c  .... F>..F...F..
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4eb0 f7fd4619 4621ffef f7fe9801 f009ffe7  .F....!F........
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ec0 4604fcb4 f7fea801 4620f809 b537bd1c  ...F...... F..7.
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ed0 46144601 461da801 ffdcf7fd 462968e3  .F.F...F.....h)F
01-23 17:49:06.884: INFO/DEBUG(16639): 407c4ee0 065b9801 f7fed507 f3bfffd1 61208f5e  ..[.........^. a
01-23 17:49:07.071: INFO/BootReceiver(358): Copying /data/tombstones/tombstone_02 to DropBox (SYSTEM_TOMBSTONE)
Также keyStore.getKey  либо keyStore.getEntry  выполняются ОЧЕНЬ долго | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Сотрудник
 Группы готовые для захвата: Участники
 Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,064  Откуда: Крипто-ПроСказал(а) «Спасибо»: 21 разПоблагодарили: 740 раз в 698 постах
 
 | 
            
		      
                Добрый день.Что возвращает stringToChars?
 | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 09.01.2014(UTC) Сообщений: 25  Откуда: МоскваСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                chars (без нуля) - сейчас проверю с финальным нулем | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 09.01.2014(UTC) Сообщений: 25  Откуда: МоскваСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Не помогло ни с +1 ни без него Код:
static public char[] stringToChars(String string)
    {
        int len = string.length();
        char[] chars = new char[len+1];
        string.getChars(0, string.length(), chars, 0);
        chars[len] = 0;
        return chars;
    }
 Также очень долго думает и потом падает Отредактировано пользователем 23 января 2014 г. 19:46:35(UTC)
 | Причина: Дополнение | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы готовые для захвата: Участники
 Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,064  Откуда: Крипто-ПроСказал(а) «Спасибо»: 21 разПоблагодарили: 740 раз в 698 постах
 
 | 
            
		      
                А в самом demo-приложении примеры работают? | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 09.01.2014(UTC) Сообщений: 25  Откуда: МоскваСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                В демо-приложении нет настройки об отключении пинкода. При включенном пинкоде - работает. | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы готовые для захвата: Участники
 Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,064  Откуда: Крипто-ПроСказал(а) «Спасибо»: 21 разПоблагодарили: 740 раз в 698 постах
 
 | 
            
		      
                Если пароль на контейнер не установлен, то попробуйте передать null (store.getKey(alias, null)). Если использовать getKey(alias, null) - окно ввода пин-кода появляется? Какой алиас вашего ключа? Отредактировано пользователем 24 января 2014 г. 12:54:32(UTC)
 | Причина: Не указана | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 09.01.2014(UTC) Сообщений: 25  Откуда: МоскваСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Один алиас для всего Код:
private final String _keyAlias = "keySt";
 Нельзя же сохранить приватный ключ с нулевым пинкодом? Или вы про пароль к контейнеру, который передается в keyStore.load(null,null) | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
        
            
            
    | 
	Статус: Сотрудник
 Группы готовые для захвата: Участники
 Зарегистрирован: 06.12.2008(UTC) Сообщений: 4,064  Откуда: Крипто-ПроСказал(а) «Спасибо»: 21 разПоблагодарили: 740 раз в 698 постах
 
 | 
            
		      
                Я про то, что если вызывать store.getKey(), то пароль не важен - должно появиться окно для ввода пин-кода (в функцию можно передать null вместо пароля); если использовать store.getEntry(), то можно передать пароль, и окно для ввода пин-кода не появится. Можно сохранить контейнер без пароля: если не задать его в окне ввода пин-кода при сохранении с помощью setKeyEntry() либо если не задать его в параметрах при сохранении с помощью setEntry(). Отредактировано пользователем 24 января 2014 г. 16:47:42(UTC)
 | Причина: Не указана | 
|  | 
    | 
             | 
            
         | 
    |  | 
        
        
        
            
        
            
            
    | 
	Статус: Участник
 Группы: Участники
 Зарегистрирован: 09.01.2014(UTC) Сообщений: 25  Откуда: МоскваСказал(а) «Спасибо»: 1 раз
 | 
            
		      
                Когда я вызываю store.getKey(alias, null) - я после ОЧЕНЬ ПРОДОЛЖИТЕЛЬНОГО (3 минуты) ожидания получаю ключ, а после вызова store.getEntry(alias, null) - получаю объект, java.security.KeyStore$TrustedCertificateEntry, который не конвертится к JCPPrivateKeyEntry как указано в примерах.
 
 попытка использовать (полученый через getKey) ключ для подписи - вызывает падение и дамп модуля JNI
 | 
    | 
             | 
            
         | 
    |  | 
        
        
        
    
	                           
	
    
        Быстрый переход
         
	
    
    Вы не можете создавать новые темы в этом форуме.
	
	Вы не можете отвечать в этом форуме.
	
	Вы не можете удалять Ваши сообщения в этом форуме.
	
	Вы не можете редактировать Ваши сообщения в этом форуме.
	
	Вы не можете создавать опросы в этом форуме.
	
	Вы не можете голосовать в этом форуме.
	
	
    
    
        Important Information:
        The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
        
        
More Details
        Close