csob/platebnibrana

DecodeRSAPrivateKey vyhazuje CryptographicException : 'Bad Data.'

agisofts opened this issue · 7 comments

Dobrý den,
.NET implementace CsobGatewayClientExample vyhazuje CryptographicException : 'Bad Data.'.

Crypto.cs -> DecodeRSAPrivateKey -> RSA.ImportParameters(RSAparams);
System.Security.Cryptography.CryptographicException: 'Bad Data.'

Vygeneroval jsem 3 private keys, dva vyhazuji {"resultCode":110,"resultMessage":"Wrong signature"} a třetí crypto error.
Da se s tim neco dělat?

Dekuji moc
rsa_A4302pxyVp

Dobrý den,
lze prosím uvést ID platební brány popřípadě čas ve kterém akce proběhly?

Děkuji

Nevim jake je ID platebni brany.
GatewayUrl = "https://iapi.iplatebnibrana.csob.cz/api/v1.9"
MerchantId a private key je v priloze (.jpg premenovat na .key).
MipsPublicKey = "./config/mips_iplatebnibrana.csob.cz.pub" z gitu.

Akce probehly 30.9.2023 priblizne o 20:55.
Crypto error nema nic spolecne se sandboxem. Tam je problem bud ve vygenerovanem private key nebo v dekodovani private key (na strane merchanta). Zdrojaky jsou z gitu.

mjanek commented

Dobrý den,
požadavek jsem předal odpovědnému kolegovi k prověření.
M. Janek

Dobrý den,

dle přílohy u prvního požadavku by se mělo jednat o anonymní Merchant ID A4302pxyVp. Pro toto Merchant ID vidím v databázi vygenerován klíč. K této platební bráně v databázi další pokusy o přegenerování klíčů nevidím. Domnívám se tedy, že z Vaší strany mohlo dojít k vytvoření dalších anonymních Merchant ID, které však neznáme.

U Merchant ID A4302pxyVp v logu nevidím ani žádný pokus o inicializaci transakce.

Pokud se u pokusu na inicializaci vrací Wrong signature - 110, je vhodné zkontrolovat zda:

  • používáte správný šifrovací algoritmus (pro eAPI ve verzi 1.8 a vyšší - SHA256withRSA)
  • používáte správný klíč pro šifrování (hlavně pokud došlo k několika pokusům)
  • zasílané data v řetězci pro podpis jsou ve správném pořadí (parametry pro podpis by měly být ve stejném pořadí jako jsou uvedeny v dokumentaci)
  • hodnoty zasílané v STRINGU pro podpis jsou totožné s hodnotami v JSON

Pokud by bylo potřebné další detailnější prověření, poprosím Vás o zaslání Merchant ID, celého požadavku společně s URL adresou a přesným časem pokusu na e-mail servis@monetplus.cz.


Jana Grmelová
IT administrátor

Hello,
did you manage to solve it? I have the same error. After generating the production key, the signing algorithm gives me an error in the C# implementation.

The error is in the DecodeRSAPrivateKey(byte[] privkey) procedure, which throws a "Bad Data" exception.
The program is thus terminated before any call to the endpoint.

image

Hi,
The problem was solved by using BouncyCastle in Crypto.cs

static RSACryptoServiceProvider LoadRSACryptoServiceProvider(string privateKeyFilePath)
{
    // Načtení obsahu souboru
    Console.WriteLine("Read key: " + privateKeyFilePath);

    string privateKeyText = File.ReadAllText(privateKeyFilePath);
    TextReader privateKeyTextReader = new StringReader(privateKeyText);
    PemReader pemReader = new PemReader(privateKeyTextReader);
    AsymmetricCipherKeyPair keyPair = (AsymmetricCipherKeyPair)pemReader.ReadObject();

    RSAParameters rsaParameters = DotNetUtilities.ToRSAParameters((RsaPrivateCrtKeyParameters)keyPair.Private);
    RSACryptoServiceProvider rsaCryptoServiceProvider = new RSACryptoServiceProvider();
    rsaCryptoServiceProvider.ImportParameters(rsaParameters);
    
    
    return rsaCryptoServiceProvider;
}

and next using in Sign(string inputData):

System.Security.Cryptography.RSACryptoServiceProvider rsaCryptoServiceProvider = LoadRSACryptoServiceProvider("rsa_key_path"))