Coder Social home page Coder Social logo

crypto's Introduction

Pure Javascript implementation of WebCrypto API interfaces and Public Key Infrastructure for GOST algorithms (Russian Cryptographic Standards)

Documentation, demonstartion, examples, references:

http://gostcrypto.com

Copyright (c) 2014-2016, Rudolf Nickolaev. All rights reserved.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

crypto's People

Contributors

rudonick avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

crypto's Issues

КриптоПро импорт PFX файл ошибка "Algorithm not supported"

Создал здесь https://www.cryptopro.ru/certsrv/certrqma.asp сертификат 34.10-2012 CSP
Установил его.
Протестировал на C# через CryptoPro.NET, работает.

Попытался на демо http://gostcrypto.com/demo-cp-keys.html
импортировать pfx файл с приватным ключом, выдает ошибку "Algorithm not supported".
В ASN.1 Data вижу вот такую строку OBJECT IDENTIFIER pbeUnknownGost (1.2.840.113549.1.12.1.80)

Ошибка хэш-кода

Здравствуйте. Кажется обнаружил ошибку работы библиотеки.

Суть ошибки: Не выполняется условие H(M) = H(D(E(M))), где M - сообщение; H - хэш-функция ГОСТ Р 34.11-2012; E/D - шифрование/дешифрования по алгоритму ГОСТ Р 34.12.2015 CBC.

В режиме OFB, условие выполняется!
Ниже приведен снимок экрана, и программный стенд на котором можно посмотреть - NetBeans.
screenshot
AcoCryptJS.zip

Load CryptoPro public.cer: gost.cert.X509(cer) - Error: Algorithm not supported

Do not load the public certificate CryptoPro. I want to make signature CMS.
http://gostcrypto.com/pki-sign.html

Why is it not working?

-----BEGIN CERTIFICATE-----
MIIHFjCCBsWgAwIBAgIKTMUyyAAAAAADVDAIBgYqhQMCAgMwggFGMRgwFgYFKoUD
ZAESDTEyMzQ1Njc4OTAxMjMxGjAYBggqhQMDgQMBARIMMDAxMjM0NTY3ODkwMSkw
JwYDVQQJDCDQodGD0YnQtdCy0YHQutC40Lkg0LLQsNC7INC0LiAyNjEXMBUGCSqG
SIb3DQEJARYIY2FAcnQucnUxCzAJBgNVBAYTAlJVMRgwFgYDVQQIDA83NyDQnNC+
0YHQutCy0LAxFTATBgNVBAcMDNCc0L7RgdC60LLQsDEkMCIGA1UECgwb0J7QkNCe
INCg0L7RgdGC0LXQu9C10LrQvtC8MTAwLgYDVQQLDCfQo9C00L7RgdGC0L7QstC1
0YDRj9GO0YnQuNC5INGG0LXQvdGC0YAxNDAyBgNVBAMMK9Ci0LXRgdGC0L7QstGL
0Lkg0KPQpiDQoNCi0JogKNCg0KLQm9Cw0LHRgSkwHhcNMTYwNTE2MDYzODAwWhcN
MTcwNTE2MDY0ODAwWjCBxTEYMBYGBSqFA2QBEg0xMDk3NzQ2NDA1Nzc4MRowGAYI
KoUDA4EDAQESDDAwNzcyMDY2MzM0MDELMAkGA1UEBhMCUlUxGzAZBgNVBAgeEgA3
ADcAIAQcBD4EQQQ6BDIEMDEVMBMGA1UEBx4MBBwEPgRBBDoEMgQwMSkwJwYDVQQK
HiAEHgQeBB4AIACrBCEEHgQaBB4AIAQTBEAEQwQ/BD8AuzEhMB8GA1UEAx4YAEIA
YQBuAGsAQQBQAEkAIAQhBBwELQQSMGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqF
AwICHgEDQwAEQJELiGAiQWONeWaHl7teYB7otIhWfOteSINqhQfcRbfq7tCRo3Bq
MVzm21f59w++C3CcR4oy7A8lXJgaSbMEEDqjggQPMIIECzAOBgNVHQ8BAf8EBAMC
BPAwJgYDVR0lBB8wHQYIKwYBBQUHAwQGByqFAwICIgYGCCsGAQUFBwMCMB0GA1Ud
DgQWBBQHaa7OM0HilZl9ASZvnxZataaD+zCCAYcGA1UdIwSCAX4wggF6gBRBsswy
nDh/Lf2MhhVYI2IKd/Us/6GCAU6kggFKMIIBRjEYMBYGBSqFA2QBEg0xMjM0NTY3
ODkwMTIzMRowGAYIKoUDA4EDAQESDDAwMTIzNDU2Nzg5MDEpMCcGA1UECQwg0KHR
g9GJ0LXQstGB0LrQuNC5INCy0LDQuyDQtC4gMjYxFzAVBgkqhkiG9w0BCQEWCGNh
QHJ0LnJ1MQswCQYDVQQGEwJSVTEYMBYGA1UECAwPNzcg0JzQvtGB0LrQstCwMRUw
EwYDVQQHDAzQnNC+0YHQutCy0LAxJDAiBgNVBAoMG9Ce0JDQniDQoNC+0YHRgtC1
0LvQtdC60L7QvDEwMC4GA1UECwwn0KPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQ
uSDRhtC10L3RgtGAMTQwMgYDVQQDDCvQotC10YHRgtC+0LLRi9C5INCj0KYg0KDQ
otCaICjQoNCi0JvQsNCx0YEpghADrsxomk54tEIvZVLuBT+DMGgGA1UdHwRhMF8w
XaBboFmGV2h0dHA6Ly9jZXJ0ZW5yb2xsLnRlc3QuZ29zdXNsdWdpLnJ1L3JhL2Nk
cC80MWIyY2MzMjljMzg3ZjJkZmQ4Yzg2MTU1ODIzNjIwYTc3ZjUyY2ZmLmNybDBZ
BggrBgEFBQcBAQRNMEswSQYIKwYBBQUHMAKGPWh0dHA6Ly9jZXJ0ZW5yb2xsLnRl
c3QuZ29zdXNsdWdpLnJ1L3JhL2NkcC90ZXN0X2NhX3J0bGFicy5jZXIwNgYFKoUD
ZG8ELQwrItCa0YDQuNC/0YLQvtCf0YDQviBDU1AiICjQstC10YDRgdC40Y8gMy42
KTArBgNVHRAEJDAigA8yMDE2MDUxNjA2MzgwMFqBDzIwMTcwNTE2MDYzODAwWjAd
BgNVHSAEFjAUMAgGBiqFA2RxATAIBgYqhQNkcQIwgd0GBSqFA2RwBIHTMIHQDCsi
0JrRgNC40L/RgtC+0J/RgNC+IENTUCIgKNCy0LXRgNGB0LjRjyAzLjYpDFMi0KPQ
tNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAICLQmtGA0LjQv9GC
0L7Qn9GA0L4g0KPQpiIg0LLQtdGA0YHQuNC4IDEuNQwl4oSWINCh0KQvMTI0LTIy
Mzgg0L7RgiAwNC4xMC4yMDEzINCzLgwl4oSWINCh0KQvMTI4LTIzNTIg0L7RgiAx
NS4wNC4yMDE0INCzLjAIBgYqhQMCAgMDQQAaiJ8c6cMj4OcmFYLeyIUitqH1J9Ic
OETy8R1L83saJlIXpt9gKtGfgcFZEfRaIGCYkxBAwJcv9KTLHhbG/Vm4
-----END CERTIFICATE-----

How to get correct signature

Hi,

I'm trying to sign string using gostcrypt, but it does not work as expected. Here is an example:

const SIGNATURE = gostEngine.getGostSign({
    name: 'GOST R 34.10',
    version: 2001
});
const KEY = gostCoding.PEM.decode(signingKey.exchangeKey);

let res = SIGNATURE.sign(KEY, new Buffer(textString));

The problem is that that I can't verify the signature using CryptoPro tools.

They private key is taken from the CryptoPro container and CryptoPro builds correct signature for the same text.

csptest -keyset -sign GOST -in text -out text.bin -container '\\.\HDIMAGE\TEST' -keytype exchange

Is there anything I can tweak in the code to make valid (recognizable) signature?

Ошибка в функции нормализации алгоритмов

При попытке создать новый ключ из Мастер ключа с помощью gostCrypto.subtle.deriveKey() столкнулся с ошибкой.
Сначала импортируется Мастер ключ с помощью importKey:

const MasterKeyImported = await new gostCrypto.subtle.importKey(
        'raw',
        master_key,
        {
            name: 'GOST R 34.11',
            mode: 'KDF',
            label: new ArrayBuffer(0),
            context: new ArrayBuffer(0)},
        true,
        ['deriveKey']
    );

После чего произовдится формирование нового ключа:

const newKey = await new gostCrypto.subtle.deriveKey(
        {
            name: 'GOST R 34.11',
            mode: 'KDF',
            context: new ArrayBuffer(0)
        },
        MasterKeyImported,
        {
            name: 'GOST R 34.12',
            version: 2015,
            length: 256,
            block: 'CBC',
            padding: 'PKCS7'
        },
        true,
        ['encrypt', 'decrypt']
    )

В процессе работы программы метод GostDigest.deriveBitsKDF выдает ошибку в функции buffer.
Сам экземпляр класса GostDigest выглядит следующим образом:

GostDigest {
  name: 'GOST R 34.11-12-256-KDF/CP',
  procreator: 'CP',
  bitLength: 256,
  digest: [Function (anonymous)],
  keySize: 32,
  deriveKey: [Function: deriveKey],
  deriveBits: [Function: deriveBitsKDF],
  label: ArrayBuffer { [Uint8Contents]: <>, byteLength: 0 },
  context: undefined
}

Неопределенный тип параметра context указывает на ошибку при сборке экземпляра. Дебаг мод показал, что в функции normalize содержится опечатка, которая не дает параметру context инициализироваться:

algorithm.contex && (na.context = algorithm.contex);

Прошу исправить такой досадный баг

КриптоПРО "Key buffer has wrong size 248 bit"

При попытке получить закрытый ключ функцией getPrivateKey(...) получаю сообщение "Key buffer has wrong size 248 bit"

Размер буфера у ключа почему-то равен 31, а не 32

image

About correctness of CTR mode implementation

From the processCTR89 function:

syn[0] = (syn[0] + 0x1010101) & 0xffffffff;
syn[1] = signed(unsigned((syn[1] + 0x1010104) & 0xffffffff) % 0xffffffff);

It seems that you have an error while doing with the C2 (0x01010104) constant here. GOST says that:

a + b (mod 2^32) ::= { a + b, if (a + b) < 2^32; a + b - 2^32, elsewhere }
a + b (mod 2^32 - 1) ::= { a + b, if (a + b) < 2^32; a + b - 2^32 + 1, elsewhere }

So, the valid code may looks like that:

syn[0] = (syn[0] + 0x1010101) & 0xffffffff;
tmp = syn[1] + 0x1010104;
syn[1] = (tmp & 0xffffffff) + (tmp >> 32);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.